Zkratka proGraphics Language Transmission Formatdží-el-tí-ef, hovorově „glitf“TakéGL Transmission Format, glb, gltf 2.0Pokročilý

Definice

glTF je otevřený formát konsorcia Khronos Group pro přenos a načítání 3D scén a modelů. Popisuje geometrii, materiály, textury, animace i kostru v JSON struktuře doplněné o binární buffery, jejichž rozložení odpovídá tomu, co grafické API očekává. Díky tomu se scéna nahraje do GPU s minimem dodatečného zpracování.

Kategorie: 3D designAktualizováno
<h2>Proč vznikl další 3D formát</h2> <p>Starší formáty jako OBJ, COLLADA nebo FBX vznikly pro výměnu dat mezi modelovacími nástroji. Uchovávají proto věci, které renderer nepotřebuje (historii úprav, konstrukční křivky, nástrojově specifická rozšíření), a jejich načtení znamená parsování textu a přeskládání dat do podoby vhodné pro GPU. glTF jde opačnou cestou: je to formát doručovací, obdoba toho, čím je JPEG pro fotografii. Cílem je, aby prohlížeč nebo herní engine soubor otevřel a poslal jeho obsah dál bez zbytečné konverze.</p> <h2>Z čeho se soubor skládá</h2> <p>Kostrou glTF je JSON dokument s poli jako <code>scenes</code>, <code>nodes</code>, <code>meshes</code>, <code>materials</code>, <code>animations</code> a <code>skins</code>. Uzly tvoří strom transformací, mesh odkazuje na <em>accessory</em> (accessors), ty na <em>bufferViews</em> a ty na binární <em>buffer</em>. Accessor říká, že v daném úseku paměti leží například 12 480 položek typu VEC3 ve float32: přesně ta informace, kterou potřebuje volání pro nahrání vertex bufferu. Vlastní čísla vrcholů, normál, <a href="/slovnik/uv-mapovani">UV souřadnic</a> i indexů jsou binární, nikdy ne text.</p> <p>Formát má dvě podoby. Varianta <code>.gltf</code> je čitelný JSON, který odkazuje na externí <code>.bin</code> a obrázkové soubory. Varianta <code>.glb</code> balí JSON i všechny binární chunky do jediného souboru: pro web je to obvykle lepší volba, protože odpadnou další HTTP požadavky.</p> <h2>Materiály a předvídatelný vzhled</h2> <p>glTF 2.0 předepisuje fyzikálně založený model materiálu metallic-roughness. Základní barva, kovovost, drsnost, normálová mapa, okluze a emise mají jasně definovaný význam a barevný prostor. To je zásadní rozdíl proti FBX, kde se materiály mezi programy překládají odhadem. Pokud renderer specifikaci dodrží, vypadá <a href="/slovnik/textura">otexturovaný</a> model v Blenderu, v prohlížeči i v mobilní aplikaci prakticky stejně. Další vlastnosti (průhlednost, čirý lak, anizotropie) přidávají oficiální rozšíření s prefixem <code>KHR_</code>.</p> <h2>Animace a kostra</h2> <p>Animace v glTF jsou sady kanálů: každý kanál míří na jeden uzel a jednu vlastnost (translace, rotace, škála, morph váhy) a čte klíčové snímky z accessoru. Skeletální animace se řeší přes <code>skins</code>, kde jsou uloženy inverzní vazebné matice a odkazy na uzly kostí. Kompletní <a href="/slovnik/rigging">rig</a> z modelovacího nástroje se do formátu nevejde: constrainty, IK řetězce ani ovladače se neexportují, přenáší se až výsledné transformace kostí.</p> <h2>Co formát řeší a co nechává na jiných</h2> <p>glTF nepopisuje editovatelnou scénu ani produkční pipeline: není to náhrada za USD, Blend soubor nebo projektový formát enginu. Nemá ani vlastní kompresi geometrie v jádru specifikace, ta přichází přes rozšíření <code>KHR_draco_mesh_compression</code> a <code>EXT_meshopt_compression</code>; textury se komprimují přes <code>KHR_texture_basisu</code> do formátu čitelného přímo GPU. V praxi se tak glTF používá jako poslední článek řetězce: autoring v Blenderu nebo Maye, export, optimalizace a teprve pak doručení do <a href="/slovnik/polygonalni-sit">webového rendereru</a>, AR náhledu nebo konfigurátoru produktu.</p>

