玩上古卷軸5的一點感觸(涉及任務代碼、mod管理、三維建模等)

        今年國慶在csdn上寫前端美化文章的時候,偶然間看到這款遊戲(原先不知曉有這麼個遊戲,吸引我的應該是貼圖佔了很大比重),然後就下載來玩,期間也遭遇了遊戲閃退、任務卡殼、mod安裝閃退、mod不能使用、衣服移植、身形問題、高跟鞋問題等等,有時候真不知道是我玩遊戲,還是遊戲在玩我。不斷的找資料,不斷的解決問題,跌跌撞撞地完成了各主線和支線任務,mod也裝上了100個,自己也簡單做了些衣服移植、添加物理特效、爐火等等。(我自己在學校的時候也做過網絡大規模三維場景重建,數據量有上10T,建築物幾千棟,都沒感覺這麼心塞過。)

1、遊戲任務問題

        一個任務常常通過對話、級別觸發,遊戲程序然後按照順序結構執行。除去mod造成的任務卡殼以外,在谷歌或者百度上隨便搜一搜,都會有幾十甚至上百條的遊戲任務卡殼問題,等待着有心人去解決。一般而言,遊戲設計者對一個任務的設計有着不同的思考和考量,但對於玩家而言,在通常情況下是不知道這些考量的。在任務過程中,設計者如果不給任何的提示或者暗示,玩家很難能夠找到目標所在,從這一點來說,思考不到位是遊戲設計者考慮不周全的問題了。比如說剛開始遊戲的時候,開墓室門的那個龍爪,有幾個人會去看龍爪手心的圖樣,然後按照那個圖樣轉動圓盤;又比如24個珍貴寶石的收集、30個猩紅奈恩根收集,靈魂石冢書頁的收集,不會告訴你寶石放在哪個位置,找奈恩根就更不想了,黑鏡那種壓抑的環境除了讓人難受以外,你還有更好的形容詞形容它?諸如此類的還有主線的上古知識、黎明守衛的觸及天空、龍裔的知識之道、冬堡的遏制政策、陣容的天際解放等等。黑暗兄弟會、盜賊、戰友團任務倒是還好,簡單。汗,黑暗兄弟會的任務太陰暗有沒有。進入那些矮人遺蹟卡殼了,居然是1+1=2的算術題。

解決方式

       涉及到一個任務有多個小項的時候,不查資料是不行的,網上有視頻、圖文的教程,但是吧,視頻的教程時間實在太長,最難受的是發佈視頻的人各種陰陽怪氣。至於遊民星空的圖文教程也可以看看的:

上古卷軸5支線任務教程:https://www.gamersky.com/handbook/201612/851478.shtml

上古卷軸5主線任務教程:https://www.gamersky.com/handbook/201610/827328.shtml

上古卷軸5控制檯命令:https://www.gamersky.com/handbook/201111/185581.shtml

上古卷軸5爐火材料:https://www.gamersky.com/handbook/201612/843733_2.shtml

 

       這些教程有時候一到關鍵點的時候,居然掠過了,而且毫無地圖方向感可言,方向詞表述都是前面、後面、左邊、右邊。對於玩家而言,站的位置跟與教程講授的人不一樣,我哪知道你說的前面、後面是啥,能不能在小地圖上標出來,說個東邊、西邊、南邊、東北之類的?所以遊民星空教程只當是任務的大致流程看看,知道這個任務大致要做什麼,可能的難點在哪裏,真正難點的解決還得搜。

       還是看官網吧:https://en.uesp.net/wiki/Main_Page (現在的中英文應該都不是問題了,谷歌翻譯就好)

      比如:官網觸及天空任務項,官網會告訴你該項任務涉及有哪些NPC、龍吼、魔法、裝備、地點以及完成任務的條件、任務完成後的成就。有時候任務做得煩心的時候,也實在不想做該任務了,可以查找任務項的任務編號,在遊戲界面按“~”調出,使用player.setstage xxxx xx,該項任務完成。一般而言,任務可以分項完成,也可以全部完成。如果任務一下子全部完成可能出bug,這時應該查找任務的詳細情況,知道做該項任務的時候涉及哪些NPC,任務物品,最後把物品和成就添加進去就好。還是拿黎明守衛的觸及天空任務打比方,任務就是在遺失山谷裏跑跑跑(會花掉你一個上午的時間),最後也只是得到一把奧利爾的弓而已,一點意思都沒有,看看官網任務流程。

