Version: 6000.3
语言: 中文
内置渲染管线中的前向渲染路径
内置渲染管线中的旧版顶点光照渲染路径

内置渲染管线中的延迟渲染路径

本页详细介绍了延迟着色 渲染路径渲染管道用于渲染图形的技术。选择不同的渲染路径会影响照明和着色的计算方式。某些渲染路径比其他路径更适合不同的平台和硬件。更多信息
请参阅术语表
在 Unity 的内置渲染管线获取场景内容并将其显示在屏幕上的一系列作。Unity 允许您从预构建的渲染管线中进行选择,或编写自己的渲染管线。更多信息
请参阅术语表
.有关延迟着色的介绍性技术概述,请参阅 Wikipedia:延迟着色

概述

使用延迟着色时,可能影响游戏对象Unity 场景中的基本对象,可以表示角色、道具、风景、相机、航路点等。游戏对象的功能由附加到它的组件定义。更多信息
请参阅术语表
.所有光源都是按像素计算的,这意味着它们都与法线贴图(normal maps一种凹凸贴图纹理,允许您向模型添加表面细节,例如凹凸、凹槽和划痕,这些细节可以捕捉光线,就好像它们由真实几何体表示一样。
请参阅术语表
等。此外,所有光源都可以有 cookie 和阴影。

延迟着色的优点是照明的处理开销与像素计算机图像中的最小单位。像素大小取决于您的屏幕分辨率。像素光照是在每个屏幕像素下计算的。更多信息
请参阅术语表
光芒照耀着。这取决于场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
请参阅术语表
无论它照亮了多少个游戏对象。因此,可以通过保持灯光较小来提高性能。延迟着色还具有高度一致和可预测的行为。每个光源的效果是按像素计算的,因此没有在大三角形上分解的光照计算。

不利的一面是,延迟着色对抗锯齿没有真正的支持,并且无法处理半透明的游戏对象(这些对象是使用前向渲染呈现的)。也不支持网格Unity 的主要图形原语。网格体构成了 3D 世界的很大一部分。Unity 支持三角或四边形多边形网格。Nurbs、Nurms、Subdiv 曲面必须转换为多边形。更多信息
请参阅术语表
渲染器的 接收阴影(Receive Shadows) 标志和剔除遮罩允许你包括或省略要由摄像机渲染的对象,按层
请参阅术语表
仅以有限的方式提供支持。您最多只能使用四个剔除蒙版。也就是说,你的剔除图层遮罩定义要从作(例如渲染、碰撞或您自己的代码)中包含或排除哪些图层的值。更多信息
请参阅术语表
必须至少包含所有层减去四个任意层,因此必须设置 32 层中的 28 层。否则,您会得到图形伪影。

要求

它需要具有多个渲染目标 (MRT) 的显卡,着色器在 GPU 上运行的程序。更多信息
请参阅术语表
Model 3.0(或更高版本)和对深度的支持渲染纹理(render texture)一种特殊类型的纹理,在运行时创建和更新。要使用它们,请先创建一个新的渲染纹理,并指定要渲染到其中的摄像机之一。然后,你可以在材质中使用渲染纹理,就像使用常规纹理一样。更多信息
请参阅术语表
.2006 年之后制造的大多数 PC 显卡都支持延迟着色,从 GeForce 8xxx、Radeon X2400、Intel G45 开始。

在移动设备上,至少运行 OpenGL ES 3.0 的所有设备都支持延迟着色。

注意:使用正交投影时,不支持延迟渲染。如果相机在场景中创建特定视点图像的组件。输出要么绘制到屏幕上,要么作为纹理捕获。更多信息
请参阅术语表
的投影模式设置为 正交(Orthographic),摄像机回退到正向渲染。

注意:延迟渲染不支持内置渲染管线中的单通道立体实例化。

性能注意事项

延迟着色中实时光源的渲染开销与光源照亮的像素数成正比,并且不依赖于场景复杂性。因此,小型点光源或聚光源的渲染成本非常低,如果它们被场景游戏对象完全或部分遮挡,那么它们甚至更便宜。

当然,带有阴影的光源比没有阴影的光源要昂贵得多。在延迟着色中,每个阴影投射光源仍需要渲染一次或多次投影阴影游戏对象。此外,应用阴影的光照着色器的渲染开销高于禁用阴影时使用的光照着色器。

实现细节

具有不支持延迟着色的着色器的对象在延迟着色完成后使用延迟着色完成后使用前向渲染一种渲染路径,用于在一个或多个通道中渲染每个对象,具体取决于影响对象的灯光。前向渲染也会对灯光本身进行不同的处理,具体取决于其设置和强度。更多信息
请参阅术语表
路径。

下面列出了 G 缓冲区中渲染目标 (RT0 - RT4) 的默认布局。数据类型放置在每个渲染目标的各个通道中。使用的通道显示在括号中。

  • RT0、ARGB32 格式:漫反射色 (RGB)、遮挡 (A)。
  • RT1、ARGB32格式:镜面反射颜色面反射高光的颜色。
    请参阅术语表
    (RGB)、平滑度 (A)。
  • RT2,ARGB2101010格式:世界空间法线 (RGB),未使用 (A)。
  • RT3、ARGB2101010(非 HDR)或 ARGBHalf(HDR)格式:发射 + 照明 +光照贴图一种预渲染的纹理,包含光源对场景中静态对象的效果。光照贴图覆盖在场景几何体之上以创建光照效果。更多信息
    请参阅术语表
    + 反射探针一种渲染组件,可捕获各个方向周围环境的球形视图,就像相机一样。然后,捕获的图像将存储为立方体贴图,可供具有反射材质的对象使用。更多信息
    请参阅术语表
    缓冲区。
  • 深度+模具缓冲区保存每像素 8 位值的内存存储。在 Unity 中,可以使用模具缓冲区来标记像素,然后仅呈现为通过模具作的像素。更多信息
    请参阅术语表
    .

因此,默认的 G 缓冲区布局为 160 位/像素(非 HDR)或 192 位/像素(HDR)。

如果对混合光照使用阴影遮罩或距离阴影遮罩模式,则使用第五个目标:

  • RT4、ARGB32 格式:光遮挡值 (RGBA)。

因此,G 缓冲区布局为 192 位/像素(非 HDR)或 224 位/像素(HDR)。

如果硬件不支持五个并发渲染目标,则使用阴影遮罩的对象将回退到前向渲染路径。发射+光照缓冲区(RT3)采用对数编码方式,以提供比ARGB32纹理更大的动态范围,当摄像机未使用时HDR高动态范围
请参阅术语表
.

请注意,当摄像机使用HDR渲染时,不会为发射+光照缓冲区(RT3)创建单独的渲染目标;相反,摄像机渲染到的渲染目标(即传递给图像效果的渲染目标)用作RT3。

G-Buffer 通道

G 缓冲区通道将每个游戏对象渲染一次,渲染到存储漫反射和镜面反射颜色、表面平滑度、世界空间法线以及发射、环境光、反射和光照贴图的纹理中。Unity 将 G 缓冲区纹理设置为全局着色器属性,以便着色器以后访问。属性名称为_CameraGBufferTexture0_CameraGBufferTexture3.

照明通道

光照通道根据 G 缓冲区和深度计算光照。光照是在屏幕空间中计算的,因此处理所需的时间与场景复杂性无关。照明将添加到发射缓冲区。

不穿过摄像机近平面的点光源和聚光源将渲染为3D形状,并启用Z缓冲区对场景的测试。这使得部分或完全被遮挡的点光源和聚光源的渲染成本非常低。穿过近平面的定向光源和点光源或聚光源将渲染为全屏四边形类似于平面但其边只有一个单位长的原始对象,它只使用 4 个顶点,并且表面定向在局部坐标空间的 XY 平面上。更多信息
请参阅术语表
.

如果光源启用了阴影,则也会在此通道中渲染和应用阴影。请注意,影子不是“免费”而来的;需要渲染阴影投射器,并且必须应用更复杂的光照着色器。

唯一可用的照明模型是标准。如果需要不同的照明模型,可以创建默认延迟着色器文件的自定义版本。按着这些次序:

  1. 下载内置渲染管线着色器的源代码
  2. 找到Internal-DeferredShading.shader文件中的DefaultResourcesExtra文件夹。
  3. 编辑文件以更改照明模型。
  4. 在 项目(Project) 窗口中,将文件添加到 Assets 文件夹中,位于名为 Resources 的文件夹中。
  5. 从主菜单中,选择 编辑(Edit) > 项目设置(Project Settings) > 图形(Graphics) 。
  6. 内置着色器设置(Built-in Shader Settings) 分段中,将 延迟(Deferred) 设置为 自定义着色器(Custom shader),然后选择着色器文件。

  • 2017–06–08 页面已发布

  • 灯光模式(阴影遮罩(Shadowmask与其相应光照贴图共享相同UV布局和分辨率的纹理。更多信息
    请参阅术语表
    距离阴影遮罩 Shadowmask光照模式的一个版本,包括从静态游戏对象投射到动态游戏对象的高质量阴影。更多信息
    请参阅术语表
    ) 在 5.6 中添加

内置渲染管线中的前向渲染路径
内置渲染管线中的旧版顶点光照渲染路径