try ai
科普
编辑
分享
反馈
  • 符号距离函数

符号距离函数

SciencePedia玻尔百科
核心要点
  • 符号距离函数 (SDF) 通过存储空间中每个点到最近表面的距离来描述几何,并使用正负号区分内外。
  • SDF 的梯度直接提供了表面的单位法向量,其拉普拉斯算子则产生曲率,从而简化了复杂的几何计算。
  • 水平集方法通过求解 SDF 的平流方程来追踪物理仿真中不断演化的形状,能够处理如合并和分裂等复杂的拓扑变化。
  • 在机器学习中,神经网络可以学习表示 SDF,从而实现一种称为隐式神经表示 (INR) 的紧凑、连续的 3D 形状编码。

引言

在计算科学的世界里,表示形状是一项根本性的挑战。虽然像多边形网格这样的传统方法对于静态、简单的物体很有效,但它们难以描述自然界和复杂模拟中发现的流体、动态和错综复杂的几何形状——从破碎的波浪到生长的晶体。这就产生了一个知识鸿沟:我们如何能够以一种既优雅又计算上易于处理的方式来描述和操作复杂、演化的形状?符号距离函数 (SDF) 提供了一个强有力的答案,它将范式从描述形状的表面转向描述整个空间与该表面的关系。本文将作为这一关键概念的指南。首先,在“原理与机制”一章中,我们将探讨 SDF 的数学灵魂,包括程函方程、其与基本几何属性的联系,以及用于创建和维护它的数值方法。之后,“应用与跨学科联系”一章将展示 SDF 在计算机图形学、物理仿真以及机器学习新前沿等不同领域的变革性影响。

原理与机制

想象一下,你正站在一片广阔的平原上,远处有一条蜿蜒的长河。你想为这片平原创建一张地图,但不是一张普通的地图。你不想标记海拔或城市,而是希望这张地图能显示平原上每一个点到最近河岸的确切距离。靠近河流的点的数值会很小,而远离河流的点的数值会很大。你刚刚构思出一种​​距离函数​​。

现在,我们再增加一个转折。这条河将平原分为两个区域。我们把你这边称作“家园”,另一边称作“荒野”。在你的地图上,你决定用正号标记荒野中的所有距离,用负号标记家园区域中的所有距离。河岸本身作为边界,距离为零。你现在创建的就是一个​​符号距离函数​​,或称 ​​SDF​​。这个将距离和内外侧信息编码进一个单一标量场(或“地图”)中的简单而优雅的想法,是现代计算科学中最强大的工具之一。它让我们能够将复杂和运动的形状描述为一个平滑、连续、充满整个空间的场,而不是一堆笨拙的点列表。

形状的指纹:程函方程

让我们回到我们的距离地图。思考一下当你直接走离河流时会发生什么。你每走一米,你到河流的距离就恰好增加一米。距离相对于位置的这种变化率被称为​​梯度​​。对于一个符号距离函数(我们称之为 ϕ\phiϕ),其梯度的模必须等于一。用数学语言,我们写成:

∣∇ϕ∣=1|\nabla \phi| = 1∣∇ϕ∣=1

这个优美且极其重要的方程被称为​​程函方程​​(Eikonal equation,源自希腊词 eikōn,意为“图像”)。它是每个符号距离函数都必须遵守的基本定律。它就像形状本身的一个通用指纹。程函方程,结合函数在形状界面上必须为零的“边界条件”(在河岸上 ϕ=0\phi = 0ϕ=0),完全定义了任何给定形状的距离场。

让我们用一个简单、完美的形状来检验一下:一个半径为 RRR 的圆。平面上任意一点到圆边的最短距离就是它到圆心的距离(我们称之为 rrr)减去半径 RRR。所以,我们的符号距离函数是 ϕ(x,y)=x2+y2−R=r−R\phi(x,y) = \sqrt{x^2 + y^2} - R = r - Rϕ(x,y)=x2+y2​−R=r−R。它的梯度模长是否等于一?ϕ\phiϕ 的梯度是一个径向向外的向量,其模长确实处处都恰好为 1(除了在最中心的那一点,那里的距离函数有一个“扭结”并且不可微)。它完美地成立!。这对于任何恰好能描述这个圆的函数来说并非都成立。例如,函数 ϕ2=x2+y2−R2\phi_2 = x^2 + y^2 - R^2ϕ2​=x2+y2−R2 的零水平集也在这个圆上,但其梯度的模长是 ∣∇ϕ2∣=2r|\nabla \phi_2| = 2r∣∇ϕ2​∣=2r,它随距离变化。这展示了 SDF 的独特完美性。

