Version: 6000.3
语言: 中文
可视化阴影级联
对 URP 中的阴影进行故障排除

优化 URP 中的阴影渲染

本页介绍了可帮助您在项目中加快阴影渲染速度的优化技术。

影响阴影渲染时间的因素包括:

  • 投射阴影的可见对象数。此数字取决于 最大距离(Max Distance) 属性。

  • 接收阴影的可见对象数。

  • 阴影投射光源的数量。

  • 联计数属性值和级联拆分的大小。

  • 主光源和附加光源的阴影分辨率

  • 软阴影(Soft Shadows) 一种阴影属性,用于生成具有柔和边缘的阴影。与硬阴影相比,软阴影更逼真,并且往往会减少阴影贴图的“块状”锯齿效果,但它们需要更多的处理。
    请参阅术语表
    财产。

以下部分介绍如何使用这些设置和其他设置来优化阴影渲染性能。

优化主光阴影

使用以下技术之一来优化主光投射的阴影。

使用阴影级联

使用阴影级联功能可以提高阴影的视觉保真度,而无需增加阴影贴图分辨率。

选择“级联计数”值时,请考虑阴影级联对性能的影响

尝试使用“柔和阴影”属性

使用 Soft Shadows 属性可以让你以较低的阴影分辨率值实现更高的视觉保真度。

Soft Shadows 属性可能会对使用基于图块的渲染的平台(例如移动平台和无限制)产生重大性能影响XR一个总称,包括虚拟现实 (VR)、增强现实 (AR) 和混合现实 (MR) 应用。支持这些形式的交互式应用程序的设备可以称为 XR 设备。更多信息
请参阅术语表
平台。如果目标平台使用基于磁贴的呈现,请分析应用程序以确定此设置对性能的影响。

您可以结合使用较低的阴影分辨率和“柔和阴影”选项作为一种艺术技巧。虽然高阴影分辨率使阴影更加细致,但它也使阴影看起来清晰,这可能并不适合所有艺术风格。

例如,在下图中,左侧图像的阴影分辨率为 4096像素计算机图像中的最小单位。像素大小取决于您的屏幕分辨率。像素光照是在每个屏幕像素下计算的。更多信息
请参阅术语表
,而右侧图像的阴影分辨率为 1024 像素,启用了“柔和阴影”选项。

使用较低的阴影分辨率来获得更柔和的阴影外观
较低的阴影分辨率可提供更柔和的阴影外观,这可能有利于某些场景。左:分辨率 4096 像素,右:分辨率 1024 像素。

选择主光阴影的分辨率和最大距离

有关优化分辨率和阴影与主光的最大距离的更多信息,请参阅在 URP 中配置阴影分辨率

优化附加光阴影

使用以下技术之一来优化其他光源投射的阴影。

优化点光阴影

要为点光源创建阴影贴图,Unity 会捕获场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
请参阅术语表
在六个方向上。此作对性能的影响与渲染来自六个聚光灯的阴影相当。在移动平台上,这会使用每帧的大量可用资源。

减少移动平台上投射阴影点光源的数量,或完全避开它们。

有关详细信息,请参阅以下页面。

使用脚本关闭和打开灯

为了提高性能,您可以使用脚本根据与相机在场景中创建特定视点图像的组件。输出要么绘制到屏幕上,要么作为纹理捕获。更多信息
请参阅术语表
或其他条件。为此,请使用 Light.enabled 属性。

为避免灯光爆裂,您可以淡入和淡出intensity灯的属性。

有关此技术的示例,请参阅DynamicLightController.cs附加到通用 3D 示例项目中花园场景中室外灯笼中的点光源的脚本。

使用轻型 Cookie

在对象大部分是静态的区域中,带有光 cookie 的点光源或聚光源可以替代投射实时阴影的光源。

要配置轻量级 Cookie,请使用轻量级组件的 Cookie 属性

有关更多信息,请参阅 Cookie 简介

使用光源浏览器

光源资源管理器窗口提供了所有光源、反射和光探针光探针存储有关光线如何穿过场景中的空间的信息。在给定空间中排列的光源探针集合可以改善移动对象的光照和该空间内的静态LOD场景。更多信息
请参阅术语表
,以及场景中具有自发光材质的对象。使用此工具可在场景中快速查找具有某些属性的光源。

通用优化技术

本部分包含不特定于主光源或附加光源的常规优化技术。

减少投射实时阴影的对象数量

实时投射阴影对象的数量对阴影渲染性能有显著影响。

要完全排除对象投射阴影(烘焙阴影和实时阴影),请执行以下作:

  1. 在游戏对象上,转到网格渲染器>照明

  2. 投射阴影(Cast Shadows) 属性设置为 关闭(Off)。

要配置游戏对象Unity 场景中的基本对象,可以表示角色、道具、风景、相机、航路点等。游戏对象的功能由附加到它的组件定义。更多信息
请参阅术语表
要仅投射烘焙阴影,请使用 阴影遮罩(Shadowmask) 光照模式

