RTIOW-ch9:Dielectrics

透明材料如水,玻璃和钻石是电介质。
当光线照射到它们时,它会分裂成反射光线和折射(透射)光线。 我们将通过在反射或折射之间随机选择并仅产生一个散射射线来处理这个问题。

反射光线的方向向量:

漫反射:n + p。其中n为单位法向量,p为“起点在原点,长度小于1,方向随机”的随机向量。
镜面反射:v – 2*dot(v,n)*n。其中n为单位法向量,v为入射光线的方向向量。

折射光线的方向向量:

斯奈尔定律描述了折射:
n sin(theta)= n’sin(theta’)
其中n和n’是折射率(典型地,空气= 1,玻璃= 1.3-1.7,金刚石= 2.4)

当射线处于更高的材料中时的折射率,斯奈尔定律没有真正的解决方案,因此没有折射可能。在这里所有的光线都会被反射出来,因为在实践中这通常都是固体对象,它被称为“全内反射”。这就是为什么有时候水 – 空气,当你被淹没时,边界就像一面完美的镜子。

菲涅尔反射定律:在真实世界中,除了金属之外,其它物质均有不同程度的“菲涅尔效应”。视线垂直于表面时,反射较弱,而当视线非垂直表面时,夹角越小,反射越明显。如果你看向一个圆球,那圆球中心的反射较弱,靠近边缘较强。不过这种过度关系被折射率影响。

实际的生活经验告诉我们,光在不同介质表面会同时发生折射和反射。如果你站在湖边,低头看脚下的水,你会发现水是透明的,反射不是特别强烈;如果你看远处的湖面,你会发现水并不是透明的,波光粼粼,反射非常强烈,这就是“菲涅尔效应”。通过菲涅尔反射定律,我们可以计算出光分裂之后的反射折射比。

material.h新加的内容:

cpp:

最终效果:

 

参考书籍:《Ray Tracing in One Weekend》

RTIOW系列项目地址:GitHub

RTIOW系列笔记:

RTIOW-ch1:Output an image

RTIOW-ch2:The vec3 class

RTIOW-ch3:Rays, a simple camera, and background

RTIOW-ch4:Adding a sphere

RTIOW-ch5:Surface normals and multiple objects

RTIOW-ch6:Antialiasing

RTIOW-ch7:Diffuse Materials

RTIOW-ch8:Metal

RTIOW-ch9:Dielectrics

RTIOW-ch10:Positionable camera

RTIOW-ch11:Defocus Blur

RTIOW-ch12:Where next