VRML (Virtual Reality Modeling Language)

© Hannu Natunen 2000


Index

Lyhyt historia
Perusteet
Työasema
Tunnisteet  perusprimitiivit ja kommentti
Vapaamuotoiset kappaleet
Solmut (Nodes)
Värit ja textuurit
Siirto, kierto ja skaalaus
Solmujen monistaminen
Harjoitukset valmiina


Lyhyt historia

VRML ei ole ohjelmointikieli. Se on HTML:n tavoin tulkattava kuvauskieli, jota on pyritty kehittämään mahdollisimman laitteistoriippumattomaksi tavaksi esittää vuorovaikutteisia 3D-mallinnoksia jaettavaksi samanaikaisesti usean käyttäjän kesken.

VRML- kielen määrityksiä kehittämässä oli alkujaan suuri joukko yksittäisiä henkilöitä, yhteisöjä ja yrityksiä, joiden työn tuloksena 26. toukokuuta 1995 valmistui VRML 1.0-kielen lopullinen määrittely ja se standardoitiin. Se syntyi Silicon Graphicsin OpenGL-määrityksiin perustuen muutamassa kuukaudessa.
1.0 standardi oli kielen kehittäjienkin mielestä puutteellinen jo julkaistaessa, mutta standardoinnin myötä kehitystyöhön mukaan haluttiin uusia, vaikutusvaltaisia tahoja.

VRML- kehittäjäjoukko kasvaa ja voimistuu. 20. -23. elokuuta 1995 järjestettiin VRML 1.0:n kehittämisestä kiinnostuneiden tutkijoiden ja kehittäjien tapaaminen jonka seurauksena VRML Architecture Group eli (VAG) perustettiin.

4 maaliskuuta 1996
aikaansaatiin  VRML 2.0 standardi, joka antaa selvästi paremmat mahdollisuudet kappaleiden ja ympäristöjen vuorovaikutteisuuden lisäämiseen.

Näinä aikoina alkunsa sai Moving Worlds-työryhmä, johon kuuluu mm. Silicon Graphics, Black Sun, Intervista Software, Macromedia sekä lukuisa joukko muita yhteisöjä sekä yksityishenkilöitä.
Tällä hetkellä kehitystyön tulos kantaa nimeä VRML 97 ( ISO/IEC 14772-1:1997)

Käyttökohteita alunperin oli ja on edelleen, erilaiset IRC-tyyppiset kohtaamispaikat, joissa käyttäjä voi valita itselleen jonkin virtuaalihahmon. Nämä hahmot voivat sitten kohdata jonkun tahon ylläpitämässä ympäristössä ja vaihtaa kuulumisia. VRML:ää käytetään jonkun verran myös suunnittelussa mallinnuksen apuna.


Perusteet

Kaksiulotteisessa esityksessä, kuten esimerkiksi veb-sivulla, kappaleen sijainti määritellään horisontaali- (vaaka X) ja vertikaali- (pysty Y) -suuntaisesti.
Kolmiulotteisessa mallinnuksessa mukaan otetaan myös syvyysmäärittely (Z). Kappaleen sijainti ja asento tilassa ilmaistaan kolmiulotteisella koordinaatistolla.

Koordinaatit

Kolmiulotteisessa tietokonegrafiikassa, kappaleet ilmaistaan joukkona pisteitä, jotka sijaitsevat koordinaatistossa. Piirto-ohjelma muodostaa viivat näiden pisteiden välille, jolloin  muodostuu rautalankamalli kolmiulotteisesta kappaleesta. Rautalankamallin muodostamat pintamuodot voidaan täyttää RGB-värimäärityksin tai textuuria käyttäen.  Kappaleen kierto ilmoitetaan koodissa asteiden sijaan radiaaneina ja lasketaan vastapäivään.


Työasema

