unity3d 渲染路径(延迟光照,正向渲染,顶点光照)

转载 2015年07月08日 14:30:37

转自:http://edu.china.unity3d.com/learning_document/getData?file=/Manual/RenderingPaths.html

渲染路径

Unity 支持不同的渲染路径 (Rendering Paths)。应根据游戏内容和目标平台/硬件选择所需的路径。不同的渲染路径功能和性能特征不同,主要影响光照 (Lights) 和阴影 (Shadows)。

可在播放器设置 (Player Settings) 中选择工程所需的渲染路径 (Rendering Paths)。另外,可为每个相机 (Camera) 重写渲染路径。

如果图形卡无法处理所选的渲染路径,Unity 将自动使用较低保真度的路径。无法处理延迟光照 (Deferred Lighting) 的 GPU 将使用正向渲染 (Forward Rendering)。如果不支持正向渲染 (Forward Rendering),则将使用顶点光照 (Vertex Lit)。

延时光照渲染路径

本页面详细说明了延时光照 (Deferred Lighting) 渲染路径。有关延时光照的技术概述,请参阅本文

延时光照 (Deferred Lighting) 渲染路径是具有最高光照和阴影保真度的渲染路径。影响物体的光线数量没有限制,并且采用逐像素的方式评估所有光照,这意味着这些光照将全部与法线贴图准确交互。此外,所有光照都可有 cookie 和阴影。

延时光照有这样一个优点:无论光线照射的物体数量是多少,光照的处理开销与屏幕上的光线尺寸成正比。因此,保持较小的光线尺寸可提高性能。延时光照还有高度一致和可预测的行为。每束光线的效果都是按逐像素光照计算的,因此不会出现在大三角形等上崩溃的光照计算。

延时光照的缺点是没有实际的抗锯齿支持,也不能处理半透明物体(这些必须使用“正向渲染”(Forward Rendering) 来渲染)。同时不支持网格渲染器 (Mesh Renderer) 的接收阴影 (Receive Shadows) 标识,并且剔除遮蔽图的支持方式也有限。(具体而言,您最多可以使用四个剔除遮蔽图。即:剔除层遮蔽图必须至少包含减去 4 个任意层后的所有层,所以 32 层中必须设置 28 层。否则会得到图形假象。)

要求

延时光照只能用于 Unity 专业版。延时光照要求 Shader Model 3.0(或更高版本)的图形卡,并且支持深度 (Depth) 渲染纹理和双面模板缓冲区。大多数 2004 年后制作的图形卡都支持延时光照,包括 GeForce FX 或其更高版本、Radeon X1300 或其更高版本、Intel 965 / GMA X3100 或其更高版本。然而,目前移动平台和 Flash 平台都不支持延时光照。

性能注意事项

延时光照中实时光线的渲染开销与光线照射的像素数量成正比,而非取决于场景的复杂性。所以微小点或者聚光灯耗费的渲染资源非常少。如果它们被场景物体完全或部分遮住,甚至会更加便宜。

当然,带阴影的光源比不带阴影的光源要昂贵许多。延时光照中,阴影投射物体仍需为每个阴影投射光进行一次或多次渲染。而且,产生阴影的光照着色器的渲染开销比禁用阴影时使用的光照着色器更高。

实施细节

当使用延时光照 (Deferred Lighting) 时,Unity 中的渲染过程分为三步,如下所示:-

  1. 基础通道:渲染物体以生成带有深度、法线和高光强度的屏幕空间缓冲区。
  2. 光照通道:使用上一步生成的缓冲区将光照计算到另一个屏幕空间的缓存区中。
  3. 最终通道:再次渲染物体。将已计算好的光照取出并与颜色纹理混合,然后添加任何环境/放射性光照。

带有不能处理延时光照着色器的物体在该过程完成后会使用正向渲染路径进行渲染。

基础通道

基础通道对每个对象渲染一次。视图空间法线和高光强度被渲染进单个 ARGB32 渲染纹理中(法线在 RGB 通道、高光强度在 A 通道)。如果平台和硬件支持将 Z 缓冲区读取为纹理,那么深度不会进行明确渲染。如果 Z 缓冲区不能以纹理的方式进行访问,则用着色器替换在其他某个渲染通道中渲染深度。

基础通道的结果是被屏幕内容填满的 Z 缓冲区以及带有法线和高光强度的渲染纹理 (Render Texture)。

光照通道

