• 沒有找到結果。

一、 序論

1.2 系統架構概觀與流程簡介

最近幾年NPR(Non-Photorealistic Rendering)的研究是項新的研究領域,而NPR的 目標是呈現畫家的各種藝術臨摹技法效果,而不是繪製真實的世界影像,若要如實的模 擬畫家的各種藝術臨摹技法效果,在目前的NPR發展上仍有一段長遠的路要走。我們可 以很容易從先前的NPR研究中發現,幾乎大部分的研究都著重於西畫的模擬上,像水彩 繪[5]、影線畫[8, 19]、鉛筆畫[30, 31]與及剛筆墨畫[27, 28, 29]等皆是,相對於少數的中 國水墨畫NPR的研究,實在令人感到遺憾。典型的中國水墨畫是結合簡單的線條來傳遞 深遠的情懷意境,不是以豐富的色彩來表現圖案,而要模擬中國水墨畫的效果不全然是 瑣碎的事,已有自由的毛筆線條、畫布上的表面皺摺、墨水的擴散與沉澱等相關的研究 [13, 18, 35]。

本論文之研究重點,為將三維電腦遊戲引擎中繪圖機制,改以電腦自動找出模型輪 廓線及特徵線,是採用暴力法來完成此項任務的,並以調整線條的粗細變化及渲染的筆 觸方法,來繪製三維電腦遊戲中的三維人物模型,使人物模型的物體呈現白描技法的效 果,此項我們參考 Weng [35]所提的水墨模組模擬機制來完成的。而在電腦繪圖的技巧 與步驟上我們參考 Northup [20,22] 等人提出的方法來實踐。在電腦繪圖的速度方面,我 們提出狀態機的繪圖機制[25],將傳統每次重畫全部場景的方式,拆成:全部繪製(並 儲存影像)、先繪靜態部份(並儲存影像與深度值)再繪動畫物件、回存靜態部份深度 值再繪動畫物件與將儲存影像直接輸出至螢幕等四個不同繪圖狀態,用以提昇三維電腦 遊戲引擎對輸出入裝置之反應速度,使畫面顯示與遊戲之操作得以更加順暢。圖 1 顯示 三維電腦遊戲引擎系統架構,圖 2 顯示三維電腦遊戲引擎 NPR 模組,圖 3 我們顯示包含 繪圖狀態機在內的 NPR 繪圖處理步驟,而圖 4 則顯示系統執行步驟,其後我們說明主 要的功能項目。

UI

Input Device OS API 2D Sprite Gamepad Audio Network Terrain Collision Character Dynamics Sound FX

Combat System FX System Game AI Script System NPC System Virtual Agent Trading System Story

Game

3D Graphics API

3D Scene Management 2D API

Game Play Layer

Engine Layer

System Layer

Hardware

圖 1 三維電腦遊戲引擎系統架構

3 D 繪圖引擎

NPR Management Chinese Ink API 3D Graphics API

3D Scene Management

圖 2 三維電腦遊戲引擎NPR模組

圖 3 NPR繪圖處理步驟 載入場景模型

萃取三維資訊

萃取輪廓線與特徵線

去除隱蔽線

投影 線段連結

毛筆參數設定

墨水色調

畫布沾墨 繪製參考影像( Id Image) 視點位置

改變 繪圖狀態機

三維立 體空間

二維平 面空間 檢測輸出入

裝置

輸出至螢幕 參數檔

1. 載入場景模型(BSP、3DS 與 FAO):首先,三維電腦引擎根據 .fly 參數設定檔案,

載入三維場景模型(.BSP檔)、靜態物件模型(.3DS檔:由3D Studio Max匯出)以 及動畫物件模型(.FAO檔:由Fly3d工具程式轉換)。

2. 萃取三維資訊(3D Information Extraction): 此步驟是先計算由3D Studio Max匯 出的場景模型與物件模型的法向量(Normal)、邊線(Edges)與邊界方塊(Bounding Boxes),再以一維陣列的資料結構方式,存於三維電腦引擎動態聯結模組中

