张春成

V2

2022/06/22阅读:17主题:默认主题

立体渲染

立体渲染

要渲染一个立体结构,除了将它解析成表面之外,还可以通过体渲染的方式来解决问题。


分析思路

对于立体渲染,尤其是体渲染(Volume rendering)来说,我认为目前最适合入门的是 Blender 给出的介绍。 Blender[1]

简单来说,它认为所有东西都是“透光”的,而光线穿过各种材料之后,会产生吸收或散射

Untitled
Untitled

我们再假设入射光都是一致的,而由于立体物体本身的性质,最终射入眼睛的光会产生变化,这些变化就反映了物体的“内部结构”

其中, 代表物体的材质或纹理,如下图所示

Untitled
Untitled

为了让这个过程可计算,我们需要对每束光线进行分析,我们假设它经过的全部材质是光程 的函数

因此,这束光进入眼睛时的状态,总可以用光路的路径积分来表示

其中, 代表为了进行呈像,程序员可以进行的一些操作,比如给材质赋权重、设置吸光度等等类似的操作。

https://docs.blender.org/manual/en/2.79/_images/render_blender-render_materials_special-effects_volume_phase-diagram.svg
https://docs.blender.org/manual/en/2.79/_images/render_blender-render_materials_special-effects_volume_phase-diagram.svg

最终,可以达到呈现物体内部结构的目的

Untitled
Untitled

原理就是这么简单。

效果演示

这里还是用之前使用过的 FSL 的人脑 MRI 标准模板数据,不同的是之前是用 MESH 方法呈现的,这样做的缺点是 MESH 计算时,丢失了内部的一切细节。

CC Collection - Brain Atlas (listenzcc.github.io)
CC Collection - Brain Atlas (listenzcc.github.io)

CC Collection - Brain Atlas (listenzcc.github.io)

这里使用新的体渲染的方法来做,这样的渲染方法虽然不像 MESH 方法那样棱角分明,但好处脑内的细节都是保留的,并且可以直接进行层面显示。

也就是说,图上的浅蓝色线代表在此处垂直于显示面方向进行切片,断面图像显示在右边。下面是一段视频,演示了使用方法。

listenzcc/brain_render (github.com)
listenzcc/brain_render (github.com)

listenzcc/brain_render (github.com)

listenzcc/brain_render (github.com)
listenzcc/brain_render (github.com)

listenzcc/brain_render (github.com)

本文的代码可见我的 GITHUB[2] 仓库。

参考资料

[1]

Blender: https://docs.blender.org/manual/en/2.79/render/blender_render/materials/special_effects/volume.html

[2]

GITHUB: https://github.com/listenzcc/brain_render

分类:

后端

标签:

后端

作者介绍

张春成
V2