光照通道根据深度、法线和高光强度计算光照。光照是在屏幕空间中计算的,因此所需的处理时间与屏幕复杂性无关。光照缓冲区是单独的 ARGB32 渲染纹理 (Render Texture),纹理的 RGB 通道有漫反射光照,A 通道有单色高光光照。光照值采用对数值编码,从而提供比 ARGB32 纹理通常所能达到的动态范围更广的动态范围。延时渲染的唯一光照模式是 Blinn-Phong。

没有跨越相机近平面的点光源和聚光灯被渲染成三维形状,并启用针对场景的 Z 缓冲区测试。这使部分或全部遮挡住的点光源和聚光灯所耗费的渲染资源很少。跨越近平面的方向灯或点光源/聚光灯被渲染成全屏四边形。

如果光源开启阴影,则这些光源会在此通道中加以渲染和应用。请注意阴影并不是“免费”的,需要渲染阴影投射器并运用更加复杂的光线着色器。

可用的唯一光照模式为 Blinn-Phong。如果想要不同的模式,可以通过将内置着色器中修改后的 Internal-PrePassLighting.shader 文件版本放置到“资产”文件夹中名为“资源”的文件夹来修改光照通道着色器。

最终通道

最终通道生成最终渲染图像。所有物体都将用着色器再次渲染,其中着色器将采集光照,将光照与纹理混合,并添加任何放射性光照。光照贴图也会应用到最终通道中。靠近相机时使用实时光照,并只添加烘焙反射光照。这样做可交叉淡化成远离相机的全烘焙光照。

正向渲染路径细节

本页面描述了正向 (Forward) 渲染路径的细节。

根据影响对象的光源的不同,正向渲染 (Forward Rendering) 路径在一个或多个通道中渲染每个对象。根据设置和强度,光源本身也会受到正向渲染 (Forward Rendering) 的不同处理。

实施细节

在正向渲染 (Forward Rendering) 中,影响每个对象的一定数量的最亮光源以全逐像素光照模式被渲染。然后,最多 4 个点光灯会逐顶点被计算。其他灯根据球谐函数 (SH) 进行计算,这种计算方式更快速,但只能得到近似值。根据以下内容判断某个光源是否是逐像素光源:

  • 渲染模式 (Render Mode) 设置为不重要 (Not Important) 的光源通常是逐顶点或球谐函数。
  • 最亮的方向灯通常为逐像素。
  • 渲染模式 (Render Mode) 设置为重要 (Important) 的光源通常是逐像素。
  • 如果以上内容导致光源数量小于当前像素光源数量 (Pixel Light Count) 质量设置,则为了降低亮度,会有更多的光源以逐像素的方式进行渲染。

用以下方法渲染每个对象:

  • 基础通道 (Base Pass) 应用一个逐像素方向灯以及所有逐顶点/球谐函数光源。
  • 其他逐像素光源在其他通道中进行渲染,一个通道对应一个光源。

例如,如果某个对象受到若干光源的影响(下图中的圆圈受到光源 A 到 光源 H 的影响):

假设光源 A 到 光源 H 具有相同的颜色和强度,且他们的渲染模式都为自动 (Auto) 模式,则他们在该对象上将严格按照这种顺序进行排序。最亮的光源将以逐像素光照模式进行渲染(A 到 D),然后最多 4 个光源以逐顶点光照模式进行渲染(D 到 G),剩下的光源以球谐函数进行渲染(G 到 H):

请注意不同的光照组间有重叠。例如,最后一个逐像素光源混合有逐顶点光照模式,这样能减少对象和光源移动时可能出现的“光照跳跃”现象。

基础通道

基础通道用一个逐像素方向灯和所有球谐函数光源渲染对象。该通道还从着色器中添加任何光照贴图、环境光照和放射性光照。该通道中渲染的方向灯可以有阴影 (Shadows)。请注意,使用了光照贴图的对象不会获得来自球谐函数光源的光照。

附加通道

附加通道为影响该对象的每个附加逐像素光源进行渲染。这些通道中的光源不能有阴影(因此,正向渲染 (Forward Rendering) 支持一个带阴影的方向灯)。

性能注意事项

球谐函数光源渲染地快。它们只耗费很少的 CPU,并且实际上无需耗费 GPU(换言之,基础通道通常计算球谐函数光照,但由于球谐函数光照的运行方式,无论有多少球谐函数光源,耗费都是完全相同的)。

球谐函数光源的缺点有:

  • 它们计算的是对象的顶点,而非像素。这意味着它们不支持灯光 Cookies 或法线贴图。
  • 球谐函数光源的频率很低。球谐函数光源无法有明显的照明过渡。它们也只会影响漫反射光照(对高光亮点来说,球谐函数光照的频率过低)。
  • 球谐函数光照不是局部的;靠近某些表面的球谐函数点光灯或聚光灯“看起来别扭”。

