Unity3D:阴影贴图

推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生

阴影贴图

Unity 使用一种称为阴影贴图的技术来渲染实时阴影。

阴影贴图的工作原理

阴影贴图使用称为“阴影贴图”的纹理。阴影贴图类似于深度纹理。光源生成阴影贴图的方式与摄像机生成深度纹理的方式类似。假设摄像机与光源位于相同的位置,则摄像机无法看到的场景区域与光源的光线无法到达的场景区域相同;因此,这些区域处于阴影中。

Unity 会在阴影贴图中填充与光线在射到表面之前传播的距离有关的信息,然后对阴影贴图进行采样,以便计算光线射中的游戏对象的实时阴影。

有关阴影贴图的更多信息,请参阅关于阴影贴图 (shadow mapping) 的 Wikipedia 页面。

阴影贴图分辨率

为了计算阴影贴图的分辨率,Unity 会进行以下工作:

  1. 确定灯光可以照亮的屏幕视图区域。对于定向灯,可以照亮整个屏幕。对于聚光灯和点光源,该区域是光源范围形状的屏幕投影:点光源的球体或聚光灯的圆锥体。投影形状在屏幕上具有宽度和高度(以像素为单位);然后取这两个值中较大的一个。此值称为光源的像素大小。
  2. 确定阴影质量乘数。为此,Unity 采用 Shadow Resolution 设置(在 Quality Settings 窗口中进行设置)。质量设置对应于以下值:
  • 非常高:1.0
  • 高:0.5
  • 中:0.25
  • 低:0.125
  1. 执行以下计算,然后将结果确定为最大大小:
光源类型:公式:Maximum resolution, in pixels:
DirectionalNextPowerOfTwo (pixel size * shadow quality multiplier * 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)

然后会根据光源类型和硬件来确定最大分辨率,如上表所示。

有关支持跨渲染管线的阴影映射的详细信息,请参阅渲染管线功能比较。

3D建模学习工作室整理翻译,转载请注明出处!

上一篇:Unity3D:发光材质 (mvrlink.com)

下一篇:Unity3D:配置阴影 (mvrlink.com)

NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号