在科学可视化和计算机图形学中,体积渲染是一组用于显示3d离散采样数据集(通常是3d标量场)的2d投影的技术。
典型的3d数据集是由ct、i或microct扫描仪获取的一组2d切片图像。通常,这些是以规则模式(例如,每毫米深度一个切片)获取的,并且通常在规则模式中具有规则数量的图素。这是规则体积网格的示例,每个体积元素或体素由单个值表示,该值是通过对体素周围的直接区域进行采样而获得的。
要渲染3d数据集的2d投影,首先需要在相对于体积的空间中定义。此外,还需要定义每个体素的不透明度和。这通常使用rgba(用于红色、绿色、蓝色、alpha)传递函数来定义,该函数可以将任何可能的体素值映射到rgba值。
例如,可以通过从体积中提取等值面(相等值的表面)并将它们渲染为或直接将体积渲染为数据块来查看体积。的移动立方体算法是用于从体数据中提取等值面的常用技术。直接体绘制是一项计算密集型任务,可以通过多种方式执行。
体积渲染不同于薄层演示,通常也不同于3d模型的投影,包括xxx强度投影。尽管如此,从技术上讲,当在二维显示器上观看时,所有体积渲染都变成了投影,使得投影和体积渲染之间的区别有点模糊。尽管如此,体积渲染模型的缩影以混合着色和着色为特征,以创建逼真的和/或可观察的表示。
直接体积渲染器要求将每个样本值映射到不透明度和颜色。这是通过“传递函数”完成的,该函数可以是简单的斜坡、分段线性函数或任意表格。一旦转换为rgba颜色模型(用于红色、绿色、蓝色、alpha)值,组合的rgba结果就会投影到的相应像素上。这样做的方式取决于渲染技术。
这些技术的组合是可能的。例如,剪切扭曲实现可以使用硬件在屏幕外缓冲区中绘制对齐的切片。
体积光线投射
体积技术可以直接从渲染方程推导出来.它提供了非常高质量的结果,通常被认为提供了最好的图像质量。体积射线投射被归类为基于图像的体积渲染技术,因为计算来自输出图像,而不是像基于对象的技术那样的输入体积数据。在这种技术中,为每个所需的图像像素生成一条射线。使用简单的相机模型,光线从相机的投影中心(通常是眼点)开始,并穿过漂浮在相机和要渲染的体积之间的假想图像平面上的图像像素。为了节省时间,光线会被体积的边界剪掉。然后在整个体积中以规则或自适应间隔对射线进行采样。数据在每个样本点进行插值,传递函数应用于形成rgba样本,样本被合成到光线的累积rgba上,重复这个过程直到光线离开体积。rgba颜色被转换为rgb颜色并沉积在相应的图像像素中。对屏幕上的每个像素重复该过程以形成完整的图像。
喷溅
这是一种以质量换取速度的技术。在这里,正如leewestover所说,每个体积元素都像雪球一样,按从后到前的顺序散布在观看面上。这些splats被渲染为磁盘,其属性(颜色和透明度)以正常(高斯)方式径向变化。根据应用的不同,也使用平面磁盘和具有其他类型属性分布的磁盘。
剪切变形
体积渲染的剪切扭曲方法是由cameron和undrill开发的,由philippelacroute和marclevoy推广。在这种技术中,观察变换被变换,使得体积的最近面变成轴与屏幕外图像数据缓冲区对齐,具有固定的体素到像素的比例。然后使用更有利的内存对齐和固定的缩放和混合因子将体积渲染到此缓冲区中。一旦渲染了体积的所有切片,缓冲区就会扭曲到所需的方向并在显示的图像中缩放。
与光线投射相比,这种技术在软件中相对较快,但代价是采样精度较低,图像质量可能更差。存储卷的多个副本会产生内存开销,以便能够拥有近轴对齐的卷。可以使用运行长度编码来减轻这种开销。
基于纹理的体积渲染
许多3d图形系统使用纹理映射将图像或纹理应用于几何对象。商用pc显卡在纹理化方面速度很快,并且可以有效地渲染3d体积的切片,并具有实时交互功能。工作站gpu速度更快,并且是医学成像、和天然气和其他市场中使用的大部分生产量可视化的基础(2007)。早些年,专用3d纹理映射系统用于图形系统,例如silicongraphicsinfinitereality、visualizefx图形加速器等。这种技术首先被描述为比尔·希巴德和戴夫·桑泰克。
这些切片可以与体积对齐并与观察者成一定角度渲染,或者与观察平面对齐并从穿过体积的未对齐切片中采样。第二种技术需要对3d纹理的支持。
体积对齐的纹理会产生质量合理的图像,尽管在旋转体积时通常会有明显的过渡。
由于直接体渲染极其并行的特性,在gpu体渲染变得足够快之前,专用体渲染硬件是一个丰富的研究课题。最被广泛引用的技术是的volumepro实时光线投射系统,通过开发汉斯皮特·菲斯特和科学家在研究实验室,它采用了高内存带宽和蛮力使用光线投射算法,以呈现。该技术转移到terarecon,inc.并生产和销售了两代asic。vp1000于2002年发布,vp2000于2007年发布。
最近开发的一种加速传统体积渲染算法(如光线投射)的技术是使用现代显卡。从可编程像素着色器开始,人们认识到了对多个像素进行并行操作的能力,并开始在图形处理单元(gpgpu)上执行通用计算。在像素着色器能够读取和显存随机写入和执行一些基本的数学和逻辑运算。这些simd处理器用于执行一般计算,例如渲染多边形和信号处理。在最近几代gpu中,像素着色器现在可以用作mimd处理器(现在能够独立分支)利用高达1gb的浮点格式纹理内存。这样的能力,几乎任何具有可以并行执行的步骤的算法,例如体射线投射或断层扫描重建,都可以以极大的加速度执行。可编程像素着色器可用于模拟、阴影、反射、发光颜色等特性的变化。可以使用高级着色语言编写此类模拟。
优化的主要是尽可能多地跳过音量。典型的医疗数据集的大小可能为1gb。要以30帧/秒的速度渲染,需要极快的内存总线。跳过体素意味着需要处理的信息更少。
空格跳过
通常,体绘制系统将具有用于识别不包含可见材料的体区域的系统。该信息可用于避免渲染这些透明区域。
早期光线终止
这是在按从前到后顺序呈现体积时使用的一种技术。对于穿过像素的光线,一旦遇到足够密集的材料,进一步的样本将对像素没有显着贡献,因此可以忽略。
八叉树和bsp空间细分
使用八叉树和bsp树等分层结构对于体积数据的压缩和体积射线投射过程的速度优化都非常有帮助。
音量分割
体积分割包括自动去骨,例如在此ct的右侧图像中使用的。胸部3d渲染ct扫描的体积分割:前胸壁、气道和肺根前方的肺已被数字化去除,以显示胸腔内容:-蓝色:肺动脉-红色:肺静脉(还有腹壁)-黄色:纵隔-紫色:横膈膜
图像分割是一种手动或自动过程,可用于在渲染之前将人们认为无趣的大部分体积分割出来,可以显着减少必须通过光线投射或纹理混合进行的计算量。对于n个顺序的体素,这种减少可以从o(n)到o(logn)。体积分割对于其他算法也具有显着的性能优势。随后可以使用体积分割来突出显示感兴趣的结构。
多重和自适应分辨率表示
通过以较粗的分辨率表示体积中不太有趣的区域,可以减少数据输入开销。仔细观察,这些区域中的数据可以通过从内存或磁盘读取或通过插值来填充。与从原始图像创建2dmipmap图像的方式相同,将较粗分辨率的体积重新采样为较小的尺寸。这些较小的体积也可以在将体积旋转到新方向时单独使用。
预集成体积渲染
预集成体渲染是一种可以通过预计算大部分所需数据来减少采样伪影的方法。它在应用程序中特别有用,因为它可以提高质量而不会对性能产生很大影响。与大多数其他优化不同,这不会跳过体素。相反,它减少了准确显示体素区域所需的样本数量。这个想法是渲染样本之间的间隔而不是样本本身。这种技术捕捉快速变化的材料,例如从肌肉到骨骼的过渡,计算量要少得多。
基于图像的网格划分
基于图像的网格划分是从3d图像数据(例如mri、ct、工业ct或显微断层扫描)创建计算机模型的自动化过程,用于计算分析和设计,例如cad、cfd和fea。
体素的时间重用
对于完整的显示视图,每个像素(前一个)只需要显示一个体素(虽然可以使用更多的体素来平滑图像),如果需要动画,可以缓存要显示的前体素及其位置相对于相机可以在它移动时重新计算。在显示体素相距太远而无法覆盖所有像素的情况下,可以通过光线投射或类似方法找到新的前体素,并且在一个像素中有两个体素的情况下,可以保留前体素。
内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/128715/