版本:Unity 6(6000.0)
语言:英语
URP 中延迟渲染路径的渲染通道
URP 中延迟渲染路径的限制

URP 中延迟渲染路径的 G-buffer 布局

此部分描述了 Unity 在延迟渲染路径渲染管线用于渲染图形的技术。选择不同的渲染路径会影响光照和着色的计算方式。一些渲染路径比其他渲染路径更适合不同的平台和硬件。更多信息
参见 术语表
中 G-buffer 中存储材质属性的方式。

下图显示了 Unity 在延迟渲染路径中用于的每个像素计算机图像中的最小单位。像素大小取决于屏幕分辨率。像素光照在每个屏幕像素处计算。更多信息
参见 术语表
的数据结构。

Data structure of the render targets that Unity uses in the Deferred Rendering Path
Unity 在延迟渲染路径中使用渲染目标的数据结构

数据结构包含以下组件。

反照率(sRGB)

此字段包含以 sRGB 格式保存的 24 位反照率颜色。

MaterialFlags

此字段是包含材质标志的位字段

  • 位 0,ReceiveShadowsOff:如果设置,像素将不接收动态阴影。

  • 位 1,SpecularHighlightsOff:如果设置,像素将不接收镜面高光。

  • 位 2,SubtractiveMixedLighting:如果设置,像素将使用相减混合光照。

  • 位 3,SpecularSetup:如果设置,材质将使用镜面工作流程。

位 4-7 预留以供将来使用。

有关更多技术细节,请查看文件 /ShaderLibrary/UnityGBuffer.hlsl

镜面

此字段包含以下值

  • SimpleLit 材质:以 24 位存储的 RGB 镜面颜色镜面高光的颜色。
    参见 术语表

  • 具有金属工作流的受光材质:以 8 位存储反射率,不使用 16 位。

  • 具有镜面反射工作流的受光材质:以 24 位存储 RGB 镜面反射颜色。

遮挡

此字段包含烘焙光照中烘焙的遮挡值。对于实时光照,Unity 通过组合烘焙的遮挡值与 SSAO 值来计算环境遮蔽一种近似方法,用于计算多少环境光(不是来自特定方向的光)能击中某个曲面上的点。
请参阅 术语表
值。

法线

此字段包含以 24 位编码的世界空间法线。有关法线编码的信息,请参阅G 缓冲区中的法线编码

光滑度

此字段存储 SimpleLit 和 Lit 材质的光滑度值。

发射/GI/光照

此渲染目标包含材质发光输出和烘焙光照。Unity 会在 G 缓冲区通道期间填充此字段。在延迟着色内置渲染管线中的一种渲染路径,对影响 GameObject 的光照数量没有限制。所有光照都会按每个像素进行评估,这意味着它们都会与法线贴图等进行正确的交互。此外,所有光照都可以有 Cookie 和阴影。更多信息
请参阅 术语表
通道期间,Unity 会将光照结果存储在此渲染目标中。

渲染目标格式

  • B10G11R11_UFloatPack32,除非满足以下条件之一

    • 在 URP Asset 中,品质 > HDR 设置已启用,并且目标播放器平台不支持 HDR。

    • Player 设置这些设置使你能够为 Unity 构建的最终游戏设置多种玩家特定选项。更多信息
      请参阅 术语表
      中,保留帧缓冲区 Alpha为 True。

  • R16G6B16A16_SFloat,如果 Unity 无法由于项目设置一系列设置使你能够配置物理、音频、网络、图像、输入以及项目中许多其他区域的行为。更多信息
    请参阅 术语表
    而使用 B10G11R11_UFloatPack32

  • 如果 Unity 无法使用列表中的其他一种格式,它将使用以下方法返回的内容:SystemInfo.GetGraphicsFormat(DefaultFormat.HDR)

阴影蒙版与它对应的光照贴图共享相同的 UV 布局和分辨率的纹理。更多信息
请参阅 术语表

