feat(renderer/roofs): 实现屋顶(Roofs)在角色进入遮挡区域时的动态半透明渐变(Roof Fade) #44

Closed
opened 2026-09-17 05:20:36 +00:00 by troytt · 1 comment
Owner

背景与现状

在罗格营地阿卡拉的帐篷、恰西铁匠棚、鲁高因民宅等固定场景中,包含大量 TileRoof = 15 的屋顶瓦片。

当前 src/game/d2map.ts:122 已经将屋顶与普通墙面分离,在绘制时作为最顶层(Pass 4)进行绘制。但渲染器缺少角色与屋顶覆盖网格的碰撞判定与动态透明度支持,导致角色走入帐篷或建筑物内时,角色模型被屋顶完全遮挡而不可见。

暗黑2原版逻辑(Oracle / Ground Truth)

  • 原版中,当角色(Player Unit)或特定实体移动到被 TileRoof 覆盖的网格下方时,引擎会检测该遮挡关系。
  • 被遮挡范围内的屋顶瓦片会自动触发 Alpha 衰减半透明混合(Roof Fade),使玩家能够看清建筑物内部的陈设、NPC 以及自身的行动。

解决建议与改造方案

  1. 建立基于 Sub-tile 网格的屋顶遮挡检测器,实时判断玩家坐标是否处于屋顶覆盖范围内。
  2. 在渲染管线中为屋顶绘制批次引入透明度控制(Alpha 衰减),支持受遮挡区域屋顶瓦片的淡化半透明渲染。
## 背景与现状 在罗格营地阿卡拉的帐篷、恰西铁匠棚、鲁高因民宅等固定场景中,包含大量 `TileRoof = 15` 的屋顶瓦片。 当前 `src/game/d2map.ts:122` 已经将屋顶与普通墙面分离,在绘制时作为最顶层(Pass 4)进行绘制。但渲染器缺少角色与屋顶覆盖网格的碰撞判定与动态透明度支持,导致角色走入帐篷或建筑物内时,角色模型被屋顶完全遮挡而不可见。 ## 暗黑2原版逻辑(Oracle / Ground Truth) - 原版中,当角色(Player Unit)或特定实体移动到被 `TileRoof` 覆盖的网格下方时,引擎会检测该遮挡关系。 - 被遮挡范围内的屋顶瓦片会自动触发 Alpha 衰减半透明混合(Roof Fade),使玩家能够看清建筑物内部的陈设、NPC 以及自身的行动。 ## 解决建议与改造方案 1. 建立基于 Sub-tile 网格的屋顶遮挡检测器,实时判断玩家坐标是否处于屋顶覆盖范围内。 2. 在渲染管线中为屋顶绘制批次引入透明度控制(Alpha 衰减),支持受遮挡区域屋顶瓦片的淡化半透明渲染。
Author
Owner

已在分支 fix/issue-44 中真实修复并验证通过。

Commit: 57c13bd
验证项:

  • 26/26 单元测试通过 (tests/roofs.test.ts)
  • TypeScript 类型检查通过 (npx tsc --noEmit)
  • 生产包构建成功 (npm run build)
  • 全量 35 个测试套件 661 测试全绿
已在分支 `fix/issue-44` 中真实修复并验证通过。 Commit: `57c13bd` 验证项: - 26/26 单元测试通过 (`tests/roofs.test.ts`) - TypeScript 类型检查通过 (`npx tsc --noEmit`) - 生产包构建成功 (`npm run build`) - 全量 35 个测试套件 661 测试全绿
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#44
No description provided.