UE4画面亮度可视化

Posted xoyojank

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UE4画面亮度可视化相关的知识,希望对你有一定的参考价值。

参考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我找到了三种算法:

  • EyeAdaption Shader里是​dot(OutColor.xyz, float3(1.0f, 1.0f, 1.0f)/3.0f), 也就是(r + g + b) / 3
  • PostProcessVisualizeHDR里​是max(LuminanceAvg.r, max(LuminanceAvg.g, LuminanceAvg.b)), 即max(r, g, b)
  • Bloom里Luminance又是用的dot( LinearColor, MaterialFloat3( 0.3, 0.59, 0.11 ) )

以上是关于UE4画面亮度可视化的主要内容,如果未能解决你的问题,请参考以下文章

ue4玄学画面设置实现

曝光自检清单

[UE4]瞬移前后屏幕亮度变化,Get Player Camera Manager.Start Camera Fade

计算机基础-显示器

当用户在系统设置 -> 显示和亮度上启用“粗体文本”时,iOS 应用程序在启动画面处冻结

Keying/Matting