How to| 控制三维曲面对光照的响应

若要控制一个三维曲面如何对模拟光作出响应. Wolfram 语言允许控制非光滑表面上光的漫反射,以及类镜面表面上光的镜面反射. 将它们结合起来使得用户对一个三维曲面的最后外观和颜色进行广泛的控制.

内在的表面颜色直接与漫反射相对应,其中从表面的各个方向上光的散射是一样的. 例如,非涂料纸的页面是不光滑的(即灰暗的),从而显示出漫反射.

默认情况下,Wolfram 语言中三维对象的内在表面颜色是白色的. 这里,三维圆柱体的颜色来自 Wolfram 语言缺省使用的设置 Lighting

In[1]:=
Click for copyable input
Out[1]=

创建一个内在表面颜色是红色的三维圆柱体. 这指明了圆柱体的红色光线的漫反射:

In[2]:=
Click for copyable input
Out[2]=

使用 RGBColor 可以获得对三维表面的特定颜色更详细的控制,它可以让您对红色、绿色和蓝色设置从0到1范围内的明确数值:

In[3]:=
Click for copyable input
Out[3]=

事实上,用户可以使用许多方法来设置 Wolfram 语言中三维对象的内在表面颜色. 这里,使用 CMYKColor

In[4]:=
Click for copyable input
Out[4]=

Manipulate 使用 RGBColor 来设置三维圆柱体的内在表面颜色. 作为参考,顶部的 Inset 二维方形表明了在无 Lighting 的情况下的原始 RGBColor 设置.

当所有滑块设置在最左侧时,表面颜色是黑色的. 当所有滑块设置在最右侧时,表面颜色是白色的,这将导致圆柱体以默认的配色方案出现:

    

您可以控制的另一个反射属性是镜面,或类镜面反射. 这种反射出现在镜面发光表面上,例如一张层压纸.

首先,创建一个使用默认设置的三维球体:

In[1]:=
Click for copyable input
Out[1]=

镜面反射的光的百分比可以从 0 到 1. 例如,使用 Specularity 可以对30%落在球体上的光进行镜面反射:

In[2]:=
Click for copyable input
Out[2]=

若要查看对于不同 Specularity 值的外观变化,使用该 Manipulate 动态调整镜面反射的光的比率:

您也可以对特定颜色进行镜面反射:

In[4]:=
Click for copyable input
Out[4]=

Wolfram 语言中许多不同颜色可以被镜面反射. 例如,这里 Manipulate 中的滑块与 RGBColor 一起使用可以动态设置由 Specularity 反射的颜色. 与前面相同,顶部的 Inset 二维方形显示了原始的 RGBColor 设置:

Specularity 也允许您通过设置一个镜面指数,准确控制光镜面反射的宽度. 镜面指数作为 Specularity 的第二个变量指定. 如果您没有明确设置一个镜面指数,Wolfram 语言使用默认值 1.5.

创建一个三维球体,其中50%的光被镜面反射,并且反射指数为 1:

In[6]:=
Click for copyable input
Out[6]=

镜面指数越高,镜面反射越明确地被定义.

例如,使用 Manipulate 中的滑块来动态调整镜面指数从 1 到 100. 在值为 100 处,镜面反射光限制为一个很小的区域:

    

在实践中,反射的漫反射和镜面反射部分通常相结合,以控制三维曲面最后的颜色和外观.

这里,PlotStyle 用于对该图线的表面着色 Orange 并且使用镜面指数20对 White 光镜面反射:

In[1]:=
Click for copyable input
Out[1]=

这里,ContourStyle 的使用方式与上面类似:

In[2]:=
Click for copyable input
Out[2]=

正如您可能期望的,Lighting 对反射具有深刻的影响. 将漫反射和镜面反射与 Lighting 一同使用:

In[3]:=
Click for copyable input
Out[3]=