第三章 空間介面的建置
3.4 環境之基礎架構
3.4.2 軟體整合
由於在虛擬環境中要開發即時互動的 3DVR 門檻太高,傳統的開發工具都是具有程式設計背景 的工程師或是有程式能力的工作團隊才能開發出一套完整的系統。因此,本研究是以 Director 8.5 及其網路伺服軟體 Shockwave Multiuser Server (Multiuser)為主要的開發工具,研究者只需專注於 內容的設計,利用 Director 中 Lingo 的函式庫及網路連線的功能作為簡易的開發工具。Director 主要是用來整合各種型態的媒體格式包含了:文字、圖形、聲音、視訊、動畫等單一媒體,它 能有效的控制系統資源適合用來整合檔案容量大且較豐富的內容,可以製作出複雜及順暢的動 畫,透過內建的 Lingo 語言來編輯互動控制功能,另外也可利用「Xtra 外掛程式」、以及「Behavior 行為庫」來達成許多所需的互動效果。本研究中利用 Director 來整合 3D 軟體的檔案(圖 3-20),
以向量的方式來記錄物體的造型,並使用點陣圖形來表現物體表面的材質。首先在 3D 軟體中製 作所需的場景,之後將檔案輸出成 Shockwave 3D(.w3d)的檔案,再將其輸入至 Director 中,利用 Lingo 程式來處理網路連線、同步顯示與互動的部份,再將訊息傳給伺服器產生即時的互動反 應。因此,開發者不需要再撰寫程式便能製造出 3D 場景,但目前在 Director 中並沒有提供直接 編排 3D 動畫的功能,要改變 3D 物件的貼圖或是移動攝影機都必須靠 Lingo 語言來控制,只是 其內建的互動操作函數(library)並不完整,且在 VR-CAVE 的環境開發尚須撰寫 Multiuser 網路傳 訊技術,所以需要撰寫相關的程式。
第三章 空間介面的建罝
圖 3-20:VR-CAVE 軟體整合方式
A. 場景模型轉檔
利用 3D 軟體 Maya 或 3D Max 製作場景,再經過轉檔存成 Shockwave3D(.w3d)的檔案格式,透 過 Shockwave 3D 技術來呈現 3D模型,在 Director 中可以完整地保留原本檔案中模型的材質、
動畫、攝影機等內容,也可透過預覽的視窗中利用滑鼠來拖動旋轉模型,提供了預視的效果但 並不會改變場景(圖 3-21)。而 Lingo 語言是 Director 中特有的編程語言,可以對特定的事件做出 適當的回應,也可使用 Lingo 來控制 3D 模型做出所需的互動功能。另外,在 Director 中的一些 行為可以透過指定某個模型的名稱來直接控制模型,所以在製作模型時對於每個模型的命名、
模型的群組、燈光及材質及座標原點,都是需要設定名稱的。
圖 3-21:3D 場景輸入 Director 中
另外,在 Director 中並沒有讓使用者直接編排 3D 動畫的功能,也沒有管理介面及編輯視窗,幾 乎所有的設定都必須透過 Longo 指令來操作,目前可以經由下載外掛程式 3DPI 來支援 (www.3dpi-director.com),再將這個外掛程式安裝在 Xtras 目錄中,3DPI 是一個可以用來操作 3D
第三章 空間介面的建罝
場景的 Xtra 工具(圖 3-22),它可以調整光源、碰撞與攝影機的設定並可以快速的觀察到不同的 設定對場景的影響,但是所做的設定是無法被存下來,所以在設定之後可以利用 trace 的功能將 相關設定的 lingo 程式複製下來使用,在 Message 視窗中可看到相對應的資料,將複製下來的程 式碼放置在適當的 script 中。
圖 3-22:Director 中 3DPI 的操作
B. 硬體與軟體配合後的操作流程
本研究中的設備為六台投影機分別各由一台 client 端的電腦控制,再透過網路連線由伺服端的電 腦來下達指令,如此形成一個迴圈,當使用者透過輸入裝置對伺服端下達指令後,伺服端對六 個 client 端發送運算指令,接著 client 端傳送同步的畫面到投影螢幕上(圖 3-23),以下為 VR CAVE 與 Director 配合時操作流程的主要順序:
(A) 網路連線及畫面同步顯示:伺服端透過 Multiuser 經由 TCP/IP 連結 client 端。
(B) 使用者對虛擬環境的互動控制:使用者操控此空間介面後,對伺服端傳送訊息。
(C) 虛擬環境對使用者的互動回應:伺服端對六個 client 端發送訊息同步移動攝影機,再投影到 螢幕上。
(D) 物件碰撞及重力:模擬真實空間所產生的碰撞效果。
第三章 空間介面的建罝
圖 3-23:VR-CAVE 軟體系統架構
(A) 網路連線及畫面同步顯示
Director 的網路連線為 Server/Client 架構,是以標準的 TCP/IP 或 Peer-to-Peer 通訊協定來傳輸資 料,這些都是透過附加的 Shockwave Multiuser Server 來處理,雖然利用 Director 可以簡化開發 流程,但卻缺少可以多畫面同步顯示的現成函式,必須利用 Lingo 來建立連結。啟動連線時必 須先開啟伺服器上的 Multiuser,再將六台的 client 端電腦連上伺服器(圖 3-24),以接收伺服端所 發出的指令,當六個影像畫面要同時呈現時會有畫面的同步問題,利用 Director 內部的 Lingo 語言來建立多畫面同步顯示的功能,因此,伺服端裡的程式透過 Multiuser 經由網路 TCP/IP 調 控 client 端每個畫面的同步顯示,之後再將每台 client 端的視角切換至各自攝影機的畫面。另外,
原本的 TCP 傳輸方式不夠快,改為 UDP 的方式傳輸資料,提供了一種快速但不保證資料一定 送到傳輸協定,適合用來更新物件移動的資料再傳給六部 client 端電腦。
第三章 空間介面的建罝
圖 3-24:透過 Multiuser 將六台 Client 端電腦連上 Server
Director 8.5 中內建的 Lingo 函式
函式名稱 .使用 Tcp 通訊協定傳送資料
connecttonetserver(登入者名稱,登入密碼,伺服器 ip,port 號碼,影片名稱)
.使用 UDP 通訊協定傳送資料
connecttonetserver([#remoteAddress:"192.168.0.7",#logonInfo:[#userID:"LL",#pa ssword:"2006",#movieID:"karen"],#localUDPPort:1627])
主要功能 透過這個函式跟 Shockwave Multiuser Server 的主機連接,註册一個 Client 代 號,每一台連上網路的電腦都會有一個 IP 名稱,利用相同的 Port 來找到所對應 的程式,在 Lingo 中必須先指定伺服器的 IP 及 Port 號碼。
(B) 使用者對虛擬環境的互動控制
當某事件被啟動時會產生一個描述此事件的訊息(Message)傳遞出去,再產生相對應的訊息來接 收,當處理函式接收到這些訊息後會有適當的程式來回應使用者執行的動作。在場景中是以 Server 端中的攝影機作為主要控制,將 Server 端的攝影機與場景中的虛擬控制物件做連結,而 六台 client 端的攝影機也連結到此虛擬控制物件,因此,當我們在操控時便可單純的只控制此虛 擬控制物件。當 Server 端連上六台電腦之後,此時 Server 端正在等待使用者下達指令,當使用 者對此空間介面進行操控後,經由互動行為的引發與訊息的傳遞來達成互動的效果,當伺服器 端偵測到所發生的訊息後,經由與其相連結的處理函式接收訊息後,會以適當的程式來回應,
第三章 空間介面的建罝
之後傳遞訊息到伺服端,當伺服端程式接收到訊息經由處理之後,便能傳送到其它六個 client 端,再根據使用者的操控來改變觀看的視點,最後在螢幕上顯示使用者操作後的同步畫面 (圖 3-25)。
圖 3-25:VR-CAVE 中訊息的傳遞模式
Director 8.5 中內建的 Lingo 函式
函式名稱 Setnetmessagehandler(#指令名稱,指令所在的程式 member 名稱,等候的訊息主 題,等候的收件人,收件方式設定)
主要功能 建立等候訊息的指令為 callback,設定網路訊息處理者,是一個初使化的動作,
做完了這個動作就可以進行訊息傳遞
函式名稱 Setnetmessage(收件對象,訊息主題,訊息內容) 主要功能 主要用來傳送訊息
(C) 虛擬環境對使用者的互動回應
當伺服端對六個 client 端發送訊息後,每台 client 端便會即時對所屬的攝影機做相對的運算,之 後再同步的將攝影機移動後的畫面顯示在螢幕上,如此形成一個迴圈。就城市導覽的目的而言,
為了能在虛擬空間中即時的行走,以第一人稱的攝影機來移動與旋轉,移動時需要六部攝影機 同時移動,而攝影機之間的相對位置也不能更動,因此,建立一個方塊做為此六部攝影機的父 物件,所以當移動此方塊時,便可以同時移動此六台攝影機。透過所寫的程式可以由踩下踏墊 上的某個按鍵來啟動這個指令,利用此感壓式踏墊來控制攝影機的移動,對於攝影機的控制給 予水平軸或垂直軸一個移動或旋轉的數值,攝影機便能即時的向前、向後的移動或是向左、向 右的轉動。
第三章 空間介面的建罝
Director 8.5 中內建的 Lingo 函式
函式名稱 "123": member("3d").model("A").rotate(0,0,1)
"124":member("3d").model("A").rotate(0,0,-1)
"125":member("3d").model("A").translate(0,-1,0)
"126":member("3d").model("A").translate(0,1,0)
主要功能 方向鍵的指令,偵測到使用者按鍵後,讓模型向前、後、左、右的移動
(D) 物件碰撞及重力
在虛擬實境中若能允許使用者去觸摸和感覺將會有很大的效果,特別是有關物體的操控和碰撞 的感覺 (Bowman et al, 2001)。場景中的碰撞設定是為了模擬真實空間的效果,試想在一個真實 的空間中是無法穿越一道牆或是一部車子的,在虛擬世界中行走時需要有碰撞的模擬以偵測到 障礙物的存在,一般使用的均是「碰撞後滑動」的原理,讓使用者在碰撞到牆面後沿著牆壁移 動(圖 3-26),碰撞的偵測方式可分為:box、mesh、sphere,mesh 能偵測到有無碰撞建築物模型,
偵測較為精確卻需要較大的運算。
圖 3-26:模擬物件碰撞的效果
Director 8.5 中內建的 Lingo 函式
函式名稱 member("a01").model("s01").addModifier(#collision) member("a01").model("s01").collision.mode = #mesh member("a01").model("s01").collision.enabled=true member("a01").model("s01").collision.resolve=true
主要功能 打開模型的碰撞屬性,碰撞偵測功能,但有時會不準確,常常會發生模型粘在 障礙物上動彈不得的情況。