Friendly Filmic Tonemapping

Filmic Tonemapping固然是个好东西,然而Jim Hejl & Burgess-Dawson的原始公式在不少显示器上都显得过于鲜艳了,另外还有不少人甚至认为完全没有任何Tonemapping的画面更对他们的口味。众口难调,我们能做的就是提供一个可配置的Tonemapping,让他们自己撸去吧。

Uncharted2中的Tonemapping是可配置的,而且参数还异常丰富灵活,有A, 有B, 有C, 还有D, E, F….,具体的公式我也懒得说了,大家都知道的,不知道的自己去翻ppt。你说有这么多的参数的公式好调么?-- 我反正是搞不定了。我需要的是一个简单粗暴的公式,只能有一个参数,而且还需要这个参数的值跟画面的鲜艳程度有一个近似线性的关系。

于是把Jim Hejl & Burgess-Dawson的原始公式撸了一下,得到下面这个函数:

// C = 0.8, gamma correction only
// C = 0.39, gamma correction with filmic tonemapping
half3 x = ExposureAdjust(linear_color);
half3 t1 = 6.2 * x * x;
half3 t2 = C * x;
half3 y = (t1 + t2) / (t1 + 4.1 * t2 + 0.05) + (0.634 * C - 0.247) * x;

其中 C 的取值可在[0.3, 0.9] 之间调整(你非要超过这个区间它也不介意),C值越低,画面越艳丽. 当 C=0.39时,几乎就是原始的filmic tonemapping (包含gamma correction, 如图1, 图2.) 而当 C=0.8时,就变成一个纯的 gamma correction (如图3.)

c_0_39 c_0_39_2c_0_8

          图1: C = 0.39, x 属于 [0, 1]                      图2: C = 0.39, x属于[0, 10]                     图3:C = 0.8, x属于[0, 1]

posted @ 2012-03-17 14:32  atyuwen  阅读(2800)  评论(1编辑  收藏  举报