25.3. 科学可视化核心技术方法#

通过对科学可视化的整体概念以及科学可视化技术类型划分进行系统的介绍,我们已经初步建立了对可视化对象和需求的认识。 本章节将深入探讨科学可视化的核心环节——支撑各类可视化实现的关键算法,具体围绕体绘制、流场可视化这两种核心技术手段展开讨论,阐述它们的工作原理及实际应用场景。 通过本节的学习,读者将更深入理解如何利用光线投射、粒子追踪、点噪声法等方法,为不同类型的数据构建出丰富且准确的视觉表现形式。

25.3.1. 体渲染#

体渲染是科学可视化中用于探索三维体数据内部结构的核心技术。 与传统的表面渲染不同,体渲染无需提取几何网格,而是通过直接操作体素(三维像素,如图 25.14 中的三维立方体或体单元)数据,模拟光线在参与性介质(如云雾、生物组织)中的传播过程,揭示数据的全局特征与局部细节。 其核心价值在于平衡透明度与对比度,使观察者既能捕捉整体分布,又能聚焦关键区域,因此适用于无明确边界或内部结构复杂的数据。

../../_images/visualization-scientific-voxels.png

图 25.14 三维体素数据#

在体渲染过程中,传递函数(Transfer Function)和光线投影(Ray Casting)是密不可分的两个关键环节。 传递函数用于将体素所携带的标量值映射成颜色和不透明度,从而在视觉上表现出不同的密度或材质特征。 光线投射算法则通过模拟光线在体数据内的吸收与(部分)散射过程,累积形成最终可视化图像。 值得注意的是,体渲染中一般不涉及反射模型;大多数直接体绘制只考虑介质对光的吸收与散射,而反射通常出现在具有明确表面或镜面特性的物体中,故在经典的体渲染里并不常用。

体渲染最初用于在计算机图形中生成非刚性物体的可视化效果,如云、烟、果冻等。这些物体通常不具有明确的表面边界,并且其物质的密度相对较低。 体渲染通过将气体或其他非刚性物质抽象为粒子群来更好地处理这些物体的半透明和不规则特性,使其在视觉上更为真实。 在这种表示中,物体被视为由大量小粒子组成的集合体,而非一个具有固定形状和边界的实体,这允许光线以更自然的方式穿过物体,从而更好地模拟光子与粒子间的相互作用。 当光线穿过这些由粒子群构成的物体时,它们不断与粒子发生相互作用,例如散射和吸收。这种相互作用导致光线路径的改变,从而产生了体渲染中独特的视觉效果。

我们首先对比以下体渲染和之前提到的表面渲染,然后介绍体渲染的物理公式,最后介绍体渲染的经典实现算法。

25.3.1.1. 体渲染和表面渲染的对比#

表 25.2 表面渲染与体渲染的比较#

特性

表面渲染 (Surface Rendering)

体渲染 (Volume Rendering)

数据转换

数据被转换为表面基元(如三角形),然后进行绘制。

不需要提取表面基元,数据由一个或多个(假定连续的)3D 场构成。

可视化表示

所有可见内容都是嵌入在 3D 空间中的 2D 表面。

直接渲染整个体积,类似于一团彩色的果冻。

数据隐藏风险

转换为几何基元可能会丢失或隐藏某些数据。

数据较少可能被隐藏,提供更全面的视觉信息。

适用场景

适用于不透明物体。

适用于需要详细展示内部结构的应用场景。

表面渲染和体渲染的对比如图 25.15 所示,可见体渲染可以在给出相应的形状的前提下并对于内部给出一些信息。

../../_images/visualization-scientific-rendering_comparison.png

图 25.15 表面渲染和体渲染的对比图#

25.3.1.2. 体渲染的原理#

