S-38.116 Teletietotekniikka: seminaariesitelmä 12.2.1997







VRML - Virtual Reality Modeling Language



Jouni Korte, Ti N, 40364k
jones@cc.hut.fi




Sisällysluettelo

1. Lyhenne- ja käsiteluettelo
2. Johdanto
3. VRML - Perusteet
   3.1. VRML 1.0
   3.2. VRML 2.0
4. VRML:n rakenne
   4.1. Solmut
        4.1.1. Ryhmäsolmut
        4.1.2. Lapsisolmut 
   4.2. Prototyypit
   4.3. Tapahtumat ja reitit 
   4.4. Skriptit ja ulkopuolinen ohjaus 
5. Ongelmakohdat
6. Yhteenveto
7. Lähdeluettelo
8. Liite: esimerkki VRML2-tiedostosta

1. Lyhenne- ja käsiteluettelo

HTML            HyperText Markup Language - kuvauskieli, jolla esitetään 
                hypertekstiä World Wide Webissä.
Java            Sun Microsystemsin Internet-ohjelmointiin kehittämä 
                laitteistoriippumaton oliopohjainen ohjelmointikieli. 
Kyberavaruus    monen käyttäjän virtuaalimaailmoja sisältävä tila 
                globaalissa verkossa.
SGI             Silicon Graphics, tietokoneita valmistava suuryritys, joka
                on erikoistunut graafisiin työasemiin. 
URL             Universal Resource Locator - resurssipaikannin.
VAG             VRML Architecture Group - työryhmä, jonka tehtävänä on
                VRML:n kehittäminen
VRML            Virtual Reality Modeling Language - mallinnuskieli kolmi-
                ulotteisille virtuaalimaailmoille.
WWW             World Wide Web - hypertekstijärjestelmä tekstimuotoisen
                sekä audiovisuaalisen informaation esittämiseen. 






2. Johdanto

Vuonna 1989 Tim Berners-Lee, CERN:ssä työskentelevä ohjemistosuunnittelija, kehitti hypermediajärjestelmän, joka nykyisin tunnetaan nimellä WWW. Kuten kaikki tietävät, WWW:n kasvu ja yleistyminen on ollut räjähdysmäistä. Suurin ansio WWW:n suosioon on URL:n tuoma helppous löytää lähes mitä tahansa Internetissä sijaitsevaa tietoa ja HTML:n määrittelemä standardi tapa esittää graafista informaatiota. Vaikka URL-mekanismi onkin kohtalaisen yksinkertainen, siinäkin on kuitenkin parannettavaa. URL-osoitteet eivät ole ihmisen kannalta luonnollista informaatiota, vaan useissa tapauksissa varsin kryptinen merkkijono, jolla on informaatiosisältöä vain koneelle.

Muutamia vuosia sitten tutkimus "aistipohjaisia" käyttöliittymiä kohtaan alkoi saada laajaa huomiota lehdistön ja teollisuuden suunnalta. Laaja skaala tekniikoita, joita on alettu yhteisesti kutsua nimellä keinotodellisuus tai virtuaalitodellisuus, aloitti perustavaa laatua olevan muutoksen käyttöliittymien luonteessa. Muutoksen tarkoituksena on siirtyä ihmiskeskeiseen suunnitteluun siten, että käyttäjää ympäröivästä tilasta tulisi käyttöliittymä koneeseen. Kaiken tämän takana on ajatus tehdä tietokoneista käyttäjäystävällisempiä sen perusperiaatteen pohjalta, että jos asia halutaan mahdollisimman ymmärrettävään muotoon, se tulee esittää "aistein havaittavasti".

Tämän myötä syntyi tarve kehittää menetelmä kolmiulotteisten asioiden esitykseen WWW:ssä ja tuloksena oli VRML.VRML on lyhenne sanoista Virtual Reality Modeling Language, eli vapaasti suomennettuna nimi tarkoittaa keinotodellisuuden mallintamiskieltä. Kielen virallinen määritelmä kuuluu: 

Kieli on siis tehty kuvaamaan monen käyttäjän interaktiivisia simulaatioita, virtuaalimaailmoja, jotka sijaitsevat Internetissä ja jotka on hyperlinkitetty WWW:n yhteyteen. Erään ajatustavan mukaan VRML:n lopullisena päämääränä on luoda infrastruktuuri ja toimintasäännöt kyberavaruudelle.

