此部分描述了 Unity 在延迟渲染路径渲染管线用于渲染图形的技术。选择不同的渲染路径会影响光照和着色的计算方式。一些渲染路径比其他渲染路径更适合不同的平台和硬件。更多信息
参见 术语表中 G-buffer 中存储材质属性的方式。
下图显示了 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,除非满足以下条件之一
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
格式。
在 Deferred Rendering Path 中,Unity 会将法线存储在 G 缓冲区中。Unity 会以 24 位值对每个法线进行编码。
当您在 URP Universal Renderer 资源的“Rendering Path”(渲染路径)属性中选择“Deferred”(延迟渲染)选项时,Unity 会显示“Accurate G-buffer normals”(精确的 G 缓冲区法线)属性。
准确的 G 缓冲区法线属性可用于配置 Unity 编码法线的方式。
关闭准确的 G 缓冲区法线:Unity 在法线纹理的 RGB 通道中以每个值 8 位(x、y、z)存储法线向量的值。这些值会进行量化,导致精度下降。此选项可提升性能,尤其是在移动 GPU 上,但可能会导致平滑表面上出现色带伪像。
打开准确的 G 缓冲区法线:Unity 使用八面体编码将法线向量的值存储在法线纹理的 RGB 通道中。使用此编码,法线向量的值更准确,但编码和解码操作会对 GPU 造成额外的负载。与屏幕空间贴花技术配合使用时,此选项不支持贴花法线混合。
编码法线向量的精度类似于正向渲染路径中采样值精度。
下图显示了当摄像机场景中创建特定视角图像的组件。输出要么绘制到屏幕,要么作为纹理捕获。更多信息
请参阅 术语表非常靠近游戏对象Unity 场景中的基本对象,可表示角色、道具、场景、camera、路径点等。游戏对象的功能由附加到此对象上的组件定义。更多信息
请参阅 术语表时,这两个选项之间的差异。