zoukankan      html  css  js  c++  java
  • Deferred Rendering(二)G-Buffer的组织

    先来看一张网上广为流传的《杀戮地带2》典型的Deferred Shading的G-Buffer组织:


    这里补充解释下几个点
    G-Buffer还是太臃肿了:
    • MRT技术是有。但不代表其优。不管是AMD。还是NVida的优化文档上都说了要尽量避免MRT这回事
    • 复杂的渲染方案必须须要相应着一大堆參数要塞进MRT中
    • 假设引擎中的物件渲染风格不一样(比方RGame),必然须要额外的空间来存储类似MaterialID这种东西,灵活性不够
    因此Deferred Lighting的思想被提了出来:
    • 对照deferred shading : deferred shading 是将全部的shading都移到deferred 阶段进行
    • deferred lighting的本质:deferred lighting的deferred阶段仅仅进行lighting计算,从而和材质无关。
    • 最大优点:节省带宽。
    • 如今的G-Buffer:normal--保存两个float16分量;position--由深度重建而深度保存在depth texture所以这里不占用G-Buffer;specular factor。

      仅仅须要一张RT足矣。

    • lighting pass的输出: 累积的diffuse + 累计的specular 亮度(仅仅能牺牲掉specular的颜色了)
    • 遗憾:终于的着色还是须要额外的pass,前一篇提到的“屏幕空间的、与几何体复杂度无关的O( m + n) 的计算优势”仅仅能运用到lighting计算上。
    总结:
    • Deferred shading : 伴随着MRT有巨大的带宽消耗。灵活性也不佳,发展前途不大;
    • Deferred lighting : 尽管仅仅有光照计算是屏幕空间的。且相对Deferred shading每一个物体多了1个pass。但节省带宽且相当灵活,眼下是各大引擎的上上选。

  • 相关阅读:
    Discuz经典函数注释之authcode
    在delphi中,DLL加载时做初始化的Demo
    KERNEL32相关函数
    解析 png 图片的十六进制字符流
    delphi 获取硬盘序列号、cpu号、bios号、网卡号
    封装 INI 文件读写函数
    A窗口消失B窗口弹出
    delphi公用函数
    获取打开文件的PID
    C# cmd调用外部命令
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/7135785.html
Copyright © 2011-2022 走看看