Příklady z praxe

  1. Konfigurátor bot v e-shopu

    Prodejce chce ukázat botu ve 360° náhledu přímo v prohlížeči. Model se v Blenderu vyexportuje do .glb, textury se převedou přes KHR_texture_basisu a geometrie se protáhne meshoptem. Výsledný soubor má kolem dvou megabajtů a načte se přes three.js nebo webovou komponentu model-viewer bez pluginu.

    <model-viewer
      src="/models/bota.glb"
      camera-controls
      shadow-intensity="1"
      alt="3D model boty">
    </model-viewer>
  2. Kontrola exportu v JSON hlavičce

    Po exportu je užitečné se do .gltf souboru podívat, protože struktura je čitelný JSON. Z pole accessors se hned pozná, kolik vrcholů model má, jestli obsahuje druhou UV sadu pro lightmapu a jaké komponentní typy se použily. Chybějící atribut TEXCOORD_1 vysvětlí, proč se v enginu nezobrazuje zapečené osvětlení.

    "meshes": [{
      "primitives": [{
        "attributes": {
          "POSITION": 0,
          "NORMAL": 1,
          "TEXCOORD_0": 2
        },
        "indices": 3,
        "material": 0
      }]
    }]

Časté omyly

MýtusglTF je komprimovaný formát, proto jsou soubory malé.
Ve skutečnostiZákladní specifikace žádnou kompresi geometrie neobsahuje: nekomprimovaný .glb může být větší než odpovídající FBX. Zmenšení přináší až rozšíření jako Draco, meshopt nebo Basis Universal pro textury, která musí podporovat i cílový renderer.
MýtusKdyž model vyexportuji do glTF, přenesu i celý rig a materiálový uzlový strom.
Ve skutečnostiglTF přenáší jen výsledné transformace kostí a materiál podle modelu metallic-roughness. Constrainty, IK, ovladače ani procedurální shader nody se neexportují, složité materiály je nutné zapéct do textur.
MýtusglTF a USD dělají totéž, stačí si vybrat.
Ve skutečnostiglTF je doručovací formát optimalizovaný pro rychlé načtení hotové scény, zatímco USD je navrženo pro produkční pipeline s vrstvením, referencemi a nedestruktivními úpravami. V praxi se často kombinují: USD v produkci, glTF na výstupu.

Časté dotazy

Kdy zvolit .glb místo .gltf?
Varianta .glb se hodí všude, kde model putuje po síti nebo se předává jako jeden artefakt: web, AR náhled, sdílení mezi týmy. Sbalí JSON, binární buffery i textury do jednoho souboru, takže odpadají další HTTP požadavky a nemůže se stát, že se ztratí externí .bin. Textovou variantu .gltf má smysl použít při ladění, když chcete strukturu číst nebo upravovat ručně, případně když více modelů sdílí stejné textury a nechcete je duplikovat.
Podporují glTF všechny prohlížeče nativně?
glTF není součástí prohlížeče podobně jako obrázek: prohlížeč ho sám nevykreslí. Zobrazení zajišťuje JavaScriptová knihovna nad WebGL nebo WebGPU, typicky three.js, Babylon.js nebo webová komponenta model-viewer. Podpora je tedy prakticky univerzální ve smyslu, že tyto knihovny běží ve všech moderních prohlížečích, ale vždy je potřeba nějaký renderer. Operační systémy jdou vlastní cestou: iOS pro rychlý AR náhled používá USDZ, takže pro Apple zařízení se z glTF často generuje ještě USDZ varianta.
Jak zmenšit velikost glTF modelu pro web?
Zmenšení glTF modelu má tři páky. Geometrii lze zkomprimovat rozšířením KHR_draco_mesh_compression nebo EXT_meshopt_compression, přičemž meshopt bývá rychlejší na dekódování. Textury, které tvoří obvykle většinu objemu, se převádějí přes KHR_texture_basisu do GPU formátu, který se nemusí dekomprimovat do RAM. Třetí pákou je samotný obsah: snížení počtu polygonů, sloučení materiálů do atlasu a odstranění nepoužitých UV sad. Nástroje jako gltf-transform nebo gltfpack tyto kroky zvládnou dávkově.
Umí glTF uložit celou scénu včetně světel a kamer?
glTF ukládá hierarchii uzlů, kamery a přes rozšíření KHR_lights_punctual také bodová, směrová a kuželová světla. Prostředí ve smyslu HDRI mapy pro obrazové osvětlení ale součástí jádra specifikace není a řeší se na straně rendereru nebo dalším rozšířením. Formát rovněž nepopisuje logiku scény: skripty, fyziku, kolizní tvary ani interakci. Ty zůstávají na enginu, do kterého se model načte.

Zdroje

  1. glTF Overview(otevře se v novém okně)Khronos Group
  2. glTF 2.0 Specification(otevře se v novém okně)Khronos Group, 2021
  3. Khronos glTF Registry(otevře se v novém okně)Khronos Group
  4. glTF(otevře se v novém okně)Wikipedia

Související pojmy

Potřebujete to vyřešit v praxi?

Poradíme, jak na to ve vašem projektu

Vysvětlit pojem je jedna věc, navrhnout kolem něj funkční řešení druhá. Ozvěte se a probereme, co dává smysl u vás.