材质外观
什么是材质
- Material == BRDF
- 漫反射材质: 假设不主动发光,也不吸收光,则入射光的irradiance等于出射光的irradiance,进一步可得入射光的radiance等于出射光的radiance,带入渲染方程可得BRDF为 fr = 1/PI,这是完全不吸收光的情况,如果定义某个颜色单通道的反射率为0-1之间的p,则fr = p/PI,对rgb多通道也同理
- glossy材质: 磨砂,镜面反射了,但没完全镜面
- glass材质: 玻璃或者水
- 反射定律: 出射角等于入射角,wo + wi = 2cos()*n,n为法线单位向量,wi为入射向量,wo为出射向量,由于wi * n = ||wii|| * ||n|| * cos(),所以wo = -wi + 2(wi*n)*n
- 从顶部俯瞰反射模型,可以看出入射方向与反射方向在该平面是平行但相反的,方位角 fo = (fi + pi)mod2PI
- cautics: 水面被阳光照射下,水底的光路
- 折射定律(Snell's Law): 方位角朝向和反射一致,折射率n,则ni * sin(i) = nt * sin(t),根据cos(t) = Math.sqrt(1-sin(t)^2, 2),展开可得cos(t) = Math.sqrt(1-(ni/nt)^2*(1-cos(i)^2)),该表达式在根号内部为负数的情况下无意义,即ni/nt > 1,即,ni > nt,入射光的介质折射率要大于反射光介质折射率,也就是说满足这种情况的条件下,可能产生不折射的情况,即全反射,也是光纤的原理
- 人在水底看天空,只能看到一个锥形的区域,其他区域都是黑色,也是因为折射,锥形角度97.2度
- bsdf = brdf + btdf
- 菲涅尔项: 反射依赖于入射角的大小
- 绝缘体(1.5折射率): 如果入射角为90度,则所有能量都被反射,入射角越大,反射能量越多
- 导体: 即使垂直看过去,也是反射很多
- 极化现象: 跟光线的波动性有关,不同颜色的光频率不同,不过渲染器不考虑这个
- 菲涅尔项的现实例子: 坐公交,如果对着自己旁边的窗户往外看,能看到外面,但对着前面几排的窗户看,只能看到反射镜像
- 微表面材质(microfacet material): 物体表面,从近处看是凹凸不平的镜面的(几何),但从远处看是平的粗糙的(材质)
- 微表面材质的BRDF
- glossy: 法线的分布基本都是朝上
- diffuse: 法线的分布各个方向都有
- 可以用微表面的发现分布表示粗糙程度,法线分布更集中,则是glossy,更分散则是diffuse
- brdf: f(i, o) = (F(i, h) * G(i, o, h) * D(h)) / (4 * (n, i)(n, o)),其中F表示菲涅尔项,G(shadow masking)表示被其他表面遮挡的程度,D表示法线与半程向量重合的分布
- 如果入射方向比较平,会导致其他表面被遮挡的程度较大,这种入射角度也叫grazing angle
- 无论是入射方向或者是观察方向比较接近grazing angle,就会产生面与面的遮挡,G就是用来修正这个的,如果没有G,则该点会非常亮,有了G可以一定程度修正
- 微表面模型示例: 机动车皮坐垫,木椅子,玻璃板,金属涂层
区分材质的方式
- 各向同性材质: 法线在各个方向均匀分布,如普通金属球或者磨砂球
- 各向异性材质: 法线分布不均匀,如拉丝钢板拉伸高光,平底锅底辐射状高光,尼龙布料,天鹅绒表面被拨到一边
- 如果入射和出射方向,在方位角旋转之后,材质的BRDF不变,则是各向同性材质,否则则是各向异性材质
BRDF性质
- 非负数: fr(wi -> wr) >= 0
- 线性:
- 可逆性: fr(wi -> wr) = fr(wr -> wi)
- 能量守恒
- 各向同性材质的BRDF可以从4维降到3维: fr(i, fi(i), o, fi(o)) = fr(i, o, |fi(i) - fi(o)|),只跟方向角的差值有关,fi为方向角
BRDF测量
- 将样本放在正中间,旋转光源,用相机记录
- 利用各向同性材质的特性,可以减少光源旋转覆盖的点,不用覆盖完整球面,从4维降到3维
- 利用BRDF可逆性,再砍掉一半的测量点
- 测量之后数据存储问题,MERL BRDF Database,90*90*180次测量