• Subsurface scattering


    Subsurface scattering 中文就是指的是次表面散射,也就是描述半透明至透明的物体和光相互作用的一种现象,可以想象现实生活中的蜡烛 玉石等等在光照下的颜色。这些物体之所以拥有这样的外观是因为光线进入物体内部后往往经过多次散射才从物体表面另一点射出。与普通的表面反射或者是纯透明材质的折射不同。 次表面散射材质的基于物理的渲染一直是个很难的课题,这是因为在应用光线路径追踪方法去追踪光线时,往往需要追踪几百次上千次的物体内的散射情况,这是个极度昂贵的行为。此外,采样对于次表面材质的计算也是个大问题。后面会说到。

    描述次表面散射可以用一个叫BSSRDF的函数来表示,理论上来说对它积分(用Monte Carlo方法) 就可以得到完全物理正确的渲染结果了:

    可惜对BSSRDF的积分是要对入射点和出射点之间的整个表面积(A)积分的,这比BRDF的对方向积分要复杂很多,所以直接的暴力Monte Carlo 算法效率实在是太低了。唯一可行的办法是找出物理上正确的数学计算模型。

    二、近似模型

    对于subsurface scattering媒介的数学模型介绍可以在PBRT书的16章找到,对于渲染技术而言 比较重要的是找出一个合理的并且效果好的计算模型应用于Monte Carlo 光线追踪技术中。现在应用最广泛的Subsurface渲染实现应该都是基于Jenson 大神在2001年的一篇文章“A pratical model for subsurface light transport” 中提出的模型。那么大神的思路是啥呢,其实就是基于一个很简单的事实,就是光在半透明材质中的扩散现象。从物理的角度来说,这是因为高反射率的材质中,光线在经过几百上千次反射后会充满整个物体的内部,如果物质是各向同性的话,就完全可以用扩散现象去近似描述。学过物理的都知道物质的扩散方程,而扩散方程的求解,可比积分BSSRDF简单许多。当然这个解需要很多额外的假设,最后可以得到的解是:
     
     

    可以看到我们对每一个光线入射点(需要渲染的点)要确定的是出射点的位置和方向便可求出最后的照片结果积分值,而不用考虑这一条路径上的具体情况。

    三、采样和多重重要性抽样

    从上面的推导很明显可以看出对于渲染流程本身最重要的是确定光线出射点,也就是要对于光线出射点在物体表面采样,这个步骤的难度依然远远大于BRDF的直接对方向采样。迄今为止也有很多方法涌现出来,比如PBRT把物体表面所有的点按分布采出构建成点云然后计算,Jenson则在每一个着色点周围按圆盘进行采样。更准确的方法是在圆球内发射光线寻找和物体表面的交点,将其作为采样点。

    单纯的均匀采样是很没有效率的,重要性抽样是减小噪声和加快收敛速度的常见方法,常见的办法是沿某个特定的方向发射光线,去寻找与物体表面的交点。当然,实际上这是一种近似性质的重要性抽样,因为你是否找到采样点,往往和物体表面的形态密切相关。

    可改进方面及优化方向:

    1. 加上single scattering分量计算,单次散射类似于折射,在高反射率物体中对最终渲染结果影响较小,但是在物体很薄很透时有比较好的效果,可以考虑做混合算法,扩展SSS渲染算法的适应性,比如对薄的物体的渲染。

    2.做 multipole的混合模型,这也是Jenson 之后的一个理论,是对很薄的物体在dipole的边界条件不满足时候可以用multipole模型计算。算是一个hybrid的方法。

    3.加入photo beam 或者 Virtual ray light 的计算方法,方法类似photon mapping。

  • 相关阅读:
    centos6 LVS-DR模式---分析
    centos6.6 安装 LXC
    Amoeba-mysql读写分离实战
    keepalived +mysql 实战
    nginx添加sticky模块-cookie保持会话
    haproxy转发真实IP给web
    Mysql-如何正确的使用索引以及索引的原理
    Mysql-自带的一些功能,基本用法(视图,触发器,事务,存储过程,函数,流程控制)
    Mysql-常用数据的基本操作和基本形式
    Mysql-多表连接的操作和用法
  • 原文地址:https://www.cnblogs.com/warpengine/p/3456489.html
Copyright © 2020-2023  润新知