[渲染] DRLG 关卡使用 D2 实际选中的瓦片变体(需决定 pickVariant 规则) #502

Open
opened 2026-09-27 15:29:43 +00:00 by troytt · 0 comments
Owner

现象

第一幕 DRLG 移植后,关卡布局(房间、瓦片的 style / sequence / type / DT1 库、预设单位)与 D2MOO 逐格一致(scene.json 中 fidelity: "layout")。但同一个 (style, sequence) 下有多个变体(DT1 rarity)时,渲染器仍用 SplitMix64 pickVariant 重新抽一次,而 D2 是在 DRLGROOMTILE_GetTileCache 里用房间种子抽的。所以像素层面仍与原版不同。

烘焙时统计(3 个幕副本 × 8 关,和烘焙输入完全相同):

副本 瓦片引用 有多个变体候选的引用
0(0x5eed0100) 55532 40452
1(0x5eed0101) 55754 40720
2(0x5eed0102) 54758 39982

约 73% 的引用会被重新抽变体。按单元格的 DT1 掩码过滤后,跨库歧义为 0(整关一个库池时为 250 / 169 / 172),所以只差变体这一步。

建议

烘焙把 D2 实际选中的瓦片(库 + 索引,移植里已经有:mapTiles 阶段与 oracle 逐项一致)写进场景,渲染器对 fidelity: "exact" 的关卡直接用它,其余关卡照旧用 pickVariant。

需要先确认

项目规则要求瓦片变体用 SplitMix64 pickVariant(为了消除 45° 周期条纹)。D2 自己的选择来自房间种子,不会出现那种条纹。是否允许 DRLG 关卡改用 D2 的原始选择,需要维护者决定。

验收

scripts/render-drlg-compare.ts 目前让两份 dump 走同一个渲染器(同样用 pickVariant),所以它的 XOR 为空只证明布局一致,不证明变体一致。验收需要:

  1. 给 render-drlg-compare.ts 加一种模式,按 dump 里 D2 实际选中的瓦片(mapTiles 阶段的库和索引)渲染 D2MOO 的结果;
  2. 对第一幕 8 关 × 3 个副本,烘焙出的场景在游戏渲染器里的结果与第 1 步的图逐像素一致。
## 现象 第一幕 DRLG 移植后,关卡布局(房间、瓦片的 style / sequence / type / DT1 库、预设单位)与 D2MOO 逐格一致(`scene.json` 中 `fidelity: "layout"`)。但同一个 (style, sequence) 下有多个变体(DT1 rarity)时,渲染器仍用 SplitMix64 `pickVariant` 重新抽一次,而 D2 是在 `DRLGROOMTILE_GetTileCache` 里用房间种子抽的。所以像素层面仍与原版不同。 烘焙时统计(3 个幕副本 × 8 关,和烘焙输入完全相同): | 副本 | 瓦片引用 | 有多个变体候选的引用 | |---|---|---| | 0(0x5eed0100) | 55532 | 40452 | | 1(0x5eed0101) | 55754 | 40720 | | 2(0x5eed0102) | 54758 | 39982 | 约 73% 的引用会被重新抽变体。按单元格的 DT1 掩码过滤后,跨库歧义为 0(整关一个库池时为 250 / 169 / 172),所以只差变体这一步。 ## 建议 烘焙把 D2 实际选中的瓦片(库 + 索引,移植里已经有:`mapTiles` 阶段与 oracle 逐项一致)写进场景,渲染器对 `fidelity: "exact"` 的关卡直接用它,其余关卡照旧用 `pickVariant`。 ## 需要先确认 项目规则要求瓦片变体用 SplitMix64 `pickVariant`(为了消除 45° 周期条纹)。D2 自己的选择来自房间种子,不会出现那种条纹。是否允许 DRLG 关卡改用 D2 的原始选择,需要维护者决定。 ## 验收 `scripts/render-drlg-compare.ts` 目前让两份 dump 走同一个渲染器(同样用 `pickVariant`),所以它的 XOR 为空只证明布局一致,不证明变体一致。验收需要: 1. 给 `render-drlg-compare.ts` 加一种模式,按 dump 里 D2 实际选中的瓦片(`mapTiles` 阶段的库和索引)渲染 D2MOO 的结果; 2. 对第一幕 8 关 × 3 个副本,烘焙出的场景在游戏渲染器里的结果与第 1 步的图逐像素一致。
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#502
No description provided.