(.DLL),系統執行時再依索引值來讀取對應的三角面相關資訊。

3. 繪圖狀態機(Render State Machine):此步驟會根據目前繪圖所處的狀態,及狀態 變化的相關條件,經邏輯運算後選擇新的狀態:全部繪製(並儲存影像);或先繪 靜態部份(並儲存影像與深度值)再繪動畫物件;或回存靜態部份深度值再繪動畫 物件;或將儲存影像直接輸出至螢幕。

4. 萃取輪廓線與特徵線(Feature Lines Extraction):此步驟電腦會自動的找出三維場 景中物件模型的輪廓線及特徵線,而模型的輪廓線與特徵線我們會根據不同的視點 位置,在每一個視框(Frame)以暴力法方式重新計算獲得,這個步驟是在物件三 維的空間中進行的。

5. 繪製ID參考影像( ID Reference Image): 此步驟,我們仍然以OpenGL的繪圖機制來 繪製,不同的是我們會給予每一個可見的線段,指定一個唯一且大於128 的顏色編 號,供下面步驟處理參考,此繪製出的影像就稱作ID參考影像[20]。

6. 去除隱蔽線(Hidden Lines Removal): 此步驟,我們會從視框緩衝區(Frame Buffer)

中直接讀取ID參考影像,再以二維平面方式偵測及判斷先前繪製的三維模型的可見 輪廓線與特徵線是否為其他物件所遮蔽,重新標示是否為可見的小線段。

7. 線段連結(Segment Link):此步驟,是根據上個步驟偵測出的可見小線段,將之 連成較長的線段,供下面步驟產生較平滑的曲線。

8. 投影(Projection):此步驟,將可見的較長線段投影到二維平面,再根據較長線段 的起點與終點,計算產生Cardinal Spline 的控制點,最後再依毛筆模組的模擬機制 模擬於曲線上。

9. 毛筆參數設定(Brush Parameter Setting):此步驟,是載入墨水的參數設定值,並 起始毛筆模組物件,並設定毛筆模組參數及應用物理基礎的毛筆模擬機制[35] ,來 繪製中國水墨風格的效果。

10. 墨水色調(Ink Tone):此步驟,是根據毛筆參數設定值,起始墨水的色調以呈現 我們要的結果。

11. 畫布沾墨(Ink Diffusion on Rice Paper):此步驟,於畫布上模擬出墨水的運行效果 [13]。

圖 4 系統執行步驟

1. 前端執行程式(Front-end): 此前端執行程式主要功用是,起始電腦遊戲引擎程式 模組、繪圖程式模組與 DirectX 程式模組,最後進入無窮回圈,輪翻的呼叫外掛程 式模組去執行 fly_message()、更新視點位置與個別物件的 draw()、step()程序。

2. 遊戲引擎動態連結程式模組(Engine): 此模組為整個系統的核心,實際負責場景 模型與物件模型的資訊儲存、OpenGL 繪圖程序、偵測輸出入裝置、播放聲響及其 他用到的程序。

3. 外掛程式模組群(Plug-in): 此外掛模組程式群,原電腦遊戲引擎提供的外掛程式 模組有 gamelib.dll、lights.dll、viewport.dll、weapon.dll 與 menu.dll 等可供利用,而

前端執行程式:

Flyfe.exe

外掛程式模組群:

chess.dll , gamelib.dll 及 其他 DLL 模組

遊戲引擎動態連結程式 模組:

Fly3D.dll

init_engine;

init_directx;

init_render;

while(1) {

…….

…….

if (rend && flyengine)

if (flyengine->step()) // simulate rend->DrawView(); // draw view

}

輪翻呼叫外掛程式模組去執行 fly_message()、與個別物件的 draw()、step()程序(包含使用者自 行撰寫的邏輯處理程式)

外掛程式模組 呼叫引擎程式 模組進行繪圖

Loop

使用者可另外針對不同的須求自行撰寫外掛程式模組加以擴充,例如:我們自行所 撰寫的人機介面控制程式與參考使用的象棋人工智慧處理程式等。

相關文件