Tässä esityksessä on tarkoitus antaa yleiskuva VRML:sta, sen toimintaperiaatteista sekä sen tarjoamista mahdollisuuksista.




3. VRML - Perusteet

VRML on erityisesti kolmiulotteisen geometrian kuvauskieli, mutta se sisältää myös ohjelmointikielen ominaisuuksia. Verrattuna kahteen yleisimpään "Web-kieliin" HTML:een ja Javaan, VRML on kielenä huomattavasti monipuolisempi ja laajempi kuin HTML, mutta ei vaadi syvällistä tietämystä ohjelmoinnin alueelta kuten Java. VRML on tulkattava kieli, joten se ei vaadi erillistä käännösvaihetta ja täten VRML-tiedostot ovat kokonaan tekstipohjaisia. VRML:ää tulkkaamaan tarvitaan erillinen selainohjelma, joka yleensä on Web-browserin (lähes aina Netscape) plug-in palikka, mutta myös joitakin itsenäisiä ohjelmia on olemassa. Allaoleva kuva on esimerkki siitä, miltä Web-browseri - VRML-selain yhdistelmä voi näyttää (tässä netscape + SGI cosmo player beta3). Kuvan alaosassa näkyvät kaksi sinistä ikonia (keskimmäiset ikonit) ovat ohjaimet, joiden avulla virtuaalimaailmassa liikutaan. Vasemmanpuoleisella liikutaan eteen, taakse ja kaarros oikealle/vasemmalle. Oikeanpuoleinen taas mahdollistaa liikkeen ylös, alas ja sivuttain.




VRML-maailman resoluutiota ei rajata luontivaiheessa, vaan se skaalautuu vapaasti selainohjelman asetusten mukaan. VRML:lla luodut ympäristöt ovat "aidosti kolmiulotteisia", eli niissä liikkumista ei ole rajoitettu ja erilaisten katselupisteiden määrä ympäristössä on rajaton. Maailman koordinaatisto on karteesinen ja oikeakätinen, projektio positiivisen Z-akselin suuntaan, koordinaatiston yksikkönä on metri. VRML-kielestä on olemassa kaksi versiota, vuonna 1994 julkaistu VRML1.0 ja vuonna 1996 valmiiksi saatu VRML2.0, joka sisältää huomattavia parannuksia ja lisäpiirteitä alkuperäiseen versioon verrattuna.


3.1. VRML 1.0

VRML sai alkunsa vuoden 1994 kansainvälisessä WWW-konfrenssissa Genevessä, jossa kaksi virtuaalitodellisuus-käyttöliittymien parissa työskennellyttä tutkijaa esitteli työnsä tuloksia. Esitys sai todella innostuneen vastaanoton ja kuukauden sisällä konfrenssista oli Internetin kautta perustettu työryhmä ajamaan virtuaalitodellisuuskielen kehitystä. Toteutustavaksi päätettiin määritellä kokonaan uusi standardi, ei siis pelkkä HTML:n laajennus. Kielen pohjaksi valittiin SGI:n Open Inventor tiedostotyyppi, joka oli SGI:n ohjelmistoissa käytetty kolmiulotteisen geometrian esitysformaatti. VRML:sta oli kiire saada jonkinlainen versio valmiiksi, joten päädyttiin ratkaisuun, jossa ensimmäinen versio, siis VRML1.0, olisi minimalistinen lähtökohta paljon suuremmalle kokonaisuudelle. Kieli olisi laajennettavissa ja selaimien teko tällaiselle suppealle kielelle olisi huomattavasti yksinkertaisempaa. VRML1.0 ominaisuuksiksi valittiin:

VRML1.0:n täydellinen määrittely löytyy Internetistä: http://vag.vrml.org/vrml10c.html.


3.2. VRML 2.0

VRML1.0 oli hyvä lähtökohta keinotodellisuuskielelle, mutta sen ominaisuudet rajoittivat interaktion lähinnä tilassa liikkumiseen ja objektien klikkailuun. Kun kieltä oli käytetty niin paljon, että sen käytännön heikkoudet ja puutteet oli saatu selville, julisti VAG, joka oli perustettu kehittämään VRML:ää, avoimen kilpailun ehdotuksista kielen toiseksi standardiksi. Ehdotuksia tulikin useita, esim.

