1. 程式人生 > >3D引擎資料結構與glTF(1):簡介

3D引擎資料結構與glTF(1):簡介

不是有句老話講“程式 = 演算法 + 資料結構”嘛,對於3D引擎來說也是這樣。學習和掌握3D引擎中的核心資料有哪些,它們直接的關係是怎樣等等問題,對於理解3D引擎的架構和圖形渲染關係都有著非常大的幫助。然而,現在的商業3D引擎非常複雜,想要通過學習其原始碼嘛非常困難,那麼你就這樣放棄了嗎? :wink: 我們需要一個合適的方式切入。

那麼,什麼是glTF呢

直接去研讀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;
* 作為一個標準,自2015年10月釋出(glTF 1.0)以來,已經得到了業界廣泛的認可,你可以相信它的水平;
* glTF目前最新版本為2.0已於2017年6月正式釋出。

glTF都包含哪些資料

從邏輯的角度,它包含所有常用的、必須的資料:
* 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:

  • 請微信掃碼關注公眾號“遊戲程式設計師的自我修養”
    BANNER

參考資料