总的说来,球谐函数灯对小的动态对象来说已经足够好了。

顶点光照渲染路径细节

本页面描述了顶点光照 (Vertex Lit) 渲染路径的细节。

顶点光照 (Vertex Lit) 路径通常在一个通道中渲染每个对象,所有光源的照明都在对象顶点上进行计算。

顶点光照 (Vertex Lit) 路径通常在一个通道中渲染每个对象,所有光源的照明都在对象顶点上进行计算。

由于所有的光照都在顶点层级上计算,所以此渲染路径不支持大多数的逐像素渲染效果:如阴影、法线贴图、灯光 Cookie、高精度的高光亮点。

渲染路径比较

  延迟光照 正向渲染 顶点光照
功能      
逐像素光照(法线贴图和灯光 cookies) -
实时阴影 1 束平行光 -
双重光照贴图 - -
深度与法线缓冲区 额外渲染通道 -
软粒子 - -
半透明物体 -
抗锯齿 -
光照剔除遮蔽图 受限
光照保真度 全部逐像素 部分逐像素 全部逐顶点
性能      
逐像素光照的成本 照亮的像素数 像素数 * 照亮的对象数 -
支持平台      
PC (Windows/Mac) Shader Model 3.0+ Shader Model 2.0+ 所有平台
移动平台 (iOS/Android) - OpenGL ES 2.0 OpenGL ES 2.0 & 1.1
控制台 360, PS3 360, PS3 -

相关文章推荐

延迟渲染(Deferred Shading)技术详解

http://blog.csdn.net/xiajun07061225/article/details/7680895     一、Deferred shading技术简介 Deferre...
  • pizi0475
  • pizi0475
  • 2012年09月01日 19:34
  • 16731

Unity5 的新旧延迟渲染Deferred Lighting Rendering Path

unity5 的render path ,比4的区别就是使用的新的deferred rendering,之前的4的deferred rendering(其实是light prepass)也被保留了下来...
  • wolf96
  • wolf96
  • 2015年09月25日 09:46
  • 3917

Unity3D光照前置知识——Rendering Paths(渲染路径)及LightMode(光照模式)译解

简述 U3D支持不同的Rendering Path(渲染路径),开发者应该根据游戏内容和目标平台,硬件等来选择使用哪个Rendering Path。不同的Rendering Path具有不同的表现效果...
  • kevlis
  • kevlis
  • 2016年11月02日 11:57
  • 3798

Unity&Shader高级篇-渲染路径(Rendering Paths)

原文:http://www.manew.com/thread-97939-1-1.html一、前言在的Camera中常常会看到一个Rendering Paths的选项,里面有5个选项,其中两个比较重要...

逐像素的光照

逐像素的方向光(Directional Light per Pixel) 这一节将把前面的shader代码改为逐像素计算的方向光。我们需要将工作按照两个shader拆分,以确定哪些是需要逐像素操作的...

unity3d渲染路径Rendering Path

转自  http://www.wangdg.com/?p=499   unity3d使用不同的渲染路径。你可以根据游戏内容和硬件选择合适的渲染路径。不同的渲染路径有不同的特性。主要会影响游...

渲染路径-Deferred Lighting 延时光照

http://blog.csdn.net/heyuchang666/article/details/51564954 延时光照是有着最高保真度的光照和阴影的渲染路径。如果你有很多实时灯光,最好是使用...
  • OnafioO
  • OnafioO
  • 2016年09月02日 19:19
  • 579

【浅墨Unity3D Shader编程】之七 静谧之秋篇: 表面着色器的写法(二)—— 自定义光照模式

本文主要讲解了Unity中SurfaceShader的自定义光照模式的写法。 上篇文章中我们已经说到,表面着色器将分为两次讲解,上一篇文章中介绍了表面着色器的基本概念和一些写法,用内置的兰伯特光照...
  • zhmxy555
  • zhmxy555
  • 2015年01月11日 17:03
  • 19253

游戏引擎中三大及时光照渲染方法介绍(以unity3d为例)

重要:在目前市面上常见的游戏引擎中,主要采用以下三种灯光实现方式: 顶点照明渲染路径细节 Vertex Lit Rendering Path Details 正向渲染路径细节 Forwar...

游戏引擎中三大及时光照渲染方法介绍(以unity3d为例)

重要:在目前市面上常见的游戏引擎中,主要采用以下三种灯光实现方式: 顶点照明渲染路径细节 Vertex Lit Rendering Path Details 正向渲染路径细节 Forward Re...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:unity3d 渲染路径(延迟光照,正向渲染,顶点光照)
举报原因:
原因补充:

(最多只允许输入30个字)