3

我想使用 OpenGL、GLSL 和 C++实现高质量的光线投射体积渲染。我使用图像顺序体积渲染。在称为compositing的光线投射体积渲染步骤中,我使用以下公式(前后顺序):

在此处输入图像描述

当我阅读《Real-time volume graphics》第 16 页这本书时,我看到如果采样率发生变化,我们需要进行 Opacity Correction:

在此处输入图像描述

并用这个不透明度值代替旧的不透明度值。在这个公式中,在此处输入图像描述 是新的样本距离,而△x是旧的样本距离。

我的问题是:如何确定程序中的△x

4

2 回答 2

4

假设您的原始体积的分辨率为 V=(512, 256, 127),那么当向 (rx, ry, rz) 方向投射光线时,样本距离为 1/|r·V|。但是说在你的光线投射器中你很大程度上是过采样的,假设你以 3× 采样距离 V'=(1526, 768, 384) 采样体积,过采样的采样距离是 1/|r·V'|,因此采样率的比率为 1/3。这是要添加的指数。

请注意,指数仅在低密度体积时才显着,即在医学图像低对比度软组织的情况下。如果您正在对骨骼或致密组织进行成像,那么它几乎没有区别 (BTDT)。

于 2012-09-19T12:32:25.243 回答
0

datenwolf 是正确的,但缺少一条信息。传递函数是标量值和颜色之间的映射。在 RGBA 中,值的范围在 0 和 1 之间。作为实施者,您可以选择不透明度的实际值转换为什么,这就是原始样本距离的来源。

假设您有单位立方体,如果您在与面正交的方向上跟踪光线,则选择 2 个样本,该样本转换为 0.5 的样本距离。如果体积中任何地方的 alpha 值都是 0.1,则生成的 alpha 为 0.1 + 0.1 * (1.0 -0.1) = 0.19。如果您选择 3 个样本,则生成的 alpha 是前一个选择的一个复合值:0.19 + 0.1 * (1-0.19) = 0.271。因此,您对原始样本距离的选择会影响结果。明智地选择。

于 2020-09-15T20:46:34.217 回答