函数中的“符号”部分并不仅仅是一个约定;它是绝对关键的。它让我们能够区分内部和外部。如果我们使用一个无符号距离函数 ∣ϕ∣|\phi|∣ϕ∣,我们就会丢失这个至关重要的信息。函数将在界面处为零,在其他任何地方都为正。这个看似微小的改变在应用中会产生巨大的后果。例如,在模拟材料中的裂纹时,符号告诉我们哪一边是哪一边,使我们能够模拟裂纹的张开。没有符号,两边就无法区分,“张开”的概念也就变得毫无意义。

读取几何地图

SDF 的真正威力在于,一旦你拥有了它,你就拥有了对形状的完整几何描述,从中可以异常轻松地提取出至关重要的属性。

法向量

任何标量场 ∇ϕ\nabla \phi∇ϕ 的梯度总是指向最陡峭的上升方向。对于 SDF,当我们穿过界面时,函数值从负(内部)增加到正(外部)。因此,界面处的梯度向量 ∇ϕ\nabla \phi∇ϕ 必须直接指向“外部”,垂直于表面。并且由于程函方程 ∣∇ϕ∣=1|\nabla \phi| = 1∣∇ϕ∣=1,梯度向量不仅指向正确的方向——它本身已经是一个长度为一的向量。换句话说,梯度就是​**​单位法向量​**​ n\mathbf{n}n。

n=∇ϕ∣∇ϕ∣=∇ϕ\mathbf{n} = \frac{\nabla \phi}{|\nabla \phi|} = \nabla \phin=∣∇ϕ∣∇ϕ​=∇ϕ

这非常方便。SDF 免费为我们提供了法向量场,这是计算力、反射或在计算机图形学中进行着色的关键信息。对于一个普通的隐式函数,我们将不得不执行额外的步骤,将梯度除以其模长,这在计算上可能成本高昂,并且在梯度变得非常小时数值上不稳定。

曲率

那么形状的曲率呢?曲率描述了当我们沿着表面移动时法向量如何变化。法向量的这种“转动”在数学上由法向量场的​​散度​​来捕捉。对于一条二维曲线,曲率 κ\kappaκ 由 κ=∇⋅n\kappa = \nabla \cdot \mathbf{n}κ=∇⋅n 给出。由于对于 SDF 我们有 n=∇ϕ\mathbf{n} = \nabla \phin=∇ϕ,曲率可以优美地简化为:

κ=∇⋅(∇ϕ)=Δϕ\kappa = \nabla \cdot (\nabla \phi) = \Delta \phiκ=∇⋅(∇ϕ)=Δϕ

这就是符号距离函数的​​拉普拉斯算子​​。这个深刻的结果意味着,我们只需对我们的距离地图求二阶导数,就能找到形状上任意点的曲率!对于我们在二维中的圆,ϕ=r−R\phi = r - Rϕ=r−R 的拉普拉斯算子给出 κ=1/r\kappa = 1/rκ=1/r。在圆本身上,其中 r=Rr=Rr=R,曲率恰好是 1/R1/R1/R,正如它应该的那样。对于三维空间中的球体,类似的计算得出曲率为 2/R2/R2/R。拉普拉斯算子和曲率之间的这种直接联系是 SDF 的一份特殊礼物;对于一个普通的隐式函数,曲率的公式要复杂和繁琐得多。

运动中的界面与完美性的丧失

到目前为止,我们一直想象我们的河岸或圆是静态的。但如果形状随时间变化呢?想象一下浮油在海洋上扩散,或者晶体在溶液中生长。界面在移动,我们可以用一个速度场 u(x,t)\mathbf{u}(\mathbf{x}, t)u(x,t) 来描述这种运动。

为了追踪移动的界面,我们可以简单地用流场“平流”我们的水平集函数。这意味着对于介质的任何给定粒子,ϕ\phiϕ 的值在它移动时保持不变。这个物理原理由​​平流方程​​表达:

∂ϕ∂t+u⋅∇ϕ=0\frac{\partial \phi}{\partial t} + \mathbf{u} \cdot \nabla \phi = 0∂t∂ϕ​+u⋅∇ϕ=0

