基本概念

光线投射方法是基于图像序列的直接体绘制算法。从图像的每一个像素,沿固定方向(通常是视线方向)发射一条光线,光线穿越整个图像序列,并在这个过程中,对图像序列进行采样获取颜色信息,同时依据光线吸收模型将颜色值进行累加,直至光线穿越整个图像序列,最后得到的颜色值就是渲染图像的颜色。
为什么在上面的定义是穿越 “ 图像序列 ” ,而不是直接使用 “ 体纹理 ” ?原因在于,体数据有多种组织形式,在基于 CPU 的高级语言编程中,有时并不使用体纹理,而是使用图像序列。在基于 GPU 的着色程序中,则必须使用体纹理。这里所说的图像序列,也可以理解为切片数据。
尤其要注意:光线投射算法是从视点到 “ 图像序列最表面的外层像素 ” 引射线穿越体数据,而不少教程中都是糊里糊涂的写到 “ 从屏幕像素出发 ” ,这种说法太过简单,而且很容易让人误解技术的实现途径,可以说这是一种以讹传讹的说法!从屏幕像素出发引出射线,是光线跟踪算法,不是光线投射算法。
下面说说光线投射算法实现。首先要渲染出正向面深度图和背向面深度图,这是为了计算射线穿越的最大距离,做为循环采样控制的结束依据;然后在顶点着色程序中计算顶点位置和射线方向,射线方向由视线方向和点的世界坐标决定,其实射线方向也可以放在片段着色程序中进行计算。然后到了最关键的地方,就是循环纹理采样、合成。
每一次循环都要计算新的采样纹理坐标和采样距离,然后进行颜色合成和透明度累加,如果采样距离超过了最大穿越距离,或者透明度累加到 1 ,则循环结束。将合成得到的颜色值输出即可。

示例演示

下面我们就实现一个Ray Casting Demo。首先背向面深度渲染(backFace相关的shader),目的得到射线的结束位置。
然后进行Ray Casting渲染(Ray Casting相关的shader)。用到一个 3D texture存放体数据,一个2D texture存放射线结束位置(同帧缓存从前面的背向深度渲染得到),一个1D texture存放传递函数。工程代码下载。

3.2.1 体渲染之Ray Casting相关推荐

  1. Ray Tracing,Ray Casting,Path Tracing,Ray Marching 的区别?

    作者:洛城 链接:https://www.zhihu.com/question/29863225/answer/70728387 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  2. [译]基于GPU的体渲染高级技术之raycasting算法

    [译]基于GPU的体渲染高级技术之raycasting算法 PS:我决定翻译一下<Advanced Illumination Techniques for GPU-Based Volume Ra ...

  3. 斯图加特大学GPU光线投射体渲染技术提携

    斯图加特大学GPU光线投射体渲染技术介绍 前言:在以往人们的印象中,美国的CG技术是一世界第一流的,而没有注意德国CG技术的发展.事实上,德国大学的CG是相当高的,与美国第一流的大学学术交往非常频繁. ...

  4. Q127:PBRT-V3,理解“体渲染”积分器的关键竟然是这张图

    "体渲染"积分器是在"路径追踪"积分器的基础上考虑了场景中的介质,相当于是对"路径追踪"积分器的拓展. 所以,在学习"体渲染&qu ...

  5. Ray Casting:光线投射

    本次作业完成的是通过正交相机投影+ray casting方式渲染,得到一个场景中有若干个球形的图片,并以深度测试后直接显示色彩和简单限制深度后显示两种方式来显示. 目录 原理 结果 github连接 ...

  6. 医学图像体渲染照明2 体照明模型

    这一节里,我们推导了先进的体积照明方法经常使用的体积照明模型.该模型基于Max[1995]推导的光学模型以及Max和Chen[2010]最近描述的扩展.为了清楚起见,我们将模型中使用的定义作为以下参考 ...

  7. GPU Gems1 - 9 有效的阴影体渲染

    这章全面讲述了用于实时阴影渲染中常见两种流派之一的阴影体(Shadow Volumes)技术,又称模板阴影(Stencil Shadows)技术,重点是得到正确的角度的情形,减少几何图形和填充率的消耗 ...

  8. Q128:PBRT-V3,“体渲染”积分器的“传播方程”(15.1章节)

    对比"路径追踪"积分器和"体渲染"积分器中长度为n的路径上返回的光的计算:

  9. Q126:PBRT-V3,VolPathIntegrator(体渲染)流程概述

    最近在学体渲染,老实说,挺费劲的! Medium的原理.采样.对应的光传播函数.VolPathIntegrator的实现等等,都已经过了一遍. 现总结一下初浅的理解吧. VolPathIntegrat ...

最新文章

  1. 牛顿棺材板快盖不住了:用深度神经网络解决三体问题,提速一亿倍
  2. 记-PHPExcel下载
  3. Android通过使用系统广播监听网络状态的改变
  4. 在Spring MVC Web应用程序中使用reCaptcha
  5. 校运会计算机科学系大本营,计算机系团总支学生会学期总结大会
  6. 打造一个全命令行的Android构建系统
  7. c语言系统的通用数据结构,(转载)C语言实现通用数据结构的高效设计
  8. np python_python小白之np功能快速查
  9. python输入数据的维度_python – Keras LSTM输入维度设置
  10. mac obs 录屏黑屏_有了它,我把其他录屏软件都卸载了!
  11. AI发来贺电,您的2333号奶牛已进入恋爱时节 | 野性的呼唤
  12. bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘(凸包)
  13. WebResource.axd引起的问题
  14. python调用jsonrpc接口_python使用grpc调用rpc接口
  15. Python_爬虫笔记_2018.3.19
  16. robocode机器人案例
  17. 迪普融合之路 构建价值网络
  18. 清理服务器 归档日志文件,服务器归档日志模式
  19. 手机(局域网)远程连接 windows电脑
  20. 论文大致思路(不断更新)

热门文章

  1. python适合做嵌入式开发吗_python可以做嵌入式吗
  2. 写给大忙人看的 - Java中图片压缩上传至MinIO服务器(4)
  3. 【网络篇】第二篇——IP协议与MAC地址详解
  4. 完成后台管理系统功能(八)商品的修改以及删除
  5. Proteus 网络名的添加
  6. 【2020暑假牛客多校(一)】
  7. 什么叫序数_什么是序数
  8. eclipse下载及安装
  9. 苹果cmsv10仿西瓜影院电脑手机影视自适应免费模板
  10. 【修复日常bug】京东富文本详情图变形的多种处理方式(解决商品详情图片宽高不适应问题)