依据三维体数据,将所有体细节同时展现在二维图片上的技术,称之为体绘制技术。
利用体绘制技术,可以在一幅图像中显示多种物质的综合分布情况,并且可以通过不透明度的控制,反应等值面的情况。
Reference
体绘制(Volume Rendering)概述之3:光线投射算法(Ray Casting)原理和注意要点
体绘制(Volume Rendering)概述之2:体数据详解
体绘制(Volume Rendering)概述之1:什么是体绘制?
简介
依据三维体数据,将所有体细节同时展现在二维图片上的技术,称之为体绘制技术。
利用体绘制技术,可以在一幅图像中显示多种物质的综合分布情况,并且可以通过不透明度的控制,反应等值面的情况。
体数据
是对一种数据类型的描述,只要是包含了体细节的数据,都可以称之为体数据。体数据与面数据的区别,就好像一个实心的铁球和一个空心的兵乓球的区别。
为了渲染三维数据集的二维投影,首先需要定义相机相对于几何体的空间位置。另外,需要定义每个点即体素的不透明性以及颜色,这通常使用RGBA(red, green, blue, alpha)传递函数定义每个体素可能值对应的RGBA值。
直接体渲染
体光线投射
光线投射方法是基于图像序列的直接体绘制算法。从图像的每一个像素,沿固定方向(通常是视线方向)发射一条光线,光线穿越整个图像序列,并在这个过程中,对图像序列进行采样获取颜色信息,同时依据光线吸收模型将颜色值进行累加,直至光线穿越整个图像序列,最后得到的颜色值就是渲染图像的颜色。
光线如何穿越体纹理
体纹理通过纹理坐标(三维)和模型进行对应,然后由视点向模型上的点引射线,该射线穿越模型空间等价于射线穿越了体纹理。通常使用普通的立方体或者圆柱体作为体绘制的空间模型。
根据视点和立方体表面点可以唯一确定一条射线,射线穿越整个立方体等价于穿越体数据,并在穿越过程中对体数据等距采样,对每次得到的采样数据按照光透公式进行反复累加。
体纹理坐标
如图所示,假定光线从 f 点投射到立方体中,并从 l 点投出,在立方体中穿越的距离为 m 。当光线从 f 点投射到立方体中,穿越距离为 n 时进行采样,则存在公式:
$$t=t_{start}+d{\delta}$$
其中$t_{start}$表示立方体表面被投射点的体纹理坐标; d表示投射方向;$\delta$ 表示采样间隔,随着 n 的增加而递增;t 为求得的采样纹理坐标。通过求得的采样纹理坐标就可以在体纹理上查询体素数据。直到 n>m ,或者透明度累加超过 1 ,一条射线的采样过程才结束。
光透公式
透明度本质上代表着光穿透物体的能力,光穿透一个物体会导致波长比例的变化,如果穿越多个物体,则这种变化是累加的。所以,透明物体的渲染,本质上是将透明物体的颜色和其后物体的颜色进行混合,这被称为 alpha 混合(alpha blending)技术。Alpha 混合技术的公式如下所示:
$$C_o = a_sc_s+(1-a_s)c_d$$
其中,$a_s$ 表示透明物体的透明度, $c_s$表示透明物体的原本颜色, $c_d$表示目标物体的原本颜色, $C_o$ 则是通过透明物体观察目标物体所得到的颜色值。
如果有多个透明物体,通常需要对物体进行排序,除非所有物体的透明度都是一样的。在图形硬件中实现多个透明物体的绘制是依赖于 Z 缓冲区(Z-Buffer)。在光线投射算法中,射线穿越体纹理的同时也就是透明度的排序过程。所以这里存在一个合成的顺序问题。可以将射线穿越纹理的过程作为采样合成过程,这是从前面到背面进行排序,也可以反过来从背面到前面排序,毫无疑问这两种方式得到的效果是不太一样的。
如果从前面到背面进行采样合成,则合成公式为:
$$C_i^{\Delta} =C_{i-1}^{\Delta}+ (1-A_{i-1}^{\Delta})C_i$$
$$A_i^{\Delta} =A_{i-1}^{\Delta}+ (1-A_{i-1}^{\Delta})A_i$$
其中,$C_i$ 和 $A_i$分别是在体纹理上采样所得到的颜色值和不透明度,其实也就是体素中蕴含的数据; $C_i^{\Delta}$和 $A_i^{\Delta}$表示累加的颜色值和不透明度。
如果从背面到前面进行采样合成,则公式为:
$$C_i^{\Delta} =C_{i}+ (1-A_{i}^{\Delta})C_{i+1}^{\Delta}$$
$$A_i^{\Delta} =A_{i}+ (1-A_{i}^{\Delta})A_{i+1}^{\Delta}$$
总结
首先需要一个确定了顶点纹理坐标的三维立方体,光线穿越立方体的过程,就是穿越体纹理的过程,在整个穿越过程中,计算采样体纹理坐标,并进行体纹理采样,这个采样过程直到光线投出立方体或者累加的透明度为 1 时结束。
- 本文作者: Yuang
- 本文链接: http://www.yuuuuang.com/2019/03/31/学习笔记-Volume-Rendering/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!