GLTF教程翻译
GLTF教程翻譯
- 1. 使用WebGL介紹GLTF
- 2. GLTF的基本結(jié)構(gòu)
- 2.1 GLTF核心
- 2.2 對(duì)外部數(shù)據(jù)的引用
- 參考
本教程介紹了GLTF,GL傳輸格式。它總結(jié)了GLTF最重要的特征和應(yīng)用案例,并描述了與GLTF相關(guān)的文件的結(jié)構(gòu)。它解釋了如何讀取,處理,并用于有效地顯示GLTF assets中的3D圖形。
另外需要了解JSON的一些基本知識(shí),JavaScript對(duì)象表示法。此外,需要對(duì)常用圖形API(如OpenGL或WebGL)的基本了解。本教程專注于GLTF 2.0版,其中介紹了對(duì)物理上基于渲染的支持,但此處解釋的其他概念類似于它們?cè)贕LTF版本1.0中實(shí)現(xiàn)的方式。
1. 使用WebGL介紹GLTF
越來越多的應(yīng)用程序和服務(wù)基于3D內(nèi)容。網(wǎng)上商店提供帶3D預(yù)覽的產(chǎn)品配置器。博物館用3D掃描將文物數(shù)字化,讓游客探索虛擬畫廊的集合。城市規(guī)劃師使用3D城市模型進(jìn)行規(guī)劃和信息可視化。教育工作者創(chuàng)建人體的交互式動(dòng)畫3D模型。許多這些應(yīng)用程序直接在Web瀏覽器中運(yùn)行,這是可能的,因?yàn)樗鞋F(xiàn)代瀏覽器都支持使用WebGL的高效渲染。
GLTF是3D場(chǎng)景傳輸格式的定義:
- 使用JSON描述了場(chǎng)景結(jié)構(gòu),這非常緊湊,可以輕松解析。
- 對(duì)象的3D數(shù)據(jù)以可由公共圖形API直接使用的形式存儲(chǔ),因此沒有用于解碼或預(yù)處理3D數(shù)據(jù)的開銷。
- GLTF可能有助于彌合內(nèi)容創(chuàng)建和渲染之間的差距
2. GLTF的基本結(jié)構(gòu)
2.1 GLTF核心
GLTF的核心是JSON文件,此文件描述了3D場(chǎng)景的整個(gè)內(nèi)容。它由場(chǎng)景結(jié)構(gòu)本身的描述組成,其由定義場(chǎng)景圖的節(jié)點(diǎn)的層次提供。 場(chǎng)景中出現(xiàn)的3D對(duì)象是使用連接到節(jié)點(diǎn)的網(wǎng)格定義的。材料定義對(duì)象的外觀。動(dòng)畫描述3D對(duì)象如何隨著時(shí)間的推移轉(zhuǎn)換3D對(duì)象(例如,旋轉(zhuǎn)到轉(zhuǎn)換),并且Skins定義了對(duì)物體的幾何形狀的方式基于骨架姿勢(shì)變形。攝像機(jī)描述了渲染器的視圖配置。
JSON結(jié)構(gòu)
“meshes” :
[
{ … }
{ … }
…
],
場(chǎng)景對(duì)象 Mesh 存儲(chǔ)在JSON文件中的數(shù)組中。可以使用數(shù)組中的相應(yīng)對(duì)象的下標(biāo)索引訪問它們:
“nodes”:
[
{ “mesh”: 0, … },
{ “mesh”: 5, … },
…
}
這些 Nodes 也用于定義對(duì)象之間的關(guān)系。上面的示例定義了多個(gè)網(wǎng)格,并且節(jié)點(diǎn)可以使用網(wǎng)格索引指示這些網(wǎng)格中的一個(gè),以指示網(wǎng)格應(yīng)該附加到此節(jié)點(diǎn):
以下圖像(從GLTF概念部分調(diào)整)概述了GLTF資產(chǎn)的JSON部分的頂級(jí)元素:
以上元素概括描述如下:
- scene 是存儲(chǔ)在GLTF中的場(chǎng)景描述的入口點(diǎn)。它指的是定義場(chǎng)景圖的節(jié)點(diǎn)。
- node 是scene 圖層次結(jié)構(gòu)中的一個(gè)節(jié)點(diǎn)。它可以包含變換(例如,旋轉(zhuǎn)或平移),并且它可以參考進(jìn)一步(兒童)節(jié)點(diǎn)。另外,它可以指的是“連接”到節(jié)點(diǎn)的網(wǎng)狀或相機(jī)實(shí)例camera,或者對(duì)描述網(wǎng)格變形的皮膚skin。
- camera 定義了呈現(xiàn)場(chǎng)景的視圖配置。
- mesh 描述了一個(gè)出現(xiàn)在場(chǎng)景中的幾何對(duì)象。它是指用于訪問實(shí)際幾何數(shù)據(jù)的訪問器對(duì)象accessor,以及在渲染時(shí)定義對(duì)象外觀的材料material。
- skin 定義了頂點(diǎn)皮膚所需的參數(shù),這允許基于虛擬字符的姿勢(shì)對(duì)網(wǎng)格的變形animation。這些參數(shù)的值是從訪問器獲得的。
- animation 描述某些節(jié)點(diǎn)的轉(zhuǎn)換如何隨時(shí)間變化的節(jié)點(diǎn)(例如,旋轉(zhuǎn)或平移)。
- accessor 用作任意數(shù)據(jù)的抽象來源。它由網(wǎng)格mesh,皮膚skin和動(dòng)畫animation使用,并提供幾何數(shù)據(jù),皮膚參數(shù)和時(shí)間相關(guān)的動(dòng)畫值。它指的是bufferView緩沖器,是包含實(shí)際原始二進(jìn)制數(shù)據(jù)的緩沖區(qū)buffer的一部分。
- materail 包含定義對(duì)象外觀的參數(shù)。它通常是指將應(yīng)用于渲染的幾何體的紋理對(duì)象。
- texture 紋理由采樣器和圖像定義。采樣器定義了如何將紋理圖像放在對(duì)象上。
2.2 對(duì)外部數(shù)據(jù)的引用
二進(jìn)制數(shù)據(jù)binary,如幾何和3D對(duì)象的紋理texture,通常不包含在JSON文件中。相反,它們存儲(chǔ)在專用文件中,json部分僅包含與這些文件的鏈接。這允許二進(jìn)制數(shù)據(jù)以非常緊湊的形式存儲(chǔ),并且可以在網(wǎng)上有效地傳輸。另外,數(shù)據(jù)可以以可直接在渲染器中直接使用的格式存儲(chǔ),而無需解析,解碼或預(yù)處理數(shù)據(jù)。
二進(jìn)制數(shù)據(jù)只是從緩沖區(qū)的URI讀取的原始內(nèi)存塊,沒有固有的含義或結(jié)構(gòu)。緩沖區(qū)buffer,緩沖器bufferView 和訪問者accessor 部分將顯示如何使用有關(guān)數(shù)據(jù)類型和數(shù)據(jù)布局的信息來擴(kuò)展該原始數(shù)據(jù)。利用該信息,數(shù)據(jù)的一部分可以被解釋為動(dòng)畫數(shù)據(jù),另一部分可以被解釋為幾何數(shù)據(jù)。以二進(jìn)制形式存儲(chǔ)數(shù)據(jù)允許它比JSON格式更有效地將其傳輸?shù)絎eb上,并且二進(jìn)制數(shù)據(jù)可以直接傳遞給渲染器bufferView,而無需解碼或預(yù)處理它。
參考
- https://github.com/KhronosGroup/glTF-Tutorials/blob/master/gltfTutorial/gltfTutorial_001_Introduction.md
總結(jié)
- 上一篇: 使用Python,OpenCV进行图像哈
- 下一篇: IDEA配置NodeJS项目遇到问题及解