[Parity][render][S2][R] 渲染器:draw() 忽略 elevationY;shader 有光照魔数;palette rows 1-4 自造且无人调用(Utrans / noUniqueShift 未实现) #614

Closed
opened 2026-10-02 11:42:46 +00:00 by troytt · 1 comment
Owner

1.13c 客户端保真度审计立项(基准快照:7bd1090 / main @ 77a20c7)

证据标记说明:V-data = 1.13c MPQ 数据表 (.txt / animdata.d2 / .tbl / pal.pl2);V-src = D2MOO 逆向源码;V-bin = 1.13c DLL 反汇编;K = 1.13c 公认行为。

来源审计项:render#14 — [S2][R] 渲染器:draw() 忽略 elevationY;shader 有光照魔数;palette rows 1-4 自造且无人调用(Utrans / noUniqueShift 未实现)

  • 位置:src/client/render/renderer.ts:1049-1084(draw 只处理 paletteRow,不读 elevationY)与 :1098-1136(只有 drawQuad 编码 elevationY);:236(dynamicLight = lightSample.rgb * (0.22 + 0.78 * lightSample.a));:837-863(palette rows 1-4:冷、毒、暗金、冠军色的自造公式)
  • 代码:world-renderer 里所有 renderer.draw(..., { elevationY: Math.max(0, frame.height - 16) })(L572、L694、L879、missile-overlay-renderer L507)以及墙体的 elevationY: h - 40(L1108,墙走的是 drawTileQuad → renderer.draw)都不会生效。
  • 原版:
    • 原版光照对直立精灵按单位所在的 sub-tile 取光(K-中)。
    • monstats2.txt 的 Utrans / Utrans(N) / Utrans(H) / noUniqueShift 决定暗金和冠军怪的调色板偏移(V-data #156 andariel Utrans 2、noUniqueShift 1)。
    • 0.22 + 0.78*a 没有出处(?)。
  • 影响:
    • 高精灵和墙体按像素在地面上的投影点受光,头部和墙顶会与脚下的光照脱节(光圈边缘处尤其明显)。
    • 暗金 / 冠军怪没有偏色(palette rows 1-4 没有调用方,而且公式本身也是自造的)。
  • 建议:draw() 也把 elevationY 传进顶点;去掉 0.22/0.78,按原版光照公式(docs/lighting 文档)处理;palette rows 改为加载原版的 colormap(Pal.pl2 / randtransform),按 Utrans 选行。
  • 已有 issue:—
> **1.13c 客户端保真度审计立项**(基准快照:`7bd1090` / `main @ 77a20c7`) > 证据标记说明:`V-data` = 1.13c MPQ 数据表 (`.txt` / `animdata.d2` / `.tbl` / `pal.pl2`);`V-src` = D2MOO 逆向源码;`V-bin` = 1.13c DLL 反汇编;`K` = 1.13c 公认行为。 ### 来源审计项:`render#14` — [S2][R] 渲染器:`draw()` 忽略 `elevationY`;shader 有光照魔数;palette rows 1-4 自造且无人调用(Utrans / noUniqueShift 未实现) - 位置:`src/client/render/renderer.ts:1049-1084`(`draw` 只处理 `paletteRow`,不读 `elevationY`)与 `:1098-1136`(只有 `drawQuad` 编码 `elevationY`);`:236`(`dynamicLight = lightSample.rgb * (0.22 + 0.78 * lightSample.a)`);`:837-863`(palette rows 1-4:冷、毒、暗金、冠军色的自造公式) - 代码:world-renderer 里所有 `renderer.draw(..., { elevationY: Math.max(0, frame.height - 16) })`(L572、L694、L879、missile-overlay-renderer L507)以及墙体的 `elevationY: h - 40`(L1108,墙走的是 `drawTileQuad → renderer.draw`)都不会生效。 - 原版: - 原版光照对直立精灵按单位所在的 sub-tile 取光(K-中)。 - `monstats2.txt` 的 Utrans / Utrans(N) / Utrans(H) / noUniqueShift 决定暗金和冠军怪的调色板偏移(V-data #156 andariel Utrans 2、noUniqueShift 1)。 - `0.22 + 0.78*a` 没有出处(?)。 - 影响: - 高精灵和墙体按像素在地面上的投影点受光,头部和墙顶会与脚下的光照脱节(光圈边缘处尤其明显)。 - 暗金 / 冠军怪没有偏色(palette rows 1-4 没有调用方,而且公式本身也是自造的)。 - 建议:`draw()` 也把 `elevationY` 传进顶点;去掉 0.22/0.78,按原版光照公式(docs/lighting 文档)处理;palette rows 改为加载原版的 colormap(Pal.pl2 / randtransform),按 Utrans 选行。 - 已有 issue:—
Author
Owner

Resolved in commit 56f4f7f: Elevation-aware vertex lighting in renderer.draw() via elevationY, authentic linear dynamic light curve in fragment shader, and authentic 1.13c PL2 colormap translations in setPalette.

Resolved in commit 56f4f7f: Elevation-aware vertex lighting in renderer.draw() via elevationY, authentic linear dynamic light curve in fragment shader, and authentic 1.13c PL2 colormap translations in setPalette.
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: troytt/diablo2-web#614
No description provided.