Tiled Based流程

1.将屏幕分成小块,每个小块为一个视锥体

2,(depth bounds)在每一个视锥体中,根据ZBuffer得到每个Tile的MinZ和MaxZ,用MinZ到MaxZ这片区域对光做交点测试(使用compute shader)

因此不需要光体积,点光源只需要position和range,spotlight也用球来做剔除bound

3.(light culling)剔除后,每个Tile里面的光的index写入list,得到tile个光源index的list

4.之后进行color pass

Depth Bounds

在每个tile的视锥体里取得maxZ和minZ,需要用到compute shader

每次采样多个深度比一个要节省时间( Parallel Reduction)

Light Culling

Advancements in Tiled-Based Compute Rendering里面介绍了两种剔除方法,一种是视锥体剔除,一种是AABB剔除,AABB剔除结果好一些

短视锥体AABB精度更高

在深度不连续( Depth Discontinuities)也就是minZMaxZ相距太远导致中间有很多没有照到物体的光源,一般会出现在物体边缘部分(最坏情况是物体边界到farplane),如果计算会浪费,需要被剔除掉,剔除方法文中介绍有2.5D Culling,和halfZ,还有改良halfZ

2.5D Culling

缺点:

先进行上面的lightculling,将视锥体外的光剔除

将minZmaxZ构造的depth bounds分成32份,每份里进行1+light个 Depth mask & Depth mask

之所以是32份是因为用一个32bit的Depth mask

首先把物体写入一个Depth mask,32块,如果有一块里包含物体,就为1否则为0

再对每个光写入Depth mask,与物体的Depth mask进行&操作,这样就知道光是否照到物体,而且知道照到哪块物体了,,可以剔除掉中间没有用的光源了

优化与测试

得出结论改良HalfZ和AABB是最性能最好的

并且可以把块变小,用16x16与32x32作对比,32x32虽然会增加colornpass消耗,但是会减少culling时间,整体还是比16x16时间短

Tiled Based Deferred Shading

Tiled Based Deferred Shading流程

1.生成GBuffer

2.将GBuffer分tile,每个tile用cs计算出depth bound

3.进行light cull,得到light index list

4.color pass,使用GBuffer信息,用该fragment所在tile的light index list进行绘制

TBDS好处

传统Deferred每一个光照要绘制整个光照体积,光源多了也很消耗,

TBDS通过分块与光源进行求交测试,不需要像传统Deferred一样绘制光体积还要深度测试和stencil pass了

Forward+

Forward+流程

1.ZPrePass(为了获取深度进行depth bound,但是ZPrePass也会辅助硬件进行earlyZ)

2.将ZBuffer分tile,每个tile用cs计算出depth bound

3. 进行light cull,得到light index list

4.同forward一样,。每个物体走FS,用该fragment所在tile的light index list进行绘制

Forward+好处

可以用多个光源,不必再多一个光源就要全部绘制一遍,在光源照不到的部分就不需要绘制

需要ZPrePass来提前生成ZBuffer,比Deferred带宽要少,

Forward+比传统Deferred要快

详细性能分析请看龚大这篇文章

参考:
1. Forward+: Bringing DeferredLighting to the Next Level

2. A 2.5D Culling for Forward+

3. Advancements in Tiled-Based Compute Rendering

4.Forward框架的逆袭:解析Forward+渲染

----by wolf96 2019/1/1

Clustered Shading

TBS只解决了不透明物体的光照问题,因为半透明物体不写入深度,如果有半透明物体在bound前面,就无法绘制其光照

这样的话需要用Clustered Shading来解决透明物体的光照问题

Clustered Shading也有一个好处是不需要ZprePass

Clustered Deferred Shading流程

1.生成GBuffer

2.将GBuffer分cluster/slice

3.分配光照给每个cluster,得到light index list

4.color pass,使用GBuffer信息,用该fragment所在cluster(通过world pos来获取是哪个cluster)的light index list进行绘制

参考:

1.http://www.cse.chalmers.se/~uffe/clustered_shading_preprint.pdf

2.http://www.diva-portal.org/smash/get/diva2:839812/FULLTEXT02.pdf

---- Add by wolf96 2019/2/19

