延迟着色是一种对3d场景进行后期照明的技术,这种技术突破了以往渲染系统支持多重动态光源时,效率以及各种性能急剧下降的的限制。从而使得一个3d场景可以支持成百上千个动态光源的效果。

  它的技术思路主要将3d场景的几何光照信息(位置、法线、材质信息)渲染到render target上,把它们从世界的三维空间转变成屏幕的颜色空间,作为光照计算时的输入,接着,对每一个光源,使用这些信息输入来进行计算生成一帧,然后把这样的一帧(render target)合成到结果的帧缓存上,这样当遍历完所有的光源,计算就完毕了,帧缓存上的图像就是最后的渲染结果。

概述:延迟着色的优势
1. 它能让你在绘制几何图形的时候不需要为任何光照方面的问题所担忧。
2. 使用多个渲染流程将像素的多种格式,比如空间坐标,法线渲染到各自得目标缓冲中去。
3. 利用第2点中提到的渲染数据对像素进行着色计算,仿佛在2D图形空间中进行绘制一样。

传统单通路光照(影响物体的所有光照在一个shader pass中完成)有哪些特点?
1. 光源数量极少的场景中传统渲染方式能工作得很好,比如只有太阳光的野外场景。
2. 在光源很多的时候,非常难于对光照进行管理。
3. 由于所有光照都在一个shader里完成,所以shader指令数目一个不小心就超过了GPU限制。

传统多通路光照(指每个光源对物体的影响是分开pass中完成的)有哪些特点?
1. 复杂度太高,计算完所有光照需要 物体数目 × 光源数目 个pass。
2. 不论是按物体,还是按光源进行分批都是相当麻烦的。
3. 理论上讲,光源应该按它们的作用范围对场景进行分割管理,但如果按多通路计算光照,动态光源将相当难处理。

延迟着色有哪些特点?
For each object:
    Render to multiple targets
For each light:
    Applylight as a 2D postprocess
1. 复杂度适中,需要物体数目 + 光源数目 个pass。
2. 易于分批计算。
3. 多个小范围光源和一个大范围光源计算量差不多(因为每象素影响光源数一样)。

我们需要哪些渲染目标缓冲?
1. 我们需要如下几何渲染结果:
      -空间坐标
      -法线数据
      -材质参数(漫反射颜色,自发光颜色,高光颜色及高光衰减系数等)
2.延迟着色不是适用于需要特别多输入参数的光照计算(比如球面调和函数的光照计算)。
 
“胖的”帧缓冲
各种帧缓冲的格式:
    –空间坐标         A32B32G32R32F
    –法线              A16B16G16R16F
    –漫反射颜色      A8R8G8B8
    –材质参数         A8R8G8B8
每个像素占用256字节,在不使用抗锯齿的情况下,1024×768要占用24M的空间。目前现在的硬件也不支持多个不同格式的帧缓冲。

优化帧缓冲尺寸
     –使用A2R10B10G10格式来存储法线。
     –可以利用调色板机制来存储材质属性,利用索引来取得所要的值。
     –完全没有必要用一个VECTOR3在存储像素的空间位置,因为我们知道相机的空间位置,并且知道像素在屏幕空间中的坐标,这样我们只需要还知道相机到像素的距离,就可以求得像素的空间3D坐标了。

我的帧缓存格式的选择

•128 bits per pixel=12 meg @ 1024x768:
    –Z深度                              R32F
    –法线和散射                       A2R10G10B10
    –漫反射颜色 + 自发光颜色    A8R8G8B8
    –其他材质参数                    A8R8G8B8
我的材质参数有:高光强度,高光系数,遮挡因子和阴影数量,我还使用了法线缓冲alpha通道中的2bit来控制次表面散射。

转载于:https://www.cnblogs.com/lancidie/archive/2011/07/19/2110842.html

