3D 曲面力场重建与点云显示算法研究
背景
三维曲面力场重建要解决的,是如何根据少量离散传感器的空间位置、表面方向和测量值,估计模型表面上没有传感器位置的力值,并把结果显示成连续、稳定且符合物体形状的分布。
这件事看起来像普通插值,实际包含两个性质不同的问题。第一个问题是力值应该传播到哪里。它由距离定义、曲面连通关系和传感器朝向决定。第二个问题是重建结果应该怎样显示。它由表面采样密度、颜色映射和几何位移决定。早期方案多次调整,根本原因就是把传播算法和显示载体混在一起:传播关系不正确时,仅改变颜色无法消除串色;传播关系正确时,直接在粗三角面上着色又可能产生大片色块。
最终采用的思路是先把三角模型整理成可传播的曲面图,再把每个传感器附着到模型表面,沿曲面执行有限半径的最短路径搜索,用 Wendland C² 核计算距离权重。多个传感器按连续场采样点进行归一化插值,再通过 coverage 控制支撑区域边缘的衰减。显示层不再改变模型本身,而是在灰色模型表面覆盖彩色点云,用颜色和沿法线的隆起共同表达力值。

图 Fig001:力场算法的主要演进。距离定义、边缘衰减和显示载体分别经历调整,最终形成曲面传播与点云显示的组合。
本文以左手手套三维模型作为演示对象,使用确定性的 Wave 合成力值观察动态效果。由于没有与该模型对应的真实加载实验数据,文中的结果只能说明算法行为和显示效果,不能被解释为真实设备精度验证。
从欧氏插值到曲面传播
最直接的重建方法,是计算传感器与模型顶点之间的三维直线距离,然后让距离近的传感器具有更大权重。这种方法实现简单,在平面或结构单一的缓曲面上也可能得到合理结果,但它隐含了一个不适用于复杂模型的假设:空间上接近的位置,也可以沿物体表面直接传播。
手套模型能清楚暴露这个问题。两根手指之间的空气间隙很小,手掌正反面之间也可能只有很薄的模型厚度。欧氏距离会把这些位置视为近邻,使一个传感器的影响直接到达另一根手指或模型背面。折角附近也有同样的问题。两个点的直线距离可能很短,但真实的表面路径需要绕过较长距离,甚至根本不存在连续路径。
早期的视觉修正曾把低值区域改成灰色,重新定义平滑显示与离散点显示的切换,并调整颜色过渡。这些改动提高了画面可读性,却没有改变传播距离,因此不能从根本上修复薄壁、折角和相邻部件之间的串色。
像素化重建是另一条尝试路线。它先把模型投影到高分辨率平面,在规则像素网格上插值和后处理。规则像素能够减轻原始三角面大小不均造成的色块,Gaussian 平滑也能让边缘更柔和,但单一投影难以表达任意方向、多层和自遮挡曲面。模型前后两层还可能落到相同像素位置。高分辨率重建带来的计算量也比较大。因此,这条路线适合作为视觉实验,却不适合作为一般三维模型的传播基础。
曲面传播的核心变化,是把"距离"从三维空间中的直线长度,改成模型表面的路径长度。模型顶点作为图节点,共享三角形边作为图边,边权是相邻顶点之间的几何长度。传感器先找到附近且朝向兼容的表面点,再从该点沿曲面图执行截断 Dijkstra。一个位置只有在曲面上存在合法路径,并且路径总长不超过传播半径时,才会受到该传感器影响。
这并不意味着算法完全不再使用欧氏距离。传感器的导出位置可能略微离开模型表面,因此仍要用直线距离找到附近表面作为附着点。区别在于,这个距离只用于完成传感器到表面的初始附着。附着之后的扩散范围由曲面路径决定,不能继续穿过模型内部走捷径。
曲面如何变成可计算的传播域
三角网格不能直接拿来做曲面搜索。STL 模型通常以彼此独立的三角形保存,同一个几何点可能在相邻三角形中重复出现。如果不先合并这些重复顶点,算法看到的会是大量互不连接的小三角形,最短路径也无法跨越三角形边界。
因此,曲面准备的第一步是顶点焊接。算法按照一个较小的位置容差,将坐标相同或足够接近的顶点合并为共享顶点,同时删除顶点重复或面积接近零的退化三角形。焊接容差需要与模型单位和导出精度匹配。容差过小会留下不应存在的裂缝,容差过大则可能把距离很近但实际分离的两层表面错误连接起来。
焊接之后可以根据三角形共享边建立邻接图。图边的长度取两个顶点之间的几何距离。为了避免传播穿过尖锐折角,还要比较相邻顶点法线。设相邻顶点为 $u$ 和 $v$,只有满足
时,二者之间的边才允许参与传播。本文采用的邻接法线阈值为 $\tau_e=0.25$。这是一种硬门控:达到阈值的边可以通过,低于阈值的边完全禁止通过。它的优点是折角隔离清楚,缺点是高曲率但连续的表面也可能被切断。更平滑的替代方案是根据夹角增加路径代价,但这会引入新的衰减参数,必须通过真实数据才能判断是否更合理。
网格密度同样会影响曲面距离和点云连续性。如果最大三角形边长远大于传播半径,支撑区域内可能只有少量顶点,最短路径会变得粗糙,显示点也会过于稀疏。可以把目标边长定义为
当最大边长明显超过目标边长时,将一个三角形沿三条边的中点拆成四个子三角形。共享边的中点必须复用,避免细分后重新产生裂缝。细分还要设置顶点数上限,否则高面数模型可能快速膨胀。
细分后需要重新计算顶点法线。顶点法线既控制传播能否经过某条边,也决定点云隆起方向,因此不能把它当成单纯的光照数据。通常将相邻三角形的面积加权法线累加到顶点,再进行归一化。无条件执行 Laplacian 平滑并不稳妥,因为平滑会收缩几何并改变传感器到表面的物理距离。视觉上更圆润不代表几何关系更准确。
传感器附着也使用法线约束。设曲面点法线为 $\mathbf{n}_v$,传感器法线为 $\mathbf{n}_i$,只有满足
的顶点才参与附着点选择。本文采用 $\tau_c=0.1$。在所有兼容顶点中选择与传感器中心最近的点作为种子。如果传感器到种子的初始距离已经大于传播半径,该传感器不产生曲面影响。
从种子开始执行 Dijkstra 搜索,路径距离由曲面边长累计:
路径只能经过法线兼容的邻接边,并在距离超过半径 $R$ 时停止。这样得到的 $d_i(v)$ 是离散网格上的测地距离近似。它不完美依赖模型质量,但比直接使用穿过空间的直线距离更符合复杂表面的传播关系。

