• 沒有找到結果。

4.3 動作解析模組

4.3.1 直接偵測輸入模式

移動(teleport)功能,所以我們設計了一套移動機制,讓故事體驗者可透過 VIVE 之定位系統做小範圍之移動,並透過走路動作機制的觸發,做長距離的移動。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

圖 10 上圖為右手碰到物件前,下圖為碰到時,物件周圍會散發紅光 4.3.2 指令輸入模式

在指令輸入模式中,透過輸入預先設定之使用者指令動作,玩家虛擬角色會播放 對應之動畫,並有可能在動畫結束後鎖定某些身體部位之行動,如表二。其中,

走路狀態會根據故事體驗者原地踏步之速率而影響虛擬角色的前進速度。

表二、故事體驗者在虛擬環境中之指令輸入

角色狀態 使用者指令步驟 角色對應動畫

走路 1. 玩家虛擬角色任一隻腳底節點比另 一隻腳底節點距離地面之距離 > x 2. 離地面較遠的那隻腳,判斷是否與另

一隻腳回到同樣高度

3. 如 2 判斷成立,即觸發走路動作

玩家虛擬角色朝 hips 節 點面對方向前進之動畫

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

如圖 11,根元素為<Interaction>;<Character>元素為區分不同之 NPC 角色,tag 屬性為該 NPC 之標籤,標籤不會重覆;<InteractMovement>元素為一條條的互動 指令,一共有 6 種屬性,分別為:

1. PlayerIdentity 為玩家目前的身分

2. PlayerMovement 為玩家目前的動作狀態 3. SelfMood 為該 NPC 目前之情緒

4. RespondMovement 為滿足前三項條件且故事體驗者進入 NPC 視覺觸發 範圍內時,NPC 會回應之動作

5. Duration 為 RespondMovement 被觸發後,會持續演出之時間長度 6. GrabTarget 為當 PlayerMovement 為 grab 時,確定故事體驗者抓取的物

品之 tag 為何

以圖 11 之第五行為例,代表當心情為 good 的嫌疑犯看到路人在自己旁邊坐下時,

會開始播放 give 動作,持續時間為 20 秒。

圖 11 互動 XML 腳本範例

以下表三及表四為互動腳本內可以利用之參數,包含 NPCtag、玩家身分、

玩家動作、NPC 情緒、NPC 回應動作、可抓取之目標 tag 等。根據表內之參數 撰寫互動 XML 腳本,我們的系統會在開始遊戲時自動讀入該互動腳本並存入資 料庫。在遊戲進行中,當故事體驗者滿足互動觸發條件時,NPC 回應參數會即 時傳入動畫管理模組,該模組負責 NPC 動作之排程與動畫平順化之呈現。舉例 來說,圖 11 之第五行,當故事體驗者進入 NPCtag 為”Suspect”的 NPC 之視線範 圍內,且該 NPC 之情緒為”good”時,故事體驗者目前的玩家身分為”Passerby”且 觸發”sit”動作,系統立即傳送”give”持續 20 秒的指令到動畫管理模組,動畫管理 模組會自動將該動作排入”Suspect”的動作排程中。如果將 give 參數改為其他動 作指令,例如改為”lookat”,則在達成觸發條件時,系統立即傳送”lookat”持續 20 秒的指令到動畫管理模組,表示劇情從原本的玩家在嫌疑犯旁坐下時,嫌疑犯舉 起酒杯向玩家勸酒,變為玩家在嫌疑犯旁坐下時,嫌疑犯將看向玩家,並注視著 玩家。變更互動腳本的內容即可對故事劇情有一定程度的修改,增進故事的可變 性。

表三、互動腳本內可利用之參數

NPCtag (tag) (Play-erMovement)

NPC 情緒 (SelfMood)

NPC 回應 (Respond-Movement)

Waiter Police all all walk Bartender Passerby grab bad follow

Suspect waveHands good sit Passerby1 walk great stand

Passerby2 sit lookat

stand talk

waveHands shoot

圖,一條 AnimCharacterMove 為一項動作指令,裡面包含的參數有:

1. StartTime:此項動作指令之開始絕對時間 2. Duration:動作將播放多久的時間

3. ActorTag:要演出該動作的虛擬角色之標籤 4. Movement:要演出之動作名稱

5. destinationTag:如果該項動作須要有一個互動目標,則須填寫

以圖 12 為例,代表相對時間為 0 時,遊戲物件標籤為嫌疑犯之虛擬人物,將走 路前往椅子的位置,維持 15 秒。

圖 12 故事 XML 劇本範例

give run beCaught

GrabTarget

SuspectStrongHand SuspectOtherHand

drink

good/bad/great 三種不同的情緒,好情緒時的 NPC 與壞情緒時的 NPC,將會給予 故事體驗者不同的回應,而 NPC 的情緒會隨著互動過程有不同的變化,讓故事

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

圖 13 拆分身體部位來播放不同動畫之範例 4.5.2 動作排程

在虛擬實境的互動敘事中,為了讓故事體驗者能夠透過參與影響劇情發展,往往 無法像普通的動畫一樣,單純依照製作者的想法安排動畫播放的時間,而是需要 考慮到故事體驗者參與進來的時間,播放合適的動畫回應。但是如果僅有互動時 才觸發動畫,所有 NPC 將都等待著故事體驗者與之互動,才會有所動作,不像 現實的狀況人物會有自己的想法,做自己當下想做的事情。因此,我們希望在這 中間取得一個平衡點,讓 NPC 照著基本的故事劇本演出,而當故事體驗者透過 故事參與以影響劇情發展時,可以藉由互動腳本的設定去演出不同的劇情。

為了合併這兩種不同的動畫觸發方式,我們的系統利用了類似 priority queue 的概念,將動作解析模組及故事管理模組傳來之動作指令依照不同的優先度,插 入或放入 queue 當中,並依序執行動作。

以圖 14 為例,遊戲時間為 0 時,嫌疑犯的動作排程中沒有任何動作。遊戲 時間為 n 時,故事管理模組傳來走路的動作指令,系統將該動作指令放入動作排 程中,並開始執行,嫌疑犯播放走路至目的地的動畫。遊戲時間為 m 時,故事

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

作排程中移除,並接著執行坐下的動作指令,播放坐下動畫。遊戲時間為 h 時,

坐下的動作指令結束,嫌疑犯維持坐在椅子上的動畫。

圖 15 動作排程範例示意圖二 4.5.3 互動式動畫

除了根據故事體驗者不同的輸入及故事歷程,NPC 會有不同的對應動作外,我 們的系統亦能依照玩家虛擬角色目前的位置,決定 NPC 面對的方向。例如 NPC 對玩家虛擬角色說話時,會面向玩家虛擬角色的方向,讓故事體驗者擁有 NPC 是在跟自己說話的感覺,如圖 16,左圖為坐在 NPC 右邊,右圖為坐在 NPC 左 邊。

圖 16 NPC 面對玩家方向

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

當動作排程中的動作指令被執行時,某些指令會根據當下虛擬世界的狀況改 變,例如根據動作執行者與目標物體的距離,改變播放的動畫,讓動作的動畫演 出更加合乎邏輯,如圖 17 至圖 20 為「shoot」動作之範例,圖 17 時玩家進入 NPC 視線範圍內,開始朝玩家射擊;圖 18 時玩家向右移動,NPC 追逐玩家;圖 19 時玩家與 NPC 距離過遠,NPC 播放左右查看的動畫,並停止 shoot 動作;圖 20 時 NPC 恢復原本的動作排程,走向酒吧。

圖 17 shoot 範例-玩家與 NPC 距離近,NPC 開槍射擊

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

圖 18 shoot 範例-玩家與 NPC 距離中,NPC 追逐玩家

圖 19 shoot 範例-玩家與 NPC 距離遠,NPC 左右查看,停止 shoot

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

圖 20 shoot 範例-NPC 停止 shoot 後,繼續原本的動作,走向酒吧

