Unity - 场景曝光问题 - 隐藏的GraphicsSettings.asset的m_LightsUseLinearIntensity属性 - 线性空间的灯光强度

文章目录

  • 原因
  • 修复
    • 发现没有地方可设置的unity_Lightmap_HDR参数
    • 发现 隐藏的GraphicsSettings.asset的m_LightsUseLinearIntensity属性
    • 修复前
    • 修复后


原因

经过半天时间排查。。。
发现是美术同学使用了以前我们一个老项目的配置方式来制作的场景
因为这个项目以前很多项目配置是走 脚本来设置的
而刚刚好有一些属性再 unity eidtor 是没有公开的
然后手动的对应的配置修改后即可解决


修复

开始我只能通过对比:FrameDebugger 的参数差异
发现端倪:


发现没有地方可设置的unity_Lightmap_HDR参数

我的工程 shader 参数
Unity - 场景曝光问题 - 隐藏的GraphicsSettings.asset的m_LightsUseLinearIntensity属性 - 线性空间的灯光强度_第1张图片

美术同学的 shader 参数:
Unity - 场景曝光问题 - 隐藏的GraphicsSettings.asset的m_LightsUseLinearIntensity属性 - 线性空间的灯光强度_第2张图片

通过 builtin shader 的搜索,我大概是知道处理 color space 和 RGBM 相关编解码相关的,但是还是不知道是在哪里设置的

然后搜索到某乎上的一位大佬的文章:Unity3D ShaderLab 之 DecodeLightmap解读

阅读后,只是对 unity_Lightmap_HDR 的作用进一步肯定,然后还是不能找到 unity editor 中哪里可以设置


发现 隐藏的GraphicsSettings.asset的m_LightsUseLinearIntensity属性

经过千辛万苦,用了排除法 + compare tool(svn differ 或是 beyond comparer)

发现美术同学制作的场景中的项目配置 m_LightsUseLinearIntensity = 1,启用该值,就让 unity_Lightmap_HDR 启用了

而我们项目使用的是 m_LightsUseLinearIntensity = 0

所以同步该值之后就顺利解决了,我只能说:unity 对开发者一直不太友善,why?

在 Unity Editor 下没有任何地方可以修改,只能通过在 GraphicsSettings.asset 中 手动修改 m_LightsUseLinearIntensity 的值,或是直接通过 GraphicsSettings.lightUseLinearIntensity 来修改

Unity和Substance Painter的Look Dev显示校准

Unity - 场景曝光问题 - 隐藏的GraphicsSettings.asset的m_LightsUseLinearIntensity属性 - 线性空间的灯光强度_第3张图片


修复前

Unity - 场景曝光问题 - 隐藏的GraphicsSettings.asset的m_LightsUseLinearIntensity属性 - 线性空间的灯光强度_第4张图片


修复后

Unity - 场景曝光问题 - 隐藏的GraphicsSettings.asset的m_LightsUseLinearIntensity属性 - 线性空间的灯光强度_第5张图片

我们可以在运行时,调整:

public class ToggleLightLinear : MonoBehaviour
{
    public bool linearLightIntensity;
    private void Update()
    {
        GraphicsSettings.lightsUseLinearIntensity = linearLightIntensity;
    }
}

效果如下
Unity - 场景曝光问题 - 隐藏的GraphicsSettings.asset的m_LightsUseLinearIntensity属性 - 线性空间的灯光强度_第6张图片

你可能感兴趣的:(unity,unity,游戏引擎)