如何修复Unity Unlit着色器颜色不一致的问题?
Unity Unlit着色器颜色偏暗问题的解决方案
以下是针对你遇到的纯红色在面板显示正常但应用后偏暗问题的排查和解决步骤:
1. 材质颜色空间匹配设置
Unlit材质的颜色属性可能存在独立的空间转换设置,和项目全局设置冲突:
- 打开材质面板,点击Color属性右侧的齿轮图标,选择与项目颜色空间一致的选项(项目设置为Gamma就选Gamma,Linear就选Linear),避免额外的颜色转换。
- 若使用URP Shader Graph自定义Unlit着色器,确保颜色输出节点没有添加多余的伽马校正或线性转换模块。
2. 相机曝光与后处理排查
即使是Unlit材质,相机的后处理或曝光参数也会影响最终显示效果:
- 检查相机是否启用了Post Processing组件,将Exposure参数重置为默认值(1.0),或暂时关闭后处理测试。
- 确认相机的Rendering Path设置为Universal Render Pipeline(若使用URP),避免渲染路径不兼容导致的颜色偏差。
3. 使用自定义无转换Unlit着色器
默认Unlit着色器可能存在隐性的颜色空间转换,你可以用以下极简着色器直接输出原始颜色:
Shader "Custom/AccurateUnlitColor" { Properties { _Color ("Color", Color) = (1,1,1,1) } SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; }; struct v2f { float4 vertex : SV_POSITION; }; fixed4 _Color; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); return o; } fixed4 frag (v2f i) : SV_Target { return _Color; } ENDCG } } }
将此着色器创建后赋予材质,直接输出你设置的颜色值,规避默认转换逻辑。
4. 显示器与Game视图颜色校准
- 校准显示器至标准sRGB模式,避免显示器自身的亮度、对比度设置导致颜色偏暗。
- 在Unity的Game视图右上角,打开下拉菜单,将Color Space设置为与项目一致的选项,确保视图预览准确。
5. 用Frame Debugger验证输出颜色
通过Frame Debugger确认颜色的实际输出值:
- 打开
Window > Analysis > Frame Debugger,找到绘制目标GameObject的Pass,查看输出颜色是否为你设置的纯红色(1,0,0,1)。 - 若输出颜色正确,问题出在显示端;若输出颜色错误,检查材质参数传递或着色器逻辑。
内容的提问来源于stack exchange,提问作者Yohan Kang
相关产品推荐
相关产品推荐