但这里有一个问题。如果我们从一个在零时刻完美的 SDF 开始,当它被流场带动时,它还会保持是一个完美的 SDF 吗?不幸的是,答案几乎总是否定的。严格的数学分析表明,SDF 的性质 ∣∇ϕ∣=1|\nabla \phi| = 1∣∇ϕ∣=1 只有在运动是刚体运动(只有平移和旋转)时才能保持。如果流场涉及任何拉伸、剪切或压缩——几乎所有真实世界的流场都是如此——距离线的网格就会被扭曲。在流场压缩的地方,水平集被挤压在一起,∣∇ϕ∣|\nabla \phi|∣∇ϕ∣ 变得大于 1;在流场扩张的地方,水平集被拉开,∣∇ϕ∣|\nabla \phi|∣∇ϕ∣ 变得小于 1。

重建秩序:重置化的魔力

我们现在面临一个两难的境地。我们需要 SDF 的性质来进行精确的几何计算,但移动形状的行为本身却破坏了它。解决方案既聪明又有效:我们定期暂停模拟并“修复”距离函数。这个过程被称为​​重置化​​(reinitialization)。

重置化的目标是找到一个新的函数,它是一个真正的 SDF,但其零水平集与我们当前被扭曲的函数完全相同。我们通过求解另一个演化方程来实现这一点,但这次是在一个虚假的“伪时间”(我们可以称之为 τ\tauτ)中进行:

∂ϕ∂τ+sign⁡(ϕ0)(∣∇ϕ∣−1)=0\frac{\partial \phi}{\partial \tau} + \operatorname{sign}(\phi_0) (|\nabla \phi| - 1) = 0∂τ∂ϕ​+sign(ϕ0​)(∣∇ϕ∣−1)=0

让我们来剖析这个神奇的方程。我们正在演化我们被扭曲的函数 ϕ\phiϕ(初始状态为 ϕ0\phi_0ϕ0​),直到它达到一个稳态,此时 ∂ϕ∂τ=0\frac{\partial \phi}{\partial \tau}=0∂τ∂ϕ​=0。

  • 在稳态时,方程变为 sign⁡(ϕ0)(∣∇ϕ∣−1)=0\operatorname{sign}(\phi_0) (|\nabla \phi| - 1) = 0sign(ϕ0​)(∣∇ϕ∣−1)=0。对于不在界面上的任何点,sign⁡(ϕ0)\operatorname{sign}(\phi_0)sign(ϕ0​) 要么是 +1 要么是 -1,这迫使另一项为零:∣∇ϕ∣−1=0|\nabla \phi| - 1 = 0∣∇ϕ∣−1=0。这就是程函方程!这个过程自动地驱动函数趋向于成为一个完美的 SDF。
  • 但是界面本身呢?在界面上,ϕ0=0\phi_0 = 0ϕ0​=0,所以 sign⁡(ϕ0)\operatorname{sign}(\phi_0)sign(ϕ0​) 项为零。整个方程变为 ∂ϕ∂τ=0\frac{\partial \phi}{\partial \tau} = 0∂τ∂ϕ​=0。这意味着界面上的函数值在重置化期间不会改变。零水平集被固定在原地,而场的其余部分则优雅地重新排列成一个完美的距离地图。

这种重置化不仅仅是一种美学上的修饰;它对于数值稳定性和准确性至关重要。没有它,扭曲会累积,导致严重的错误。例如,在模拟两个物体相互靠近的运动中,它们之间一个被扭曲、扁平化的水平集场可能会导致数值算法错误地报告它们已经合并。

构建地图:快速行进法

我们已经探索了 SDF 的奇妙特性,但还有一个问题:我们如何为一个复杂的形状计算出一个 SDF 呢?在一个整个域上求解非线性的程函方程 ∣∇ϕ∣=1|\nabla \phi| = 1∣∇ϕ∣=1 似乎是一项艰巨的任务。

想象一下,火从界面开始向外蔓延。一个点只有在它离火源更近的邻居已经着火之后才能着火。这意味着一个自然的事件顺序,一种我们可以利用的因果关系。我们不必一次性求解整个地图。

