@[TOC]
Whitted-Style Ray Tracing
Ray Casting
基于针孔相机模型
从眼睛向某个像素投射光线,击中场景中最近的物体相交点,(解决深度测试),连接交点与光源,判定遮挡(解决阴影),如果没有遮挡,则依据着色模型进行着色。
Recursive (Whitted-Style)Ray Tracing
依据镜面反射和折射,计算出反射光线和折射光线,进行递归计算

光线求交
Ray Equation
$r(t)=o+td , 0\le t\le+ \infin$
与球求交
$p:(p-c)^2-R^2=0$ ,联立$(o+td-c)^2-R^2=0$,求解得到正的、较小的t值,可推广至一般隐式曲面。
与三角形求交
一般方法
- 光线与平面求交
定义平面:一个方向(法线方向)与一个点(平面上的点),
$p:(p-p^{‘}) \cdot N \to ax+by+cz+d=0$ ,同样代入求解,$t=\frac{(p^{‘}-o)\cdot N}{d\cdot N}$,检验$0\le t\le+ \infin$
- 判定交点是否在三角形内(叉乘)
Moller Trumbore Algorithm

假设光线和三角形平面有一个交点,则该点既可以用光线方程描述,也可以用三角形的重心坐标描述,以此构建方程,确定重心坐标非负,即可判定光线是否和三角形相交
光线与表面求交的加速
简单的光线-场景求交
- 测试光线和每个物体的交点
- 找到最近的交点(最小的t)
包围盒Bounding Volumes
轴对齐包围盒AABB

对于三维的情况
- 只有当光线进入了所有的投影对面,光线才进入了盒子
- 当光线离开了任意一个对面,光线就离开了盒子
对于每个对面,计算$t_{min}和t_{max}$,对于三维盒子,$t_{enter}=max(t_{min}),t_{exit}=min(t_{max})$
如果进入时间小于离开时间,光线则在这段时间内在盒子里,即有交点
因为正的t才是有意义的,只要$t_{enter}<t_{exit} {&&}t_{exit}\ge0$,则光线与盒子有交点,如果此时$t_{enter}<0$,表示光线出发点在盒子当中。

加速结构
空间划分(Spatial Partitions)
八叉树Oct-Tree / KD-Tree / BSP-Tree
KD-Tree
物体只存在叶子节点中
光线只与被判定相交的叶子结点中所有物体判定求交

BVH(Bounding Volume Hierarchy)
解决物体与包围盒相交、一个物体出现在多个叶子结点的问题
找到一个包围盒,递归地把物体进行划分,重新构建包围盒
选取节点中最长的轴进行划分
取在中间的物体进行节点划分

场景发生变化,则需要重新构建BVH


辐射度量学
Why,What,How
概念
Radiant Energy and Flux
Radiant Energy是电磁辐射的能量,$Q[J=Joule]$
Radiant flux(power) 是单位时间的能量,$\Phi =\frac{dQ}{dt} [W=Watt][lm=lumen]$,lumen衡量光源亮度
Solid Angles
Anlge:$\theta=\frac{l}{r}$
Solid Angle:$\Omega=\frac{A}{r^2}$
球有 $4\pi$ 的立体角
Differential Solid Angle:
$dA=(rd\theta)(r \sin\theta d\phi)=r^2\sin\theta d\theta d\phi$
$d\omega=\frac{dA}{r^2}=\sin\theta d\theta d\phi$
Radiant Intensity
单位立体角的power
$$
I(\omega)=\frac{d\Phi}{d\omega}[\frac{W}{sr}][\frac{lm}{sr}=cd=candela]
$$
Irradiance(辐射照度)
单位面积的power:The power per(perpendicular/projected) unit area incident on a surface point
$$
E(x)=\frac{d\Phi(x)}{dA}[\frac{W}{m^2}][\frac{lm}{m^2}=lux]
$$
Lambert’s Cosine Law
$E=\frac{\Phi}{A}\cos\theta$

Radiance(辐射率)
物体表面单位立体角、单位投射面积的power:The power emitted,reflected,transmitted or received by a surface, per unit solid angle,per projected unit area
==这里为什么cos在下面呢?这部分光线本身所在面积A,而由于角度,表面测量的面积为$\frac{A}{\cos\theta}$,因此,代表着该表面上的辐射照度Irradiance,其实增加了==,而上面Lambert‘s Cosine Law定义的是表面面积为A,刚好相反。
$$
L(p,\omega)=\frac{d^2\Phi(p,\omega)}{d\omega dA \cos\theta}[\frac{W}{sr\ m^2}][\frac{cd}{m^2}=\frac{lm}{sr\ m^2}=nit]
$$
Incident Radiance
光线从某个方向到达表面单位立体角的Irradiance
$$
L_i(p,\omega)=\frac{dE(p)}{d\omega\cos\theta}
$$

Exiting Radiance
光线离开表面单位投射面积上的Intensity
$$
L(p,\omega)=\frac{dI(p,\omega)}{dA\cos\theta}
$$


