邱百爽,段勝輝
(華北理工大學(xué)輕工學(xué)院 河北 唐山 063000)
傳統(tǒng)形式的高校宣傳一般是通過實(shí)地取景,成片以后通過PS等軟件對圖片進(jìn)行修飾調(diào)色。但是通過專業(yè)三維軟件可以制作校園的三維仿真模型,在計算機(jī)上根據(jù)需要調(diào)整各個模型的位置、大小、材質(zhì),控制光線的角度、顏色等。后期還可以將3ds Max完成的模型導(dǎo)入到Unity3D中,對模型進(jìn)行進(jìn)一步的加工來制作自由世界漫游系統(tǒng),使得用戶能身臨其境地瀏覽校園。
校園漫游系統(tǒng)構(gòu)建過程首先需要對學(xué)校地形地貌進(jìn)行考察、測繪、拍照,并記錄數(shù)據(jù)及圖像,然后通過不同的建模方法進(jìn)行模型的制作并為所有模型賦予材質(zhì)貼圖。將完成的所有模型導(dǎo)入Unity3D中,對模型進(jìn)行適當(dāng)調(diào)整后導(dǎo)入人物模型,對模型添加剛體、碰撞體、動畫器及控制腳本,然后對場景相機(jī)掛載腳本文件,跟隨人物。最后對場景進(jìn)行豐富,添加合適的物理效果,構(gòu)建發(fā)布成可執(zhí)行文件。
首先對實(shí)景進(jìn)行考察,通過無人機(jī)和相機(jī)來獲取學(xué)校的整體鳥瞰圖以及建筑細(xì)節(jié)圖,在3ds Max軟件中對區(qū)域進(jìn)行劃分,對模型進(jìn)行分類以便分別建模,最后合成完整模型。然后為每一個模型添加精確的貼圖并賦予材質(zhì)。當(dāng)模型整體位置及比例調(diào)整好以后,我們對其添加燈光以及真實(shí)的大氣效果,通過攝像機(jī)視角進(jìn)行渲染,對燈光違背物理原則以及模型破面的BUG進(jìn)行修復(fù),最終在Max內(nèi)完成整體的3D模型[1]。
華北理工大學(xué)輕工學(xué)院的建筑多以傳統(tǒng)中式的屋頂為主并融入了現(xiàn)代元素,在具有濃郁中式古典風(fēng)格的同時也體現(xiàn)出了現(xiàn)代的風(fēng)格。但傳統(tǒng)中式的屋頂是美觀且細(xì)節(jié)極其豐富的,數(shù)量繁多的瓦片、斗拱、龍骨,圖案精美的動物甚至是龍圖騰的雕刻,這些都是制作過程的難點(diǎn)。對于這些難點(diǎn)位置模型的處理我們主要采取兩種方式:一方面是正常繪制中高模型例如瓦片等,另一方面則是建立低模或表現(xiàn)大概輪廓,通過紋理貼圖和法線貼圖來表現(xiàn)物體表面的材質(zhì)和紋理凹凸效果等細(xì)節(jié)。因此,在建模時需要將模型的中式風(fēng)格與現(xiàn)代風(fēng)格的部分進(jìn)行分割制作,而后合并到一起。下面以學(xué)校荷花池模型為例說明建模過程及材質(zhì)貼圖原理。
小橋、河水、荷花、涼亭相得益彰,為校園平添幾分風(fēng)采。對于這些不規(guī)則模型我們主要采用多邊形建模法和二維線條建模法。多邊形建模主要是運(yùn)用基本幾何體和擴(kuò)展幾何體構(gòu)建基本模型,對其采用多邊形建模命令進(jìn)行調(diào)整優(yōu)化。二維線條建模主要是利用基本的建模方式,將二維圖形配合使用一些命令,構(gòu)建三維模型[2]。對于3ds Max來說,三維多邊形物體模型應(yīng)盡量保證其面都是四邊面,否則會出現(xiàn)破面、閃面的情況。在樣條線的彎曲過于隨機(jī)和不規(guī)則的情況下,擠出后直接塌陷很容易出現(xiàn)破面,所以解決辦法是通過修改線條,將有問題的面改為標(biāo)準(zhǔn)的四邊面,然后再進(jìn)行插入倒角等一系列操作。
小橋欄桿模型的建模首先需要繪制二維樣條線,然后使用倒角剖面修改器來改變不同位置的凹凸收縮效果以完成石柱頭部建模,并將其與進(jìn)行過一定倒角的石柱本體拼接完成。對于橋面,橋洞、橋墩使用基礎(chǔ)長方體調(diào)整出應(yīng)有的形狀,擺放好合適的位置,而后沿著各個模型的邊界,通過頂點(diǎn)捕捉的方式繪制出對應(yīng)形狀的樣條線,對其添加擠出修改器,擠出等同的厚度后即可達(dá)到目標(biāo)。
涼亭頂部模型的建模采用拆分法。涼亭頂部覆蓋面最主要的是瓦片,我們從圓柱體出發(fā)通過插入將其改成一通心管,而后刪掉一半并將一端收縮,就形成了需要的形狀。通過實(shí)例的方式對其復(fù)制來形成屋頂瓦片重疊的效果。對于斗拱,我們將其分為一個個形狀大小不同的多邊形物體分別建模,而后再拼接到一起。對于脊骨上雕刻的部分,我們通過Bezier點(diǎn)來調(diào)整二維樣條線的位置和細(xì)節(jié),并添加擠出命令來形成多邊形物體模型。
逼真的模型效果除了完成建模,還需要趨近真實(shí)的優(yōu)秀材質(zhì)。現(xiàn)實(shí)世界的各種物體有著不同的漫反射顏色,不同的光澤度,不同的凹凸程度。完成模型后需要通過材質(zhì)及貼圖表現(xiàn)出物體本源的物理效果。下面以荷花池周圍鵝卵石的效果為例來說明模型的材質(zhì)貼圖原理。
本文使用VRayMtl材質(zhì),其中3個通道分別為反射、漫反射和凹凸通道,用來處理荷花池鵝卵石的材質(zhì)貼圖效果。首先采用VRay位圖作為基礎(chǔ)貼圖,將原始圖片賦予模型,連接材質(zhì)球的漫反射通道使其表現(xiàn)出基礎(chǔ)的紋理效果,然后通過顏色校正表現(xiàn)出合適的顏色[3]。漫反射效果通過貼圖控制即可,而反射效果則需要通過貼圖和材質(zhì)球參數(shù)共同控制,材質(zhì)球參數(shù)部分需要調(diào)整光澤度來達(dá)成一個較為合理的高光效果。我們將法線貼圖連接到凹凸通道,通過調(diào)整材質(zhì)球的凹凸通道比例來控制具體的凹凸效果。在大模型或者貼圖較為密集的模型上,使用UVW貼圖通常需要將Gizmo縮小,而這時通常會出現(xiàn)貼圖瓷磚性重復(fù)問題,因此我們通過VRay隨機(jī)器將貼圖通過算法避免重復(fù)拼接。反射、漫反射和凹凸用同一個UVW隨機(jī)器也是為了保證隨機(jī)化的過程中參數(shù)相同,以免導(dǎo)致貼圖錯亂或者紋理和凹凸效果不一致的情況。
VRay渲染器為使用者提供了完全仿真的太陽光模型。與3ds Max中集成的燈光模型不同,VRay太陽光模型會根據(jù)創(chuàng)建的光源點(diǎn)與目標(biāo)點(diǎn)的角度和距離來表現(xiàn)出不同的光線效果。例如正午的陽光是高且亮的,投射下來的陰影會比較清晰,顏色微黃,但是傍晚的陽光則低且昏暗,投射出來的陰影效果是較為模糊的,并且顏色昏黃[4]。我們利用VRay太陽光作為主要光源,使用HDRI環(huán)境貼圖作為環(huán)境光,輔以穹頂燈來增強(qiáng)亮度,對整個模型場景進(jìn)行打光。我們選擇VRay物理相機(jī),這個相機(jī)同樣是完全模擬真實(shí)相機(jī)的參數(shù),比如光圈、焦距、感光度等,和生活中的相機(jī)無異,可以快速調(diào)節(jié)相機(jī)的各項參數(shù)來達(dá)到想要的效果。
經(jīng)過對校園內(nèi)眾多模型的逐一建模及添加材質(zhì)貼圖,并添加燈光和攝像機(jī)操作,最終完成校園漫游系統(tǒng)所需的所有模型,其中小橋荷花池的三維模型效果見圖1。
將制作完成的校園場景模型導(dǎo)入到Unity3D中,該過程會出現(xiàn)部分材質(zhì)損壞,需要在Unity3D中重新添加基礎(chǔ)材質(zhì),并對部分損壞的材質(zhì)加以校正。材質(zhì)校正完成后,我們將準(zhǔn)備好的人物模型導(dǎo)入其中。
漫游系統(tǒng)要求人物能夠在場景中自由移動,Unity3D是以真實(shí)世界為基礎(chǔ)的物理引擎,它為我們提供了能夠表現(xiàn)物理效果的組件。可以利用Rigidbody(剛體)表現(xiàn)重力效果,它可以使游戲內(nèi)的模型具有真實(shí)世界的物理效果,并且可以在Unity的物理引擎模擬重力、摩擦力、角動量等效果,從而模擬現(xiàn)實(shí)世界中的各種情況,剛體通常需要配合各種碰撞體來發(fā)揮作用。碰撞體代表物體的實(shí)際碰撞體積,在一個物體被創(chuàng)建時一般會分配一個與其模型大體符合的碰撞體[5]。碰撞體是Unity中用于檢測模型碰撞的組件,其中有很多類別,比如常用于物體的網(wǎng)格碰撞體(Mesh),常用于人物模型的膠囊碰撞體(Capsule)。
Unity3D系統(tǒng)中提供了CharacterController人物控制組件,它可以直接用于控制人物移動,但是這個組件會和剛體組件沖突。如果使用CharacterController,剛體上對模型施加力的作用可以產(chǎn)生碰撞效果,但是碰撞后不會對其他物體施加力,也就是不會把被碰撞的物體彈開,并不符合我們的實(shí)際情況,所以我們采用剛體和碰撞體的組合。通過剛體為人物模型添加重力效果使人物擁有一定的物理屬性,然后再為其添加碰撞體。作為碰撞雙方,碰撞體是必須都要有的組件,但是剛體只需要一方擁有即可。因此我們常在人物模型上掛載剛體組件,然后對每個模型添加碰撞體,這樣人物模型和任何模型碰撞都可以實(shí)現(xiàn)碰撞效果。
人物模型在行走、跳躍、站立時都有不同的動作,因此需要對其動作進(jìn)行調(diào)整。Unity3D資源商店為我們提供了Basic Motion動畫包,里面包含基礎(chǔ)的動畫包括直立、跳躍、行走等。我們首先從中下載動畫,然后通過動畫器編輯人物的動作使其符合正常行走邏輯。在動畫的切換過程中,常因為兩個動畫之間的差距過大,而顯得動畫的切換很不自然,此時利用動畫混合樹在走動畫與跑動畫中生成多個過渡用的插值動畫以達(dá)到平滑切換的功能。
人物的動作需要通過腳本對應(yīng)鍵盤的各種不同操作來實(shí)現(xiàn)。Unity3D提供了兩種人物移動的方式,分別對應(yīng)觸屏狀態(tài)下的操作和鍵值下的操作。在C#程序中通過input.GetAxis(Horizontal)和input.GetAxis(Vertical)兩個控件使人物模型獲得橫軸和縱軸的移動[6]。Horizontal對應(yīng)鍵盤上的A/D鍵或方向箭頭的左右鍵,Vertical參數(shù)對應(yīng)鍵盤上的WS或者是方向鍵。按下不同的鍵位會產(chǎn)生不同的值并驅(qū)使模型在對應(yīng)軸向及增量上產(chǎn)生移動。
調(diào)用動畫需要通過GetComponent方法獲得動畫器組件,聲明UpdateAnimator方法來單獨(dú)使用動畫狀態(tài)機(jī),在Start函數(shù)內(nèi)調(diào)用即可。我們使用動畫機(jī)內(nèi)的SetFloat函數(shù)來獲取人物量的移動,向量的長度決定了人物移動的快慢。通過setbool這個布爾值來調(diào)用跳躍和下蹲狀態(tài),這其中涉及碰撞檢測。當(dāng)人物模型頂部的碰撞體遇到另一個碰撞體時,就會觸發(fā)布爾類型的m_Crouching參數(shù)。
第三人稱游戲開發(fā)里的人物是會不斷移動的,所以相機(jī)需要保持合適的角度跟隨人物進(jìn)行移動。最簡單的實(shí)現(xiàn)方法是首先在Unity3D場景中將攝像機(jī)調(diào)整到合適的位置,然后將它放到人物模型的子層級下,讓相機(jī)成為人物的子物體。Unity中的子物體是隨父物體移動的,我們通常使用這種方式來將一些武器或者粒子特效掛載到人物模型上,這樣就可以達(dá)到相機(jī)跟隨人物移動的效果。
本系統(tǒng)中的預(yù)期功能已經(jīng)實(shí)現(xiàn),但是進(jìn)入場景內(nèi)仍存在一些問題,因此我們進(jìn)行了調(diào)試優(yōu)化,下面以其中較為典型的兩個問題為例加以說明。
首先是場景模型資源優(yōu)化。進(jìn)入游戲后,人物在個別場景中的活動會出現(xiàn)卡頓現(xiàn)象。分析得知比較影響場景開銷的因素主要有:場景模型面數(shù)過多,場景內(nèi)資源過多,光影效果過于豐富以及額外的粒子效果過于豐富等。我們針對性地進(jìn)行優(yōu)化,比如場景的某些花草、樹木、河流模型是從3ds Max導(dǎo)入的模型,效果很好但是面數(shù)過多,因此使用Unity官方資源庫內(nèi)的部分開源模型包代替。陰影設(shè)置為“極高分辨率”后參數(shù)過高也占用了大量的系統(tǒng)資源,因此將模型的陰影參數(shù)調(diào)整為“中等分辨率”。經(jīng)過一系列優(yōu)化后通過幀數(shù)監(jiān)控軟件,可以看到復(fù)雜場景下的幀數(shù)最高提升44幀,提升幅度達(dá)到了61.9%,同時由于場景優(yōu)化,也提升了GPU的占用率,使其能更好地發(fā)揮性能。
其次是人物移動優(yōu)化。人物的問題主要是移動速度過快,但通過對圖書館到商業(yè)街的距離測試,發(fā)現(xiàn)人物移動過程中的問題并不僅僅是速度過快,主要是人物模型和場景模型比例失調(diào),因此對相關(guān)模型的大小進(jìn)行了調(diào)整。
對漫游系統(tǒng)優(yōu)化之后,我們將漫游系統(tǒng)導(dǎo)出,完成的校園漫游系統(tǒng)部分效果見圖2。
本項目利用3ds Max軟件完成了校園模型的制作,并利用Unity3D軟件實(shí)現(xiàn)了校園虛擬漫游系統(tǒng)的開發(fā)。研究結(jié)論主要有以下幾點(diǎn):(1)在建模方面,應(yīng)深刻理解布線與模型邊面的關(guān)系,嚴(yán)格遵循四邊面布線規(guī)則,否則在將模型導(dǎo)入其他軟件時會出現(xiàn)破面、損壞等無法預(yù)料的問題。(2)在材質(zhì)制作上,需要通過真實(shí)的物理世界參數(shù)對不同材質(zhì)進(jìn)行調(diào)整,以追求更為真實(shí)的材質(zhì)表現(xiàn)。(3)在燈光和渲染上,燈光的布置應(yīng)遵循物理世界的燈光表達(dá)方式,時刻注意陰影的角度和位置,避免出現(xiàn)違背物理原則的陰影。(4)在Unity漫游系統(tǒng)的制作中,人物之間的動畫過渡如果不自然,可以通過BlendTree混合樹將多個動畫混合在一起從而實(shí)現(xiàn)自然的動畫效果。
本項目利用Unity3D實(shí)現(xiàn)了在校園內(nèi)的自由移動,并且添加了天氣效果使其更為真實(shí)。后續(xù)還可以通過對學(xué)校的室內(nèi)場景進(jìn)行建模,在Unity中完善更多的人物模型,實(shí)現(xiàn)人物能夠在校園及室內(nèi)進(jìn)行自由移動,并基于此漫游系統(tǒng)完成校園系列三維動畫宣傳片的制作。