开发者生态
morning
用于距离场实体建模的 Halfspace 实验 IDE
摘要
Introduction Halfspace is an experimental IDE for solid modeling with distance fields. Try the demo (The demo is best experienced on a computer; mobile Safari has some WebGPU issues, and pan / tilt / ...
the
and
for
with
writing
time
that
implicit
less
level
2026-10-01
1 阅读
约5分钟阅读
luu
字号:
简介 Halfspace 是一个用于距离场实体建模的实验性 IDE。尝试演示(该演示最好在计算机上体验;移动 Safari 有一些 WebGPU 问题,并且平移/倾斜/缩放交互尚未设计用于多点触控)Halfspace 是 Fidget 内核的展示应用程序,用于光栅化和网格化。在 GUI 中,图像是实时光栅化的;模型可以导出为图像或三角形网格:由于现在是 2026 年,所以我首先要注意,这不是 vivi 编码的。我自 2025 年 4 月以来一直致力于此工作,并出于各种原因使用我的人脑编写代码(Fidget 的历史可以追溯到 2022 年)。现在,本文的其余部分假设您对隐式表面有一些了解;请参阅许多以前的文章以获取更多背景信息的详细信息(或者继续阅读,你会没事的)。为什么?我花了很多时间编写隐式内核,在这些内核上编写 GUI 的时间略少一些,甚至用这些工具进行实际建模的时间就更少了。在实践中,我实际上不需要在日常生活中进行太多的实体建模,因此我创建的大部分内容都是演示或如何使用特定内核的示例。尽管如此,我还是注意到在处理隐式曲面时存在一种特殊的紧张感。使用低级隐式表面有点像编写汇编:它是低级的、强大的、但烦人的。如果你得到的只是 x 、 y 、 z 变量——而你有责任将它们组合成你梦想的所有形状——那可能是一次痛苦的经历。当面临编写汇编的痛苦时,大多数人会在其之上构建抽象:高级语言和编译为低级表示的库。这里的等价物是形状和变换的标准库:球体、盒子、平移、缩放等。还有一种不太常见的方法来解决装配的痛苦:使装配本身编写起来不那么痛苦。在这些方面,我最喜欢的项目是 Kartik Agaram 的 Mu ,它围绕 x86 汇编语言的子集封装了仿真、跟踪和时间旅行调试。半空间走两条路。它包括一个(小但不断增长的)标准库,但也使增量构建模型变得容易:复杂的模型可以分成更小的部分,这些部分可以单独参数化和可视化。考虑到这个理由,让我们进一步解开描述。实体建模 首先,“实体建模”意味着我们关注的是具有明确内部和外部的对象;您应该能够选择空间中的任何点并说出它是在模型内部还是外部。这似乎是显而易见的,但有很多建模并不关心该属性:拉起任何视频游戏模型查看器,您会看到大量无限薄的纹理墙,它们是由单个三角形扇形构建的。由于我的背景是 CAD/CAM 软件(重点是 3D 打印),所以我想要可以物理实现的模型。有很多方法可以进行实体建模。在大多数 CAD 软件中,边界表示几何内核负责将一堆单独的曲面缝合在一起形成实体。这是一个非常困难的问题 - 例如,两个 NURBS 曲面的交集可能没有封闭形式的解决方案!追溯到我的硕士论文,我一直在研究基于隐式曲面的几何内核。它们的优点是可以由一个人或小团队编写并完全理解它们,因此它们非常适合个人规模的制造软件。这在 Halfspace 中得到延续:它是一个围绕 Fidget 几何内核的 GUI。可以使用预定义基元和手写脚本的某种组合来设计模型,并导出为图像或三角形网格。距离场的 IDE 我们可以纯粹在构造实体几何 (CSG) 层使用 Fidget 内核,构建形状(球体、立方体、圆柱体等)并将它们与逻辑运算(并集、交集、差集)组合起来。 Halfspace 决定将底层距离场放在前景中。让我举个例子来说明为什么这很重要。以下是锯齿波的两个距离场,它们在空间中的每个点都具有相同的符号,但具有不同的值:在此可视化中,符号(定义内部与外部)通过颜色(蓝色与橙色)显示,形状的边界以白色显示(对应于值 0)。字段值由较暗的线显示,这些线以规则的间隔排列(如地形图)。尽管到处都有相同的标志,但第一个字段的表现非常糟糕。查看锯齿的垂直边缘:有一个从内部(蓝色)到外部(橙色)的过渡,但没有穿过零。这是一个 C0 或“跳跃”不连续性,这是坏消息! Fidget 使用自动微分来计算法线,因此该区域的法线
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