上一篇总结了SMAA和Clustered shading这两个改进,本篇将讲一下如何支持HDR显示设备,以及一些性能优化。
HDR显示设备
HDR电视已经不是什么新鲜事了,HDR显示器也已经问世。这些HDR显示设备,能达到的最大亮度远超过传统显示器。不过这里存在很大的误解,很多人以为HDR显示器等于在显示器里做tone mapping。然而并不是。HDR显示器并不需要做额外处理,直接拿HDR数据去显示。而tone mapping等,仍然是在程序里做。
传统的后处理流程
原先KlayGE里的post process是这样的。
HDR的渲染结果进入ACES tone mapping,变成LDR的数据,在经过SMAA、gamma矫正和颜色调整后输出到LDR显示设备。
HDR显示设备的重要参数
首先需要提一下HDR显 ...
上一篇讲了新的材质系统。本篇将讲tone mapping的改进。
Tone mapping的进化
KlayGE早在2006年的时候就引入了HDR的流水线。和当年的其他引擎一样,HDR的内容经过渲染,需要通过tone mapping转成LDR之后送去显示。这时候,tone mapping的质量就可以决定最后的画面细节度和对比度。
在KlayGE的发展过程中,tone mapping这个看似简单的步骤经历了多次进化。
Reinhard
早期的普遍做法是一篇叫做Photographic Tone Reproduction for Digital Images的论文,大家就用作者的名字称它为Reinhard tone mapping。这是个经验公式,把HDR到LDR的变换简单的描述了出来。
float3 ReinhardToneMapping(float3 color, float adapted_lum)
{
con ...
HDR post process几乎存在于所有PC桌面引擎中,也开始在一些高端移动平台上得到了支持。HDR太常见了,以至于这年头如果看到一个不带HDR的真实感实时渲染,就会觉得很突兀。(比如,在SIGGRAPH展会上,看了Qualcomm的展台,再看ARM和Imagination的,就有一种回到dx8时代的感觉。大部分原因就来自于Mali和PowerVR缺乏很好的HDR。)在这方面,KlayGE的目标是在不同平台上,都能尽量多地复用HDR post process里的组件,同时效果也尽量接近。首先让我们看一张只有LDR的图。
啥都支持的平台
代表的平台有D3D11 level 10+,OpenGL 3+。支持包括B10G11R11F在内的各种浮点纹理。在这样的平台上,KlayGE的HDR流程是这样的。注意红字标出来的数据 ...
正如不久前的帖子所描述的,KlayGE 4.0的渲染系统将会过渡到deferred rendering的框架。这样做
好处
各种效果都可以在这个框架内得到整合、发挥和发展
方便未来编辑器的构建
坏处
只需要一些底层的geek变得不方便了
我现在的考虑是,把渲染系统分为两层,底下一层是API抽象层,负责把图形API抽象成同样的接口;上一层是deferred rendering层,提供高级功能。这样就可以兼顾两种应用需要。
在deferred rendering里面,除了deferred框架本身,还会包含GI、SSVO、HDR tone mapping、FXAA、Color grading以及Stereo。
在Napoleon314的强烈推荐下,KlayGE也改用了来自Uncharted 2的Filmic Tonemapping。虽然只要改2行代码,但Filmic Tonemapping所带来的鲜艳颜色和对比度是其他常用tonemapping所不可比拟的,完全消除了那种灰蒙蒙的感觉。贴两张图看看效果: