【GAMES104】 渲染的其他内容

一、环境光遮蔽

环境光遮蔽(Ambient Occlution),简单点说,就是一个取样点上被其他几何体覆盖的程度,它是被通常用来模拟全局光照效果的简单方法。

1、SSAO

最简单的方法就是SSAO(Screen Space Ambient Occlution),他的思想很简单,就是我们视线相交的点,以这个点为圆心在一定范围内采样多个点,将这些点到视线的距离与z-buffer比较得到不可见点的数目,这样我们就知道可被遮挡光的比例,按照这个比例去减弱光强。那么进一步我们实际上只要计算半球面,所以有了SSAO+的算法,就是以法线方向作半球面再进行SSAO。

【GAMES104】 渲染的其他内容_第1张图片

2、HBAO

当然简单算法也有它的问题。这里提到另一个算法,HBAO(Horizon-based Ambient Occlution),这个算法的核心思想就是根据附近遮挡的仰角高度去积分计算遮挡百分比,这里有一个attenuation function就是要判断仰角遮挡物与当前点的距离,如果过远就置零不去计算。

【GAMES104】 渲染的其他内容_第2张图片

3、GTAO

 实际上直射下来的光照贡献度和斜照的贡献度是不同的,基于解决这个问题,提出了GTAO(Ground Truth-based Ambient Occlution),并且这个算法拟合出了光照在表面弹射的性质。

【GAMES104】 渲染的其他内容_第3张图片 【GAMES104】 渲染的其他内容_第4张图片

 二、雾效

1、Depth Fog

 雾效最简单的方式就是Depth Fog,按照距离进行遮挡,其中最常用的就是二阶的指数型雾。

【GAMES104】 渲染的其他内容_第5张图片 【GAMES104】 渲染的其他内容_第6张图片

2、Height Fog 

此外,还有一种体积型的雾,这种雾是有一定高度的,当前高度在这个高度以下,值就是雾的值,当前高度在这个高度以上时,雾的值是指数降低的。在我们在雾外看雾内的东西,我们只能用Ray Marching的方法进行积分,雾的浓度值与通透值线性相关,可以直接将浓度作为通透值。

【GAMES104】 渲染的其他内容_第7张图片

3、Voxel-based Volumetric Fog

现在技术要求雾更加具有体积感视线类似于丁达尔效应的效果,Voxel-based Volumetric Fog这个算法将视锥进行体素化(Voxelize),在这些体素化的部分进行各种Marching的计算,之后以视场大小为基准进行存储。

【GAMES104】 渲染的其他内容_第8张图片

 三、抗锯齿

 抗锯齿(Anti-aliasing)是必要的,简单的办法的就按照实际物体占像素的比例去设置颜色。

1、SSAA & MSAA

基础的算法有SSAA(Super-sample AA),这种算法就是将原有分辨率增加一倍去计算当前像素的颜色占比,这样将会产生额外的z-buffer存储。MSAA(Multi-sample AA)做出了优化,每个像素有4个采样点,当像素在三角形中心(四个采样点相同)则只作一次shading,当像素在三角形边缘(四个采样点不同)则进行多次shading之后取比例。这个方法仍然需要四倍的buffer,但节省了shading的时间。

【GAMES104】 渲染的其他内容_第9张图片

 以上是两种远古的AA方式,但现在游戏一个像素之内已经可能有多个三角形,所以用以上两种方式进行AA是不好的。这里介绍了另外两种AA方式。

2、FXAA

快速估算的抗锯齿方法(Fast Approximate AA),不再使用更高精度的buffer去存储,而是对图像边缘进行插值。第一步是获得边界,就是先将图像投影到亮度空间,再进行十字形滤波,如果上下左右综合色差超过某个阈值的时候,则判断为边界点。

【GAMES104】 渲染的其他内容_第10张图片

 之后根据上下左右的像素插值确定颜色突变方向,与突变方向像素点形成一个像素对,对像素对取均值,根据相邻像素对均值可以计算出边缘长度。

【GAMES104】 渲染的其他内容_第11张图片

 之后根据当前像素对在边缘的位置,判断加权比例。

【GAMES104】 渲染的其他内容_第12张图片

 3、TAA

时域的抗锯齿(Temporal AA)主要思想是将过去帧与当前帧进行加权计算。

【GAMES104】 渲染的其他内容_第13张图片

 四、后处理

1、Bloom Effect

通俗来说就是发光物体的光晕效果。如何产生光晕效果,首先要取出发光的部分,即映射到亮度空间,取出大于某个阈值的部分。第二步进行一次高斯模糊,为了减少计算,我们先将图像降采样,降到一定程度进行blur,之后再与原图相加再上采样,这样避免用到较大的Kernel运算。最终我们将高斯模糊后的图与原图进行相加即可。

【GAMES104】 渲染的其他内容_第14张图片

 2、Tone Mapping

现在的画面基本都是HDR,也就是光直射的地方会特别亮,阴影的地方特别暗,所以我们需要一个曝光曲线将亮度限制在一个范围当中。 

【GAMES104】 渲染的其他内容_第15张图片

这里给出了一条 filmic s-curve tone-mapping 曲线,还有著名的ACES曲线。

 【GAMES104】 渲染的其他内容_第16张图片

 3、Color Grading

Color Grading是表达情绪的要点。在制作上是用了LUT的方法,即从一个颜色空间到另一个颜色空间的映射。

你可能感兴趣的:(games104,算法,游戏引擎)