Skip navigation

Geometria mentés és exportálás

Blender mentés és exportálás

Mentés/betöltés

A Blender a munkánkat saját .blend formátumában menti el. A mentés és betöltés funkciók a Blender menü ablak File menüjében találhatók. Figyeljünk arra, hogy mentéskor az előzmények listája nem kerül kiírásra! Vagyis visszatöltés után az Undo funkció nem tud visszább lépni a szerkesztésben!

Export/import

Számos formátum használatos 3D modellek, animációk platformfüggetlen tárolására. A Blender alapértelmezetten támogat ezek közül többet is. Ezek az Export (kiírás) és Import (betöltés) menüpontok a File menüben. Figyeljünk arra, hogy az egyes formátumokhoz kapcsolódóan egyedi paneleken keresztül szabályozhatjuk, milyen adat és hogyan íródjon ki.

Wavefront OBJ exportálás

A Blender alapértelmezett exportáló funkciói közül a Wavefront OBJ-t választjuk. Ez egy egyszerű szöveges formátum, amely a geometriát (.obj kiterjesztés) és az anyagok leírását (.mtl) külön fájlban tárolja. A geometria fájl hivatkozik az anyag fájl nevére, azoknak ugyanazon mappában kell szerepelniük!

A panelen az alábbi opciók legyenek beállítva (Include, Transform, Geometry szekciókban):

  • Objects as OBJ Objects
  • Forward: -Z Forward
  • Up: Y Up
  • Apply Modifiers
  • Write Normals
  • Include UVs
  • Write Materials
  • Triangulate Faces

A Triangulate Faces kivételével általában ezek az alapértelmezettek.

Wavefront OBJ beolvasás Three.js-ben

A külső fájlban tárolt információk beolvasásához az aszinkron betöltés menetével kell tisztában lennünk. Erről külön fejezetben olvashatunk.

A betöltésre példát a 05_01_ThreeJsBlenderGeometry példaprogramban találunk. 

A modulunkban a loader() függvényt hívjuk, vagyis most nem a modellezés inicializálását indítjuk az oldal betöltődése után először, hanem a geometria betöltőt.

Szükségünk lesz egy globális változóra, ami a betöltött objektumot reprezentálja és a modellezés további részében ezen keresztül elérhetjük.

let meshLoaded;

loader() függvényben készítünk egy OBJLoader betöltő objektumot, amely a Wavefront OBJ formátumú fájlok betöltését végzi. Az .obj és .mtl fájlok tartalmából az OBJLoader beolvasó egy THREE.Group objektumot készít, ami THREE.Mesh objektumok egy csoportját tartalmazza gyermek objektumként. Ezzel az objektummal a geometriai transzformációknál fogunk részletesebben megismerkedni. Ezt a csoport objektumot közvetlenül hozzáadhatjuk a színtérhez. A példakódban egy meshLoaded nevű globális változóba mentjük el a tartalmát.

Ha hozzá szeretnénk férni a csoport objektumban leírt Mesh-ekhez, akkor végig kell járnunk a gyermek objektumait. A példában a betöltött Mesh geometriák (a példában csak egy objektum van a csoportban, de a megoldás tetszőlegesre számúra is működik) anyag objektumánál állítjuk be új Lambert anyagot kétoldalas megjelenítéssel. A megfelelő méretű megjelenítéshez egy négyszeres nagyítást adunk meg a modellhez a scale attribútumok beállításával. A sikeres betöltés után hívjuk meg az init() függvényt a modellezés indítására.

A Blender-ben beállított anyagok és textúrák átvételét egy későbbi részben mutatjuk be.

function loader() {
let loader = new THREE.OBJLoader();
loader.load(
// Forrás URL
'assets/models/csonak.obj',

// Modell betöltése utáni függvény
function ( loaded ) {

meshLoaded = loaded;
meshLoaded.scale.set( 4, 4, 4 );

// Anyag hozzárendelés
meshLoaded.traverse( function ( child ) {

if ( child instanceof THREE.Mesh ) {
mat = new THREE.MeshLambertMaterial( {color: 0x2080f0, side: THREE.DoubleSide} );
child.material = mat;

}
} );

init();
},
// Betöltés előrehaladása közben hívódik
function ( xhr ) {

console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );
},
// Hibás betöltés esetén
function ( error ) {

console.log( 'An error happened' );
});
}

Three.js OBJ beolvasási probléma

A Three.js OBJ export objektuma hibásan működik, ha az OBJ fájlban vonal geometria is definiálásra kerül. Ekkor minden háromszög lapot is drótvázasként jelenít meg. Ha ezt tapasztaljuk, akkor az alábbi módon javíthatjuk.

  • Ha az OBJ a Blender-ből került exportálásra, akkor próbáljuk megkeresni a Blender-ben a vonal geometriákat és töröljük őket a színtérből exportálás előtt. Ez nem feltétlenül egyszerű feladat, különösen nagy méretű modell esetén.
  • Töröljük az exportált OBJ fájlból az "l " (kis L (mint line angolul) + szóköz) kezdetű sorokat, amelyek a vonal geometriákat definiálják. Az OBJ szöveges formátum, egyszerű szövegszerkesztővel, vagy akár a WebStorm-mal is megnyitható. Ennek a megoldásnak a hátránya, hogy minden új exportálás után el kell végezni.

A megoldást az Errors_02_Blender_Extra_vonalak.mkv videó mutatja be részletesebben.

Felszínmodell adatbázisok

További 3D felszínháló modelleket találhatunk számos helyen az interneten.

  • Sketchfab: https://sketchfab.com/. 3D modellek közzététele, megtekintése, letöltése, megvásárlása. A letölthető modellek az Explore / Downloadable menüpontban szűrhetők.