VRML- kieli on "tulkattava", joten työasemaan on asennettava joku , yleensä web-selaimeen liitettävä laajennus, eli plugin. Niitä löytyy joka lähtöön ja kaikissa on hyvät ja huonot puolensa. Ainakin alussa on viisainta ottaa käyttöön laajennus, joka tulkkaa koodin ilman joutavia erikoisuuksia. Tarjolla on nimittäin sellaisiakin, jotka on tarkoitettu käytettäväksi jonkun tietyn vrml-mallintajaa valmistavan yhtiön selaimen kanssa. Hyvä valinta on esim. SGI:n CosmoPlayer. Kielen muokkaamiseen käy mikä tahansa tekstinkäsittelyohjelma, mukaan lukien yksinkertaisimmat ASCII-editorit. (Mac:n SimpleText,  Unix: Pico, Win: WordPad ym.). Kielen tiedostotarkennin on .wrl. Itse koneeltakaan, näytönohjausta lukuunottamatta, ei homma paljoa vaadi. Plugin/selain imaisee kiintolevytilaa säästöliekillä (Cosmo noin 4mt.).
Isoja selainmöykkyjäkin on. Esim. Platinum technologyn Exploreriin tekemä WorldView2.1 (noin13mt.).
Suuri määrä suorittimen uumenissa lymyäviä megahertzejä saa poikkeuksetta tekijän nyökyttämään hyväksyvästi päätään, vaan vähälläkin pärjää. Sensijaan näytönohjain saisi mielellään olla rivakka toimissaan. OpenGl-tuki olisi hyvinkin suotava.

PS. Cosmon laajennuksen ohjeet saat halutessasi näkyviin klikkailemalla panelin vasemmassa alalaidassa olevia kolmioita

Cosmo_ohjeet


Tunnisteet, perusprimitiivit ja kommentti

VRML-kielen avulla voidaan muodostaa joitakin perusmuotoja, primitiivejä, joita yhdistämällä voidaan muodostaa uusia, monimutkaisempia kappaleita. Näitä perusmuotoja kutsutaan primitiiveiksi, ja ne kuuluvat kaikkien mallintajien ja myös kieltä tulkkaavien laajennusten kalustoon. Primitiivit ja niiden yhdistelmät pystytään tuottamaan lopputuloksen kannalta taloudellisesti (pieni tiedostokoko), kun taas vapaamuotoiset kappaleet, (fasetit) aikaansaavat helposti valtaisan tiedoston.

Primitiivit ovat seuraavat:

Box (laatikko/kuutio)
Sphere (pallo/soikio)
Cylinder (sylinteri)
Cone (kartio)

Muotoa ennen tarvitaan tunniste. VRML 2.0 koodi alkaa aina rivillä...

#VRML V2.0 utf8

... josta selain tietää seuraavien rivien sisältävän laajennuksen avulla tulkattavaa kieltä.

tunnisterivin  jälkeen voidaan kommentoida:

#VRML V2.0 utf8
#kommenttirivi alkaa risuaidalla

Yksi perusprimitiiveistä  ilman mitään muotoiluja kirjoitetaan...

#VRML V2.0 utf8
#Rivit luovat kartion
Shape {
    geometry Cone{}
}

...joka muodostaa kartion. Jos muotosolmun  (Shape), sisään kirjoitetaan joku muu primitiivi, muodostetaan kartion tilalle haluttu muoto.

VRML 1.0, 2.0 ja -97 version tiedostotarkennin on .wrl


Vapaamuotoiset kappaleet

Vapaasti muotoiltavien kappaleiden luonti VRML:ssä perustuu fasetteihin eli kolmen tai neljän pisteen ja niitä yhdistävien viivojen muodostamiin kolmioihin ja neliöihin, joita taas yhteisesti nimitetään polygoneiksi eli monikulmioiksi. Kielessä jokaisen fasettipisteen koordinaatit määritellään erikseen (IndexedFaceSet), eli vapaasti suomennettuna LähdeluetteloituNaamaSarja :-).
Tästäpä voi päätellä esimerkiksi muusinuijan, tai hillovasaran mallintamisen olevan suhteellisen helppoa primitiivivejä käyttäen, kun taas vaikkapa käkikello kaikkine yksityiskohtineen ilman mallintajan apua on ylivoimainen homma.

Hyvät 3D-mallinnusohjelmat ovat kalliita, yleensä monimutkaisia käyttää eikä suoraa VRML-tallennusmahdollisuutta useinkaan ole, joten piirto-ohjelmia voi käyttää oikeastaan vain mallinsiirron apuvälineenä. Onneksi kuitenkin ahkerat alan harrastajat ovat vuosien mittaan kehittäneet talkootyönä melkoisen näppäriä "käntäjiä", joilla eri 3D-piirto-ohjelmien tuotoksia voidaan  muokata VRML-koodiksi.
Suora VRML tallennusmahdollisuus on ainakin Autodeskin 3Dmaxissa. AutoCAD:iin sitä on lupailtu jo jonkin aikaa, vaan eipä ole ainakaan R14-versiossa.

