Q86:镜面反射(Mirror Reflection)

时间:2021-01-18 04:14:12

 

86.1 光照模型

 

在考虑“间接光照”的情况下,间接光照可能来自撞击点上半球的任意方向,如下图所示:

Q86:镜面反射(Mirror Reflection)

Q86:镜面反射(Mirror Reflection)

 

86.2 镜面反射(Mirror Reflection)

 

一般情况,求解“式子86.2”的间接光照的反射模型是非常复杂的。但是,我们现在考虑的是特殊情况:镜面反射。

Q86:镜面反射(Mirror Reflection)

Q86:镜面反射(Mirror Reflection)


86.3 连续的镜面反射

 

如果场景中有多个“反射材质”的物体,镜面反射将会连续下去。如下图:

Q86:镜面反射(Mirror Reflection)

 

86.4 镜面反射的反射光线在场景中的各种情形

 

镜面反射的反射光线离开撞击点之后,在场景中可能遇到如下四种情形:

 Q86:镜面反射(Mirror Reflection)


86.5 C++代码实现

 

Q86:镜面反射(Mirror Reflection)


Q86:镜面反射(Mirror Reflection)


Q86:镜面反射(Mirror Reflection)


Q86:镜面反射(Mirror Reflection)


Q86:镜面反射(Mirror Reflection)

 

86.6 测试图形

 

Q86:镜面反射(Mirror Reflection)

 

图形中包含两个物体:

1,上方的hand skeleton,非反射材质;

2,下方的绿色平面,反射材质。

 

接下来,我们主要是调节下方平面的反射材质的参数,来看看生成图形的效果。

 

直接光照参数,影响的是平面本身的效果。间接光照参数,影响的是平面反射的hand skeleton像的效果。

 

86.6.1 调节直接光照参数

 

平面的直接光照参数:ka=0.4;kd=0.8;cd(0.5,1,0.5);ks=0.5,exp=50;

平面的间接光照参数:kr=0.75;cr(1,1,1);

Q86:镜面反射(Mirror Reflection)

 

平面的直接光照参数:ka=0.4;kd=0.8;cd(0.5,1,0.5);ks=0.0,exp=50;

平面的间接光照参数:kr=0.75;cr(1,1,1);

(由于exp=50较大,所以高光部分的光线较少,所以关掉高光对图形整体的影响不明显)

Q86:镜面反射(Mirror Reflection)

 

平面的直接光照参数:ka=0.4;kd=0.0;cd(0.5,1,0.5);ks=0.0,exp=50;

平面的间接光照参数:kr=0.75;cr(1,1,1);

(再关掉“漫射光”)

Q86:镜面反射(Mirror Reflection)

 

平面的直接光照参数:ka=0.0;kd=0.0;cd(0.5,1,0.5);ks=0.0,exp=50;

平面的间接光照参数:kr=0.75;cr(1,1,1);

(再关掉“环境光”)

Q86:镜面反射(Mirror Reflection)

 

平面的直接光照参数:ka=0.0;kd=0.8;cd(0.5,1,0.5);ks=0.0,exp=50;

平面的间接光照参数:kr=0.75;cr(1,1,1);

(只开“漫射光”)

Q86:镜面反射(Mirror Reflection)

 

平面的直接光照参数:ka=0.0;kd=0.0;cd(0.5,1,0.5);ks=0.5,exp=50;

平面的间接光照参数:kr=0.75;cr(1,1,1);

(只开“高光”。由于exp=50较大,所以高光部分的光线较少。开与不开,好像没什么影响)

Q86:镜面反射(Mirror Reflection)

 

平面的直接光照参数:ka=0.0;kd=0.0;cd(0.5,1,0.5);ks=0.5,exp=1

平面的间接光照参数:kr=0.75;cr(1,1,1);

(之前的高光部分太少,看不出效果。接下来,将高光部分调大,看看效果)

(注意:下方平面是绿色的,之所以看到的是“灰白色”,是因为看到的只是高光)

Q86:镜面反射(Mirror Reflection)

 

86.6.2 调节间接光照参数

关掉了所有的直接光照参数,所以看不到平面本身。

 

平面的直接光照参数:ka=0.0;kd=0.0;cd(0.5,1,0.5);ks=0.0,exp=50;

平面的间接光照参数:kr=0.75;cr0.5,1,0.5

Q86:镜面反射(Mirror Reflection)

 

平面的直接光照参数:ka=0.0;kd=0.0;cd(0.5,1,0.5);ks=0.0,exp=50;

平面的间接光照参数:kr=0.75;cr0.0,0.0,1.0

Q86:镜面反射(Mirror Reflection)

 

平面的直接光照参数:ka=0.0;kd=0.0;cd(0.5,1,0.5);ks=0.0,exp=50;

平面的间接光照参数:kr=0.75;cr0.5,0.5,1.0

Q86:镜面反射(Mirror Reflection)

 

86.7 其他说明

 

完整的代码,参考:http://download.csdn.net/detail/libing_zeng/9780925

 

Referrance

[1]. Kevin Suffern, Ray Tracing from theGround Up, A K Peters Ltd, 2007.

 

86.8 补充测试图形

 

交换下方平面和上方hand skeleton的材质。

Hand Skeleton

平面的直接光照参数:ka=0.4;kd=0.8;cd(0.5,1,0.5);ks=0.5,exp=50;

平面的间接光照参数:kr=0.75;cr(1,1,1);

Plane:

ka=0.4;kd=0.8;cd(1.0,0.2,0.0);ks=0.5,exp=50;

Q86:镜面反射(Mirror Reflection)