refactor(wilderness): 用基于控制顶点图(DRLGVER)的样条小径取代栅格化 A* 道路 #66

Closed
opened 2026-09-18 01:10:10 +00:00 by troytt · 0 comments
Owner

背景

在原版暗黑 2 的室外关卡生成中:

泥土小径(DRLG_OUTDOORS_GenerateDirtPath / DRLGVER_CreateVertices / byte_6FDCF958)并不是由网格 A* 搜索栅格化生硬连线而成的,而是:

  1. 维护关卡主要出入口(Entrance / Exit)与中间关键地标的宏观控制顶点图;
  2. 沿控制顶点生成平滑的样条曲线(Spline)小径骨架;
  3. 在骨架路径上随机放置预设的路面小拼块、碎石与路标,并沿途保留足够的自然弯曲度。

而当前 Web 引擎采用直线/A* 栅格化搜索(rasterizeDirtPathSegment),配合简单的 8 邻域位掩码查表(DIRT_PATH_TILE_LUT)。这导致当前道路线条往往较为生硬,且在穿越不同地形区块时容易出现不自然的几何拐弯或对预设地貌造成切削。


改造内容

  1. 引入原版控制顶点图(DRLGVER_CreateVertices):
    • 根据关卡边界门洞(openGates)与地标预设位置,建立关卡道路的宏观控制顶点图。
  2. 实现样条曲线小径骨架:
    • 用平滑参数曲线/样条插值替代当前的逐格直线栅格化,模拟原版蜿蜒曲折的自然小径。
  3. 路面拼块与碎石修饰数据驱动化:
    • 结合原版路面碎石和路标预设进行贴装,消除死板的 8 邻域查表生硬瑕疵。

验收标准

  • 鲜血荒地、冰冷之原、石块旷野等野外道路蜿蜒自然,符合原版样条小径走势
  • 道路骨架平滑穿过出入口与小站/地标,不对预设地表造成异常切削
  • 现有道路连通性测试(tests/wilderness-roads.test.ts、tests/wilderness-roads-multi-act.test.ts)全部通过
  • npm run typecheck 零错误,npx vitest run 全绿
## 背景 在原版暗黑 2 的室外关卡生成中: 泥土小径(`DRLG_OUTDOORS_GenerateDirtPath` / `DRLGVER_CreateVertices` / `byte_6FDCF958`)并不是由网格 A* 搜索栅格化生硬连线而成的,而是: 1. 维护关卡主要出入口(Entrance / Exit)与中间关键地标的**宏观控制顶点图**; 2. 沿控制顶点生成平滑的**样条曲线(Spline)小径骨架**; 3. 在骨架路径上随机放置预设的路面小拼块、碎石与路标,并沿途保留足够的自然弯曲度。 而当前 Web 引擎采用直线/A* 栅格化搜索(`rasterizeDirtPathSegment`),配合简单的 8 邻域位掩码查表(`DIRT_PATH_TILE_LUT`)。这导致当前道路线条往往较为生硬,且在穿越不同地形区块时容易出现不自然的几何拐弯或对预设地貌造成切削。 --- ## 改造内容 1. **引入原版控制顶点图(`DRLGVER_CreateVertices`)**: - 根据关卡边界门洞(`openGates`)与地标预设位置,建立关卡道路的宏观控制顶点图。 2. **实现样条曲线小径骨架**: - 用平滑参数曲线/样条插值替代当前的逐格直线栅格化,模拟原版蜿蜒曲折的自然小径。 3. **路面拼块与碎石修饰数据驱动化**: - 结合原版路面碎石和路标预设进行贴装,消除死板的 8 邻域查表生硬瑕疵。 --- ## 验收标准 - [ ] 鲜血荒地、冰冷之原、石块旷野等野外道路蜿蜒自然,符合原版样条小径走势 - [ ] 道路骨架平滑穿过出入口与小站/地标,不对预设地表造成异常切削 - [ ] 现有道路连通性测试(`tests/wilderness-roads.test.ts`、`tests/wilderness-roads-multi-act.test.ts`)全部通过 - [ ] `npm run typecheck` 零错误,`npx vitest run` 全绿
troytt added this to the [M16] 野外生成器原版一致性:还原 Blizzard DRLG 原生机制 milestone 2026-09-18 01:10:10 +00:00
Sign in to join this conversation.
No Label
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#66
No description provided.