要怎么补救呢?首先根据开篇说的能量守恒法则1>=diffuse+specular+refraction,对于玻璃物体来说,是不存在漫反射的,有的都是镜面反射和折射。所以,先把color或者diffuse关掉,调成0,或者关掉。其次,玻璃是一个遵循菲涅尔反射的高反射物体。我们把反射率和specular color调到最高。在blinn材质中对于反射的控制是reflectivity和specular color共同控制的,只有二者皆为1的时候,才是全反射,任意一个值不为1,都会相应降低反射率,任意一个值为0,则反射率就是0。
然后将specular roll off调节为0或者接近0。绝大多数人理解这个值为高光强度,这个理解是有偏颇的。这个值真正的作用其实是控制菲涅尔效应的。当该值为1的时候,90度视角与0度视角的反射率皆为specular color与reflection的乘积(90度视角与0度视角参见菲涅尔反射;乘积的原因是这两个数值共同控制真正的折射率);当该值为0时,0度视角的反射率为specular color与reflectivity的乘积,而90度视角的反射率为0。
所以,这个值可以取代sampler info与ramp节点来实现对菲涅尔的控制。(不相信的同学可以自己弄一个圆球,把这个值调到0,你会发现球体的边缘照样有反射,并且越靠近你的垂直视线,反射越低。)
上图是将specular roll off调节到0所得到的渲染结果,即有了菲涅尔反射的结果。你会发现杯子正垂直于你视线的面上的反射几乎已经看不到了,而同你的视线夹角非常小的面,依然有着很高的反射。
另外,在我这个案例中eccentricity这个值不产生作用。一般来说,这个值被翻译成偏心率,控制的是高光的大小。但是这里所谓的高光,其实是三维软件虚拟出来的一个东西,因为你用了虚假的灯光,虚假的灯光照射在虚假的材质上面,会形成虚假的高光。但是你要按照我说的一步步地做,你会发现这时候调整这个数值不起任何改变。
这是因为我没有使用虚假灯光,这个场景里唯一的默认灯光在开始时已经被我关闭了,并且没有新建任何灯光,起到照明作用的是一张hdr贴图,以及FG的计算。所有玻璃上能看到的高亮部分,并不是计算机通过虚假灯光位置计算出来的所谓高光,而是根据光线跟踪计算出来的真正的反射。这一部分我没办法更深入地说明了,这不是这篇教程里想要解决的问题,只是附带提一下,如果想不明白也不要深究,很多人都不知道这些但依然做出很棒的作品,条条大道通罗马嘛。
另外,你可能一直注意到,玻璃内壁似乎挺明显的样子,Maya基本材质对这个问题是没办法的。但是对于mia材质,你可以把advanced reflection卷闸栏下的skip reflection on inside的勾给去掉,会得到内壁不那么清晰的结果。
这个选项勾选的意思是忽略内壁反射,取消勾选的意思是计算内壁反射。意思就是,不光计算法线朝上的那一面的反射,还要计算面的另一边的反射。其实我一直在想这个是不是搞反了,但后来发现这个可能和一个叫做TIR(total internal reflection)的东西有关。这个我个人还没完全弄明白,但我们仍然可以通过这个方法得到不错的效果。
Mental ray材质做玻璃还有个要在意的地方就是玻璃颜色,这有点像vray的雾颜色。在mia材质中,主要是使用advanced refraction卷闸栏下的属性来操控颜色。
勾选上use max distance和use color at max distance。Use color at max distance的颜色设置可以理解为你要设置的玻璃的颜色,max distance下面的数值则是说,光线进入介质开始,传播了多远的距离会变成你选中的颜色。你可以根据场景的大小来设置这个数值。Maya默认的单位是cm,每一个单元格就是一厘米,如果你自己没有乱调的话。你可以估算一下你的杯壁大约是多厚,大概传播多远的距离变成你要的颜色比较好。
总的来说,max distance越大,则玻璃颜色越淡,max distance越小,则玻璃颜色越深,这个是很容易理解的。而且,你会发现使用advanced refraction下面的属性来控制玻璃颜色比你直接用transparency直接控制颜色的优势:颜色并不是均匀地分布在玻璃的每一寸表面上,而是越厚的地方,颜色越深,越薄的地方颜色越浅,这都得益于max distance。
最后我们得到了下面这种效果,很微妙的玻璃颜色。