图 Fig004:传感器附着、曲面路径和紧支撑权重。欧氏距离只用于选择附近表面,实际传播距离由曲面路径决定。
离散测量如何形成连续场
得到曲面距离之后,仍然需要决定距离如何转化为权重。本文采用 Wendland C² 紧支撑核。对曲面距离 $d$ 和传播半径 $R$,令 $r=d/R$,权重定义为
这个核在传感器附近权重最大,随后平滑下降,在达到半径时连续衰减到零。紧支撑意味着每个传感器只有有限影响范围,也使大部分传感器与曲面点之间不需要参与每帧计算。
原始测量值首先要根据统一显示范围归一化。设当前物理量的显示下限和上限为 $x_{min}$、$x_{max}$,第 $i$ 个传感器的归一化值为
显示范围应在连续帧之间保持稳定。若每帧都根据当前最大值重新缩放,同一种颜色在不同时间会代表不同量级,画面虽然始终鲜艳,却无法比较真实幅值变化。
多个传感器共同覆盖一个曲面点时,采用归一化加权平均:
这里的关键不是公式形式,而是传感器的物理含义。传感器被视为同一连续场的离散采样点,不是彼此独立的力源。如果两个相邻传感器都测得 0.6,中间区域应接近 0.6,而不是因为参与插值的传感器更多就自动增大到 1.2。只有在问题被重新定义为多个独立力源叠加,并且有相应物理模型支持时,直接求和才可能合理。
单纯使用归一化平均还有一个容易忽略的问题。当某个区域只有一个传感器参与时,分子和分母具有相同的距离权重,二者相除后,整个支撑范围内都会接近传感器值,直到半径边界才突然降为零。为使稀疏区域自然衰减,需要保留绝对权重信息。本文将 coverage 定义为
最终标量为
coverage 不是统计意义上的置信概率,它只是描述当前曲面点受到多少核覆盖。中心附近权重较大,coverage 接近 1;支撑边缘的权重逐渐减小,最终标量也随之回落。这样既保持多传感器插值的数值尺度,又避免单传感器产生平顶圆斑。
为了不让微小数值和噪声铺满整个模型,显示前还可以设置可见性阈值。本文采用 $s(v)\ge0.03$。阈值以下的点仍然有连续标量,只是不进入最终点云。把数值重建与视觉筛选分开,可以避免显示参数反过来改变算法结果。
传播半径、法线阈值和可见性阈值分别控制不同性质。传播半径决定单个传感器能够覆盖的最大曲面范围;传感器法线阈值决定哪些朝向的表面可以接受该传感器;邻接法线阈值决定传播能否跨过折角;可见性阈值只决定弱场是否显示。把这些参数合并成一个"平滑程度"会失去物理和几何上的可解释性。
为什么最终选择点云显示
曲面重建确定了每个表面位置的标量,但还没有解决显示质量。直接把标量写入原始三角模型的顶点颜色,会受到面片大小和形状影响。一个很长的三角形可能只有三个顶点,局部高值经过三角形内部插值后会扩展成大片颜色。即使重建标量本身合理,最终画面仍会显得粗糙。
点云将显示采样从原始面片颜色中分离出来。灰色模型保持静止,用于表达物体轮廓、姿态和遮挡关系;彩色点云覆盖在表面上,用于表达重建场。无力区域不需要铺满深蓝点,而是直接露出灰色模型。这样可以清楚区分"没有可见力场"和"力值处于色带低端"。
点的颜色由标量 $s(v)$ 映射得到,从深蓝、蓝、青、绿、黄、橙过渡到红色。所有帧必须使用相同色域和数值范围,否则颜色无法跨时间比较。颜色表达的是压力或法向力的大小,不表达完整三维力方向,因此这里的"力场"本质上是曲面标量场,不是矢量场。
除了颜色,点还可以沿表面法线产生位移:
其中 $H$ 是最大显示位移。为避免模型越大隆起越夸张,可以把毫米位移上限定义为
再由隆起百分比调整最终幅度。颜色和隆起同时编码同一个标量,能够突出高值区域,但隆起只是一种视觉强化,不能被解释为真实材料变形。
点大小和点密度同样只属于显示参数。点过小会出现断裂,点过大会互相覆盖并遮挡模型。显示点应来自模型表面采样,而不是按传感器平均分配。传感器只负责影响标量场,并不拥有某一批固定点。若模型点数过多,需要降低显示密度时,也不宜简单按照顶点索引等步长抽样,因为模型顶点顺序可能形成条纹。基于面积、空间网格或蓝噪声的均匀表面采样更可靠。
用半圆柱压头看面片渲染到底差在哪
前面说了点云显示的设计动机,但"设计动机"和"实际看到效果差异"是两回事。这里用半圆柱压头 φ12 模型做一组控制变量对比:同一个模型、同一组 12 个采样点、同一个 Wendland C² 核和 R=8 mm 支撑半径,只改变距离定义和显示载体。
旧方案的做法是把重建标量直接写入三角网格顶点色,由 GPU 在三角形内部做重心插值。这看起来是最直接的渲染路径,但实际效果很差,而且差的原因不是单一的。在半圆柱压头上能同时观察到以下几种伪影:
色块与碎裂。 旧方案依赖原始三角网格的顶点密度。当网格较粗时,一个三角形可能跨越了很大的曲面范围,三个顶点色的重心插值就在整个三角形内产生一大片均匀色块。相邻三角形的色块边界清晰可见,整体画面像是被碑片贴过的。这不是核函数的问题,也不是距离定义的问题——即使曲面距离完全正确,只要显示载体是粗三角面,色块就必然存在。
串色与越界。 旧方案使用三维欧氏距离。半圆柱压头的壁厚只有几毫米,正面和背面的空间距离很近但曲面路径很远。欧氏距离会把正面传感器的影响直接穿过实体投到背面,产生不应该存在的彩色区域。在更复杂的模型上,这表现为相邻手指串色、正反面互相染色。
硬截断与毛刺。 旧方案的着色逻辑在低值区使用硬阈值:压力低于 0.25 的顶点直接显示灰色,高于阈值的突然进入 Jet 色带。这导致画面上存在清晰的颜色跳变边界,而不是从灰到深蓝的连续过渡。结合粗网格的三角形边界,这些跳变在视觉上表现为"毛刺"和"碎裂感"。
覆盖边缘截断。 Wendland 核在支撑半径边界处平滑归零,但如果显示层不用 coverage 做有效标量衰减,而是直接用 RGB 灰色混合,那么覆盖边缘的效果就是"颜色变淡"而不是"色阶回落"。整个覆盖区域只改变颜色浓淡,不经过完整色阶,看起来像一块半透明的彩色补丁贴在灰色模型上。

