一些图形学的概念介绍,个人摘抄或整理,作为个人文章的词条引用;
Pass:
将一组 Mesh/Parameter 输入转化为Pixel Output的过程,称做一个Pass;多Pass则是指将一组 Mesh/Parameter 输入在屏幕上Draw多次;
在Unity的Shaderlab中,我们经常会使用Pass{ }关键字为同一个材质声明多个RenderState不同的Pass实现一些效果,而在UE4中并没有在shader/材质层面做多Pass的支持;虽然有Layer,但并无法实现不同ShadingModel / RenderState计算结果的叠加,只是对MaterialParameter的计算结果做了混合;
多Pass的应用场景很多,比如外扩模型式描边;第一个Pass做正常的渲染,第二个Pass用BackfaceCull,DepthLess的RenderState设置,然后在VS中将顶点沿法线方向偏移;还有在渲染半透明物体时我们也会经常用到多Pass,比如半透明的物体一般不会写Depth,就会导致模型的内部和背面也被画出来, 造成显示乱序的效果;解决这个的方法是在第一个Pass中只写入Depth,不渲染任何像素,然后在第二个Pass中把RenderState设为DepthLEqual,这样就可以用DepthTest过滤掉我们不希望渲染出来的内部和背部了;其实多个Pass相当于给同一个Mesh不同的材质;