Unity的渲染路径
现在的Unity渲染路径主要有两种:
1、前向渲染路径(Forward Randering Path)
2、延迟渲染路径(Deferred Rendering Path)
3、顶点照明渲染路径(残留,已被抛弃)
4、旧的延迟渲染路径
在大多数情况下,我们可以通过Edit->Project Settings->Player->Other Settings->Rendering->Path中选择需要渲染的路径,默认是前向渲染路径。
但是我们也可以在Camera中单独设置这个摄像机的渲染路径。
在Shader中,通过指定Pass中的LightMode标签来实现:
Pass{ Tags { "LightMode" = "ForwardBase" } ...
前向渲染路径
传统且常见的渲染方式。
原理:
Unity将各种光照按逐顶点处理、逐像素处理、球谐函数SH等方法计算出并混合。
至于怎么处理:
1. 最多有四个光源按逐顶点处理
2. 场景中最亮的平行光是逐像素处理的
3. 被设置成not important,会按逐顶点或SH处理
4. Important的会逐像素处理
5. 如果逐像素渲染的数量小于Quality Setting中的逐像素数量,则会有更多的光源进行逐像素处理
使用#pragma multi_compile_fwdbase这样的编译指令,可以让Pass生成所有需要的Shader变种。
延迟渲染路径
当场景之中包含大量光源的时候,前向渲染的性能会急速下降。所以需要延迟渲染。
延迟渲染使用了一个叫G-缓冲的缓冲区(G-Buffer)。
延迟渲染主要包含了两个Pass
1、在Pass1中,不进行任何光照计算,而仅仅计算哪些片元是可见的,通过深度缓冲技术,如果发现可见,则把它的相关信息存储到G-缓冲中。
2、在Pass2中,理由G-缓冲中的各种信息来进行真正的光照计算。
在Unity的延迟渲染中,每个光源都可以按照逐像素的方式进行处理,但也有缺点:
1. 不支持真正的抗锯齿功能
2. 不能处理半透明物体
3. 对显卡有一定要求
延迟渲染可以访问的内置变量:
_LightColor float4类型 光源的颜色
_LightMatrix0 float4x4类型 世界空间到光源空间的变换矩阵。可以用于采样cookie和光强衰减原理。
Unity的光源类型
Unity内主要支持平行光、点光源(point light)、聚光灯(spot light)、面光源(area light)这四种光源类型。
使用光线性衰减
float distance = length(_WorldSpaceLightPos0.xyz - i.worldPosition.xyz); atten = 1.0/distance;
使用光线衰减纹理
float3 lightCoord = mul(_LightMatrix0, float4(i.worldPosition, 1)).xyz; fixed atten = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).UNITY_ATTEN_CHANNEL;
在这里使用了UNITY_ATTEN_CHANNEL的宏来定义了衰减纹理中衰减值所在的分量
来源:CSDN,作者:雨果66666,转载此文目的在于传递更多信息,版权归原作者所有。
原文:https://blog.csdn.net/qq_32418469/article/details/81329232