表五列出了所有動作指令及其會根據哪些情況做出改變,條件式中的 distance 皆是指動作執行者與目標物之距離,f 為 Unity 中之單位。

表五、動作指令清單

動作指令 狀況判斷

walk if distance > 0.5f,則 walk else 停止 walk

run if distance > 0.5f,則 run else 停止 run

follow if distance > 2f,則跟著目標物移動 else 停止

sit if distance > 2f,則先走至目標椅子的位置 else 坐下

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

stand 站起

lookat 注視目標物

talk if distance < 2f,才會開始對話 else 先走至目標物的位置

waveHands 面對目標物揮手

shoot if distance > 10f ,則取消 shoot

else if distance > 3f,則走至目標物的位置 else 朝著目標物射出子彈

give if distance > 2f,則先走至目標物的位置 else 朝著目標物利用 IK 系統伸出酒杯 beCaught if distance > 1f,被抓的手回到原始位置

else 被抓的手利用 IK 系統隨著目標物移動

最後畫面繪圖輸出的部分,本系統採用 unity 遊戲引擎之 animator 系統,利 用參數變更動畫的播放與快慢的調整,再搭配 Inverse Kinematics (IK)系統,在特 殊動作時控制手部節點的位置,如圖 21,玩家抓住 NPC 的左手並站在原地,NPC 隨著玩家左手的位置變化而跟著移動;而路徑規劃的部分,是利用 unity 遊戲引 擎之 Navigation 系統,讓虛擬人物能自動規劃從現在位置到目標地點的路線,並 自行避開障礙物及禁止行走的地區。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

圖 21 IK 範例

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

4.6 提示系統

故事體驗者在體驗故事時,要如何理解故事的劇情,以及可能會影響劇情的行動,

是不容易的。以我們的範例故事為例,故事開始時會有故事內設定之輔助系統的 虛擬角色,利用聲音與字幕來讓故事體驗者了解故事及任務內容。但是如果故事 體驗者對系統不夠熟悉時,或是剛好恍神沒注意到系統說了什麼時,可能會導致 體驗過程中因為不知道如何去行動,而使故事無法往下發展。

為了減少這些狀況導致的難易度提升,我們的系統設置了提示的系統,在滿 足特定條件時,利用字幕與語音的方式,引導故事體驗者能夠達成劇情上的分支 選項。以範例故事為例,一開始會有輔助系統提醒玩家可以去服飾店換衣服,以 免被嫌疑犯認出主角是警察,如果此時故事體驗者沒有去換衣服,直接往酒吧的 方向前進,輔助提示系統將會利用字幕搭配語音,提示故事體驗者服飾店在哪個 方位;但如果故事體驗者原本就有去換衣服,再往酒吧的方向前進,就不會出現 該提示,如圖 22。

對於不同熟練度的故事體驗者而言,系統會判斷是否要給出提示,且不會馬 上就出現提示,留給故事體驗者自行探索、嘗試的樂趣。

圖 22 提示系統 – 換衣服提示

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

4.7 配合 VIVE 眼鏡之字幕設計

主角與 NPC 之間的對話,或是 NPC 與 NPC 之間的對話,除了播放事先錄製好 之語音外,還會在 VIVE 眼鏡所看到的下方位置出現白色字體之字幕,如圖 23。

當體驗者的頭部旋轉或移動時,字幕也會跟著移動旋轉,讓字幕一直保持在眼鏡 的下方,並且為了區隔字幕與環境,在字幕出現時,會在字幕後方加上一塊半透 明淡黑色之區域,讓字幕能夠更加清晰。

圖 23 字幕範例

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

第 5 章 實驗設計與結果分析

如第四章所示,此系統利用體感裝置偵測故事體驗者之身體動作,再透過動作解 析模組分析出該動作所代表之身體語言,藉由故事體驗者與 NPC 之間的互動,

如第四章所示,此系統利用體感裝置偵測故事體驗者之身體動作,再透過動作解 析模組分析出該動作所代表之身體語言,藉由故事體驗者與 NPC 之間的互動,

相關文件