DeferredLight的动态纹理映射和阴影效果

DeferredLight的动态纹理映射和阴影效果

在 Unity3d 中unity 纹理投影映射,我们可以使用 Deferred Light 快速高效地实现多光源的动态纹理映射和阴影效果。Deferred Light 一般与相机有关。我们可以将相机中的渲染路径设置为延迟光。当然,我们也可以在 Build Settings 下的 Player Settings 中将默认的 Rendering Path 设置为 Deferred Light。在延迟光照的情况下,所有光照都是按像素计算的,并与法线贴图正确交互。所有灯光都有自己的 cookie 和阴影。因为它计算每个像素的光照,所以图形不像顶点着色那样参差不齐和不切实际。使用 Deferred Lights 的效果取决于受光源影响的对象数量,而不是场景的复杂程度。小面积点灯或聚光灯氛围,或者光源被部分或完全遮挡,可以很好的降低性能开销。带阴影的光源更昂贵。在延迟渲染中unity 纹理投影映射,受投影光源影响且可以投影的对象仍会针对影响它们的每个投影光源进行计算。有阴影的光照着色器也肯定比没有阴影更昂贵。而且,Deferred Light 不支持抗锯齿和半透明物体(半透明物体使用 Forward Rendering 渲染路径)。有阴影的光照着色器也肯定比没有阴影更昂贵。而且,Deferred Light 不支持抗锯齿和半透明物体(半透明物体使用 Forward Rendering 渲染路径)。有阴影的光照着色器也肯定比没有阴影更昂贵。而且,Deferred Light 不支持抗锯齿和半透明物体(半透明物体使用 Forward Rendering 渲染路径)。

unity 纹理投影映射_凹凸纹理映射_法向凹凸纹理映射

1、Base Pass:首先计算屏幕空间缓冲信息:depth、normal、specular power;

法向凹凸纹理映射_unity 纹理投影映射_凹凸纹理映射

2.Lighting pass:使用上述缓冲区信息计算其他缓冲区的光照;

凹凸纹理映射_unity 纹理投影映射_法向凹凸纹理映射

3.Final pass:再次渲染物体,将上面计算的光照和纹理与环境光/自发光等混合在一起,如果物体的shader不能用light prepass处理3D植物,就用forward处理渲染。

unity 纹理投影映射_法向凹凸纹理映射_凹凸纹理映射

Base Pass 在此 pass 中首先渲染对象,并将视图空间的法线和镜面反射强度存储在 ARGB32 渲染纹理中。法线使用 agb 通道,高光使用 a 通道​​。Base Pass 的结果是用场景信息和渲染纹理填充 z 缓冲区。Lighting Pass Lighting Pass 通过深度、法线和镜面反射功率计算光照。光照是在屏幕空间中计算的,因此计算所需的成本和时间不取决于场景的复杂程度。光缓冲信息存储在 ARGB32 渲染纹理中,其中包括 rgb 通道中的漫反射光和 a 通道​​中的高光强度。光照值通过对数编码可以有更好的动态范围。当相机的 HDR 选项被选中时,光缓冲信息为 ARGBHalf 格式,并且不使用对数编码。final pass 再次完全渲染所有对象,获得光照并与纹理和环境光混合。光照贴图也用于最终通道。实时光照在相机靠近的地方完成,只烘焙间接光照。相机远的地方,光线都烤好了。

法向凹凸纹理映射_凹凸纹理映射_unity 纹理投影映射

参考博客:Unity5新旧延迟渲染的延迟光照渲染路径