图 Fig009:半圆柱压头 φ12 上的渲染对比。左上和右上是旧方案(粗面片 + 欧氏距离 + 硬阈值),左下是曲面距离重建后面片着色,右下是点云显示。即使曲面距离正确,粗面片着色仍然有色块;点云则彻底解耦了显示采样和原始网格。
把圆柱带展开成平面后,伪影的差异更直观。旧方案的粗网格在展开图上就是大块的零阶保持色块,相邻色块之间没有过渡;硬阈值截断则把低值区域全部压成同一颜色,丧失了弱场的层次信息。新方案的连续场在展开图上是平滑的,coverage 从传感器中心向边缘自然回落,点云显示则用离散但均匀的采样点表达了同样的连续场。

图 Fig010:展开视图对比。上排是旧面片方案的三类典型伪影:粗网格色块、硬阈值截断、零阶保持碑片化。下排是新方案:连续场、coverage 置信度、点云显示。
归纳一下,旧方案的显示问题不是某一个参数调得不好,而是架构性的:显示采样绑定在原始网格上,网格质量直接决定画面质量;距离定义不尊重曲面拓扑,传播路径物理上不正确;颜色策略用硬阈值和 RGB 混合,而不是让 coverage 进入标量后查统一色表。这三个问题叠加在一起,就是用户看到的"伪影、混乱、碎裂和毛刺"。点云方案不是"调了参数",而是把这三个架构问题分别解决了:显示采样与网格解耦,距离改为曲面路径,颜色策略改为 coverage 进入有效标量后查统一色表。
左手手套模型演示
演示模型包含 50,000 个三角形,顶点焊接后得到 24,912 个曲面点,实际尺寸约为 372.10 × 199.33 × 750.00 mm。项目声明 200 个测量通道,其中 76 个通道具有三维 Cell 映射。Cell ID 位于 17–96 之间,并不是连续排列。
模型使用 55 mm 曲面传播半径、0.1 的传感器法线阈值、0.25 的邻接法线阈值和 0.03 的可见性阈值。当前模型的网格密度已经满足传播半径对应的目标边长,因此不需要继续细分。76 个 Cell 都能找到法线兼容的附着点,并建立有效曲面影响区域。