Näistä äänestyksen voitti Moving Worlds, josta siis tuli VRML2.0. Koska tämä tapahtui vasta syksyllä 1996, ei "virallista standardia" ole vielä tämän esityksen kirjoitushetkellä saatu valmiiksi, eräiden tietojen mukaan ISO/IEC CD 14772 standardi valmistuu toukokuussa 1997. VRML2.0:n määrittely löytyy Internetistä: http://vrml.sgi.com/moving-worlds/spec/ .

VRML2.0:lle määriteltiin joukko suunnitteluperusteita, joita ovat mm.

2.0-määrittely toi mukanaan joukon haluttuja uudistuksia. Näistä tärkeimmät ovat

Seuraavassa luvussa käydään tarkemmin läpi kielen toimintaa ja rakennetta. Huomattakoon, että kaikki siellä esitetty koskee versiota 2.0, sillä vanhemmasta versiosta puhuminen ei 2.0:n julkaisun jälkeen ole enää järkevää.




4. VRML:n rakenne

Jokainen VRML2.0-tiedosto alkaa "taikapiparilla", joka on "#VRML V2.0 utf8". Taikapiparin viimeinen koodi ilmaisee, että kansainväliset merkit enkoodataan UTF-8/ISO 10646 standardin mukaan. Tämän vaaditun otsikkokentän jälkeen VRML2.0-tiedosto voi sisältää vapaan yhdistelmän solmuja (nodes) ja lapsisolmuja, prototyyppejä sekä ROUTE-määrittelyjä, joista kerrotaan tarkemmin myöhemmin tässä luvussa. Minimalistinen VRML2.0-tiedosto voisi olla esim.

Kyseisessä ohjelmanpätkässä luodaan kuutiomainen objekti kaikilla oletusarvoilla (paikka, koko, materiaali jne.)



4.1. Solmut

Solmu (node) on VRML:n perusrakennuspalikka. Solmu koostuu tyyppinimestä, joukosta parametreja eli kenttiä sekä mahdollisesti lähtevistä ja/tai saapuvista tapahtumista. Solmuja on kahta päätyyppiä:

Ryhmäsolmut voivat siis sijaita myös sisäkkäin, kuten viereisestä kuvasta nähdään. Siinä Ryhmä koostuu toisesta ryhmästä ja kahdesta lapsesta, Viewpoint- ja Shape-solmuista.

Solmuja voidaan instansoida, eli yhtä solmun määrittelyä voidaan toistaa viittaamalla siihen. Tällöin määritellylle solmulle tulee antaa nimi, jolla se identifioidaan. Nimeämiseen käytetään avainsanoja DEF/USE, esim.

Tällä menetelmällä voidaan saavuttaa varsin suuri tilansäästö, kun maailman kaikki usein toistuvat objektityypit määritellään kerran, nimetään, ja käytetään instansseina eri puolilla koodia.



4.1.1. Ryhmäsolmut

Kuten jo aikaisemmin mainittu, ryhmäsolmut muodostavat kielen hierarkisen järjestyksen. Voidaan myös ajatella, että osa ryhmäsolmuista on operaattoreita lapsisolmujen manipulointiin. Seuraavassa lista kaikista ryhmäsolmuista ja niiden ominaisuuksista:



4.1.2. Lapsisolmut

Lapsisolmut ovat se kielen osa, joka näkyy konkreettisesti valmiissa keinotodellisuusmaailmassa (objektit, äänet, valaistus jne.). Lapsisolmutyyppejä on ryhmäsolmuihin verrattuna huomattavasti enemmän, joten jokaisen solmun yksityiskohtainen esittely tässä dokumentissa ei ole järkevää. Seuraavassa lapsisolmujen päätyypit jaoteltuina käyttötarkoituksen mukaan:

