赵雪彤
(南京工业大学艺术设计学院, 南京 210000)
虚拟现实技术是一种以计算机技术为核心,结合各种相关科学技术,形成一定范围内的数字环境,这种数字环境在视觉、听觉、触觉等方面与真实的环境极其相似[1-4]。该技术因为具有沉浸性、交互性、自然性等优点为多种学科的集成和应用提供了新的方向[5-6]。随着计算机图形学的不断发展,虚拟现实技术在动画制作方面也有了很大的发展,目前为止中外许多学者在三维动画制作方面已经与虚拟现实技术相结合。文献[2]提出了一种基于粒子群算法的三维动画建模的虚拟技术,这种方法可以在有限的场景中使用计算机虚拟现实技术将纹理贴图等加入动画系统的建模中,提高动画制作的效率,减少后期处理的流程。文献[7]提出了一种基于物体边界的动画建模技术,这种方法针对目前虚拟现实在动画建模过程中无法高效地处理边界这一问题,提出了一种高效的解决方式。但是这些方法均未考虑三维动画建模过程中阴影生成的效率和精度,导致三维动画在制作后期需要大量的时间来手动处理阴影和原图的匹配度等问题。
现主要对三维动画建模过程中阴影生成这一问题进行探索,基于计算机虚拟现实技术提出一种高效的三维动画建模方法。
基于计算机虚拟现实技术的三维动画建模目前已在学术界和工业界有着非常广泛的研究和应用,并且已经形成了一套基本的处理流程。图1所示为三维动画的制作步骤,进而呈现出更加具有真实性和震撼力的动画作品。
图1 3D动画制作步骤
图2所示为采用虚拟现实技术对3D动画进行制作的程序框图,在这个系统中主要有3D模型建立、动态捕捉系统等,而3D模型的建立则是其中非常重要并且基本的一项。在动画模型制作的过程中,模型的制作需要通过材料的纹理赋予模型表面生动的特征,通过物体的颜色、透明度、反射、折射、自发光和粗糙度等特征来进行反映。而映射则是通过软件的计算将二维图片附加到3D模型上进而形成表面细节和结构。
纹理映射烘焙是一种模型的预处理技术,它是首先将光照信息呈现为映射模式,然后将带有灯光应用的信息映射到场景模型中。经过烘焙技术处理后,模型的光纹理信息和原始模型融合成一个新的纹理映射,如图3所示。
图2 3D动画制作虚拟系统框图
图3 纹理映射烘焙
在场景渲染中,渲染到纹理不需要系统资源来计算光线,该方法为需要实时计算光信息的虚拟现实系统节省了大量的时间,因此渲染速度能够大大提高。这项技术能够提高系统对动态3D实时系统运行的效率,它具有的渲染性能可以使虚拟现实系统制作的动画效果更加接近真实场景的效果[7-10]。因而主要研究了在虚拟现实中纹理烘焙技术对动画制作中模型建立所起到的主要作用。
在纹理映射中,纹理图像的尺寸直接影响了渲染效果以及渲染效率,纹理图像越大,渲染的效果越好,而烘焙所产生的纹理大小直接影响效果。如果设置的烘焙纹理过高,系统消耗也就过高,虚拟现实系统的运行速度就会变慢。在复杂的场景中,需要制订出相应的纹理烘焙计划。当表面积较大时,对于复杂的模型应该首先应用较大尺寸的烘焙纹理,这样在节约系统资源的同时能够获得较高精度的纹理烘焙。除此之外,在进行纹理烘焙过后也可以通过图像处理软件进一步调整和修改映射的结果和细节。
最常用的两种模式为全效果烘焙以及灯光烘焙。全效果烘焙是指将3D模型原始的纹理映射与模型相结合产生的阴影映射,该映射中包含了原始的纹理和光线信息,烘焙出来的效果光感较好,更接近于渲染图的效果。但是如果想要达到较好的效果,就需要烘焙的尺寸大一些,否则就会很模糊,因此该方法常用于小物件以及对质感要求比较高的物体。
灯光烘焙可以记录三维物体的漫反射和投影效果,纹理清晰,但是光线感较弱,比较适用于大面积砖墙、室外地面等。它是叠加在原始贴图上的,所以尺寸可以设计得稍微小一些,纹理烘焙的尺寸一般不超过256×256。
除此之外,UV (U-VEEZ)映射是一种纹理贴图坐标的建成,也是一种映射的方式,与纹理映射最大的区别就是UV映射是将一个面上不同的区域映射到一个三维模型不同的面上,而纹理映射则是将图像应用到一个或者多个面,来为3D对象添加细节,如图4所示。一般来讲,大多数软件都有UV映射功能,虽然使用自动生成的UV映射功能比较方便,但是其映射效果并不经常是好的,尤其是对于一些具有较多细节的三维模型。对于UV映射的自动展开会存在许多小的没有映射的区域,而这些区域会存在许多小斑点,因而效果并不是很好。对此,有两种解决办法,第一种就是提高UV映射的自动部署以及展开角度的阈值,但是此方法会丢失一些映射细节。另一种办法就是手动协调UV纹理,这样则会消耗较多的时间,因此需要根据不同的情况选择不同的方法。
图4 两种映射方式
实验所采用的平台为Unity 3D引擎,场景烘焙纹理尺寸为1 024×1 024,但是根据前文所述有时只需要对一些简单的三维模型进行纹理烘焙,如果使用超过1 024×1 024的尺寸去进行纹理烘焙则会浪费存储空间,由图5的纹理烘焙模型可知,模型的右下角并没有完全使用,但是当运行程序进行纹理烘焙的时候仍然会占据系统的内存,影响运行速度。
图5 纹理烘焙模型
针对这一问题可以直接修改烘焙纹理的尺寸,但是必须要在每一次烘焙都进行重复设置,并且这个方法在动画模型建立的过程中会出现一些如模型节点模糊等问题。因此可以在动画模型建立中使用脚本,同时设定烘焙纹理的尺寸,来解决映射尺寸的问题。
Bake()在Unity 3D中代表目前直接烘焙的视场,Clear()是用来删除目前纹理烘焙的视场。由于在映射尺寸设定时,其尺寸大小必须是2的幂,并且映射区域最好为方形纹理,因此实验中烘焙纹理尺寸设置为512×512,该映射空间只占了原始映射空间的1/4,能够有效地节约系统资源。其中脚本代码如下:
[MenuItem(“shiyan/shiyan”)]
static void Init()
{
LightmapEditorSettings.maxAtlaxHeight=512;
LightmapEditorSettings.maxAtlaxWidth=512;
Lightmapping.Clear()
Lightmapping.Bake()
}n
实时阴影如图6所示,是计算机系统通过相对应的阴影生成算法来实时生成显示阴影,进而达到提高图形的真实感以及对负责场景的适应性的目的。在虚拟现实技术中实时阴影的生成更是严重影响着动画模型建立的真实感与体验感,而目前的实时阴影因为其计算方法的原因,并不能实现极其准确的阴影结果,因此采用具有烘焙模拟的脚本来进行实时阴影的生成,进而增加阴影产生的准确度,使过渡的过程更加真实,代入感更强。
图6 实时阴影
实验首先在场景中设置一个相机层,这个相机将会随着三维模型的移动而移动阴影,整个操作过程中,将会一直保持侧面正交拍摄模型,并且获得每一帧图像的侧面图像。在这之后,图像将会被渲染到地面与背景上。为了防止相机获得背景图像,该相机层将会被设置到三维动画模型的隐形层,它只能在每一帧图像中捕捉到模型层的信息。最后,把捕捉到的每一帧的图像融合到最新创建的渲染纹理(RenderTexutre)中。具体实现代码如下:
using UnityEngine;
using System.Collections;
public class NewBehaviourScript: MonoBehaviour{
public RenderTexture s;
void Update(){
renderer.material.mainTexture=s;
}
void OnGUI()
{
GUI.DrawTexture(new Rect(0, 0, 100, 100),s)
}
具体实现效果如图7所示,其生成的实时阴影更加具有真实感,过渡也更加柔和,提高了动画制作的逼真度。
图7 烘焙阴影
为了能够使得动画表面具有更加真实的粗糙度以及凹凸感,目前为止有法线纹理烘焙、凹凸纹理烘焙以及位移纹理烘焙3个主要手段,而这3种方式也有着很大的不同。首先,法线烘焙映射具有一个颜色通道,不同的颜色代表着不同的表面纹理信息,而凹凸映射以及位移映射只有一个灰色通道,所有的凹凸信息都在灰色通道中进行存储。其次,凹凸映射与法线映射属于同一类型的映射,它们均使用颜色或者灰度信息来模拟模型的凹凸表面,进而产生波动效果。然而位移映射是通过模型表面的数字化来通过实体模型产生凹凸效果。最后,法线映射不仅能够记录凹凸的高度以及方向信息,更能够记录凹凸所在的位置,因此法线映射能够比凹凸映射更加有效、更加真实地对模型表面产生凹凸效果。除此之外,烘焙法线映射比烘焙凹凸映射的速度要更加的快。
法线映射可以创建出比真正的模型更多的几何假象,效果更好,多用于动画渲染以及制作,因此重点来研究其在动画制作方面的应用与效果。法线映射的整体效果就在于它的RGB(一种颜色模式,分别代表红、绿、蓝三种颜色)通道,特别是在R和G通道,这两个通道往往定义了X和Y的烘焙参数。该方法可以将具有高细节的模型通过映射烘焙出法线映射,进而映射在低端模型的法线映射通道上,使之在拥有法线贴图的渲染效果的同时,可以大大降低渲染时需要的面数和计算内容,从而达到优化动画渲染的效果。
图8所示为一个高细节模型与一个低细节模型,在3DS MAX中,将两个模型对齐于同一个坐标位置,选择法向映射,将高精度的模型细节烘焙到低精度的模型纹理上,其中烘焙所产生的映射如图9所示,图9中白色的选区为图像较为模糊的点,这是由于该技术产生的缺陷需要通过调整纹理映射的范围来进行解决。当映射完成后,带有法向映射的低精度模型如图10所示,图10中可以很明显地看到法向映射可以较好地对低精度的模型进行纹理烘焙,进而在渲染效果的同时,减少所需要计算的内容以及运行时间。
图8 一个低精度模型与一个高精度模型
图9 烘焙产生的映射
图10 低精度模型和正常映射模型
由于实验分别采用了3DS MAX与Unity 3D两种平台分别研究纹理烘焙在动画模型制作中的应用,因此研究也对两种引擎进行了对比,从而为虚拟现实技术在动画制作方面的引擎选择提供参考。首先在Unity 3D引擎中,映射与烘焙的参数设置比3D MAX中渲染器插件的设置少,该引擎只能烘焙光线跟踪效果,不能烘焙光线的反射效果。但是Unity 3D能够支持在不同场景下模型的单独烘焙,并且模型能够被重复使用。在3D MAX中,具有比较先进而且丰富的渲染烘焙三维动画模型的插件,如Vray、Mental Ray等,并且一些烘焙方法是具有反射和折射效果的。但是,由于灯光效果是固定的,因此该引擎只能够依照3DS MAX的设置来进行使用,否则灯光效果会出现错误,烘焙的模型不能够在不同的场景进行使用。
随着虚拟现实技术的发展,在虚拟现实技术中真实程度的表现与提高一直都是受到业界广泛关注的。在虚拟现实中,使用纹理烘焙技术来增加3D模型的真实度,让3D模型在建立过程中更加生动逼近于真实模型,已经变得越来越广泛。主要通过对纹理烘焙技术的介绍分析了其相关的影响因素,研究了其在动画制作中的应用。采用缩放烘焙技术节省了在渲染纹理过程中的资源消耗与时间花费,通过具有烘焙模拟的脚本与Unity 3D实时阴影技术相结合,使实时阴影更加逼真,具有更高的准确度与更深的代入感。对法向映射的应用研究表明,可以在保证对低精度模型进行细节纹理烘焙的同时,节约资源,提高烘焙速度,增加低精度模型的细节特征。除此之外,对Unity 3D以及3D MAX所具有的纹理烘焙功能进行了对比。而在实际应用中,需要根据应用需求来选择所需要的引擎,为下一步虚拟现实技术中的纹理烘焙技术的具体应用实施提供支持。