这就是​​快速行进法 (Fast Marching Method, FMM)​​ 背后的核心思想,这是一种用于求解程函方程的优雅而高效的算法。该算法在精神上与用于在网络中寻找最短路径的 Dijkstra 算法惊人地相似。我们将我们域的网格点分为三组:

  • ​​已接受(Accepted)​​:其距离值已最终确定的点(“已燃烧”区域)。
  • ​​窄带(Narrow Band)​​:已接受点的邻居,我们为它们提供一个试验距离值(“火线”)。
  • ​​远距离(Far Away)​​:所有其他点(“未燃烧”区域)。

算法在一个简单的循环中进行:

  1. 通过“接受”界面上的所有点(距离为零)并将其邻居放入窄带中来进行初始化。
  2. 在窄带中找到具有最小试验距离的点。
  3. 将此点从窄带移动到已接受集合。它的距离现在是最终的。
  4. 对于其所有尚未被接受的邻居,根据它们已接受的邻居计算一个新的试验距离,并在窄带中更新它们。

通过总是在具有最小距离的点处推进前沿,该算法完美地模拟了波的向外传播。这种“上风”过程确保了当我们在计算一个新点的距离时,我们总是使用来自更靠近源且其距离已被正确确定的点的信息。这种简单的因果排序将一个困难的非线性问题转变为在网格上的高效扫描,使我们能够为几乎任何可以想象的形状构建我们优美而强大的符号距离地图。

应用与跨学科联系

在了解了符号距离函数的原理之后,我们可能会感到某种满足感。我们定义了一个事物,理解了它的性质,并看到了如何构建它。它是一个简洁的数学对象。但它有用吗?它与我们看到、建造和试图理解的世界有联系吗?这才是故事真正变得生动的地方。因为 SDF 不仅仅是一个聪明的定义;它是一把钥匙,打开了横跨科学技术领域惊人图景的大门。它提供了一种统一的语言来谈论形状和空间,将杂乱、离散的几何问题转化为优雅而强大的场与微积分的语言。

现在,让我们开始一次应用之旅,从计算机图形学的生动世界到物理科学的严谨模拟,一直到机器学习的新前沿。

雕刻世界并赋予其生命

SDF 最直观、视觉上最令人惊叹的应用可能是在计算机图形学和视觉领域。你如何描述一个形状?最明显的方法是创建一个由三角形组成的“线框”——一个显式网格。这对于像立方体甚至茶壶这样的简单物体来说效果非常好。但对于云、珊瑚礁或树木错综复杂的分支呢?一个显式网格会变成一个由数百万甚至数十亿个微小面片组成的极其复杂的集合。存储量巨大,而且操作形状是一场噩梦。

这就是 SDF 提供了一个截然不同视角的地方。我们不描述表面本身,而是描述整个空间与表面的关系。对于任何一点,我们只问:“我离表面有多远,我在里面还是外面?” 这个单一的、连续的函数 ϕ(x⃗)\phi(\vec{x})ϕ(x) 现在掌握了全部的几何真理。一个无限复杂的形状可以被编码成一种惊人紧凑和优雅的形式。

但是你如何看到一个只被隐式定义的形状呢?你不能只把一堆三角形列表发送给显卡。你需要一种方法来找到表面。想象一下,你身处一个完全黑暗、复杂的洞穴中,你唯一的工具是一个能告诉你到最近墙壁确切距离的设备。为了找到一堵墙,你可以朝某个方向迈出一步。你的设备告诉你,你离最近的墙有 10 米。你现在可以安全地朝那个方向前进 10 米,因为你保证不会撞到那个半径范围内的任何东西。你迈出这一步,再次检查你的设备——它现在告诉你距离是 2 米。你再迈出 2 米的一步。重复这个过程,你就能以惊人的效率逼近表面。

这正是用于渲染由 SDF 定义的场景的“球体追踪”(sphere tracing)算法。一束光线从虚拟相机射出,它在空间中步进,任何点 x⃗\vec{x}x 的步长恰好是 SDF 给出的值 ∣ϕ(x⃗)∣|\phi(\vec{x})|∣ϕ(x)∣。这个方法依赖于一个关键属性:函数的变化率是受控的。具体来说,对于一个真正的 SDF,你每移动 1 米,其值的变化最多为 1 米(∣ϕ(x⃗)−ϕ(y⃗)∣≤∥x⃗−y⃗∥\lvert \phi(\vec{x}) - \phi(\vec{y}) \rvert \le \lVert \vec{x} - \vec{y} \rVert∣ϕ(x)−ϕ(y​)∣≤∥x−y​∥)。如果一个神经网络学习了一个 SDF 的近似值,这个被称为利普希茨常数(Lipschitz constant)的“信任因子”就变得至关重要。如果网络对距离的估计过于激进(真实的利普希茨常数大于假设值),你的光线可能会直接穿过表面!如果它太保守,你就会迈出不必要的微小步伐,使渲染速度慢如蜗牛。