体渲染把光子与粒子发生作用的过程,进一步细化为三种类型:

  • 吸收 (absorption):光子被粒子吸收,会导致入射光的辐射强度减弱。

  • 放射 (emission):粒子本身可能发光,这会进一步增大辐射强度。

  • 散射 (scattering):光子和其他粒子相碰撞后,导致方向发生偏移,如果偏移朝向光束方向则会增加光路上的辐射强度,反之则会减弱入射光强度。

我们通过图 25.16 来说明这些系数导致的光学方程。

../../_images/visualization-scientific-beam.png

图 25.16 体渲染的光与介质作用的示意图#

这有一个介质,光线从介质的一个面到另一个面。其中假设介质的厚度为 \(\Delta s\),介质中的杂质粒子的横截面积为 \(A=\pi r^2\),这个介质的横截面积为 \(E\),粒子密度为 \(\rho\),则在这个空间内的粒子数目为 \(\rho E \Delta s\),总的遮挡的面积为 \(\rho E \Delta s A\)。则遮挡的比率为 \(\rho E \Delta s A / E = \rho A \Delta s\),于是可以有以下的式子:

(25.10)#\[ I_o - I_i = \Delta I = -\rho(s) A I(s) \Delta s \]

为了普遍性,假设 \(\rho(s)\) 和光强 \(I(s)\) 都是沿着光路的函数。换句话说,如果我们在圆柱体的一端发射无数光线(假设都朝相同的方向),在另一端接收,会发现有些光线安然通过,有些则被粒子遮挡(吸收)。但可以确定的是,这些接受到的光线总强度,相比入射光线总强度而言,会有一定比例的衰减,即出射光的强度均值是入射光的多少倍。具体可以由积分得到,数学上可以表示为:

(25.11)#\[ I_o = I_i \exp \left( -\int_i^o \tau_a(s) I(s) \, ds \right) \]

其中 \(\tau_a = \rho A\) 是吸收系数。对于其他的放射和散射项,也可以定义类似的系数,有放射系数 \(\tau_e = \tau_a\),但是取决于发出的光的光强 \(I_e\)。散射系数 \(\tau_s\),包括外散射(弹射光子偏移光路)系数和内散射(弹射光子偏向光路)系数。于是有:

(25.12)#\[ \frac{dI}{ds} = -(\tau_a + \tau_s) I(s) + \tau_a(s) I_e(s) + \tau_s(s) I_s(s) \]

其中 \(I_s\) 为内散射的光强。对该方程进行积分求解便可以得到光强,然后通过光强和颜色的对应关系,可以得到某视角观测得到的颜色。一些体渲染得到的结果图如下。

../../_images/visualization-scientific-beam.png

图 25.17 体渲染结果图#

25.3.1.3. 体渲染经典实现算法#

1. 光线投影

下面我们将介绍体渲染的一种经典实现算法:光线投影。 光线投影通过追踪从视点出发穿过体数据的虚拟光线来生成图像。每条光线与数据体内的元素相交,并计算这些相交点的颜色和强度,最终生成图像。

光线投影的步骤可以总结如下:

  1. 发射光线:从观察点(通常是相机或者用户的视点)发射光线。在基本的光线投影中,每个光线对应屏幕上的一个像素。

  2. 找交点:沿光线方向步进采样体素数据(如均匀步长或自适应步长),通过三线性插值计算非整数坐标处的标量值。

  3. 法线计算:渲染算法通常需要知道在每个采样点的表面法线方向。由于体积数据通常不包含法线信息,因此需要通过梯度估计(如中心差分法)来计算。

  4. 分类:通过传递函数将标量值及其衍生属性(如梯度模长、曲率)映射为颜色(RGB)与不透明度(Alpha),定义不同组织的视觉表现。

  5. 着色:按照光照模型的计算,比如 Phong 光照模型,来确定物体在当前位置和历史光照条件下的颜色。

  6. 合成:沿着光线路径采样的多个数据值结合起来,以生成最终的像素值。 上述步骤的操作如图 25.18 所示。

