Table of Contents
我们迎来了重头戏——大名鼎鼎的 density emitted model(密度发射模型)。
Sabella在图形学顶级期刊SIGGRAPH上发表的关于体渲染的论文,提出了光线追踪渲染3D标量场的技术,该算法计算沿采样光线的场的特性,如衰减强度(attenuated intensity)、峰值密度(the peak density)和重心(center of gravity)。
渲染体数据的奥义是能够可视化里面任何的数据区,比如比较高的标量值,比如“热点区域”,还比如场梯度变化(即类似标量场的数据形成了怎样的表面)。这个论文里把体空间(标量场)设为一个可变的密度发射对象。
该模型的三个特点:
这两种模型都是表示的光交互模型。
简单描述一下这个方法:这个方法就是“基于纹理映射的体渲染算法”的最初版本,把三维图像比作一堆二维图像的叠加,然后控制只显示哪些部分,来得到最终的图像。
图片来自于《Real Time Volume Graphics》
例如,MIP最大密度投影,选择每个成像采样光线上最大的一个值作为最终结果。
主要用于医学图像显示方面,只对里面一定阈值内的数据感兴趣,比如人体CT图像中的骨组织,可以使用该方法。有三种阈值渲染的方法:
阈值渲染模型会丢弃三维图像中保存的大部分数据。除了像医学成像这样的应用程序(其中关注的是少量的密度范围),它就像横截面渲染一样,因为它需要许多视野,这些视图必须在我们心里进行组合,以便用户完全感知该标量场。在像地球物理成像这样的应用中,三维地震图像并不像医学图像那样描述连贯性。因此,阈值渲染并不令人满意,因为它会生成碎片而不是粘合曲面。
i) 当光线被靠近观察者的云层散射时,模型的一部分会被遮挡。
ii)根据光源的位置创建阴影。
iii)颜色变化是由于不同波长的散射量不同而产生的分离
这里的密度定义是无维度关系的,而且因为是随时变化的,所以要用微分形式:
是每个粒子的体积,V是包含粒子的当前微元的体积。
表示的是当前空间微元的粒子数。
我们令密度场表示为
在采样光线上的单个微元中的粒子发光强度是:
(单个粒子微元发光的亮度)
(采样光线沿途中所有的粒子数)
表示的是到人的眼睛的光强相当于粒子发出的光,同时还在概率P(0;V)下衰减。我们假设概率符合泊松分布:
所以单个微元发光亮度到最终图像上为:
总亮度就是:
论文里的这个公式看起来不是很丑(主要是论文太老,翻新以后显示的其他公式实在是太丑了),所以就直接截图了。
我们用常量来代替 ,然后令 来标准化整个方程(毕竟我们是在计算机程序中应用,所以不需要完全按照物理的辐射度来优化,只需要找到一个对应关系就好了),得到:
看着是不是超级像体渲染的方程?要注意一点,这里的衰减虽然是按照的概率分布计算的,但是因为概率分布与粒子浓度有关,所以最后得到的方程也是与“发射吸收方程”一样。
因为 的值在 0-1之间,所以我们采用转换:
我们总体介绍一下这个方程:
高的 表示衰减更快,高的 会增强密集部分相对于较扩散区域的外观,低的 表示更弥散:
离散化的方法就不再介绍,与渲染的研究没有什么关系。
现在要注意到,我们以前解决的问题只是明暗度,但是如果我们想显示彩色图呢?(例如下图,左图是明暗度图,右图是上色了的图)
但是因为这种颜色映射方式比较古老,与现在的“传输函数”方面的研究没有太大关系,所以我们就暂且不提了。
与后面的渲染方法大同小异,考虑到了粒子的衰减和粒子的发光,虽然本文的研究中没有阴影效果(没有体现出散射),但是仅靠发光和衰减渲染出的地震波图像效果还是可以的。