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 ...
随机推荐
- JS_类数组
[目录] 什么是数组 非类数组 类数组对象转化为数组 [类数组] 什么是类数组? 定义: 不具有数组的所具有的方法 拥有length属性,其属性(索引)为非负整数 类数组 var obj = { 0 ...
- 德尔福 XE5 安卓调试
https://stackoverflow.com/questions/2604727/how-can-i-connect-to-android-with-adb-over-tcp?page=2&am ...
- ORA-28000: the account is locked-详细解决方案
运行-->cmd-->sqlplus /nolog conn system/orcl(或预设的密码) alter user scott identified by tiger(或预设密码) ...
- ajax请求回数组数据,Vue页面数组没同步问题
记录bug 为什么 ajax 获取到了 vm.$data.list 页面上却没有显示出来的? 代码 //页面 <tr v-for="item in list">{{ * ...
- CF1000G Two-Paths
题目大意:给你一棵树,其中点上和边上都有值.定义2-Path为经过一条边最多两次的路径,价值为经过点的权值加和-经过边权值*该边经过次数.4e5组询问,每次询问树上连接x,y两点的2-Path的最大价 ...
- <Linux> 下安装和卸载JDK
安装 下载jdk https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 在local ...
- Java多线程基础(面试向)
----?为什么要用到多线程 CPU是以时间片的方式为进程分配CUP处理时间的,如果当一个进程同时要完成几件事的时候,如当从网上下载文件的时候,需要一边下载一边显示进度而且还要一边保存,如果按照单线程 ...
- linux arp-显示和修改IP到MAC转换表
博主推荐:更多网络测试相关命令关注 网络测试 收藏linux命令大全 arp命令用于操作主机的arp缓冲区,它可以显示arp缓冲区中的所有条目.删除指定的条目或者添加静态的ip地址与MAC地址对应关 ...
- PHP:Mysql 基础类
文章来源:http://www.cnblogs.com/hello-tl/p/7592547.html <?php /** * __construct($Mysql_config) 构造函数 $ ...
- 杭电 2037 今年暑假不AC
Problem Description “今年暑假不AC?”“是的.”“那你干什么呢?”“看世界杯呀,笨蛋!”“@#$%^&*%...” 确实如此,世界杯来了,球迷的节日也来了,估计很多ACM ...