如果你不是从一个函数开始,而是从原始数据开始,比如医学 CT 扫描,该怎么办?CT 扫描在 3D 网格上给出密度值。你可以处理这些数据来创建一个 SDF 网格,其中每个点存储它到你分类为器官或骨骼表面的距离。为了将其变回可见的表面,我们可以使用著名的“移动立方体”(marching cubes)算法。该算法“行进”通过网格,一次一个小立方体。它查看一个立方体八个角的 SDF 符号。如果所有都是正或所有都是负,那么这个立方体完全在物体外部或内部。但如果有些是正的,有些是负的,那么表面必定穿过这个立方体。根据符号的模式,算法在立方体内插入一小片三角形来代表那一部分表面。将所有立方体的这些小片拼接在一起,就得到了一个完整的三角形网格。

此外,SDF 为我们提供了智能网格划分的工具。通过查看 SDF 的导数,我们可以估计表面的曲率。在曲率高的区域,比如一个尖角,我们希望用更小的三角形构建更精细的网格来捕捉细节。在表面平坦的地方,我们可以用大的三角形。SDF 允许我们从原始数据创建高质量的、曲率自适应的网格,为隐式函数和显式几何的世界之间提供了重要的联系。

模拟物理世界

当我们从静态物体转向动态、演化的系统时,SDF 的威力才真正显现出来。考虑一下雪花的生长、水滴的飞溅,或者金属片中裂纹的扩展。这些都是“自由边界”问题,其中界面的形状不是固定的,而是解的一部分。追踪这样一个复杂、演化边界上每一点的运动是一项艰巨的任务。

由 James Sethian 和 Stanley Osher 开创的水平集方法,使用 SDF 提供了一个绝佳的解决方案。移动的界面被表示为与时间相关的 SDF ϕ(x⃗,t)\phi(\vec{x}, t)ϕ(x,t) 的零水平集。整个复杂的边界运动随后被一个单一、优雅的偏微分方程 (PDE) 捕捉:

∂ϕ∂t+v⃗⋅∇ϕ=0\frac{\partial \phi}{\partial t} + \vec{v} \cdot \nabla \phi = 0∂t∂ϕ​+v⋅∇ϕ=0

这个方程表明,对于一个随边界速度 v⃗\vec{v}v 移动的观察者来说,ϕ\phiϕ 的变化率为零。其美妙之处在于,SDF 本身就为我们提供了部分速度。速度向量总是指向沿表面法线 n^\hat{n}n^ 的方向,而法线方向简单地由 ∇ϕ/∣∇ϕ∣\nabla \phi / |\nabla \phi|∇ϕ/∣∇ϕ∣ 给出。问题的物理学——无论是热力学、流体动力学还是力学——给出了法线方向的速度 FFF。由于对于 SDF 来说 ∣∇ϕ∣=1|\nabla \phi|=1∣∇ϕ∣=1,水平集方程通常简化为哈密顿-雅可比形式 ∂ϕ∂t+F∣∇ϕ∣=0\frac{\partial \phi}{\partial t} + F |\nabla \phi| = 0∂t∂ϕ​+F∣∇ϕ∣=0。

这个在固定网格上求解的单一方程可以轻松处理剧烈的拓扑变化。一个水滴可以分裂成许多小水滴,或者分离的团块可以合并成一个,而无需任何特殊处理。所发生的一切就是标量场 ϕ(x⃗,t)\phi(\vec{x}, t)ϕ(x,t) 平滑地演化。这个框架被用来模拟从各向异性晶体生长 到两种不相溶流体的复杂晃动等各种现象。在计算流体动力学中,这种方法常常与其他方法结合,如流体体积 (VOF) 法。一种混合方法使用 VOF 法来确保质量完全守恒,同时使用平滑的 SDF 来精确计算几何属性,如表面张力,而表面张力严重依赖于曲率。这种协同作用使得模拟达到前所未有的准确性和物理真实感。

