ReferenceImage Shader
1. 描述
应用一个使用ReferenceImage Shader的材质到一个对象上,这会强制引擎不会以Shading和Post-processing效果来渲染这个物体。换句话说,对象会被以指定的颜色贴图来着色,而没有任何方式的纹理颜色的改变。
这个Shader被用来在比较一些资源内容与引擎输出结果时,以一张图像作为参考图来给物体着色。
例如请看下面的图像:
(图1,参考图向市一个海湾)
如果这张图像被放进编辑器(例如用一个盒子作为载体),并赋予了IIIum shader,一种不正确的输出将会发生,因为post-processing效果的关系,例如tone mapping和雾效。注意蓝色色彩的扭曲和亮度。
(图2,对参考图使用IIIum shader的效果)
另一方面 ReferenceImage shader可以准确的避免这个问题,并且准确的显示结果。
(图3,在这个截图中,参考图像通过使用ReferenceImage shader着色是正确的.)
2. sRGB
在CryEngine中颜色纹理(Diffuse texture)是被假定存储在sRGB色彩空间下的。这意味着先前纹理中存储的texels图元,它们的值会被一个Gamma矫正函数(大约是1/2.2)影响,事图像看起来更暗。由于个过程引擎将diffuse textures转换回线性空间(使他们重新亮起来)以符合原来的颜色。另一方面,象Normal bump map之类的纹理数据一开始就被存储在一个线性空间下所以这个纹理应用了ReferenceImage Shader结果看起来比原图更亮。
为了避免所有这些问题,一个特殊的预置资源编译器被创建,参考图预先被使用来转换任何图像到一个纹理,这样它会被引擎正确的加载同时保留原始的质量和色彩空间。
3. 细节
为了确保参考图没有被改动或被post-Processing效果影响。对象体会被插入到EFSLIST_AFTER_POSTPROCESS的渲染列表。为了做到这一点AfterHDRPostProcess和ForceDrawLast都会被在shader脚本中指定。