From 80abaaf1b159ccdcae68252ba1296d77badb05e1 Mon Sep 17 00:00:00 2001 From: xcdoge Date: Mon, 12 Oct 2026 23:52:31 +0800 Subject: [PATCH] =?UTF-8?q?#549=EF=BC=9A=E6=A3=8B=E7=9B=98=E6=9D=90?= =?UTF-8?q?=E8=B4=A8=E7=9A=84=E8=87=AA=E5=8F=91=E5=85=89=E5=AF=B9=E9=BD=90?= =?UTF-8?q?=E5=AE=98=E6=96=B9=20=5FEmissionColor=EF=BC=880.25=20=E2=86=92?= =?UTF-8?q?=201=EF=BC=89=EF=BC=8C=E6=A3=8B=E7=9B=98=E4=BA=AE=E5=BA=A6?= =?UTF-8?q?=E5=86=8D=20+4%?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 接上一提交(官方场景的两个增益改回 1)之后,剩下的偏暗还有一处同类问题:棋盘瓦片材质的自发光被手调压暗了。 官方真值(UnityPy + tools/local-extract/aklz4.py 的 LZ4AK 解码器 dump 客户端 arts/maps/map_autochess/res.ab 的 Material): MT_autochess _Color = (1,1,1,1) _EmissionColor = (1,1,1,1) _MainTex = TX_autochessi_D _EmissionMap = TX_autochessi_E _MetallicGlossMap = TX_autochessi_M _BumpMap = TX_autochessi_N _Metallic = 0 _Glossiness = 0 MT_autochess_common _EmissionColor = 0.5588(同样带 _EmissionMap) MT_autochessi_BG _Color = 0.71323 + shader Torappu/Unlit/Texture ⇒ 与代码里的 LIGHTING.bg.color = 0.713 完全一致(这条本来是对的) 也就是说官方棋盘是**自发光**的(albedo 加 emission),不是靠环境灯照亮;而 materials.js 里 boardMaterial 的 emissive 默认就是 1(emissive / emissiveMap 直接对应上面两个材质),decalMaterial(_common 图集)也已经是 官方的 0.559 —— 只有 scene.js 的 LIGHTING.emissive = 0.25 把它整体压到四分之一。 改动:LIGHTING.emissive 0.25 → 1,注释写明官方 _EmissionColor 的来源与它为什么必须是 1(与上一提交那两个 增益同一类问题:照截图手调的系数)。 实测(同一 m04 场景、同一相机,只取棋盘区域求平均,官方截图同口径): 官方截图 亮度 129.0 最初 亮度 89.7(−30%) 场景增益改回 1 亮度 103.3(−20%) 本提交 亮度 107.4(−17%) 已知未尽:还剩约 −17%。官方棋盘瓦片的着色器是自定义的(dump 里 m_Shader 读不到完整定义),无法直接比对公式, 下一步需要把画面按材质逐区域分离(棋盘瓦片 / 场景沙地 / 水)再分别对齐,而不是继续拧全局系数。 --- public/js/render/board3d/scene.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/public/js/render/board3d/scene.js b/public/js/render/board3d/scene.js index 502b7806..50afc8ce 100644 --- a/public/js/render/board3d/scene.js +++ b/public/js/render/board3d/scene.js @@ -37,7 +37,12 @@ export const LIGHTING = Object.freeze({ key: { color: 0xfff1df, intensity: 2.6, dir: [-5.2, -3.4, 10] }, hemi: { sky: 0xe4ecf4, ground: 0x4a5058, intensity: 0.6 }, env: 1.0, - emissive: 0.25, + // MT_autochess._EmissionColor = (1,1,1) and MT_autochess_common._EmissionColor = 0.5588, both with an + // _EmissionMap — the official board is emissive, not lamp-lit. boardMaterial's own default is 1 (its emissive / + // emissiveMap come straight from those two materials); LIGHTING.emissive used to scale it down to 0.25, which is + // what made our board read darker than the official render (issue #549). decalMaterial (the _common atlas) keeps + // the official 0.559 of its own. + emissive: 1, roughness: 0.78, shadow: { size: 2048, radius: 3, bias: -0.0004, normalBias: 0.025 }, exposure: 1.0,