近几天啃各种新技术时又一个蛋疼的副产品...额,算是把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. 使用Monit监控本地进程

    目前用它监控某些服务,失败自动重启,同时监控特定的日志文件,如果有变化,就发邮件报警 安装不细写了,网上好多 我先用cat /proc/version看了下我的系统是el6的,于是wget http: ...

  2. ASP.NET Core HTTP 管道中的那些事儿

    前言 马上2016年就要过去了,时间可是真快啊. 上次写完 Identity 系列之后,反响还不错,所以本来打算写一个 ASP.NET Core 中间件系列的,但是中间遇到了很多事情.首先是 NPOI ...

  3. 一步步开发自己的博客 .NET版(10、前端对话框和消息框的实现)

    关于前端对话框.消息框的优秀插件多不胜数.造轮子是为了更好的使用轮子,并不是说自己造的轮子肯定好.所以,这个博客系统基本上都是自己实现的,包括日志记录.响应式布局.评论功能等等一些本可以使用插件的.好 ...

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

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

  5. angular实现统一的消息服务

    后台API返回的消息怎么显示更优雅,怎么处理才更简洁?看看这个效果怎么样? 自定义指令和服务实现 自定义指令和服务实现消息自动显示在页面的顶部,3秒之后消失 1. 显示消息 这种显示消息的方式是不是有 ...

  6. PHP之使用网络函数和协议函数

    使用其他Web站点的数据 <html> <head> <title> Stock Quote From NASDAQ </title> </hea ...

  7. ios label 自动计算行高详解

    在OC当中自动计算行高主要调用系统的 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #ffffff } span ...

  8. HA 高可用软件系统保养指南

    又过了一年 618,六月是公司一年一度的大促月,一般提前一个月各系统就会减少需求和功能的开发,转而更多去关注系统可用性.稳定性和管控性等方面的非功能需求.大促前的准备工作一般叫作「备战」,可以把线上运 ...

  9. 项目管理_FindBugs的使用

    本章将讲述如何在Myeclipse下,使用FindBugs,静态分析工具,无需开发人员费劲就能找出代码中已有的缺陷. 一:Myeclipse下如何安装FindBugs插件 1:FindBugs插件下载 ...

  10. [每日Linux]Linux下xsell和xftp的使用

    实验缘由: 1.xsell在Linux下的作用就是远程登录的一个界面,也就是实现访问在Windows下访问Linux服务器的功能.之前在数据挖掘实验中因为自己电脑的内存不够,曾经使用过实验室的服务器跑 ...