资源描述
(以下讨论仅限于raytrace贴图的讨论,对于raytrace材质的一些更为丰富的内容不在讨论之列)
所谓光线追踪(raytrace)是以模拟真实世界中光的某些物理性质为最终目的的。在现实中,无限无数细的光线从各种光源向所有方向放射。数百万的光线投射到物体的表面与其碰撞然后经过反弹或穿透最终遇到摄像机而结束。由于数百万的光线的投射方向并不是全部到达摄像机,这样一来,计算的次数将会特别高。
由于我们只关心实际撞击屏幕的光线,所以在MAX里是从摄像机开始工作,最终到达光源的计算方式,并且在此过程中只分辨确定像素的光线。这种方式实际上是一种反向(Backword)光线追踪。能大大减少计算量。特别是MAX还使用了光线弹射深度(Ray Depth)这一流行的光线追踪技术,也就是每一次一条光线和几个表面碰撞,产生一条新的光线---- 通常向其它方向传播。每一次碰撞叫一个深度。在MAX中,设定Ray Depth变量,能控制光线碰撞物体后反弹或折射的次数。缺省值是9,但依据场景的的复杂程度可能需要更多的次的Ray Depth。
有一种快速的方法来检验Ray Depth参数设置是否足够高,如果一条光线达到了最大深度也无法到达光源,Raytracer将按照Maximum Depth右侧的选项决定光线的颜色。在Color to Use at Max Depth选项中,你可以选择渲染背景色或某种特定的颜色。Max的光线追踪引擎是自适应的,所以不用规定最小值----Raytracer能自动发现每个像素所需要的反射光线的最低数量。一般情况下,一个相对简单的场景简单物体的表面只需要一条或两条光线。
总结:光线追踪要依靠灯光才能正常工作(GI是另外的一种灯光Raydiosity或Phonto),要记住,光线追踪的范围是从摄像机或视点到物体后到光源。放置良好的灯光和复杂丰富的场景和背景会使采用光线追踪的渲染效果更加漂亮。还有一个大家容易忽视的问题,就光线追踪的深度。在反射和折射这两种情况时,他们的深度要求有很大的不同,在设置Raytrace贴图时,人们习惯把他的Ray Depth设置为2或3,以加快计算速度。这是因为在大多数光线反射的情况下,光线到达物体后经过二到三次的反射就会到达摄像机,Ray Depth已经能够满足需要,而不影响画面的效果。在那种情况下要增加Ray Depth呢?一,在场景中存在多个的反射物体,光线会在它们之间来回反射,而它们之间位置的摆放足以影响到对方,足以影响到反射的效果时才加大Ray Depth值。二,当一个反射物体是画面的表现重点,而物体本身形状较为复杂,光线会在物体自身上面来回反射(也包括对场景周围的反射)多次后才到达摄像机或视点,也要加大Ray Depth到适当值,才能不影响到画面的效果。这两种情形也完全同样适用于透明物体的折射,但要强调的是,光线在透明物体内的折射情况比我们想像的要复杂的多,在现实的世界中,随着物体本身的复杂程度,光线会在物体内部多次的穿透折射过去(包括多次的来回于周围场景和物体),一般都会出现Ray Depth死循环的情况(这是自然界真实而必然的现象)!!!在计算机中,光线从摄像机出发经过多次全角度来回的穿透物体后在限定的Ray Depth次数下仍然到达不了光源,在画面上表现出来就是一个黑色像素或是上面所说的Color to Use at Max Depth选项中你自定的颜色。
讲到这里,就不能不说到大多数人在表现透明艺术品时(普通玻璃板除外)经常会碰到的“黑斑的问题。去除黑斑的方法一般有三种:
一,场景最好是全封闭的空间,不要出现未封闭的空洞而在折射时把黑色的背景一起加进了计算。如是户外的场景,要加上个精心制作的球形自发光环境贴图或背景。
二,估算并测试所需的Ray Depth,适当加大Ray Depth值到视觉上感觉不出或可以忽略掉黑斑为止(至少为5),当Ray Depth值过大,以致大大影响到了你的运算速度,我们就要通过Color to Use at Max Depth选项自定一个特定的颜色来修饰(也可以用特定背景色,他和背景上设置的位图贴图有不同作用)。
三,折射率IOR的设置,一般我们都是严格的按照折射率表来设定,但很多国外3D艺术家并不注意这些数据,只是凭感观而定。他们建议如果你刚开始应用折射,从1.1开始,然后调整加大这些值以得到“恰当的观感”。我个人也是喜欢这样来做的,但在摸索对比中发现,同样的设置和同样的物体场景,IOR越小越不容易出现黑色区域,反之,IOR越大越容易出现黑色区域。按我的理解,是因为折射率越大,光线在物体中折射的角度越大,如果物体形状复杂,光线就不容易在限定的Ray Depth值下到达光源,从而渲染出黑色的像素。
接下来讲讲在Max Raytrace反射和折射中容易出现的锯齿现象。通常大家所熟知的解决方法是在Raytrace贴图和材质的Global Settings(全局设置)按钮中勾选Global Ray Antialiaser。
Max提供了两种反锯齿的选项,默认的是智能的快速自适应反锯齿设置(Fast Adaptive Antialiase),另一种则提供了更多的人工设置选项(Multiresolution Adaptive Antialiase)。特别要提的是,它和Scanline引擎下材质中SuperSample(超级采样)是两种完全不同的概念。它对整个场景都用基于Raytrace的计算方法作采样处理,很可怕,这种技术常常被称为重复采样(oversampling),其中Raytracer多次计算扫过渲染图像。每一次都对图像进行分析,确定那些区域要进行更深入的反走样,反锯齿(为渲染出真实的3D反射和折射模糊提供了技术和参数上的保证)。如果你觉得渲染过程对于Raytracer较长的话,实际上是在等待进行反走样反锯齿处理。
当然,这里有个使用光线追踪反走样反锯齿的主要问题----速度。一旦在Raytraced贴图或材质中用了这个选项,渲染性能就会急剧下降。而且是全局打开Antialiase,场景中所有的相关应用了Raytrace的物体都全部进行Antialiase计算,它的local局部面板只是用来设置个别Raytrace物体的Antialiase参数的(以全局打开Antialiase为前提)!
以下,将用一些图片来说明上面的问题,会更为直观。
在实践中我发现所谓的Max的Antialiase在渲染中不但速度慢得要死,而且效果太过于模糊,远远达不到我们所熟知的mental ray所渲染的明锐和清晰。但是Max是完全可以达到这种效果的,速度还比Antialiase要快很多,那就是使用Scanline引擎下材质中SuperSample(超级采样)!这是基于扫描线渲染系统的像素的反锯齿。由于这个结果,所以在使用Max Raytrace贴图时,我们可以这样来理解它,如果你要实现明锐和清晰反锯齿效果,我们可以使用SuperSample(超级采样),如果你要实现略微的模糊反折射,可以使用Antialiase,但是要实现非常的模糊反折射,在Antialiase设置中我们还有很多事情要理解。我们就姑且把Antialiase当做是模糊引擎,把SuperSample当做反锯齿引擎吧!
使用SuperSample来反锯齿,Max提供了四种采样方式,
默认的是 MAX2.5 Star 采样方式,它的原理是像素的的中心周围平均进行4个点的采样。
第二种是Adaptive Halton,按离散的“准随机”方式将采样点沿X轴和Y轴分布。根据Quality(品质)的不同设置值,采样点的数目为4~40。
第三种是Adaptive Uniform,采样点规则分布,品质从最小值4到最大值36,该方式不是平直的,而是稍微有些歪斜,以提高横轴和纵轴方向上的精度。
第四种是Hammersley,采样点沿X轴规则分布,而在Y轴则按离散的“准随机”方式分布,根据Quality(品质)的不同设置值,采样点的数目为4~40。
一般情况下我们使用MAX2.5 Star 采样方式就可以满足要求了,除非有更高更特殊的反锯齿要求,才使用其它方式,关于这四种方式在效果和速度上有那些差别,篇幅有限,就不做具体的测试了,有兴趣的朋友可以在有时间的时候自己试试,说不定能找到一个自己非常钟爱的采样方式和优化设置!
raytrace的模糊。先来说说模糊,主要的效果控制参数是Blur(模糊)和Defocusing(散射(散开)模糊),我们来试试这两个参数的设置的效果:
未开全局反锯齿反走样:
打开全局反锯齿反走样:
开始Blur模糊设置:
我们发现,这两个数值都不能设置的太大,否则画面效果破坏的是惨不忍睹,建议Blur不大于0.1而Defocusing不大于0.03,如果你只是要略微的模糊效果,就用默认的Blur 0.0 和Defocusing 0.0 吧!
那么,有没有办法实现类似final render,brazil r/s ,vray和mental ray等高级光线追踪渲染器里的非常模糊的光线追踪反折射的效果呢?答案是可以。上面我们说过:"Max的raytrace采样是重复采样(oversampling),其中Raytracer多次计算扫过渲染图像。每一次都对图像进行分析,确定那些区域要进行更深入的反走样,反锯齿(为渲染出真实的3D反射和折射模糊提供了技术和参数上的保证)。"也就是说实现非常模糊的光线追踪反折射的效果,在加大Blur 和 Defocusing 值的同时,为了保证精确的3D模糊运算,必须要加大Raytracer扫描的次数到满意值位为止。
在使用默认的智能的快速自适应反锯齿设置(Fast Adaptive Antialiase)时,Max提供了智能自适应的扫描次数的设置:自动按照Intial Rays(基本光线扫描次数)4,Max.Rays(最大光线扫描次数)15来进行计算。
这个设置只能满足Blur不大于0.1而Defocusing不大于0.03的需要,我们要自己来设置Intial Rays和Max.Rays就要使用下面的另外一种人工设置选项(Multiresolution Adaptive Antialiase)。
最后,我用了个较为“恐怖”的数值,达到了满意的模糊效果。
注意:1.你可以在使用Multiresolution Adaptive Antialiase时把Intial Rays和Max.Rays设置为4,4 来大大加快实现略微模糊(Blur 0.0 Defocusing 0.0)的计算速度,而且画面效果还令人满意 。
2.如果你发现在设置很大的Intial Rays和Max.Rays后仍然画面有一点点瑕疵,又不想再增加渲染时间,可以通过更改Blur 和 Defocusing 下面对应Blur Aspect 和 Defocusing Aspect值来改善画面,如果发现图形失真大部分出现在水平方向上,可以尝试将Blur Aspect 增加到1.5,这将改变模糊效果的形状,反之,如果失真大部分出现在竖直方向上,以尝试将Blur Aspect 降到0.5。
在blur 1.0时画面较为理想。
开始Defocusing散射(散开)模糊设置:
单管线加速和双管线加速。
raytrace的衰减。
衰减用限制发射或折射环境距离的方法来控制材质上的折射反射量。在真实环境中也是常见到的现象。因为环境反射少了,所以计算时间也相应的减小了,特别是在进行Antialiase处理时。也就是说材质衰减越多,渲染时间越短。
注意:
衰减距离一定要设置得当,因为在衰减距离以外的所有场景Raytrace都用背景色或上面所说到的你自定的特殊颜色来代替了。所以在制作效果图时,会因为此在反射折射时让黑色或白色背景色大量的出现在你的Raytrace物体上,从而影响了画面效果。建议在raytrace单独提供的环境贴图栏里加上一个和你环境类似的球形环境贴图来解决这个问题。
Max的Raytrace的贴图提供了多种的衰减形式,由于教为简单和容易理解,我就不再详细的讲解了。选用一种适合画面要求或你个人偏爱的来用吧。(推荐使用Custom Falloff)
这是Max进行Raytrace加速计算时的两种不同的算法,单管线加速适合一般较为简单的场景加速,双管线加速适合于场景极为复杂的渲染加速一般情况下,Max可以智能的自适应的选择一种来进行计算,除非你有特殊的要求,我个人在进行了简单的测试后觉得差别不是很大,推荐不要研究也罢
Raytrace的其它一些效果控制:
反射或折射透明区域控制
我在上面加了个黑白的棋盘格子贴图,结果如下:
凡是纯黑(255,255,255,)以上的贴图区域都正常反射或折射。我也不知道是用来作啥用的,哈哈!
反射折射用同色调偏色
打开默认的白色,结果如下:
彩色的环境折射后变黑白灰度色调了
再用了个绿色:
这张图就是使用了这个效果做出来的,可以用于制作调子较暗的彩色透明玻璃或反射物体。
接下来是颜色过滤。(有别于材质属性面板下的过滤色,那个过滤色主要是纯scanline引擎控制非raytrace物体透明或反射衰减方式下的颜色过滤)
结果和上面的有些不同,更透明一些。是基于过滤色的透明。如果设置的颜色明度较高,会有一些环境原来的颜色滤过来。
是个好东东。
最后一个是FOG,它在透明折射物体内产生自发光的有浓度感的雾。
start dist是雾效开始的距离点,end dist是雾效衰减到零时的距离点,基于max里你定的单位。end dist设置得越大,越透明。maunt是雾浓度的强度。通过它我们可以做出一些特殊的材质效果来。
啰说了这么多烦人的理论,接下来讲讲实际的问题吧。那就是室内外效果图中透明玻璃的表现。我个人自己的一些小做法。
一.室内平板玻璃的制作。
我是用多维材质来控制不同面的效果的。首先设置一个BOX玻璃的几个面的ID。把玻璃的上面和下面设置ID号为1,把玻璃侧面的所有面设置ID号设置为2。
设置多维材质的数目为二,玻璃的侧面(ID2)应用一个较不透明的绿色材质,在下面的属性面板下再设置一下过滤色为深绿。
由于平板玻璃的折射在通常视觉下,已经可以忽略不计,我们就不设置raytrace折射效果了。
在ID1的材质下,作如下设置。主要透明度保证的前提下重点设置反射效果。
最后的玻璃效果是这样的:
最后附上上此玻璃的参数设置:
设置了一个球体作为户外环境,并加上适当贴图:
折射贴图通道先用falloff贴图:
在falloff贴图里设置:
展开阅读全文