渲染方程(2):VRE |
您所在的位置:网站首页 › 3c蛋白酶抑制剂抗病毒药上市公司 › 渲染方程(2):VRE |
在光线传输中,光子的碰撞导致了光线能量的变化,这主要有两种情况,情况a:传输过程中光子和粒子的碰撞;情况b:光子和物体表面的碰撞。前一篇我们讲了如何通过radiance描述一条光线携带的能量,本篇主要解释这些碰撞引起的光线状态变化,以及如何计算radiance在这个过程中的变化。 BRDF ![]() 我们假设真空环境,因此只需要考虑情况b。光线和物体表面碰撞时,会有漫反射,镜面反射(不考虑折射),同时一部分能量也会转换为热能。如上图,在这个过程中,我们可以理解为来自方向 ![]() 的光线(radiance),打到物体表面的某一个微表面 ![]() ,能量被该表面吸收后又以方向 ![]() 发射出一条光线(radiance)。这里,这个微表面 ![]() 接收到来自 ![]() 方向的光线的能量,对应radiance和irradiance的转换: ![]() 而从该微表面 ![]() 以 ![]() 方向射出的光线的能量,则记为 ![]() (相对于 ![]() )。 这里会引入一个函数BRDF,用来定义微表面 ![]() 接收到的来自 ![]() 的irradiance和发射到 ![]() 的radiance之间的比例: ![]() RE BRDF决定了物体和光之间的相互作用,最终对应的就是我们常说的材质模型BRDFs。通过BRDF,既然我们能够计算从一个角度 ![]() 的入射光对反射光的贡献 ![]() ,我们也可以计算从任意角度的入射光对反射光的贡献,如上图,对 ![]() 做一个半球积分: ![]() 这里, ![]() 是入射光的radiance,红色为其相对于 ![]() 点微表面的irradiance,经过 ![]() 转为反射光的radiance,对这个过程做一个半球积分,则可以得到反射光 ![]() 的radiance。假如该点可以自发光,我们考虑其emission在 ![]() 方向的贡献 ![]() ,这就是大名鼎鼎的rendering equation(RE): ![]() 需要额外考虑两点:第一点, ![]() 和 ![]() 没有本质区别,都是空间中的一条射线,相对于p点的反射光就是下一光路的入射光,区别仅仅是方向。因此,从线性代数上,如上的积分存在这样的线性关系: ![]() 这里,揭示了光路贡献的来源:红色的自发光(从光源直接打到相机,光路长度1),绿色是直接光照(光源打到物体表面然后直接打到相机,光路长度2),橙色则是间接光照(经过2+反弹后打到相机,光路长度3+)。 通常,rasterization渲染管线能够高效且简单的考虑前两部分的贡献,而光线追踪可以做到考虑所有光路的贡献:global illumination = direct illumination + indirect illumination。下图可以看到direct和indirect各自的贡献(从光源出发或从相机出发的光路贡献的不同)。 ![]() VRE 接着,我们在考虑情况a,非真空下,光线传输过程中的碰撞。在这个过程中,主要有四种情况: ![]() ![]() ,描述该光子被吸收的概率 Scattering:光子碰撞后方向发生变化,分为out和in两种情况,前者导致能量的减少,后者导致能量增强,我们定义![]() ,描述该光子发生scattering的概率 Emission:遇到会发光的粒子,能量增强因此,最终radiance的变化等于上述三种情况之和,我们称其为radiative transfer equation(RTE): ![]() 这里, ![]() ,是absorption和out-scattering之和,称为extinction。 ![]() 这个是积分微分方程,如上图,在 ![]() 到 ![]() 的光路中,每一个点都有一定概率发生如上的碰撞,我们取 ![]() ,公式1左边是指radiance在 ![]() 方向的变化,对两边求积分。这里,我们记Transmittance: ![]() 令 ![]() , ![]() , ![]() , ![]() 表示 ![]() 之间的变化距离,等式1两边乘以 ![]() : ![]() 已知: ![]() (2)式代入(3)式: ![]() 对于红色部分,我们可得: ![]() 这样,红色和蓝色部分抵消后,我们计算 ![]() ,也就是从 ![]() 到 ![]() 的距离: ![]() 当 ![]() 是, ![]() ,这样,我们通过RTE获取了volume rendering equation(VRE),公式(5)可得: ![]() 这里, ![]() 表示来自物体表面 ![]() 的radiance,我们将其用rendering equation来表示,得到渲染方程的一般形式: ![]() 至此,我们推导出了渲染方程的一般解,基于这个公式,我们就可以获取任意场景下物理正确的渲染解。我愿称其为我心中的最美方程。但我想我还是不会纹在身上,我怕疼,公式太长了,忍不了。不清楚为何word的公式上传到微信公众号为何压缩的这么模糊,记得第一次时没有这个问题的。 参考资料 P14~P15 Games101 Path tracing in Production Siggraph 2019 light transport, Advanced Graphics, GMT, Utrecht University PBR book Production Volume Rendering SIGGRAPH 2017 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |