游戏中的样子
图片本来的样子
HDR改LDR后
(“饱和度”好像又低了,不过,误差小了很多,目前先这样吧,有更好的解决方案可以继续留言,期待中)
3d游戏地面,使用平面网格用的legacy/standard材质,调节以下参数,无论怎么调,总感觉引擎中的“饱和度高”且“偏黄”,环境光和太阳光都是纯白色的FFFFFF,未启用天空盒
是我用的材质不对么?有更好的材质推荐么?注意使用的材质要满足可接受投射的影子。
游戏中的样子
图片本来的样子
HDR改LDR后
(“饱和度”好像又低了,不过,误差小了很多,目前先这样吧,有更好的解决方案可以继续留言,期待中)
3d游戏地面,使用平面网格用的legacy/standard材质,调节以下参数,无论怎么调,总感觉引擎中的“饱和度高”且“偏黄”,环境光和太阳光都是纯白色的FFFFFF,未启用天空盒
是我用的材质不对么?有更好的材质推荐么?注意使用的材质要满足可接受投射的影子。
HDR改为LDR后:

感谢回复的朋友们,HDR改为LDR后,“饱和度”好像又低了,不过,误差小了很多,目前先这样吧,有更好的解决方案可以继续留言,期待中
// 场景烘焙 Plane:贴图像 Unlit,但采样 ShadowMap 乘阴影(不受环境光/主光漫反射影响)
CCEffect %{
techniques:
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场景渲染效果和纹理原画对不上,非常常见