精华内容
下载资源
问答
  • 该书是传热学基础教程,这一版是中文翻译版,排除了阅读困难。
  • 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.

     

     

     

     

     

     

     

     

     

     

        

    展开全文
  • steam版运输巨人(Transport Giant)中文补丁.zip
  • 当我们在IE中使用$.post时会报错,调试后发现是no transport,为了解决这种情况,在发送ajax请求前添加如下代码即可 jQuery.support.cors = true;

    当我们在IE中使用$.post时会报错,调试后发现是no transport,为了解决这种情况,在发送ajax请求前添加如下代码即可

    jQuery.support.cors = true;

     

    展开全文
  • 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

    展开全文
  • 智能交通系统 车道辅助系统ISO标准
  • 文档是GPC APDU transport over SPI_I2C规范的中文翻译版本,包含原文档的所有章节,并带有书签。表格及时序图是采用的截图方式,因此存在少量英文。
  • XCP ON CAN 中英文对照版(前面的目录简介什么的没有翻译,后面的部分是有的)
  • 菜鸡的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...

    菜鸡的ROS学习笔记(image_transport)

    image_transport

    这一部分是搬运的ROS wiki中的介绍,主要是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.

    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.

    C++ Usage

    Instead of:

    / 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);
    

    Do:

    // 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);
    image_transport publishers advertise individual ROS Topics for each availa
    

    ble transport - unlike ROS Publishers, which advertise a single topic. The topic names follow a standard naming convention, outlined below. Note, however, that all code interfaces take only a “base topic” name (to which the transport type is automatically appended); typically you should not directly reference the transport-specific topic used by a particular plugin.

    Python Usage
    image_transport does not yet support Python, though it is on the Roadmap. If you need to interface a Python node with some compressed image transport, try interposing a republish node.

    Known Transport Packages

    If you have implemented a new transport option in a public repository and would like to see it added to this list, please email our mailing list.

    ros-pkg
    image_transport (“raw”) - The default transport, sending sensor_msgs/Image through ROS.

    compressed_image_transport (“compressed”) - JPEG or PNG image compression.

    theora_image_transport (“theora”) - Streaming video using the Theora codec.

    Library ROS API

    ROS Publishers and Subscribers are used to transport messages of any type. image_transport offers publishers and subscribers specialized for images. Because they encapsulate complicated communication behavior, image_transport publishers and subscribers have a public ROS API as well as a C++ code API. Please see the separate code API documentation for C++ usage. The ROS API is documented below.

    image_transport Publishers
    image_transport publishers are used much like ROS Publishers, but may offer a variety of specialized transport options (JPEG compression, streaming video, etc.). Different subscribers may request images from the same publisher using different transports.

    C++: image_transport::Publisher (API), image_transport::CameraPublisher (API)

    Published topics

    image_transport publishers advertise individual ROS Topics for each available transport - unlike ROS Publishers, which advertise a single topic. The topic names follow a standard naming convention, outlined below. Note, however, that all code interfaces take only a “base topic” name; typically you should not directly reference the transport-specific topic used by a particular plugin.

    The raw sensor_msgs/Image is published on the base topic, just as with using a normal roscpp ros::Publisher. If additional plugins are available, they advertise subtopics of the base topic, conventionally of the form /. For example, using plugins for “compressed” and “theora” transports, with a base topic of /stereo/left/image, the topics would be:

    stereo/left/image (sensor_msgs/Image)

    Base topic, used for “raw” transport. Advertised just as if we used ros::Publisher.
    stereo/left/image/compressed ()
    Topic for “compressed” transport.
    stereo/left/image/theora ()
    Topic for “theora” transport.
    stereo/left/camera_info (sensor_msgs/CameraInfo)
    (image_transport::CameraPublisher-only) Camera info topic.
    Parameters
    image_transport publishers have no independent parameters, but plugins are permitted to make use of the Parameter Server for configuration options, e.g. bit rate, compression level, etc. See the plugin package documentation.

    Publisher plugin parameters give subscribers hooks to configure the publisher-side encoding to suit the needs on the client side. Lookup therefore occurs in the public namespace defined by <base_topic>, rather than the private namespace of the publishing node. Note that these parameters are a shared resource, controlling the behavior observed by all subscribers to the image topic.

    Publisher plugin parameters should be exposed through dynamic_reconfigure for best visibility and ease of use. Conventionally, they take the following form:

    Reconfigurable parameters

    // (type, default: ?) Transport-specific publisher parameter. /camera/image/compressed/jpeg_quality (int, default: 80) An example transport-specific parameter which sets the JPEG quality for "compressed" transport for image topic /camera/image. image_transport Subscribers image_transport subscribers are used much like roscpp's ros::Subscriber, but may use a specialized transport to receive images.

    C++: image_transport::Subscriber (API), image_transport::CameraSubscriber (API)

    Subscribed topics
    A Subscriber instance is created with a “base topic” name and the name of the transport to use. It subscribes to the transport-specific ROS topic associated with the base topic. For example, if the base topic is /stereo/left/image, the subscribed topics for transports “raw” and “compressed” are respectively:

    stereo/left/image (sensor_msgs/Image)

    Base topic, used for the default “raw” transport. Subscribed just as if we used ros::Subscriber.
    stereo/left/image/compressed ()
    Topic for “compressed” transport.
    stereo/left/camera_info (sensor_msgs/CameraInfo)
    (image_transport::CameraSubscriber-only) Camera info topic.

    Parameters
    ~image_transport (string, default: “raw”)
    Name of the transport to use.
    If this parameter is not set, the transport from the image_transport::TransportHints argument of image_transport::ImageTransport::subscribe() is used.

    image_transport::TransportHints may be used to specify a different namespace for parameter lookup. This is useful to remap ~image_transport into a separate namespace to allow different transports for different image subscriptions. The node writer may even specify a parameter name other than ~image_transport, although this is discouraged for the sake of consistency. Nodes that subscribe to image topics should document what parameter(s) control transport, especially if different from ~image_transport.

    Subscriber plugins are permitted to make use of the Parameter Server for configuration options, e.g. video post-processing level. See the plugin package documentation.

    Subscriber plugin parameters configure the behavior of one particular subscriber. They affect how the data received is interpreted (decoded). This differs from publisher plugin parameters, which are a shared resource affecting the data sent to all subscribers. The namespace used for parameter lookup is again specified through image_transport::TransportHints, defaulting to the private namespace of the subscribing node.

    Subscriber plugin parameters should be exposed through dynamic_reconfigure for best visibility and ease of use. Conventionally, they take the following form:

    Reconfigurable parameters
    ~/ (type, default: ?)
    Transport-specific subscriber parameter.
    ~theora/post_processing_level (int, default: 0)
    An example transport-specific parameter which sets the post-processing level when subscribed using “theora” transport.

    Nodes

    republish

    republish listens on one base image topic (using any transport type, “raw” by default) and republishes the images to another base topic. By default it uses all available publishing plugins; you may optionally specify a single out transport type. “raw” is the name of the default transport, publishing sensor_msgs/Image messages. What other transports are available depends on which plugins are built.

    Usage

    $ republish [in_transport] in:=<in_base_topic> [out_transport] out:=<out_base_topic>
    Examples
    Suppose we are publishing images from a robot using the streaming video transport “theora”. On an offboard computer we have several nodes listening to the image topic. This setup wastes bandwidth and computation, as each node processes the compressed video into still images independently. Instead we can start a republish node on the offboard computer, streaming the video only to that node for processing into sensor_msgs/Image messages republished to the other nodes:

    $ republish theora in:=camera/image raw out:=camera/image_decompressed
    The above command is also useful simply to pipe a compressed image topic into a node that can only listen to sensor_msgs/Image (because it uses ros::Subscriber or is written in a language other than C++).

    If a node publishes images only as sensor_msgs/Image, we can republish it using the full range of transports. Note however that the base topic must be different from the original topic, and this approach entails a slight overhead over using image_transport::Publisher in the original node.

    $ republish raw in:=camera/image out:=camera/image_repub

    Subscribed Topics

    in ()
    The image base topic to listen on (may actually subscribe to a subtopic).
    Published Topics
    out ()
    The image base topic to publish to (may also publish subtopics).
    Parameters
    republish itself does not make use of the Parameter Server. Plugins may read or set plugin-specific parameters, however.

    Command-line tools

    list_transports
    list_transports lists the declared image transport options across all ROS packages and attempts to determine whether they are currently available for use (packages built, plugins able to be loaded properly, etc.).

    Usage

    $ rosrun image_transport list_transports
    
    展开全文
  • TransportClient使用传输模块远程连接到一个弹性搜索集群。它不加入集群,但只获得一个或多个初始传输ip地址,并在每个动作上与它们进行轮询(尽管大多数操作可能是"two hop" 操作)。// on startup ...
  • HTTP Strict Transport Security (通常简称为HSTS) 是一个安全功能,它告诉浏览器只能通过... Freebuf百科:什么是Strict-Transport-Security 我摘自owasp上的一段定义: HTTPStrictTransportSecurity(HSTS)isano...
  • BS-ISO15622-2018--Intelligent transport systems.Adaptive cruise control system自适应巡航控制系统需求与测试条件第三版
  • 我本人使用的是java客户端TransportClient操作es,如果采用原生的API,或多或少存在一些不便之处。比如创建索引,添加索引文件,修改索引文件,删除索引文件,如果不加以封装,在实际应用时需要花大量时间学习api的...
  • HTTP Strict Transport Security ... Freebuf百科:什么是Strict-Transport-Security 我摘自owasp上的一段定义: HTTPStrictTransportSecurity(HSTS)isanopt-insecurityenhancementthatisspecifiedbyawebapplic...
  • https://developer.mozilla.org/zh-CN/docs/Web/HTTP/HTTP_Strict_Transport_Security 以下类容来源:https://www.freebuf.com/articles/web/66827.html 为什么我们要使用HTTP Strict Transport Security? ...
  • TransportClient使用教程,次教程为抛砖引玉,还有多项其他功能可以用到时自己研究,此处给出例子新手能踏入门槛。 elasticsearch(一) 构建查询客户端 elasticsearch(二)调用TransportClient新增 elastic...
  • 在idea中,启动spring ...ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_LOAD(509) JDWP exit error AGENT_ERROR_TRANSPORT_LOAD(196): No transports initialized [debugInit.c:750] 解决办法:
  • 至于网上的资料,中文的更是少之又少,博客方面某就只看到顾老师的海天盛宴系列,但理论性太强,主要集中于计算几何学。本博客系列将聚焦于最优传输在机器学习和图像领域的应用,某将尽可能用非数学的语言为大家介绍...
  • HTTP Strict Transport ...Freebuf百科:什么是Strict-Transport-Security? 一个网站接受一个HTTP的请求,然后跳转到HTTPS,用户可能在开始跳转前,通过没有加密的方式和服务器对话,比如,用户输入http://foo.com...
  • 基于Transport代码实现新增和修改(prepareIndex) /** * 基于Transport代码实现新增和修改 */ public class Transport_Main { public static void main ( String [ ] args ) { //1、创建...
  • 原因是pip安装Python包会加载我的用户目录,我的用户目录恰好是中文的,ascii不能编码。 二、解决办法 python目录 Python27\Lib\site-packages 建一个文件sitecustomize.py 内容 import sys sys....
  • HTTP Strict Transport Security (通常简称为HSTS) 是一个安全功能,它... Freebuf百科:什么是Strict-Transport-Security 我摘自owasp上的一段定义: HTTP Strict Transport Security (HSTS) is an opt-i...
  • SearchResponse 是查询结果对象,此处是我用哪个到的列表查询处理公共处理工具类,能使用分页对象 和查询所有对象疯长成对应的List集合。 工具类中使用gson进行查询结果和泛型的对象实现bean属性值的copy操作。...
  • 概述: AVDTP定义了audio/video分布连接和空中传输的audio/video...Transport and Signaling Channel Established   Signaling Procedure:   Transport Procedures:  
  • Metropolis Light Transport学习与实现后文内容的结构不是“教程”样式的,而是个人完成初步学习之后对学习结果的简单总结样式。主要是对个人理解的沉淀。一、概述前面已经学过BDPT(Bidirectional Path Tracing, ...
  • Transport Layer PPT : A3-1 A3-2 A4-1 A4-2 Application Layer Intro. 没什么好说的,这是我们日常最接近的一层。因为我们都在使用着各类的网络应用。PPT上说:It is up to you to define the format of data...
  •  下面的都是边看边记录来源于:MTQQ协议中文手册  术语:  网络连接、应用消息、客户端、服务端、订阅、主题名、主题过滤器、会话、控制报文  数据表示:  二进制位、整数数值、UTF-...
  • FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_LOAD(196) ERROR: transport library not found: dt_socket ERROR: JDWP Transport dt_socket failed to ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,211
精华内容 6,884
关键字:

transport中文