阿昌学习《RayTraing in one week》 (七)
第七章
这章开始给我们的球加一个材质——漫反射材质。这样我们的场景就会越来越接近现实。
说到漫反射材质就是一种可以呈现周围环境颜色的不发光物体,而且呢,会有随机方向的反射现象和被吸收掉的光线。书中给到的三条光线很好的呈现了漫反射的效果。

数学上理想的Lambertian,从命中点相切的单位半径球体中随机选取一个点,并从该命中P像这些随机点发送一条射线。这个球体就会得到(P+N):

接下来写一个随机生成求内的一点(这个里有个方法叫:否定法rejection method)
其中这个点的xyz取值范围都是-1~1的立方体中随机生成的,当然要加一个循环的判断保证这个点是在求内的。

我的注释也希望大家看一下,main方法的内容看下边的
那么运行一下就会得到一个小黑球啦:

这个图呢,明显还是比较黑的,这次我们在引入一个概念 —— 伽马校正。
伽马校正:由于早期crt显示器输出的亮度和输入的电压存在非线性关系,差不多就是2.2次幂的关系,导致显示的图片亮度要比计算机上存储的低一些。
为了近似的还原图片的输出效果,我们可以开平方根来计算(2.2次幂更接近,但是学习过程中就选了和书里一样的开平方)
那我们把这个开平方的计算加在main方法里,也就是颜色数值计算的最后:

我们再次运行一下就会得到:

最后书中还有一个地方,就是关于递归的部分后续会加入次数限制,另一个是光线重叠打回圆点,这个我们只需要将光线公式中t的取值范围改一下,让t不等于0就可以。

好了,这就是关于漫反射,接下来加入一些其他的材质,让他更趋近现实。