步骤1:发射光线 步骤1:发射光线
步骤2:找交点 步骤2:找交点
步骤3:法线计算 步骤3:法线计算
步骤4:分类 步骤4:分类
步骤5:着色 步骤5:着色
步骤6:合成 步骤6:合成

图 25.18 光线投影示意图#

2. 纹理切片

纹理切片是一种利用纹理映射进行体积渲染的方法,主要利用图形硬件的纹理功能(尤其是3D纹理或2D纹理的堆叠)来完成体数据的采样与合成。 其核心思想是将三维体数据打包进显卡的纹理内存,并通过一系列平面切片(Slicing)与硬件光栅化功能来模拟光线与体素的交互过程,从而高效地生成体渲染图像。 在传统光线投射方法尚未有足够 GPU 支持的时代,纹理映射的体渲染一度成为实时或准实时体扫描可视化的主流方案。即使在现代硬件条件下,这种方法依旧在某些场景下具备速度和实现上的优势。

切片指在三维数据中取若干平面,这些平面通常与视线正交或近似正交,以模拟光线逐层穿过体数据的过程。典型做法分为两类:

  • 视平面切片:切片平面始终与当前视线垂直,即当相机(视点)旋转或移动时,每个切片平面也动态调整方向,从而最大程度上模拟光线穿透体数据的真实顺序。该方法能在视点变化时自动保证正确的采样顺序,但是需要实时更新切片方向,会有一定的重绘代价。

  • 固定坐标切片:切片平面固定于某个坐标轴(如 x、y 或 z),实现简单且非常易于与传统2D纹理堆叠结合。该方法实现成本低,尤其在正交视图或小范围交互中容易控制,但是当视点与切片轴差异过大时,可能导致采样不准确,需要更多切片或插值技巧来减小误差。

3. 剖面法

剖面法是对三维体数据进行局部截取并在一个(或多个)平面上显示数据切面的可视化技术。 它将体积数据表示为一系列具有位置、颜色和不透明度的点,然后在视平面上进行重构和混合。为了加速体积渲染,常用的技术包括多级渐进纹理(MIP Mapping),根据视图距离选择不同分辨率的纹理来优化渲染;以及使用空间数据结构(如八叉树或 K-D 树)组织数据,快速剔除不可见区域。 这些方法和技术在提高渲染速度和处理大型体积数据集方面会有显著效果。 与“体绘制”直接对整个数据体进行光线投射(或由纹理切片逐层合成)不同,剖面法更关注在任意或特定方向上的局部截面,以一种“剖开体内、只看截面”的方式来观察数据的内部分布,从而让使用者可以以一种更直观、更“物理直觉式”的方式来查看“切面”上的数据分布情况。

剖面法的实现流程有以下几步:

  • 确定切片平面:首先需定义一个切片平面(或多个平面),可以是与坐标轴平行的固定方向,也可以是与视线正交、或由用户交互选择任意三点决定的倾斜面。

  • 数据采样:确定切片平面后,需要对平面与体素网格(Voxel Grid)的交集区域进行采样。通常做法是在平面上划分一个规则网格,对照三维数据坐标,获取平面每个网格点(或像素)对应的体素值。 若体素不在网格采样点的正好位置,往往需要做插值(如三线性插值)来获得更平滑、连续的结果。

  • 着色映射:将采样得到的标量值(如密度、灰度、温度等)映射到颜色或灰度图,即形成一个二维纹理显示。

  • 可选的交互叠加:略微“挖空”或“裁剪”数据体,以同时显示剖面与剖面后方体数据的半透明渲染,让用户在一个视图中既能看到局部截面的清晰细节,也能保留对整体位置的定位感。

4. 神经辐射场(Neural Radiance Fields,NeRF)

