关于 game-sdf-and-field-modeling
面向游戏开发者和游戏构建 Agent 的技能,用标量场、向量场或有符号距离场表示玩法与内容,而非显式三角形。内容涵盖场的组合、坐标变换、距离有效性,以及将场用于玩法或渲染数据的方法。
主要功能
- 01标量场、向量场与距离场
- 02布尔运算和场平滑组合
- 03将采样点变换至局部空间
- 04保持距离有效性的规则
- 05场采样与可视化指引
适用场景
- 01构建程序化岩石或洞穴
- 02制作影响、危险或风场
- 03在网格提取前表示可编辑体积
- 04不依赖网格拓扑判断体积包含关系
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ lvtd-llc/ skills --skill game-sdf-and-field-modeling安装后在 Claude Code 中输入/game-sdf-and-field-modeling确认已加载。
详细介绍
游戏 SDF 与场建模
当游戏系统用空间上的函数表示比用显式三角形表示更合适时,使用此技能。将场视为游戏玩法和内容工具,而不只是渲染技巧。
主要来源:Oleksandr Kaleniuk 的《Geometry for Programmers》 (https://www.manning.com/books/geometry-for-programmers),经改编和转述,重点涉及第 2、8、10 和 11 章。其他来源: NVIDIA GPU Gems 3 第 34 章,“Signed Distance Fields Using Single-Pass GPU Scan Conversion of Tetrahedra” (https://developer.nvidia.com/gpugems/gpugems3/part-v-physics-simulation/chapter-34-signed-distance-fields-using-single-pass-gpu), 以及 Perry、Frisken 和 Jones 的“Designing with Distance Fields” (https://merl.com/publications/TR2006-054)。
核心工作流
- 定义场的签名:输入的空间中的点,以及输出的值,还有符号约定的含义。
- 选择函数必须是真正的距离场,还是只需类似符号的隐式函数。
- 先构建基本图元场,再通过变换、布尔运算、混合、偏移或形变场进行组合。
- 使用物体变换的逆变换来变换输入点。不要为每次平移、旋转或缩放都重写图元。
- 记录哪些操作会保留或破坏真正的距离含义。
- 决定如何将场转化为游戏玩法或可渲染数据:直接采样、光线步进、网格提取、体素化、粒子、贴花或碰撞探测。
- 添加可视化调试:切片、等值线、梯度箭头、采样点和符号颜色。
场类型
- 标量场:在每个点返回一个数值。用于地形高度、影响力、热量、雾、危险度、有符号距离或密度。
- SDF:返回内部为负值、边界为零、外部为正值;当它仍是真正的 SDF 时,数值大小表示距离。
- 向量场:在每个点返回一个向量。用于风、洋流、转向、力场、形变和流动。
- 形变场:返回与建模物体处于同一空间中的位移向量。
- 隐式近似场:返回类似符号的值,但不是真正的距离。虽然有用,但不适用于需要距离大小的操作。
SDF 操作
- 并集:取两个场中的较小值。
- 交集:取两个场中的较大值。
- 差集:将第一个场与第二个场的取反场求交集。
- 对真正的 SDF 进行膨胀/腐蚀:根据项目的符号约定,加上或减去一个常量。
- 中空化:使用绝对距离和壳层宽度,将边界带转换为壳层。
- 平滑混合:适用于有机形状,但可能破坏精确的距离语义。
距离有效性规则
- 真正的 SDF 可支持可靠的偏移和基于梯度的移动。
- 布尔组合通常会保留符号行为,但并非处处都能保留精确距离。
- 元球、双纽线、密度函数和许多程序化公式都是隐式场,而非真正的 SDF。
- 距离有效性丢失后,在执行依赖精确距离的算法之前,需重新初始化或重新计算距离。
- 对含噪或采样得到的场求梯度时,需要进行滤波或使用稳健的有限差分。
游戏用途
- 程序化岩石、洞穴、团块、护盾、区域、贴花和有机道具。
- 在转换为网格或体素之前,可破坏或可编辑的体积。
- 用于 AI 的影响图、危险场、雾密度、风、水流和力场。
- 当网格拓扑不可靠时,对体积进行快速的内部/外部测试。
常见错误
- 将每个隐式函数都当作真正的 SDF。
- 布尔运算后进行偏移,却不检查距离有效性。
- 在高负载路径中,每次采样都重新计算变换或执行开销高昂的邻近搜索。
- 以过低的分辨率采样场,却将问题归咎于提取算法。
- 发布场逻辑时没有切片或等值线调试视图。
评论
支持 Markdown