layui循环数据并渲染_【译】实时体渲染——第五章 Ray Casting导论

前面基于GPU的体渲染部分介绍了传统并广泛使用的使用图形硬件进行体渲染的方法。这种方法使用一种2D代理几何体来采样底层的3D数据集。主要的代理几何体要么是使用3D纹理的视图对齐切片,要么是与2D纹理叠垂直的主轴对齐的切片。基于切片的体渲染的成功归因于许多重要因素:(1)纹理内存和光栅单元之间的高带宽,(2)用于快速采样的内置插值方法(2D纹理叠的双线性插值或2D纹理的三线性插值)和(3)很高的光栅化性能。而且,核心的渲染过程是很容易去实现的。

尽管有这些好处,基于切片的体渲染也有很多明显的缺点——尤其是对于大的数据集。由于切片的位置和数量直接由体数据集决定,对象空间方法非常受数据集的复杂度影响。然而,输出敏捷性应该是所有计算机图形学算法的终极目标。把生成图像复杂度纳入考虑的图像空间方法可能会更接近目标。用于体渲染的原生对象空间技术开销可能会变得非常大,因为有非常多的片元并不会影响最终的图像。一般只有0.2%到4%的片段是可见的。大部分体渲染应用专注于在可视化物体或选定材质区域的边界上。因此,一个体数据记得大部分是被设置为完全透明和不可见的。另外,由于遮挡效应,许多剩余的片元也是不可见的。图5.1和图5.2展示了体可视化中只有很少比例的可见片元的两个典例。

3e06cb89f6f12849b034491b11cd67d6.png
图5.1 动脉瘤数据集的体渲染

d7a6ea8b7e00d5d98b60004e6f295dc8.png
图5.2 鲤鱼CT扫描的体渲染

Ray casting 是一种解决这些问题的著名方法。像第二部分(“基于GPU的体渲染”)中所说的,Ray casting是一种体渲染积分的直接数值计算。对图像中的每个像素,都有一根射线投射到体内部(忽略图像平面可能会有的超采样)。然后在沿光线的离散位置上对体数据进行重采样。图5.3举例说明了Ray casting。通过转换方程,将标量数值映射到光学属性上,这些属性是沿光线累积光信息的基础。从后到前的合成方案,

0fbe1ab5e51aedac9bc43c5d8eabe440.png

变成从前到后的复合方程:

8ffe1254b59796fb98700bfaac7ef626.png

以这种方式,合成可以以与射线传播相同的顺序执行。

ef0301d9d8fd83d88352e6bbe7fe70d0.png
图5.3 Ray casting。对于每个像素,追踪一根视线。射线在离散位置进行采样,来计算体渲染积分。

Ray casting算法能被分为以下几个主要部分。首先,光线需要根据给定摄像机参数和各个像素位置设置好。然后,光线必须沿着射线步进,也就是需要实现一个循环。光学属性在循环内累加。最终当体被遍历过后,需要停止该过程。

Ray casting可以轻松地合并多种加速技术,以克服上述基于切片的体绘制的问题。提前射线终止可以允许我们只要知道摄像机远处的体元素被遮挡了就可以截断射线。在累计不透明度

到达一个用户指定的设置时(通常非常接近于1),可以停止射线传播。另一个好处时一个光线的步长可以与其他光线不同。也就是说可以使用大步长来快速遍历均匀区域或完全跳过空区域。

这些都是很出名的方法,在基于CPU实现的Ray casting中经常使用。本课程这部分的主要目的时介绍GPU架构上的Ray casting和它的加速技术是如何实现的。Ray casting以完全独立的光线形式展现出内在的并行性。这种并行性可以很容易地映射到GPU过程中,例如,通过将一根光线上的操作与一个像素相结合。以这种方式,GPU片元过程(多像素管线)的内置并行性就可以用于实现高效地Ray casting。此外,体数据和其他信息可以存储在纹理中,这样就可以利用GPU的内部高带宽了。

然而,Ray casting的GPU实现必须去解决一些CPU上不会出现的问题。首先,片元程序是不支持循环的。因此,射线遍历的顺序必须通过一段CPU程序来初始化。其次,实现停止射线遍历的条件终止是很困难的。当实现加速技术时,这个问题就会很重要了。

当我们在下两章中讨论基于GPU的Ray casting。第6章重点介绍了均匀网格的射线投射,而第7章介绍了四面体网格的射线投射。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值