SDF 在模拟中的用途甚至更广。想象一下试图在一个复杂域上求解 PDE,比如飞机周围的气流。标准方法需要创建一个与飞机形状贴合的“贴体”网格,这是一个出了名的困难和耗时的过程。“鬼点”或嵌入边界法提供了一种替代方案。我们可以使用一个简单的、结构化的笛卡尔网格,它直接穿过飞机。对于飞机内部的一个网格点,它该做什么?它是一个“鬼点”。使用 SDF,我们知道它到边界的确切距离和法线的方向。这些信息使我们能够数学上在该鬼点处构造一个值,以在真实的、弯曲的边界上强制实施正确的物理边界条件(例如,无滑移)。本质上,SDF 让我们能够“教”一个简单的网格理解嵌入其中的复杂几何。

这种在固定网格上表示几何的思想对于固体力学也具有变革性意义。为了模拟裂纹在材料中扩展,传统方法要求随着裂纹的生长不断切割和重新生成网格。扩展有限元法 (XFEM) 通过使用 SDF 来表示裂纹来避免这种情况。SDF 的符号被用来定义一个“亥维赛函数”,它在裂纹的一侧为 +1,另一侧为 -1。这个函数被用来“丰富”模拟,有效地告诉模型,裂纹两侧的点在物理上不再连接。这使得裂纹可以在网格上传播而无需改变网格的连通性,这是计算断裂力学的一大突破。

最后,SDF 不仅用于分析,还用于设计。在拓扑优化中,我们让计算机为一个机械部件设计最优形状——例如,能够承受给定载荷的最轻的支架。优化器,由一个 SDF 表示,从一个初始块体中切除材料。然而,它可能会创造出理论上很坚固但无法制造的极薄支柱。这里,SDF 再次提供了解决方案。通过将 SDF 随时间向前演化(膨胀),然后再向后演化(腐蚀),我们可以进行形态学滤波。这个过程等效于求解一个哈密顿-雅可比 PDE,可以可靠地移除任何小于指定最小尺寸的特征,确保最终设计既最优又可制造。

新前沿:机器学习与数据驱动科学

SDF 的优雅和强大并没有被机器学习社区所忽视。事实上,SDF 正处于一场革命的核心,这场革命关乎我们如何用神经网络来表示和推理 3D 几何。

最激动人心的发展之一是​​隐式神经表示 (INR)​​ 的思想。与其将形状存储为 SDF 值的网格,不如让一个神经网络成为函数本身?一个小型多层感知机 (MLP) 可以被训练来接收一个坐标 x⃗\vec{x}x 作为输入,并输出符号距离 ϕ(x⃗)\phi(\vec{x})ϕ(x)。一个复杂的 3D 模型,以前可能是一个巨大的网格文件,可以被压缩成一个微型神经网络的权重。这不仅仅是一个存储技巧;它提供了一个形状的解析、可微的表示,可以在任何分辨率下查询。

这种几何“意识”也正在被注入由机器学习驱动的物理模拟中。在训练神经网络学习不规则域上的 PDE 解时,你如何教它关于边界的知识?一种强有力的方法是提供 SDF 值 s(x)s(x)s(x) 作为额外的输入特征。这明确地告诉网络“你离边界这么远”,提供了一个强大的几何先验,显著提高了学习效率和准确性。这降低了网络必须解决的问题的不确定性或熵,使其能够从更稀疏的数据中学习。

此外,SDF 本身可以用来构建损失函数。为了强制一个条件,即解在边界处必须为零,可以创建一个损失项,惩罚在 ϕ=0\phi=0ϕ=0 水平集上的非零预测。这提供了一种“软”的或变分的方式来强制物理约束,引导网络走向物理上合理的解。这种几何先验与数据驱动学习的融合正在推动科学计算的边界。

一种统一形状与空间的语言

从渲染一个视频游戏角色,到模拟一种金属合金的铸造,到设计一个新的飞机机翼,再到将一个 3D 场景编码进一个神经网络的权重中,符号距离函数作为一个反复出现、统一的主题而出现。它证明了找到正确数学表示的力量。通过将困难的、组合的表面问题重构为一个平滑、连续的场问题,SDF 让我们能够将微积分、数值分析和优化的巨大威力应用于形状这个基本概念。这是一个简单的想法,但其后果是深远的,在众多科学和工程领域中编织出一条共通理解的线索。