[Parity][render][S2][R] 混合方式被压成 normal / additive 两档(Trans / DrawMode 语义丢失) #611

Closed
opened 2026-10-02 11:42:46 +00:00 by troytt · 0 comments
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#11 — [S2][R] 混合方式被压成 normal / additive 两档(Trans / DrawMode 语义丢失)

  • 位置:src/client/view/unit-drawables.ts:386(missile trans===1 ? additive : normal)、:458-469、:603(overlay trans===0 ? normal : additive);src/client/scene/world-renderer.ts:679-680(怪物按 ADDITIVE_MONSTER_TOKENS 名单兜底,名单在 common/units/monster-art.ts:38-40:WR、WW、FR、K9、17、46、FI、X3、X4、XW);missile-overlay-renderer.ts 的 explosion / cast 恒为 additive;client-world 把 0..3 映射给 overlay(client-world.ts:443-444)
  • 原版:
    • D2Gfx 有 8 种 DrawMode:0 TRANS25、1 TRANS50、2 TRANS75、3 MODULATE、4 BURN、5 NORMAL、6 TRANSHIGHLIGHT、7 HIGHLIGHT(V-src D2MOO/source/D2Gfx/include/DrawMode.h:3-12)。
    • V-data overlay.txt Trans:284 行为 3,5 行为 5(energyshield、durieldead_fwd/rear、vulturedemonfeathers、fetishdeath1),3 行为 0(whirlwind、ice_cage、ice_cage_melt),1 行为 8。
    • missiles.txt Trans:456 行为 1,224 行为空,4 行为 2(unholybolt1-4;docs/d2kb/kb_364 写 2 = 特殊黑白)。
    • 怪物 / 物体的透明属于 COF 每层的 transparent / drawEffect(K-高,common/formats/cof.ts:52、:104 已解析)。
  • 影响:
    • energyshield 等 Trans 5 的 overlay(若 5 = NORMAL)被画成 additive;whirlwind、ice_cage(若 0 = TRANS25)被画成不透明。
    • missile 的 Trans 2(黑白)被画成 normal。
    • 怪物在烘焙没给 blendMode 时按名单整只 additive(名单没有出处)。另外烘焙端只要"任一层 additive 就整只 additive"(baker/packers/pack-act-assets.ts:1105,范围外)。
  • 建议:保留 Trans / drawEffect 原值,渲染器实现对应的 DrawMode(至少 TRANS25/50/75、MODULATE、NORMAL、HIGHLIGHT);怪物按层渲染时取 COF 每层的值。overlay / missile 的 Trans 值与 DrawMode 编号的对应关系需要先确认(待确认 #1)。
  • 已有 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#11` — [S2][R] 混合方式被压成 normal / additive 两档(Trans / DrawMode 语义丢失) - 位置:`src/client/view/unit-drawables.ts:386`(missile `trans===1 ? additive : normal`)、`:458-469`、`:603`(overlay `trans===0 ? normal : additive`);`src/client/scene/world-renderer.ts:679-680`(怪物按 `ADDITIVE_MONSTER_TOKENS` 名单兜底,名单在 `common/units/monster-art.ts:38-40`:WR、WW、FR、K9、17、46、FI、X3、X4、XW);`missile-overlay-renderer.ts` 的 explosion / cast 恒为 additive;client-world 把 0..3 映射给 overlay(`client-world.ts:443-444`) - 原版: - D2Gfx 有 8 种 DrawMode:0 TRANS25、1 TRANS50、2 TRANS75、3 MODULATE、4 BURN、5 NORMAL、6 TRANSHIGHLIGHT、7 HIGHLIGHT(V-src `D2MOO/source/D2Gfx/include/DrawMode.h:3-12`)。 - V-data `overlay.txt` Trans:284 行为 3,5 行为 5(energyshield、durieldead_fwd/rear、vulturedemonfeathers、fetishdeath1),3 行为 0(whirlwind、ice_cage、ice_cage_melt),1 行为 8。 - `missiles.txt` Trans:456 行为 1,224 行为空,4 行为 2(unholybolt1-4;`docs/d2kb/kb_364` 写 2 = 特殊黑白)。 - 怪物 / 物体的透明属于 COF 每层的 transparent / drawEffect(K-高,`common/formats/cof.ts:52`、`:104` 已解析)。 - 影响: - energyshield 等 Trans 5 的 overlay(若 5 = NORMAL)被画成 additive;whirlwind、ice_cage(若 0 = TRANS25)被画成不透明。 - missile 的 Trans 2(黑白)被画成 normal。 - 怪物在烘焙没给 blendMode 时按名单整只 additive(名单没有出处)。另外烘焙端只要"任一层 additive 就整只 additive"(`baker/packers/pack-act-assets.ts:1105`,范围外)。 - 建议:保留 Trans / drawEffect 原值,渲染器实现对应的 DrawMode(至少 TRANS25/50/75、MODULATE、NORMAL、HIGHLIGHT);怪物按层渲染时取 COF 每层的值。overlay / missile 的 Trans 值与 DrawMode 编号的对应关系需要先确认(待确认 #1)。 - 已有 issue:—
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#611
No description provided.