Jouni Korte, Ti N, 40364k
jones@cc.hut.fi
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
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.
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:
"VRML is a language for describing multi-user interactive simulations - virtual worlds networked via the global Internet and hyperlinked within the World Wide Web."
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.
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.
Kuva 1. Esimerkki VRML-maailmasta ja selaimesta (Netscape + Cosmo player)
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.
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.
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ää.
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.
#VRML 2.0 utf8 Shape { geometry Box { } }
Kyseisessä ohjelmanpätkässä luodaan kuutiomainen
objekti kaikilla oletusarvoilla (paikka, koko, materiaali jne.)
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.
DEF perusobjekti Shape {...} ... USE perusobjekti
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.
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:
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).
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.
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
ROUTE trigger.touchTime TO buzz.startTime
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ä.
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ä
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.
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ä.
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/ >
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