Deferred 延迟渲染
来源:互联网 发布:苏州淘宝美工培训 编辑:程序博客网 时间:2024/03/28 19:45
转自:博客园 作者 水煮鱼丸
Deferred Shading(延迟渲染)
2) 决定表面材质特性,例如法线、双向反射分布函数(bidirectional reflectance distribution function, BRDF)等等。
3) 计算入射光照。
4) 计算光照对表面的影响,并最终显示。
2) Shader经常需要超过一次以上的Pass来渲染光照,渲染n个灯光,对于复杂的Shader,可能需要O(n)次运算。
3) 增加新的光照模型和新的光源类型,可能需要改变所有Effect的源文件。
4) Shader很快就将达到或者超出SM2的指令限制。
2) 不必要再为几何体的受光提供附加的Pass了,这样就节省了Draw Call和状态切换的数量。
3) 在增加新的光源类型和光照模型时,材质的Shader不需要做出任何改变。
4) 材质Shader不产生光照,这样就节省了计算额外的几何体的指令数。
延迟渲染需要显卡提供MRT的支持,且利用了不断增加的存储器的带宽——这也就意味着我们可能得对玩家所使用的硬件提出更高的要求。因此我们既实现了前向渲染,也实现了延迟渲染。我们优化了前向渲染管道,并在此基础上完成了延迟渲染管道。
2) Lighting阶段:以G-buffer作为输入(位置,法线)进行逐像素的光照计算,将diffuse lighting和specular lighting 结果分别保存在两张RT上作为lighting buffer。
3) Composition阶段:将G-buffer中的贴图buffer和lighting buffer融合,得到渲染结果。
MRT中必须的信息:position(depth), normal, diffuse(texture)
可能需要的信息:specular, power, emissive, ao, material id
这些信息需要在这4个RT上用合理格式,合理的组织。这里还可以就存储空间和shader的复杂性做折衷。如只保存depth,然后在光照时计算position,以及用球面坐标保存法线。以目前的资料得出的结论是应该尽可能地pack数据,减少内存占用,多出来的若干条shader指令不会明显影响性能。
优化:
1.光源包围体的视锥剔除,遮挡剔除。
2.光源包围体投影后很小时剔除;若干个靠的比较近的小光源合并成一个较大的光源
3.光源包围体的backfaceculling
4.屏幕空间中没有被光源照到的,或者被更近的物体遮挡住的像素不需要光照计算,因此可以逐像素的深度剔除。有两种方法:a.使用正确的stencillightvolume。类似shadowvolume的方案,将渲染lightvolume的正反两面,得到正确的stencilmask,然后光照计算时使用stencilbuffer。这种方法可以得到正确的结果,但是需要渲染每盏灯时频繁改变renderstate,可能会带来一定性能上的损失。b.使用ztest,可以得到“一定程度上正确”的结果。
方向光和聚光灯可以使用基本的Shadow Map投影(正交投影,透视投影),点光源会复杂一些,需要使用Cube Shadow Map,由于较老的硬件不支持在不同纹理之间插值,使得不同纹理之间会有接缝(见[6] P171),在DX10中才支持Cube Map纹理之间的插值。
2) Shader可以访问深度和其他像素信息。
3) 每个象素对每个光源仅运行一次。也就是说,那些被遮挡的像素是不会被光照计算到的。
4) 材质和光照的Shader完全分开。
3) 无硬件反锯齿的支持
2) 在合适的Filter作用下,精确的边缘检测可以减少几何体边缘的锯齿。虽然这些方法并不像硬件全场景反锯齿那样精确,但是仍然可以以假乱真。
3) 对不透明物体采用延迟渲染,透明物体采用正向渲染,可以解决Alpha Blend的问题(Unity3D采用这种解决方案)。
- 延迟渲染(Deferred Shading)
- 延迟渲染(Deferred Shading)
- Deferred 延迟渲染
- 延迟渲染(Deferred Shading)技术详解
- 延迟渲染(Deferred Shading)技术详解
- OpenGL 4.0 GLSL 延迟渲染 Deferred shading
- 延迟渲染(Deferred Shading)技术详解
- 延迟渲染(Deferred Shading)技术详解
- 【OpenGL】延迟渲染(Deferred Shading)技术详解
- Unity5 的新旧延迟渲染Deferred Lighting Rendering Path
- Unity延迟渲染路径(Deferred shading rendering path)
- Deferred Shading,延迟渲染(提高渲染效率,减少多余光照计算)
- Deferred Shading,延迟渲染(提高渲染效率,减少多余光照计算)
- U3D 延迟光照渲染路径的细节 Deferred Lighting Rendering Path Details
- Unity旧延迟光照渲染路径( Legacy Deferred Lighting Rendering Path)
- Deferred Decal(延迟贴花)
- Deferred Decal(延迟贴花)
- jQuery --deferred 延迟对象
- oracle
- at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>错误
- <设计模式可复用面向对象软件的基础> [1.5]、单例(C#)
- 行人属性“Human Attribute Recognition by Deep Hierarchical Contexts”
- Zookeeper搭建集群
- Deferred 延迟渲染
- 一些简单的java实例
- 阿里云计算能力实现多项突破 BigBench规模全球首次被拓展至100TB
- 华为最热门的开源项目推荐!
- 网传王者荣耀员工年终奖100个月工资 腾讯:传言太离谱了
- 面试的妹纸问我:Web缓存设置不是后台的事情吗?
- Netflix 最热门的开源项目推荐
- linux下的pstack和gstack命令
- 【C/C++开发】c++ 工具库 (zz)