光线渲染体积渲染中的不透明度校正

时间:2012-09-19 12:10:12

标签: opengl graphics glsl volume

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

enter image description here

当我阅读第16页的“实时体积图形”一书时,我发现如果采样率发生变化,我们需要进行不透明度校正:

enter image description here

并使用此不透明度值替换旧的不透明度值。在此公式中,enter image description here 是新的样本距离,△x是旧的样本距离。

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

2 个答案:

答案 0 :(得分:4)

假设您的原始音量具有V =(512,256,127)的分辨率,那么当沿(rx,ry,rz)方向投射光线时,采样距离为1 / | r·V |。然而,在您的raycaster中说你大部分是过采样,比如说你在3倍的采样距离V'=(1526,768,384)采样,过采样的采样距离是1 / | r·V'|,因此采样率的比例是1/3。这是要添加的指数。

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

答案 1 :(得分: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。因此,您对原始样本距离的选择会影响结果。明智地选择。