图 Fig006:手套真实网格和 76 个 Cell 的表面分布。图中颜色只用于区分投影深度,不表示力值。
为了观察动态效果,本文使用 200 通道确定性 Wave 输入。第 $i$ 个通道采用不同频率和相位:
归一化输入为
这种输入不会让所有传感器同步明暗,而是形成随时间变化的热点。只有具有三维 Cell 映射的 76 个通道参与手套表面重建,其余通道不影响模型。
在三个演示时刻,可见点数量分别为 3,284、3,320 和 3,338,最大重建标量约为 0.846、0.847 和 0.850。可见点总量相对稳定,变化主要体现为颜色和隆起分布移动。这符合点云设计目标:表面采样保持稳定,实时力值通过点属性变化表达,而不是通过反复增删显示点制造动态效果。

图 Fig007:左手手套在三个 Wave 时刻的点云力场。输入是确定性合成数据,不是真实手套测量结果。灰色线框表示静态模型,彩色点表示可见重建场。
为了验证曲面距离是否真的改变了传播行为,本文选择一个 Cell,在相同 55 mm 半径和相同 Wendland 核下,分别进行欧氏距离传播与曲面 Dijkstra 传播。当覆盖判定取权重大于 0.01 时,欧氏方案覆盖 236 个顶点,曲面方案覆盖 38 个顶点。欧氏方案相对曲面方案产生 233 个额外覆盖点,最大标量正差约为 0.764。

