原文地址:https://en.wikipedia.org/wiki/Deferred_shading

在3D计算机图形学领域,deferred shading 是一种屏幕空间着色技术。它被称为Deferred,是因为实际上在第一次pass中的顶点和像素着色器中没有执行着色:相反,着色是“deferred(延迟)”到第二个pass中执行。
在deferred着色器的第一次pass中,只收集着色计算所需的数据。每个表面的位置、法线和材质,然后使用“render to texture”技术渲染到几何缓冲(G-buffer)中。在这之后,像素着色器使用屏幕空间中纹理缓冲区的信息计算每个像素的直接和间接光照。
SSDO(Screen space directional occlusion)可以作为deferred着色管线的一部分,给阴影和互反射提供方向。
 

优点


Deferred着色的主要优点是场景几何与光照的分离。只需要一个几何Pass,而每一个灯光只计算它实际影响的像素。这样就可以在不影响性能的情况下渲染场景中的多个灯光。这种方法还有其他一些优点。这些优点可能包括更简单地管理复杂的光照资源、易于管理其他复杂的着色器资源、简化软件渲染管线。

缺点


Deferred渲染的一个关键缺点是无法处理算法中的透明,虽然这个问题是Z-buffer场景中的一个常见问题,它往往通过延迟和排序来处理渲染场景透明的部分。深度剥离可用于实现Deferred渲染中的顺序无关透明度,但是要以额外的批处理和g-buffer大小为代价。支持DireactX 10或更高版本的现代硬件通常能够以足够快的速度执行批处理,以保持足够的帧率去实现交互。当采用顺序无关的透明度时(通常用于消费级应用程序),Deferred着色的效率并不低于使用相同技术的Forward着色。
另一个严重的缺点是使用多个材质的困难。虽然可以使用多个不同的材质,但是需要在G-buffer中存储更多的数据,数据已经相当大了并且消耗了大量的内存带宽。
另一个相当严重的缺点是,由于光照阶段和几何阶段的分离,硬件抗锯齿不再产生正确的结果,因为插值子样本将导致无意义的位置、法线和切线属性。克服这一限制的常用技术之一是在最终图像上使用边缘检测,然后在边缘上使用模糊,然而,最近开发了更先进的后处理边缘平滑技术,比如MLAA(在《KillZone 3》和《Dragon Age II》中使用),FXAA(用于《Crysis 2》、《FEAR 3》、《Duke Nukem Forever》),SRAA,DLAA(用于《Star Wars:The Force Unileashed II》),和MSAA(在《孤岛危机2》中用作默认的反锯齿解决方案)。虽然它不是一种边缘平滑技术,但Temporal anti-aliasing(在Halo Reach和虚幻引擎中使用)也可以帮助边缘平滑外观。DirectX引入了允许着色器访问多重采样渲染目标中的单个样本的特性(10.1的深度缓冲区),让使用这个API的用户在Deferred着色器中访问硬件抗锯齿。这些特性还允许它们正确地将HDR亮度映射应用到抗锯齿边缘,在API的早期版本中,任何抗锯齿的优势都已经丢失了。

Deferred lighting


Deferred Lighting(也被称为Light Pre-Pass)是对Deferred Shading的一种修改。在Deferred shading中这个技术使用了三个Pass,而不是两个Pass。在第一遍pass场景几何图形时,只将计算每像素光照(辐射度)所需的属性写入G-buffer中。屏幕空间,“Deferred”Pass只输出漫反射和高光光照数据,所以必须在场景上进行第二遍Pass,以读取照明数据并输出最终的像素着色。Deferred lighting的明显优势是大大减少了G-buffer的大小。明显的代价是需要渲染场景几何两次而不是一次。另一个额外的成本是在Deferred lighting中的Deferred pass必须分别输出漫反射和镜面辐射,而Deferred shading中的Deferred pass只需要输出单个的组合辐射值。
由于减小了G-buffer的大小,这种技术可以克服Deferred shading的一个严重缺点——多材质。另一个可以解决的问题是MSAA。Deferred lighting可以在DirectX9硬件上与MSAA一起使用。

Deferred lighting在商业游戏中的应用


这种技术在视频游戏中的使用越来越多了,因为它可以使用大量的动态灯光,减少了需要的着色器指令的复杂性。一些使用了Deferred lighting的例子有:

Deferred shading在商业游戏中的应用


与Deferred lighting相比,由于内存大小和带宽要求较高,这种技术并不是很流行。特别是在第7代主机上,图形内存大小和带宽是有限的,常常是瓶颈。

具有Deferred shading技术的游戏引擎


历史


