赞
踩
我打算尽可能详细整理一下体渲染的光照算法,从一篇比较详细的综述入手,里面的内容会根据需要进行展开。
目录
目录
交互式体光照技术的三个挑战:
科学可视化领域开发体光照模型的主要动机之一是提高视觉感知能力。我们将回顾和比较先进体积照明的现有技术,这些技术的适用性来自于照明能力、性能行为以及技术实现。由于本报告涉及交互式高级体积照明技术,可能适用于科学可视化,因此不考虑在渲染过程中不允许改变传递函数的需要预计算的方法。
我们决定通过采用考虑技术实现、性能行为以及支持的照明效果的分类来实现这一目标。分类中考虑的属性是例如预处理的使用,因为基于预计算的技术通常不适用于大体积数据集,因为预计算的照明技术会消耗太多额外的图形内存。其他方法可能会绑定到某个呈现范式(比如某些体照明方法绑定到了基于光线追踪的算法,某些体照明方法绑定到了基于切片的体渲染算法),该范例充当另一个属性,因为它可能会妨碍以一般方式使用该技术。我们选择了被覆盖的属性,这样分类就可以对现有的高级体积照明技术进行适用性驱动的分组。为了给读者提供一种机制来选择使用哪种先进的体积照明模型,我们将描述这些特性和其他特性以及它们在分类时的含义。此外,我们将指出目前方法的缺点,以证明未来研究的可能性。
当穿透半透明材料时,光的轨迹会发生变化。
而在经典的多边形计算机图形学中,光在表面上的反射通常使用双向反射分布函数(BRDFs)来建模,而在体绘制中,则使用相位函数来模拟散射行为。这种相位函数可以看作是半球BRDF的球面延伸。但是本质上来说,都是定义了光在某个入射方向反射到某个出射方向的量,因此我们可以把这个函数笼统地记做。
为了能够全面概述当前交互式高级体积照明技术,我们将在本节中介绍一个分类,它允许我们对所涵盖的方法进行分组和比较。该分类的目的是为应用程序设计人员在根据需要选择先进的体积照明技术时提供决策支持。
一般来说,体照明技术会依赖相应的渲染范式:这些范例从shear-warp transformation、splatting和texture slicing到volume ray-casting。除了不同的技术实现,渲染图像的视觉质量也因所使用的渲染范式而不同。由于效率在交互式体积照明领域中非常重要,因此已经开发了许多方法,这些方法通过与特定的渲染范例获得性能提升。尤其是在将体照明集成到现有的可视化系统中时,现有方法的底层渲染范式在决定使用哪种算法时可能会受到限制。因此,我们将在后面介绍所涵盖的算法时讨论这种依赖性。
另一个重要的特性是,特定算法支持哪些照明效果。这一方面是根据支持的照明指定的,另一方面是根据体空间内的灯光交互和传播而指定的。支持的照明可以随光源的数量和类型而变化。支持的光源类型从经典的点光源和定向光源到区域和纹理光源。由于许多算法都集中在环境可见度的计算上,我们也考虑了一个全向和均匀的环境光源。因为有些算法对应于固定的范式,所以对光源的位置也是有要求的。最后,支持的光源的数量会有所不同,其中支持一个或多个光源。所讨论的算法也因光在体积内的相互作用和传播而有所不同。虽然所有算法都支持通过局部或全局光传播的单次散射,尽管在不同的频率下会产生软到硬阴影,但并非所有方法都支持多重散射。因此,我们区分了局部散射和全局散射以及单次散射和多次散射。我们将讨论每种覆盖技术的这些能力,并将支持的照明效果与Max的光学模型联系起来。
与计算机图形学的许多其他领域一样,在体绘制中应用高级照明技术需要在渲染性能和内存消耗之间进行权衡。在这个尺度上,最极端的两种情况是照明信息的全部预计算,以及每帧的动态重新计算。我们将通过描述这些技术对性能的影响以及所需的内存消耗,来比较本文中介绍的技术与这种权衡。由于不同的应用场景在交互性程度上有所不同,我们将回顾它们在渲染和照明更新方面的性能能力。一些技术以光照更新时间换取帧渲染时间,因此只要不改变照明关键参数,就允许更高的帧速率。我们讨论渲染时间和照明更新时间,从而区分它们是由照明还是传递函数更新触发的。相机更改时执行的重新计算被视为渲染时间。覆盖技术的内存占用也是一个重要因素,因为它常常受到可用图形内存的限制。一些技术预先计算照明体,例如[Advanced Volume Illumination with Unconstrained Light Source Positioning,Extinction-based Shading and Illumination in GPU Volume RayCasting],而其他技术存储的照明数据少得多,甚至没有,例如[Interactive Translucent Volume Rendering and Procedural Modeling,GradientFree Shading: A new Method for Realistic Interactive Volume Rendering,Image Plane Sweep Volume Illumination ]。
最后,如果可以将体照明方法与剪裁平面和几何体相结合,这一点很重要。在许多标准体绘制应用程序中经常使用剪裁,例如,在三维数据集中集成路径线时,多边形几何体数据的集成在流可视化中非常重要。
为了更容易地比较现有技术和上述能力,我们决定根据算法概念将它们分为五组,以实现最终照明效果。由此获得的组是,第一种:基于局部区域的技术,它只考虑体素周围的局部邻域;第二种:基于切片的slice based技术,通过迭代地切片通过体积来传播照明;第三种:基于光空间的light space based技术,从光源处投射照明;第四种:基于格的 lattice based 技术,直接在体积数据网格上计算光照,而不应用采样;第五种:基于基函数的 basis function based 技术使用光照信息的基函数表示。虽然这种分为五组的分类完全基于用于计算照明,而不是用于渲染物体,但在某些情况下,它可能会齐头并进,例如,当考虑也绑定到基于切片的渲染范式的基于切片的技术时(即,比如我要使用基于切片的技术生成图像,我可能就会选择基于切片的光照技术)。下图显示了五组中每一组的一种代表性技术的视觉输出的比较:
上图是不同体积照明模型的视觉比较。从左至右:基于梯度的着色[Display of Surfaces from Volume Data]、定向遮挡着色[A Directional Occlusion Shading Model for Interactive Direct Volume Rendering]、图像平面扫描体照明[Image Plane Sweep Volume Illumination ]、阴影体传播[ Interactive Volumetric Lighting Simulating Scattering and Shadowing ]和球面谐波照明[Efficient Visibility Encoding for Dynamic Illumination in Direct Volume Rendering ]。除了使用的照明模型外,所有其他渲染参数都是恒定的。
可以看出,当改变光照模型时,视觉效果可能会发生巨大的变化,即使所提出的大多数技术都是基于Max的体光照模型的公式。最显著的视觉差异是阴影的强度和频率,这是基于阴影边界的模糊性而可见的。除了使用的照明模型,所有其他渲染参数在显示的图像中都是相同的。除了支持完全交互式体绘制的五个主要组外,我们还将简要介绍第六种:基于光线跟踪的技术,以及那些仅限于等表面照明的技术。虽然引入的组允许对大多数可用的技术进行充分的分类,但也应提及的是,有些方法可以分为多个组。例如,阴影体传播方法,我们已经分类为lattice based的,它也可以分类为light space based的,因为照明传播是基于当前光源位置执行的。
基于局部区域的技术主要利用的是局部的体素值,通常采用基于梯度的着色,利用phong模型;其他技术一般基于体的数据特性。基于局部的技术也是不同的,例如使用有限差分的体梯度运算符,只考虑临近的几个体素。
其他技术,比如动态环境光遮蔽技术,考虑更大区域的体素范围。但是因为不需要考虑场景全部体素,所以渲染的时间复杂度仅仅为
《Display of surfaces from volume data》
该图上面是吸收发射模型做出来的效果,下面是应用了体梯度和phong的diffuse渲染出来的效果。
表示单位化的体梯度。
在这里,不止表示环境光强度,它是环境光遮蔽和环境光强度的计算结果。光照也可以考虑衰减,但是这个衰减只代表光源距离当前体素的距离,跟光源到该体素之间有没有其他体素遮挡(形成阴影)并没有什么关系。
特别是在处理高镜面反射时,只有当梯度沿边界连续时,才能生成无伪影(artifact free)图像。然而,通常使用局部差分算子来计算梯度,因此得到的梯度会受到噪声的影响。因此,人们开发了几种改善梯度质量的方法,例如《Toward High-Quality Gradient Estimation on Regular Lattices》。除了这种方法只应用于局部之外,梯度计算使得基于梯度的着色高度依赖于渲染数据的信噪比。因此,对于低信噪比的模式,如磁共振成像(MRI)、三维超声或地震数据,不建议使用基于梯度的渲染方法。
《Efficient Ambient and Emissive Tissue Illumination using Local Occlusion in Multiresolution Volume Rendering》
只考虑本地区域的遮蔽效果,可以追溯到obscurance rendering model,
代表沿着采样方向进行一个偏移a,防止自遮挡现象。表示要考虑到的局部区域的半径。代表光在每个采样线的贡献值,如果想要比较明显的阴影,就直接让它等于环境光。不过有另一种设置方法:
这里也可以被设置为加一个emission项,显示为不同组织的类型。
上图中,左边的只有一个外部环境照明。右边的包含了emission项,它的设置与fMRI信号的信号强度成正比。
如果直接这么实现环境光遮蔽,可能需要大量的渲染时间,因此,通过实现采用多分辨率方法《Multiresolution Interblock Interpolation in Direct Volume Rendering》,不同的细节区分会不同,因此,空的均匀区域可以用低层次的细节来存储,则就需要更少的采样操作(这篇论文因为时间关系我还没有阅读,以后再读一下)。
《Interactive Volume Rendering with Dynamic Ambient Occlusion and Color Bleeding》
就是把每个体素四周方向的遮挡保存在有限分辨率图里。
但是如果只是简单地存储的话,消耗就太大了,不值得,所以这里对直方图执行基于相似性的聚类,从而利用矢量量化方法。
(关于如何生成直方图以及聚类的方法,我读了原文,虽然描述比较复杂,但是其实很简单,感觉本文并没有太大的参考价值,但是也不失为一种参考方法。)
聚类后,表示一个簇的局部直方图可以作为2D纹理表使用,在渲染过程中可以访问该表。此外,生成一个包含每个体素的簇ID的标量体,它将体素与存储2D纹理中的局部直方图的相应行相关联。(Color bleeding描述的现象是比如某物体是白色,由于反射其他物体的原因,使得白色物体某部分出现其他物体的颜色。)
因此,我们先从代表性直方图中查找当前体素,然后用传递函数颜色进行调制以生成最终颜色。要将环境光遮挡集成到基于isosurface的体渲染器中,将调制上述基于渐变的着色公式,以便从预计算的数据中导出环境光强度。
计算公式也很简单:
就是计算体素一周所有的遮挡作用。需要注意,圆圈里表示的是周围体素的颜色,表示emission项。
https://sci-hub.se/10.1111/j.1467-8659.2008.01154.x
都是应用sliced-based方法进行的。
在 半角切片阴影 half-angle slice based —— 全网最好和最易懂的算法描述 我进行了详细的描述,这里就不再提了。
关于论文里的其他方面,比如体扰动技术等,以后有时间我会写一下。
《A Directional Occlusion Shading Model for Interactive Direct Volume Rendering》这篇文章感觉有点无聊。
首先为了简单计算,让光源位置和相机位置相同,然后定义了一个向后的相位函数:
然后近似地计算一下圆锥内体素的遮挡,得到阴影效果。
至于怎么在切片上进行坐标映射之类的东西我没有看,感觉没多大用处。
《A Multidirectional Occlusion Shading Model for Direct Volume Rendering》
实话说我并没有彻底get到这个论文的意义,我甚至不太理解上一篇方向遮蔽阴影的意义。可能就是为了强行计算个多散射效果。我简单说一下我的理解:
按照我的理解,上一篇论文里,这个方向遮蔽阴影就是为了模拟一下多散射,就定义了一个圆锥形的区域,然后从摄像机开始出发,通过不断向后推进,来把圆形滤波核区域内所有的遮挡效果都给进行了计算,卷积以后得到的是相当于多个方向的遮挡以及“散射”的效果。
光源和视点在同一方向上。
而这篇论文就是通过定义了椭圆形的滤波核,可以让光的位置进行一定角度的偏移,然后用椭圆形滤波核进行从前到后推进,计算多散射效果的近似。
光源和视点可以不在同一方向上。
总之就是为了计算多散射呗,不然何必这么麻烦得搞滤波核。
假设光源都是从一定方向穿过体空间的,所以只支持单光源。
《Lokovic T , Veach E . Deep shadow maps[C]// Conference on Computer Graphics & Interactive Techniques. DBLP, 2000.》
深阴影映射可以对复杂的、可能是半透明的结构进行阴影处理。虽然标准阴影映射通过投影从光源看到的阴影贴图来支持基本阴影,但它不支持在体绘制中经常出现的半透明遮光器。为了解决半透明结构,不透明度阴影贴图作为阴影贴图的堆栈,在每个阴影贴图中存储alpha值而不是深度值。
然而,对于半透明遮挡器,深阴影贴图是一种更紧凑的表示。它们也由一堆纹理组成,但与不透明度阴影贴图不同,阴影函数的近似值存储在这些纹理中。因此,可以通过使用较少的硬件资源来近似阴影。Hadwiger等人首次将深阴影映射应用于体绘制。
虽然原始的深阴影贴图方法存储每个层中的整体光强度,但是在体绘制中,与体绘制积分类似,存储由累积α值给出的吸收是有利的。因此,对于每个阴影光线,分析α函数,即描述吸收的函数,并使用线性函数进行近似。
为了得到阴影函数逼近的终止准则,可以限制每层覆盖的深度间隔。然而,当确定当前分析的体素不能用线性函数充分逼近时,考虑较小的深度间隔。因此,近似值如下所示:
引入生成深阴影图数据结构时使用的误差阈值来确定当前分析的样本是否可以用线性函数逼近。与原始的深阴影映射技术类似,该误差值限制了近似值的方差,可以通过加或减去每个样本位置的误差值来解决。当α函数不再位于误差阈值给定的范围内时,将开始用线性函数逼近的新段。较小的误差阈值可以获得更好的近似效果,但是需要更多的层来表示阴影函数。Jansen和Bavoil提出了一种不同的方法,他们使用傅立叶级数来近似吸收函数,这种方法特别适用于雾和烟等光滑介质。将不透明度投影到Fourier域中,并使用固定数量的系数将近似值存储在FOM中。这使他们能够在可比的内存消耗和速度上获得比原始深度阴影映射方法更精确的近似值。然而,正如Jansen和Bavoil在他们的论文中指出的,高密度介质可能会导致振铃效应(ringing artifacts)。因此,Delalandre等人改进了FOM方法,并用它来表示透射比而不是不透明度,这使得他们能够快速评估投射光源的单次散射。此外,他们还提出了一种投影采样方案,该方案在光照空间中均匀采样,并允许在渲染过程中整合几何体。Gautron et al.[GDM11]进一步扩展了Delalandre等人的工作,通过编码射线消光的变化并允许使用基于粒子的介质。
一旦获得了深阴影图的数据结构,所得到的阴影信息可以用不同的方式使用。一种常用的方法是利用阴影信息来减小基于梯度的明暗处理时的漫反射。然而,它也可以用来直接调节采样点处的发射贡献。
下图显示了启用半透明阻挡器的深阴影映射与阴影光线和标准阴影映射的比较。正如它可以看到,遮挡结构存在时,深阴影映射会引入伪影(artifacts)。这些结构的阴影显示透明效果,尽管遮挡器是不透明的,这是因为α函数的近似值被利用了,尤其是薄结构,当在太长的深度间隔上近似时,可能会减少。
从上到下依次为:阴影光线,阴影映射,深阴影映射
回到这篇Veach的论文
基于生成阴影贴图的算法,不同于一般的阴影贴图,该算法为深度阴影贴图,包含了每一段的衰减信息(是根据多个采样点采样然后合并出来的),并采用了拟合的数据压缩算法,保证衰减函数的可控点数量一定。该方法仅能支持方向光和点光源。
《Image Plane Sweep Volume Illumination》
使用平面扫描的方法,把照明效果集成到基于GPU的体光线投射器里。平面扫描可以很好地减少体照明的计算复杂性,实现可交互帧率,支持散射和阴影。
由于所有照明计算都直接在单个渲染过程中执行,因此该算法不需要任何预处理,也不需要将中间结果存储在照明体中。因此,与其他技术相比,它的内存占用要低得多。
大概意思就是说,从光平面开始扫描,扫描的结果就投影到成像面上,注意从光平面扫描的结果代表了光不断渗透以后的距离。所以说这个时候dir' 一定要与dir 相互垂直,不然就没法扫描了。
这样的好处是比较容易计算分步积分:一步从s' 到 s'',一步是从 s'' 到 sl (即边界):
对于方向光源:
为了简单计算起见,就把光的方向dir' 给变为水平或者垂直线 dir''。然后逐步得迭代和计算。
对于点光源:
为了方便计算,设置了四个扫描方向,这里单独拎出来一个解释:
为了防止多个方向重叠,每个方向的扫描面区域都限制在从屏幕空间来看的45度范围里。
但是要注意的是,如上图区域的扫描,光深入的方向是从点光源射到体空间的方向向体空间深入的,而不是以点光源为中心向左边不断深入的。由表及里,由中心向外。
《Splatting with Shadows》
首先要计算出光体来存储光在体空间中的衰减,然后再执行抛雪球算法,其中每个雪球受到的光照都不再是以前设置的常量了,而是从光体中插值得到的。
通过在预处理步骤中执行所有与阴影相关的计算,具有阴影的体的渲染与没有阴影的渲染一样高效。只有在光源移动的情况下才需要预处理,但是由于在该阶段也使用了splatting处理,所以它不会比体绘制本身花费更多时间。
其实没啥可说的,最普通的情况就是左图,直接从体素开始向光源方向采样光。中间图是先把每个体素点采样光,生成阴影体,渲染的时候进行插值。右图是对光源方向进行Splatting,生成阴影体,从靠近光源的地方开始Splatting,一直迭代到最后面。
这些技术计算照明都是直接基于底层网格的技术。许多前面介绍的技术都是在计算渲染时照明每个样本,而本技术是通过研究晶格的特性,用来对每个体素执行计算。有些技术还涉及不规则网格,这里就不涉及了。下面的技术都是可以进行交互的。
《Interactive Volumetric Lighting Simulating Scattering and Shadowing》
阴影体传播是一种基于晶格的方法,其中照明信息通过定义体数据集的规则网格在预处理步骤中传播。实现这一原理的第一个算法是由Behrens和Ratering在基于切片的体绘制环境中提出的。他们的技术模拟由一个远光源的衰减引起的阴影。这些存储在阴影体中的阴影是通过逐层衰减照明来计算的。最近,基于晶格的传播概念也被其他人使用,罗宾斯基等人利用这种传播方式可以同时实现高频阴影和低频散射。他们的方法被提出作为一种基于光线投射的技术,它近似于光的传播方向,以便进行有效的渲染。它有助于四通道照明体来存储从体数据集获得的相对于当前设置的传递函数的亮度和散射信息。因此,与Kniss等人类似,间接照明是通过使入射光在以入射光方向为中心的给定圆锥体内模糊来实现的。然而,与前面的基于方向遮蔽阴影(slice-based)的方法不同的是,阴影体积传播仅对色度使用模糊,而不对光的强度(亮度)使用模糊。虽然这个过程在物理上并不正确,但它有助于实现获得更硬阴影边界的目标。
回到这篇论文: 本技术支持阴影和散射效果。
为了有效地逼近体光照模型,提出了一种利用当前gpu的特点的算法。而在标准DVR中,最终颜色是通过沿观察光线的发射和吸收来获得的,为了独立计算散射和阴影贡献,我们采用了另一个概念。当只考虑阴影时,直接扩展到基于GPU的体光线投射器在渲染过程中已经需要大量的开销。每个采样至少需要1条阴影光线。由于采样数直接影响图像质量,因此采样数通常相当高。
因为从渲染的角度考虑的话,阴影的计算量实在过于巨大,因此,不在需要大量采样操作的图像空间中实现体照明模型,而是直接在体空间中实现。从光的位置按从前到后的顺序处理体积,并模糊入射光在一个圆锥体内的色度,圆锥体的尖端指向远离光源的方向。
当光线朝眼睛方向传播时,我们可以根据观察位置从后到前的顺序再次处理光量,并在以观察方向为中心的圆锥体内模糊发出的光,尖端指向眼睛位置。通过整合这一额外的过程,可以避免在某些区域出现黑影,从而获得更生动的图像。因此,附加的性能影响变得与采样率无关,阴影和散射都可以通过复杂度为 O(v·a) 的采样操作来实现,其中v是体素的数量,a是用于模糊间接消色差光贡献的期望邻域的大小。在下面的小节中,我们将解释所描述的体积照明模型的体素空间实现。
注意从光源方向看,在所有能看到的面中F0的面是最大的,所以从F0开始处理,把光的传播方向设置为上面的dirmax。然后从S0一直计算到Smax。
虽然计算方向是dirmax,但是要注意光源的衰减计算方向是按照图上红色圆锥的尖角x指向光源的方向。如上所述,我们考虑的是一个圆锥内的衰减(所以是支持所谓的多散射效果)。
但是无论如何,我并没有从论文中找到任何与面光源渲染有关的地方。。。
《Advanced Volume Illumination with Unconstrained Light Source Positioning》这是另一个论文,内容有点区别。
当光的方向发生变化的时候,以及采用有色面光源的时候的算法:
点光源中光传播是依靠dirmax为主轴的,光源位置改变了,主轴也会改变。照明从不同的方向传播会产生poping artifacts。
因此我们找第二大的面F1,得到其方向dirblend
这样相当于光转动的时候混合两个光传播的效果,
通过简单地将区域光源的足迹投影到体的边界上,可以在不做任何修改的情况下通过体传播产生的辐射。这不会影响性能,只要根据区域光源的中心计算传播方向。理论上,也可以将体光源投影到体的边界上。
Pop artifact - volume rendering
《Interactive Global Light Propagation in Direct Volume Rendering using Local Piecewise Integration》
该方法基于每个体素附近的局部阴影与以高分辨率计算但存储在稀疏网格中的全局阴影的组合,生成的强度用作计算一阶散射效果的附加过程的初始照明。该方法增强临近区域结构的阴影来获得全局阴影效果。深度感知在体渲染一直是比较困难的方面,例如在不同深度具有复杂结构的交织血管的相对距离和连通性有时很难确定。全局光照包括直接光和间接光(其他体素反射过来的光)。
这个论文方法分为了好几步:(1)根据传输函数和光源位置计算全局阴影体,计算基于GPU上的分段积分技术和中间结果的稀疏表示。(2)该方法将到达每个体素的全局光通过在每个体素周围的局部球面邻域中的散射光积分来包含到达每个体素的全局光的一阶散射。(3)在最后一步中,使用单通道光线投射方法来渲染最终图像。最终的应用程序可以更新灯光位置和传递函数,同时保持交互式帧速率,同时模拟真实的灯光模型。
主要贡献:(1)使用局部分段积分的光的体传输的有效近似 (2)由于包含多分辨率数据管理,支持大规模体数据的计算(3)改进的快速方法,支持一阶散射 (4)支持交互式和任意的光源定位(可以在体内或者体外)
本文描述的方法基于局部环境遮挡(LAO)方法来近似具有单散射效应的光的传播。LAO是从包围每个体素的局部体积光源获得的环境光遮挡的有效近似值。入射光的强度是通过沿从体素投射到球体的光线在多个方向上积分的光学深度得到的。LAO可以在增强对形状和组织特性的感知方面取得有希望的结果,但是由于每个体素只被附近的结构遮挡,因此改进的深度感知仅限于局部特征。利用局部分段积分和平面分块多分辨率数据管理,进一步提高了本文所述方法的速度。通过这种数据管理,体积被划分为163个体素的小块,这些体素存储在多分辨率结构中。块被指定一个细节级别(LOD),该细节级别决定了多分辨率结构中块的分辨率。这种数据缩减是基于在当前传输函数中保留结果图像质量,并且忽略非贡献/空块。在多分辨率结构中,块不是根据其空间位置组织的,而是根据其LOD来组织的。
计算光强度的步骤:(1)计算光线分段路径的不透明度 (2)计算全局阴影体 (3)估计全局光对每个体素的贡献 (4)局部一阶散射作用
在算法的第一步中,通过在光源方向上同时投射来自每个体素的光线,将不透明度集成到用户定义的局部邻域中。计算这些局部分段不透明度分段的目的是使每个体素附近的遮挡对象产生高分辨率阴影,并形成快速计算全局不透明度的基础。
(a)图表示局部段的不透明度积分,(b)表示全局段的不透明度积分,(c)表示插值得到直接光照的贡献,但是不如(d),利用分段积分作为初始步骤,因此附近阴影贡献的质量被提高。(e)表示内散射的初始强度近似。
沿一条射线的每个点在一维中的不透明度如(a)所示。局部线段的不透明度积分在(b)中,每个线段的结果不透明度如(c)所示。计算沿整个光线的不透明度为(d),从第一个点到光源,是通过对(c)中的不透明度进行采样,这允许稀疏采样密度。请注意,必须对射线沿线的每个点执行并存储局部分段积分,以允许全局采样从任意点开始。
计算每个段的积分表,然后使用的时候,就把每个段的值相乘就好了:
因为这个表示每段积分的不透明度体是与光源方向有关的,因此是无法支持面光源的,只能支持点光源和方向光源,而且是单光源(除非给两个光源实现两个阴影体,但是太慢,得不偿失)。
《Real-Time Ambient Occlusion and Halos with Summed Area Tables》
对于体模型来说,很多光学效应都很难实时生成。它们可能对渲染时间有重要影响,或者它们需要预先计算,阻止了以交互方式更改传递函数,因为它决定了遮挡。本文提出了两种在体模型上快速生成环境遮挡的方法。第一种是屏幕空间方法,它不需要任何预先计算的数据结构。第二种方法是独立于视图的方法,它以密度值的总面积表的形式存储体信息,因此,允许按需交互改变传递函数,但是要以牺牲内存空间为代价。尽管这两种方法都能获得相似的质量结果,但是3D版本更适合于具有不连续结构的对象,如血管或肠道,并且它可以产生更好的帧速率。屏幕空间版本更适合于有限的GPU内存环境,因为它不需要额外的3D纹理存储。作为一个额外的结果,我们的屏幕空间技术还允许使用相同的数据结构计算视图相关的、可交互配置的光晕(halos)。
这两种技术的视觉质量是相似的,除了结构的深度变化出现大。在这些情况下,vom可能会生成过冲区域,DSAT3D可能更合适。
区域求和表就是从(0,0)一直求和到当前点(x,y)的表:
,它提供了一种在固定时间内计算图像中任意大的矩形区域内值的方法。为了计算t的矩形区域的值之和,只需要四次访问
体模型的环境光遮挡为邻近着色。这项技术是专门为提高体模型的深度感知而设计的。最初的想法来自于一种称为暗斑的全球照明的快速估计方法。对于一个曲面点,该算法通过测量点附近的遮挡情况来衰减来自空间中各个方向的光照。为了做到这一点,遮挡是通过采样要着色的体素的环境超过1000个采样方向来计算的。虽然所开发的算法可以有效地跟踪光线,但是采样如此多的方向会对渲染时间产生重要影响。最近的论文讨论了基于环境光遮挡的实时阴影生成。不幸的是,他们中的大多数要么需要一套预先计算的结构,要么需要三维几何知识。我们的方法不需要预计算,也不需要几何知识,这在体绘制中通常是不可用的。请注意,在体绘制中,着色取决于传递函数,因为该函数确定遮挡,并且可以交互更改。
具体方法见:基于区域求和表的实时体渲染环境光遮蔽和光晕技术
《Extinction-based Shading and Illumination in GPU Volume RayCasting》
我们解决这些问题的新方法的限定思想是基于DVR积分的原始指数消光系数的解决方案,以及基于GPU的高效实时求和机制。除了对体绘制积分的更精确的评估外,作为附加的有益消光系数特性允许在沿射线采样时独立地进行离散求和。为了解决上述光照问题,获得快速、合理的体积光照和阴影效果,本文将阐述基于原始指数消光系数的特殊算法和数据结构。
创新点:(i) 提出了一种适用于局部环境遮挡和方向性软阴影以及均匀光散射和颜色溢出的统一近似模型。(ii)该模型基于指数消光系数的求和,利用三维区域求和表(SAT)进行快速计算。(iii)可重复使用与环境光遮挡相同的SAT来计算方向性软阴影,对性能的影响最小。(iv)所提出的离散消光系数总和支持距离加权环境遮挡和阴影贡献。(v) 引入的解决方案不需要昂贵的预处理,并且允许交互式TF更改。(vi)支持多个以及动态点光源和聚光灯光源。此外,任意光源位置也允许在实际体数据内。(vii)该模型集成在基于光线投射的高质量体可视化应用程序中,并在GPU上实时工作。(viii)在运行时,需要一些额外的3D纹理存储来保存TF相关的消光系数。然而,这些数据可以根据分辨率精度和存储开销进行灵活调整。
3D SAT用于模拟环境遮挡、颜色溢出、定向软阴影和散射效应,方法是利用透射率方程中指数消光系数的总和:
传统上,这个方程是用泰勒级数展开来近似的,结果是a-混合运算。但是,当前的gpu不需要执行这种近似,它允许以任何顺序拆分和执行求和。然后,可以使用3D SAT来近似一组方向的指数和,从而显著降低计算成本。
基于消光的着色使用由一系列轴对齐的长方体形成的区域求和表来计算朝向灯光的综合消光。
基本上,所谓的光缓存(texture T)是计算包含AO/颜色溢出和纹理不同通道中的方向阴影的总和项的。
Schlegel等人报告说,对于半径不超过数据集范围的10%,三个shell就足够了。通过估计光源定义的圆锥体,将定向软阴影和散射效果结合起来。用一系列长方体来近似圆锥。SAT结构中的纹理访问只能进行轴对齐,因此长方体被放置在两个轴对齐的平面上,圆锥体的投影尺寸最大,主轴被定义为朝向光源角度最小的轴。由于计算消光而不是光的传播,所以光源不局限于体之外。
基于消光的着色和照明并不局限于任何特定的渲染范式,尽管它是为光线投射而实现的。该技术可以处理点光源、定向光源和面光源。必须估计每个附加光源的消光,这意味着渲染时间随着光源数量的增加而增加。在内存消耗方面,SAT需要额外的3D纹理,其分辨率可低于体积数据,但仍能产生令人信服的结果。由于3D-SAT计算速度快,分辨率较低,因此可以交互地改变裁剪平面。
《Fast Global Illumination for Interactive Volume Visualization》
光传播体积将光照注入网格,并根据对流convection扩散方程传播光。方程的对流部分描述了直接光如何在体介质中传播,而扩散部分描述了间接光如何在体积介质中散射。
Geist等人使用lattice-Boltzmann方法来解决光传输问题,但是他们的方法没有达到交互式帧速率。最近,Kaplanyan和Dachsbacher提出了一种使用球谐函数的实时方法。他们介绍了一种新的传播方法,只需要光在主轴方向之间传播,而不是在其他方案中的26个方向。然而,该方法主要集中于低频照明,并模拟single-bounce的间接光。Zhang和Ma提出了一种既模拟单次散射又模拟多次散射的方法,能够达到交互式帧频。对于扩散方程,用微分形式描述:
第三项,可以直观地将散射理解为各向同性介质中的散射。为了求解这一方程,Zhang和Ma将辐射分布离散为均匀网格,并将计算分为对流和扩散两个步骤,这两个步骤都在GPU上进行。通过假设每个网格点的直接光传播是唯一的,可以丢弃辐射的方向部分,只需要存储颜色通道,从而减少存储需求。对流步骤计算每个光源的直接光传播。辐射网格首先使用方向光源和点光源的不同边界条件初始化,本质上是在光体积的边界处注入光。除此之外,体内的点光源采用高斯函数近似,并注入网格中。一旦初始化,使用first-order upwind格式来传播光,直到获得稳态解。将每个光源的传播结果相加,然后在扩散步骤中用作初始估计。以时间t=1为最终照明量,采用高斯-赛德尔方法求解扩散步骤。一旦光线被传播,渲染阶段使用标准光线投射和Phong着色以及从照明体积的简单查找来获得沿光线位置的辐射度,从而在更改视点时允许实时帧速率。
由于该方法只在呈现期间应用查找,因此可以与其他呈现范例结合使用。它支持多个动态移动的方向光源和点光源,这些光源可以放置在场景中的任何位置,并进行交互式更新。然而,Zhang和Ma报告说,由于使用了first-order upwind格式,仅支持软阴影。多重散射由各向同性相函数的假设来支持。当传递函数或光源发生变化时,需要重新计算光的传播,但可以通过迭代的方式来求解,以改善相互作用。只需执行一次查找即可获得较低的渲染时间。在计算期间,除了最终照明体积外,还需要两个临时三维照明体积,每个体积由三个通道组成。然而论文中说使用原始分辨率的一半可以获得合理的结果,这降低了内存需求。
该技术基于将光辐照度和从边界到采样点之间的不透明度区域区分开的技术,辐照度和可见性分别来计算,因此光源可以在避免可见性更新时被动态改变。
此外,光源组成可能是复杂的,因为它们被投影到另一个独立于光源数量的基上。
为此,在体绘制领域中使用的唯一基本函数是球谐函数。然而,为了能够将未来的技术纳入我们的分类中,我们决定让这一组更通用,就将基函数技术列为了一个大组。提供基于球谐照明的详细介绍超出了本文的范围,我们只关注体绘制的特定特性。尽管如此,我们将提到两个重要的属性。第一个特性是可以进行有效的积分计算,它支持实时计算球体上的入射辐射。第二个特性是它可以动态旋转,因此支持动态光源。虽然Beason等人首次在体绘制中使用球谐函数来增强等值面着色,但在本节中,我们将介绍在直接体绘制中应用球谐函数的算法。
未完待续
上述工作主要集中在提高交互式体绘制应用中的光照真实感。这通常是通过对照明设置或照明传播的假设来实现的,例如,假设只发生定向散射。由于光线跟踪在多边形绘制中得到了广泛的应用,以支持物理上正确的图像,因此一些作者也在体绘制领域研究了这一方向。用于基于梯度的着色方法的梯度也可以用于实现支持更物理正确照明的体光线跟踪器。《A simple and flexible Volume Rendering Framework for Graphics-Hardware-Based Raycasting》提出了一种只考虑一阶射线的方法,通过他们的方法,能够通过投射光线并计算其偏转来模拟镜面反射和折射。为了模拟镜面反射,它们执行环境纹理查找。其他人提出了更复杂的折射方法《Refraction in Volume Graphics》《Accelerated, High-Quality Refraction Computations for Volume Graphics》。蒙特卡罗射线追踪方法也被应用于交互式体绘制领域,以产生逼真的图像。这些方法的好处是,它们直接与基于物理的光传输耦合。Rezk Salama《GPU-Based Monte-Carlo Volume Raycasting》提出了第一种基于蒙特卡罗的方法。它支持单次和多次散射,从而通过将昂贵的散射计算仅约束到选定曲面来实现交互。但是,由于此限制,无法渲染半透明材质,例如云。
最近,Kroes等人《Exposure Render: An Interactive Photo-Realistic Volume Rendering Framework》提出了一种交互式蒙特卡罗射线跟踪器,它不限制对选定边界面的散射。他们的方法模拟了影响体积照明的几个现实世界因素,例如多个任意形状和纹理的区域光源、具有镜头和光圈的真实世界摄影机以及复杂的材质特性。这种组合允许生成显示高度真实感的图像。为了充分表示体和类表面材料,他们的方法使用随机抽样和梯度大小作为阈值,以确定是否应使用BRDF或相位函数来表示材料。它仅限于单次散射,并使用渐进式方法来允许交互(就是转动视角以后逐帧累加)。结果表明,当裁剪平面或传递函数等参数发生变化时,图像会在大约0.5到1秒后收敛。此方法需要额外的数据来做滤波核噪声移除,但是该方法就内存用量而言不依赖于数据集大小。
上面的技术有些不止可以用于直接体渲染,还可以用于等值面渲染。处理体渲染的时候可能还需要传输函数来设置不同的消光系数,但是处理等值面只需要一个单一的等值面值即可,从而减少了光与其他体素之间的交互作用。
邻近着色《Vicinity Shading for Enhanced Perception of Volumetric Data》通过考虑相邻体素来模拟等参曲面的照明,是解决从体数据中提取的等值面高级照明的第一种方法。该方法有一个预计算步骤,其中分析每个体素的附近区域,并将表示体素遮挡的结果值存储在着色纹理中,该纹理可在渲染期间访问。
《Interactive Display of Isosurfaces with Global Illumination》和《Pre-computed Illumination for Isosurfaces》专注于基于球谐函数的预计算,支持在静态照明条件下显示等表面。《Isosurface Ambient Occlusion and Soft Shadows with Filterable Occlusion Maps》利用环境光遮挡方法渲染平滑着色的等值面。最近,《Adding Shadows to a Texture-Based Volume Renderer》演示了如何将照明采样与等值面生成分离,以获得复杂的等表面照明结果。
除了上述技术见解和可实现的照明效果外,当前技术的感知影响也是相关的。不过很少有人会系统去调查感知影响。
为了分析阴影体传播技术的影响,一项研究《Interactive Volumetric Lighting Simulating Scattering and Shadowing》显示了高级体照明模型的感知优势。参与这项研究的用户必须根据静态图像的深度感知来执行一些任务,其中一组使用基于梯度的着色生成,另一组使用阴影体传播生成。研究结果表明,当使用阴影体传播时,深度感知更准确,执行速度更快。
Šoltészová等人在交互式体绘制《Chromatic Shadows for Improved Perception》的背景下,评估了彩色软阴影的感知影响。受插图画家的启发,他们用色度混合来代替通常出现在阴影区域的亮度下降。在他们的用户研究中,他们展示了这些彩色阴影在深度和表面感知方面的感知优势。然而,他们的研究结果也表明,较亮的阴影可能会对图像的感知质量产生负面影响,因此应加以考虑。Šoltészová等人还评估了具有朗伯着色的曲面对曲面倾斜的感知《A Perceptual-Statistics Shading Model》,发现存在系统性失真(systematic distortion)。他们创建了一个预测模型,用于改变表面倾斜阴影的法线或渐变,使其被视为ground truth。当角度在40-60°之间时,这可以改善表面倾斜的感觉。下图显示了应用校正模型前后的差异:
一具木乃伊的CT扫描,显示有(左)和无(右)知觉梯度校正的朗伯阴影对比。
《About the Influence of Illumination Models on Image Comprehension in Direct Volume Rendering》提出了一项用户研究的结果,他们研究了七种体照明技术对知觉的影响。在他们的研究中,深度和体相关的任务必须执行。他们指出,先进的体照明模型在有必要评估图像中体空间中物体的深度或大小时会有所不同。然而,他们找不到执行某项任务所用时间与所用照明模型之间的关系。研究结果表明,定向遮挡阴影模型具有最佳的感知能力。
在光源放置方面,《Depth discrimination from shading under diffuse lighting》表明,与放置在观察方向下方相比,如果定向光源稍微向左或向右倾斜,则会增加局部形状感知。他们进一步表明,漫反射光和来自右上角或左上角的光一样能产生良好的形状感知。《Distortion in 3d shape estimation with changes in illumination》表明,在局部照明下使用单点光源时,形状感知严重依赖于光源位置。《Lightkit: A lighting system for effective visualization》提到创建更复杂的灯光设置可以增加形状感知。如前所述,《The effect of shadow quality on the perception of spatial relationships in computer generated imagery》表明阴影的清晰度提高了形状匹配的准确性。《Use of interreflection and shadow for surface contact》相互反射(多重散射)是除了阴影以外,来确定物体接触的重要线索。《A comparison of the perceptual benefits of linear perspective and physically-based illumination for display of dense 3d streamtubes》也使用了相互反射,这表明基于物理的照明在某些情况下可以增加对三维流场几何的感知。
这篇文章里面的技术都是允许交互帧率的,但是还是有一些问题的:
这篇文章讨论了交互式体绘制中体积照明模型的研究现状。我们用统一的数学符号对所涵盖的技术进行了分类和解释,并阐述了视觉效果。因此,本文既可作为现有技术的参考,也可用于确定在特定情况下应采用哪种先进的体照明方法。我们希望这有助于研究人员和应用程序开发人员尽早做出正确的决定,并确定未来工作的挑战。
参考文献:
A Survey of Volumetric Illumination Techniques for Interactive Volume Rendering
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。