Jokainen lapsisolmutyyppi sisältää joukon parametreja, joilla sitä konfiguroidaan ja kontrolloidaan. Osa tyypeistä sisältää myös alisolmuja. Näistä laajin on Shape, jolla siis määritellään objekteja. Koska se on myös eniten käytetty tyyppi, käydään se tässä hieman tarkemmin läpi. Kuten jo aikaisemmin sanottu, Shape koostuu kahdesta alisolmusta, geometry:sta ja appearance:sta. Appearance taas koostuu material, texture ja textureTransform -solmuista, joilla nimensä mukaan määritellään materiaali (väri, heijastusaste), tekstuuri (joka voi olla myös movieTexture eli mpeg-video) ja tekstuurin mahdollinen transformaatio.Geometry taas sisältää alisolmun, joka on jokin perusobjekteista (Box, Cone, Cylinder, Sphere) tai esim. vapaasti koordinaateilla määriteltävä objekti (indexedLineSet - "wireframe = rautalankamalli", indexedFaceSet - "pinnoitettu" objekti).



4.2. Prototyypit

Prototyypit ovat mekanismi, jolla VRML:ää voidaan laajentaa. Prototyypeillä voidaan luoda uusia solmutyyppejä siten, että joukko solmuja (ja haluttaessa reittejä) pakataan yhteen uudeksi solmutyypiksi. Esimerkiksi hyvinkin monimutkainen monista solmuista luotu rakennus voidaan määritellä uudeksi solmutyypiksi, jossa vielä kaikkia muunneltaviksi haluttuja parametreja varten on oma kenttänsä. Prototyypit voivat tuntua vain viilatulta versiolta aikaisemmin kerrotusta DEF/USE:sta, mutta ne eivät ole sama asia. DEF/USE:ssa käytetään kerran nimettyä solmua uudelleen, kun taas prototyypeillä luodaan kokonaan uusia solmutyyppejä, joiden parametrit ovat vielä muunneltavissa.



4.3. Tapahtumat ja reitit

Tapahtumat syntyvät käyttäjän toiminnan seurauksena jonkin sensorin aktivoituessa. Sensorit ovat joko aika-, paikka- tai "klikkaus"pohjaisia, sensorityypit on lueteltu tarkemmin edellisessä luvussa. Reitti on yhteys kahden solmun tapahtumien välillä, esim. ovikello-nappulan sensorin ja ovikellon äänen välinen reitti määritellään

Tässä trigger-nimisen sensorin kosketushetkestä luotiin siis reitti buzz-nimisen äänen alkuhetkeen. Reititykset voivat olla myös monimutkaisempia kuin edellinen tapaus, esim. varsin yleinen järjestys on trigger - timer - engine (skripti) - kohde. Tapahtumien ja reittien tarkoituksena on tarjota käyttäjälle interaktiomahdollisuuksia ja luoda maailmaan toimintoja ja elävyyttä.



4.4. Skriptit ja ulkopuolinen ohjaus

Tapahtumilla ja reiteillä saadaan VRML-maailmaan jonkin verran lisää monipuolisuutta, mutta jos halutaan toteuttaa monimutkaisempaa interaktiota, ovat skriptit oikea vaihtoehto. Skriptejä voidaan käyttää hyvinkin erilaisiin tehtäviin, mutta tavallisimmin skripti toimii jossain seuraavista tehtävistä:

Yleisesti voidaan ajatella, että skriptit tarjoavat mahdollisuuden toteuttaa perinteisille ohjelmointikielille ominaisia toimintoja, joita VRML:lla ei pelkältään voida tehdä (VRML ei esim. sisällä yleisiä muuttujia tai funktioita perinteisessä mielessä). Mahdollisia skriptikieliä ovat tällä hetkellä




5. Ongelmakohdat