图 Fig008:相同传感器、半径和核函数下的距离对照。星形表示传感器位置,第三幅图显示欧氏距离相对曲面距离产生的额外覆盖。
这个结果不能直接证明曲面方案具有真实力学精度,但它清楚说明两种距离定义在复杂手套表面上不是可互换的实现。欧氏距离把空间接近直接当成可传播,曲面距离还要求存在法线兼容的表面路径。额外覆盖显著减少,正是曲面拓扑约束带来的结果。
算法边界与后续验证
当前方法本质上是曲面插值,不是材料力学模型。它没有使用材料刚度、厚度、边界条件或内部应力关系,因此不能预测真实结构变形,也不能从少量采样恢复所有未观测峰值。如果真实高峰恰好位于多个传感器之间,而附近传感器都没有测到高值,归一化插值不会凭空生成该峰。改善这种情况需要增加传感器密度、引入有依据的物理先验,或者使用真实标定数据建立更强的重建模型。
曲面最短路径也是连续测地距离的离散近似。三角形过长、方向分布不均、局部裂缝或错误焊接都会影响路径。适度细分能够改善路径近似,但会增加计算和存储量。硬法线门控可以阻止跨折角传播,也可能在手指根部等高曲率连续区域形成不自然断裂。是否需要改为随夹角连续增加的软代价,应由真实加载实验决定。
视觉效果同样不能替代数值验证。平滑、连续和鲜明的点云只能证明显示清楚,不能证明力值准确。真正的验证需要在掌心、指尖、指根和相邻手指等代表区域施加已知位置、已知面积和已知大小的载荷,同步记录全部传感器值,再比较热点位置误差、峰值误差、额外覆盖面积和时间稳定性。单点加载用于检查传播半径和边缘衰减,双点加载用于检查插值与重叠区域,连续滑动加载用于检查动态稳定性。
下一步研究的重点不应继续停留在颜色和点大小调整,而应建立与手套模型对应的真实加载数据。在同一组数据上比较欧氏距离、曲面硬门控和曲面软折角代价,并据此确定传播半径、法线阈值和可见性阈值。只有当重建结果能够与参考位置和参考力进行量化比较时,才能从"显示效果合理"进一步走向"算法结果可信"。
结语
三维曲面力场重建的关键,不是选择更复杂的颜色,而是正确区分空间距离与曲面距离,明确传感器是连续场采样点而不是力源,并把数值重建与视觉显示分开设计。
曲面 Dijkstra 使影响沿模型拓扑传播,Wendland C² 提供有限且光滑的距离权重,归一化平均保持采样值尺度,coverage 使稀疏区域自然衰减,可见性阈值过滤弱场噪声。点云再通过颜色和法线隆起表达重建结果,同时由灰色模型保留物体形状。
左手手套演示表明,这套方法能够在复杂曲面上形成连续动态场,并明显减少欧氏距离产生的额外覆盖。但 Wave 合成结果只能说明算法行为和显示效果。算法是否准确描述真实受力,最终仍要由带参考真值的实物加载实验回答。