转载请注明出处为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部分还会可能出现什么改进。

  1. 更高的速度。Multiresolution的方法在GI中获得了成功,也许也可以扩展到direct lighting和SSVO中,用于加速整个Deferred Rendering。
  2. 改进HDR中的bloom filter。学习3DMark11,用FFT的方式在一个pass内完成bloom、lens flare等特效。
  3. 支持移动平台。精简的Deferred Rendering流水线将会以至到移动平台上。
  4. 更多例子用Deferred Rendering实现。目前只有3个例子用到了deferred框架,其他还是forward的。以后会有越来越多的例子转到deferred中。

对于KlayGE 4.x还有什么期待,可以上trac交流。

KlayGE 4.0中Deferred Rendering的改进(五)完结篇:Post process相关推荐

  1. KlayGE 4.0中Deferred Rendering的改进(四):GI的神话

    转载请注明出处为KlayGE游戏引擎 上一篇解决了透明物体的渲染问题:本文将挑战另一个实时渲染的神话,实时全局光照(GI). 实时全动态GI 目前direct lighting在游戏中日趋成熟,比较前 ...

  2. Android 8.0学习(31)---Android 8.0 中的 ART 功能改进

    Android 8.0 中的 ART 功能改进 在 Android 8.0 版本中,Android Runtime (ART) 有了极大改进.下面的列表总结了设备制造商可以在 ART 中获得的增强功能 ...

  3. net应用程序中发生了未经处理的异常怎么办_介绍一些在.NET Core 3.0中引入的诊断改进工具...

    编者按:即使.NET Core3.1.5已经发布,在进行.NET Core的性能诊断时,我们有时依然不知该从何处下手,那这篇介绍.NET Core3.0中引入的诊断工具,或许能为我们提供参考. 在.N ...

  4. Swift 4.0 中对 Dictionary 的改进(转载)

    Swift 4 发布已经有一段时间了,不知道大家有没有切换到 4.0 版本. 这次 4.0 更新给我最大的感受就是没有了前几次升级的跳跃式变化. 不用为了更新语言版本,完全推翻已有的项目,这也是 Sw ...

  5. AS3.0中的显示编程(五)-- Loader(加载器)

    Loader类是一个显示容器,可用来加载SWF文件或图像(JPG.GIF.PNG),被加载的显示对象将做为Loader对象的子级添加.使用Loader类时,不可避免的要注意安全模型.但这块内容我会集中 ...

  6. 【Elasticsearch】Elasticsearch 6.0中节省空间的改进

    1.概述 翻译:Space Saving Improvements in Elasticsearch 6.0 Elasticsearch 6.0提供了两项重大改进,以帮助最小化索引存储大小.关于改进的 ...

  7. 白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(5)完结篇:自然临近关系

    自然临近是R语言中spdep中内置的最后一种临近关系. 所谓的自然临近,指的是不进行任何的预设关系,通过其空间位置来判断是否属于相互临近,那么这个空间位置指的是什么呢?众所周知,在几何图形中,三角形是 ...

  8. DllMain中不当操作导致死锁问题的分析——DllMain中要谨慎写代码(完结篇)

    之前几篇文章主要介绍和分析了为什么会在DllMain做出一些不当操作导致死锁的原因.本文将总结以前文章的结论,并介绍些DllMain中还有哪些操作会导致死锁等问题.(转载请指明出于breaksoftw ...

  9. 探讨ASP.NET2.0中的Web控件改进技术

    全面探讨ASP.NET 2.0中的Web控件改进技术之概述(一) ASP.NET 2.0并没有抛弃1.1版本中的任何现有控件,而是增加了一组新的控件;同时还引入了若干新的控件开发技术.本系列文章将对这 ...

最新文章

  1. JPQL中使用LIKE进行模糊查询
  2. Python中的排序sorted(d.items(), key=lambda x: x[1])
  3. python格式化代码工具_python 代码格式化工具:YAPF
  4. c++ 输入输出流关联
  5. git 代码推送流程_Git 101:一个让您开始推送代码的Git工作流程
  6. 请列举中图片内存处理的六种方法,并简单介绍
  7. PRML exercises 10.3 解析
  8. 高速公路坐标高程计算软件3.3版本发布
  9. 【译】2021年十大热门编程语言
  10. 短诗整理5—景物+记事
  11. Chrome设置--disable-web-security解决跨域问题
  12. 1-11摇号机java_11选5在线模拟摇号
  13. 什么是formData
  14. [爱情智慧]女性提出分手的十六大原因
  15. Mathematica求解不定积分与定积分
  16. Atmel 89S52 并口 ISP下载
  17. 企业数字化转型:聊聊数据思维!
  18. 解决base64数组转jpg图片保存本地无法识别的问题
  19. 纳芯微全新驱动器NSi66x1A/NSi6601M发布
  20. 中国农业大学计算机考研拟录取名单,中国农业大学研究生拟录取名单2021整理汇总(各学院)...

热门文章

  1. bootstrap行内编辑后提交多条数据到ssm
  2. 如何处理日志文件丢失
  3. 树莓派的Perl 遨游之旅
  4. 李洪强经典面试题10
  5. Spring IoC — 基于注解的配置
  6. 软件测试中排错的基本方法
  7. UIKeyboardTypeNumberPad 数字键盘添加完成按钮
  8. 基于jQuery 2.0的源代码分析
  9. java获取当前日期时间代码
  10. JavaScript之数据类型