文章目录

  • 什么是体绘制?
  • 体绘制与面绘制的区别?
  • 什么是科学可视化?
  • 体绘制与科学可视化的关系?
  • 体绘制的应用领域?
  • 体绘制与透明光照模型?
  • 什么是体数据?
  • 什么是体素?
  • 体绘制算法之光线投射算法
    • 光线如何穿越体纹理?
    • 光透公式:
    • 如何判断光线投射出体纹理?

学习“GPU编程与CG语言之阳春白雪下里巴人”记录:

什么是体绘制?

依据三维体数据,将所有体细节同时展现在二维图片上的技术,称之为体绘制技术。利用体绘制技术,可以在一幅图像中显示多种物质的综合分布情况,并且可以通过不透明度的控制,反应等值面的情况。

体绘制与面绘制的区别?

CT图片与相机拍出来的照片

什么是科学可视化?

科学可视化技术是运用计算机图形学、图像处理、计算机视觉等方法,将科学、工程学、医学等计算、测量过程中的符号、数字信息转换为直观的图形图像, 并在屏幕上显示的理论、技术和方法。

体绘制与科学可视化的关系?

体绘制是科学可视化领域中的一个技术方向。如前所述,体绘制的目标是在一副图片上展示空间体细节。举例而言,你面前有一间房子,房子中有家具、家电,站在房子外面只能看到外部形状,无法观察到房子的布局或者房子中的物体; 假设房子和房子中的物体都是半透明的,这样你就可以同时查看到所有的细节。这就是体绘制所要达到的效果。

体绘制的应用领域?

医疗领域:计算机断层扫描(CT)
地质勘探、气象分析、分子模型构造等科学领域:如三维气象可视化
强化视觉效果:模拟流体、云、烟等

体绘制与透明光照模型?

透明光照模型一般是跟踪光线的交互过程,并在一系列的交互过程中计算颜色值;而体绘制技术是在同一射线方向上对体数据进行采样,获取多个体素的颜色值,然后根据其透明度进行颜色的合成。
总的来说,透明光照模型侧重于光照效果展现,并偏向艺术化;而体绘制技术侧重展现物质内部细节,要求真实!

什么是体数据?

体数据一般有 2 种来源:

  1. 科学计算的结果,如:有限元的计算和流体物理计算;
  2. 仪器测量数据,如:CT 或 MRI 扫描数据、地震勘测数据、气象检测数据等。

什么是体素?

体素,是组成体数据的最小单元,一个体素表示体数据中三维空间某部分的值。体素相当于二维空间中像素的概念。

体绘制算法之光线投射算法

原理:光线投射方法是基于图像序列的直接体绘制算法。从图像的每一个像素,沿固定方向(通常是视线方向)发射一条光线,光线穿越整个图像序列,并在这个过程中,对图像序列进行采样获取颜色信息,同时依据光线吸收模型将颜色值进行累加,直至光线穿越整个图像序列,最后得到的颜色值就是渲染图像的颜色。

光线如何穿越体纹理?

在体绘制中需要一个三维模型作为体纹理的载体,体纹理通过纹理坐标(三维)和模型进行对应,然后由视点向模型上的点引射线,该射线穿越模型空间等价于射线穿越了体纹理。
通常使用普通的立方体或者圆柱体作为体绘制的空间模型。

根据视点和立方体表面点可以唯一确定一条射线,射线穿越整个立方体等价于穿越体数据,并在穿越过程中对体数据等距采样,对每次得到的采样数据按照光透公式进行反复累加。

光透公式:

透明度本质上代表着光穿透物体的能力,光穿透一个物体会导致波长比例的 变化,如果穿越多个物体,则这种变化是累加的。所以,透明物体的渲染,本质上是将透明物体的颜色和其后物体的颜色进行混合,这被称为 alpha 混合技术。 图形硬件实现 alpha 混合技术,使用 over 操作符。Alpha 混合技术的公式如下所示:

