不是有句老話講「程式 = 演算法 + 資料結構」嘛,對於3d引擎來說也是這樣。學習和掌握3d引擎中的核心資料有哪些,它們直接的關係是怎樣等等問題,對於理解3d引擎的架構和圖形渲染關係都有著非常大的幫助。然而,現在的商業3d引擎非常複雜,想要通過學習其源**嘛非常困難,那麼你就這樣放棄了嗎? :wink: 我們需要乙個合適的方式切入。
直接去研讀unreal engine的源**,對於沒有基礎的同學來說,確實太困難了。想要對3d引擎內部有一些必要的了解,gltf是乙個很好的切入點。學習gltf也是具有實用價值的,已經有越來越多的引擎支援這種格式,另外還可以順便學一下英語。:smile:
gltf是什麼呢?
* gltf即gl transmission format的縮寫;
* gltf是一種3d內容的格式標準,由khronos group管理;(khronos group還管理著opengl系列、opencl等重要的行業標準)
* gltf的設計是面向實時渲染應用的,盡量提供可以直接傳輸給圖形api的資料形式,不再需要二次轉換;
* gltf對opengl es、webgl非常友好;
* gltf的目標是:3d領域的jpeg;
* 作為乙個標準,自2023年10月發布(gltf 1.0)以來,已經得到了業界廣泛的認可,你可以相信它的水平;
* gltf目前最新版本為2.0已於2023年6月正式發布。
從邏輯的角度,它包含所有常用的、必須的資料:
* gltf包括場景定義資料,它使用scenegraph,也就是乙個樹來定義場景;場景中的節點包含transform矩陣(也就是位置、旋轉、縮放)、父子關係的描述,以及包含的功能(mesh、camera等);
* 包含mesh和skin資料,通過它們你可以載入靜態模型和骨骼模型;
* 包含動畫資料,通過定義場景中節點的運動來定義動畫,這些節點可以用來組成骨架結構(skeleton),也可以直接控制節點中的mesh做剛體運動;
* 包含morph target(也稱作blend shape)模型動畫資料;
* 包含材質定義;在gltf 1.0中,包含乙個technique的定義,相對於unity3d中的shaderlab,或者d3d中的effect檔案;
gltf標準所定義的上述資料,從物理結構上了由以下幾個檔案組成:
* 乙個json文字檔案,作為整個標準的核心,描述場景結構,資料對應關係等;
* 乙個二進位制檔案,用來儲存vertex buffer、index buffer等,這些資料可以直接通過opengl或者webgl api直接上傳到顯示驅動,無需再做解析和轉換;
* 還包含所引用的shader檔案、貼**件等;
通過上面的簡單介紹,你可能對於gltf已經比較糊塗了,哈哈,因為我也沒打算三兩句把它說清楚。我將通過一系列文章講述gltf的各方面的資料是如何組織的,以及如果通過圖形api去實現整個gltf定義的場景的渲染。完整掌握了這些知識,你自己動手實現乙個基本的3d渲染引擎應該是可以的。 :smile:
3D引擎資料結構與glTF 4 BIN
gltf 是一種面向實時渲染的內容標準格式,類似於頂點緩衝 index 緩衝這些資料它會以乙個二進位制檔案的形式儲存,這樣,應用程式載入 gltf 內容時就可以把這些 buffer 直接傳遞到圖形api,而不需要再對它們進行解析或者轉換,從而達到高效的目的。前面幾章我們主要是講 gltf 檔案中的 ...
3D遊戲引擎設計與實現(3)
經過幾天編寫,3d遊戲引擎的架構 大體架構已經搭好。下面來每個模組說明 l 引導程式 engine mm3dmain.exe l dll管理模組 engine bin mm3drun.dll l 引擎管理模組 engine bin mm3dengine.dll l ui模組 engine bin m...
3D體素引擎與Ken Silverman
在ken silverman 的主頁上看其自傳 http advsys.net ken 你會發現你又看到了乙個約翰 卡馬克,就跟 doom 啟示錄 裡寫的差不多,ken silverman 自幼熱愛程式設計,不喜歡上大學,計算機知識全是自學,還是個屁孩就開始賣遊戲賺錢,還沒畢業就全職給apogee寫...