Tiled Based Deferred Shading与Forward+相关推荐

  1. Directx11进阶教程之Tiled Based Deffered Shading

    前言 很多游戏中存在大量的点光源(PointLight),环境艺术家为了让游戏模拟现实的氛围,一个场景下放下上千个点光源(PointLight)毫不奇怪. 下面介绍下传统的渲染管线大量点光源的表现. ...

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

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

  3. Directx11进阶教程之Cluster Based Deffered Shading

    前言 很多游戏中存在大量的点光源(PointLight),环境艺术家为了让游戏模拟现实的氛围,一个场景下放下上千个点光源(PointLight)毫不奇怪. 在上一章中  Directx11进阶教程之T ...

  4. Deferred Shading,延迟渲染(提高渲染效率,减少多余光照计算)

    Deferred Shading,看过<Gems2> 的应该都了解了.最近很火的星际2就是使用了Deferred Shading. 原帖位置:    http://blog.csdn.ne ...

  5. Deferred Shading,延迟渲染(提高渲染效率,减少多余光照计算)【转】

    Deferred Shading,看过<Gems2> 的应该都了解了.最近很火的星际2就是使用了Deferred Shading. 原帖位置:    http://blog.csdn.ne ...

  6. OpenGL 延迟着色法Deferred Shading

    OpenGL 延迟着色法Deferred Shading 延迟着色法Deferred Shading简介 G缓冲 延迟光照处理阶段 结合延迟渲染与正向渲染 更多的光源 计算一个光源的体积或半径 真正使 ...

  7. Learn OpenGL 笔记6.9 Deferred Shading(延迟着色)

    到目前为止,我们进行照明的方式称为forward rendering前向渲染或forward shading前向着色.我们渲染对象,根据场景中的所有光源对其进行照明.我们为场景中的每个对象分别为每个对 ...

  8. Deferred Shading VS Deferred Lighting

    鉴于传统的Forward Rendering对于多光源渲染时的低效问题,各种Deferred Rendering的方法被提出并且广泛使用.比如Deferred Shading以及其之后的Deferre ...

  9. Deferred Shading

    Deferred Shading 到目前为止,本书中所使用的渲染方法都是forward rendering,本质上来说是指独立渲染场景中的每一个objects,对于每一个object都要使用light ...

最新文章

  1. Spring Cloud(五)断路器监控(Hystrix Dashboard)
  2. vue 分模块打包 脚手架_vue-cli分模块独立打包
  3. 网站设计师必备50教程
  4. mysql隔离级别 举例_mysql的事务隔离级别举例
  5. 剑指Offer面试题:4.从尾到头打印链表
  6. 黄金连分数(java大法好)
  7. 算法练习一:求最小公倍数
  8. ajax上传图片的本质
  9. Anaconda中使用图形化界面创建虚拟环境
  10. HTML5 — 知识总结篇《V》【a元素】
  11. C语言贪吃蛇用VC2022
  12. java sybase 驱动_Java连接Sybase数据库
  13. H264三种码率控制方法(CBR, VBR, CVBR)
  14. php元换成万元,元换算成万元公式(元换算成万元换算器)
  15. GO Web编程---网上书店(1)
  16. SEP12.1.2现在支持自动卸载其他某些杀毒软件
  17. 被企业微信吓到了吗?离做到极致还早
  18. BNET创始人刘建军:BNET破解当今通信网络三大痛点
  19. 淘宝拼多多都在卖 iPhone,苹果为什么还继续开店?
  20. 弄了一整天,终于把打印自定义纸张大小搞定了(上)--IT man

热门文章

  1. Vue改变网页背景颜色切换
  2. Android自定义相机
  3. Spark综合项目:企业电商分析平台
  4. 在线png转换成jpg、jpg转png、各种转
  5. vue项目引入高德地图
  6. k8s 安装ingress nginx controller 并部署.net core ingress服务
  7. 从未这么明白的设计模式(三):装饰器模式
  8. 一文看懂25个神经网络模型,神经网络模型结构图
  9. 【数据说第二期】联盟第一人詹姆斯四个时期大PK
  10. 隐私全没了?30亿条个人信息被盗,BAT等96家公司全部中招