神经辐射场是一种基于深度学习的体渲染方法,尽管其核心思想与传统体渲染(如光线投射)有显著差异,但它确实已成为现代体渲染领域的经典算法之一。 NeRF 通过学习隐式神经表示,能够从多视角图像中重建高质量的三维场景,并在新视角合成任务中表现出色。 NeRF 的核心是通过神经网络隐式地建模三维场景的辐射场(Radiance Field)。具体来说,它将场景表示为一个连续的 5D 函数:

(25.13)#\[ F_\theta (x,y,x,\theta, \phi) \rightarrow (RGB, \sigma) \]
  • 输入:三维空间坐标 \((x,y,z)\) 和视角方向 \((\theta, \phi)\)

  • 输出:体密度 \(\sigma\)(控制光线衰减)和颜色 \(RGB\)(依赖视角方向)。

与传统体渲染不同,NeRF不需要显式存储体素或网格,而是通过神经网络参数化整个场景。

NeRF的渲染过程基于经典的体渲染方程,但通过神经网络实现:

  1. 光线采样:

    • 生成光线:从相机出发,为每个像素生成一条光线 \(\mathbf{r}(t)=\mathbf{o}+t \mathbf{d}\)

    • 分层采样:沿光线在近远平面之间采样 \(N\) 个点 \({t_i}\)(图 光线采样)。

  2. 颜色与密度计算: 对每个采样点,通过神经网络 \(F_\theta\)预测:

    • 密度 \(\sigma_i\):与视角无关,表示该点对光线的阻挡程度。

    • 颜色 \(\mathbf{c}_i\):与视角方向 \(\mathbf{d}\) 相关,模拟材质的光泽特性。

  3. 体渲染积分: 沿光线积分颜色和透明度,计算像素最终颜色:

    \[ C(\mathbf(r)) = \sum_{i=1}^{N} T_i(1- exp(- \sigma_i \delta_i )) \mathbf{c_i} \]
    其中:

    • \(T_i = exp(- \sum_{j=1}^{i-1} \sigma_j \delta_j)\) 表示累积透明度;

    • \(\delta_i = t_{i+1} -t_i\) 为步长。

神经辐射场能够生成高质量的新视角合成,同时无需显式存储三维结构,能捕捉复杂材质(如透明、反射)和几何。 但是训练速度慢,难以处理动态物体或运动模糊,还依赖大量视角一致的输入图像。

25.3.2. 流场可视化#

25.3.2.1. 流场可视化经典算法#

流场可视化用于研究和理解复杂的三维涡流动和湍流的物理过程。这些流动模式可以以多种方式显示,它们可以是染料或烟雾注入流场后拍摄的照片。 流动可能是稳定的或非稳定的。它们可以是使用一些条件平均技术(如热线或数字粒子图像测速法)测量的矢量场。无论使用何种技术生成流动模式,最终都会得到流动模式的单张或多张图像,通过解释这些图像,可以理解流场的物理特性。 对于非稳定流动会引入一系列的辅助线形来展示,如路径线、流线和线迹,来明确描述流场。

在这一节,我们会介绍多种流场可视化的经典算法(图 25.19),以帮助读者更好地掌握这些技术。

../../_images/visualization-scientific-traditional_method.png

图 25.19 不同可视化技术在相同2D流场中的比较: (a) 箭头图, (b) 流线段, (c) 线积分卷积 (LIC), (d) 基于拓扑的方法。#

1. 流线(streamlines)

流线是相对静止(稳态)或瞬时切片情况下,通过一个种子点在空间中连续积分速度向量得到的空间曲线。换言之,流线展示了“如果在特定时刻将粒子置于某点,它的瞬时流动方向轨迹”。

设流场在时刻 \(t_0\) 的速度场为 \(\mathbf{v}(\mathbf{x}, t_0)\)。 引入一个积分参数 \(s\),流线 \(\mathbf{X}(s)\) 可以定义为:

