mcpField
I
implement-fog-of-war

implement-fog-of-war

github.com/mengto开发7.1k1.2k 次安装3 天前更新
代码仓库

关于 implement-fog-of-war

用于将战争迷雾实现为共享感知系统、并与渲染层分离的开发技能。适合需要在玩法中统一可见性规则,并控制视觉覆盖层的游戏开发者。

主要功能

  1. 01分离感知逻辑与渲染
  2. 02采用确定性的障碍物可见性计算
  3. 03将可见距离编码到查找纹理
  4. 04使用单个着色器覆盖层渲染迷雾
  5. 05将可见性接入目标选择与敌人逻辑
  6. 06验证状态、生命周期与性能

适用场景

  1. 01为玩法添加战争迷雾
  2. 02统一敌人可见性与目标选择
  3. 03测试移动和菜单状态下的迷雾效果

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mengto/skills --skill implement-fog-of-war

安装后在 Claude Code 中输入/implement-fog-of-war确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
references/
mechanics.md
validation.md

详细介绍

实现战争迷雾

将战争迷雾构建为共享感知系统,并采用克制的表现层。

保持架构不变

将以下职责分开:

  1. 由确定性的 CPU 感知负责范围、障碍物相交和游戏内可见性。
  2. 将玩家的角度可见距离编码到一张固定大小的查找纹理中。
  3. 由一个全屏着色器将查找纹理转换为柔和的径向迷雾和感知墙体的迷雾。
  4. 让游戏直接使用感知结果;绝不要根据迷雾像素推断战斗判定。

实现或更改算法前,请先阅读 mechanics.md。其中记录了经过验证的障碍物模型、着色器合成方式、校准值、状态规则、敌人行为、光照限制和遥测信息。

编辑前先检查

  • 找出权威的玩家位置、摄像机、障碍物、场景生命周期、帧循环、目标选择、敌人感知和渲染层。
  • 确认游戏地面模型。经过验证的角点反投影方法假设地面局部水平;如果可见区域内的海拔高度有变化,请使用权威的表面或地形重建方法。
  • 找出已有的场景迷雾、后期处理、渲染器创建逻辑、审核模式、菜单、截图、过渡和释放路径。
  • 更改常量或职责归属前,先阅读当前测试以及近期的迷雾/感知提交。
  • 确认障碍物状态是否会在运行时变化。如果用于导航或碰撞的活动障碍物集合几何形状适合视线检测,请复用该集合。
  • 尽早检查工作区,并保留无关更改。

按依赖顺序实现

1. 定义感知判定依据
  • 使用稳定的占地形状、垂直范围和活动状态来表示每个视线遮挡物。
  • 让 3D 视线线段或射线同时与水平占地形状和垂直范围求交。
  • 忽略未激活的遮挡物,以及低于眼睛到目标视线的掩体。
  • 提供:
    • 用于敌人、目标选择和攻击的点到点感知;
    • 用于填充迷雾查找纹理的确定性角度距离填充。
  • 明确设置玩家和敌人的视野范围。如果遭遇设计需要敌人在玩家揭示边缘之外发现玩家,可让两者范围不同。
2. 构建可见性查找纹理
  • 只分配一次距离数组、字节像素和数据纹理。
  • 从玩家的眼睛位置沿水平方向投射固定数量、间隔均匀的射线。
  • 将命中距离按玩家视野半径归一化,并量化到单行红色通道纹理中。
  • 使用线性过滤、水平重复环绕、不生成 mipmap,并将射线数量控制在适合移动端/桌面端的范围内。
  • 在玩家发生明显移动后或达到较短的最长间隔后刷新。不要在帧循环中分配内存。
3. 渲染一个柔和叠加层
  • 使用一个裁剪空间平面和一个透明着色器材质。
  • 根据摄像机四角的交点,重建每个片段的地面位置。
  • 合并以下效果:
    • 清晰的内圈和柔和的外圈径向渐隐;
    • 通过角度查找纹理采样的羽化墙体边界。
  • 在相邻角度之间平滑障碍物可见性。将墙体迷雾的权重设得低于外圈径向迷雾,让遮挡物呈现为大气效果,而不是不透明的楔形区域。
  • 使用 max 合并径向迷雾和障碍物迷雾,然后限制最终不透明度。
  • 禁用深度测试、深度写入和色调映射;在世界场景之后渲染。
  • 不要引入第二个渲染器、渲染目标、合成器或逐射线网格。
4. 集成到游戏玩法中
  • 将模拟中的存在状态与呈现可见性分开。
  • 通过图层或仅影响呈现的机制隐藏尚未揭示的敌人渲染对象;如果根节点的可见性也控制生命周期或模拟,就不要切换根节点。
  • 将尚未揭示的敌人排除在目标锁定、瞄准选择、最近目标搜索、HUD 计数和玩家命中判定之外。
  • 隐藏可能暴露未被发现敌人的预警提示。
  • 敌人的发现和攻击使用各自的范围,并遵循相同的视线判定。
  • 感知判定一旦失效,立即清除当前目标锁定。
  • 在一个模拟阶段内缓存感知结果;移动后,如果下游系统需要最新位置,则刷新缓存。
5. 集成状态与生命周期
  • 仅在游戏进行期间启用战争迷雾。
  • 在菜单、物品栏、回顾/捕获模式、暂停或非游戏状态以及关卡切换期间禁用,除非产品明确要求启用。
  • 在任何提前渲染的分支之前禁用战争迷雾,避免上一帧的画面泄漏到其他状态。
  • 将场景氛围雾与战争迷雾分开。
  • 拆除时释放叠加层几何体、材质和查找纹理。
  • 发布精简遥测数据,包括射线预算、启用状态、范围、可见敌人、目标可见性、视线状态和测量距离。

按正确顺序调整

  1. 验证障碍物几何体和视线高度。
  2. 验证玩家和敌人的范围。
  3. 设置完全清晰的内圈半径。
  4. 设置外圈径向渐隐和最大不透明度。
  5. 设置墙体边缘柔和度。
  6. 添加角度平滑,直到射线状条纹消失。
  7. 降低障碍物的暗度,避免墙体看起来像黑色射线,而应呈现遮挡效果。
  8. 只有在视觉效果正确且性能经过实测后,才调整射线预算。

不要用额外模糊来掩盖错误的障碍物数据。不要为了弥补可见性边界不明显而调暗整个场景。

验证

在宣告完成之前,请阅读 validation.md。运行:

  • 纯感知和不透明度测试;
  • 渲染预算结构性契约测试;
  • 针对目标选择、图层、光照和状态的集成测试;
  • 项目 lint 和构建;
  • 在 Codex 浏览器中进行实际桌面和移动浏览器检查。

如果回顾模式会有意禁用战争迷雾,请使用正常游戏流程进行视觉验证。检查动态效果、摄像机移动、墙体边缘、门、接缝和菜单切换,而不只是静止画面。

保持已验证的品质

  • 保持内圈游戏区域清晰易辨。
  • 控制最大暗度,避免过暗。
  • 墙体边缘应柔和,不出现可见的径向射线。
  • 确保角度接缝不可见。
  • 确保动态闸门与视线判定同步。
  • 即使敌人视野范围大于玩家揭示范围,也要确保敌人行为公平。
  • 保持使用一套权威的可见性模型和一个有界叠加层。

评论

支持 Markdown