使用阴影遮罩光照模式

阴影遮罩(Shadowmask与其相应光照贴图共享相同UV布局和分辨率的纹理。更多信息
请参阅术语表
光照模式允许您通过在运行时组合烘焙阴影和实时阴影来提高阴影渲染性能。

有关阴影遮罩光照模式的一般信息,请参阅光照模式:阴影遮罩页面

Unity 使用以下条件来确定光源或游戏对象是否对阴影遮罩有贡献:

  • 光源模式(light mode) 定义光源使用的光源属性。可以设置为 实时(Realtime)、烘焙(Baked) 和 混合(Mixed)。更多信息
    请参阅术语表
    的灯必须混合。

  • 必须将光源配置为投射阴影(光源的 阴影类型(Shadow Type) 属性不得为 无阴影(No Shadows) )。

  • 游戏对象必须是静态的。

要查看现有阴影遮罩,请在场景视图:您正在创建的世界的交互式视图。您可以使用场景视图来选择和定位场景、角色、摄像机、灯光和所有其他类型的游戏对象。更多信息
请参阅术语表
:

  1. 打开 绘制模式(Draw Mode) 下拉菜单
  2. 选择 烘焙全局光照(Baked Global Illumination) > 阴影遮罩(Shadowmask)。

阴影遮罩中最多可以有四个光源重叠,因为它使用四个通道(r,g,b,a)。如果一个区域有四个以上重叠的混合光源,Unity 会将其他光源从混合模式切换到烘焙模式。

要查看有多少光源影响特定区域,请使用 渲染调试器(Rendering Debugger) 中的 光照复杂度(Lighting Complexity) 视图。

材质>材质过滤器>材质覆盖>光照复杂性
材质>材质过滤器>材质覆盖>光照复杂性

要实现视觉保真度和性能的最佳组合,请将 阴影遮罩(Shadowmask) 模式与光源探针结合使用。

在“距离阴影遮罩”和“阴影遮罩”之间进行选择

在中低层移动平台上,从性能角度来看,暗影遮罩模式可能是一个不错的选择。

在更高层的移动平台或 PC 和主机平台上,请考虑使用距离阴影遮罩 Shadowmask光照模式的一个版本,包括从静态游戏对象投射到动态游戏对象的高质量阴影。更多信息
请参阅术语表
模式以实现更高的视觉保真度。

有关更多信息,请参阅光照模式:阴影遮罩页面

配置静态对象以投射烘焙阴影

使用 Shadowmask 光照模式时,您可以配置某些游戏对象以参与烘焙阴影,而不是投射实时阴影。按着这些次序:

  1. 转到 项目设置(Project Settings) > 质量(Quality),并将 阴影蒙版模式(Shadowmask Mode) 属性设置为 阴影蒙版(Shadowmask)。

    在此模式下,Unity 对每个具有贡献全局光照 一组对直接和间接光照进行建模以提供逼真的光照结果的技术。
    请参阅术语表
    属性已启用。

  2. 在游戏对象上,在网格Unity 的主要图形原语。网格体构成了 3D 世界的很大一部分。Unity 支持三角或四边形多边形网格。Nurbs、Nurms、Subdiv 曲面必须转换为多边形。更多信息
    请参阅术语表
    渲染
    组件中,将 投射阴影(Cast Shadows) 属性设置为 开(On)。

  3. 网格体渲染器(Mesh Renderer一个网格体组件,用于从网格体过滤器中获取几何体,并将其渲染到对象的变换组件定义的位置。更多信息
    请参阅术语表
    组件,启用 Contribute Global Illumination

  4. 生成光照以使更改生效。

现在,Unity 在运行时使用烘焙阴影渲染此游戏对象,而不管与相机的距离如何。

使用单独的简化网格进行阴影投射

要从具有复杂网格的对象投射简单阴影,请执行以下步骤:

  1. 创建具有较少多边形的网格的简化版本。

  2. 将任何材质分配给简化的网格。材质无关紧要,因为 Unity 不会渲染简化的网格。

  3. 在原始网格体上,将 投射阴影(Cast Shadows) 属性设置为 关闭(Off)。

  4. 将简化的网格放置在与原始网格相同的位置。

  5. 在简化的网格体上,将 投射阴影(Cast Shadows) 属性设置为 仅阴影(Shadows Only)。

使用此配置,Unity 会渲染原始网格,但使用简化网格来渲染阴影。

轮廓阴影渲染

使用以下 Unity 工具来分析光照和阴影渲染:

如果您需要更多详细信息,请使用特定于平台的分析器帮助您优化游戏的窗口。它显示了在游戏的各个领域花费了多少时间。例如,它可以报告渲染、动画制作或游戏逻辑所花费的时间百分比。更多信息
请参阅术语表
以及可用于目标平台的调试工具。有关详细信息,请参阅分析工具

其他资源

可视化阴影级联
对 URP 中的阴影进行故障排除