(25.14)#\[\begin{split} \frac{d\mathbf{X}(s)}{ds} &= \mathbf{v}(\mathbf{X}(s), t_0), \\ \mathbf{X}(0) &= \mathbf{X}_0. \end{split}\]

其中:

  • \( \mathbf{x}_0\) 是流线上一个起始点;

  • \(s\) 可以理解为沿曲线的“积分步”或“路径长度”参量;

  • \(\mathbf{v}(\mathbf{X}(s), t_0)\) 表示在时刻 \(t_0\) 位置 \(\mathbf{X}(s)\) 的速度向量。

流线的计算流程:

  1. 选取种子点:可手动或自动选择若干点作为粒子的初始位置;

  2. 数值积分:在向量场中,以初值 \(\mathbf{x_0}\) 为起点,通过积分方法(如欧拉法、RK2、RK4、RK45等)不断更新粒子位置;

  3. 停止条件:达到网格边界、速度阈值过小或最大积分步数后终止。

  4. 将积分得到的点序列连成曲线,并对曲线进行着色(如速度大小)或其它视觉编码。

因为流线只有在很短的时间内才可以认为是恒定的,于是实验上观测流线的方法是,观察摄入染料的短时间内(曝光时间量级)线形。一些流线展示的实验结果如下图。

../../_images/visualization-scientific-streamline.png

图 25.20 一些流线实验例子。#

2. 路径线(pathlines)

与流线不同,路径线在非稳态流场(随时间变化的场)中表示从开始点到结束点的实际运动轨迹。它反映了粒子在真实时间维度下的移动过程。 若流场随时间变化显著,路径线与流线不再等价。

对于一个在时刻 \(t_0\) 处于位置 \(x_0\) 的粒子,将其随时间 \(t\) 变化的轨迹记为 \(\mathbf{X}(t)\),则满足:

(25.15)#\[\begin{split} \frac{d\mathbf{X}(t)}{dt} &= \mathbf{v}(\mathbf{X}(t),t),\\ \mathbf{X}(t_0) &= \mathbf{x_0}. \end{split}\]

其中:

  • \(\mathbf{v}(\mathbf{x},t)\) 是非稳态(或稳态)流场随时间变化的速度函数;

  • \(\mathbf{X}(t)\) 称为路径线或粒子轨迹。

路径线计算流程:

  1. 时序数据获取:流场在多个时间步(如t_0, t_1, t_2, …)上都有速度向量信息;

  2. 积分方法:在每个时间步以粒子当前位置为初值,积分到下一时间步时的粒子位置;

  3. 连接轨迹:将所有时间步粒子的空间位置连成曲线。

路径线可以通过跟踪射入的粒子的长程轨迹来实验得到。 如下面的实验图。

../../_images/visualization-scientific-pathline.png

图 25.21 一些路径线实验例子。#

3. 条纹线(streaklines)

通过流场中某一固定点的流体粒子在注入时候连线形成的轨迹。它表示所有经过该固定点的流体粒子在任何时刻的位置。条纹线在实验流体动力学中常用,比如通过注入染料或烟雾来观察流动。

设:

  • \(\mathbf{v}(\mathbf{x},t) \)为流场的速度场(向量场);

  • 在坐标 \(\mathbf{x}_0\) 处持续释放粒子;

  • \(\tau\) 表示粒子的释放时刻(可从 0 到当前时刻 \(t\) 范围内)。

对于在时间 \(\tau\) 被释放的粒子,我们用 \(\mathbf{X}(t;\tau)\) 表示它在时间 \(t\) 时所处的位置,满足以下常微分方程:

(25.16)#\[\begin{split} \frac{d\mathbf{X}(t;\tau)}{dt} = \mathbf{v}(\mathbf{X}(t;\tau),t),\\ \end{split}\]

并且它的初值条件(初始位置)为:

\[ \mathbf{X}(\tau;\tau) = \mathbf{x_0}. \]