Yksi apuväline vapaamuotoisen kappaleen tekoon on Keith Rulen tekemä Crossroads, joka lukee ja kirjoittaa usean piirto-ohjelman tiedostomuotoa esim: 3Dstudion .3ds ja AutoCAD:in .dxf .


Solmut (Nodes)

VRML 2.0 rakenne perustuu solmuihin. Solmu aloitetaan aina tyyppimäärittelyllä, jolla kerrotaan mihin ominaisuuteen halutaan vaikuttaa. Sen jälkeen kirjoitetaan aaltosulkujen { } sisään ominaisuuden arvot. Karkeasti jakaen solmujen päätyypit ovat:

Kokonaisuudet aikaansaadaan yksinkertaisesti sijoittamalla solmuja allekkain. Solmut vaikuttavat koodin loppuun asti jokaiseen myöhempään
solmuun ellei niitä erotella toisistaan esimerkiksi ryhmäsolmulla (Group).  Noin yleensä ottaen solmut voidaan sijoittaa melko vapaavalintaisesti suhteessa toisiinsa. HTML:n tavoin selain lukee koodin ylhäältä alaspäin. Tällä on  merkitystä, jos kopioit yhtä kappaletta moneen paikkaan. Silloin voidaan solmujen sijoittamisella vaikuttaa siihen, mikä kopio näkyy ensimmäisenä.


Värit ja textuurit

Värien määrittely tehdään Material-solmussa ja  perustuu RGB-kanaviin. Osavärit vaihtelevat asteikolla 0-1. Nollalla kanava on kiinni ja ykkösellä täysin auki. Värin ja pinnan ulkonäköön vaikuttavat monet määritykset. Tärkein väriin vaikuttava määritys on diffuse color.
Textuureksi käyvät JPG, GIF ja PNG-kuvat. Sopiva koko suuren pinnan täytöksi on noin 100X100 pixeliä.

Taulukosta löytyvät perusvärejä vastaavat RGB-arvot. Loput sekoittamalla.

R G B  
0 0 0 musta
0.5 0.5 0.5 harmaa
1 1 1 valkoinen
1 0 0 punainen
0 1 0 vihreä
0 0 1 sininen
1 1 0 keltainen

Esim: sininen väri...

Shape {
    appearance    Appearance {
        material    Material {
            diffuseColor     0 0 1
        }
}

Ulkoasun ainoa arvo, sininen värikanava auki

Esim: materiaalina textuuri...

Shape {
    appearance    Appearance {
        material    Material {
            texture ImageTexture {
url "hakemisto/tai/url/jokukuva.jpg"
        }
}

Polku tai viittaus " " väliin


Siirto, kierto ja skaalaus

Siirto, rotaatio ja skaalaus tehdään Transform-solmulla. Määritykseen käytetään kolmea lukua, järjestyksessä X, Y  ja  Z. Tämä lisää koodia, koska kappaleen kuvauksen eteen lisätään children-kenttä . Kentän avulla määritellään, mihin objekteihin muutokset vaikuttavat.
Rotaatiossa ja siirrossa käytetään asteiden sijaan radiaaneja ja kierto lasketaan vastapäivään.

Taulukossa joitakin suuntaa-antavia lukuja. Loput löytyvät kokeilemalla.

Asteluvut Radiaanit
0 0
30 0.175
45 0.785
90 1.571
180 3.142
270 4.712
360 6.283

Solmujen monistaminen

Solmuja voidaan monistaa DEF ja USE avainsanoilla. Kuvantamisvaiheessa VRML-selain kopioi DEF-avainsanalla merkityn objektin Transform-
solmussa määrättyyn paikkaan.

Esim:

#VRML V2.0 utf8
#kartion kopiointi
Transform {
    children    DEF KARTIO Transform {
        children    Shape {
            appearance     Appearance {
                material     Material {
                }
        }

        geometry    Cone {
        }
    }
    translation    0.0294466 -2.08259 0.939986
    scale    0.5 0.5 0.5
}

}
Transform {
    children    USE KARTIO

        translation    -1.17786 0.44273 -0.16114
}

...Kopioi kartion


Harjoitukset ja mallit

Perusmuodoilla tehtävissä harjoituksissa jätskitötterössä käytetään vain kahta perusprimitiiviä, kartiota ja palloa.
Muusinuijassa on lisäksi sylinteri ja muutama kopioimalla muodostettu kartio.

 

Valmiina (ainakin melkein) ne ovat täällä |  Jätski   |  muusinuijan osat  |


| 12.1.2002 |