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