【Unity Shader】自定义阴影ShadowMap(CSM)
发布网友
发布时间:2024-10-06 23:52
我来回答
共1个回答
热心网友
时间:2024-10-25 11:32
CSM简介
CSM(CascadedShadowMap)技术是利用分层的ShadowMap实现大场景阴影算法,将视锥体从近到远划分,生成相同分辨率的光源空间深度图。根据视线到物体距离,决定使用不同深度图进行对比,实现不同区域精度不同的阴影效果。本文主要讲解如何在项目中应用CSM,更多原理与工程实践可参考相关网址。
CSM应用
应用CSM时,先复制光源生成的深度图,然后在QualitySetting中设置Shadow Cascades为Two Cascades或Four Cascades。每次渲染需单独执行,Cascades数量越多,Draw call增加,性能开销随之上升。通过设置Shadow Distance调整阴影覆盖范围,Casaded Splits控制层级间比例。
学习级联阴影使用可参考Unity官网下载的内置shader压缩包和文件Internal-ScreenSpaceShadows。在shader中,获取不同层级权重以决定采样哪部分ShadowMap。宏定义显示,稳定匹配阴影范围为软圈状,硬边匹配为硬边效果,不同Projection层级距离算法不同。
将世界空间坐标通过层级投影矩阵转换到阴影空间,参照先前文章计算阴影,根据各层级计算结果,按范围相加,得出最终阴影值。