Unity 5.3中的GGX着色器
在Unity 5.3的标准着色器中,我们采用GGX来实现双向反射分布函数(BRDF),用于点光源、平行光等光源的光照计算,同时也能进行基于图像的光照计算。此外,我们对立方体贴图的卷积计算进行了彻底修改,使其能够在较短的执行时间内达到精确且无噪点的结果,该功能将在Unity 5.4中实现。
GGX与标准化Phong模型的区别
GGX与标准化的Phong模型的最大差异在于,GGX的微表面分布图具有更高更窄的峰值,并且紧随其后的是更大的长尾。这种区别给最终光照效果带来的影响是,GGX具有更亮的高光部分,且在其周围蔓延着光晕,能呈现出更加真实的视觉效果。
粗糙度与平滑度参数
在学术界,基于物理的BRDF光照模型通常使用“roughness(粗糙度)”参数来控制微平面分布函数,roughness被定义为分布函数的均方根斜率。人们常见的一个误解是,认为计算机图形学(CG)中使用的粗糙度贴图与学术上的roughness是同一概念。实际上,学术上的roughness未被用于纹理贴图或通过滑块控制,原因在于其“粗糙度”并非均匀分布,操作难度较大,而且纹理贴图的有限位精度难以达到理想效果。
为避免这种误解,Unity采用“smoothness(平滑度)”而非“roughness”。在着色器中,smoothness会通过公式“(1 - smoothness)^2”转换为学术上的roughness参数。通过这种转换,得到的分布与使用roughness时相同,只是刚好相反,即0.0对应最粗糙的表面,1.0对应最光滑的表面。我们认为这种对应方式更加直观。
这种标准化的分布方式的重要意义在于,我们可以在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加快了近两倍。
来源:Unity官方社区