现在的位置: 首页 > 综合 > 正文

[翻译]CryEngine3中的延迟渲染

2013年01月02日 ⁄ 综合 ⁄ 共 1211字 ⁄ 字号 评论关闭

CryEngine3中的延迟渲染

说明

         《孤岛惊魂》游戏之后,我们改变了早期的使用Z-pass来输出像素的Z值来做Alpha test和把不透明的几何体渲染到纹理,我们通过延迟处理的方式做了一些功能。我们开始使用一个R16f格式的纹理来提供一个更好品质,但并不是所有硬件都支持。R16G16f格式可以被很好的支持,但当时的对于Nvidia是一个并不是一个原生的格式。R32f有着很好的质量并被所有硬件支持,同样速度也很快。如果硬件能访问原生的Z-Buffer则这种格式是首选的。这样会在生成数据(双倍的Z值读写性能)得到更快的渲染,并且更少的内存需求,同时得到更好的图像质量。但是这样会由于z-buffer可能不会直接的返回线性的Z值而使访问变得有些复杂

         每个像素拥有Z值可以带来更多的功能和效果:

                  延迟的生成阴影遮盖

                   软粒子的Z裁剪

                   全局体积雾效

                   深度域效果

                   动态模糊效果

                   补光灯(CryEngine2中用来变暗或照亮周围)

                   屏幕区域环境光闭合

         通过哦使用延迟着色技术,我们可以将复杂的集合场景从shader中分离出来。例如,通过shadow mask shader在场景中所有不透明物体渲染前生成阴影遮盖。这个shader使用位置插值的shadowmap来输出阴影来构建阴影遮盖。这个drawcall的繁重的pass被一个延迟的pass所替代来通过存储的像素深度值来重新建立shadowmap中的位置而不是通过为场景中所有物体执行多次drawcall来进行。只会调用一次屏幕区域的drawcall

引擎中渲染图像的例子

 

Gbuffer的线性Z值。

 

Gbuffer数据生成阴影遮盖

 

通过Gbuffer数据生成SSAO

有用的控制台命令

         r_UseZPass

         切换Z pass

         用法:r_UseZPass [0/1]

         默认值为1(开启)。设置为0来关闭z-pass

         r_DeferredShading

         切换延迟着色

         用法:r_DeferredShading [0/1/2/3]

         0 – 关闭

1-       开启(默认)

2-        开启interleaved/tiled 渲染测试(不要使用)

3-       为所有灯光添加延迟pass

 

作者:无花无酒
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

 

抱歉!评论已关闭.