查看原文
其他

Unity 5.3中的GGX着色器

2016-01-27 Unity官方平台
在Unity 5.3的标准着色器中,我们改为使用GGX来实现BRDF,来进行点光源和平行光等光源的光照计算,当然也可以计算基于图像的光照。此外,我们彻底修改了立方体贴图的卷积计算,使其能够以较少的执行时间达到精确无噪点的结果,这项功能将在Unity 5.4中实现。GGX与标准化的Phong模型最大的区别,在于GGX所拥有的微表面分布图,有着更高更窄的峰值,且紧随着更大的长尾,如下图所示。
这个区别给最后的光照效果带来的结果就是:GGX具有更亮的高光部分并在其周围蔓延着光晕,给人以更加真实的视觉效果。

如下图所示:
GGX与传统的标准化Phong光照对比

在学术界基于物理的BRDF光照模型一般用roughness(粗糙度)这个参数来控制微平面分布函数,而roughness被定义为分布函数的均方根斜率。


人们有一个常见的误解是认为在CG中使用的粗糙度贴图和学术上所说的roughness是一回事。之所以学术上的roughness没被用在纹理贴图或者是使用滑块控制是因为它的“粗糙度”并不是均匀分布的,导致难以操作,并且纹理贴图的有限位精度难以达到比较好的效果。

为了避免误解,Unity使用smoothness(平滑度)而不用roughness这个字眼,smoothness在shader中会使用公式(1-smoothness)^2来转换为学术上的roughness参数。通过这个转化,我们得到的分布和roughness一样,只是刚好颠倒了一下,也就是说0.0对应于最粗糙的表面而1.0对应于最光滑的表面。我们认为这样的对应方式给人的感觉更为直观。
这样一个标准化的分布方式最大的意义,在于我们可以在Unity中导入使用其它外部工具制作的材质,并在Unity中实现非常接近的效果。

因为如今业界大部分的CG绘制工具都支持smoothness贴图。不过要知道的一点是这样并不能保证可以达到一模一样的效果,但是可以肯定的是,漫反射光与高光的比例以及整体的高光模糊度都会是非常接近的。

下图是由Allegorithmic公司提供的Unity 5与业界知名CG软件Substance的效果对比图。从下图中,我们可以看到两者的视觉效果是非常相似的。


Unity 5.4中的改进
在Unity 5.4中我们将改进立方体贴图卷积计算的实现,以为基于图像的光照计算(IBL)达到一个无噪点的视觉效果。

如下图所示,我们展示了在Unity 5.4中一个球体的光照与传统的路径跟踪方法的效果比较。
对于传统的路径跟踪算法,即使每个像素运行了50000次的光追踪,最终的光照还是带有大量的噪点。究其原因,路径跟踪算法在进行BRDF重要性采样的时候,对于环境贴图中类似太阳这样的奇点有着天然的缺陷。该问题在Unity 5.4版本中已经得到解决,并且立方体贴图的离线卷积计算相对Unity 5.2 加快了近两倍的速度。

关于GGX着色器就介绍到这里,若想了解更多Unity技术文章,请访问Unity中文官方社区!



点击原文,阅读更多Unity技术文章!


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存