前向渲染路径
原理
每进行一次完整的前向渲染,我们需要渲染该对象的渲染图元,并计算两个缓冲区的信息:一个是颜色缓冲区,一个是深度缓冲区。我们利用深度缓冲来决定一个片元是否可见,如果可见就更新颜色缓冲区中的颜色值。我们可以用下面的伪代码来描述前向渲染路径的大致过程:
Pass {
for(each primitive in this model){
for(each fragment coverd by this primitive){
if(failed in depth test){
//如果没有通过深度测试,说明该片元是不可见的
discard;
}
else{
//如果该片元可见,就进行光照计算
float4 color = Shading(materialInfo,pos,normal,lightDir,viewDir);
//更新帧缓冲
writeFrameBuffer(fragment,color);
}
}
}
}
Unity中的前向渲染
在Unity中,前向渲染路径有3种处理光照的方式:逐顶点处理、逐像素处理、球谐函数处理。而决定一个光源使用哪种处理模式取决于它的类型和渲染模式。光源类型指的是该光源是平行光还是其他类型的光源,而光源的渲染模式指的是该光源是否是重要的。如果我们把一个光照的模式设置为Important,意味着我们告诉Unity“这个光源很重要,把它当成一个逐像素光源来处理”。我们可以在光源的Light组件中设置这些属性。
- Unity 使用的判断规则如下。
场景中最亮的平
- Unity 使用的判断规则如下。