影响光照的因素有哪些? - 知乎
发布网友
发布时间:2024-09-30 10:13
我来回答
共1个回答
热心网友
时间:2024-11-01 18:57
Unity的渲染路径决定了光照如何在Unity Shader中应用,需在每个Pass中指定渲染路径。前向渲染路径涉及计算颜色缓冲区和深度缓冲区,深度缓冲用于判断片元可见性,若可见则更新颜色缓冲区。Unity中有三种前向渲染处理光照方式:逐顶点处理、逐像素处理、球谐函数处理,基于光源类型和重要度排序光源进行渲染。
在前向渲染中,Unity会根据场景光源设置及影响程度对光源进行排序,一定数目的光源逐像素处理,最多4个逐顶点处理,其余按SH方式处理。渲染路径设置指引Unity理解Pass在前向渲染中的位置,底层渲染引擎进行计算并填充内置变量。
Unity提供内置光照变量和函数,根据渲染路径传递给Shader。每个Pass执行一次Base Pass,支持平行光的阴影计算,Additional Pass则用于额外光照结果的混合。
延迟渲染路径解决了大量实时光源性能瓶颈问题。它使用额外的G缓冲区存储表面信息,第一个Pass不进行光照计算,仅标记片元可见性,第二个Pass利用G缓冲区进行光照计算。延迟渲染路径中每个光源可逐像素处理,但不支持抗锯齿和透明物体渲染,对显卡有要求。
Unity支持四种光源类型:平行光、点光源、聚光灯和面光源。点光源和聚光灯需考虑位置、方向、颜色、强度及衰减。平行光没有位置*,衰减不随距离改变;点光源和聚光灯有位置*,衰减随距离减小。
在前向渲染中,访问光源属性使用Unity提供的方法。Base Pass和Additional Pass调用顺序由重要度决定,点光源首先渲染,衰减计算使用纹理查找表实现,纹理大小和预处理影响精度,不直观且*了自定义衰减计算。
Unity使用_LightTexture0纹理进行衰减计算,通过顶点在光源空间中的位置和深度纹理进行采样。使用数学公式计算衰减时,纹理查找表可以提升性能,但*了自定义公式。
在实时渲染中,Unity采用Shadow Map技术实现阴影,首先通过LightMode为ShadowCaster的Pass为光源计算阴影映射纹理。传统方法在Pass中处理顶点位置变换和深度信息,而Unity使用屏幕空间阴影映射技术,通过额外Pass和深度纹理直接在屏幕空间生成阴影图。
一个物体接收其他物体的阴影需要在Shader中对阴影映射纹理采样,而投射阴影则需要将物体加入到光源的阴影映射纹理计算中。透明物体的阴影需注意透明度测试和混合,可能需要调整Fallback。
标准Unity Shader提供了处理光照和阴影的工具,根据渲染路径和光源类型进行优化,实现高质量的光照效果和阴影渲染。