李谷偉
(浙江東方職業(yè)技術(shù)學(xué)院數(shù)字工程學(xué)院 浙江省溫州市 325000)
中學(xué)化學(xué)實(shí)驗(yàn)室里普遍存放著大量的化學(xué)物品,具備易燃、易爆、腐蝕性強(qiáng)的特點(diǎn)。在化學(xué)實(shí)驗(yàn)過程中,由于學(xué)生對實(shí)驗(yàn)過程不熟悉,操作不規(guī)范,往往極易造成火災(zāi)、爆炸、腐蝕人體皮膚等安全問題。除此之外,化學(xué)實(shí)驗(yàn)器具的老化、實(shí)驗(yàn)室自身?xiàng)l件簡陋、供電線路老化、惡劣的天氣等因素也會(huì)帶來眾多的安全隱患問題。
針對這些問題,本文提出一種基于Unity的化學(xué)實(shí)驗(yàn)虛擬現(xiàn)實(shí)重現(xiàn)方法。采用Maya對實(shí)驗(yàn)環(huán)境進(jìn)行三維建模,采用Unity對實(shí)驗(yàn)過程中的交互功能進(jìn)行設(shè)計(jì),采用Visual Effect Graph技術(shù)、Shader Graph技術(shù)等方法,實(shí)現(xiàn)各種化學(xué)實(shí)驗(yàn)特效仿真。憑借這一方法,開發(fā)了中學(xué)化學(xué)實(shí)驗(yàn)虛擬仿真原型系統(tǒng)。實(shí)例表明,該方法可以形象、逼真的再現(xiàn)化學(xué)實(shí)驗(yàn)中的各種仿真效果,解決了傳統(tǒng)化學(xué)實(shí)驗(yàn)過程中存在的中毒、腐蝕皮膚、火災(zāi)或爆炸等安全隱患問題。
基于Unity的化學(xué)實(shí)驗(yàn)虛擬現(xiàn)實(shí)系統(tǒng),采用Maya對實(shí)驗(yàn)環(huán)境進(jìn)行三維建模,采用Unity對實(shí)驗(yàn)過程中的交互功能進(jìn)行設(shè)計(jì),采用Visual Effect Graph技術(shù)、Shader Graph技術(shù)等方法,實(shí)現(xiàn)各種化學(xué)實(shí)驗(yàn)特效仿真。同時(shí),該系統(tǒng)將發(fā)布2個(gè)平臺(tái),一個(gè)是VR平臺(tái),一個(gè)是移動(dòng)平臺(tái),學(xué)生可以借助VR頭盔,配合手機(jī),體驗(yàn)豐富的化學(xué)實(shí)驗(yàn)交互功能,能夠在確保實(shí)驗(yàn)安全性的同時(shí),增強(qiáng)了課堂實(shí)驗(yàn)的趣味性。
根據(jù)基于Unity的化學(xué)實(shí)驗(yàn)虛擬現(xiàn)實(shí)系統(tǒng)的開發(fā)方法,提出該方法的總體流程如圖1所示。
開發(fā)VR火災(zāi)隱患排查系統(tǒng),首先需要了解宿舍發(fā)生火災(zāi)的全部隱患,將這些隱患點(diǎn)信息存儲(chǔ)起來,用3dsMax為宿舍場景進(jìn)行建模以及紋理貼圖,對應(yīng)所有的隱患點(diǎn)特別有針對性的建立精致模型,導(dǎo)入U(xiǎn)nity引擎,在Unity引擎中,開發(fā)隱患點(diǎn)排查交互功能模塊,利用相交球檢測技術(shù)、添加爆炸點(diǎn)技術(shù)等為每個(gè)隱患點(diǎn)添加火災(zāi)特效、爆炸特效,設(shè)計(jì)醒目的UI,為體驗(yàn)者提供清晰的體驗(yàn)感,最終將生成的系統(tǒng)發(fā)布到HTC VIVE。
Maya是Autodesk公司出品的一款功能強(qiáng)大的三維動(dòng)畫軟件,它在三維建模、影視動(dòng)畫、影視特效領(lǐng)域有非常多的應(yīng)用。它最常用的建模方式是多邊形建模,開發(fā)者可以通過捏泥人的方式去對模型的每個(gè)點(diǎn)進(jìn)行精細(xì)的控制,建模的操作方式非常新穎,新版軟件升級了UV模塊,展UV非常方便,特別適合VR應(yīng)用。因此,本文選用Maya對宿舍場景進(jìn)行建模、UV處理與貼圖制作。
圖1:開發(fā)化學(xué)實(shí)驗(yàn)虛擬現(xiàn)實(shí)系統(tǒng)總體流程
圖2:VFX Graph編輯界面
化學(xué)實(shí)驗(yàn)虛擬現(xiàn)實(shí)系統(tǒng)對三維場景的真實(shí)度要求非常高,所以需要一款能夠制作3A級畫面的引擎來制作。除此之外,還需要添加很多交互功能以及UI界面的制作,而這些功能與效果的實(shí)現(xiàn),都需要Unity來完成。
Unity是一款開發(fā)三維游戲的引擎,特別是手游市場,占據(jù)了很大的比重,而開發(fā)語言使用的是C#語言,它是基于面向組件開發(fā)的一個(gè)引擎,兼容所有平臺(tái)。本文采用Unity實(shí)現(xiàn)特效展現(xiàn)和交互功能。
Unity開發(fā)都是面向組件的開發(fā),而本項(xiàng)目主要使用的是Visual Effect Graph模塊,這個(gè)模塊的強(qiáng)大效果以及掌控力是我們實(shí)現(xiàn)逼真特效的關(guān)鍵所在。而Shader Graph模塊也是我們實(shí)現(xiàn)物理渲染效果的必要方法。
化學(xué)實(shí)驗(yàn)中存在著大量的實(shí)驗(yàn)效果,而這些實(shí)驗(yàn)效果靠傳統(tǒng)的CG技術(shù)很難實(shí)現(xiàn),尤其是接近于照片級的效果,同時(shí)還要考慮到運(yùn)行效率的問題。采用Unity最新的Visual Effect Graph技術(shù)可以確保系統(tǒng)流暢運(yùn)行,并實(shí)現(xiàn)接近于照片級的效果。
Visual Effect Graph技術(shù)是在Unity 2018.3之后推出一項(xiàng)新技術(shù),它其實(shí)是一種新的特效工具。它與原本的粒子系統(tǒng)相似,但它最直觀的特點(diǎn)是可視化的節(jié)點(diǎn),支持編程,運(yùn)行在GPU之上。這些特點(diǎn)讓它能夠支持更龐大的圖形運(yùn)算量以及對開發(fā)者、創(chuàng)作者提供了更加靈活的開發(fā)空間。因此,可以用來制作游戲里大量的3A級特效。例如:本系統(tǒng)中所需化學(xué)實(shí)驗(yàn)中發(fā)生的各種化學(xué)反應(yīng)特效。
Unity中使用Visual Effect Graph技術(shù)的方法:
Visual Effect Graph需要通過Package Manager來安裝,目前只支持HDRP,所以還需要安裝HDRP。安裝完之后,需要在Project窗口的Create菜單創(chuàng)建HDRP的配置文件。
先創(chuàng)建一個(gè)VFX Graph資產(chǎn),拖到場景中后會(huì)自動(dòng)生成一個(gè)GameObject,Unity會(huì)自動(dòng)添加一個(gè)Visual Effect組件,并引用到之前創(chuàng)建的VFX Graph資產(chǎn),打開可以編輯它,如圖2所示。
System:虛線包裹的幾個(gè)Context的集合叫做System。一個(gè)System包含Initialize,Update和Output。一個(gè)VFX Graph可以包含多個(gè)System。
Spawn:這個(gè)Context定義了生成粒子的數(shù)量以及生成的時(shí)機(jī)。
Initialize:這個(gè)Context類似編寫腳本時(shí)的Start方法,用來對粒子進(jìn)行初始化操作,它需要以Capacity和Bounds開始。
Capacity定義同一時(shí)間可以存在的粒子最大數(shù)量。這個(gè)值很重要,決定了初始分配多少內(nèi)存,應(yīng)該根據(jù)生成粒子的數(shù)量來設(shè)置數(shù)值。一般可以通過公式計(jì)算:Rate × Max Lifetime=Capacity。
Bounds:定義粒子的模擬區(qū)域
Update:這個(gè)Context類似編寫腳本時(shí)的Update方法,設(shè)置粒子隨著時(shí)間的變化。它可以使用力,比如添加碰撞、力場等。
Output:用來渲染粒子,它決定了生成粒子的類型、紋理、顏色、朝向等。一個(gè)System可以有多個(gè)Output輸出。
設(shè)置適當(dāng)?shù)膮?shù)值,可以得到如圖3所示效果。
使用Shader Graph,需要安裝Shader Graph包和Universal RP包(Unity 2019.3之前的名稱為LightWeight RP)。創(chuàng)建并配置SRP(可編程渲染管線),然后新建PBR Graph。打開PBR Graph文件即可開始設(shè)置基于物理渲染的材質(zhì)效果了。
圖3:簡單火焰測試效果
圖4:測試爆炸效果
圖5:化學(xué)實(shí)驗(yàn)虛擬現(xiàn)實(shí)系統(tǒng)總體設(shè)計(jì)
通過各種節(jié)點(diǎn)的連接,調(diào)試參數(shù),可以得到如圖4所示的邊緣發(fā)光效果。
針對現(xiàn)有的VR重現(xiàn)系統(tǒng)的功能模塊以及存在的缺點(diǎn),改良設(shè)計(jì)了化學(xué)實(shí)驗(yàn)虛擬現(xiàn)實(shí)系統(tǒng),如圖5所示。
功能模塊如下:
(1)實(shí)驗(yàn)室再現(xiàn):創(chuàng)建化學(xué)實(shí)驗(yàn)室場景模型,添加各種實(shí)驗(yàn)過程中發(fā)生的特效,添加實(shí)時(shí)更新的UI界面。
(2)VR核心模塊:VFX Graph技術(shù)、Shader Graph技術(shù)。
(3)實(shí)時(shí)模擬:實(shí)時(shí)更新實(shí)驗(yàn)數(shù)據(jù)、實(shí)時(shí)顯示交互過程中的特效。
圖6:實(shí)驗(yàn)過程重現(xiàn)
場景中添加了由Visual Effect Graph技術(shù)實(shí)現(xiàn)的火焰和火星效果,所有的材質(zhì)渲染都是基于Shader Graph技術(shù)實(shí)現(xiàn)的。加上了實(shí)時(shí)交互的UI界面,以及實(shí)時(shí)顯示的數(shù)據(jù)信息,如圖6所示。根據(jù)研究,此系統(tǒng)能夠讓學(xué)生使用VR手柄來操控實(shí)驗(yàn)儀器和設(shè)備,并實(shí)時(shí)產(chǎn)生預(yù)設(shè)的化學(xué)效果。學(xué)生可以利用此系統(tǒng)完成所有的化學(xué)實(shí)驗(yàn),效果非常逼真。
為了解決化學(xué)實(shí)驗(yàn)過程中極易造成火災(zāi)、爆炸、腐蝕人體皮膚等安全問題,本文研究了一種基于Unity的化學(xué)實(shí)驗(yàn)虛擬現(xiàn)實(shí)系統(tǒng),給出了化學(xué)實(shí)驗(yàn)虛擬現(xiàn)實(shí)系統(tǒng)的總體設(shè)計(jì)、開發(fā)流程以及技術(shù)解決方案,探討了Visual Effect Graph、Shader Graph等關(guān)鍵技術(shù),實(shí)現(xiàn)各種化學(xué)實(shí)驗(yàn)特效仿真,開發(fā)了中學(xué)化學(xué)實(shí)驗(yàn)虛擬仿真原型系統(tǒng)。實(shí)例表明,該方法可以形象、逼真的再現(xiàn)化學(xué)實(shí)驗(yàn)中的各種仿真效果,解決了傳統(tǒng)化學(xué)實(shí)驗(yàn)過程中存在的中毒、腐蝕皮膚、火災(zāi)或爆炸等安全隱患問題,并且增加了化學(xué)實(shí)驗(yàn)課堂的趣味性,提高了學(xué)生學(xué)習(xí)積極性。