精华内容
下载资源
问答
  • A Practical Model for Subsurface Light Transport 一个次表面光传输的实用模型 Henrik Wann Jensen Stephen R. Marschner Marc Levoy Pat Hanrahan 斯坦福大学 摘要 本文介绍了一种描述半透明材质的简单的次...

    A Practical Model for Subsurface Light Transport

    一个次表面光传输的实用模型

    Henrik Wann Jensen Stephen R. Marschner Marc Levoy Pat Hanrahan

    斯坦福大学

    注:这里是直接word导出来的,某些公式可能会被吃掉,更完整的文章可以看这里

    摘要

    本文介绍了一种描述半透明材质的简单的次表面光传输模型。该模型可以有效模拟BRDF模型无法捕获的效果,如颜色在材质内部的渗色和光线在阴影边界的漫反射。即使对于使用现有方法进行模拟的各向异性高散射介质也是有效的。该模型将单个散射的精确解与多重散射的偶极子漫反射近似相结合。我们还设计了一种新的,快速的基于图像的测量技术用于确定半透明材质的光学性质。我们通过比较预测值和测量值来验证模型值,并展示了该技术如何用于恢复各种材质的光学性质,包括牛奶,大理石和皮肤。最后,我们描述了在常规射线追踪器中使用该模型的采样技术。

    1. 简介

    通过材料对光的散射进行准确建模是实现真实图像合成的基础。即使最复杂的光传输算法也不能产生令人信服的结果,如果局部散射模型太简单。因此,大量的研究已经描述了材质的光散射。

    以前的研究集中在开发双向反射分布函数模型(BRDF)。 BRDF由Nicodemus [14]引入,作为更一般的双向次表面散射分布函数的简化(BSSRDF)。BSSRDF可以描述与表面相交的任何两个射线之间的光传输,而BRDF假定光线进入材质并在同一位置离开材质(图1)。这种近似值对于金属是有效的,但它对于在表面下表现出显著传输的半透明材质而言是不适合的。即使对于许多看起来不透明的材质,使用BRDF只能创建一个硬的,边界明显的计算机生成的外观,因为它不会局部混合表面特征,如颜色和几何体。只有考虑次表面散射的方法才能捕捉半透明材质(如大理石,布,纸,皮,牛奶,奶酪,面包,肉类,水果,植物,鱼类,海水,雪等)的真实外观。

    1. 准备工作

    几乎所有的BRDF模型都是衍生自次表面散射,任何次表面散射都由Lambertian分量近似。一个例外是Hanrahan和Krueger [10]的模型,其包括在均匀照明平板中单散射的分析表达式。但是,所有BRDF模型最终都假定光在一个表面点散射,他们不会将次表面散射从一个点模拟到另一个点。

    通过求解全辐射传递方程,可以准确地模拟次表面传输,但是很慢[1]。图形学中只有几篇论文采用这种方法进行次表面散射模拟。Dorsey等人[5]使用光子映射模拟完全次表面散射,以捕获石头风化的外观。 Pharr和Hanrahan[15]使用散射函数来模拟次表面散射。这些方法,虽然能够模拟所有的次表面散射的效果,但是与不透明材料的模拟相比,在计算上非常昂贵。基于路径采样的技术对于高散射材质来说是特别低效的,诸如牛奶和皮肤的材质,其中光在离开材质之前散射多次(通常几百次)。对于高度散射的介质Stam [17]引入了漫反射的使用理论。他使用多网格方法解决了漫反射方程的近似,并使用此方法来渲染云的多重散射。

    次表面散射在医学物理学中也是重要的,在人体组织中[6,8]已经开发了用于描述激光散射的模型。在这种情况下,通常使用漫反射理论预测以及测量高散射材质的光学性质。我们已经通过添加精确的单散射扩展了这个用于计算机图形学的理论,支持任意几何,以及用于渲染的实际采样技术。

    在计算机图形外观测量中,很少考虑次表面散射。Debevec等人 [3]测量人脸的光反射,其中包括次表面散射的贡献,但它们并没有将数据与材料的物理性质相关联。再次建立在医学物理研究上[8,9],我们将开发用于测量生物组织的方法扩展到半透明材质的快速成像外观测量技术。该方法检查由照射样品材质的光束产生的径向反射率分布。通过拟合从漫反射理论得到的表达式,可以估计材质的吸收和散射性质。

    1. 理论

      对于BSSRDF公式, 其中的S, 是指出射辐射率,是指在方向上点的光入射的流量,是方向上点的光入射流量:

      图1:光的散射,a是BRDF,b是BSSRDF

      BRDF是BSSRDF的近似,它假设光线的射入和离开在同一点(例如,). 给定BSSRDF,通过将入射方向和面积A上的入射辐射率积分,计算出射辐射率:

    参与介质中的光传播由辐射传输方程描述,在计算机图形中通常称为体绘制方程:

    在该等式中,介质的性质如下所述,吸收系数,散射系数,相位函数。消光系数定义为,。我们假设相位函数是归一化的,等式成立,仅当相位角。这意味着散射角的余弦,,是

    如果g为正,则相位函数主要是前向散射;如果g为负,则主要是后向散射。一个常数相位函数会导致各向异性散射(g=0)。

    对于进入均匀介质的无穷小波束,传入的辐射率将随着距离s而呈指数下降。这也适用于降低的强度:

    被降低强度的一阶散射,,可能被视为一个体积源:

    为了深入了解光传播的体积行为,求点x的所有方向上辐射传输方程的积分是很有用的,它将得到:

    该方程涉及标量辐照度,或称积分通量,,以及向量辐照度,。在没有因吸收而损失或由于体积光源()而获得增益的情况下,矢量辐照度的偏差等于0.在这个方程中,我们介绍了一个0阶源项,,后面我们将介绍1阶源项,,其中

     

    2.1 漫反射近似

    漫反射近似基于这样的观察,光分布在高散射介质中趋于同向异性。即使在初始光源分布和相位函数是高度各向异性的情况下也是如此。每个散射事件都会模糊光分布,结果导致了随着散射事件数量的增加,光分布趋于均匀。在这种情况下,辐射率可以通过一个二项展开式来模拟,包括辐射通量和向量辐照度:

    常量由积分通量和向量辐照度来决定。漫反射方程由这个近似得出。特别地,我们将这个辐射率的二次展开式带入辐射传输方程然后求的积分;代数细节参考Ishimaru[12].结果是

    (2)

    我们使用减少的消光系数,,它由下列公式给出:

    减少的散射系数由原始散射系数乘以获得。直观地,一旦光变成了各项同性,只有后向散射项改变了净通量,前向散射和无散射是无法区分的。

    在没有光源或者光源是各向同性的情况下,从等式2中消失了。然后向量辐照度是标量积分通量的梯度,

    在这里是漫反射常量。该方程精确定义了从高能量密度区域(高积分通量)到低能力密度区域的净能量流(即非零向量辐照度)的直观概念。最后,将等式2带入等式1,我们得到经典的漫反射方程

    漫反射方程在无限介质中的单个各向同性点光源的情况下具有简单的解决方案。

    其中是点光源的功率,r是到点光源的位置的距离,是有效传输系数。点光源导致体积中的能量密度以指数衰减。

    在有限空间的散射介质的情况下,漫反射方程必须经过适当的边界条件来解决。边界条件是指净内向漫反射流量在表面上的每一点,,为0

    这里,表示在内向方向的半球上的积分。使用二项展开式,边界条件为:

    (3)

    第二项中的负号是由于表面法线指向外,然而积分是遍历内向方向(whereas the integral is over inward directions)。

    等式3涵盖了两层具有匹配的折射率的情况,但另一个重要的问题是这些折射率不同。当在具有不同折射率的介质之间存在界面时,界面处会有反射。假设是电解质界面处描述反射率的菲涅尔公式,平均漫反射菲涅尔反射率为

    其中是具有反射光线的介质到另一个介质的相对折射率。可以从菲涅尔公式[13]分析计算。然而,我们将使用测量的漫反射率的有理近似[7]:

    两个不同折射率的介质之间的边界条件是:

    这里+和-的下标表示外向和内向的方向。这将产生:

    注意,由于一个积分遍历外向的方向而另一个积分遍历内向的方向,所以产生该方程的两侧之间的符号的差异。重新排列项:

    该边界条件与当折射率匹配时(等式3)相同;唯一的区别在2D被2AD替换,其中

    最后,边界条件允许我们计算BSSRDF的漫反射项,。等于辐射出射率除以入射通量。离开表面的辐射出射率()等于表面的积分通量的梯度。

    其中。

    在有限介质的情况下,漫反射方程通常不具有分析解。在本文中,我们对次表面反射感兴趣,这通常被建模为半无限平面平行介质。几位作者分析了简单几何源的平行问题,特别是进入介质的圆柱体的近似。存在精确公式,但是它们涉及到贝塞尔函数的无穷大[9, 16]。我们寻求一个适合建模次表面反射的简单公式,它不涉及无限求和或者微分方程的数值解。

    Eason[6]和Farrell等[8]已经开发了一种使用两个点源近似体积源分布的方法;也就是偶极子。Eason介绍了这一想法,并通过他们的矩的项中扩展源分布,为各种几何形状(如圆柱体)的偶极子推导了明确的公式。Farrell等人,提出通过使用单偶极子来表示入射光源分布。他们发现使用单个偶极子与使用具有真实源分布的漫反射近似一样准确,或者在某些情况下更准确。

    偶极子方法包括在表面附近定位两个点源,以满足所需的边界条件[6](见图3)。其中一个点源,正真实的光源,位于表面下方的距离处,另一个是负虚拟光源,位于表面上方距离。所产生的积分通量是

    是x到真实点源的距离,是x到虚拟点源的距离。Farrell等人[8]提出将实际光源定位在距离,或一个在表平面下方的自由路径上。他们只考虑了平行于法线的光。对于其他方向的光,可以通过直接将光源直接置于以下来实现。

    现在可以计算由偶极子源引起的漫反射。

    最后,我们需要考虑入射光和出射光在边界处的菲涅尔反射。

    其中是BSSRDF的漫反射项。该项表示多次散射(一个散射事件已经包含在点源的转换中)。下一节将介绍如何计算单次散射的贡献。

    图3:一个入射光线被转换为一个偶极子来近似漫反射。

    2.2 单次散射项

    Hanrahan和Krueger[10]已经得出了一种BRDF模型,用于次表面散射,从而分析计算了平坦,均匀照明的均匀平板的总一阶散射。在本节中,我们将展示如何将BRDF扩展到BSSRDF,以便解释表平面上的照明的局部变化。

    通过对沿着折射出射光线的入射辐射率进行积分来计算单次散射,最终获得总外向辐射率(见图4):

    这里是两个菲涅尔传输项的乘积,和是折射的进出方向。组合的消光系数由给出,其中G是几何因子;对于一个平坦的表平面。单次散射BSSRDF,,由该等式的第二行隐含地定义。注意,第一行之间存在变量的变化,它只对两个折射射线相交的部分进行积分,而第二行,对所有的入射和出射射线进行了积分。这意味着分布包含了一个增量函数。

    2.3 BSSRDF模型

    完整的BSSRDF模型是一个漫反射近似项和单次散射项的总和。

    这里使用等式5来评估,并且使用等式6来评估。BSSRDF的参数是,,以及有可能是一个相位函数(没有相位函数,散射可以被建模为各向同性)。该模型对表面上不同位置的光传输进行了描述,并且它模拟了方向分量(由单次散射产生)和漫反射分量(由多次散射产生)。

    最后,注意在单次散射项和漫反射近似中都涉及到的距离。平均出射点是一个从入口点近似的平均自由程。但是,两个平均自由程有相当不同的长度尺度。对于单次散射,平均自由程等于,对于漫反射,平均自由程等于。对于半透明材质,其中(远大于),因此,随着到的距离的增加,单次散射项减少的比漫反射项快得多。

    图4 单次散射仅在折射的入射和出射射线相交时才发生,并且被计算为沿折射出射射线的路径长度s上的积分。

    2.4 BRDF近似

    假设入射光照是均匀的,我们可以用BRDF来近似BSSRDF。这个假设使得它可以在表面上对BSSRDF进行积分。通过对漫反射项进行积分,我们发现材质的总漫反射是:

    注意漫反射仅取决于减少的反射率和内部反射参数A。

    单次散射项的积分得出了[10]中的模型。对于半无限介质,有:

    完整的BRDF模型是单次散射近似和经过菲涅尔项缩放的漫反射之和:

    该模型和BSSRDF具有相同的参数。它与[10]中提出的BRDF类似,但与内在材质参数计算出的漫反射光量有重要的区别。该BRDF近似对于具有非常短的自由平均程的不透明材料是有用的。

    3 测量BSSRDF

    为了验证我们的BSSRDF模型,并确定渲染不同种类材质的适当参数,我们使用第2部分的漫反射理论来测量几种介质中的次表面散射。我们的测量方法适用于半透明材质,其中,意味着远离照明点足够远,我们可以忽略单次散射,并使用漫反射项将测量与材质参数联系起来。

    当多重散射成为主导时,公式4预测了由于入射光束而被观察到的每单位入射光束的辐射出射率,作为距离照明点的距离的函数。为了进行相应的测量,我们用紧密聚焦的白光束照射样品的表面,并使用3-CCD摄像机拍照,观察整个表面的辐射出射率。我们将观测保持在恒定的角度,使得菲涅尔项在所有测量中保持不变。 图5(a)说明了我们的测量设置。

    图5 (a)测量装置(b)几种材质的测量参数

    因为信号从照明点指数地下降,所以测量必须跨越宽的动态范围。为此,我们使用了一系列不同的曝光时间,范围从1毫秒到4秒,并使用Debevec和Malik技术的修改版本组装了一个高动态范围的图像[4]。为了减少杂散光和固定图案CCD噪声的影响,我们从每个测量和参考图像中减去在聚焦透镜(图5(a)中的点A)之前阻挡的照明光束拍摄的暗图像。 所产生的图像具有约的动态范围(图像中少量的总能量减少了透镜和照相机闪光的影响,允许了更高的动态范围的可能性)。

    为了解释这些测量值,我们仅检查每个测量图像的1D切片,对应于在表面上的经过照明点且和相机视角方向垂直的线。在假设光漫反射出来的情况下(注:我们通过检查不同出射角的反射率验证了大理石的这个假设,并且它非常类似于经过了菲涅尔透射项缩放的Lambertian材质),该切片中的像素值(参见图6作为示例)是作为表面上的距离函数的辐射出射率的测量值。由于给出该量与的比率,因此,其中K是一个未知常量。为了消除缩放因子,我们还采用了白色理想的漫反射器的采样作为参考图像(Labsphere Spectralon,反射率>0.99)。通过对图像中的所有像素进行求和,我们可以将辐射出射率积分得到离开表面的总通量,这对于该特殊材质来说与入射通量相等。使用上述相同的常数K,这个求和是,其中A是一个像素所对准的样品表面上的(已知)区域。然后可以计算的测量值是

    原则上,可以通过在距离照明点足够远的距离范围内使用等式4拟合相对反射率曲线来确定,以允许使用漫反射理论[8]。然而,我们发现这个拟合问题相当困难,结果参数的不确定性导致了材质外表的太多不确定性,特别是总漫反射率。

    我们通过测量总漫反射率R(它是测量图像的总和除以参考图像的总和)和计算受制于约束条件的最小二乘法匹配值来消除这种不良影响。

    图6 使用漫反射理论拟合的大理石测量数据(绿色波长带)以及使用蒙特卡洛模拟法进行检验

    图6显示了这些测量值如何证实了漫反射理论在白色大理石样品上的应用(仅显示了相机的绿色通道)。将理论(实线)拟合到数据(点),得到参数。使用这些值(虚线)通过蒙特卡洛模拟法计算的反射率证实了被计算参数的正确性。几种其他材质的拟合值见图5(b)的表格。注意,我们使用大多数材质折射率的经验值。还要注意,漫反射理论假设,因此相对的不透明材质的参数(例如番茄酱的蓝色波长)可能不太准确。

    4 使用BSSRDF渲染

    在理论部分推导出来的BSSRDF模型仅适用于半无限均匀介质。在任意几何和纹理变化的存在下,类似的推导是不可能的。然而,我们可以使用理论背后的一些直觉将其扩展到计算机图形学的使用模型上。具体来说,我们需要考虑:

    图7 (a)采样一个BRDF(传统采样),(b)采样一个BSSRDF(采样点和光一样分布在表面上)

    • 包括重要性抽样的BSSRDF的高效积分
    • 任意几何体的单散射求值
    • 任意几何体的漫反射近似
    • 纹理(物体表面上的空间变化)

    在本节中,我们将介绍如何在光线跟踪环境中执行此操作。

    对BSSRDF求积分:在每个射线对象交点处,传统照明模型(基于BRDF)只需要一个点和一个法线来计算出射辐射率(图7(a))。对于BSSRDF,需要对表面的一个区域进行积分(图7(b))。我们通过随机抽样阴影射线的两个端点的位置来实现这一点——这可以被看作是采样区域光源的经典分布光线跟踪技术的扩展[2]。为了有效地对表面上的位置进行采样,我们利用漫反射项和单个散射项中的指数衰减。我们分别对BSSRDF中的两个项进行采样,因为单个散射样本位置必须沿着折射出射光线,而漫反射样本应该分布在周围。

    更具体地说,对于漫反射项,我们使用标准蒙特卡洛技术随机地从距离d处按密度进行采样。

    由于入射光线和出射光线必须相交,单次散射被重新参数化。我们的技术将在以下部分进行说明。

    任意几何的单散射求值:沿着折射出射射线,使用蒙特卡洛积分对单散射进行求值。我们选择一个随机的距离,,沿着折射出射射线。这里是均匀分布的随机数。对于这个样本位置,我们计算的外向散射辐射率为:

    这里的是样品射线穿过材质的距离。对于任意几何来说,优化这个方程来采样直接光照(带阴影射线数)是困难的,因为它需要找到阴影射线被折射的表面处的点。然而,在实践中可以通过使用在表面不折射的阴影射线来达到良好的近似——这假设光源与介质的平均自由程的距离很远。我们可以使用斯涅耳定律来估算通过介质的入射光线的真实折射距离:

    这里是观测距离,是折射距离。

    图8 激光在大理石中的散射。大理石宽为40mm,并且具有显著的次表面散射现象。左图是大理石的照片,右图是使用BSSRDF模型和大理石测量的散射特性进行类似方块大小的人工渲染。注意两个图像的外观是非常相似的。

    任意几何体的漫反射近似:漫反射近似的一个重要组成部分是偶极子源的使用。如果几何体是局部平坦的,我们可以通过使用类似的偶极子源配置来获得非常好的近似(即,我们总是把光源放置在下方处)。当存在高度弯曲的表面时需要特别注意;我们通过使用的最小距离来对漫反射项进行求值以处理这种情况。通过这种方式,我们消除了锐利边缘处的奇异点,其中源可以任意靠近。我们发现这种方法在我们的实验中工作的很好。

    纹理:我们通过在使用BSSRDF时制造一些小的改变来近似纹理材质。我们只考虑纹理表面的变化——基于体积纹理变化的效果需要一个全面参与介质的模拟。对于漫反射近似,我们总是使用材质参数,这确保纹理特性的自然局部混合。对于单散射项,我们使用沿着折射出射射线的和,以及沿着折射入射射线的。这些变化包括在等式6中。

    5 结果

    我们已在蒙特卡洛射线追踪器中实现了BSSRDF模型,本节将介绍通过实现获得的一些实验结果。所有的仿真都是运行在Linux的双800MHz Pentium III PC上完成的,并且使用宽为1024像素,每像素采样4次进行图像渲染。

    我们的第一个模拟如图8所示,它将从上面照亮的大理石立方体的侧面照片与合成渲染进行比较。使用BSSRDF模型和大理石的测量参数(从图5中的表格)渲染合成图像。我们只使用一个简单的立方体来近似圆形的大理石块,所以沿边缘有自然的可见差异。尽管如此,BSSRDF模型忠实地呈现包括从大理石立方体侧面散射的散射光的外观。

    图9显示了从后面照亮的大理石半身像(130万个三角形)中的几个不同的次表面散射模拟。BSSRDF仿真主要匹配完整的蒙特卡洛仿真的外观,但明显更快(5分钟与1250分钟)。头部背面的头发在BSSRDF仿真中稍微较暗;我们认为这是由于漫反射近似中的距离固定不变造成的。在[5]中使用光子映射花费了大约12分钟(缩放到我们的计算机速度)进行了类似的渲染。然而,光子映射方法需要对材质进行完整的3D描述,因此需要内存存储光子的数据,并且对于高度散射的材质来说(例如牛奶和皮肤),它变得更耗时。

    图9 大理石半身像中的次表面散射的模拟。大理石半身像从后面照亮并使用如下进行渲染:(a)BRDF近似(2分钟),(b)BSSRDF近似(5分钟)和(c)完全蒙特卡洛模拟(1250分钟)。注意BSSRDF模型如何与蒙特卡洛仿真的外观相匹配,但是明显更快。(d-f)中的图像显示了BSSRDF的不同组成部分:(d)单散射项,(e)漫反射项,(f)菲涅尔项。

    BSSRDF模拟的一个特别有趣的方面是能够捕获大理石表面的光滑外观。相比之下,BRDF模拟给出了非常坚硬的外观,即使表面上的微小凸起也是可见的(这是在逼真的图像合成中的一个经典问题,其中物体经常看起来很硬,而且不真实)。

    对于大理石,我们使用人造散射和吸收系数,因为我们想要测试平均散射反射率为0.5时的困难情况(这里漫反射和单散射的贡献大致相同)。图9演示了如何使单个散射和漫反射项的总和与蒙特卡洛仿真相匹配。

    图10包含三个牛奶的渲染图。第一张渲染图使用漫反射模型;其他的使用BSSRDF模型以及我们对脱脂牛奶和全脂牛奶的测量值。注意,与BSSRDF图像相比较,漫反射渲染的牛奶看起来不真实而且不透明,即使多重散射占主导地位并且由于次表面散射的原因造成辐射出射率非常分散。有趣的是,BSSRDF能够捕获牛奶外观中的微妙细节,使牛奶在前面看起来更浅蓝,背面更浅红。这是由于瑞利散射导致了波长短的光比波长长的光更容易散射。

    通过对穿透材质的射线进行采样来模拟的次表面散射,对于皮肤材质来说渲染起来特别困难。这是由于皮肤高度散射(典型的反射率为0.95)并且非常各向异性(典型的散射角的平均余弦值为0.85)。 这两个属性都意味着光子的平均散射事件数非常高(通常大于100)。 另外皮肤非常半透明,不能使用BRDF正确渲染(参见图11)。

    完整的皮肤模拟需要多层次,但是可以只用一层来获得合理的近似值。在图11中,我们使用BSSRDF和我们的皮肤测量值(skin1)渲染了一个简单的脸部模型。在这里,我们还使用了g=0.85的Henyey-Greenstein相位函数[11]作为散射角的估算的平均余弦值。皮肤测量值来自于手臂(这可能比脸部皮肤更半透明),但考虑到缺乏空间变化(纹理),整体外观仍然是真实的。BSSRDF给予皮肤柔软的外观,并使鼻子下方的阴影区域出现颜色渗色。在这里,血液的吸收特别明显,因为在皮肤深处散射的光更红。对于这个模拟来说,漫反射项远大于单个散射项。这意味着皮肤反射光线相当弥漫,而且内部颜色渗色也是重要的因素。BRDF图像渲染了7分钟,BSSRDF图像渲染了17分钟。

    6 总结和未来的工作

    在本文中,我们提出了一种新的实用的BSSRDF计算机图形学模型。该模型将偶极子漫反射近似与精确的单散射计算相结合。我们已经展示了该模型如何用于测量半透明材质的散射性质,以及如何使用测量值来通过人工渲染再现测量结果。我们通过对表面上的入射光进行采样来对BSSRDF求值,我们展示了这种技术如何捕获半透明材质的柔软光滑的外观。

    在未来,我们计划将模型扩展到多层次,并包括支持高效的全局照明。

    图10 一杯牛奶:(a)漫反射(BRDF), (b)脱脂牛奶(BSSRDF)和(c)全脂牛奶(BSSRDF)。(b)和(c)使用的是我们的测量值。渲染时间为(a)2分钟,(b)和(c)4分钟;这包括大理石桌上的焦散和全局照明以及景深模拟。

    图11 一个使用BRDF模型(上)和BSSRDF模型(下)渲染的脸部。对于皮肤,我们使用了我们测量值(skin1)并且两个图像是在相同的光照条件下(BRDF图也包括全局照明)。脸的几何体是手动建模的,嘴唇的凹凸贴图是手绘的,皮肤上的凹凸贴图是基于一片皮肤的灰度的变形的照片。即使在全局光照下,BRDF也会出现很硬的外观。将其与BSSRDF模拟中皮肤的真实的柔软外观进行比较。另外,BSSRDF捕获到了在鼻内阴影区域中的内部颜色的渗色。

    7 感谢

    特别感谢Steven Stahlberg为脸部建模。感谢SIGGRAPH审稿人和Maryann Simmon和Heidi Marschner对稿件的有用评价。本研究部分由国家科学基金资助信息技术研究基金(IIS-0085864)资助。第一作者也得到了DARPA(DABT63-95-C-0085)的支持,第二作者得到了本田北美公司的支持。

    参考文献

    [1] S. Chandrasekhar. Radiative Transfer. Oxford Univ. Press, 1960.

    [2] R. L. Cook, T. Porter, and L. Carpenter. Distributed ray tracing. In ACM Computer Graphics (SIGGRAPH'84), volume 18, pages 137–145, July 1984.

    [3] P. Debevec, T. Hawkins, C. Tchou, H. Duiker, W. Sarokin, and M. Sagar. Acquiring the reflectance field of a human face. In Computer Graphics Proceedings, Annual Conference Series, 2000, pages 145–156, July 2000.

    [4] P. E. Debevec and J. Malik. Recovering high dynamic range radiance maps from photographs. In Computer Graphics Proceedings, Annual Conference Series, 1997, pages 369–378, August 1997.

    [5] J. Dorsey, A. Edelman, H. W. Jensen, J. Legakis, and H. K. Pedersen. Modeling and rendering of weathered stone. In Computer Graphics Proceedings, Annual Conference Series, 1999, pages 225–234, August 1999.

    [6] G. Eason, A. Veitch, R. Nisbet, and F. Turnbull. The theory of the backscattering of light by blood. J. Physics, 11:1463–1479, 1978.

    [7] W. G. Egan and T. W. Hilgeman. Optical Properties of Inhomogeneous Materials. Academic Press, New York, 1979.

    [8] T. J. Farell, M. S. Patterson, and B. Wilson. A diffusion theory model of spatially resolved, steady-state diffuse reflectance for the noninvasive determination of tissue optical properties in vivo. Med. Phys., 19:879–888, 1992.

    [9] R. A. Groenhuis, H. A. Ferwerda, and J. J. Ten Bosch. Scattering and absorption of turbid materials determined from reflection measurements. 1: Theory. Applied Optics, 22:2456–2462, 1983.

    [10] P. Hanrahan and W. Krueger. Reflection from layered surfaces due to subsurface scattering. In ACM Computer Graphics (SIGGRAPH'93), pages 165–174, August 1993.

    [11] L. G. Henyey and J. L. Greenstein. Diffuse radiation in the galaxy. Astrophysics Journal, 93:70–83, 1941.

    [12] A. Ishimaru. Wave Propagation and Scattering in Random Media, volume 1. Academic Press, New York, 1978.

    [13] G. Kortum. Reflectance Spectroscopy. Springer-Verlag, 1969.

    [14] F. E. Nicodemus, J. C. Richmond, J. J. Hsia, I. W. Ginsberg, and T. Limperis. Geometric considerations and nomenclature for reflectance. Monograph 161, National Bureau of Standards (US), October 1977.

    [15] M. Pharr and P. Hanrahan. Monte Carlo evaluation of non-linear scattering equations for subsurface reflection. In Computer Graphics Proceedings, Annual Conference Series, 2000, pages 75–84, July 2000.

    [16] L. Reynolds, C. Johnson, and A. Ishimaru. Applied Optics, 15:2059, 1976.

    [17] J. Stam. Multiple scattering as a diffusion process. In Eurographics Rendering Workshop 1995. Eurographics, June 1995.

     

     

     

     

     

     

     

     

     

     

        

    展开全文
  • 该书是传热学基础教程,这一版是中文翻译版,排除了阅读困难。
  • ROS中文笔记image_transport

    千次阅读 2018-10-17 16:43:39
    ROS中文笔记image_transport Overview When working with images we often want specialized transport strategies, such as using image compression or streaming video codecs. image_transport provides classes...

    ROS中文笔记image_transport

    Overview

    When working with images we often want specialized transport strategies, such as using image compression or streaming video codecs. image_transport provides classes and nodes for transporting images in arbitrary over-the-wire representations, while abstracting this complexity so that the developer only sees sensor_msgs/Image messages.

    Specialized transports are provided by plugins. image_transport itself provides only “raw” transport so as not to impose unnecessary dependencies on client packages. Other transports will only be available if they are built on your system. On Ubuntu, the ros--base debians include the “compressed” and “theora” transports provided by the image_transport_plugins stack.

    当我们需要特殊传输图像的时候,image_transport提供了类和节点为我们提供任意的over-the-wire representations传输图像。特殊的图像传输由插件提供,image_transport自己只提供原生的传输,所以对于客户端的包不需要特殊依赖。

    Quickstart Guide

    image_transport should always be used to publish and subscribe to images. At this basic level of usage, it is very similar to using ROS Publishers and Subscribers. Using image_transport instead of the ROS primitives, however, gives you great flexibility in how images are communicated between nodes.

    For complete examples of publishing and subscribing to images using image_transport, see the Tutorials.
    image_transport是用来发布和接收图像。最基本的使用层面上,这很接近于ROS的消息发布器和消息接收器,通过image_transport代替ROS基元,然而它可以给你节点间图像通讯很大的方便。

    C++使用方法

    错误的用法

    // Do not communicate images this way!
    #include <ros/ros.h>
    
    void imageCallback(const sensor_msgs::ImageConstPtr& msg)
    {
      // ...
    }
    
    ros::NodeHandle nh;
    ros::Subscriber sub = nh.subscribe("in_image_topic", 1, imageCallback);
    ros::Publisher pub = nh.advertise<sensor_msgs::Image>("out_image_topic", 1);
    

    正确的用法

    // Use the image_transport classes instead.
    #include <ros/ros.h>
    #include <image_transport/image_transport.h>
    
    void imageCallback(const sensor_msgs::ImageConstPtr& msg)
    {
      // ...
    }
    
    ros::NodeHandle nh;
    image_transport::ImageTransport it(nh);
    image_transport::Subscriber sub = it.subscribe("in_image_base_topic", 1, imageCallback);
    image_transport::Publisher pub = it.advertise("out_image_base_topic", 1);
    

    Known Transport Packages已知的包

    image_transport 默认的传输,通过ROS传输sensor_msgs/Image
    compressed_image_transport JPEG or PNG 压缩
    theora_image_transport 视频流传输

    关于节点

    关于节点和其余的东西,碍于时间在这里没有具体了解,以后将会写
    转载来源:
    http://wiki.ros.org/image_transport

    展开全文
  • steam版运输巨人(Transport Giant)中文补丁.zip
  • 文档是GPC APDU transport over SPI_I2C规范的中文翻译版本,包含原文档的所有章节,并带有书签。表格及时序图是采用的截图方式,因此存在少量英文。
  • 1:pjsip教程(一)之PJNATH简介  2:pjsip教程(二)之ICE穿越打洞:... 3:pjsip教程(三)之ICE stream transport的使用  4:pjsip文档(四)之ICE Session的使用方法 本文原文地址:http://www.pjsip.org/pjnath/do...

      1:pjsip教程(一)之PJNATH简介

      2:pjsip教程(二)之ICE穿越打洞:Interactive Connectivity Establishment简介

      3:pjsip教程(三)之ICE stream transport的使用

      4:pjsip文档(四)之ICE Session的使用方法

    本文原文地址:http://www.pjsip.org/pjnath/docs/html/group__PJNATH__ICE__STREAM__TRANSPORT.htm#ga6fb7cfdde71523f9fce885fd5cad982d

    学习使用 ICE stream transport

    下面的步骤描述了怎样使用ICE session:

    • 首先初始化结构体: pj_ice_strans_cfg. 这个结构体中包含了ICE stream transport 的配置信息,其中就包括了SUTN以及TURN的配置信息.
    • 使用 pj_ice_strans_create()方法创建stream transport的实例. 该函数的成功调用还需要以下列出的重要的参数:
      • pj_ice_strans_cfg :主配置信息
      • components 的个数
      • 用于产生回调的结构体的实例:pj_ice_strans_cb .
    • 当调用函数pj_ice_strans_create()后,初始化的过程会在后台运行,该初始化过程主要是收集本地的候选地址,最后,当初始化完成,应用程序会在回调函数on_ice_complete 中返回
    • 当想要开启一个媒体流时(例如,想进行视频或语音电话),使用pj_ice_strans_init_ice()创建一个ICE session用于进行打洞.
    • 通常在两个客户端开始打洞之前,双方都需要知道对方的ICE信息(ICE信息,包括用户名,密码以及3组候选地址),那么可以使用下面的方法得到自己的ICE信息:
      • pj_ice_strans_get_ufrag_pwd()
      • pj_ice_strans_enum_cands()
      • pj_ice_strans_get_def_cand()
        应用程序需要将以上信息封装为SDP消息发送至对方.
    • 当应用程序收到远程客户端发来的ICE消息后,就可以开始ICE探测了。开始ICE探测需要调用pj_ice_strans_start_ice()方法.
    • 需要注意的是,PJNATH库不支持直接处理SDP消息,SDP消息的封装与拆解还需应用程序自己实现。
    • 一旦ICE的探测协商开始后,程序最终将会在回调函数on_ice_complete() 中返回。on_ice_complete() 属于结构体: pj_ice_strans_cb.
    • 应用程序在程序运行的任何时刻都能发送或者接受数据,但是ICE的stream transport 对象它能否发送数据,取决于它发送数据时候的状态。状态分为三种:1,探测协商之前,这种状态下可以发送数据,并且使用的是默认的地址;2,探测协商的过程中,此时不能发送数据;3,探测协商完成之后,这种状态下也可以发送数据,且发送数据的地址为探测成功的地址对!
    • 应用程序使用pj_ice_strans_sendto()发送数据,并在pj_ice_strans_cbon_rx_data()回调中返回.
    • 当需要结束媒体Session时,使用pj_ice_strans_stop_ice()回收ICE Session。

    关于ICE stream transport,在单次媒体交互完成后,可以选择销毁ICE stream transport或保留它以备后用。保留ICE stream transport有利有弊,好处是减少下次会话时创建它的时间;坏处是应用程序需要与STUN server以及relay server中相应的端口保活,这会无形中造成电量的损耗(consume power), 而电量损耗的高低是移动设备应用的重要参考标准之一。

    转载请注明:

      名称:pjsip教程(三)之ICE stream transport的使用

      作者:大雪先生

      链接:http://www.cnblogs.com/ishang/p/3413262.html 

    转载于:https://www.cnblogs.com/ishang/p/3413262.html

    展开全文
  • TransportClient使用传输模块远程连接到一个弹性搜索集群。它不加入集群,但只获得一个或多个初始传输ip地址,并在每个动作上与它们进行轮询(尽管大多数操作可能是"two hop" 操作)。// on startup ...

     TransportClient使用传输模块远程连接到一个弹性搜索集群。它不加入集群,但只获得一个或多个初始传输ip地址,并在每个动作上与它们进行轮询(尽管大多数操作可能是"two hop" 操作)。

    // on startup
    
    TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("host1"), 9300))
            .addTransportAddress(new TransportAddress(InetAddress.getByName("host2"), 9300));
    
    // on shutdown
    
    client.close();

    请注意,如果使用与“elasticsearch”不同的名称,则必须重新设置集群名称。

    Settings settings = Settings.builder()
            .put("cluster.name", "myClusterName").build();
    TransportClient client = new PreBuiltTransportClient(settings);
    //Add transport addresses and do something with the client...

    TransportClient附带一个集群嗅探特性,该特性允许它动态地添加新主机并删除旧主机。在启用嗅嗅时,TransportClient将连接到其内部节点列表中的节点,该列表是通过调用addTransportAddress构建的。在此之后,TransportClient将调用这些节点上的内部集群状态API来发现可用的数据节点。客户机的内部节点列表将仅用这些数据节点替换。默认情况下,此列表每隔5秒刷新一次。注意,嗅探器连接的IP地址是在这些节点的搜索配置中声明为发布地址的。

    请记住,如果该node不是一个数据节点,该列表可能不包括它连接到的原始节点。例如,如果您最初连接到一个主节点,在嗅探之后,没有进一步的请求将进入主节点,而是指向任何数据节点。TransportClient不包含非数据节点的原因是为了避免将搜索流量发送到只掌握节点。

    为了启用嗅探,设置client.transport.snifftrue:


    Settings settings = Settings.builder()
            .put("client.transport.sniff", true).build();
    TransportClient client = new PreBuiltTransportClient(settings);

    其他transport client级别设置包括:

    client.transport.ignore_cluster_name

    Set to true to ignore cluster name validation of connected nodes.

     (since 0.19.4)

    client.transport.ping_timeout

    The time to wait for a ping response from a node. Defaults to 5s.

    client.transport.nodes_sampler_intervalThe time to wait for a ping response from a node. Defaults to 5s.

    附上我这两天写的连接代码:

    public class SearchEsUtils implements SearchEsUtilsInterface {
    
    	TransportClient transportClient;
    	//索引库名
    	String index = "ori_epotential_2018";
    	//类型名称
    	String type = "ori_epotential";
    	//集群名称
    	String es_cluster = "es_cluster";
    	//集群连接IP地址 
    	String es_ip = "192.168.0.14";
    	//集群连接端口号
    	Integer es_port = 9300;
    	
    	
    	
    	public SearchEsUtils() {
    		try {
    			init();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    
    
    
    	/**
    	 * @throws IOException
    	 * 初始化ES客户端连接
    	 */
    	public void init() throws IOException{
    		/** 
             * 1:通过 setting对象来指定集群配置信息 
             */  
            Settings setting = Settings.builder()
                .put("cluster.name", es_cluster)//指定集群名称  
                .put("client.transport.sniff", true)//启动嗅探功能  
                .build();  
            
            /** 
             * 2:创建客户端 
             * 通过setting来创建,若不指定则默认链接的集群名为elasticsearch 
             * 链接使用TCP协议即9300 
             */  
            
            transportClient = new PreBuiltTransportClient(setting)
            		.addTransportAddress(new TransportAddress(InetAddress.getByName(es_ip), es_port));
    
            /** 
             * 3:查看集群信息 
             * 注意我的集群结构是: 
             *   131的elasticsearch.yml中指定为主节点不能存储数据, 
             *   128的elasticsearch.yml中指定不为主节点只能存储数据。 
             * 所有控制台只打印了192.168.79.128,只能获取数据节点 
             *  
             */  
            List<DiscoveryNode> connectedNodes = transportClient.connectedNodes();  
            for(DiscoveryNode node : connectedNodes)  
            {  
                System.out.println(node.getHostAddress());  
            }  
    	}
    }
    展开全文
  • 影音传送带是一个高效稳定功能强大的下载工具,下载速度一流,CPU占用率低,尤其在宽带上特别明显;内建易于使用的文件管理器,轻松实现按类别存放下载的文件。而且只要站点支持,这些协议均支持多线程断点续传。...
  • 菜鸡的ROS学习笔记(image_transport

    千次阅读 2018-10-17 16:05:36
    这一部分是搬运的ROS wiki中的介绍,主要是image_transport这个包的用法,之后我会把它尽量翻译成中文,希望各位大佬指教 Overview When working with images we often want specialized transport strategies, such...
  • 原因是pip安装Python包会加载我的用户目录,我的用户目录恰好是中文的,ascii不能编码。 二、解决办法 python目录 Python27\Lib\site-packages 建一个文件sitecustomize.py 内容 import sys sys....
  • 个人在学习5G标准3GPP TS 29244-g30过程中,也发现google的机器翻译实在晦涩难懂,所以个人在借助百度翻译(中国人更懂中文)的同时,人工对每句话进行了校对。 在自己学习的同时,也将翻译内容分享给给广大网友。...
  • RTP实时传输协议,PDF格式,中文 本文描述RTP(real-time transport protocol),实时传输协议。RTP 在多点传送(多播)或单点传送(单播)的网络服务上,提供端对端的网络传输功能,适合应用程序传输实时数据,如:...
  • 介绍了Exchange 2013的邮件流和传输服务 http://exchangeserverpro.com/exchange-2013-mail-flow/ technet中文网站介绍Exchange 2013邮件流 http://technet.microsoft.com/zh-CN/library/aa996349(v=exchg.150)....
  • 这道题目真是充分显示了窝的智商低下,首先题目在有中文翻译的情况下看了半天没看懂,= = 然后已知这题的分类是最短路了还是不会做,= = 一开始想着在dij扩展的的时候就把最大运送值算好,不过后来发现正向运输和...
  •  下面的都是边看边记录来源于:MTQQ协议中文手册  术语:  网络连接、应用消息、客户端、服务端、订阅、主题名、主题过滤器、会话、控制报文  数据表示:  二进制位、整数数值、UTF-...
  • 在学习Java11新特性的过程中顺手做了一些翻译,方便某些习惯与中文的同学。
  • 项目中有一个servlet接口,用于别的部件给我们项目组传输xml参数来...原本采用的是最常用的form action的形式发送,但是涉及到中文编码的问题,又不应该修改后台servlet的代码,所以想采用最近学的jquery进行测试。“`
  • mqtt中文协议

    2018-10-08 16:16:50
    MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和...
  • RFC1889协议中文概要,Real-time Transport Protocol,RTP
  • English | 中文 Jmqtt Features Full support of mqtt3.1.1 protocol Support data persistence and clustering based on MySQL Support friendly secondary development, plug-in development: cluster / ...
  • RFC3550中文

    2019-10-04 06:46:42
    本文描述RTP(real-time transport protocol),实时传输协议。RTP在多点传送(多播)或单点传送(单播)的网络服务上,提供端对端的网络传输功能,适合应用程序传输实时数据,如:音频,视频或者仿真数据。RTP没有...
  • mqtt协议3.1.1中文

    2015-11-04 15:40:12
    mqtt协议3.1.1中文版。MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。...
  • , line 69, in thriftpy.transport.buffered.cybuffered.TCyBufferedTransport.read_trans (thriftpy/transport/buffered/cybuffered.c:1939) File "thriftpy/transport/cybase.pyx", line 61, in thriftpy...
  • mqtt协议中文版.zip

    2019-08-02 14:30:53
    MQTT 全称为 Message Queuing Telemetry Transport(消息队列遥测传输)是一种基于发布/订阅范式的“轻量级”消息协议,由 IBM 发布。
  • Transport transport = null; boolean result; try { // Create a Properties object to contain connection configuration information. Properties props = System.getProperties(); props.put("mail...
  • RTP协议中文版大全

    2020-11-27 19:01:19
    RTP协议格式讲解,本文描述RTP(real-time transport protocol),实时传输协议。RTP在多点传送(多播)或单点传送(单播)的网络服务上,提供端对端的网络传输功能,适合应用程序传输实时数据,如:音频,视频或者...
  • mqtt3.1协议中文

    2015-08-18 15:11:43
    MQ遥测传输(MQ Telemetry Transport,MQTT)是一个轻量级的基于代理的发布/订阅式消息传输协议,它的设计目标是开放、简单、轻量和易于实现。这些特征使它适用于各种受限环境
  • RTP中文版 by 51TalkAM.pdf

    2020-11-22 23:22:17
    本文主要描述RTP(real-time transport protocal),实时传输协议,本文大部分内容和旧版RFC1889相同。
  • 英文版原文:RFC3550英文版 - RTP: A Transport Protocol for Real-Time Applications 字符描述的表格不对齐懒得换成截图,所以还是请参看英文原版表格。 转载过来后修改了一部分错别字。 这个翻译的中文版不全。...
  • Sublime Text 3 无法输入中文解决方案

    千次阅读 2019-01-18 13:01:14
    Sublime Text 3 安装及无法输入中文解决方案 安装sublime-text 3 如果是ubuntu系统终端输入: wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add - sudo apt-get install apt-...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 241
精华内容 96
关键字:

transport中文