在将“Lighting Mode”(光照模式)设置为“Subtractive”(减法)或“Shadow mask”(阴影掩蔽)时,Unity 会将此渲染目标添加到 G 缓冲区布局中。

Subtractive 和 Shadow mask 模式针对“Forward Rendering”(正向渲染)路径进行了优化,在“Deferred Rendering”(延迟渲染)路径中的效率较低。在 Deferred Rendering Path 中,避免使用这些模式,并改用“Baked Indirect”(烘焙间接光照)模式以提升 GPU 性能。

渲染“Layer Mask”(图层遮罩)

在启用“Use Rendering Layers”(使用渲染图层)选项(URP 资源,Lighting(光照)> **Use Rendering Layers**(使用渲染图层))时,Unity 会将此渲染目标添加到 G 缓冲区布局中。

使用渲染图层可能会对 GPU 性能造成影响。更多信息,请参阅 渲染图层 文档。

Depth as Color

在平台支持 Native Render Pass 时,Unity 会将此渲染目标添加到 G 缓冲区布局中。Unity 将深度作为颜色渲染到此渲染目标。此渲染目标具有以下用途

  • 提升 Vulkan 设备的性能。

  • 让 Unity 能够在 Metal API 中获取“depth buffer(深度缓冲区) 一种存储器存储,存储图像中每个像素的 z 值深度,其中 z 值是投影平面中每个渲染像素的深度。 更多信息
    请参阅 术语表
    ,它不允许在同一渲染通道中从 DepthStencil 缓冲区提取深度。

Depth as Color 渲染目标的格式为 GraphicsFormat.R32_SFloat

DepthStencil

Unity 预留此渲染目标的四最高位来标记材质类型。此外,请查看 URP 通道标签:UniversalMaterialType

对于此渲染目标,Unity 会根据平台选择 D32F_S8 格式或 D24S8 格式。

G 缓冲区中的法线编码

在 Deferred Rendering Path 中,Unity 会将法线存储在 G 缓冲区中。Unity 会以 24 位值对每个法线进行编码。

当您在 URP Universal Renderer 资源的“Rendering Path”(渲染路径)属性中选择“Deferred”(延迟渲染)选项时,Unity 会显示“Accurate G-buffer normals”(精确的 G 缓冲区法线)属性。

The Accurate G-buffer normals property in the URP Universal Renderer asset
URP Universal Renderer 资源中的“Accurate G-buffer normals”(精确的 G 缓冲区法线)属性

准确的 G 缓冲区法线属性可用于配置 Unity 编码法线的方式。

  • 关闭准确的 G 缓冲区法线:Unity 在法线纹理的 RGB 通道中以每个值 8 位(x、y、z)存储法线向量的值。这些值会进行量化,导致精度下降。此选项可提升性能,尤其是在移动 GPU 上,但可能会导致平滑表面上出现色带伪像。

  • 打开准确的 G 缓冲区法线:Unity 使用八面体编码将法线向量的值存储在法线纹理的 RGB 通道中。使用此编码,法线向量的值更准确,但编码和解码操作会对 GPU 造成额外的负载。与屏幕空间贴花技术配合使用时,此选项不支持贴花法线混合。
    编码法线向量的精度类似于正向渲染路径中采样值精度。

下图显示了当摄像机场景中创建特定视角图像的组件。输出要么绘制到屏幕,要么作为纹理捕获。更多信息
请参阅 术语表
非常靠近游戏对象Unity 场景中的基本对象,可表示角色、道具、场景、camera、路径点等。游戏对象的功能由附加到此对象上的组件定义。更多信息
请参阅 术语表
时,这两个选项之间的差异。

Accurate G-buffer normals, visual difference between the two options.
准确的 G 缓冲区法线,这两个选项之间的差异。
URP 中延迟渲染路径的渲染通道
URP 中延迟渲染路径的限制