三维软件渲染的相关局限与解决技术
摘 要:
摘 要:本文以MAYA软件为例介绍分层处理渲染和加场渲染的局限于解决方案,无论什么情况,在大型三维动画制作项目的管理上分层渲染和加场渲染都是必要的,尽管在操作上会稍显麻烦些,但是会为成片的修缮和加工提供了更加灵活的机动性。
关键词:
关键词:渲染 Z通道 视频制式
在三维软件中进行渲染可以使用很多方法,因而在渲染的管理上也会经常遇到分层渲染的问题。对于渲染的分层处理无疑是一件很麻烦的事情。有些分层渲染的处理是为了在后期制作或者修改中更加节省时间,有些确实要求必须这样去做。
1 分层处理渲染
本文论述以MAYA软件为例,在MAYA中有很多粒子的渲染是硬件渲染类型,必须使用Window>Rendering Editor>Hardware Render Buffer截屏式渲染才能得到效果。如果要想让这些被渲染出来的粒子存在于最终效果中就必须在Hardware Render Buffer中同时生成Alpha通道,然后在后期软件制作中与软件渲染出的图片或动态素材进行合成。另外在MAYA中很多特殊效果最好也是采用分层渲染的方法进行处理。例如,PainterEffect、Optifx、Glow和Fur等。还有景深、运动模糊等也可以使用后期软件分开处理。这种处理方法不是分层渲染但却可以提高工作效率。以运动模糊为例,在后期软件中的处理速度大概比渲染快100-300倍左右。但是这种方法同时也带来了一些问题,在多物体存在的场景中,后期特效无法处理隐藏在物体后面的物体。就可以使用Z通道(Z-Depth Channel)图像来分辨场景中物体的前后关系。
Z通道虽然可以向我们提供表示远近的深度数据,但同时也有一定的缺憾。首先Z通道不支持透明,其次即使是由高质量设置生成的Z通道图像也会有明显的锯齿边缘。解决的办法是我们可以用双倍的大小进行渲染,然后将渲染出来的图像缩小一倍,这样操作相当于用插值的算法进行了一次Anti-Aliasing的反走样处理。因为无论是在Photoshop中还是像在例如AfterEffect这样的后期软件中,在图像缩小时都是利用插值算法的反走样处理技术来处理像素的。那么什么时候需要Z通道中的透明数据那?一般情况下,在后期软件中想要模拟直射和反射特技时往往需要遮挡物体的透明数据,既然Z通道不予提供,还可以使用另外的摄像机渲染对应的场景作为反射贴图来模仿反射效果。无论如何,在大型三维动画制作项目的管理上分层渲染都是必要的,尽管在操作上会稍显麻烦些,但是会为成片的修缮和加工提供了更加灵活的机动性。总而言之,其对于工作效率是很大的提高。
2 加场渲染的问题
为了适应电视广播及PAL制或NTSC制的视频要求,需要在使用MAYA进行渲染时需要生成场。通常视频系统分为两个阶段来显示一帧图像,第一阶段扫描屏幕上一半的荧光体,即从第一行开始的奇数行;第二阶段扫描屏幕上另一半的荧光体,即从第二行开始的偶数行;这两个半帧(Half-Frames)成为场(Field),把他们穿插合并成一幅图像的过程称为隔行扫描(Interlacing)。
由于视频系统分两个阶段来显示单独的帧,因此如果在渲染时不生成场(即一次渲染一帧图像的正常渲染),在播放具有快速运动的视频素材时往往会显示得不连贯,此时应该进行加场渲染,如要生成的动画是不包含快速运动对象的视频素材,可以不加场渲染。生成场的方法有两种:一种是在MAYA渲染时设置成加场渲染;另一种是将视频素材调入后期软件中加场。当在软件中设置成加场渲染时,MAYA为生成的每一帧产生两幅图像,一幅对应奇数场,另一场对应偶数场,且它们是按照时间的步值数来分配的。
尽管在MAYA中设置加场渲染如此简单,但是在MAYA中的加场渲染并不是支持全部对象。在加场渲染的过程中涉及到PaintFX和Fur的图像将不能正确的被生成,而如果使用硬件渲染时将不具备相应的加场功能。要解决这些问题就要采用后期软件加场的办法。前面提到,奇数场的分配时遵循时间步值得原理,这就告诉我们要在MAYA渲染中做一些特殊的设置才能保证后期软件加场的顺利完成。需要Render Global Settings中将By Frame设置成0.5就可以了,这样才能确保MAYA每隔0.5帧渲染一幅图像,所产生的奇数帧作为暂时的奇数场,偶数帧作为偶数场,然后调入后期软件中进行逐行扫描合并。
在处理场渲染或运动模糊时 往往需要渲染比正常情况时多几倍的帧数,以便于我们为这些序列重新定义时间,从而省去了很多重新渲染的必要时间,提高效率。这样的渲染任务中,往往是通过对By Frame的设置来添加中间帧。将By Frame设置成0.5,表示每0.5帧渲染一幅图像,渲染2帧则生成4幅图像,它们的序号应是Name.001、Name.002、Name.003、Name.004。如果将By Frame设置成>1的数,比如3.则表示每3帧渲染一幅图像,那么渲染15帧则生成5幅图像,,它们的序号应是Name.001、Name.004、Name.007、Name.010、Name.013,这样一来问题就出现了,由于这些序列帧的序号不是贯通的,在很多后期软件中不能读取这种断开的编号。解决这类问题的方法有很多种,可以通过手工收缩场景中的动画关键帧或者使用Trax Editor中的Create>Time Wrap来处理动画的长度,这需要很精细地拾取场景中每一条动画曲线,或者将已经被赋予动画关键帧的对象属性一一挑选出来加入Character组成Clip,但是实践证明,无论怎样都很麻烦,在大型场景中甚至很容易出错。
解决这些问题的方法就是使用MAYA中的MEL脚本进行处理,frameWarpMake就是主程序,它采用一系列的手段分两种情况查找场景中的动画曲线节点。一种是查找场景中所有的动画曲线,一种是查找被选择物体的动画曲线,并使用string what字符串变量作为导入函数来判断和区分这两种情况,而后再继续创建一个FrameWrap节点来控制对应的动画曲线。
FrameWrap是引导程序,从理论上讲它是可有可无的,但在实际运用中,它使得程序运行的名称和MEL文件的名称统一起来,是一种规范的程序写法。FrameWrap引导程序的内容只有一个,那就是运行FrameWrapMakeUI界面程序,界面程序又调入主程序,从而使整个程序得到统一。
本文编号:14534
本文链接:https://www.wllwen.com/kejilunwen/jisuanjikexuelunwen/14534.html