即该粒子在被释放的瞬间 \((t=\tau)\) 就在 \(\mathbf{x_0}\) 位置。

实验效果请参考流场可视化课件中的动图。

总结来说,三者均是理解流体运动特征、构建流体可视化的重要工具。 在具体应用时,应根据是否稳态、对粒子演化的关注程度以及实验/模拟中注入位置等因素,选用或结合使用这几种曲线形式来进行分析与展示。

../../_images/visualization-scientific-three_lines.png

图 25.22 流场可视化中的三种线形,动图请参考流场可视化课件。#

4. 基于点的可视化(Point-Based Visualization)

基于点的可视化方法是基于图形的直接流动可视化的经典例子。 在流场中离散采样点,通过矢量箭头或颜色编码表示速度信息。 流动也可以通过有向线段来可视化,其长度代表速度的大小。

基于点方法的常见核心原理包括:

  • 采样原则:在三维或二维域中,根据某种规则(随机、均匀网格、Poisson Disk等)来分布采样点;

  • 属性映射:每个点对应数据的一个采样位置,并映射其颜色、大小或透明度,以展示标量、向量或张量信息。

基于点的可视化流程如下:

  1. 将矢量场投影到图像平面

  2. 定义网格

  3. 显示流动的表示

  4. 解决几何不连续性

  5. 重建每个箭头表示

  6. 其他的增强功能

此类方法能够直观展示局部速度,且实现简单。但是在高密度区域易重叠(视觉混乱),无法表达全局流动模式。

../../_images/visualization-scientific-point_based.png

图 25.23 基于点的可视化,源自From Vector Glyphs for Surfaces: A Fast and Simple Glyph Placement Algorithm for Adaptive Resolution Meshes。#

5. 粒子追踪(Particle Tracing)

粒子追踪,是在模拟或可视化向量场时,对一批“初始粒子”随着向量流动进行数值积分,得到它们的运行轨迹和最终位置,从而揭示流体或场中粒子的运动行为。 在稳定和时变的流场中,生成的轨迹分别被称为流线和路径线。这些轨迹在视觉上反映了流场的局部或全局变化,并帮助用户提取流场中固有隐藏的重要特征。

实现要点:

  • 初始分布:可根据需要在流场的某区域释放一批粒子(如均匀分布、随机分布),或在感兴趣位置点放入粒子;

  • 时间步迭代:用小步长 \(\Delta t\) 或自适应步长积分,更新每个粒子的坐标;

  • 可视化形式:

    • 路径线:将同一个粒子在不同时间点的位置连成曲线;

    • 动画粒子:在屏幕中动态地显示粒子随风/水流移动(常见于流体模拟演示);

    • 标量映射:对粒子的颜色或大小进行映射,如速度大小、旋度等

粒子追踪与流线的区别在于:流线只考虑某一固定时刻的速度场积分,而粒子追踪可处理非稳态流场、计算粒子的真实时间演化; 当流场是稳态时,粒子追踪的轨迹与流线重合。

../../_images/visualization-scientific-particle_tracing.png

图 25.24 基于粒子追踪的可视化。#

6. 点噪声法(Spot Noise)

点噪声法属于基于纹理的向量场可视化技术,通过在图像平面上铺设许多“微型噪声点(spots或dots)”,并且让这些小斑点的形状、方向、拉伸程度等与局部向量信息相对应,从而在整体上形成密集且连续的流动纹理效果。

该算法的核心原理:

  1. 基础噪声纹理:先生成一张均匀随机噪声图(或散点图);

  2. 局部变形:在向量场每个像素/采样点周围放置一个“点扩散核”,根据该位置上的速度方向 \(\mathbf{v}(x,y)\) 调整点扩散核形变(例如:让其朝流向方向拉伸);

  3. 叠加与渲染:将所有点扩散核投影或累加到最终图像中,形成从微观层面上就已指向流向的纹理图。

可以使用一个简单的线性组合来生成最终的可视化图像,例如:

