引擎自带材质存在色差,如何调整?

游戏中的样子ScreenShot_2026-09-03_171421_959
图片本来的样子ScreenShot_2026-09-03_171750_109
HDR改LDR后ScreenShot_2026-09-03_202017_277
(“饱和度”好像又低了,不过,误差小了很多,目前先这样吧,有更好的解决方案可以继续留言,期待中)

3d游戏地面,使用平面网格用的legacy/standard材质,调节以下参数,无论怎么调,总感觉引擎中的“饱和度高”且“偏黄”,环境光和太阳光都是纯白色的FFFFFF,未启用天空盒

是我用的材质不对么?有更好的材质推荐么?注意使用的材质要满足可接受投射的影子。

即使模型使用unlit, 也没法还原贴图颜色? - Creator 3.x - Cocos中文社区

HDR改为LDR后:
ScreenShot_2026-09-03_202017_277
感谢回复的朋友们,HDR改为LDR后,“饱和度”好像又低了,不过,误差小了很多,目前先这样吧,有更好的解决方案可以继续留言,期待中

// 场景烘焙 Plane:贴图像 Unlit,但采样 ShadowMap 乘阴影(不受环境光/主光漫反射影响)
CCEffect %{
techniques:

  • name: opaque
    passes:
    • vert: plane-vs:vert
      frag: plane-fs:frag
      properties: &props
      mainTexture: { value: grey }
      tilingOffset: { value: [1.0, 1.0, 0.0, 0.0] }
      mainColor: { value: [1.0, 1.0, 1.0, 1.0], linear: true, editor: { type: color } }
      colorScale: { value: [1.0, 1.0, 1.0], target: colorScaleAndCutoff.xyz }
      alphaThreshold: { value: 0.5, target: colorScaleAndCutoff.w, editor: { parent: USE_ALPHA_TEST } }
      shadowColor: { value: [0.35, 0.35, 0.35, 1.0], linear: true, editor: { type: color, tooltip: “阴影处混合目标色(越暗影子越深)” } }
      }%

CCProgram plane-vs %{
precision highp float;
#include <legacy/input>
#include <builtin/uniforms/cc-global>
#include <legacy/decode-base>
#include <legacy/local-batch>
#include <legacy/fog-vs>
#include <legacy/shadow-map-vs>

#if USE_TEXTURE
out vec2 v_uv;
uniform TexCoords {
vec4 tilingOffset;
};
#endif

out highp vec3 v_worldPos;
#if CC_RECEIVE_SHADOW
out mediump vec2 v_shadowBias;
#endif

vec4 vert () {
vec4 position;
CCVertInput(position);

mat4 matWorld;
CCGetWorldMatrix(matWorld);
vec4 worldPos = matWorld * position;
v_worldPos = worldPos.xyz;

#if USE_TEXTURE
  v_uv = a_texCoord * tilingOffset.xy + tilingOffset.zw;
  #if SAMPLE_FROM_RT
    CC_HANDLE_RT_SAMPLE_FLIP(v_uv);
  #endif
#endif

#if CC_RECEIVE_SHADOW
  v_shadowBias = CCGetShadowBias();
  CC_TRANSFER_SHADOW(worldPos);
#endif

CC_TRANSFER_FOG(worldPos);
return cc_matProj * (cc_matView * matWorld) * position;

}
}%

CCProgram plane-fs %{
precision highp float;
#include <legacy/output-standard>
#include <legacy/fog-fs>
#include <legacy/shadow-map-fs>

#if USE_ALPHA_TEST
#pragma define-meta ALPHA_TEST_CHANNEL options([a, r, g, b])
#endif

#if USE_TEXTURE
in vec2 v_uv;
uniform sampler2D mainTexture;
#endif

in highp vec3 v_worldPos;
#if CC_RECEIVE_SHADOW
in mediump vec2 v_shadowBias;
#endif

uniform Constant {
vec4 mainColor;
vec4 colorScaleAndCutoff;
vec4 shadowColor;
};

vec4 frag () {
vec4 o = mainColor;
o.rgb *= colorScaleAndCutoff.xyz;

#if USE_TEXTURE
  vec4 texColor = texture(mainTexture, v_uv);
  texColor.rgb = SRGBToLinear(texColor.rgb);
  o *= texColor;
#endif

#if USE_ALPHA_TEST
  if (o.ALPHA_TEST_CHANNEL < colorScaleAndCutoff.w) discard;
#endif

// 仅乘阴影,不引入环境光/主光漫反射
float shadow = 1.0;
#if CC_RECEIVE_SHADOW && CC_SHADOW_TYPE == CC_SHADOW_MAP
  // 地面用法线朝上更稳
  vec3 N = vec3(0.0, 1.0, 0.0);
  #if CC_DIR_LIGHT_SHADOW_TYPE == CC_DIR_LIGHT_SHADOW_CASCADED
    shadow = CCCSMFactorBase(v_worldPos, N, v_shadowBias);
  #endif
  #if CC_DIR_LIGHT_SHADOW_TYPE == CC_DIR_LIGHT_SHADOW_UNIFORM
    shadow = CCShadowFactorBase(CC_SHADOW_POSITION, N, v_shadowBias);
  #endif
#endif
o.rgb = mix(shadowColor.rgb * o.rgb, o.rgb, shadow);

CC_APPLY_FOG(o);
return CCFragOutput(o);

}
}%

试试这个,我之前基于builtin-unlit魔改的可接收阴影版

3D场景?查查和色调映射 颜色空间转换有没有关系?
3D场景渲染效果和纹理原画对不上,非常常见