为了计算阴影贴图的分辨率,Unity 会进行以下工作:
确定光源可以照亮的屏幕视图区域。对于方向光,整个屏幕都可以照亮。对于聚光灯和点光源,该区域是光源边界形状(点光源为球体,聚光灯为锥体)在屏幕上的投影。投影的形状在屏幕上具有宽度和高度(以像素为单位);然后取这两个值中的较大者。此值称为光源的像素大小。
执行以下计算,然后将结果确定为最大大小:
| 光源类型: | 公式: | 最大分辨率(以像素为单位): |
|---|---|---|
| 方向光 | NextPowerOfTwo(像素大小 * 阴影质量乘数 * 3.8) | 当阴影分辨率的质量为非常高时并且/或者如果 GPU 的 RAM 为 512MB 或更高,最高分辨率为 4096 x 4096,否则为 2048 x 2048。 |
| 聚光灯 | NextPowerOfTwo(像素大小 * 阴影质量乘数 * 2.0) | 如果 GPU 的 RAM 为 512MB 或更高,最高分辨率为 2048 x 2048,否则为 1024 x 1024。 |
| 点光源 | NextPowerOfTwo(像素大小 * 阴影质量乘数 * 1.0) | 如果 GPU 的 RAM 为 512MB 或更高,最高分辨率为 1024 x 1024,否则为 512 x 512。 |
在内置渲染管线中,可以通过将 Light.shadowCustomResolution 属性设置为大于 0 的值来设置光源阴影贴图的分辨率。当该值大于 0 时,Unity 对所有光源类型都会执行以下计算:
NextPowerOfTwo (shadowCustomResolution)
然后会根据光源类型和硬件来确定最大分辨率,如上表所示。