Texture-based 体渲染方法

Table of Contents

纹理切片

2D Texture–Based Volume Rendering

3D Texture–Based Approach


 

纹理切片

目前,纹理切片是基于gpu的体绘制的主流方法。这是一种对象排序方法:使用位于三维对象空间的二维切片对体积进行采样。将切片投影到图像平面上,并根据合成方案进行组合。切片可以按前到后或从后到前的方式排序,合成公式必须相应地进行选择。纹理切片直接由图形硬件支持,因为它只需要纹理支持和混合(对于合成方案)。因此,纹理切片是一种非常有效的方法。然而,一个缺点是需要统一的(uniform)网格限制。这本书主要侧重于纹理切片。第三章介绍了纹理切片的基本实现。

与体绘制相关的两个最重要的操作是插值和合成(compositing)。这两种类型的操作都可以在现代图形硬件上高效地执行。纹理映射操作基本上是对纹理图像进行插值或过滤,以在与原始网格不一致的位置获得颜色样本。因此,纹理映射硬件是执行重复重采样任务的理想候选。通过利用硬件中的碎片操作,可以很容易地合成单个样本。我们现在可以确定基于对象顺序GPU的体积渲染器的基本组件。

2D Texture–Based Volume Rendering

我们将要检查的第一个实现仅使用2D纹理和双线性插值进行管理。如果我们想利用二维纹理映射的能力,体积数据必须存储在多个纹理图像中。使用2D纹理的含义是硬件只能对原始3D数据的2D子集进行采样。

本例中的代理几何体是一堆对象对齐的切片,如图3.1所示。在文献中,对象对齐的切片有时被称为轴对齐切片。我们更喜欢术语“对象对齐”,以强调切片是根据对象的局部坐标系定义的。

所有多边形都需要与对象空间中的一个主轴(x、y或z轴)对齐。这一要求的原因是二维纹理坐标用于访问纹理数据。因此,空间中的第三个坐标必须是常数。对于三维对象空间中的每个点,一个坐标确定要从切片堆栈中使用的纹理图像。其余两个向量分量将成为实际的2D纹理坐标。多边形使用相应的2D纹理进行映射,然后由硬件本机双线性滤波重新采样。

我们将要检查的第一个实现仅使用2D纹理和双线性插值进行管理。如果我们想利用二维纹理映射的能力,体积数据必须存储在多个纹理图像中。使用2D纹理的含义是硬件只能对原始3D数据的2D子集进行采样。

在文献中,对象对齐的切片有时被称为轴对齐切片。我们更喜欢术语“对象对齐”,以强调切片是根据对象的局部坐标系定义的。

所有多边形都需要与对象空间中的一个主轴(x、y或z轴)对齐。这一要求的原因是二维纹理坐标用于访问纹理数据。因此,空间中的第三个坐标必须是常数。对于三维对象空间中的每个点,一个坐标确定要从切片堆栈中使用的纹理图像。其余两个向量分量将成为实际的2D纹理坐标。多边形使用相应的2D纹理进行映射,然后由硬件本机双线性滤波重新采样。

3D Texture–Based Approach

基于二维纹理的方法有几个问题是由固定数量的切片及其在对象坐标系中的静态对齐引起的。我们不得不忍受这些限制的原因是2D纹理没有提供所需的三线性插值功能。如果我们使用3D纹理而不是2D纹理,这种情况会改变。

那些以前没有使用过3D纹理的人应该意识到,3D纹理并不代表体积渲染基本体。它们只不过是体积纹理对象,这意味着用于纹理映射平面多边形的图像信息可以从一个实体三维纹理块中“切出”。因此,使用3D纹理确实使我们不必将体积对象分解为平面多边形。与第一种方法相比,我们现在在如何计算这种分解上有了更大的灵活性。

正如我们已经看到的,使用对象对齐切片的一个缺点是静态代理几何体导致的采样率不一致。由于三维纹理允许切片多边形在三维空间中任意定位,因此通过调整对象对齐切片的距离以适应当前视角,可以实现不同观察方向更一致的采样率。这实际上是在本章后面描述的基于2D多纹理的方法中完成的。然而,调整切片距离并不能消除算法在不同切片堆栈之间切换时出现的闪烁伪影。