李婷婷,唐 媛,付力婭
(大連東軟信息學(xué)院 數(shù)字藝術(shù)與設(shè)計(jì)學(xué)院,遼寧 大連 116023)
近年來(lái),隨著科技的不斷發(fā)展,以計(jì)算機(jī)技術(shù)、虛擬網(wǎng)絡(luò)為特征的信息社會(huì)正在越來(lái)越多地改變著信息的傳播方式[1-2]。沉浸式虛擬現(xiàn)實(shí)(Immersive Virtual Reality,IVR)是虛擬現(xiàn)實(shí)技術(shù)的一種,沉浸式虛擬現(xiàn)實(shí)強(qiáng)調(diào)利用計(jì)算機(jī)生成一種模擬環(huán)境,使用戶沉浸到該環(huán)境中,與虛擬世界中的物體進(jìn)行自然的交互,通過(guò)視覺(jué)、聽(tīng)覺(jué)和觸覺(jué)等獲得對(duì)虛擬世界的感知[3-4]。從20世紀(jì)80年代開(kāi)始,國(guó)內(nèi)外學(xué)者們嘗試采用先進(jìn)的虛擬現(xiàn)實(shí)技術(shù)構(gòu)建“數(shù)字海洋”并為體驗(yàn)者提供逼真的感受。例如:Miandji等基于GPU技術(shù)模擬海洋水面細(xì)節(jié)特征[5];Li等通過(guò)shader編程實(shí)現(xiàn)大范圍海面光照效果[6];潘牧野和劉篤仁基于Direct3D構(gòu)建了3D場(chǎng)景中的水面效果[7];王平俠和胡瓊杰利用VC編程實(shí)現(xiàn)了海洋世界中的水泡效果,為虛擬海洋模擬提供參考[8]。上述海洋水體生成方法大都從海洋平面的構(gòu)建及渲染出發(fā),對(duì)于如何真正發(fā)揮數(shù)字技術(shù)對(duì)海洋生物環(huán)境展示及動(dòng)態(tài)交互需要進(jìn)行深入的分析和細(xì)致的研究。由此,該文基于虛擬現(xiàn)實(shí)技術(shù)開(kāi)發(fā)沉浸式海底世界交互系統(tǒng),采用3D立體模型建構(gòu)虛擬海底世界,為海底生物運(yùn)動(dòng)設(shè)定軌跡路線并實(shí)現(xiàn)語(yǔ)音交互功能,使得海洋生物能夠更加形象、立體、直觀地呈現(xiàn)在廣大觀眾面前,為海洋知識(shí)的傳播提供更多的渠道選擇和更為立體的展示空間。
沉浸式虛擬現(xiàn)實(shí)技術(shù)海底交互系統(tǒng)采用模塊化方式,利用市面主流引擎進(jìn)行開(kāi)發(fā),目前市面主流引擎包括Unity、Unreal、Cocos2D、CryEngine等[9]。其中,Unity和Unreal可以算得上是目前市場(chǎng)上最熱門的引擎,也各自擁有為數(shù)眾多的開(kāi)發(fā)者。Unity引擎是由Unity Technologies公司開(kāi)發(fā),可以輕松實(shí)現(xiàn)三維視頻特效及虛擬漫游交互效果[10]。因此,本項(xiàng)目基于Unity引擎實(shí)現(xiàn),系統(tǒng)流程設(shè)計(jì)如下:
首先,進(jìn)行角色設(shè)計(jì),將海底生物以2D形式進(jìn)行展示。然后,在3ds Max、Maya等三維軟件構(gòu)建模型和貼圖,完成3D立體模型的制作,并將角色模型導(dǎo)出fbx格式文件作為海底世界場(chǎng)景素材。接下來(lái),將制作完成的3D立體模型導(dǎo)入U(xiǎn)nity引擎中進(jìn)行場(chǎng)景搭建。最后,根據(jù)用戶提出的交互指令基于C#腳本進(jìn)行交互漫游、碰撞檢測(cè)、特效實(shí)現(xiàn)等交互功能開(kāi)發(fā),并實(shí)現(xiàn)渲染輸出,系統(tǒng)流程設(shè)計(jì)如圖1所示。
圖1 系統(tǒng)流程設(shè)計(jì)
沉浸式虛擬現(xiàn)實(shí)技術(shù)的海底交互系統(tǒng)內(nèi)設(shè)計(jì)實(shí)現(xiàn)一群海洋生物在海洋內(nèi)游動(dòng),并且可以根據(jù)用戶指令進(jìn)行交互行為。沉浸式虛擬場(chǎng)景下交互有很多種方式,例如:語(yǔ)音交互、手勢(shì)交互、觸覺(jué)交互和多通道交互等[11]。該系統(tǒng)交互主要分為兩種方式:一種是鼠標(biāo)交互,體驗(yàn)者通過(guò)鼠標(biāo)點(diǎn)擊海洋生態(tài)系統(tǒng)屏幕即可從屏幕上方隨機(jī)出現(xiàn)一種海洋生物。另一種采用語(yǔ)音交互,體驗(yàn)者通過(guò)麥克說(shuō)出海洋生物名字,系統(tǒng)在感知到語(yǔ)音輸入后在屏幕上方出現(xiàn)對(duì)應(yīng)的海洋生物形態(tài),并伴隨語(yǔ)音介紹。這兩種交互方式可以滿足不同體驗(yàn)者的參觀需求,提升參觀者的好奇心,激發(fā)人們熱愛(ài)海洋,保護(hù)海洋的環(huán)保意識(shí)。
角色方面主要采用卡通形式,利用PS軟件繪圖功能設(shè)計(jì)了一些海洋世界生物,包括:海龜、燈籠魚、小丑魚、燕魚、河豚、水母、鱔魚、章魚、箭魚、海馬等。在設(shè)計(jì)海洋世界生物過(guò)程中遵循生物一致性、畫面整體性、比例協(xié)調(diào)性等原則,在充分考慮到用戶體驗(yàn)及美感后設(shè)計(jì)海底生物如圖2所示。
圖2 角色設(shè)計(jì)
在三維空間中采用3ds Max軟件或者M(jìn)aya軟件制作海底生物造型,包括藻類、珊瑚以及海底浮游生物。將制作完成的海底生物模型導(dǎo)入U(xiǎn)nity引擎中搭建海底世界,并用在海洋生物表面加入顏色、陰影、亮度、紋理等表面屬性,從而使得整個(gè)景物模型更加逼真,如圖3所示。
圖3 場(chǎng)景搭建
在沉浸式海底世界交互系統(tǒng)中,為提升參觀者的交互性,設(shè)計(jì)了鼠標(biāo)交互和語(yǔ)音交互兩種方式,參與者可以通過(guò)鼠標(biāo)在海洋世界屏幕上點(diǎn)擊任意地方或是通過(guò)麥克說(shuō)出魚類的名字,系統(tǒng)接收到指令后都會(huì)在屏幕上彈出具體魚類信息,并實(shí)例化出氣泡特效,具體實(shí)現(xiàn)方法如下:
if(檢測(cè)到交互信息)
{
GameObject GO =Instantiate(fishPrefab[Random.Range(0, fishPrefab.Length)], spawnPosition.position, Quaternion.identity)as GameObject;
GO.GetComponent
GO.GetComponent
GO.transform.Find ("Bubbles").gameObject.SetActive (true);
}
系統(tǒng)中使用射線來(lái)完成相關(guān)的算法,它的定義為:射線上的點(diǎn)=射線的原點(diǎn)+t*射線的方向,t用來(lái)描述它距離原點(diǎn)的位置,它的范圍是[0,無(wú)限遠(yuǎn))。平面被描述為:
XndotX=d
其中,Xn是平面的法線,X是平面上的一個(gè)點(diǎn),d是平面到原點(diǎn)的距離,碰撞檢測(cè)部分代碼如下所示:
Ray rayNoraml = new Ray(Vector3.zero,Vector3.up*10);Debug.DrawRay(transform.position,transform.forward,Color.red,10);
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray,outhit,1 000,1 < { Debug.Log(hit.collider.name); Debug.Log(hit.point); if (hit.collider.tag == "Enemy") {undefined} } } 粒子特效可以增加場(chǎng)景美觀性,大多數(shù)場(chǎng)景特效都采用粒子系統(tǒng)完成。粒子系統(tǒng)的原理是將若干粒子組合在一起,通過(guò)改變粒子的屬性來(lái)模擬海底世界自然效果[12]。像海底世界中的氣泡從形狀、大小和顏色方面都是富于變化的,如果用傳統(tǒng)的建模方法,很難比較真實(shí)地模擬它。但是,粒子系統(tǒng)卻可以解決海底世界中的氣泡模擬問(wèn)題[13]。 在實(shí)際系統(tǒng)應(yīng)用中,為了逼真地模擬虛擬世界中的海底效果,需要將氣泡粒子構(gòu)建成不斷運(yùn)動(dòng)演化的粒子系統(tǒng),每一個(gè)粒子都有自己的“生命”。在粒子的一生中要?dú)v經(jīng)四個(gè)階段。階段1:“出生”。在這一過(guò)程中粒子系統(tǒng)會(huì)按照初始的定義屬性產(chǎn)生一定量的粒子。階段2:“成長(zhǎng)”。在這一過(guò)程中,粒子系統(tǒng)會(huì)按照模擬的氣泡運(yùn)動(dòng)規(guī)律進(jìn)行運(yùn)動(dòng)。階段3:隨著時(shí)間推移,粒子的生命值在不斷下降,進(jìn)入“衰老”時(shí)期。階段4:當(dāng)粒子的生命值降低至0,粒子死亡,被系統(tǒng)清除[14]。 具體實(shí)現(xiàn)時(shí),繪制粒子氣泡的步驟如下: Step1:分析氣泡物理特性,根據(jù)氣泡物理特點(diǎn)定義粒子屬性。 Step2:分析氣泡在海洋中的運(yùn)動(dòng)規(guī)律,建立氣泡粒子的動(dòng)態(tài)運(yùn)動(dòng)規(guī)律。 Step3:根據(jù)粒子氣泡屬性分析結(jié)果定義系統(tǒng)中氣泡粒子的初始化參數(shù)值。 Step4:根據(jù)氣泡粒子屬性變化動(dòng)態(tài)改變其運(yùn)動(dòng)規(guī)律。 Step5:刪除系統(tǒng)中生命值已經(jīng)為0的粒子。 Step6:每隔固定時(shí)間重新繪制氣泡粒子。 其中,Step3~6反復(fù)執(zhí)行,模擬氣泡的動(dòng)態(tài)變化過(guò)程。 (1)粒子出生及成長(zhǎng)。 粒子系統(tǒng)是一個(gè)統(tǒng)一的整體,這個(gè)系統(tǒng)中包含了若干個(gè)粒子,粒子的出生是根據(jù)粒子系統(tǒng)屬性進(jìn)行賦初值的過(guò)程,每個(gè)粒子在獲得屬性后將按照粒子系統(tǒng)運(yùn)動(dòng)規(guī)律進(jìn)行動(dòng)態(tài)演變,從而表現(xiàn)出動(dòng)態(tài)效果,具體實(shí)現(xiàn)代碼如下: temp=Time.time; if (temp - temp2>intervalTime) { Vector3 newPosition; newPosition=new Vector3(Random.Range(transform.position.x-1, transform.position.x+1), Random.Range(transform.position.y-1, transform.position.y+1), Random.Range(transform.position.z-1, transform.position.z+1)); Instantiate(Bubble[Random.Range(0, Bubble.Length)], newPosition, Quaternion.identity); temp2 = Time.time; intervalTime = Random.Range (minTime, maxTime); (2)粒子衰老及死亡。 粒子的整個(gè)生命過(guò)程中是動(dòng)態(tài)變化的,為了表現(xiàn)出粒子的動(dòng)態(tài)特性,粒子在運(yùn)動(dòng)過(guò)程中會(huì)伴隨著生命衰亡,當(dāng)生命值降低至0時(shí),系統(tǒng)默認(rèn)粒子死亡,將停止繪制粒子,具體實(shí)現(xiàn)代碼如下: void Update () { if(transform.GetChild (0).localPosition.y>40) { Destroy (gameObject); } } 隨著虛擬現(xiàn)實(shí)技術(shù)的興起,體驗(yàn)者在產(chǎn)品體驗(yàn)效果上的需求不斷提高,沉浸式虛擬現(xiàn)實(shí)頭盔不斷推陳出新,先后開(kāi)發(fā)了多種機(jī)型,比較出名的有Oculus Rift DK1、Oculus Rift DK2、Oculus Rift CV1和HoloLens等[15],如圖4所示。 圖4 沉浸式虛擬現(xiàn)實(shí)頭盔 為了驗(yàn)證系統(tǒng)運(yùn)行效果,該文進(jìn)行了大量仿真試驗(yàn)。仿真試驗(yàn)在配置為Intel 酷睿i3 9300、CPU頻率 3.7~4.3 GHz、DDR4 2 400 Mhz 8G內(nèi)存及Intel HD Graphics 630(128 M)核心顯卡的PC機(jī)上,沉浸式頭盔選用Oculus Rift DK2,編譯環(huán)境為Visual Studio 2017,代碼編寫采用C#語(yǔ)言,基于Unity平臺(tái)實(shí)現(xiàn),運(yùn)行測(cè)試效果如圖5~圖12所示。 圖5 海底世界效果測(cè)試 圖6 海底氣泡效果測(cè)試 圖7 燈籠魚交互效果測(cè)試 圖8 海馬交互效果測(cè)試 圖9 劍魚交互效果測(cè)試 圖10 鯊魚交互效果測(cè)試 圖11 水母交互效果測(cè)試 圖12 小丑魚交互效果測(cè)試 虛擬現(xiàn)實(shí)技術(shù)為保存和傳播海洋文化提供了非常好的條件。一方面,可以借助人機(jī)交互、視頻及3D建模等先進(jìn)的數(shù)字技術(shù)對(duì)海洋生物特征進(jìn)行最大限度的保存。另一方面,可以最大程度地保證海底交互系統(tǒng)中海洋生物的真實(shí)性。未來(lái)沉浸式海底交互系統(tǒng)可以用于數(shù)字博物館的構(gòu)建。數(shù)字博物館作為城市文化建設(shè)的一部分,關(guān)乎城市的對(duì)外形象,反映著城市人文和歷史,是城市形象的綜合體現(xiàn)。虛擬現(xiàn)實(shí)技術(shù)背景下構(gòu)建的沉浸式海底世界交互系統(tǒng)可以突破傳統(tǒng)藝術(shù)在表現(xiàn)形式上的局限性,從單一感官的信息傳遞演變?yōu)槎喔泄俚?交互式的展示形式,使體驗(yàn)者能夠體驗(yàn)實(shí)時(shí)的形象化交互,對(duì)未來(lái)數(shù)字博物館的發(fā)展起到推動(dòng)作用。2.4 粒子特效
3 實(shí)驗(yàn)與分析
4 結(jié)束語(yǔ)