(25.17)#\[ I(x, y) = I_0 + \alpha \cdot N(x, y) \]

其中,\(I(x, y)\) 是最终图像的强度,\(I_0\) 是背景强度,\(\alpha\) 是一个调节因子,用来控制噪声对最终图像的影响程度。

../../_images/visualization-scientific-spot_noise.png

图 25.25 基于点噪声法可视化标量场,(a)值,(b)梯度,(c)流,(d)速度势。#

点噪声法的算法步骤:

  • 生成噪声纹理:随机分布白噪声点。

  • 沿流场平流:根据速度场移动噪声点,累积运动轨迹。

  • 叠加显示:噪声点密度反映流动强度,方向由运动轨迹指示。

点噪声法算法的优点在于它能生成直观流场可视化图像,适合展示复杂的流体动力学特性。缺点是在处理非常高速或高度湍流的流场时,可能无法清晰展示所有细节。

7. 线性积分卷积(Line Integral Convolution,LIC)

点噪声方法的可视化效果在很大程度上取决于纹理的形式,而稀疏可视化的图标法需要用较大的图片,画出箭头,占用相当多的空间分辨率表示较为稀疏的信息。 线性积分卷积则是一种具有2D或3D矢量场通用性的新技术,将两者进行结合。其能够成像密集矢量场、独立于预定义的纹理生成稠密可视化效果,并且可以应用于二维和三维数据中。

在引入LIC之前,我们先介绍图线和纹理之间的卷积融合。数字微分法(Digital Differential Analyzer, DDA)是一种用于栅格化直线段的技术,即将数学上的连续直线转换为像素网格上的近似表示。 通过将曲线进行栅格化,然后和背景纹理进行求卷积,可以得到包含两者信息的融合。DDA-Concolution算法的流程如下图所示:

../../_images/visualization-scientific-ddac.png

图 25.26 数字微分卷积法的操作流程。#

对于DDAC算法,假设速度场近似成直线效果还好,但是对于曲率半径很小的点不准确。而且本身简单地应用卷积,自带一个去噪平均化效果,高频的会看不出,造成信息频率缺失不平衡。还有aliasing的问题,受制于分辨率限制,导致可能会有不对称的结果。因此后续会提出LIC算法来修缮上述问题。

LIC算法简单来讲就是加上了两个限制,沿流线进行卷积就可以解决曲率精度不够的问题,同时通过内禀保证对称性来解决离散化时候的走样(aliasing)问题。

(25.18)#\[\begin{split} P_{i} &= P_{i-1} + \frac{V(\lfloor P_{i-1} \rfloor)}{|V(\lfloor P_{i-1} \rfloor)|} \triangle s_{i-1} \\ P_{i}' &= P_{i-1}' - \frac{V(\lfloor P_{i-1}' \rfloor)}{|V(\lfloor P_{i-1}' \rfloor)|} \Delta s'_{i-1} \end{split}\]

其中:

