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 ...
随机推荐
- asp.net C# 获得配置文件AppSettings 的值
using System.Configuration;//导入命名空间 //配置文件 Web.config <appSettings> <!--数据连接字符串--> <a ...
- vim跳转(一)
参考资料:http://easwy.com/blog/archives/advanced-vim-skills-basic-move-method/ 在normal模式下使用如下命令 1.h, j, ...
- Elasticsearch分布式机制和document分析
1. Elasticsearch对复杂分布式机制的透明隐藏特性 1.1)分片机制 1.2)集群发现机制 1.3)shard负载均衡 1.4)shard副本,请求路由,集群扩容,shard重分配 2. ...
- Python之trutle库-五角星
Python之trutle库-五角星 #!/usr/bin/env python # coding: utf-8 # Python turtle库官方文档:https://docs.python.or ...
- python 深浅拷贝&集合
一.深浅拷贝 1.浅拷贝,只会拷贝第一层 s = [1, 'ss', '小可爱'] s1 = s.copy() print(s1) >>> [1, 'ss', '小可爱'] s = ...
- POJ1013称硬币【枚举】
Counterfeit Dollar Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 52474 Accepted: 16 ...
- 关于zkfc与zkserver频繁断开的问题
详见http://blog.csdn.net/dslztx/article/details/51596951
- 基本dos
文件夹的操作: 进入指定盘符:盘符名+: dir:列出当前控制台下的所有文件以及文件夹 . cd +文件夹名称:进入指定文件夹 cd.. 返回上一级 cd \返回到当前目录的根目 ...
- JavaScript编程那些事(牛客网 LeetCode)
计算给定数组 arr 中所有元素的总和 本人提供常规方法 function sum(arr) { var len = arr.length; var sum = 0; if(len == 0){ su ...
- Node.js & Unix/Linux & NVM
Node.js & Unix/Linux & NVM nvm https://github.com/creationix/nvm https://github.com/xyz-data ...