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:

当中。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(三)反锯齿和半透明问题的更多相关文章

  1. Tile-Based Deferred Rendering

    目前所有的移动设备都使用的是 Tile-Based Deferred Rendering(TBDR) 的渲染架构.TBDR 的基本流程是这样的,当提交渲染命令的时候,GPU 不会立刻进行渲染,而是一帧 ...

  2. 多重采样(MultiSample)下的FBO反锯齿 【转】

    在三维渲染的过程中,锯齿总是让人讨厌的东西.抗锯齿的一种采用方式是多重采样,本文主要小记一下FBO与多重采样的关系.——ZwqXin.com 首先,关于FBO(Frame Buffer Object) ...

  3. Tutorial - Deferred Rendering Shadow Mapping 转

    http://www.codinglabs.net/tutorial_opengl_deferred_rendering_shadow_mapping.aspx Tutorial - Deferred ...

  4. osg如何设置抗锯齿(反走样,反锯齿)

    首先抗锯齿是什么? 举个最简单的例子 你用windows画图软件画一根直线(准确说这个叫做线段),当水平或者垂直的时候,如下图,这是绝对完美的 但是当线段出现倾斜时,就无法做到完美了此时就会出现锯齿 ...

  5. Forward Rendering VS Deferred Rendering

    http://gad.qq.com/article/detail/32731 Forward Rendering Deferred Rendering

  6. Tile based Rendering 二 tbr and tbdr 优化建议tiled based deferred rendering

    http://www.seas.upenn.edu/~pcozzi/OpenGLInsights/OpenGLInsights-TileBasedArchitectures.pdf tbr 和tbdr ...

  7. Deferred Rendering(二)G-Buffer的组织

    先来看一张网上广为流传的<杀戮地带2>典型的Deferred Shading的G-Buffer组织: 这里补充解释下几个点: 不存Position,而由depth和屏幕像素坐标反推出来.參 ...

  8. [ZZ] Deferred Rendering and HDR

    http://www.gamedev.net/topic/496785-deferred-rendering-and-hdr/ Quote: Original post by jstrohYeah I ...

  9. deferred rendering with msaa

    https://docs.nvidia.com/gameworks/content/gameworkslibrary/graphicssamples/d3d_samples/antialiasedde ...

随机推荐

  1. 【BZOJ4016】【FJOI2014】最短路径树问题

    题意: Description 给一个包含n个点,m条边的无向连通图.从顶点1出发,往其余所有点分别走一次并返回. 往某一个点走时,选择总长度最短的路径走.若有多条长度最短的路径,则选择经过的顶点序列 ...

  2. 箭头函数的this

    定义时所处的对象就是它的this 看外层是否有函数 如果有,外层函数的this就是内部箭头函数的this 如果没有,this就是window let obj = { name : '箭头函数', ge ...

  3. Vue 中 换行符获取

    当要获取到 vue 中 文本域的换行符时, 需要用到正则匹配. let reg = new RegExp('/n',"g"); let str = text.replace(reg ...

  4. [codevs1048]石子归并&[codevs2102][洛谷P1880]石子归并加强版

    codevs1048: 题目大意:有n堆石子排成一列,每次可合并相邻两堆,代价为两堆的重量之和,求把他们合并成一堆的最小代价. 解题思路:经典区间dp.设$f[i][j]$表示合并i~j的石子需要的最 ...

  5. 【Henu ACM Round#24 C】Quiz

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 肯定是这样 先放k-1个,然后空1个,然后再放k-1个.然后再空1个.. 以此类推. 然后如果(n/k)*(k-1)+n%k> ...

  6. SVN学习总结(2)——SVN冲突解决

    在我们用VS进行项目合作开发的过程中,SVN的提交控制是至关重要的,大家不可避免的都遇到过SVN冲突的问题,开发的时候,应该认真学习SVN的知识,减少冲突,集中时间放在开发上. 解决冲突有三种方式: ...

  7. USACO 玛丽卡(最短路+枚举)

    USACO 玛丽卡 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道从一个城市 ...

  8. 洛谷 P2818 天使的起誓

    P2818 天使的起誓 题目描述 Tenshi非常幸运地被选为掌管智慧之匙的天使.在正式任职之前,她必须和其他新当选的天使一样要宣誓.宣誓仪式是每位天使各自表述自己的使命,他们的发言稿放在n个呈圆形排 ...

  9. [Test] Easy automated testing in NodeJS with TestCafe

    Quickly get up and running with sensible automated testing scenarios written in ES6. Installing and ...

  10. Redis 存储图片 [base64/url/path]vs[object]

    一.base64图片编解码 基本流程:从网络获取下载一张图片.然后base64编码,再base64解码,存到本地E盘根文件夹下. import java.awt.image.BufferedImage ...