Unity PBR渲染技术系列一

国庆假期终于空闲了,利用休息这段时间,把最近一直研究Unity的渲染技术成果给大家分享一下,目前,在游戏开发方面,两个职位比较火,一个是图形学程序,另一个是美术TA。这两个职位有个共同的特征就是需要掌握Shader编程。Unity官方提供了一些Shader的渲染比如Standard。但是这个远远不能满足程序开发需求。需要我们自己去开发一些Shader满足需求,很多人对写Shader都比较头疼,学习Shader有两种方式:一种是从原理开始学习,这需要学习者掌握数学知识,另外对固定流水线和可编程流水线熟练掌握,这二者会涉及到矩阵控件变换,很多人就在此卡住了;其实我们完全可以绕开这层,采用第二种学习方式就是走一个捷径,采用Shader工具比如Shader Forge和Shader Graph。为了能够快速的掌握PBR技术,在此建议读者学习Shader Graph,这个跟UE4的非常相似,其实通过工具的使用也是为了给美术TA和图形学编程者降低进入门槛。使用工具编程对Shader的基本语法还是要懂的,否则在连线过程中也会不知所措。下面我们就以渲染一个角色的皮质衣服为例给读者讲解如何制作?下面是效果图。
在这里插入图片描述
上图显示的裙子是皮质的效果,如果策划提了这个需求后,作为美术TA或者图形学编程者该如何实现?那我们就要分析这个效果需要哪些贴图实现了,Diffuse是必不可少的,我们的皮质衣服有亮度,而且亮度有明有暗,这个自然让人想到了法线的表现,两张贴图搞定了,剩下的就是皮质的体现了,我们看看Unity为我们提供了一个结构体,而且这个结构体我们可以自己定义,结构代码如下所示:


		struct SurfaceOutputCustomLightingCustom
		{
			half3 Albedo;
			half3 Normal;
			half3 Emission;
			half Metallic;
			half Smoothness;
			half Occlusion;
			half Alpha;
			Input SurfInput;
			UnityGIInput GIData;
		};

在这个结构体中,我们会使用Metallic和Smoothness两个参数,因为表示物体表面的反射率与光照的反射程度由Metallic和Smoothness来控制的。这样我们的渲染技术我们就分析完成了。两个参数对应的是两张贴图,一张用于表现Metallic,一种表现Smoothness。从优化角度讲,我们会将二者合并成一张贴图。这样我们只需要三张贴图就可以实现我们的皮质效果:一张是Albedo(diffuse),一张是Normal法线贴图,一张是Metallic和Smoothness合并的贴图。贴图问题解决了。
如下图所示:
在这里插入图片描述
下面我们就要通过Shader Grapth进行效果的渲染了。
第一步:把我们的贴图先在Shader Graph中表示出来,效果如下所示:
在这里插入图片描述
我们还是使用了Standard Surface Light,这样我们的贴图就全部用上了,这也是我们的核心部分,我们明白了原理直接连线就可以了。
第二步:针对PBR会用到一些算法比如Fresnel菲涅尔效果针对也是反射,这个Shader Graph也为我们实现好了,直接拿过来使用就可以了,如下图所示:
在这里插入图片描述
最后,我们需要把它们链接起来,这样我们的皮质渲染效果才能实现出来。当然少不了纹理的Mutiply相乘和纹理的叠加Add,以及Clamp和saturate函数的使用。最终我们的Shader如下所示:
在这里插入图片描述
另外,该Shader不仅能渲染皮质的,还能渲染布料的,二者的区别只是在贴图上,通过绘制的贴图改变,我们还可以做出布料的材质效果,Shader是跟上面提到的一样,实现效果如下所示:
在这里插入图片描述
所以Shader写好了后,通过改变材质,得出的效果是完全不一样的。很神奇吧?
总结
随着硬件的提升,玩家对游戏品质的要求越来越高,以前做游戏要求玩家的面数在1500个三角面片的时代已经过去了,现在需要的是次世代效果,面数在12000-15000之间。这些都对渲染提高了要求,PBR渲染技术对于游戏品质的提升起到了非常好的效果,掌握了PBR技术就掌握了次世代渲染技术。这个会通过一个系列给读者介绍。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章