如果从前面到背面进行采样合成,则合成公式为:


注意,很多体纹理其实并没有包含透明度,所以有时是自己定义一个初始的透明度,然后进行累加。

沿射线进行采样:

假定光线从 F 点投射到立方体中,并从 L 点投出,在立方体中穿越的距离为 m。当光线从 F 点投射到立方体中,穿越距离为 n(n<m)时进行采样,则存在公式:

其中 tstart 表示立方体表面被投射点的体纹理坐标;d 表示投射方向;delta 表示采样间隔,随着 n 的增加而递增;t为求得的采样纹理坐标。通过求得的采样 纹理坐标就可以在体纹理上查询体素数据。直到 n>m,或者透明度累加超过 1, 一条射线的采样过程才结束。

如何判断光线投射出体纹理?

光线投射出体纹理,等价于光线投射出立方体。所以如何判断光线投射出体纹理,可以转换为判断光线投射出立方体。
首先计算光线在立方体中入射到出射的行进距离 m,然后当每次采样体纹理时同时计算光线在立方体中的穿越距离 n,如果 n>=m,则说明光线射出立方体。 给定光线方向,以及采样的距离间隔,就可以求出光线在立方体中的穿越距离n。
如果是在 CPU 上,距离 m 很容易通过解析几何的知识求得,直接求出光线和几何体的两个交点坐标,然后计算欧几里德距离即可。但是在 GPU 上计算光 线和几何体的交点是一个老大难的问题,尤其在几何体不规则的情况下;此外,就算是规则的几何体,光线与其求交的过程也是非常消耗时间,所以通过求取交点然后计算距离的方法不予采用。
在 GPU 中可以间接反应点和点之间关系的有两个量,一个是纹理坐标,另一个就是深度值。通常在渲染中会进行深度剔除,也就是只显示深度值小的片段。 不过也存在另外一个深度剔除,将深度值小的片段剔除,而留下深度值最大的片段(深度值的剔除方法设置,在 OpenGL 和 Direct中都有现成函数调用)。如果使用后者,则场景中渲染显示的是离视点最远的面片集合。
计算距离 m 的方法:

  1. 剔除深度值较大的片段(正常的渲染状态),渲染场景深度图 frontDepth,此时 frontDepth 上的每个像素的颜色值都代表“某个方向上离视点最近的点的距离”;
  2. 剔除深度值较小的片段,渲染场景深度图 backDepth,backDepth 上的每个像素的颜色值都代表“某个方向上离视点最远的点的距离”;
  3. 将两张深度图上的数据进行相减,得到的值就是光线投射距离 m。

通常,背面的面片(不朝向视点的面片)是不会被渲染出来的,图形学 基础比较好的同学应该知道,三个顶点通常按逆时针顺序组成一个三角面, 这样做的好处是,背面面片的法向量与视线法向量的点积为负数,可以据此 做面片剔除算法(光照模型实现中也常用到),所以只是改变深度值的比较 方法还不够,还必须关闭按照逆\顺时针进行面片剔除功能,这样才能渲染 出背面深度图。图 46 是立方体的正面和背面深度图。

