前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >UE4画面亮度可视化

UE4画面亮度可视化

作者头像
逍遥剑客
发布2021-01-18 10:21:07
1K0
发布2021-01-18 10:21:07
举报

参考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 ) )
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-01-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 获取当前像素亮度
  • 颜色亮度转换成颜色显示
  • 亮度到颜色的查表映射
  • 最终效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档