[翻译]延迟着色(1)相关推荐

  1. Learn OpenGL 笔记6.9 Deferred Shading(延迟着色)

    到目前为止,我们进行照明的方式称为forward rendering前向渲染或forward shading前向着色.我们渲染对象,根据场景中的所有光源对其进行照明.我们为场景中的每个对象分别为每个对 ...

  2. Tabula Rasa中的延迟着色技术

    Deferred Shading,看过<Gems2>的应该都了解了.无论是Unreal3.Crysis还是星际2,都已经支持或者准备支持这个技术. 不过因为国内这种环境,真正在项目中能用到 ...

  3. OpenGL延迟着色之三

    OpenGL延迟着色 OpenGL延迟着色简介 源代码剖析 主要源代码 OpenGL延迟着色简介 看来我们对延迟着色技术的实现是正确的,但是如果您仔细观察,我们会注意到上一课最后列出的许多缺点.首先, ...

  4. OpenGL延迟着色之二

    OpenGL延迟着色 OpenGL延迟着色简介 源代码剖析 主要源代码 OpenGL延迟着色简介 在上一教程中,我们介绍了延迟着色的基础知识,并用几何传递结果的组合填充了G缓冲区.如果运行演示,您将看 ...

  5. OpenGL延迟着色之一

    OpenGL延迟着色 OpenGL延迟着色简介 源代码剖析 主要源代码 OpenGL延迟着色简介 我们一直使用的方法称为"正向渲染"或"着色".- 这是一种简单 ...

  6. GPU Gems2 - 9 S.T.A.L.K.E.R.中的延迟着色(Deferred Shading in S.T.A.L.K.E.R.)

    关于延迟着色的详细技术及最新渲染管线技术可以参考我的这篇文章: https://blog.csdn.net/yinfourever/article/details/90263638 [章节概览] 本章 ...

  7. 《Real-Time Rendering 4th Edition》读书笔记--简单粗糙翻译 第五章 着色基础 Shading Basics

    写在前面的话:因为英语不好,所以看得慢,所以还不如索性按自己的理解简单粗糙翻译一遍,就当是自己的读书笔记了.不对之处甚多,以后理解深刻了,英语好了再回来修改.相信花在本书上的时间和精力是值得的. -- ...

  8. 《Real-Time Rendering 4th Edition》全文翻译 - 第5章 着色基础(中)5.3 ~ 5.4

    这两节终于翻译完毕,不得不说原文篇幅是真的长,花了不少时间. 另外,以后引用的具体文章标题不会再列出来,一是为了节省时间,二是感觉列出来会过于冗余.所以如果想看具体引用文章标题的话,请在原书里手动搜索 ...

  9. keras 中adam_ADAM中的渲染和着色:第3集

    keras 中adam Have you seen ADAM: The Mirror and ADAM: Episode 3 yet? These two short films have capti ...

最新文章

  1. 3.2.4 控制图层显示的范围
  2. WebMessenger完善后将作为一个开源项目
  3. day02.3-元组内置方法
  4. 一个傻瓜式构建可视化 web的 Python 神器
  5. 40名大学生被退学,教育部表态:学生对自己不负责,就要付出代价
  6. .DateTimeToStr函数专用优化版
  7. 20190831:(leetcode习题)汉明距离
  8. Alien Skin Exposure X6 mac汉化免费插件包胶片滤镜新功能介绍
  9. qnap 文件传输服务器,如何将 QNAP NAS 作为 RADIUS 服务器使用?
  10. html旋转3d魔方制作方法,JavaScript实现的3D旋转魔方动画效果实例代码
  11. 计算机组成原理/计算机硬件基础第五章:存储器
  12. 物业服务的品质、成本与四保一服的数字化方法
  13. 项目不同阶段的风险特征
  14. 白帽黑客学习之路-python篇-基础
  15. WINVNC源码分析(二)——图像
  16. CAR路里大学堂-汽车测试培训(CANOE)
  17. 域用户登录方法在计算机上不被允许,域管理员不允许本地交互式登陆的解决方法...
  18. android 从顶部弹出的SnackBar
  19. kali2020自动登录
  20. App自动化02-元素定位、显示与隐式等待、常见控件交互方法

热门文章

  1. php正则判断字符串是否含有中文
  2. 父类和子类在同一张表
  3. /proc/kcore失效,调试其文件系统相关模块,使重新正常工作
  4. 关于CXF的FrontEnd和数据绑定方案
  5. android 拨打紧急号码,通话时开启免提功能实现
  6. Andriod: 在xml布局中使用自定义属性
  7. CSS3展开带弹性动画的手风琴菜单
  8. python字符串应用
  9. Android studio 报错AAPT2 error
  10. 【转载】python 编码问题 u'汉字'