IDEA:如何使用基于GPU的直接体积渲染与大型图像序列进行交互式渲染

4
我正在寻找将30+GB,2000+色彩的TIFF图像系列转换成数据集,以便使用基于GPU的体积渲染(使用OpenCL / OpenGL / GLSL)进行实时可视化(交互式帧率)。我想使用直接体积可视化方法而不是表面配合(即射线投影而不是Marching Cubes)。
问题有两个,首先,我需要将我的图像转换为3D数据集。我想到的第一件事是将所有图像视为2D纹理,并简单地堆叠它们以创建3D纹理。
第二个问题是交互式帧率。为此,我可能需要某种形式的降采样,结合“按需细节”在缩放或其他情况下加载高分辨率数据集。
我发现的第一个点对点的方法是:
1. 通过逐层处理完整的体积数据进行多边形化,并生成相应的图像纹理; 2. 通过顶点处理器操作执行所有必要的变换; 3. 将多边形切片分成较小的片段,记录相应的深度和纹理坐标; 4. 在片段处理中,使用顶点着色器编程技术以增强片段的渲染。
但我没有具体的想法来开始实施这种方法。
我希望能看到一些新思路或开始实施上述方法的想法。
2个回答

2
如果有人在这个领域有任何新的想法,他们可能会试图开发并发布它们。 这是一个持续的研究领域。
在您的“逐点方法”中,似乎已经概述了基于切片的体积渲染的基本方法。 这可以产生良好的结果,但许多人正在转向硬件光线投射方法。 如果您感兴趣,CUDA SDK 中有一个示例。
Crassin等人在他们的论文Gigavoxels中详细介绍了一种分层体积渲染的好方法。 它使用基于八叉树的方法,仅在需要时加载内存中需要的砖块。
在这个领域中,非常好的入门书籍是Real-Time Volume Graphics

有趣的链接,我读了一些关于八叉树的基础知识,目前认为这确实是一个常用的方法。 - bastijn
根据我的经验,使用某种空间分解方法是处理大型体数据集最常见的方法。 - tkerwin
是的,看起来是这样。根据您的文章,我找到了几篇更适用于我的工作领域(医学数据集)的文章,所以可能在几天内我会给您最终答案。仍然需要一些方法将我的图像转换为体素,所以我也会搜索一些关于这个主题的论文(并尝试与您的信息结合起来)。 - bastijn
通常将图像转换为体素的唯一问题是确定深度缩放。许多3D数据集不是各向同性的。由于您说您有彩色TIFF文件,我猜您拥有显微镜数据。从与采集相关联的元数据中找出每个平面图像关联的深度量。根据我的显微镜经验,您的平面分辨率很可能比深度分辨率高得多。无论哪种方式,将像素转换为体素只意味着将它们放入3D数组中。 - tkerwin
这不是显微镜数据,而是冷冻尸体的切片,但你说得对。将其转换为体素并不是问题。我已将你标记为最终答案,因为你的工作指导了最常用的方法。再次感谢。 - bastijn

1

我曾做过一些体渲染,不过我的代码是用 marching cubes 生成等值面并显示出来的。然而,在我自学体渲染的过程中,我遇到了一篇有趣的短文:Volume Rendering on Common Computer Hardware。它还附带了源代码示例。虽然我从未尝试过,但它看起来很有前途。不过需要说明的是,它是基于 DirectX 而非 OpenGL 的。也许它可以给你一些启示和起点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接