图形引擎通常需要支持不同的渲染效果,一个优秀的材质系统通常要支持多Pass渲染管线和自定义Shader模板,由于渲染效果的复杂多样性会导致Shader数量大幅增加,这样会造成Shader文件冗余,因此材质系统要提供一套Shader复用的机制。同时,市面上各硬件厂商对图形API的支持程度不同,受限于硬件水平的差异,材质系统也要兼容中低高端硬件。综上所述,通用材质系统需要满足以下需求:
多Technique:材质中包含多个实现方案,这样在进行高中低端机适配或实现不同材质效果时,我们可以方便进行材质更替。
多Pass:对于复杂绘制效果,单次绘制无法实现,常常包含多个Pass的渲染。
自定义Shader:减少Shader数量,提供Shader复用机制。
模板 + 实例:材质是一个模板,通过对某一个材质进行实例化,指定不同的数据和贴图,就可以让物体表现出不同的显示效果。优品拍怕
材质数据
材质描述了场景中物体与光照进行交互的过程,本质上它是指能够描述一个物体显示外观的一系列数据,它包括几个方面:
着色模型(Shading Model):着色器的组合,决定了材质的参数与光照参数如何被处理,从而合成最终的颜色。比如最基本的着色模式为:Surface Color = Diffuse + Specular + Emissive + Ambient。
渲染状态:比如剔除模式(正面、背面、不剔除),混合模式(开启,关闭),混合因子,深度测试,模板测试等。
混合模式(Blend Mode):决定了几何对象渲染完成后如何与场景中的其他物体进行叠加,混合模式会影响对象的绘制顺序,混合模式的渲染次序从先到后是:不透明(Opaque) > 蒙版(Masked) > 半透明(Translucent) > 叠加(Additive) > 相乘(Modulate)。
参数: Shader中使用到的Uniform参数,比如纹理贴图,采样器,颜色因子,相机参数,光源参数,Pass间的混合参数等。