KlayGE 4.0中Deferred Rendering的改进(五)完结篇:Post process
转载请注明出处为KlayGE游戏引擎
上一篇分析了KlayGE中实现实时全动态GI的方法,本篇是这个系列的完结篇,主要讲流水线的最后一段:Post process。
Post process
在KlayGE 4.0的Deferred Rendering中,post process主要有HDR、AA和color grading。下面将分别讲述它们的改进。
HDR
在KlayGE 3.12用了filmic tonemapping之后,HDR部分就几乎没有别的改变。这里唯一的变化是最终输出的float4,把亮度存在A通道上。这是为了后面FXAA的需要。
AA
在Deferred框架中,无法使用硬件AA曾经是个恼人的问题。随着这些年各种基于post process的AA方法大量出现,Deferred下AA的问题基本被解决了。
团队成员陈顺斌和郭鹏曾为KlayGE 3.12提供了FXAA。 在新版本中,FXAA也升级到了最新的3.11版。从FXAA 3开始,就要求输入纹理是LDR的RGBL格式(L为亮度),所以计算AA的地点也就从HDR之前改到了HDR之后。虽然FXAA 3.11可以用G通道代替L,但效果肯定会受影响。既然让HDR post process输出RGBL轻而易举,我就没有把L改成G。FXAA极快,目前的实现在GTX480上可以达到0.1ms的惊人速度。几乎做到了无性能损 失的高质量AA。
Color grading
Color grading是这个版本新增的。以前游戏一般不太重视color grading的作用,但在电影业,color grading是流水线非常重要的一步(可以和skinning相提并论的)。这里我实现的color grading是用16x16x16的3D texture作为查找表,用原RGB作为地址去查询,查询出的结果即为调色后的颜色(来自GPU Gems 2: Chapter 24. Using Lookup Tables to Accelerate Color Transformations)。除了runtime的post process之外,还需要一个离线工具,用来生成那个3D texture。这里我用的方法类似CE3,先生成一个摊平的256×16的2D texture:
在photoshop里打开一张游戏截图,调整RGB曲线至需要的色调,然后把那个RGB曲线应用到之前生成的2D texture,最终打包成3D texture就得到了我们所需要的查找表。以后可能会根据需要做一个在线调整color grading的工具。
总结
本系列文章把KlayGE 4.0中Deferred Rendering的改进逐一介绍了一下,希望能对也在做类似事情的朋友有所帮助。在总结里我也身边展望一下未来,看看在KlayGE 4.1中,Deferred Rendering部分还会可能出现什么改进。
- 更高的速度。Multiresolution的方法在GI中获得了成功,也许也可以扩展到direct lighting和SSVO中,用于加速整个Deferred Rendering。
- 改进HDR中的bloom filter。学习3DMark11,用FFT的方式在一个pass内完成bloom、lens flare等特效。
- 支持移动平台。精简的Deferred Rendering流水线将会以至到移动平台上。
- 更多例子用Deferred Rendering实现。目前只有3个例子用到了deferred框架,其他还是forward的。以后会有越来越多的例子转到deferred中。
对于KlayGE 4.x还有什么期待,可以上trac交流。
KlayGE 4.0中Deferred Rendering的改进(五)完结篇:Post process相关推荐
- KlayGE 4.0中Deferred Rendering的改进(四):GI的神话
转载请注明出处为KlayGE游戏引擎 上一篇解决了透明物体的渲染问题:本文将挑战另一个实时渲染的神话,实时全局光照(GI). 实时全动态GI 目前direct lighting在游戏中日趋成熟,比较前 ...
- Android 8.0学习(31)---Android 8.0 中的 ART 功能改进
Android 8.0 中的 ART 功能改进 在 Android 8.0 版本中,Android Runtime (ART) 有了极大改进.下面的列表总结了设备制造商可以在 ART 中获得的增强功能 ...
- net应用程序中发生了未经处理的异常怎么办_介绍一些在.NET Core 3.0中引入的诊断改进工具...
编者按:即使.NET Core3.1.5已经发布,在进行.NET Core的性能诊断时,我们有时依然不知该从何处下手,那这篇介绍.NET Core3.0中引入的诊断工具,或许能为我们提供参考. 在.N ...
- Swift 4.0 中对 Dictionary 的改进(转载)
Swift 4 发布已经有一段时间了,不知道大家有没有切换到 4.0 版本. 这次 4.0 更新给我最大的感受就是没有了前几次升级的跳跃式变化. 不用为了更新语言版本,完全推翻已有的项目,这也是 Sw ...
- AS3.0中的显示编程(五)-- Loader(加载器)
Loader类是一个显示容器,可用来加载SWF文件或图像(JPG.GIF.PNG),被加载的显示对象将做为Loader对象的子级添加.使用Loader类时,不可避免的要注意安全模型.但这块内容我会集中 ...
- 【Elasticsearch】Elasticsearch 6.0中节省空间的改进
1.概述 翻译:Space Saving Improvements in Elasticsearch 6.0 Elasticsearch 6.0提供了两项重大改进,以帮助最小化索引存储大小.关于改进的 ...
- 白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(5)完结篇:自然临近关系
自然临近是R语言中spdep中内置的最后一种临近关系. 所谓的自然临近,指的是不进行任何的预设关系,通过其空间位置来判断是否属于相互临近,那么这个空间位置指的是什么呢?众所周知,在几何图形中,三角形是 ...
- DllMain中不当操作导致死锁问题的分析——DllMain中要谨慎写代码(完结篇)
之前几篇文章主要介绍和分析了为什么会在DllMain做出一些不当操作导致死锁的原因.本文将总结以前文章的结论,并介绍些DllMain中还有哪些操作会导致死锁等问题.(转载请指明出于breaksoftw ...
- 探讨ASP.NET2.0中的Web控件改进技术
全面探讨ASP.NET 2.0中的Web控件改进技术之概述(一) ASP.NET 2.0并没有抛弃1.1版本中的任何现有控件,而是增加了一组新的控件;同时还引入了若干新的控件开发技术.本系列文章将对这 ...
最新文章
- JPQL中使用LIKE进行模糊查询
- Python中的排序sorted(d.items(), key=lambda x: x[1])
- python格式化代码工具_python 代码格式化工具:YAPF
- c++ 输入输出流关联
- git 代码推送流程_Git 101:一个让您开始推送代码的Git工作流程
- 请列举中图片内存处理的六种方法,并简单介绍
- PRML exercises 10.3 解析
- 高速公路坐标高程计算软件3.3版本发布
- 【译】2021年十大热门编程语言
- 短诗整理5—景物+记事
- Chrome设置--disable-web-security解决跨域问题
- 1-11摇号机java_11选5在线模拟摇号
- 什么是formData
- [爱情智慧]女性提出分手的十六大原因
- Mathematica求解不定积分与定积分
- Atmel 89S52 并口 ISP下载
- 企业数字化转型:聊聊数据思维!
- 解决base64数组转jpg图片保存本地无法识别的问题
- 纳芯微全新驱动器NSi66x1A/NSi6601M发布
- 中国农业大学计算机考研拟录取名单,中国农业大学研究生拟录取名单2021整理汇总(各学院)...