关于 game-transform-systems
game-transform-systems 是一项技能,用于让游戏逻辑、渲染、物理和工具中的变换代码明确且易于测试。它提供变换组合、求逆和验证的约定与检查方法。
主要功能
- 01梳理坐标空间与约定
- 02按方向命名并组合变换
- 03用逆变换处理查询
- 04检查相机与投影
- 05往返测试与坐标轴调试
适用场景
- 01统一游戏逻辑与渲染中的变换
- 02将碰撞或场查询移入对象空间
- 03检查相机投影与反投影
- 04排查矩阵顺序和坐标空间错误
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ lvtd-llc/ skills --skill game-transform-systems安装后在 Claude Code 中输入/game-transform-systems确认已加载。
详细介绍
游戏变换系统
使用此技能,让变换代码明确、可组合、可测试,并在游戏玩法、渲染、物理和工具之间保持一致。
主要来源:Oleksandr Kaleniuk 所著的《Geometry for Programmers》 (https://www.manning.com/books/geometry-for-programmers),经改写和转述,尤其是第 4 章。补充来源:Khronos glTF 2.0 规范中的变换和坐标系约定 (https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html)。
核心工作流
- 列出涉及的所有坐标空间:模型、本地、父级、世界、视图、裁剪、屏幕、纹理、网格或场空间。
- 统一定义约定:左右手系、上轴、单位、行向量/列向量、矩阵内存布局、乘法顺序、角度单位和四元数顺序。
- 按方向为变换命名,例如
local_to_world和world_to_view。 - 在一个地方组合变换,并缓存会重复使用的组合矩阵。
- 使用逆变换将查询移入更简单的空间,尤其适用于拾取、SDF、场和对象本地碰撞。
- 明确构建摄像机:位置、目标或前向向量、上向量、视野、宽高比、近平面/远平面。
- 在调整游戏玩法行为之前,通过往返测试和调试坐标轴进行验证。
设计规则
- 将变换视为一等数据,而不是隐藏在辅助方法中的副作用。
- 优先使用一条规范的变换链来处理渲染和游戏玩法。在引擎或资源边界处添加适配器。
- 当平移、投影和矩阵组合必须纳入同一流水线时,使用齐次坐标。
- 对普通的旋转、平移、缩放和错切,使用仿射变换。
- 当问题涉及透视、投影或平面扭曲时,使用射影变换。
- 对 SDF 或场的输入应用逆变换,而不是针对每种对象变换重写场的公式。
- 如果可能存在非均匀缩放或错切,使用逆转置变换法线。
摄像机和投影检查
- 摄像机需要足够的约束来确定朝向。仅有位置和目标仍无法确定滚转角,还需要上/右/下向量或等效信息。
- 近平面和远平面应覆盖可游玩范围;设置不当会损害深度精度。
- 应使用已知点测试投影和反投影,包括屏幕中心、视口角落、近平面和远平面上的点。
- 必须记录屏幕空间中 y 轴的方向和像素中心约定,以用于拾取和 UI/游戏交互。
变换调试清单
- 绘制所选对象的本地坐标轴。
- 绘制摄像机视锥体和近平面/远平面。
- 在变量名中标明变换方向。
- 在提交给渲染或物理系统之前,断言矩阵值均为有限数。
- 测试单位变换、仅平移、仅旋转、仅缩放、父子变换,以及逆变换往返。
- 如果法线、碰撞或子对象变换会受到影响,则测试非均匀缩放。
常见错误
- 将行优先内存布局与行向量数学假设混用。
- 按看似合理但实际错误的顺序相乘变换。
- 在紧密的逐点循环中重复计算逆矩阵。
- 忘记在齐次坐标中,
w = 0表示方向,而w = 1表示点。 - 对 SDF 输出应用对象变换,而不是对查询点应用逆变换。
- 通过更改资源朝向来修复摄像机滚转问题,而不是完善摄像机约束。
评论
支持 Markdown