乍一看,3DsMAX琉璃和透光材质(比如玻璃)是有很多相似之处的地方,但事实上,琉璃(以及与之类似的材质,比如石蜡、皮肤、晶体等等)还有一个普通玻璃所没有的特点,即“子面散射”(SubSurface Scattering,简称SSS),这种现象是由于材质内部散射光线的作用而形成的,即当光线进入之后在物体内部不断折射而形成的效果。
今天我们先来了解一下SSS的效果和原理。
首先来看一张没有使用SSS材质和使用SSS材质(皮肤)的渲染效果对比:
再来看一张没有使用SSS材质和使用SSS材质(牛奶)的渲染效果对比:
SSS效果在3DSMAX——包括其他3D设计软件的材质设计中都是相当复杂的。因为此类材质和光线的交互过程比较复杂。当光线透过烟雾、云彩、污水、石蜡、琉璃等等这些物体时,物体自身会“参与”到光线的传播中,在3D设计中,这类物体有一个专门的名称:“参与介质”(Participating Media)。在mental Ray渲染器中,有很多专有贴图以Parti打头,Parti就是Participating的缩写,此类贴图在制作SSS材质时就会派上大用场,例如Parti Volume(physics) 、Parti Volume Photon(physics)等等。
下面是一张SSS的原理图片,图中上方的黄色箭头是入射光线,当这束光线碰到材质颗粒时,呈放射状散开,散射出来的光线会对模型内部构成照明效果,红色箭头指向的三个红点表明模型不同深度的位置得到的散射光线的照射强度各不不同。
背景知识:Mental Ray的结构
Mental Ray材质库的扩展名是dll(动态链接库),每个材质库文件还有一个同名的.mi文件。这些文件分别存放在3DSMAX安装目录下mentalray目录下面的shaders和includes两个目录下面。注意看一下这两个目录中的文件名就能明白为什么mental ray材质和贴图后面通常会带一个括号了,括号中的内容就是材质或者贴图所属于的材质库的名称。例如,Parti Volume(physics)后面括号中的physics表明这个贴图属于physics库。
[page]
三维“子面散射”第1步:MentalRay渲染器[/size]
上一节我们介绍了3Ds MAX中的“子面散射”(SubSurface Scattering,简称SSS)的效果和原理,这种现象是由于材质内部散射光线的作用而形成的,即当光线进入之后在物体内部不断折射而形成的效果。这一节我们以上一节的“琉璃”制作过程为例,来看看在Mental Ray材质库中实现SSS的基本方法。
主要有三个步骤:
一、使用Mental Ray渲染器和材质的选择
二、Parti Volume贴图。
三、Parti Volume Photon贴图
今天我们介绍第一步:Mental Ray渲染器和材质的选择。
一、Mental Ray渲染器
要想实现SSS效果,首先必须将3DSMAX的默认渲染器设置为Mental Ray,并打开其焦散功能。
1、设置渲染器
打开渲染设置对话框(快捷键F10),在Common页最下面的Assign Renderer卷展栏内设置默认渲染器为Mental Ray。
2、打开焦散
在渲染设置对话框中选择Indirect Illumination页,在Caustics and Global Illumination(焦散和全局照明)卷展栏中选择Caustics下面的Enable复选框打开焦散功能,这下面有一个Maximu Num.Photon Per Sample(每次取样的最大光子数量),将其设置为较小的值可以提高渲染速度,比如在这个例子中我们将其设置为64。注意,如果使用3DSMAX 6.0或者之前的版本,这里提供的参数名称会有所不同,不过作用和含义是一样的。
二、选择材质
Raytrace材质
打开材质编辑器,选择一个空白样本球,单击Standard按钮,从弹出的材质/贴图浏览器中选择材质类行为Raytrace,得到一个标准的Raytrace材质。这里选择Raytrace材质作为基础材质的道理很简单,因为翡翠类材质对光线的作用比较丰富,使用Raytrace材质比较容易得到效果。
在Raytrace Basic Parameters卷展栏中,设置Transparency Color为纯白色(设置为纯白色相当于将材质设置为完全透明的)。然后适当调整一下高光色和光泽度,具体参数可以自己摸索,他们对最终的效果影响不是很大。
现在进行一下渲染,可以看到大致如下图的效果,也就是普通纯净玻璃的效果。光线在模型表面反射,透过模型时折射,都是直来直去,不会被材质内部的颗粒散射。
[page]
三维“子面散射”第2步:Parti Volume贴图
上一节我们介绍了3Ds MAX中的“子面散射”(SubSurface Scattering,简称SSS)的效果和原理,这种现象是由于材质内部散射光线的作用而形成的,即当光线进入之后在物体内部不断折射而形成的效果。这一节我们以前面的“琉璃”制作过程为例,来看看在Mental Ray材质库中实现SSS的基本方法。
主要有三个步骤:
一、使用Mental Ray渲染器和材质的选择
二、Parti Volume贴图
三、Parti Volume Photon贴图
今天我们介绍“子面散射”(SubSurface Scattering,简称SSS)效果实现的第二步:Parti Volume贴图。
1、添加贴图
进入材质的mental ray Connection卷展栏,单击Volume后面的None按钮,从材质/贴图浏览器中选择贴图为Parti Volume(physics)。
现在进行渲染可以看到如下图所示的效果:
2、Scatter参数实现“泼溅”纹理
是不是感觉和开始的效果没什么区别,下面我们就开始逐一调整参数,首先调整Scatter(关于这些参数的具体含义,请参阅本小节后面的“背景知识”),单击Scatter通道后面的小按钮,从弹出的材质/贴图浏览器中选择选择Splat。Splat是一种非常简单的程序贴图,其作用就是产生“泼溅”纹理,由于我们在Scatter通道中使用这种贴图,将会形成一定的立体效果,类似翡翠中的杂质。注意,Scatter通道中既可以使用默认的颜色,这样可以得到比较纯净的质感,也可以单击后面的贴图按钮贴入贴图来得到含有杂质的质感。
Scatter贴图设置好之后,渲染一下可以看到大致如下的效果:
3、Extinction参数控制材质致密程度
Extinction参数用来控制材质的致密程度,下面我们逐渐提高这个参数的值,0.01、0.1到0.4,可以看到光线越来越难透过模型,到0.4就是这个例子我们所需要的效果。
Extinction=0.01
Extinction=0.1
Extinction=0.4
4、min_step_len和max_step_len控制光线散射效果
在上面的效果的基础上我们再来调节min_step_len和 max_step_len的值,min_step_len的默认值是0.1,max_step_len的默认值是5,用默认值进行渲染的效果如下:
min_step_len=0.1 max_step_len=5
调节max_step_len的值,逐步增大
min_step_len=0.1 max_step_len=10
可以看到在上图中,由于max_step_len=10,光线在模型内部“旅行”的长度增加,使得模型的细节得到了更多的展现,轮廓比前面max_step_len=5时要清晰一些了,但是还不够,我们继续增加max_step_len的值。
min_step_len=0.1 max_step_len=20
上图中max_step_len已经加到了20,但是效果并没有明显的改善,为什么?因为,在extinction(消散系数)较大的情况下,max_step_len对效果的影响是有限的,我们需要使用新的方法来强化子面散射效果——使用Parti Volume Photon贴图,这是一种光子贴图,也就是说他会对光子产生影响。
[page]
子面散射第3步:Parti Volume Photon贴图
上次我们介绍了3Ds MAX中的“子面散射”(SubSurface Scattering,简称SSS)的效果和原理,这种现象是由于材质内部散射光线的作用而形成的,即当光线进入之后在物体内部不断折射而形成的效果。这一节我们以前面的“琉璃”制作过程为例,来看看在Mental Ray材质库中实现SSS的基本方法。
主要有三个步骤:
一、使用Mental Ray渲染器和材质的选择
二、Parti Volume贴图
三、Parti Volume Photon贴图
今天我们介绍“子面散射”(SubSurface Scattering,简称SSS)效果实现的第三步:Parti Volume Photon贴图。
仍然在mental ray Connection卷展栏中,单击Photon Volume通道后面的按钮,从材质/贴图浏览器中选择Parti Volume Photon(physics)贴图,
利用该贴图的默认设置直接进行渲染可以得到这样的效果
extinction(光子)=0.001
可以看到效果略有改进,但是仍然非常不明显,继续提高extinction的大小
extinction(光子)=0.01
extinction(光子)=1.5
这时的渲染效果已经非常“出格”了,原因并非extincetion参数太大,而是当前这个光子贴图的mode设置有问题,下面我们调整一下。
我们将其设置为2(设置为2时,模型不再是整个都散射光线,只有一层具有子面散射特性),然后再次渲染可以得到这样的效果:
extinction(光子)=1.5 mode(光子)=2
现在的问题是,光子的消散距离太短,都在模型内部消散了,这样就会使模型内部亮度过高,因此需要增加max_step_len(注意不要将这个参数和前面Parti Volume贴图中的同名参数混淆,它们的作用是不同的),我们将max_step_len增加为20,再次渲染可以得到如下的效果。
extinction(光子)=1.5
mode(光子)=2
max_step_len(光子)=20
这里要强调一下,SSS材质的渲染效果是和模型尺寸相关的,在max_step_len设置值上表现得尤其明显,在本文介绍的例子中,模型的最大的宽度是20,因此我们这里设置max_step_len为20。在你自己实际使用中可以根据情况进行类似的设置,当然不必死板,可以根据模型的尺寸上下浮动。
背景知识:Parti Volume贴图的参数
mode:当mode参数被设置为0时,整个模型都是“参与介质”,当mode设置为大于0的值时,下面的height参数将会起作用,模型只有一部分是“参与介质”,也就是材质只有一定的厚度的一部分参与光线的散射。
scatter:scatter参数设置材质将对那种颜色的光线进行散射,这个颜色就是模型“体”所显示出来的颜色。
extinction:extinction是介质的“消散系数”,它用来决定光线(光子)进入模型内部之后有多少被吸收,有多少被散射。这个参数设置为0时,相当于光线在在清洁的空气或者真空中传递,这个参数越大,材质的密度越大,光线越难透过(因为光子被散射掉的量比较大)。
r、g1和g2:这三个参数乍一看有点让人感到莫名其妙,不过他们却提供了对材质的散射效果的更加细致的控制。如果g1和g2都设置为0,则光线进入材质内部后进行“同性散射”,也就是说,光子碰到材质的微粒后,可能会向任何方向散射出去。这里插一句,只有材质内部的颗粒半径和光子半径相接近时,散射现象才可能出现。g1和g2设置为不等于0的值,光子将会作“异性散射”,-1<g1(或g2)<0时,光子向后散射,而0<g1(或g2)<1时,光子向前散射,而参数r则用来决定有多少光子向前散射,多少光子向后散射。
nonuniform:这个参数决定材质是同质的,还是异质的,如果设置为0,表明材质是完全同质的,也就是密度均匀,光线的散射也比较均匀;如果设置为1,材质是完全异质,光线的散射会有较大的变化,渲染出来的效果会显得材质中“杂质”比较多;当然也可以将这个参数设置为0到1之间的值。
height:决定参与光线散射的模型的厚度。从这个参数的存在,我们也能感觉到SSS材质不再像许多其他材质那样可以“一次设计,任意移植”,SSS材质的参数设置和模型的尺寸形状是有密切关系的,通常我们并不能直接将别人设计好的SSS材质拿过来直接使用,而是要根据自己的模型修改一些参数,比如这里的Height就是其一。注意,如果最开始的mode参数设置为0,height参数是没有效果的。
min_step_len和 max_step_len:这两个参数决定光子在异质材质内部散射时的最小步长和最大步长。
小结
SSS材质可以说是最复杂的材质了,在很多场合中,要想达到逼真的渲染效果,经常要使用SSS材质。此类材质的效果是比较难控制的,参数也比较多,含义不像其他材质那么容易明白,但是一般只要抓住extinction、scatter和max_step_len就可以制作比较好的效果。
另外如果你在实际操作中没有实现文中介绍的效果,首先请检查一下模型的尺寸和材质的参数设置,其次检查一下光源的设置。检查光源设置时考虑两个因素,一是光源的强度要恰当,二是尽量不要使用漫反射光源(Omni),因为这种光源会浪费很多光子(也就是很多光子没有照射到模型上,渲染器必须对其进行计算,但是又不会得到任何效果),不但会导致渲染速度下降,而且会影响最终的效果。