ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE FAKULTA STAVEBNÍ OBOR GEODÉZIE A KARTOGRAFIE KATEDRA MAPOVÁNÍ A KARTOGRAFIE
Publikace 3D modelů na webu – jazyk VRML semestrální práce
Martina Faltýnová Zdeněk Jankovský
V Praze dne 22. 5. 2008
Kartografická polygrafie a reprografie
Úvod Tato práce si dává za úkol seznámit čtenáře s problematikou tvorby a publikace 3D modelů na webu za použití jazyka VRML. Cílem autorů je popsat způsob zápisu objektů, strukturu a možnosti jazyka VRML tak, aby si čtenář mohl utvořit představu o tomto jazyku, ne ho ovládnout (což na tak malém prostoru samozřejmě není možné).
1
Jazyk VRML
VRML, neboli Virtual Reality Modeling Language je jazyk určený pro popis trojrozměrných scén obsahujících aktivní i pasivní objekty, použité například v aplikacích virtuální reality a k jejich publikaci na webu. VRML se však postupem času stal i formátem často používaným pro přenos trojrozměrných dat mezi různými aplikacemi. Tento jazyk je mimochodem definován i normou ISO.
2
Formáty pro zápis 3D modelů
VRML samozřejmě není jediný formát (či jazyk) této kategorie, dnes se například poměrně razantním způsobem prosazuje formát X3D, který lze chápat jako ideového nástupce VRML a v minulosti si prakticky každá firma vytvářející 3D aplikace navrhla vlastní formát, ovšem doposud se z grafických formátů a deklarativních jazyků určených pro popis virtuální reality nejvíce rozšířil právě jazyk VRML.
3
Popis prostorových těles ve VRML
Prostorová tělesa lze v tomto formátu popsat pomocí seznamu souřadnic vrcholů a plochami specifikovanými indexy svých vrcholů do seznamu vrcholů – ve skutečnosti se jedná o poměrně úsporný způsob zápisu, především v porovnání s přímým zápisem vrcholů polygonů (většinou jsou vrcholy a hrany společné pro více polygonů). Pro základní geometrická tělesa, mezi něž patří krychle, koule, kužel apod., i pro objekt typu text jsou definována vlastní klíčová slova reprezentující uzly modelu, takže je není nutné rozkládat na trojúhelníky, což by bylo prostorově náročné a při přenosu modelů po Internetu i pomalé. Rozklad na trojúhelníky je ponechán na prohlížeči VRML. Také je podporováno texturování, tělesa lze dokonce potáhnout texturou uloženou ve formě videa.
1
3.1
Struktura
Tento formát ideově vychází z formátu používaného v Open Inventoru, takže je možné tvořit hierarchické stromové struktury těles a měnit vlastnosti (transformace, barvu, texturu apod.) pro každou větev stromu zvlášť. Zvláště výhodná je tato reprezentace při interaktivní změně některých parametrů, například posunu celého složitého modelu. V nových verzích tohoto formátu, konkrétně od VRML 2.0, je dokonce možné specifikovat animace a programovat reakce na různé události, takže se z na první pohled běžného souborového formátu stává celá platforma pro virtuální realitu. Soubory typu VRML, jež mají většinou koncovku .wrl (popř. po komprimaci koncovku .wgz ), jsou textové, takže je možné je upravovat běžnými textovými editory, posílat je přes filtry, spojit více souborů (a tím i reprezentovaných modelů) do jednoho (s vymazáním hlaviček druhého či dalšího připojovaného souboru) atd. Samotný export do VRML je velmi jednoduchý, proto se z tohoto formátu stává prostředek pro komunikaci mezi různými 3D editory, renderovacími programy a prohlížeči 3D modelů.
3.2
Zápis prostorové scény
Ve VRML je celá trojrozměrná scéna popsaná pomocí objektů, které jsou hierarchicky uspořádány ve stromové struktuře. V tomto ohledu se VRML podobá již zmiňovanému Open Inventoru. Ukazuje se, že stromová struktura je pro popis 2D i 3D scén ideální, protože se možné jednoduše manipulovat jak s jednotlivými objekty, tak i s celými skupinami objektů. Představme si například jednoduchý model auta. Ten se bude skládat z pěti objektů – čtyř kol a karoserie. Pro některé operace je vhodné uvažovat o autu jako o samostatném a nedělitelném objektu (posun auta ve scéně, zatáčení, řešení kolizí apod.), ovšem pro operace jiné například potřebujeme manipulovat s jednotlivými koly (otáčení). Pomocí stromové struktury lze tuto hierarchii vytvořit velmi jednoduše. Pro operace, které pracují s objekty vybíranými na základě jiných kritérií, než je jejich hierarchie, lze použít pojmenování objektů. Samotný formát souborů uložených ve VRML je založen na textovém popisu scény. Ve VRML 1.0 se texty zapisují pomocí ASCII kódování, ale v dalších verzích je již možné použít populární kódování UTF-8. Na prvním řádku souboru se nachází hlavička začínající znakem # (což je ve všech ostatních řádcích počáteční znak poznámky), za kterým následuje verze VRML a způsob kódování. Pokud se vám poštěstí narazit na soubory určené pro Open Inventor (například jde o výstup z 3D skenerů Minolta Vivid), které nelze v běžných prohlížečích zobrazit, většinou pomůže přepis prvního řádku na sekvenci #VRML V1.0 ascii, protože jinak se tyto soubory s velikou pravděpodobností nebudou lišit. Celá stromová struktura 3D scény je reprezentovaná uzly zapisovanými způsobem jméno_uzlu {vnitřní obsah}. Uvnitř uzlu se samozřejmě mohou nacházet další uzly a také atributy uzlů, což jsou číselné, řetězcové, pravdivostní a další hodnoty, které určují například tvar objektů. Pomocí uzlu pojmenovaného příhodně Separator a Group lze uzly sdružovat. Následuje příklad zápisu scény: #VRML V1.0 ascii Separator { DirectionalLight { # nastavení osvětlení direction 0 0 -1 }
2
PerspectiveCamera { # nastavení pozorovatele (kamery) position -8.6 2.1 5.6 orientation -0.1352 -0.9831 -0.1233 1.1417 focalDistance 10.84 } Separator { # červená koule Material { diffuseColor 1 0 0 } Translation { translation 3 0 1 } Sphere { radius 2.3 } } Separator { # zelená krychle Material { diffuseColor 0 0 1 } Transform { translation -2.4 .2 1 # posun podle zadanych souradnic [m] rotation 0 1 1 .9 #rotace podle dvou os o .9 radianu } Cube {} #pro krychli bude zvolena výchozí velikost } }
3.3
Datové typy definované ve VRML 1.0
Při zápisu atributů objektů (3D modelů, světel, kamery apod.) nebo celých skupin objektů se používá několik datových typů. Ve VRML 1.0 je možné pracovat celkem se šestnácti datovými typy, přičemž každý typ atributu vyžaduje jiný datový typ; například nemá smysl popisovat rotaci bool hodnotou nebo jednoduchý atribut, zda válec obsahuje podstavu, zapisovat místo bool hodnoty maticí či vektorem. Datové typy podporované ve VRML 1.0 jsou vypsány v následující tabulce. Názvy typů proměnných by se daly shrnout do těchto pravidel: SF. . . značí typ proměnné pouze o jedné hodnotě typu z konce názvu: SFLong – jendno číslo typu Long, MF. . . značí MultiField – pole o více hodnotách nějakého typu: MFColor – pole hodnot více barev (to nevylučuje, že proměnná typu Color se neskládá z více číselných hodnot. . . ). 3
Označení SFBitMask
pouze hodnoty 0 a 1
SFBool
hodnoty true a false
SFColor
zápis barvy ve formátu RGB
SFEnum
interně se jedná o celé číslo
SFFloat
IEEE float
SFImage SFLong
pixmapa celočíselná hodnota
SFMatrix
matice (většinou transformační)
SFRotation
rotace zadaná čtyřmi hodnotami
SFString
3.4
Poznámka
ve VRML 1.0 většinou ASCII
SFVec2f
2D vektor
SFVec3f
3D vektor
MFColor
vektor více barev
MFLong
vektor více celočíselných hodnot
MFVec2f
vektor 2D vektorů
MFVec3f
vektor 3D vektorů
Typy uzlů definované ve VRML 1.0
Ve VRML 1.0 je definováno celkem 36 typů uzlů, které je možné rozdělit do několika skupin. V první skupině se nachází uzly, které slouží především pro popis geometrie objektů, tj. jejich povrchu (pro mnoho aplikací jsou důležité právě tyto informace). Druhá skupina slouží pro úpravu vlastností objektů či textur. Ve třetí skupině se nachází uzly, pomocí nichž se popisují transformace, čtvrtá skupina obsahuje dva typy uzlů pro vytváření kamer (pozorovatelů) a pátá skupina obsahuje uzly určené pro definici světelných zdrojů. Do další skupiny patří uzly, pomocí nichž se 3D scéna utváří do stromové struktury a konečně je v poslední skupině pouze jeden typ uzlu pro vytvoření hypertextových odkazů a jejich cílů. Následuje výpis názvů jednotlivých typů uzlů rozdělených do skupin.
3.5
Typy uzlů definované v dalších verzích
VRML ve své první verzi (1.0) je poměrně chudý jazyk, zejména se to týká způsobu definic objektů, které tvoří aktivní předměty v aplikacích virtuální reality (typickým objektem mohou být dveře, které je možné interaktivně otevírat a zavírat, složitějším objektem pak avatar, tj. objekt představující člověka vstupujícího do virtuální reality). Tyto typy objektů jsou podporovány v dalších verzích jazyka VRML spolu se způsobem definice „spouštěčů událostíÿ neboli senzorů. U výše zmíněných dveří by například stačilo nadefinovat dva senzory – každý by se aktivoval při doteku kliky. Na vnitřní klice by senzor nastartoval animaci otevření dveří a na opačné straně by se naopak spustila animace zavírání dveří. Lze si samozřejmě představit i složitější typy senzor a událostí, které mohou 4
Popis geometrie objektů AsciiText Cone Cube Cylinder IndexedFaceSet IndexedLineSet PointSet Sphere Vlastnosti objektů Coordinate3 FontStyle Info LOD Material MaterialBinding Normal NormalBinding Texture2 Texture2Transform TextureCoordinate2 ShapeHints
Transformace MatrixTransform Rotation Scale Transform Translation Speciální uzel WWWInline Vytvoření pozorovatele (kamery) OrthographicCamera PerspectiveCamera Vytvoření světelného zdroje DirectionalLight PointLight SpotLight Definice hierarchie objektů Group Separator Switch TransformSeparator WWWAnchor
při jejich aktivaci nastat.
4
Prohlížeče VRML
K prohlížení 3D modelů v jazyce VRML na webu je třeba mít nainstalován mimo standardního internetového prohlížeče i prohlížeč VRML. Bezplatně dostupnými prohlížeči jsou například Cortona, BSPlayer.
5
Příklad modelu
Na internetové adrese: http://old.arcdata.cz/igis/ukazky/vrml můžete nalézt ukázku 3D modelu ve formátu VRML, jde o prostředí studentům ČVUT důvěrně známé. Předkládáme několik obrázků pro představu.
5
6
6
VRML na ČVUT, fakultě stavební
Zájemce o prozkoumání a naučení se jazyka VRML je možné odkázat na předměty s názvem 175YVR1 a 175YVR2, vyučované na naší fakultě. V prvním semestru (předmět YVR1) je student seznámem s problematikou virtuální reality obecně. V druhém semestru (předmět YVR2) je poté náplní čistě práce s jazykem VRML. Bližší informace budete moci jistě získat u Ing. Vladimíra Hamaty CSc.
Závěr Jazyk VRML je jeden z nejvhodnějších způsobů tvorby prostorových modelů pro web. Jeho výhodou jsou zejména: • dokument je ve formátu textového souboru, • =⇒ relativně malý datový soubor (standardem je i určeno, že soubor může být komprimován metodou .gz Způsob zápisu jednotlivých uzlů a jejich vlastností je pro začátečníka poněkud komplikovanější. Velmi dobře se při tvorbě souborů .wrl osvědčil editor VrmlPad[9]. Editor je schopný náležitě nabízet uzly použitelné právě na editovaném místě ve stromové struktuře dokumentu. Názvy uzlů zobrazuje v roletovém menu. V editoru je také možné nechat si graficky znázornit strom celé scény, nebo například propojení příkazů ROUTE mezi jednotlivými uzly a mnoho dalších. Editovat dokumenty .wrl bez toho editoru je velmi složité. Jazyk VRML, jak sám má v názvu, je opravdový nástroj virtuální reality. To znamená, že vytváří virtuální svět kde platí jisté fyzikální zákony. Jako je například gravitace, a kolize objektů (avatara s objekty). Tyto vlastnosti běžně nepřinášejí programy typu AutoCAD či MicroStation. Ty umožňují tvorbu animací (průlet kamerou), ale virtuální realita zajištuje možnost mezi objekty procházet (v reálném čase měnit pozici pohledu na virtuální svět), vytvářet objekty pohyblivé (jedoucí aoutomobil) a reagovat na pokyny uživatele (kliknutí myši na objekt, výskyt avatara v uřčeném prostoru – vyvolat akci, pohyb).
7
Literatura [1] Bell, G., Parisi, A., Pesce, M.:The Virtual Reality Modeling Language, Version 1.0 Specification, Silicon Graphics Inc., Intervista Software, 26. 5. 1995 [2] Žára, J., Beneš, B., Felkel, P.:Moderní počítačová grafika, Computer Press, Praha, 1998, ISBN 80-7226-049-9 [3] Zrzavý, J.: VRML, tvorba dokonalých www stránek, podorbný průvodce, Grada Publishing, spol. s. r. o., Praha, 1999 [4] Wikipedia: VRML, přístupné na adrese http://en.wikipedia.org/wiki/Vrml, květen 2008 [5] Wikipedia: Web 3D Consortium, přístupné na adrese http://en.wikipedia.org/wiki/Web3D_Consortium, květen 2008 [6] VRML 97 Specification, přístupné na adrese http://www.web3d.org/x3d/specifications/vrml/ISO-IEC-14772-VRML97/, květen 2008 [7] Root.cz: Seriál Open Inventor, přístupné na adrese http://www.root.cz/serialy/open-inventor, květen 2008 [8] Root.cz: Seriál Grafická knihovna OpenGL, přístupné na adrese http://www.root.cz/serialy/graficka-knihovna-opengl/, květen 2008 [9] Parallel Graphics: VrmlPad, přístupné na adresy http://www.parallelgraphics.com/products/vrmlpad/, květen 2008
8