前言
當英文討論區上還在招募志願者整理C++ 文件、偵錯C++ 實例時,中文讀者已經可以「先天下之閱而閱」,深入Panda3D 遊戲引擎C++/Python 核心內幕,了解、學習、使用、分析、訂製、擴充這款娛樂巨頭麾下的開放原始碼商業化遊戲引擎了。
Panda3D 遊戲引擎是US News 排名中電腦第一的美國著名學府「卡內基美隆大學」為娛樂巨頭「華特迪士尼」研發的產品。目前,迪士尼仍然使用這款遊戲引擎,而卡內基美隆娛樂技術中心也不斷以開放原始碼方式吸引在校學生及世界各地的業界人員共同促進這款遊戲引擎的持續發展。因此,如果讀者靜下心來掌握Panda3D 遊戲引擎,無疑會使自己能夠駕馭的3D 技術與娛樂巨頭的3D 技術並肩,具世界第一的水準。更重要的是,讀者可以毫無遺漏地獲得全部原始程式碼!
Panda3D 遊戲引擎是所具有名開放原始碼遊戲引擎中最為完整、商業化運作幾乎沒有限制的一款,是一個無比豐富的金礦。既可以直接拿來開發各種3D 應用,又可以作為產品原型系統進行客戶訂製。目前,除了官方網站上的英文資源外,主要圖書包含Panda3D 1.6 Game Engine Beginner's Guide(《Panda3D 1.6遊戲引擎初學指南》) 及Panda3D 1.7 Game Developer's Cookbook(《Panda3D 1.7 遊戲引擎開發者實作》)兩本,分別於2011年2月、3月出版。而本書是第一本關於Panda3D遊戲引擎的中文圖書。
Panda3D 遊戲引擎支援Unix、Linux、Windows、Mac 等作業系統,採用C++ 開發,與Python 指令碼語言進行了有效綁定。因此,開發者既可以使用C++,也可以使用Python;既可以選用Unix/Linux 作業系統,也可以選用Windows 作業系統。為了滿足開發者多元化的需求,本書選用Panda3D 1.7.x 版本,相關開發實例可執行於Windows、Fedora(Linux) 作業系統, 推薦的開發環境是Windows
+ Visual Studio C++ 2008、Fedora + Eclipse、Fedora + g++、Windows +
Eclipse PyDev(Python)、Fedora + Eclipse PyDev(Python)。當然,如果開發者喜歡Ubuntu、Debian、Mac OS X,除了需要自行安裝適當設定以外,有關開發指南同樣有效。本書推薦使用Autodesk 3ds Max 2010、Autodesk Maya 2009、Blender 處理遊戲資產,對如何與Panda3D 遊戲引擎進行資產整合有很清楚的說明。
儘管3D 遊戲引擎有關大量的理論知識和數學方法,但是本書主要偏重於程式設計實作和應用程式開發。全書共分22章。
第 1 章歸納了目前較受關注遊戲的遊戲引擎特徵,介紹了遊戲引擎發展歷程,比較了開放原始碼遊戲引擎整體差距、商業化運作案例,提供了遊戲引擎成本及受益計算方法,歸納了遊戲引擎選擇尺度,深入分析了十大開放原始碼遊戲引擎,解釋了軟體許可證方面的限制,最後指導讀者在Windows 及Fedora 上安裝Panda3D 遊戲引擎。
第 2 章指導讀者安裝、熟悉 Panda3D 遊戲引擎開發環境。選定的整合編譯環境是Linux 中Eclipse C/C++ 的Helios 版及Eclipse & PyDev 1.6.3,Windows 中Visual Studio 2008 及Eclipse & PyDev 1.6.3。在介紹了安裝過程後,讀者能夠根據說明步驟偵錯Python、C++ 版「你好,大熊貓」程式。編譯過程與方法適用於全書所有實例。
第 3 章完整介紹了遊戲引擎的設定變數,舉例說明了透過設定檔、程式存取處理變數的方法。同時說明了遊戲引擎附帶工具集,重點學習使用Pview。
第 4 章說明了 Egg 模型檔案定義語法、骨架及變形動畫約定結構,示範了引擎附帶的場景瀏覽器,歸納了導演工具滑鼠快速鍵語義,舉例介紹了匯入、轉換、管理Autodesk Maya、Autodesk 3ds Max、Blender 遊戲資產的方法。主要有關了遊戲程式設計以外的工作流程。
第 5 章深入解釋遊戲引擎場景處理設計理念、重要類別的繼承關係及函數功能,透過「合唱團」場景說明場景樹狀結構的靈活性,注重介紹了共同抽象基礎類別PandaNode、節點類別NodePath、視窗框架類別WindowFramework、引擎框架類別PandaFramework、視窗屬性類別WindowProperties、Python 啟動類別ShowBase,有關場景屬性調整、場景檢索、預留位置節點多層次管理等功能。開發實戰主題為太陽系程式。
第 6 章圍繞模型、地形、角色展開。介紹了檔案命名跨平台相容處理、環境變數動態管理及設定。重點是角色靜態模型與動畫模型的綁定、控制、管理,支援自動處理,也支援自訂處理。不同動畫效果可以透過4 種方式進行混合,各頁框動畫之間允許進行平滑內插。Character 是一種特殊的動畫角色,多用於實現具有關節的組合物件。遊戲引擎支援透過高度場影像自動產生地形,提供兩個示範實例。開發實戰主題為角色控制、關節處理。
第 7 章集中討論繪製屬性。引擎允許使用點光源、定向燈、環境燈以及聚光燈 4種類型的燈。材質主要模擬環境色散、漫反射、鏡面反射、發射率。景深測試能夠繪製透明、立體陰影。霧產生指數型、線性、指數平方型3 種繪製效果。透明測試多用於實現鏤空效果。色彩寫入隱藏繪製影像時結合透明通道產生3D 或RGB 色彩過濾效果。抗走樣模式採用設定檔、圖形卡屬性等參數設定,提供多種品質效能選擇。借助重新配色或顏色調節,繪製過程中可以即時控制物體表面、頂點顏色。前後表面揀選控制繪製表面指向,以此呈現蠟版、陰影、內部等視覺效果。燈光緩變支援以HDR 色調對映或卡通著色方法實現獨特的燈光繪製特效。蠟版緩衝器是一種靈活的繪製資料處理模版,經過設計,繪製將輸出奇特的效果。另外,遊戲引擎提供公告牌、指南針、貼花、燈光組合、顯示邊界等繪製效果。開發實戰主題為迪斯可燈光、無底洞。
第 8 章處理各種紋理,有關 1D、2D、3D( 立方體 ) 紋理,支援 JPG、PNG、TIF、BMP 以及具有變頻解碼(Mipmaps) 能力的DDS 檔案。紋理的主要特性是尺寸、自動填充、換行模式、篩檢程式。在執行過程中,開發者需要對各種紋理進行載入、取代、動態產生、管理、轉換,多採用紋理池、紋理層實現。特殊的紋理效果可透過多紋理機制完成,經過調節色彩紋理、法線、光澤、發光等屬性,產生調節、貼花、混合、凹凸對映、高度視差、光澤、發光。進階紋理技術包含自動紋理、投影紋理、3D 紋理、球體對映、立方體對映、動畫紋理、視訊紋理。開發實戰主題為凹凸貼圖、紋理交換。
第 9 章有關商業化擴充的重點主題著色器。遊戲引擎支援 Nvidia 與微軟一起制定的著色器語言Cg,包含頂點著色器、幾何著色器、片段著色器( 像素著色器)。著色器輸入類型覆蓋Cg 語言約定,同時加以擴充,允許訂製、註冊新的類型。遊戲引擎內部支援模型空間、遊戲世界空間、視線空間、API 視線空間、剪裁空間、API 剪裁空間之間進行有效轉換。著色器有時與相機、鏡頭狀態密切相關,遊戲引擎支援透視鏡、正交鏡頭、魚眼鏡、球鏡、矩陣鏡、磁柱鏡。透視鏡控制參數最多,包含焦點、視野、近平面距離、遠平面距離、膠卷尺寸、焦距長度、長寬32比。偵錯時,可以使用體外體驗OOBE 模式。提供了6 個著色器開發程式。開發實戰主題為卡通著色、發光濾鏡。
第 10 章介紹將繪製、動畫、音訊、互動等元件組合為幕,進一步建構自動執行的串列情節、平行情節的技術。是遊戲關卡的基本技術,有關全域時脈、事件。比較重要的幕包含內插幕、內插函數幕、彈道曲線幕、聲音幕、運動路徑幕、粒子幕。除此之外,還可以採用非同步工作、事件處理自主組織遊戲組件。它們都支援多執行緒機制。開發實戰主題為小行星、旋轉木馬、電視機中的茶壺。
第 11 章偏重介紹了 OpenAL、FMOD、Miles 中的前兩種開放原始碼音訊函數庫。音訊處理相對簡單,僅有關音訊系統的結構、循環控制、音訊管理員、DSP效果、3D 效果以及Python 音訊自動化幕等內容。開發實戰主題為播放多媒體、扭曲、螢火蟲。
第 12 章說明遊戲引擎附帶的進階互動功能。為了便於國際化整合,引擎支援ISO8859、UTF-8 及Unicode 字元集,提供互相轉換函數,允許根據字形檔及Egg 檔案選擇字型,透過文字節點、影像文字、螢幕文字、螢幕影像等元件進行顯示、模型產生、樣式調整。基本互動元件包含C++ 中的PGui 按鈕、文字輸入、滑桿、框架、捲軸、進度指示器,以及Python 中的DirectGUI 按鈕、核取按鈕、單選按鈕、交談視窗、輸入框、框架、標籤、選單、捲動列表、進度指示器、滑桿、捲軸、捲動框架。開發實戰主題為音樂盒。
第 13 章深入遊戲引擎內部建構,討論了頂點、幾何形體的儲存;3D 模型的產生、細節調整、讀取、存檔;邊界的計算、擴充、相交檢查;矩陣基本運算;紋理影像記憶體處理等內容。開發實戰主題為動態建構立方體模型。
第 14 章剖析了繪製處理過程。有關繪製的基本流程,流程的整合性,流程的擴充性,流程功能模組的劃分。由圖形管線、圖形引擎、圖形狀態監控、圖形輸出、顯示區域,圖形上下文、影像篩檢程式共同實現。繪製輸出可以進一步用於動態紋理、篩檢程式以產生特殊效果。遊戲引擎支援3D 顯示( 左右眼不同視覺體驗)。開發實戰主題為影子處理、Python 篩檢程式。
第 15 章說明如何透過力場產生粒子,某一時刻在特定空間按一定規律運動形成爆炸、煙霧、氣泡、水泡、浮雲等實體模擬效果。實際由粒子繪製器、粒子發射器、粒子工廠實現。遊戲引擎帶有粒子面板,可以設計、偵錯各種粒子檔案,包含塵土飛揚、雲蒸霧繞、噴泉、煙霧、煙圈、火炬等實例。開發實戰主題為分形樹。
第 16 章重點介紹碰撞檢測,可以透過自訂的球體或多邊形進行檢測,也可以對所有幾何形體進行檢測。碰撞形體實際類型包含碰撞球、管線、逆置球、平面、多邊形、射線、直線、分段、 物線、地板網格、雙球體、盒等。碰撞類型分為from類別檢測、into 類別檢測。碰撞事件由碰撞處理器佇列、碰撞處理器事件、碰撞實體處理器、碰撞推處理器、實體碰撞處理器、流式碰撞推處理器、地面碰撞處理器、重力碰撞處理器組成,適於不同碰撞場合。發生碰撞後,能夠處理的事宜主要包含取得有關形體的指標及對應節點,設定取得碰撞相對時間,設定取得有關物體的碰撞點、可穿越深度、碰撞法線等。碰撞隱藏有助最佳化碰撞檢查檢測。引擎也能夠處理高速運動物體。開發實戰主題為漫遊者。
第 17 章重點說明物理系統。支援內建物理系統、ODE、NVIDIA PhysX 以及Bullet( 針對1.8 版本以上)。多用於模擬物體速率、加速度、動力、力場、摩擦、撞擊;實現角色自動行進;模擬機動物體執行;處理水、浪等流動物體;展現服裝、織物質感等效果。開發實戰主題為迷宮滾球。
第 18 章介紹透過人工智慧、有限狀態機控制非玩家角色的方法。允許非玩家角色實現尋找、逃離、追逐、逃避、遊逛、羊群、避障、路徑追蹤等自動督導行為,也允許完成最短尋徑。FSM 是Python 專用的方法,以狀態機模型式的狀態移轉、狀態輸入過濾等方式定義遊戲狀態切換。開發實戰主題為國際象棋。
第 19 章集中補充了很多進階開發雜項。有關鍵盤、滑鼠、流等級網路 API、物件等級網路API、多媒體檔案套件的子檔案、流檔案、加密檔案、更新處理、偵錯記錄檔、開發整合環境偵錯、跨語言子類別衍生、指令碼語言程式質詢等內容。開發實戰主題為透過滑鼠和鍵盤控制FPS 相機。
第 20 章討論 1.7 版本以後新增的分散式應用功能,透過包裝、分散式部署、瀏覽器外掛程式等機制,支援網頁遊戲或獨立的分散式應用。考慮安全問題,允許使用數位簽章、資料來源認證等方式加以保護。開發實戰主題為運動軌跡。
第 21 章介紹了效能監測的工具及方法。發現效能瓶頸是一個非常複雜的話題,甚至比設計、開發程式更富有挑戰性。
第 22 章說明遊戲引擎原始程式碼編譯方法及主要步驟,適合進階開發者深入使用。
全書由劉暉、林欣、李強、陳小東、王學光參與撰寫。由劉暉、林欣負責統校全書。實例開發由劉暉、林欣、陳小東負責完成。
另外,本書使用的開放原始碼軟體許可證已經放在DVD 光碟對應軟體目錄之中,讀者進一步開發時務必遵守相關許可證約定。本書使用的插圖或自行製作,或來自網際網路。來自網際網路的部分插圖主要是由於與遊戲引擎機制原理、輸出結果有關,作者沒有參與有關遊戲運作、宣傳、評論等商業活動。特此宣告。
由於作者水準有限,時間緊迫,書中難免有不足之處,懇請讀者批評指正。
如果說Panda3D 是一座活躍的金礦,現在,本書已經繪製出一幅完整的金礦地圖。讓我們一起去採擷寶藏吧。
( 截止發稿時,Panda3D 遊戲引擎簡體中文支援網站第一版也已經開發完畢,正在加緊內測、準備上線,爭取第一時間奉獻給大家,與讀者們、開發者、技術同好、遊戲廠商深入地交流互動,請造訪www.panda3d.org.cn。)__