参考https://www.artstation.com/artwork/3omYwB做一个这样的视图, 用于Debug光照亮度:
需要获取当前像素的亮度(nit), 映射成一个颜色显示出来
正好在EyeAdaption Debug视图有一个nit显示:
翻代码发现NIT/LUX值是在Shader中实现的(骚操作):
向上查找Luminance来源自HDRSceneColorSampler:
而HDRSceneColorTexture就是Toonmap前的SceneColor:
那么Luminance = max(SceneColorBeforeTonemap.r, max(SceneColorBeforeTonemap.g, SceneColorBeforeTonemap.b)
可以使用Post Process Material来获取SceneColor, 如果是SceneColorBeforeTonemap, 那就把Post Process Material的Phase改成Before Toonmapping
简单地实现一下材质亮度转换成颜色进行输出:
可以看到颜色并不是我们想要的映射关系, 参考资料并不是一个线性的映射关系
如果想在材质中进行颜色查表, 最方便的是做个ColorCurve:
包装成CurveAtlas纹理:
然后就可以在Material中进行采样查表了:
不过发现颜色显示会受自动曝光影响, 所以Material需要再改一下生效的阶段:
PS: UE4中的LinearColor To Luminance我找到了三种算法: