Deferred Rendering(二)G-Buffer的组织
先来看一张网上广为流传的《杀戮地带2》典型的Deferred Shading的G-Buffer组织:
这里补充解释下几个点:
- 不存Position,而由depth和屏幕像素坐标反推出来。參考:http://www.derschmale.com/2014/01/26/reconstructing-positions-from-the-depth-buffer/
- Normal能够仅仅存两个分量,算法多种多样。float16 精度足矣。參考:http://aras-p.info/texts/CompactNormalStorage.html
- depth事实上无需占用RT保存。dx9下的解决方法是depth texture:depth 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。但节省带宽且相当灵活,眼下是各大引擎的上上选。
Deferred Rendering(二)G-Buffer的组织的更多相关文章
- Tutorial - Deferred Rendering Shadow Mapping 转
http://www.codinglabs.net/tutorial_opengl_deferred_rendering_shadow_mapping.aspx Tutorial - Deferred ...
- Tile-Based Deferred Rendering
目前所有的移动设备都使用的是 Tile-Based Deferred Rendering(TBDR) 的渲染架构.TBDR 的基本流程是这样的,当提交渲染命令的时候,GPU 不会立刻进行渲染,而是一帧 ...
- NIO(二、Buffer)
目录 NIO(一.概述) NIO(二.Buffer) Buffer 前文讲了NIO与IO的区别,那么这一章开始讲述NIO下核心类 - Buffer类 上一章就说过,NIO的核心包括三个部分:通道(Ch ...
- Deferred Rendering(三)反锯齿和半透明问题
Deferred 框架下的AA 前面说过Deferred 框架下无法使用硬件AA.这句话不严谨: Deferred Shading在G-Buffer之后,物体几何信息全被抛弃了,导致兴许每一个像素都独 ...
- Forward Rendering VS Deferred Rendering
http://gad.qq.com/article/detail/32731 Forward Rendering Deferred Rendering
- Tile based Rendering 二 tbr and tbdr 优化建议tiled based deferred rendering
http://www.seas.upenn.edu/~pcozzi/OpenGLInsights/OpenGLInsights-TileBasedArchitectures.pdf tbr 和tbdr ...
- Java NIO系列教程(三-十二) Buffer
原文链接 作者:Jakob Jenkov 译者:airu 校对:丁一 Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到 ...
- 理解twisted中的reactor和deferred(二)
Deferred可以添加多个回调函数,每个回调函数的结果作为下一个回调函数的参数 代码实例(可在pycharm中运行,摘自 https://twistedmatrix.com/documents/cu ...
- [ZZ] Deferred Rendering and HDR
http://www.gamedev.net/topic/496785-deferred-rendering-and-hdr/ Quote: Original post by jstrohYeah I ...
随机推荐
- 06JavaScript函数
JavaScript函数 3.1系统函数 3.1.1编码函数 功能:将字符串中非文字.数字字符(如&,%,#,^,空格符…)转成相对应的ASCII值. 语法:escape(字符串) 3.1.2 ...
- 在 VS2015+EF6.0中使用Mysql 遇到的坑
1)首先是要在vs2015中安装mysql Database 默认是不存在的 1)下载mysql-connector-net-6.9.9.msi 地址:https://dev.mysql.com ...
- React入门介绍(1)-ReactDOM.render()等基础
React入门介绍-ReactDOM.render()等基础 首先,React是一个用于构建用户界面的Javascript库,但Peact并不是一套完整的MVC或MVVM的框架,它仅涵盖V-view视 ...
- react-native Socket Event 在控制台的输出
在XCode中运行react-native 的时候,避免不了的要查看日志信息 ,但是react-native中的Socket的日志简直是太多了,往往是刚看到自己想要看到的信息的时候,瞬间就被最新的日志 ...
- linux系统查看网络连接情况
netstat命令状态说明: CLOSED 没有使用这个套接字[netstat 无法显示closed状态] LISTEN 套接字正在监听连接[调用listen ...
- js 技巧 (六)弹窗代码汇总
弹窗代码汇总 [0.超完美弹窗代码] 功能:5小时弹一次+背后弹出+自动适应不同分辩率+准全屏显示 代码: <script> function openwin(){ window.open ...
- 怎样提高DB2存储过程性能
高性能的SQL过程是数据库开发人员所追求的,我将不断把学到的,或在实际开发中用到的一些提高SQL过程性能的技巧整理出来,温故而知新. 1,在只使用一条语句即可做到时避免使用多条语句 让我们从一个简单的 ...
- yum 软件管理器
yum软件管理器 yum是一个强大的软件包管理器,能够自动解决安装时rpm包之间的依赖关系. 一.使用yum管理软件包 1.使用命令 yum help 查看使用方法 [root@majinhai ~] ...
- vue项目编译配置 用于结合Django项目
- 使用HTML,CSS快速导出数据到Excel
在应用中经常会遇到要从系统或数据库中导出数据平面文件,一般是导出到txt,csv或excel.txt和csv一般用在系统间的数据交换, 而excel一般有较好的显示效果,可以按照一定的模板导出,导出就 ...