近几天啃各种新技术时又一个蛋疼的副产品...额,算是把AMD的Forward+ Sample抄了一遍吧。

其实个人感觉这个AMD大肆宣传的Forward+跟Intel很早之前提的Tiled-Based Deferred Rendering没多大区别,本质上应该就是后者的Forward实现而已。其基本流程可以如下描述:

1. Pre-Z Pass: 渲染物体深度信息到纹理。(很多Forward Pipeline也会做这一步,以提前剔除被遮挡的pixel, 减小shading时的计算量)

2. Tilling Pass: 将上一步的Z-Buffer划分为多个NxN (e.g. 8x8, 16x16)的Tile,使用Compute Shader算得每个Tile的Z值范围,以求出该Tile的View Frustum,然后对每个光源与该Frustum求交,求得对该Tile有贡献的光源Index List。

3. Forward Rendering Pass: 正常绘制物体,在Pixel Shader中对每个像素找到其对应的Tile,从而得到对应的光源List,只用这部分光源算shading。

(把第一步替换成G-Buffer Pass,最后一步换成对G-Buffer中每个Pixel算shading就是Tiled-Based Deferred Rendering了,核心的Tiling完全没区别嘛... AMD你的创新点在哪?⊙﹏⊙b)

额,好吧,虽说核心基本一致,但Forward+还是有好处的:拿简单的Pre-Z Trade了很费带宽的G-Buffer,再比如硬件MSAA。

##############################################################

既然这货被说的这么NB,我也照着抄了一个自己的版本。下面的截图是跟AMD的Sample一样的Sponza场景,唯一不同的是多了块红布,以及做了简单的View Frustum Culling。当然最大的悲剧是即使做了Culling,我的版本似乎还是比AMD Sample慢了20%多- -...或许是因为我用的Model是直接从Crytek网站上拽下来的,没有Optimize吧。

(800X600, 4xMSAA 16x AF, GTX 680)

惯例附带AMD Sample的链接:

Forward+: http://developer.amd.com/wordpress/media/2013/01/ForwardPlus11_v1.0.zip

以及一个AMD最新的TBDR和Forward+的合集:http://developer.amd.com/wordpress/media/2013/06/TiledLighting11_v1.0.zip

Forward+ Rendering Framework的更多相关文章

  1. Unity shader学习之Forward Rendering Path

    Forward rendering path shader如下: // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObje ...

  2. 前向渲染路径细节 Forward Rendering Path Details

    正向渲染路径细节 Forward Rendering Path Details Forward Rendering path renders each object in one or more pa ...

  3. Forward Rendering 正向渲染

    Forward Rendering 正向渲染        正向渲染一个基于着色器的渲染路径.它支持逐像素计算光照(包括法线贴图和灯光Cookies)和来自一个平行光的实时阴影.在默认设置中,少数最亮 ...

  4. 正向渲染路径细节 Forward Rendering Path Details

    http://www.ceeger.com/Components/RenderTech-ForwardRendering.html This page describes details of For ...

  5. Forward Rendering VS Deferred Rendering

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

  6. 2012 Theory for Forward Rendering

    http://miss-cache.blogspot.com/2012/08/lighting-transparent-surfaces-with_26.html http://aras-p.info ...

  7. 【原】实时渲染中常用的几种Rendering Path

    [原]实时渲染中常用的几种Rendering Path 本文转载请注明出处 —— polobymulberry-博客园 本文为我的图形学大作业的论文部分,介绍了一些Rendering Path,比较简 ...

  8. Thinking in Unity3D:渲染管线中的Rendering Path

      关于<Thinking in Unity3D> 笔者在研究和使用Unity3D的过程中,获得了一些Unity3D方面的信息,同时也感叹Unity3D设计之精妙.不得不说,笔者最近几年的 ...

  9. Rendering Paths

    渲染路径 Rendering Paths http://game.ceeger.com/Manual/RenderingPaths.html 延迟光照渲染路径的细节 Deferred Lighting ...

随机推荐

  1. Mapreduce的文件和hbase共同输入

    Mapreduce的文件和hbase共同输入 package duogemap;   import java.io.IOException;   import org.apache.hadoop.co ...

  2. Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制

    将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现.SQ ...

  3. C# 中参数验证方式的演变

    一般在写方法的时候,第一步就是进行参数验证,这也体现了编码者的细心和缜密,但是在很多时候这个过程很枯燥和乏味,比如在拿到一个API设计文档的时候,通常会规定类型参数是否允许为空,如果是字符可能有长度限 ...

  4. IOS FMDB 获取数据库表和表中的数据

    ios开发中,经常会用到数据库sqlite的知识,除了增,删,改,查之外,我们说说如何获取数据库中有多少表和表相关的内容. 前言 跟数据库使用相关的一般的增删改查的语句,这里就不做解释了.在网上有很多 ...

  5. [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率

    使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...

  6. 2013 Asia Changsha Regional Contest---Josephina and RPG(DP)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4800 Problem Description A role-playing game (RPG and ...

  7. 海康网络摄像机YV12转换为BGR,由opencv Mat显示 (转)

    我使用的是海康DS-2CD852MF-E, 200万,网络摄像机,已经比较老了,不过SDK在海康官网下载的,开发流程都差不多. 海康摄像机回调解码后的视频数据格式为YV12,顺便说一下YV12的数据格 ...

  8. fhq treap最终模板

    新学习了fhq treap,厉害了 先贴个神犇的版, from memphis /* Treap[Merge,Split] by Memphis */ #include<cstdio> # ...

  9. Python处理Excel表格

    同事小王今天说他有一个Excel表格,表格如下,一列是姓名,一列是电话号码,总共有大概2000行数据. 有的姓名占了一行,有的占了两行,还有一些占了三行的.如下图: 他问我可不可以全部统一成一行,而且 ...

  10. Forward+ Rendering Framework

    近几天啃各种新技术时又一个蛋疼的副产品...额,算是把AMD的Forward+ Sample抄了一遍吧. 其实个人感觉这个AMD大肆宣传的Forward+跟Intel很早之前提的Tiled-Based ...