BRDF
微小表面从某个微小方向上接受的irradiance,分配到某个方向

BRDF告诉我们,光线从每个吸收方向反射多少到每个出射方向
任意一个出射方向的radiance微分,除以入射点上的irradiance微分

反射方程
对于一个出射方向的radiance,等于BRDF乘以每一个入射方向的radiance进行积分(把每个方向的入射光线对出射方向radiance的贡献加起来)

渲染方程
即反射方程加自发光项

深入理解渲染方程:
考虑一个点光源在一个反射方向上的渲染方程


那么由这种情况可以推测,如果是面光源,则只需要对面光源进行积分(计算直接光照时可以使用)




蒙特卡洛路径追踪——求解渲染方程
蒙特卡洛积分
计算定积分 $\int_a^bf(x)dx$ ,在积分域随机采样 $X_i \sim p(x)$ ,蒙特卡洛积分 $F_N=\frac{1}{N}\sum_{i=1}^N \frac{f(X_i)}{p(X_i)}$,以采样点的概率为权重,对采样的函数值进行加权求和。
推导
$$
利用样本均值对随机变量f(x)的无偏估计
\E(g(x))=\int_{x\in S}g(x)p(x)d\mu \approx \frac{1}{N}\sum_{i=1}^N g(x_i)
\通常更希望估计单个函数的积分,因此令f(x)=g(x)p(x)
\\int_{x\in S}f(x)d\mu\approx\frac{1}{N}\sum_{i=1}^N\frac{f(x_i)}{p(x_i)}
$$
路径追踪
背景
Whitted Style ray tracing 中总是光滑的物体,产生reflections和refractions,在表面根据光照模型计算颜色,直到diffuse表面才发生停止。无法渲染复杂材质,也无法表现diffuse表面之间的反射。
求解渲染方程

忽略自发光项的直接光照情况,
$L_o(p,\omega_o)=\int_{\Omega^+}L_i(p,\omega_i)f_r(p,\omega_o,\omega_i)(n\cdot \omega_i)d\omega_i$ ,使用蒙特卡洛积分求解
此时 $f(x)=L_i(p,\omega_i)f_r(p,\omega_o,\omega_i)(n\cdot \omega_i)$ ,$p(\omega_i)=\frac{1}{2\pi}$(半球面均匀采样)
$$
L_o(p,\omega_o)=\int_{\Omega^+}L_i(p,\omega_i)f_r(p,\omega_o,\omega_i)(n\cdot \omega_i)d\omega_i
\\approx\frac{1}{N}\sum_{i=1}^{N}\frac{L_i(p,\omega_i)f_r(p,\omega_o,\omega_i)(n\cdot \omega_i)}{p(\omega_i)}
$$
间接光照
等同于从P点观测Q点的直接光照。


递归光线数量
取N=1,反射的光线则不会爆炸。(在pdf采样出的光线中,随机选取一个)
与之相对的,需要增加每个像素的光线路径采样数,将radiance取平均。

在这一部分当中,将摄像机位置和像素连线,就隐式构成了透视投影。如果直接按像素平面的法向投射光线,则形成正交投影。
递归出口
真实场景光线弹射无数次,但是在计算机中需要递归出口。因此引入了RR(Russian Roulette)


在生存概率为P的情况下,光线弹射次数的期望是多少?$1/p$
采样光源

很难击中光源。

渲染方程是在半球面上进行采样,因此需要将渲染方程写成对光源上的dA积分
因为只对光源部分进行积分,所以使用蒙特卡洛积分求解时,积分域只在光源上,因此取光源面积A,pdf=1/A
只需要求dw与dA的关系
将dA投影在半球面上
$d\omega=\frac{dA\cos\theta^{‘}}{\abs{\abs{x^{‘}-x}}^2}$ ,
$$
L_o(p,\omega_o)=\int_{\Omega^+}L_i(p,\omega_i)f_r(p,\omega_o,\omega_i)(n\cdot \omega_i)d\omega_i
\=\int_AL_i(p,\omega_i)f_r(p,\omega_o,\omega_i)\frac{\cos\theta\cos\theta^{‘}}{\abs{\abs{x^{‘}-x}}^2}dA
$$
着色结果来源于两部分
- 光源(直接光照,不需要RR)
- 其他反射物(借鉴光照,需要RR)

直接光照部分,是使用了光源采样的改写渲染方程, $pdf=1/A$ ,间接光照部分,还是原来的渲染方程, $pdf=1/2\pi$ ,
最后加上直接光源部分计算光源是否被遮挡
其他问题
半球均匀采样
重要性采样
https://zhuanlan.zhihu.com/p/360420413
选择更适合的pdf
多重重要性采样
采样球面和光源,将其结合起来
像素重建滤波(pixel reconstruction filter)
gamma矫正,曲线,色彩空间,HDR
radiance和颜色的换算过程