直接体绘制(Direct Volume Rendering)原理相关推荐

  1. 体绘制(Volume Rendering)概述介绍

    1.体绘制(Volume Rendering)概述之1:什么是体绘制? http://blog.csdn.net/liu_lin_xm/article/details/4850575 2.体绘制(Vo ...

  2. 体绘制(Volume Rendering)概述

    摘抄"GPU Programming And Cg Language Primer 1rd Edition" 中文名"GPU编程与CG语言之阳春白雪下里巴人"  ...

  3. 体绘制(Volume Rendering)概述之1:什么是体绘制?

    摘抄"GPU Programming And Cg Language Primer 1rd Edition" 中文 名"GPU编程与CG语言之阳春白雪下里巴人" ...

  4. 体绘制(Volume Rendering)概述之4:光线投射算法(Ray Casting)实现流程和代码(基于CPU的实现)...

    转自:http://blog.csdn.net/liu_lin_xm/article/details/4850630 摘抄"GPU Programming And Cg Language P ...

  5. Nerf论文前后介绍以及今后方向(2020年各个方向工作论文分析) NEURAL VOLUME RENDERING:NERF AND BEYOND

    你好! 这里是"出门吃三碗饭"本人, 本文章接下来将介绍2020年对Nerf工作的一篇总结论文NEURAL VOLUME RENDERING:NERF AND BEYOND,论文作 ...

  6. WebGL Volume Rendering Made Easy

    WebGL Volume Rendering Made Easy WebGL Volume Rendering Made Easy 1.转换.raw文件成为一张16x16的png图片 2.2个rend ...

  7. NeuS: Learning Neural Implicit Surfaces by Volume Rendering for Multi-view Reconstruction

    Paper_Reading(不定时更新版) (仅为个人记录,若有错误,请指正) Nerf:因为缺乏曲面约束,导致从学习到的隐式表示中提取到高质量的曲面较为困难. NeuS目的: In NeuS, th ...

  8. 3D Slicer Volume Rendering模块使用简单说明

    这个模块还是比较好用的,打开Volume的小眼睛就可以看到渲染的结果 还有一个要选的就是渲染什么模式,在Present那里 其他的简单试试就可以知道作用 官方网站 Volume rendering - ...

  9. 【GPU编程】体绘制传输函数-分类(Volume Rendering Transfer function:Pre- VS Post-Classification)

    在科学可视化中,我们所获得的体数据集经常是代表一些光学上的不同物理属性的单值.通常没有可行的方法可以从这样的数据中获得发射和吸收属性.因此用户必须采用某种映射方法给数据值分配光学属性值来决定数据中的不 ...

最新文章

  1. js获取asp.net服务器端控件Label,TextBox,RadioButtonList,DropDownList的值
  2. Windows系统下的各类用户角色
  3. Spring学习4之依赖注入(DI)
  4. 4.Python算法之试探算法思想(回溯法)
  5. kotlin学习之数据类(七)
  6. mysql binlog查看工具_【使用 Rust 写 Parser】4. 解析 binlog
  7. javascript编写_如何在JavaScript中使用解构来编写更简洁,功能更强大的代码
  8. (37)System Verilog类外方法示例
  9. Java 控制 Windows 系统音量
  10. 机器人J中WPR_中国工业机器人的产业链及发展现状分析
  11. MySQL数据库安装教程
  12. HOG特征和Haar特征
  13. KEIL MDK中 warning: #223-D: function “xxx“ declared implicitly 解决方法
  14. reflector 插件_Reflector Plus Plus-插件,IronPython和其他Peli Goodness
  15. 这是最坏的时代,也是最好的时代
  16. 尚硅谷docker基础篇 2018版
  17. java小组口号,小组口号霸气
  18. 西北工业大学计算机学院王鹏,王鹏的个人主页-西北工业大学教师个人主页
  19. Fedora 24 Linux 环境下实现 Infinality 字体渲染增强及 Java 字体渲染改善的方法(修订)...
  20. 新款H3C服务器R4900配置raid

热门文章

  1. 计算机应用基础2014版,计算机应用基础2014版_在线作业答案A-F[参考].doc
  2. Spring Boot连接SQLite数据库
  3. 中国离子色谱仪行业头部企业市场占有率及排名调研报告
  4. swr_convert函数介绍
  5. 蓝桥杯单片机之DS18B20温度传感器
  6. 【Android基础】setTextColor(),setBackgroundColor的参数设置方式
  7. popwindow的基本使用
  8. @JsonIgnore注解一些问题的记录
  9. Android内、外存储分区常用存储目录,getExternalStorageDirectory获取的是storage/emulated/0/
  10. iOS从资源和代码方面为App瘦身处理