近几天啃各种新技术时又一个蛋疼的副产品...额,算是把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. XSS

    XSS的含义 XSS(Cross Site Scripting)即跨站脚本.跨站的主要内容是在脚本上. 跨站脚本 跨站脚本的跨,体现了浏览器的特性,可以跨域.所以也就给远程代码或者第三方域上的代码提供 ...

  2. [C#] 简单的 Helper 封装 -- RegularExpressionHelper

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. html5的web存储

    在html5标准之前,web存储信息需要cookie来完成,但是cookie不适合大量数据存储.因为需要等待服务器响应,所以速度慢/效率低. 本地存储的特点: localstorage是仅存储在用户的 ...

  4. log4net使用手册

    1. log4net简介 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.Java平台下,它还 ...

  5. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  6. "NHibernate.Exceptions.GenericADOException: could not load an entity" 解决方案

     今天,测试一个项目的时候,抛出了这个莫名其妙的异常,然后就开始了一天的调试之旅... 花了很长时间,没有从代码找出任何问题... 那么到底哪里出问题呢? 根据下面那段长长的错误日志: -- ::, ...

  7. android SystemServer.java启动的服务。

    EntropyService:熵(shang)服务,用于产生随机数PowerManagerService:电源管理服务ActivityManagerService:最核心服务之一,Activity管理 ...

  8. Asp.NET + SQLServer 部署注意事项

    1. 内存设置最大值(如果不设置, 会造成内存占用太大,带来性能问题) IIS 设置最大内存 sqlserver 设置最大内存

  9. redis大幅性能提升之使用管道(PipeLine)和批量(Batch)操作

    前段时间在做用户画像的时候,遇到了这样的一个问题,记录某一个商品的用户购买群,刚好这种需求就可以用到Redis中的Set,key作为productID,value 就是具体的customerid集合, ...

  10. MySQL:常见使用问题

    内容 1.Linux 上安装 MySQL 2.单机上安装多实例 3.不知root密码情况下,修改root密码 1.Linux 上安装MySQL 安装步骤: 1)解压 tar.gz文件 -linux-g ...