自定义灯光渲染
解码LDR颜色
增加独立Pass渲染光
支持方向光、点光源、聚光灯
手动采样阴影纹理
Unity 5.6.6f1
1 Light Shader
在G-Buffers填充完毕后,然后渲染光。本篇先介绍Unity是如何渲染光,以及实现自己Shader的光渲染。在Edit / Project Settings / Graphics 去掉默认的Shader。
1.1 Using a Custom Shader
每个deferred光都是在一个独立的Pass修改屏幕图像(后处理Image)完成渲染。创建一个Shader然后指定到Built-In shader settings
图1 修改内置的Shader
1.2 A Second Pass
修改之后,编辑器大量报错.
图2 least 2 passes
先简单复制第一个Pass解决错误,结果是屏幕内除了天空盒外所有物体被渲染成黑色了。这是因为使用了stencil-buffer。
报错的原因:为什么需要第二个Pass?
当HDR禁用时,光照数据会被使用对数编码计算,然后在(第二个)最终的pass解码该数据。所以必须要增加Pass。当禁用HDR时就能调用第二个Pass,但此时天空也变黑了。
1.3 Avoiding the Sky
当在LDR(HDR禁用)模式,天空变黑了。这是因为转换过程中没有正确使用stencil-buffer模板掩码。在第二个Pass配置:应该只渲染不属于背景的片段,可通过_StencilNonBackground提供适当的模板值。
Pass { Stencil { Ref[_StencilNonBackground] ReadMask[_StencilNonBackground] CompBack Equal CompFront Equal } }