延迟渲染与前向渲染

前向渲染或叫正向渲染,每一个图元都经过顶点着色器,图元着色器,片段着色器,在片段着色器内连同光照一起计算,效率和图元数量有关。

延迟渲染会先计算出G-BUFFER,就是不含光照计算,但有光照需要的信息的BUFFER,最后在一个片段着色器内进行一次光照计算,效率和屏幕像素有关。

http://m.elecfans.com/article/651416.html 比较概括

https://learnopengl-cn.github.io/05 Advanced Lighting/08 Deferred Shading/ 比较详细

https://www.cnblogs.com/wangchengfeng/p/3440097.html

https://blog.csdn.net/taotaoah/article/details/52633822

https://zhuanlan.zhihu.com/p/39464715

G-Buffer

Geometry Buffer,亦即“几何缓冲”。区别于普通的仅将颜色渲染到纹理中,G-Buffer指包含颜色、法线、世界空间坐标的缓冲区,亦即指包含颜色、法线、世界空间坐标的纹理。

一般还有 Albedo反射率 Specular镜面反射

Base Pass

对非透明的物体进行演算并填充到GBuffer,使用缓冲区可视化模式可以在视图中看到效果。几乎所有的延迟渲染都受到其影响,因此才叫基础通道。

其计算结果包括base color, metallic, specular, roughness, normal, sss profile,并且Decals、Fog以及Velocity的计算也在此处。

其开销受到屏幕空间尺寸、物体数量、面数、Decals的数量、Shader的复杂度,生成的过程中包含光照贴图的推送,因此也会受到光照贴图的大小的影响。

可以通过Stat rhi指令检查各种贴图和triangle的消耗。

Deferred Decal Buffer 延迟贴花缓冲

在完成正常的G-Buffer渲染后,即可得到对应的Buffer,但是此时仍没有进行光照计算,这时就需要将Decal渲染到对应的Diffuse(Albedo) buffer中(UE4里应该是BaseColor)。

为了实现Decal,这里需要在G-Buffer后再增加一个Pass,并使用Diffuse buffer作为Render target,并使用Decal shader进行渲染,计算并更新Decal所能够影响到的那些像素。

https://blog.csdn.net/ZJU_fish1996/article/details/86852579 贴花的计算方法

大致流程:利用GBUFFER里的深度,坐标,经过一系列局部空间转全局空间坐标变换

DBuffer Decals

是否在Base Pass之前将decals属性累积到缓冲区

D-Buffer贴花正确影响光照贴图和天空照明

不像常规的延迟贴花

D-Buffer启用prepass开启

更改此设置需要重新启动编辑器

whether to accumulate decals properties to a buffer before the base pass

dbuffer decals correctly affect lightmap and sky lighting

unlike regular deferred decals

dbuffer enabled forces a full prepass

changing this setting requires restarting the editor

从引擎渲染路径分析



UE4使用reverse-Z来保存深度,意味着近裁面的深度值为1,远裁面的深度值为0。这使得深度缓冲的精度更高,避免在远处发生z-fighting的现象。从该pass的名字可以看出这一步是由“DBuffer”触发的。DBuffer是UE4用来保存延迟贴花(deferred decal)的缓冲,这一步需要场景深度,所以会启动Z-prepass

其他

UE4渲染分析:https://zhuanlan.zhihu.com/p/33865743

最新文章

  1. 网络流-最大流问题 ISAP 算法解释(转自Renfei Song's Blog)
  2. 简述JavaScript的运行机制
  3. windows系统查看80端口被占用的程序并结束该程序运行
  4. git分支使用
  5. HTTP协议-引自孤傲苍狼博客
  6. Java获取客户端IP
  7. 【codevs1044】导弹拦截问题与Dilworth定理
  8. [编辑器] Tab转换成空格
  9. 《Java程序设计》第七周学习总结
  10. Hadoop 的部署适用性(网上资料http://www.linuxidc.com/Linux/2013-10/92141.htm)
  11. hdu 1253 胜利大逃亡(广搜,队列,三维,简单)
  12. .net网站开发(前端):4.MVC HtmlHelper
  13. Fedora 启动 SSH服务
  14. 常用的免费Webservice接口
  15. Tomcat 虚拟目录映射
  16. Java集合:TreeMap源码剖析
  17. Linux设置文件读写权限
  18. UNIX环境高级编程——system V信号量
  19. arcEngine开发之根据点坐标创建Shp图层
  20. 浅谈CSS浮动属性

热门文章

  1. (jmeter笔记)有序递增和无序递增
  2. CSS3实现图片滚动
  3. IDEA隐藏.idea
  4. 添加matlab到右键菜单并从当前目录打开
  5. ubuntu配置docker全局系统代理
  6. vue的增删改查(简单版)
  7. 商城登录/三方登录OAUTH2/单点登录
  8. SQL server数据库 账户SA登录失败,提示错误:18456
  9. JavaScript的知识点整理
  10. Linux 文件编码操作enca[适用Mac]