3D标量场可视化

体渲染技术的起源和发展-精品文(超长预警)

Table of Contents

3D标量场可视化

两种已经存在的渲染模型(老方案)

Cross-section rendering

Threshold rendering

散射模型

密度定义

亮度方程

颜色映射

结论


3D标量场可视化

我们迎来了重头戏——大名鼎鼎的 density emitted model(密度发射模型)。

Sabella在图形学顶级期刊SIGGRAPH上发表的关于体渲染的论文,提出了光线追踪渲染3D标量场的技术,该算法计算沿采样光线的场的特性,如衰减强度(attenuated intensity)、峰值密度(the peak density)和重心(center of gravity)

渲染体数据的奥义是能够可视化里面任何的数据区,比如比较高的标量值,比如“热点区域”,还比如场梯度变化(即类似标量场的数据形成了怎样的表面)。这个论文里把体空间(标量场)设为一个可变的密度发射对象

该模型的三个特点:

  • 颜色映射用于可视化各个属性。
  • 使用相位函数来可视化场梯度。
  • 重新设计了Kajiya和Von Herzen光线跟踪算法,以提高计算效率,消除阴影,同时保持遮挡效果。

两种已经存在的渲染模型(老方案)

这两种模型都是表示的光交互模型。

Cross-section rendering

简单描述一下这个方法:这个方法就是“基于纹理映射的体渲染算法”的最初版本,把三维图像比作一堆二维图像的叠加,然后控制只显示哪些部分,来得到最终的图像。

图片来自于《Real Time Volume Graphics》

例如,MIP最大密度投影,选择每个成像采样光线上最大的一个值作为最终结果。

Threshold rendering

主要用于医学图像显示方面,只对里面一定阈值内的数据感兴趣,比如人体CT图像中的骨组织,可以使用该方法。有三种阈值渲染的方法:

  • 从后到前遍历
  • 光线追踪
  • 表面重建(建立三维面模型)

阈值渲染模型会丢弃三维图像中保存的大部分数据。除了像医学成像这样的应用程序(其中关注的是少量的密度范围),它就像横截面渲染一样,因为它需要许多视野,这些视图必须在我们心里进行组合,以便用户完全感知该标量场。在像地球物理成像这样的应用中,三维地震图像并不像医学图像那样描述连贯性。因此,阈值渲染并不令人满意,因为它会生成碎片而不是粘合曲面。

散射模型

i) 当光线被靠近观察者的云层散射时,模型的一部分会被遮挡。

ii)根据光源的位置创建阴影。

iii)颜色变化是由于不同波长的散射量不同而产生的分离

密度定义

这里的密度定义是无维度关系的,而且因为是随时变化的,所以要用微分形式:

\rho (x,y,z)=\frac{dV_p}{dV}

V_p 是每个粒子的体积,V是包含粒子的当前微元的体积。

N_\Omega =\frac{\int_{\Omega}dV_p}{V_p}=\frac{\int_{\Omega}\rho dV}{V_p} 表示的是当前空间微元的粒子数。

亮度方程

我们令密度场表示为 \rho (x(t),y(t),z(t)) = \rho(t)

在采样光线上的单个微元中的粒子发光强度是:

\kappa N_\sigma = \kappa \frac{\rho dV}{v_p}= \frac{\kappa \sigma }{v_p}\rho(t)dt (单个粒子微元发光的亮度)

N = \frac{\sigma}{v_p}\int_{t1}^{t}\rho(\lambda )d\lambda  (采样光线沿途中所有的粒子数)

表示的是到人的眼睛的光强相当于粒子发出的光,同时还在概率P(0;V)下衰减。我们假设概率符合泊松分布:

P(0;V) = e^{-N}

所以单个微元发光亮度到最终图像上为:

I(t) = P(0;V)\kappa N_\sigma=e^{-N} \frac{\kappa \sigma}{v_p}p(t)dt

总亮度就是:

论文里的这个公式看起来不是很丑(主要是论文太老,翻新以后显示的其他公式实在是太丑了),所以就直接截图了。

我们用常量\tau来代替 \frac{\sigma}{v_p} ,然后令 \frac{\kappa\sigma}{v_p} = 1 来标准化整个方程(毕竟我们是在计算机程序中应用,所以不需要完全按照物理的辐射度来优化,只需要找到一个对应关系就好了),得到:

看着是不是超级像体渲染的方程?要注意一点,这里的衰减虽然是按照的概率分布计算的,但是因为概率分布与粒子浓度有关,所以最后得到的方程也是与“发射吸收方程”一样。

因为\rho 的值在 0-1之间,所以我们采用转换:

我们总体介绍一下这个方程:

高的\tau 表示衰减更快,高的\gamma 会增强密集部分相对于较扩散区域的外观,低的\gamma 表示更弥散:

 

离散化的方法就不再介绍,与渲染的研究没有什么关系。

颜色映射

现在要注意到,我们以前解决的问题只是明暗度,但是如果我们想显示彩色图呢?(例如下图,左图是明暗度图,右图是上色了的图)

 

但是因为这种颜色映射方式比较古老,与现在的“传输函数”方面的研究没有太大关系,所以我们就暂且不提了。

结论

与后面的渲染方法大同小异,考虑到了粒子的衰减和粒子的发光,虽然本文的研究中没有阴影效果(没有体现出散射),但是仅靠发光和衰减渲染出的地震波图像效果还是可以的。