Manapság viszonylag könnyű elveszni a 3D adatleíró típusok között. Találhatunk bináris és szöveges formátumokat, statikus és animált modelleket leíró változatokat, egyszerű modell leírókat, de akár komplex jelenet leírókat is.
Egyes cégek / szervezetek próbálkoznak "szabványos" formátumok kialakításával, de a leggyakoribb modellezőprogramok saját formátumaival nehezen tudják felvenni a versenyt.
Az ASE formátum szöveges, statikus és animált adatot is tartalmazó jelenetleíró. Ebben a posztban az általam használt, lényeges elemeket emelem ki.
A formátum blokkokra osztja a tartalmat. Egy blokk * karakterrel kezdődik, egy típus jelöléssel folytatódik majd a blokkot egy { ... } páros zárja be. Természetesen a blokkok egymásba ágyazhatók ezzel egy hierarchiát adva a jelenetnek.
*MATERIAL_LIST - nevéből adódik, hogy a materialokat tartalmazza ez a blokk. Ebben szerepelnek *MATERIAL blokkok, amelyek további *SUBMATERIAL blokkokat tartalmazhatnak. A submaterialok külön fejtörést szoktak okozni mivel a gyakorlatban külön materialként szokás őket kezelni. A *MAP_XXXXX blokkok tartalmazzák, hogy hány és milyen textúrákból épül fel az adott material. Többek között itt találjuk a file hivatkozásokat is.
*GEOMOBJECT - ez tárol (legalább?) egy *NODE_TM és *MESH blokkot.
A *NODE_TM számunkra az egyik legizgalmasabb hiszen ez tartalmazza a meshen elvégzett transzformációkat: eltolás (*TM_POS), elforgatás (*TM_ROTAXIS és *TM_ROTANGLE - ez utóbbi radiánban értendő) és skálázás (*TM_SCALE). Az ezekből kiszámolt mátrix inverzével a mesh vertexeit beszorozva visszakapjuk a modellezés kiinduló meshét!
A *MESH blokk tartalmazza a geometriát (*MESH_VERTEX - pozíció, *MESH_TVERTEX - textúra koordináta, *MESH_VERTEXNORMAL - normál vektor) és a topológiát (*MESH_FACE és *MESH_TFACE). Fontos tudni, hogy minden egyes face-hez megadható, hogy az adott material melyik submaterialjét használja!
Engine szempontjából a formátum legnagyobb előnye, hogy transzformálva a *MESH-eket a kiindulási helyzetükbe az azonos mesheket felismerve könnyen megoldhatjuk az instance-olást és a modular level designt.