Deferred Rendering(三)反锯齿和半透明问题
Deferred 框架下的AA
前面说过Deferred 框架下无法使用硬件AA。这句话不严谨:
- Deferred Shading在G-Buffer之后,物体几何信息全被抛弃了,导致兴许每一个像素都独立计算,所以不能使用硬件AA;
- 可是:Deferred Lighting,在Shading Pass阶段。物体会被再次渲染一遍,此时打开硬件MSAA,肯定是能用的(虽然光照部分取自lighting Pass阶段得到的texture,没能享受到AA。但对终于结果影响非常小)。
所以。总结来看,Deferred Lighting能用硬件AA,而Deferred Shading不能使用!
即便如此,因为硬件AA处理的是primitive的边界,而非真正的“物体边缘”。所以对时间和空间的冲击那是相当巨大。
这一问题在deferred框架下尤其明显。所以各种基于post process的AA方法应声而出!
眼下基本的各类Post process AA:
- GPU Gems2 “Deferred Shading in S.T.A.L.K.E.R.” 一章介绍了 Edge
AA- 对每像素做边缘检測,得到一权重值,终于依据权重值和阀值做比較,提取出“物体边缘”
- 对“物体边缘”。依据其权重值,与周围像素融合,得到AA效果
- 缺点:“阀值”和分辨率相关
- GPU Gems3 “Deferred Shading in Tabula Rasa” 一章介绍了由NCSoft改进的Edge
AA- 改进边缘提取算法,使其“阀值”和分辨率无关
- AMD 的 Directionally
Adaptive Edge AA - MLAA
- DLAA
- Humus
的GPAA - NVidia的FXAA
当中。FXAA效果不错,时空效能也不错。自面世以来一直比較受宠。可重点关注一下!
处理半透明物体
- RGame如今在用的,也是最常见的做法:
- 在defferred Rendering之后专门再开一条forward Rendering 管线专门来绘制半透明物体
- 尽管不利于扩展维护,可是简单、粗暴、有效;
- 值得注意的是。万一场景中半透明物体非常多,且须要接受光照影响,那不能通过Deferred Rendering处理的物体就多了。此时这样的方法不可取。
- KlayGE 4.0开源引擎中提出的方法:
- 首先得到不透明物体的G-Buffer。正常流程经过Lighting Pass 和 Shading Pass绘制不透明物体
- cull mode设置为front(依据坐标系的不同为CW或CCW),得到半透明物体的背面的G-Buffer(中间需clip掉比不透明物体更远的pixel)。然后经过Lighting Pass + Shading Pass + Alpha Blend得到终于结果
- cull mode设置为back,与上面过程一样。绘制半透明物体的正面并Alpha Blend得到终于结果 -- 缺点也非常明显:3倍的内存、带宽消耗。眼下使用价值不大
- 对光照计算结果的正确性做妥协。
- G-Buffer的引入实际上是仅仅保留了屏幕上同一块区域的一个片元的几何信息;
- 对于多个片元重合的情况,假设都是不透明物体。那没问题;假设有半透物体, 那么仅仅有在透明度达到一定阀值时。才写入G-Buffer
- Deferred Lighting的优势凸显:毕竟要在shading pass阶段再渲染一遍物体,那么渲染半透明物体时,关闭Z-Test。依照正常流程去Shading, 之后做alpha blend融合就好。不对的仅仅是光照结果部分。
- 据说,QQ飞车就是这样做得,透明度阀值取75%,不细致看发觉不出问题
- 当然。这样的方法不适用于Deferred Shading
- 补充:注意大前提“半透明物体须要受光照影响”;否则不如直接进入foward Rendering管道
Deferred Rendering(三)反锯齿和半透明问题的更多相关文章
- Tile-Based Deferred Rendering
目前所有的移动设备都使用的是 Tile-Based Deferred Rendering(TBDR) 的渲染架构.TBDR 的基本流程是这样的,当提交渲染命令的时候,GPU 不会立刻进行渲染,而是一帧 ...
- 多重采样(MultiSample)下的FBO反锯齿 【转】
在三维渲染的过程中,锯齿总是让人讨厌的东西.抗锯齿的一种采用方式是多重采样,本文主要小记一下FBO与多重采样的关系.——ZwqXin.com 首先,关于FBO(Frame Buffer Object) ...
- Tutorial - Deferred Rendering Shadow Mapping 转
http://www.codinglabs.net/tutorial_opengl_deferred_rendering_shadow_mapping.aspx Tutorial - Deferred ...
- osg如何设置抗锯齿(反走样,反锯齿)
首先抗锯齿是什么? 举个最简单的例子 你用windows画图软件画一根直线(准确说这个叫做线段),当水平或者垂直的时候,如下图,这是绝对完美的 但是当线段出现倾斜时,就无法做到完美了此时就会出现锯齿 ...
- 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 ...
- Deferred Rendering(二)G-Buffer的组织
先来看一张网上广为流传的<杀戮地带2>典型的Deferred Shading的G-Buffer组织: 这里补充解释下几个点: 不存Position,而由depth和屏幕像素坐标反推出来.參 ...
- [ZZ] Deferred Rendering and HDR
http://www.gamedev.net/topic/496785-deferred-rendering-and-hdr/ Quote: Original post by jstrohYeah I ...
- deferred rendering with msaa
https://docs.nvidia.com/gameworks/content/gameworkslibrary/graphicssamples/d3d_samples/antialiasedde ...
随机推荐
- PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
在一般的 Server 程序中都会有一些耗时的任务,比如:发送邮件.聊天服务器发送广播等.如果我们采用同步阻塞的防水去执行这些任务,那么这肯定会非常的慢. Swoole 的 TaskWorker 进程 ...
- 【BZOJ 1089】[SCOI2003]严格n元树
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 设fi表示深度为i的树个数,si是fi的前缀和,即si为深度不超过i树的个数. 那么si=s[i-1]^n + 1 就是说 先选一个 ...
- ActiveMQ学习总结(9)——Linux中安装ActiveMQ
1.新建一个文件夹activeMQ mkdir /server 2.授权 chmod 777 /server 3.下载activeMQ安装包,拷贝到/activeMQ目录下 apache-a ...
- FZU 1980 AbOr's story
AbOr's story Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on FZU. Original I ...
- 现代C++
C++ 是世界上最常用的编程语言之一. 编写良好的 C++ 程序是快速.高效的. 该语言比其他语言更加灵活,因为你可以使用它来创建各种应用,包括有趣刺激的游戏.高性能科学软件.设备驱动程序.嵌入式程序 ...
- Java里的各种队列
以下翻译来自java8的官方文档: 1.LinkedBlockingQueue:基于链接节点的可选限定的blocking queue . 这个队列排列元素FIFO(先进先出). 队列的头部是队列中最长 ...
- java里的一些特别值得注意的地方
return 语句的作用:1.返回值 2.结束某个方法的执行. 局部变量必需要初始化,全局变量系统会默认初始值: 整型数赋默认值为0. 浮点数赋默认值为0.0,boolean赋默认值为false. c ...
- GridView中使用CheckBox
asp.net中checkbox是向server提交时才干触发事件 把该控件的autopostback设置为true.才干响应事件 protected void Checkbox_CheckedCh ...
- IIS 7.5 配置
安装 MVC 3 对应版本. 或者对应的版本. 登陆时候报错 检查下面几项是否配置正确 检查ASP.net 是否开启. 检查网站的应用池是否配置正确 在处理程序映射当中检查这几项是否配置正确 如果都配 ...
- 文件IO流总结
文件在网络上或不同设备之间是怎么传输的,在Java程序中又是怎么来实现文件的传输,带着这两个问题,来了解一下Java中的IO流相关类及操作. 一.什么是流及流的用途 流是一组有顺序,有起点和终点的字节 ...