VRML on koko ajan kehittyvä kieli, mikä tuo ongelmia erityisesti selainohjelmien osalta. Hyvänä esimerkkinä on se, että vaikka VRML2.0:n määrittely on julkaistu jo jonkin aikaa sitten, ei määrittelyä täysin tukevia selaimia ole vielä julkaistu, ainakaan itse en ole sellaiseen törmännyt. SGI:n cosmo player on ilmeisesti lähinnä määrittelyä, mutta senkin uusimmasta beta3-versiosta puuttuu vielä useita kielen ominaisuuksia. Toinen ongelma VRML:n kanssa on sen vaatima melko korkea koneteho kolmiulotteisen grafiikan käsittelyssä. Ainakaan oma 90 Mhz Pentium-mikroni ei tahdo jaksaa pyörittää edes kohtuullisen suppeaa teksturoitua 3D-huonetta läheskään sulavasti. Tosin koneiden teho kasvaa koko ajan ja esim. PC-koneiden 3D-näytönohjainten yleistyminen lähitulevaisuudessa auttanee asiaa. Kolmas ongelma liittyy I/O-laitteisiin. Sulava liikkuminen virtuaalimaailmassa edellyttää, että liikettä kaikkiin kuuteen suuntaan voidaan kontrolloida helposti. Esim. hiirellä ja ohjainsauvalla suuntien kontrollointimahdollisuus jää normaalisti neljään. Tulevaisuus näyttää, yleistyvätkö kolmiulotteisen liikkumisen mahdollista ohjaimet (esim. lentävä hiiri) ja muut keinotodellisuuslaitteet, esim. datahanskat ja virtuaalilasit, jotka mahdollistaisivat paljon realistisemman liittymän virtuaalimaailmaan.




6. Yhteenveto

VRML on tulkattava objektipohjainen kolmiulotteisen geometrian mallintamis- ja ohjelmointikieli, joka on tehty erityisesti kolmiulotteisten virtuaalimaailmojen luontiin kansainvälisessä Internet-tietoverkossa. VRML:sta on olemassa kaksi versiota, 1994 julkaistu VRML1.0 ja loppuvuodesta 1996 määritelty VRML2.0, joka monipuolistaa kieltä huomattavasti. Tässä dokumentissa on käyty läpi VRML:n historiaa, tekniikkaa ja rakennetta sekä tärkeimpiä solmutyyppejä. Mikäli VRML-kieleen haluaa tutustua tarkemmin, tarjoaa esim. lähdeluettelon alussa mainittu käsikirja varsin täydellisen esityksen aiheesta.

VRML:n käyttö on tällä hetkellä vielä kokeilu- ja tutkimustasolla, eli en ainakaan itse tiedä yhtään suoraan kaupallisessa käytössä olevaa sovellusta. Tosin VRML:lla ollaan toteuttamassa joitain varsin kunnianhimoisiakin projekteja, esim SGI:n Aztec city ja kotimainen virtuaalihelsinki. VRML:n tulevaisuus riippuu varsin paljon kielen rakenteen vakiintumisesta ja sitä tukevan teknologian yleistymisestä sekä siitä, säilyykö yleinen mielenkiinto aiheeseen myös viime vuosina valloilla olleen keinotodellisuusinnostuksen rauhoituttua. Tällä hetkellä tulevaisuus näyttää kuitenkin hyvältä varsinkin kielen äskettäisen uudistumisen myötä.




7. Lähdeluettelo

Jed Hartman and Josie Wernecke, "The VRML 2.0 Handbook, Building moving worlds on the web", Addison Wesley Developers Press, August 1996

Hannu Napari, "VRML", tik-111.400 luentokalvot syksy 1996, <URL: http://www.tcm.hut.fi/Opinnot/Tik-111.400/1996/napo_vrml2_a4.ps.gz >.

Silicon Graphics VRML Web site, <URL: http://vrml.sgi.com >

VRML Architecture Group homepage, <URL: http://vag.vrml.org >

The VRML Repository, <URL: http://www.sdsc.edu/vrml >, sisältää mm. todella kattavan luettelon VRML-kirjallisuudesta

VRML infoservice, <URL: http://dmiwww.cs.tut.fi/vrml/ >




8. Liite: esimerkki VRML2-tiedostosta

Tämä yksinkertainen esimerkkitiedosto asettaa katselijan VRML-maailmaan koordinaattipisteeseen (0,2,15) katsomaan kohti origoa, johon on luotu vaaleanharmaa sylinterinmuotoinen objekti.

#VRML V2.0 utf8
Group { 
   children [ 
      NavigationInfo { type "WALK" } 
      Viewpoint { 
         position 0 2 15 
         orientation 0 0 -1 0 
      } 
      Shape {
         appearance Appearance {
            material Material {
               diffusecolor .7 .7 .7
               shininess    .5
            }
         }
         geometry Cylinder {
            radius 3
            height 6
            side   TRUE
            top    FALSE
            bottom TRUE
         }
      }
   ]
}

jones@cc.hut.fi