Deferred shading的概念最初是由Michael Deering和他的同事于1988年发表的一篇名为《 The triangle processor and normal vector shader: a VLSI system for high performance graphics》论文中提出的。虽然文中从未使用“Deferred”一词,但介绍了一个关键的概念。 each pixel is shaded only once after depth resolution。我们今天所知道的Deferred shading,使用g-buffer,是由Saito和Takahashi在1990年的一片论文中介绍的,虽然他们也不使用“Deferred”这个词。第一个使用Deferred shading的视频游戏是《怪物史莱克》,这是2001年推出的xbox游戏。大约在2004年,商业图形硬件开始出现。这种技术后来在视频游戏等应用程序中流行起来,最终在2008年至2010年成为主流。

Deferred Shading 延迟着色(翻译)的更多相关文章

  1. Deferred shading rendering path翻译

    Overview 概述 When using deferred shading, there is no limit on the number of lights that can affect a ...

  2. Deferred Shading,延迟渲染(提高渲染效率,减少多余光照计算)【转】

    Deferred Shading,看过<Gems2> 的应该都了解了.最近很火的星际2就是使用了Deferred Shading. 原帖位置:   http://blog.csdn.net ...

  3. Deferred Shading延迟渲染

    Deferred Shading 传统的渲染过程通常为:1)绘制Mesh:2)指定材质:3)处理光照效果:4)输出.传统的过程Mesh越多,光照处理越费时,多光源时就更慢了. 延迟渲染的步骤:1)Pa ...

  4. Unity的Deferred Shading

    什么是Deferred Shading Unity自身除了支持前向渲染之外,还支持延迟渲染.Unity的rendering path可以通过Edit/Project Settings中的Graphic ...

  5. WebGL之延迟着色

    什么是延迟着色(Deferred Shading)?它是相对于正常使用的正向着色(Forward Shading)而言的,正向着色的工作模式:遍历光源,获取光照条件,接着遍历物体,获取物体的几何数据, ...

  6. D3D Deferred Shading

    在3D图形计算中,deferred shading是一个基于屏幕空间的着色技术.之所以被称为deferred shading,是因为我们将场景的光照计算与渲染"deferred"到 ...

  7. opengl deferred shading

    原文地址:http://www.verydemo.com/demo_c284_i6147.html 一.Deferred shading技术简介 Deferred shading是这样一种技术:将光照 ...

  8. 如何在Unity中分别实现Flat Shading(平面着色)、Gouraud Shading(高洛德着色)、Phong Shading(冯氏着色)

    写在前面: 先说一下为什么决定写这篇文章,我也是这两年开始学习3D物体的光照还有着色方式的,对这个特别感兴趣,在Wiki还有NVIDIA官网看了相关资料后,基本掌握了渲染物体时的渲染管道(The re ...

  9. 引擎设计跟踪(九.14.3.2) Deferred shading的后续实现和优化

    最近完成了deferred shading和spot light的支持, 并作了一部分优化. 之前forward shading也只支持方向光, 现在也支持了点光源和探照光. 对于forward sh ...

随机推荐

  1. seq 序列

    seq 序列用法: seq [option]...last seq [option]...first last seq [option]...first increment last 例如:seq 5 ...

  2. cd mkdir mv cp rm 命令目录相关操作

    切换目录: cd 家目录 cd. 当前目录 cd.. 当前上一级目录 cd../../当前目录的上上级目录 cd - 返回前一个目录 --------------------------------- ...

  3. 高斯求积公式 matlab

    1. 分别用三点和四点Gauss-Chebyshev公式计算积分 并与准确积分值2arctan4比较误差.若用同样的三点和四点Gauss-Legendre公式计算,也给出误差比较结果. 2*atan( ...

  4. 深入浅出MS SQL——编辑table 出错

  5. 3.5星|《订阅》:Youtube对用户喜好的发现与应对

    订阅:数字时代的商业变现路径 主要内容我总结是Youtube对用户喜好的发现与应对.可以认为很多时候作者说的是Youtubu官方的态度与想法.穿插了许多Youtube上的成功创作者的故事. Youtu ...

  6. 2019 wannafly winter camp

    2019 wannafly winter camp Name Rank Solved A B C D E F G H I J K day1 9 5/11 O O O O O day2 5 3/11 O ...

  7. Priority Queue

    优先队列 集合性质的数据类型离不开插入删除这两操作,主要区别就在于删除的时候删哪个,像栈删最晚插入的,队列删最早插入的,随机队列就随便删,而优先队列删除当前集合里最大(或最小)的元素.优先队列有很多应 ...

  8. Java多线程学习笔记之三内存屏障与Java内存模型

    基本内存屏障 处理器支持那种内存重排序,就会提供能够禁止相应内存重排序的的指令,这些指令就被成为基本内存屏障:StroeLoad屏障.StroeLoad屏障.LoadLoad屏障.LoadStore屏 ...

  9. PyQt5--Position

    # -*- coding:utf-8 -*- ''' Created on Sep 13, 2018 @author: SaShuangYiBing ''' import sys from PyQt5 ...

  10. canvas实例_在线画图工具

    fadsfklasdjfklasjdklfjasdlk;fjasd;lfjaskl;dfjal