亮度和曲面特性

用默认的选项设置 Lighting->AutomaticMathematica 用模拟亮度模型给三维图形的多边形着色.

Mathematica 允许给一个对象的亮度指定若干个分量. 其中一个是环境光线,它产生对象的统一阴影. 其它分量是方向性的,在对象的不同部分产生不同的阴影. "点光源" 在空间中从一点向各个方向射出模拟光线. "聚光灯" 与点光源相似,但它是朝一定方向发射锥形光线. "定向光" 朝着给定方向发射均一的光线. Mathematica 将这些光源的光线加在一起决定一个多变形的亮度.

{"Ambient",color}均一环境光线
{"Directional",color,{pos1,pos2}}与从 指向 的向量平行的定向光线
{"Point",color,pos}}在位置 pos 的球形点光源
{"Spot",color,{pos,tar},}在位置 pos,指向目标位置 tar ,开放为半角 的点光源
Lighting->{light1,light2,...}一定数量的光线

指定光源的方法.

Mathematica 所使用的默认光线有三个点光源,但没有环境分量. 光源的颜色分别为红、绿、蓝,位于对象右侧 .

这是使用默认模拟亮度的球体.
In[1]:=
Click for copyable input
Out[1]=
这里增加了环境光,并去掉了所有的点光源. 注意 Lighting 选项取一列光源.
In[2]:=
Click for copyable input
Out[2]=
这里在红点处增加了一个单一点光源. 光源恰当地融合.
In[3]:=
Click for copyable input
Out[3]=
对象不会阻挡光源或是投下阴影,因此统一场景下的所有对象被光源均匀照亮.
In[4]:=
Click for copyable input
Out[4]=
这里增加了一条从有限远处,沿 轴负方向射过来的绿色定向光 .
In[5]:=
Click for copyable input
Out[5]=
这里显示一个在图形上部的点光源,与环境光融合在一起.
In[6]:=
Click for copyable input
Out[6]=
Lighting 作为 Graphics3DShow 的一个选项使用时, 它控制着同一场景下所有对象的光照. Lighting 也可以用作图形指令来指定特定对象的光照. 指令Lighting 取代固有的光照设定.
指令 Lighting 取代了 Lighting 后面定义的两个球体的默认设置.
In[7]:=
Click for copyable input
Out[7]=
这个例子使用列表使得 Lighting 指令仅作用于中间的球体.
In[8]:=
Click for copyable input
Out[8]=

所看到的多变形的颜色不仅取决于照射该多变形的光线,也取决于该多变形如何反光. 用图形指令 RGBColorSpecularityGlow 来指定多变形的反光或发光方式.

当不明确使用这些颜色指令时,Mathematica 认为所有多变形有不光滑的白色表面. 这样多变形反射所有颜色的照射光线,并且向各个方向的反射相同. 这个模型对无涂层的白纸等材料是合适的.

而使用 RGBColorSpecularityGlow 可以定义更复杂的模型. 这些指令分别指定三种光射: 漫反射、镜面反射发光.

在漫反射中, 射到一个表面的光线被均匀向各个方向反射. 这类反射发生时,曲面显得有些暗淡. 漫反射服从Lambert光反射定律:反射光的强度是入射光强度的 倍,其 是入射光线和曲面法线的夹角. 注意当 时无反射光.

在镜面反射中,曲面像镜子一样反射光线. 此时曲面有明亮的外表. 对理想的镜面,光线的入射角和反射角相等. 然而大部分材料都有一定程度的散射,导致反射光线分布在一定范围的角度内. Mathematica 通过指定一个镜面反射指数给出反射光线的分布范围,该反射指数按 Phong 光学模型来确定. 镜面反射指数为 ,从反射角偏离 角度处光线的强度为 . 因此,随着 ,曲面就完全像镜子一样. 当 减少时,曲面的光泽就减小,当 时,曲面就完全变成了漫反射面. 实际材料的 的变化范围一般是从一到几百.

发光指的是从表面辐射的具有一定颜色和强度并且独立于入射光的的光线 .

大部分材料的反射是漫反射和镜面反射的结合,还有一些材料不仅反射光,其自身还发光. 对于每一种光射,对象会有一种内在颜色. 对于漫反射,入射光为白光时,反射光的颜色就是材料的内在颜色. 当入射光不是白光时,反射光的颜色就是入射光线颜色和材料内在颜色的组合. 相似地,对象可以有不同于漫反射颜色的内在的镜面反射颜色,并且镜面反射光是入射光和内在镜面反射光的组合. 对于发光,发射光的颜色由内在特性决定,与入射光线无关.

Mathematica 中,可以任意组合使用漫反射、镜面反射和发光指令. 想要去除某一种反射,相应地给出内在颜色为 Black 或者 GrayLevel[0]. 对于相当白的材料,可以指定内在颜色为 GrayLevel[a],其中 a 是这个曲面的反射能力或反射率.

GrayLevel[a]反射率为 a 的暗淡表面
RGBColor[r,g,b]有内在颜色的暗淡表面
Specularity[spec,n]镜面反射率为 spec、镜面反射指数为 n 的曲面; spec 为0到1之间的数或者是 一个RGBColor 的定义
Glow[col]采用发光颜色 col 的发光表面

设置发光对象的表面特性.

这里显示一个默认设置为暗淡白色曲面的球体,被几个彩色光源照亮.
In[9]:=
Click for copyable input
Out[9]=
这里是一个漫反射能力弱但镜面反射能力强的的球体. 球体因此在靠近光源处呈"镜面高亮度",而其它部分则很暗.
In[10]:=
Click for copyable input
Out[10]=

在设置光源和曲面颜色时,重要的一点是确认从一个多变形反射的光线总强度不超过1. 否则就会产生奇怪的效果.

New to Mathematica? Find your learning path »
Have a question? Ask support »