觸摸天空(DLC1VQ07

階段

完成任務

日記帳分錄

10

 

上古卷軸提供的視野似乎表明,奧瑞爾之弓可能位於一個稱爲暗夜洞穴的地方。如果我想收回弓箭並阻止Harkon完成太陽的暴政,我應該在準備好後立即開始。

目標20找到奧里爾之弓

 

上古卷軸提供的視野似乎表明,奧瑞爾之弓可能位於一個稱爲暗夜洞穴的地方。如果我想收回弓箭並阻止Harkon完成太陽的暴政,我應該在準備好後立即開始。

目標20找到奧里爾之弓

30

 

目標30Gelebor對話

50

 

我遇到過格勒博爾(Gelebor),他是奧裏·艾爾(Auri-El)教堂的雪精靈騎士-聖騎士。他要求我殺死被法爾默(Falmer)腐敗的兄弟Arch-Curate Vyrthur。我得到了一個初始化之s,最終將使我能夠進入大殿式維特圖爾和奧里爾之弓所在的錢特里的內部聖殿。

目標50生存暗黑通道

55

 

目標70填充發起方的外溢(<Global = DLC1VQ07EwerFills> / 5

100

 

我已經完全滿足了騎士帕拉丁·格勒博爾給我的入門之壺。剩下的所有東西都可以進入大禮堂維特圖爾和奧里爾之弓所在的錢特里的內部聖殿。

目標80進入內部聖所

110

 

我已經可以使用Chantry的內部聖所。我應該找到並面對Virthur大主教,以保衛Auriel的弓。

目標90找到大主教維特爾

120

 

目標100面對大主教維特爾

135

 

目標110殺死大主教維特爾

140

 

目標120Gelebor對話

150

 

目標130取回奧里爾的弓

200

據我所知,太陽暴政是由大廚維特爾(Arch-Curate Vyrthur)創造的,目的是報復他成爲吸血鬼時斥責他的Auriel。他擁有Auriel的弓,但仍需要純淨的吸血鬼之血來完成他的儀式。這將塞拉納置於致命的危險中,我別無選擇,只能消滅他。我現在擁有《太陽暴政》的最後一部作品,Auriel的弓。

表格中省略了以下空任務階段:03536606570808182858687909192959697105130 131132

       任務代碼是dlc1vq07任務將近有33項,10個大項,仔細看過以後從0100項基本上是跑跑跑,真是煩,直接對照上古卷軸5支線任務教程:https://www.gamersky.com/handbook/201612/851478.shtml中的觸及天空,將前面的任務全部用代碼濾掉,跑到對應位置後,直接從100開始做任務。(網上也有人是用player.sqs 查任務做的,但當時我沒完成的任務實在太多,分不清楚dlc1vq07是不是觸及天空的任務編號)。嗯,解釋型腳本語言。

player.setstage dlc1vq07 10

player.setstage dlc1vq07 30

player.setstage dlc1vq07 35

player.setstage dlc1vq07 36

player.setstage dlc1vq07 50

player.setstage dlc1vq07 55

player.setstage dlc1vq07 60

player.setstage dlc1vq07 65

player.setstage dlc1vq07 70

player.setstage dlc1vq07 80

player.setstage dlc1vq07 81

player.setstage dlc1vq07 82

player.setstage dlc1vq07 85

player.setstage dlc1vq07 86

player.setstage dlc1vq07 87

player.setstage dlc1vq07 90

player.setstage dlc1vq07 91

player.setstage dlc1vq07 92

player.setstage dlc1vq07 95

player.setstage dlc1vq07 96

player.setstage dlc1vq07 97

       當然有人更加省事:player.setstage dlc1vq07 200,全部完成。任務是完成了,弓沒拿到,到時瑟拉娜會問你要那把弓的,那真是一頓尷尬。也許可以在官網或者emc找到奧利爾的弓代碼,用player.additem 0x00080 1獲得。

(對於這個遊戲的腳本語言和三維引擎不怎麼感冒,遊戲引擎用的是古董Creation Engine,語言是這麼的小衆--Papyrus

2mod使用問題

       上古卷軸組織管理mod的軟件有Nexus mod managerMod Organizer,這兩款軟件無所謂誰好、誰壞。從某種意義上說,兩個軟件只不過是爲上古卷軸或者其他遊戲搭建一個虛擬環境,似乎跟現在的Cloud軟件如出一轍(vmare應該很多人都聽過)。由於mod在製作過程中都會存在着依賴或者父子關係,因此就有了所謂的排序問題(或許做過軟件架構的會更加理解這一點,硬件-操作系統-數據庫-第三方程序-應用程序-接口)。相應的,Skrim優先級最高、update次之,DawngardHearthFireDragonborn並列,優先級都一樣。如果是一些特殊的mod插件,比如高跟鞋、物理系統等優先級要高於那些服飾、人物mod的,或者爐火做的房子、地域擴展之類的,應該比HearthFire低,因爲這個mod都作爲其他modmaster前置了。

      但是從另一個角度來說,只要內存裏面有mod的指針地址,這些Mod的優先級無所謂誰高誰低,因爲CPU都能在內存中拿到這些內存資源,怕就怕在你不知道這些Mod內部是不是有依賴關係,比如:幾乎所有mod都會安插一個master的主文件,通常是Skrimupdate,如果服飾、人物mod事先進入了CPUCPU也就拿不到Skrimupdate了。

      以上放在單個MOD裏面同樣適用,優秀的mod製作者會把她製作mod的依賴文件全部放入到mod裏面,比如骨骼、材質、貼圖、動作等。相比來說,劣質的mod或者出於某種意圖的mod(拿mod賺錢的那種),不是少這,就是少那,你進入遊戲,如果內存尋址錯誤造成內存泄漏,直接閃屏退出。最開始遇到閃屏退出問題的時候,我也是鬱悶,網上搜說是電腦配置太低的問題,我的電腦有8核,16G內存,顯卡NVIDIA GeForce GTX 1080,不可能是電腦配置太低的問題,應該是內存溢出了。

閃屏退出解決方式

      閃屏退出了也沒關係,至少是可以恢復過來的。使用mod管理軟件的好處在於裝了個錯誤的Mod,不會對遊戲本體造成任何損害,大不了刪除錯誤Mod就是了,然後將原有的遊戲配置文件在重新替換(Skyrim.iniSkyrimPrefs.ini,如果用的是重製版,這兩配置文件內部的數據還是不要改吧,發行方應該測試了很久的),因爲有時候內存溢出的時候,遊戲會在配置文件裏增加內容,你看到的配置文件已經不是最初的配置文件了。還有,至少看一下你將要安裝的mod,可以使用SSEEdit查看一下該mod的文件結構,比如form表單,傳奇版編號是43,重製版是44,如果重製版用43表單的mod,不好說遊戲一定會閃退,但是至少這個mod不正常,也或者是貼圖文件、身形文件用的是32位軟件製作的,你用重製版導入,也可能造成內存尋址錯誤。也有使用人物mod缺少動作文件支持的,進去遊戲人居然不動了,用FNIS Behavior更新動作很有必要。

3、衣服、身形、聲音等問題

      就現在的三維模型而言,它們始終都繞不開形狀、紋理、貼圖這幾項基本組成要素(就像三維引擎、物理引擎始終繞不開OpenGL一樣,即便有衆多的商業引擎,它們底層還是在調用OpenGL庫)。隨着研究的深入,後續又多了骨骼、材質、剛體、聲音這幾類要素。並不是說後面的要素是附屬品,而是計算機在描述物體的時候變得更加全面了:骨骼配合動畫,使得人物有了動作;材質配合光照使得物體的表面呈現出反射、散射的特徵,剛體配合空間形狀位置使得物理碰撞檢測成爲可能。我們也就看到了現在的遊戲變得越來越立體、越來越智能。當然,還有透視投影、立體照相(物理相機)等等,也可以這樣說,我們所體驗的遊戲只不過是一幅幅的圖像而已,貌似扯遠了。

      言歸正傳,在上古卷軸裏,一個完整有意義的三維模型是用mod組織的,它也必然包含上述要素,也正是由於三維模型要素文件格式的參差不齊,才使得mod在使用的時候出現了各種問題。作爲玩家呢,看到喜歡的mod也總想試着裝在自己的遊戲裏運行,作爲製作者呢,用心的製作人會把mod的配置條件一一清楚,每個細節都很到位,不用心的製作人呢,丟個模型上去,吸引眼球,然後玩家各種鬱悶。

衣服、身形、聲音解決方式

      其實問題2已經觸及到了mod從傳奇版轉換重製版遇到的關鍵問題所在,當然這類問題也有着更廣泛的普遍性。遊戲的兼容性是一個邁不出去的坎,製作這些遊戲要素的軟件也不一定就兼容了。比如:esm\esp報表文件、pex腳本文件、nif矢量圖像文件、dds圖像文件、osd擴展文件、fuz音頻文件等等,對應的製作軟件或者程序有SEEditpapyrusNifSkopeps3Dmaxck,這些軟件都是在不斷更新中(又比如:tiff圖像格式文件,雖說是公開格式,通用性強,但是每個軟件出來的tiff都有自己的IFD和一系列標記,兼容性卻不強)。其中esp或者esm文件起到了組織身形、動作、紋理等文件的作用,也是mod的核心所在,如果遊戲連它都識別不了,還玩個錘子mod,那就需要找到相應的軟件如:SEEditck,把它正確轉化了;nifdds同理也是需要正確轉化的,如果nif文件中配置有身形或者剛體物理文件,簡便的方法是直接把物理文件刪除,麻煩一點需要將物理文件分割,身形則需要用你所在遊戲的身形替換,再麻煩 一點,需要用三維軟件轉換骨骼 ,並重新對照骨骼,對配置文件(xml)寫入新的配置參數。mod製作的好點呢,身形、動作、插件等文件需要一起拷貝到mod裏面,並且配置正確的路徑。好吧,還有特殊癖好的,喜歡特別的聲音,可以用音頻軟件將視頻文件中的音頻拆解下來,然後分割音頻,找到聲音文件夾,直接將需要的聲音文件配置進去(貌似還可以配置wav音頻文件的),嗯,還有個高跟鞋,在百度上搜配置文件吧,然後配置到模型的聲效列表裏面。

 

總體來說,這款遊戲程序設計實在糟糕,劇本倒是還不錯,無道德綁架,當然了,自由度高也是一方面。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

 

    自由度高的反面是參與的人多,所謂人多嘴雜,亂七八糟。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

 

 (有時候在想,玩遊戲什麼時候能夠直接和遊戲人物對話,不用點鼠標、敲字啥的該多好)。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

 

附一:三維模型基本組成

三維模型:三維模型是物體的多邊形表示,通常用計算機或者其它視頻設備進行顯示。三維模型基本構成部分有網格和紋理,網格通常由三角形、四邊形或者其它的簡單凸多邊形組成。三維矢量模型是二維中點、線、面矢量模型在三維中的推廣。它將三維空間中的實體抽象爲三維空間中的點、線、面、體四種基本元素,然後以這四種基本幾何元素的集合來構造更復雜的對象。其中游戲中的三維角色模型還包含有骨骼、蒙皮、紋理、聲音等要素(骨骼與蒙皮也是三維模型)。

面模型(facial model)

體模型(volumetric model)

混合模型

(mixed model)

規則體元

非規則體元

不規則三角網(TIN)

結構實體幾何(CSG)

四面體格網(TEN)

TIN-CSG混合

格網(Grid)

體素(Voxel)

金字塔(Pyramid)

TIN-Octree混合或Hybrid模型

邊界表示模型(B-Rep)

八叉樹(Octree)

三棱柱(TP)

Wire Frame-Block混合

線框(Wire Frame)或相連切片(Linked slices

針體(Needle)

地質細胞(Geocellular)

Octree-TEN混合

斷面序列(Series Sections)

規則塊體(Regular Block)

非規則塊體(Irregular Block)

 

斷面-三角網混合(Section-TIN mixed)

 

實體(Solid)

 

多層DEMs

 

3D Voronoi圖

 

 

 

廣義三棱柱(GTP)

 

骨骼:

骨骼由一系列具有層次關係的關節(骨骼)和關節鏈組成,是一種樹結構,選擇其中一個是根關節,其它關節是根關節的子孫,可以通過平移和旋轉根關節移動並確定整個骨架在世界空間中的位置和方向。父關節運動能影響子關節運動,但子關節運動對父關節不產生影響,因此,平移或旋轉父關節時,也會同時平移或旋轉其所有子關節。

蒙皮:皮是指人物角色的外部三維模型,就好像真實人物去除骨架後的那層皮肉,在三維遊戲或者三維動畫中,爲了讓人物角色能夠真實運動,將外皮模型綁定到骨骼上的技術叫做蒙皮。

骨骼權重:

在不同骨骼的交接處,蒙皮常常只有一塊,爲了使外皮模型能夠與骨骼一起運動,將外皮模型的頂點賦予不同的權重以實現不同骨骼影響下的外皮模型拉伸或者收縮。

動畫關鍵幀:

關鍵幀動畫,就是給需要動畫效果的屬性,準備一組與時間相關的值,這些值都是在動畫序列中比較關鍵的幀中提取出來的,而其他時間幀中的值,可以用這些關鍵值,採用特定的插值方法計算得到,從而達到比較流暢的動畫效果。

紋理:

紋理通俗地來說就是貼圖:在三維圖形渲染中,貼圖與渲染器組合成材質,用來告訴gpu如何進行繪製,決定了三維模型表面最終呈現出來的顏色。貼圖包括法線、顏色、高度、高光等多種貼圖。

Diffuse Map(漫反射貼圖,也稱爲顏色貼圖;Base Color;Albedo Map -- 反照率貼圖):用於表現物體被光照射到而顯出的顏色和強度。

Bump Map(凹凸貼圖):給模型增加立體感。它並不能改變模型的形狀,而是通過影響模型表面的影子來達到凸凹效果的。遊戲中有兩種不同類型的凸凹貼圖:法線貼圖(normalmap)和高度貼圖(highmap)。

Normal Map(法線貼圖):定義了一個表面的傾斜度或者法線。換一種說法,他們改變了我們所看到的表面的傾斜度。

Height Map(高度貼圖):一種黑白的圖像,它通過像素來定義模型表面的高度。像素越白的地方越高,越黑的地方越低,灰色的在中間,從而表現不同的地形。

Specular Map(鏡面光貼圖,也稱高光貼圖)或Reflective Map或Gloss Map(光澤貼圖):一種黑白的圖像,像素越白的地方鏡面反射越強,越黑的地方鏡面反射越弱,用來表現模型表面反光程度(塑料>木頭>皮膚>布料),從而區分不同材質。

Mask Map(Opacity Map,Opacity Mask Map,不透明貼圖,遮罩貼圖)。

Emission Map(Emissive Map,Self-Illumination Map [自發光貼圖])

僅僅是提高貼圖本身的亮度,不受場景光源和攝像機位置影響,也不會照亮其他物體

Glow Map(輝光貼圖):模擬閃耀的效果,它不會照亮環境,不受場景光源和攝像機位置影響。

Light Map(光照貼圖)

把物體光照信息預先烘焙保存到光照貼圖中, 實時繪製時不再進行光照計算, 而是採用該貼圖來表示明暗效果

Shadow Map(陰影貼圖):可預先烘焙或實時計算。

Ambient Occlusion(AO貼圖,環境阻塞貼圖,Occlusion貼圖,也簡稱爲OCC或白模):使用一張灰白圖來表示物體之間相互影響的效果,可以理解爲明暗素描那樣的一種表現形式,

主要用於改善陰影,貼圖中越黑的地方,陰影就會加得越深(若輸入一張純白的AO貼圖,相當於關掉了AO效果),給場景(模型)更多的深度,有助於更好的表現模型的細節。

Ambient Map(環境照明貼圖,也可稱爲背光貼圖):這裏的Ambient不同於AO貼圖中的Ambient,它作爲Diffuse的一部分,控制着物體背光的色彩變化,同時也對迎光面產生一些影響。

在現實中,物體的背光面仍會受到環境中各種光線反彈的照亮,也不會是純黑的。環境照明貼圖常用在場景燈光不足的情況,用於提高物體暗面的亮度。

Environment Map(環境貼圖),也稱爲反射貼圖(Reflection Map):用一張貼圖映射到反射對象上,使得在反射對象上看到場景的影像;這張圖可以是一張做好的假的環境貼圖,也可以實時生成(把反射對象當作一個虛擬眼睛,實時將場景生成一張虛擬的貼圖)。按照映射的方式又分爲:球面環境映射貼圖(標準環境映射貼圖,Sphere Map)、立方體環境映射貼圖(Cube Map)、雙拋物面環境映射貼圖(Parabola Map)

Glossiness Map(光澤度貼圖):PBR材質中用到的貼圖,爲一張黑白圖,用於控制模型微表面粗糙程度。圖中像素越白的地方,微表面越光滑,單個像素的反射光線的方向範圍就越集中,高光點就越小越亮,將周圍環境映射到模型表面就顯得越清晰

Roughness Map(粗糙度貼圖)與Glossiness Map相反

Metallic Map(金屬度貼圖):PBR材質中用到的貼圖,爲一張二值黑白圖,很少有金屬與非金屬之間的過渡物質。

紋理UV座標

紋理UV座標含義就是一張紋理貼圖的座標,選擇一張圖片,比如以圖片左下角爲座標原點,右上角爲座標(1.0,1.0),圖片上所有位置縱橫座標都介於0.0~1.0之間。

紋理映射

紋理UV座標和頂點位置座標是一一對應關係,這也就是爲什麼一張圖片可以映射到一個模型的表面,只要把圖片的每個紋理座標和模型的頂點位置建立一對一的關係,就可以實現圖像到模型的映射。

渲染烘培

渲染烘培就是繪製畫面的意思,計算機把存儲的遊戲數據(山川、人物、河流、房屋等等)通過處理在計算機屏幕上用一張圖像畫出來,這個處理過程經歷了幾何造型、座標變換、區域填充、裁剪、消隱、光影模擬、片元着色、屏幕投射等一系列過程。

 

附二:三維模型數據格式 

三維模型的軟件比較多,有多種多樣的數據格式

.obj

obj是Wavefront公司爲它的一套基於工作站的3D建模和動畫軟件"AdvancedVisualizer"開發的一種文件格式。

OBJ文件是一種標準的3D模型文件格式,很適合用於3D軟件模型之間的互導。OBJ文件是一種文本文件格式,這就意味着你可以直接用寫字板打開進行查看修改。目前幾乎所有知名的3D軟件都支持OBJ文件的讀寫,不過很多軟件需要通過插件才能做到這一點。另外,作爲一種優秀的文件格式,很多遊戲引擎也都支持OBJ文件。OBJ3.0格式支持多邊形(Polygon),直線(Lines),表面(Surfaces),和自由形態曲線(Free-form Curves)。直線和多角形通過它們的點來描述,曲線和表面則根據於它們的控制點和依附於曲線類型的額外信息來定義。這些信息支持規則和不規則的曲線,包括那些基於貝塞爾 (Bezier)曲線,B樣條(B-spline),基數(Cardinal/Catmull-Rom樣條),和泰勒方程(Taylor equations)的曲線。 

.fbx

FBX 是 FilmBoX 這套軟件所使用的格式,後改稱 Motionbuilder。因爲Motionbuilder扮演的是動作製作的平臺,所以在前端的modeling和後端的rendering也都有賴於其它軟件的配合,所以Motionbuilder在檔案的轉換上自然下了一番功夫。FBX最大的用途是用在諸如在 Max、Maya、Softimage 等軟件間進行模型、材質、動作和攝影機信息的互導,這樣就可以發揮 Max 和 Maya 等軟件的優勢。可以說,FBX 方案是非常好的互導方案。

.bvh

BVH 是BioVision等設備對人體運動進行捕獲後產生文件格式的文件擴展名。BVH文件包含角色的骨骼和肢體關節旋轉數據。BVH 是一種通用的人體特徵動畫文件格式,,廣泛地被當今流行的各種動畫製作軟件支持。通常可從記錄人類行爲運動的運動捕獲硬件獲得。

.dae

DAE 是純文本的模型格式,其本質就是一個單純的xml文件。相比fbx,對dae格式模型的載入我們擁有非常高的自由控制,這也是最複雜的地方。基本上,dae文件內一開始就把數據分成了好幾大塊。對我們來說最爲有用的是VisualScenes(包含場景骨骼節點樹)、Nodes(與VisualScenes類似,兩者或互爲補充)、Geometries(網格數據)、Materials/Effects/Images(材質相關信息)、Controllers(骨骼信息數據)、Animations(動畫數據)、AnimationClips(全局的動畫信息),其中靜態模型一般也就包括VisualScenes和Geometries。

.stl

全稱是Stereolithographic,是3DSystem公司提出的3D模型文件格式,它採用三角形離散地近似表示三維模型,目前已被工業界認爲是快速成形領域的標準描述文件格式。STL文件的最大特點也是其主要問題是,它是由一系列的三角形無序排列組合在一起的,沒有反映三角形之間的拓撲關係。

.3ds

3ds是Autodesk 3dsMax使用的一種3D模型文件格式,現在主要用於存儲mesh模型。

.ply

PLY 是一種電腦檔案格式,全名爲多邊形檔案(Polygon File Format)或 斯坦福三角形檔案(Stanford Triangle Format)。 該格式主要用以儲存立體掃描結果的三維數值,透過多邊形片面的集合描述三維物體,與其他格式相較之下這是較爲簡單的方法。它可以儲存的資訊包含顏色、透明度、表面法向量、材質座標與資料可信度,並能對多邊形的正反兩面設定不同的屬性。在檔案內容的儲存上PLY有兩種版本,分別是純文字(ASCII)版本與二元碼(binary)版本,其差異在儲存時是否以ASCII編碼表示元素信息。

.abc

特效工作室: ILM、Sony Pictures與Imageworks, 共同開發了一個開放源碼系統,目標是解決特效界共同的問題, 如何可以共享複雜的動態場景, 跨越不同的軟體之間, 這個格式命名爲Alembic ,英文直譯爲蒸餾機。本質上就是一個CG交換格式, 專注於有效地儲存, 共享動畫與特效場景, 跨越不同的應用程式或是軟體, 包含了商業販售的軟體或是公司內部開發的軟體, 客製化的工具組。

.glTF

glTF是一種可以減少3D格式中與渲染無關的冗餘數據並且在更加適合OpenGL簇加載的一種3D文件格式。glTF的提出是源自於3D工業和媒體發展的過程中,對3D格式統一化的急迫需求。如果用一句話來描述:glTF 就是三維文件的 JPEG ,三維格式的 MP3。在沒有glTF的時候,大家都要花很長的的時間來處理模型的載入。很多的遊戲引擎或者工控渲染引擎,都使用的是插件的方式來載入各種格式的模型。可是,各種格式的模型都包含了很多無關的信息。就glTF格式而言,雖然以前有很多3D格式,但是各種3D模型渲染程序都要處理很多種的格式。對於那些對載入格式不是那麼重要的軟件,可以顯著減少代碼量,所以也有人說,最大的受益者是那些對程序大小敏感的3D Web渲染引擎,只需要很少的代碼就可以順利地載入各種模型了。此外,glTF是對近二十年來各種3D格式的總結,使用最優的數據結構,來保證最大的兼容性以及可伸縮性。這就好比是本世紀初xml的提出。glTF使用json格式進行描述,也可以編譯成二進制的內容:bglTF。glTF可以包括場景、攝像機、動畫等,也可以包括網格、材質、紋理,甚至包括了渲染技術(technique)、着色器以及着色器程序。同時由於json格式的特點,它支持預留一般以及特定供應商的擴展。

.psk

Psk 是 Epic Games Unreal Engine 的格式,也就是大名鼎鼎的虛幻遊戲引擎的模型格式。虛幻遊戲模型提取出來的就是 psk 格式。

.x3d

X3D 是一種專爲萬維網而設計的三維圖像標記語言。全稱可擴展三維(語言),是由Web3D聯盟設計的,是 VRML 標準的最新的升級版本。 X3D 基於 XML 格式開發,所以可以直接使用 XML DOM 文檔樹、XML Schema 校驗等技術和相關的 XML 編輯工具。目前 X3D 已經是通過 ISO 認證的國際標準。

.dxf

DXF 是一種開放的矢量數據格式,可以分爲兩類:ASCII格式和二進制格式;ASCII具有可讀性好的特點,但佔用的空間較大;二進制格式則佔用的空間小、讀取速度快。各種 CAD 軟件中 DXF 被廣泛使用,成爲事實上的標準。絕大多數CAD系統都能讀入或輸出DXF文件。

附件三:相機

正射相機

透視相機

 

光源

在實際開發過程中,多數三維場景往往需要設置光源對象,通過不同的光源對象模型生活中的光照效果。

物理引擎

 物理引擎是一種用於模擬真實物理現象的中間件,可以用來創建虛擬的物理環境,並在其中運行來自物理世界的規則。

Havok引擎的授權則比較昂貴和嚴格,光環4、上古卷軸5等遊戲大作使用的都是這款引擎。PhysX雖然現在不開源,但也實行免費推廣政策,是Unity3D、CryEngine等遊戲引擎的首選。Bullet物理引擎是一款開源、免費的物理引擎,jMonkeyEngine3 選擇了與Bullet引擎集成。

如同3D圖形引擎是建立在計算機圖形學和光學建模的理論基礎之上,現代物理引擎也有其理論根基,最主要的就是物理學的分支——理論力學。

理論力學(theoretical mechanics)是研究物體機械運動的基本規律的學科,是力學的一個分支。它是大部分工程技術科學的基礎,也稱經典力學。其理論基礎是牛頓運動定律。20世紀初建立起來的量子力學和相對論,表明牛頓力學所表述的是相對論力學在物體速度遠小於光速時的極限情況,也是量子力學在量子數爲無限大時的極限情況。對於速度遠小於光速的宏觀物體的運動,包括超音速噴氣飛機及宇宙飛行器的運動,都可以用經典力學進行分析 。

理論力學通常分爲三個部分:靜力學、運動學與動力學。靜力學研究作用於物體上的力系的簡化理論及力系平衡條件;運動學只從幾何角度研究物體機械運動特性而不涉及物體的受力;動力學則研究物體機械運動與受力的關係。動力學是理論力學的核心內容。理論力學的研究方法是從一些由經驗或實驗歸納出的反映客觀規律的基本公理或定律出發,經過數學演繹得出物體機械運動在一般情況下的規律及具體問題中的特徵。理論力學中的物體主要指質點、剛體及剛體系,當物體的變形不能忽略時,則成爲變形體力學(如材料力學、彈性力學等)的討論對象。靜力學與動力學是工程力學的主要部分。

質點和剛體的運動是遊戲物理引擎中運用最多的技術,因爲剛體在發生碰撞時可以忽略物體的形態變化。對於需要實時運算的遊戲來說,這意味着只需要針對質點的運動進行模擬,可以極大得簡化模擬過程。比剛體更爲複雜的是軟體,例如布娃娃、彈球、布料等物體,在發生碰撞後會導致模型變形。在遊戲中,這種變形通常意味着需要實時計算成千上萬個頂點的位置。

碰撞檢測,這個詞通常有兩種含義,一種是物理意義上的碰撞檢測,另一種是數學意義上的碰撞檢測。數學碰撞檢測比物理碰撞檢測的速度要快,而且消耗的內存也更少,因爲壓根就不用考慮質量、能量、動量、速度、加速度等物理因素。類似於鼠標拾取、視線範圍等功能,使用射線與物體進行相交檢測就可以輕易實現。有經驗的遊戲開發者會盡量使用數學方法來模擬物理引擎的功能,以此來優化遊戲的性能。

對大量物體進行碰撞檢測是個十分耗時的工作,因此,優化工作從最初就開始了。常用的優化方法有兩種:其一是使用簡單形狀的碰撞體來代替複雜形狀的物體,例如包圍體、射線、平面等;其二是利用數據結構來減少實際參與檢測的物體數量,例如九宮格、四叉樹(2D)、八叉樹(3D)等等。

物理引擎中對象封裝

  • 世界(World)或空間(Space)
  • 物體(Body)
  • 關節(Joint)
  • 形狀(Shape)或網格(Mesh)
  • 質量(Mess)
  • 速度(Velocity)
  • 力(Force)

在諸多物理引擎中,“世界(World)”是各種物理規則的載體,比如“重力(Gravity)”。與遊戲引擎中的場景圖類似,“世界”也需要管理場景中的物體。如果你希望模擬物理現象,那麼你就得先創造一個世界,再把各種形狀的物體添加到這個世界中,然後開動世界的馬達,讓物體在世界中運動、碰撞、相互作用。

常我們只需要一個“世界”,但你也可以創造不同的世界。在多個世界中定義不同的物理規則,以此來模擬不同的物理現象,如地表、水下、太空等。除了物理規則以外,“世界”最常見的屬性是“邊界(Bound)”。這個屬性的存在主要是考慮了程序的性能問題,用於剔除超出世界邊緣的物體。畢竟我們的遊戲畫面就那麼大,對那些超出玩家感知的物體進行運算可能沒有太大的必要。

多世界同樣也是一種分組手段。有時同一個場景中的物體,並不一定要在一個世界中進行碰撞檢測。例如賽車遊戲,車輛和賽道需要進行碰撞檢測,但是觀衆和其他自然景觀應該在另一個組中。不過大多數物理引擎會直接定義用於“分組(Group)”的對象,這樣就沒有必要爲另一個世界分配內存資源了。

爲了保證模擬的真實性,物理引擎一般會使用連續碰撞檢測(CCD continuous collisiondetection),並且限制每兩次碰撞檢測之間的最小時間步長(timeStep)。假如運動的步長是0.1秒,當deltaTime爲10秒時,物理世界的主循環可能要執行100次完整的碰撞檢測。

因此,雖然物理引擎大多使用基於時間的主循環,但考慮到執行效率,通常也會配合線程或定時器來按固定幀率執行。一般物理引擎建議的執行速率是每秒60次計算,但是30幀、16幀甚至10幀的頻率也是可以接受的。

特效

濾鏡

在遊戲場景渲染完成後,我們可以使用濾鏡(Filter)對畫面進一步加工。在3D遊戲中,下列效果通常都是用濾鏡來實現的:

  • 霧化(Fog)
  • 馬賽克(Mosaic)
  • 玻璃(Glass)
  • 雨雪(Rain / Snow)
  • 景深(Depth of Field)
  • 水面反射(Water Reflection)
  • 泛光(Bloom)
  • 高光(Glow Effect)
  • 柔光(Blur)
  • 光線散射(Light Scattering)
  • 環形光遮蔽(Ambient Occlusion)
  • 卡通邊緣線/輪廓線(Cartoon Edge / Outline)

着色器

3D場景渲染完畢後,GPU將會把畫面數據返回給CPU,並保存爲FrameBuffer對象。濾鏡處理器在工作的時,會把FrameBuffer中的數據渲染到一個內存中的紋理(Texture)上,然後把這個紋理交給Filter去進行後期處理。

基本上每個濾鏡都有對應的Shader程序,在程序中加載爲一個Material對象。處理器順序調用每一個濾鏡的Material,對內存中的紋理進行渲染,最後再把畫面數據寫回到FrameBuffer中。

粒子

當你在遊戲中看到下列內容之一時,可能是使用粒子系統實現的。

  • 火焰,閃光
  • 雨滴,雪花,瀑布,噴泉,落葉
  • 爆炸,碎片,衝擊波
  • 雲,霧,煙,塵
  • 蜂羣,星雲,流星尾跡
  • 魔法飛彈

這類場景元素很難通過建模來實現,想要製作模型動畫幾乎是不可能的。在3D遊戲中,我們使用粒子系統來模擬其它傳統的渲染技術難以實現的抽象視覺效果。

粒子系統是由總體具有相同的表現規律,個體卻隨機表現出不同的特徵的大量顯示元素構成的集合。

這個定義有幾個要素:

  1. 羣體性 粒子系統是由“大量顯示元素”構成的。因此,用粒子系統來描述一羣蜜蜂是正確的,但描述一隻蜜蜂沒有意義。
  2. 統一性 粒子系統的每個元素具有相同的表現規律。比如組成火堆的每一個火苗,都是紅色,發亮,向上跳動,並且會在上升途中逐漸變小以至消失。
  3. 隨機性 粒子系統的每個元素又隨機表現出不同特徵。比如蜂羣中的每一隻蜜蜂,它的飛行路線可能會彎彎曲曲,就象布郎運動一般無規則可尋,但整個蜂羣,卻是看起來直線向一個方向運動(這就是上一點所說的統一性)。

粒子系統既可以是動態的(火花、雨滴),也可以是靜態的(草坪、毛髮)。有些看似完全不同的東西,卻可以使用相同的模式來實現。

  • “爆炸”和“煙塵”的區別,僅僅是粒子運動速度不同。
  • “火焰”和“瀑布”的區別,在於粒子的顏色和運動方向不同。

一般來說,粒子系統是由3大部分組成的:

1、粒子發射器

粒子數量

生成速率

生成區域

持續時間

循環模式

2、粒子外觀

形狀(點狀、片狀、3D網格)

顏色

材質

大小

3、粒子行爲

  • 運動速度(線速度、角速度)
  • 速度的變化(散開、旋轉、加速、減速)
  • 變形

粒子發射器定義了粒子系統的羣體性,包括粒子的數量、生成區域、生命週期等。

粒子外觀和粒子行爲共同定義了粒子系統的統一性,系統中的每個元素都應該遵循這些規則。

粒子系統的隨機性則是通過下列方式實現的:

  • 雖然粒子系統的生成區域是一個固定形狀,但每個粒子生成時可以在範圍內隨機挑選一個出生點。
  • 設置多種可選的粒子外觀,每個粒子生成時可以隨機選擇一個,有些粒子系統還允許粒子在活動過程中隨機改變外觀。
  • 粒子行爲有一定的變量和範圍,每個粒子的行爲參數都在一定區間內隨機選擇。比如粒子運動的初速度可以設置最大值和最小值,運動方向也可以在一定範圍內調整。

程序控制、

主循環是一款遊戲或者框架的核心以及基礎,它會讓遊戲以及動畫看起來是在做實時的運行。幾乎所有遊戲(除了回合制等幾種類型以外)都要基於主循環以及精確的時間控制。

遊戲生命週期

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章