\[\begin{split} P_{0} &= (x+0.5, y+0.5), \\ P_{0}' &= P_{0} \end{split}\]

\(P\) 表示图像(纹理图像)中的像素位置。\(V(\lfloor P \rfloor)\) 表示在格点 \((P_x, P_y)\) 上输入矢量场的矢量。

因此,流场的卷积结果可以表示为:

(25.19)#\[ h_{i} = \int_{s_i}^{s_i + \Delta s_i} k(w) dw \]

其中 \(\Delta s_i\)\(\Delta s_i'\) 是沿着平行于矢量场的线从 \(P_i\) 到最近单元格边缘的正负参数距离。 \(\Delta s_i = \min(s_{top}, s_{bottom}, s_{left}, s_{right})\)\(\Delta s_i'\) 类似。 最终图像上应该呈现的结果由 \(F'(x, y)\) 给出:

(25.20)#\[ F'(x, y) = \frac{\sum_{i=0}^l F(\lfloor P_i \rfloor) h_i + \sum_{i=0}^{l'} F(\lfloor P_i' \rfloor) h_i'}{\sum_{i=0}^l h_i + \sum_{i=0}^{l'} h_i'} \]

对于LIC算法的分析可以参考此博客网站。此博客同时给出了其他经典的流场可视化实现例子,感兴趣的同学请自行阅读。

../../_images/visualization-scientific-lic_wind.png

图 25.27 LIC算法效果类似于一堆细沙被强风吹散。#

../../_images/visualization-scientific-lic_pipeline.png

图 25.28 LIC算法流程。#

在传统的 LIC 方法中,每个像素点的计算都是独立的,而 TexMap LIC 则通过将 LIC 运算映射到纹理空间中来优化这一过程。 这种方法使得 LIC 能够更好地利用现代图形硬件的能力,尤其是在处理大规模或复杂的矢量场数据时,能够显著提高渲染速度和图像质量。 Volume LIC 是将 LIC 方法扩展到三维空间的一种技术,用于三维矢量场的可视化。它通过在体积数据中沿着矢量流线进行积分卷积,生成能够表现三维流动特性的图像。

8. 总结

流场可视化的方法选择本质上由数据特性分析目标共同决定,两者共同塑造了从原始数据到视觉洞察的技术路径。

  • 数据维度密度动态性是核心决策因素。 对于二维稳态流场,稀疏箭头图或纹理法(如线积分卷积)可高效传递流动趋势;而三维非稳态流场需依赖粒子追踪或体绘制技术,以平衡空间复杂性与时间演化。 例如,气象预报关注动态风场全局模式,适合实时粒子动画;而飞机翼型设计需精准捕捉表面剪切层,常采用高分辨率纹理增强局部流动细节。

  • 分析任务的需求层级进一步细化选择。 快速诊断(如工业监控)倾向轻量级直接可视化,牺牲细节换取实时性;科研探索(如湍流研究)则需多方法融合——通过拓扑提取涡旋结构,再叠加粒子轨迹验证模型。教育场景则需折中,如用交互式流线演示基础原理。

25.3.2.2. 流场可视化前沿#

可视化的前沿领域集中于对于以下问题的探索,如不稳定流(Unsteady Flow)的可视化、可视化算法的加速、结合网络的可视化。

  • 不稳定流可视化

不稳定流可视化专注于展示随时间变化的流体动力学特性,VAUFLIC (Vector-Advection Upstream Line Integral Convolution)对传统 LIC 的一种改进,专门用于可视化非稳定流。 该方法通过考虑矢量场中的流动方向和速度,增强了图像的细节和流线的连续性,特别适合于描绘复杂的流动模式,如涡旋、湍流等。

  • 可视化算法的加速

可视化的一个经典难题是对于较大的流场需要很大的时间开销,类似于光线追踪问题中的路径追踪求解方案,并行处理是一个经典的对策。 通过数据并行(每个线程处理部分数据)和任务并行(每个线程解决部分算法流程)处理,可以显著提高大规模流场数据集的处理速度和效率。 并行解决在处理复杂和大数据流场时尤为重要,如气候模拟和高分辨率流体动力学模拟。

  • 结合网络的可视化

随着深度学习在各个领域迅速结合传统工作,长短时记忆网络(LSTM)在流场可视化中的应用也逐步出现,涉及到使用深度学习技术来分析和预测流体动力学行为。 LSTM 可以帮助识别流场中的复杂模式,如周期性涡旋,以及长期依赖关系。这种方法在预测未来的流体行为以及分析非稳定流动中表现出了巨大的潜力。 Flow Net从流场数据集生成的一组流线或流面,然后使用自编码器来学习它们各自的潜在特征描述符。然后利用潜在空间中的隐变量去生成符合输入表征的流线或流面,来得到一个合理的混合预定义模式的结果。