趙雪彤
(南京工業(yè)大學(xué)藝術(shù)設(shè)計(jì)學(xué)院, 南京 210000)
虛擬現(xiàn)實(shí)技術(shù)是一種以計(jì)算機(jī)技術(shù)為核心,結(jié)合各種相關(guān)科學(xué)技術(shù),形成一定范圍內(nèi)的數(shù)字環(huán)境,這種數(shù)字環(huán)境在視覺(jué)、聽(tīng)覺(jué)、觸覺(jué)等方面與真實(shí)的環(huán)境極其相似[1-4]。該技術(shù)因?yàn)榫哂谐两?、交互性、自然性等?yōu)點(diǎn)為多種學(xué)科的集成和應(yīng)用提供了新的方向[5-6]。隨著計(jì)算機(jī)圖形學(xué)的不斷發(fā)展,虛擬現(xiàn)實(shí)技術(shù)在動(dòng)畫制作方面也有了很大的發(fā)展,目前為止中外許多學(xué)者在三維動(dòng)畫制作方面已經(jīng)與虛擬現(xiàn)實(shí)技術(shù)相結(jié)合。文獻(xiàn)[2]提出了一種基于粒子群算法的三維動(dòng)畫建模的虛擬技術(shù),這種方法可以在有限的場(chǎng)景中使用計(jì)算機(jī)虛擬現(xiàn)實(shí)技術(shù)將紋理貼圖等加入動(dòng)畫系統(tǒng)的建模中,提高動(dòng)畫制作的效率,減少后期處理的流程。文獻(xiàn)[7]提出了一種基于物體邊界的動(dòng)畫建模技術(shù),這種方法針對(duì)目前虛擬現(xiàn)實(shí)在動(dòng)畫建模過(guò)程中無(wú)法高效地處理邊界這一問(wèn)題,提出了一種高效的解決方式。但是這些方法均未考慮三維動(dòng)畫建模過(guò)程中陰影生成的效率和精度,導(dǎo)致三維動(dòng)畫在制作后期需要大量的時(shí)間來(lái)手動(dòng)處理陰影和原圖的匹配度等問(wèn)題。
現(xiàn)主要對(duì)三維動(dòng)畫建模過(guò)程中陰影生成這一問(wèn)題進(jìn)行探索,基于計(jì)算機(jī)虛擬現(xiàn)實(shí)技術(shù)提出一種高效的三維動(dòng)畫建模方法。
基于計(jì)算機(jī)虛擬現(xiàn)實(shí)技術(shù)的三維動(dòng)畫建模目前已在學(xué)術(shù)界和工業(yè)界有著非常廣泛的研究和應(yīng)用,并且已經(jīng)形成了一套基本的處理流程。圖1所示為三維動(dòng)畫的制作步驟,進(jìn)而呈現(xiàn)出更加具有真實(shí)性和震撼力的動(dòng)畫作品。
圖1 3D動(dòng)畫制作步驟
圖2所示為采用虛擬現(xiàn)實(shí)技術(shù)對(duì)3D動(dòng)畫進(jìn)行制作的程序框圖,在這個(gè)系統(tǒng)中主要有3D模型建立、動(dòng)態(tài)捕捉系統(tǒng)等,而3D模型的建立則是其中非常重要并且基本的一項(xiàng)。在動(dòng)畫模型制作的過(guò)程中,模型的制作需要通過(guò)材料的紋理賦予模型表面生動(dòng)的特征,通過(guò)物體的顏色、透明度、反射、折射、自發(fā)光和粗糙度等特征來(lái)進(jìn)行反映。而映射則是通過(guò)軟件的計(jì)算將二維圖片附加到3D模型上進(jìn)而形成表面細(xì)節(jié)和結(jié)構(gòu)。
紋理映射烘焙是一種模型的預(yù)處理技術(shù),它是首先將光照信息呈現(xiàn)為映射模式,然后將帶有燈光應(yīng)用的信息映射到場(chǎng)景模型中。經(jīng)過(guò)烘焙技術(shù)處理后,模型的光紋理信息和原始模型融合成一個(gè)新的紋理映射,如圖3所示。
圖2 3D動(dòng)畫制作虛擬系統(tǒng)框圖
圖3 紋理映射烘焙
在場(chǎng)景渲染中,渲染到紋理不需要系統(tǒng)資源來(lái)計(jì)算光線,該方法為需要實(shí)時(shí)計(jì)算光信息的虛擬現(xiàn)實(shí)系統(tǒng)節(jié)省了大量的時(shí)間,因此渲染速度能夠大大提高。這項(xiàng)技術(shù)能夠提高系統(tǒng)對(duì)動(dòng)態(tài)3D實(shí)時(shí)系統(tǒng)運(yùn)行的效率,它具有的渲染性能可以使虛擬現(xiàn)實(shí)系統(tǒng)制作的動(dòng)畫效果更加接近真實(shí)場(chǎng)景的效果[7-10]。因而主要研究了在虛擬現(xiàn)實(shí)中紋理烘焙技術(shù)對(duì)動(dòng)畫制作中模型建立所起到的主要作用。
在紋理映射中,紋理圖像的尺寸直接影響了渲染效果以及渲染效率,紋理圖像越大,渲染的效果越好,而烘焙所產(chǎn)生的紋理大小直接影響效果。如果設(shè)置的烘焙紋理過(guò)高,系統(tǒng)消耗也就過(guò)高,虛擬現(xiàn)實(shí)系統(tǒng)的運(yùn)行速度就會(huì)變慢。在復(fù)雜的場(chǎng)景中,需要制訂出相應(yīng)的紋理烘焙計(jì)劃。當(dāng)表面積較大時(shí),對(duì)于復(fù)雜的模型應(yīng)該首先應(yīng)用較大尺寸的烘焙紋理,這樣在節(jié)約系統(tǒng)資源的同時(shí)能夠獲得較高精度的紋理烘焙。除此之外,在進(jìn)行紋理烘焙過(guò)后也可以通過(guò)圖像處理軟件進(jìn)一步調(diào)整和修改映射的結(jié)果和細(xì)節(jié)。
最常用的兩種模式為全效果烘焙以及燈光烘焙。全效果烘焙是指將3D模型原始的紋理映射與模型相結(jié)合產(chǎn)生的陰影映射,該映射中包含了原始的紋理和光線信息,烘焙出來(lái)的效果光感較好,更接近于渲染圖的效果。但是如果想要達(dá)到較好的效果,就需要烘焙的尺寸大一些,否則就會(huì)很模糊,因此該方法常用于小物件以及對(duì)質(zhì)感要求比較高的物體。
燈光烘焙可以記錄三維物體的漫反射和投影效果,紋理清晰,但是光線感較弱,比較適用于大面積磚墻、室外地面等。它是疊加在原始貼圖上的,所以尺寸可以設(shè)計(jì)得稍微小一些,紋理烘焙的尺寸一般不超過(guò)256×256。
除此之外,UV (U-VEEZ)映射是一種紋理貼圖坐標(biāo)的建成,也是一種映射的方式,與紋理映射最大的區(qū)別就是UV映射是將一個(gè)面上不同的區(qū)域映射到一個(gè)三維模型不同的面上,而紋理映射則是將圖像應(yīng)用到一個(gè)或者多個(gè)面,來(lái)為3D對(duì)象添加細(xì)節(jié),如圖4所示。一般來(lái)講,大多數(shù)軟件都有UV映射功能,雖然使用自動(dòng)生成的UV映射功能比較方便,但是其映射效果并不經(jīng)常是好的,尤其是對(duì)于一些具有較多細(xì)節(jié)的三維模型。對(duì)于UV映射的自動(dòng)展開(kāi)會(huì)存在許多小的沒(méi)有映射的區(qū)域,而這些區(qū)域會(huì)存在許多小斑點(diǎn),因而效果并不是很好。對(duì)此,有兩種解決辦法,第一種就是提高UV映射的自動(dòng)部署以及展開(kāi)角度的閾值,但是此方法會(huì)丟失一些映射細(xì)節(jié)。另一種辦法就是手動(dòng)協(xié)調(diào)UV紋理,這樣則會(huì)消耗較多的時(shí)間,因此需要根據(jù)不同的情況選擇不同的方法。
圖4 兩種映射方式
實(shí)驗(yàn)所采用的平臺(tái)為Unity 3D引擎,場(chǎng)景烘焙紋理尺寸為1 024×1 024,但是根據(jù)前文所述有時(shí)只需要對(duì)一些簡(jiǎn)單的三維模型進(jìn)行紋理烘焙,如果使用超過(guò)1 024×1 024的尺寸去進(jìn)行紋理烘焙則會(huì)浪費(fèi)存儲(chǔ)空間,由圖5的紋理烘焙模型可知,模型的右下角并沒(méi)有完全使用,但是當(dāng)運(yùn)行程序進(jìn)行紋理烘焙的時(shí)候仍然會(huì)占據(jù)系統(tǒng)的內(nèi)存,影響運(yùn)行速度。
圖5 紋理烘焙模型
針對(duì)這一問(wèn)題可以直接修改烘焙紋理的尺寸,但是必須要在每一次烘焙都進(jìn)行重復(fù)設(shè)置,并且這個(gè)方法在動(dòng)畫模型建立的過(guò)程中會(huì)出現(xiàn)一些如模型節(jié)點(diǎn)模糊等問(wèn)題。因此可以在動(dòng)畫模型建立中使用腳本,同時(shí)設(shè)定烘焙紋理的尺寸,來(lái)解決映射尺寸的問(wèn)題。
Bake()在Unity 3D中代表目前直接烘焙的視場(chǎng),Clear()是用來(lái)刪除目前紋理烘焙的視場(chǎng)。由于在映射尺寸設(shè)定時(shí),其尺寸大小必須是2的冪,并且映射區(qū)域最好為方形紋理,因此實(shí)驗(yàn)中烘焙紋理尺寸設(shè)置為512×512,該映射空間只占了原始映射空間的1/4,能夠有效地節(jié)約系統(tǒng)資源。其中腳本代碼如下:
[MenuItem(“shiyan/shiyan”)]
static void Init()
{
LightmapEditorSettings.maxAtlaxHeight=512;
LightmapEditorSettings.maxAtlaxWidth=512;
Lightmapping.Clear()
Lightmapping.Bake()
}n
實(shí)時(shí)陰影如圖6所示,是計(jì)算機(jī)系統(tǒng)通過(guò)相對(duì)應(yīng)的陰影生成算法來(lái)實(shí)時(shí)生成顯示陰影,進(jìn)而達(dá)到提高圖形的真實(shí)感以及對(duì)負(fù)責(zé)場(chǎng)景的適應(yīng)性的目的。在虛擬現(xiàn)實(shí)技術(shù)中實(shí)時(shí)陰影的生成更是嚴(yán)重影響著動(dòng)畫模型建立的真實(shí)感與體驗(yàn)感,而目前的實(shí)時(shí)陰影因?yàn)槠溆?jì)算方法的原因,并不能實(shí)現(xiàn)極其準(zhǔn)確的陰影結(jié)果,因此采用具有烘焙模擬的腳本來(lái)進(jìn)行實(shí)時(shí)陰影的生成,進(jìn)而增加陰影產(chǎn)生的準(zhǔn)確度,使過(guò)渡的過(guò)程更加真實(shí),代入感更強(qiáng)。
圖6 實(shí)時(shí)陰影
實(shí)驗(yàn)首先在場(chǎng)景中設(shè)置一個(gè)相機(jī)層,這個(gè)相機(jī)將會(huì)隨著三維模型的移動(dòng)而移動(dòng)陰影,整個(gè)操作過(guò)程中,將會(huì)一直保持側(cè)面正交拍攝模型,并且獲得每一幀圖像的側(cè)面圖像。在這之后,圖像將會(huì)被渲染到地面與背景上。為了防止相機(jī)獲得背景圖像,該相機(jī)層將會(huì)被設(shè)置到三維動(dòng)畫模型的隱形層,它只能在每一幀圖像中捕捉到模型層的信息。最后,把捕捉到的每一幀的圖像融合到最新創(chuàng)建的渲染紋理(RenderTexutre)中。具體實(shí)現(xiàn)代碼如下:
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)
}
具體實(shí)現(xiàn)效果如圖7所示,其生成的實(shí)時(shí)陰影更加具有真實(shí)感,過(guò)渡也更加柔和,提高了動(dòng)畫制作的逼真度。
圖7 烘焙陰影
為了能夠使得動(dòng)畫表面具有更加真實(shí)的粗糙度以及凹凸感,目前為止有法線紋理烘焙、凹凸紋理烘焙以及位移紋理烘焙3個(gè)主要手段,而這3種方式也有著很大的不同。首先,法線烘焙映射具有一個(gè)顏色通道,不同的顏色代表著不同的表面紋理信息,而凹凸映射以及位移映射只有一個(gè)灰色通道,所有的凹凸信息都在灰色通道中進(jìn)行存儲(chǔ)。其次,凹凸映射與法線映射屬于同一類型的映射,它們均使用顏色或者灰度信息來(lái)模擬模型的凹凸表面,進(jìn)而產(chǎn)生波動(dòng)效果。然而位移映射是通過(guò)模型表面的數(shù)字化來(lái)通過(guò)實(shí)體模型產(chǎn)生凹凸效果。最后,法線映射不僅能夠記錄凹凸的高度以及方向信息,更能夠記錄凹凸所在的位置,因此法線映射能夠比凹凸映射更加有效、更加真實(shí)地對(duì)模型表面產(chǎn)生凹凸效果。除此之外,烘焙法線映射比烘焙凹凸映射的速度要更加的快。
法線映射可以創(chuàng)建出比真正的模型更多的幾何假象,效果更好,多用于動(dòng)畫渲染以及制作,因此重點(diǎn)來(lái)研究其在動(dòng)畫制作方面的應(yīng)用與效果。法線映射的整體效果就在于它的RGB(一種顏色模式,分別代表紅、綠、藍(lán)三種顏色)通道,特別是在R和G通道,這兩個(gè)通道往往定義了X和Y的烘焙參數(shù)。該方法可以將具有高細(xì)節(jié)的模型通過(guò)映射烘焙出法線映射,進(jìn)而映射在低端模型的法線映射通道上,使之在擁有法線貼圖的渲染效果的同時(shí),可以大大降低渲染時(shí)需要的面數(shù)和計(jì)算內(nèi)容,從而達(dá)到優(yōu)化動(dòng)畫渲染的效果。
圖8所示為一個(gè)高細(xì)節(jié)模型與一個(gè)低細(xì)節(jié)模型,在3DS MAX中,將兩個(gè)模型對(duì)齊于同一個(gè)坐標(biāo)位置,選擇法向映射,將高精度的模型細(xì)節(jié)烘焙到低精度的模型紋理上,其中烘焙所產(chǎn)生的映射如圖9所示,圖9中白色的選區(qū)為圖像較為模糊的點(diǎn),這是由于該技術(shù)產(chǎn)生的缺陷需要通過(guò)調(diào)整紋理映射的范圍來(lái)進(jìn)行解決。當(dāng)映射完成后,帶有法向映射的低精度模型如圖10所示,圖10中可以很明顯地看到法向映射可以較好地對(duì)低精度的模型進(jìn)行紋理烘焙,進(jìn)而在渲染效果的同時(shí),減少所需要計(jì)算的內(nèi)容以及運(yùn)行時(shí)間。
圖8 一個(gè)低精度模型與一個(gè)高精度模型
圖9 烘焙產(chǎn)生的映射
圖10 低精度模型和正常映射模型
由于實(shí)驗(yàn)分別采用了3DS MAX與Unity 3D兩種平臺(tái)分別研究紋理烘焙在動(dòng)畫模型制作中的應(yīng)用,因此研究也對(duì)兩種引擎進(jìn)行了對(duì)比,從而為虛擬現(xiàn)實(shí)技術(shù)在動(dòng)畫制作方面的引擎選擇提供參考。首先在Unity 3D引擎中,映射與烘焙的參數(shù)設(shè)置比3D MAX中渲染器插件的設(shè)置少,該引擎只能烘焙光線跟蹤效果,不能烘焙光線的反射效果。但是Unity 3D能夠支持在不同場(chǎng)景下模型的單獨(dú)烘焙,并且模型能夠被重復(fù)使用。在3D MAX中,具有比較先進(jìn)而且豐富的渲染烘焙三維動(dòng)畫模型的插件,如Vray、Mental Ray等,并且一些烘焙方法是具有反射和折射效果的。但是,由于燈光效果是固定的,因此該引擎只能夠依照3DS MAX的設(shè)置來(lái)進(jìn)行使用,否則燈光效果會(huì)出現(xiàn)錯(cuò)誤,烘焙的模型不能夠在不同的場(chǎng)景進(jìn)行使用。
隨著虛擬現(xiàn)實(shí)技術(shù)的發(fā)展,在虛擬現(xiàn)實(shí)技術(shù)中真實(shí)程度的表現(xiàn)與提高一直都是受到業(yè)界廣泛關(guān)注的。在虛擬現(xiàn)實(shí)中,使用紋理烘焙技術(shù)來(lái)增加3D模型的真實(shí)度,讓3D模型在建立過(guò)程中更加生動(dòng)逼近于真實(shí)模型,已經(jīng)變得越來(lái)越廣泛。主要通過(guò)對(duì)紋理烘焙技術(shù)的介紹分析了其相關(guān)的影響因素,研究了其在動(dòng)畫制作中的應(yīng)用。采用縮放烘焙技術(shù)節(jié)省了在渲染紋理過(guò)程中的資源消耗與時(shí)間花費(fèi),通過(guò)具有烘焙模擬的腳本與Unity 3D實(shí)時(shí)陰影技術(shù)相結(jié)合,使實(shí)時(shí)陰影更加逼真,具有更高的準(zhǔn)確度與更深的代入感。對(duì)法向映射的應(yīng)用研究表明,可以在保證對(duì)低精度模型進(jìn)行細(xì)節(jié)紋理烘焙的同時(shí),節(jié)約資源,提高烘焙速度,增加低精度模型的細(xì)節(jié)特征。除此之外,對(duì)Unity 3D以及3D MAX所具有的紋理烘焙功能進(jìn)行了對(duì)比。而在實(shí)際應(yīng)用中,需要根據(jù)應(yīng)用需求來(lái)選擇所需要的引擎,為下一步虛擬現(xiàn)實(shí)技術(shù)中的紋理烘焙技術(shù)的具體應(yīng)用實(shí)施提供支持。