VRML - 3-ulotteisten maisemien kuvaus internetissä

1.11.1999
Miika Tuunanen
Tietotekniikan osasto
Teknillinen Korkeakoulu
mtuunane@cc.hut.fi

Tiivistelmä

VRML (Virtula Reality Modeling Language) on kolmiulotteisten maisemien kuvaukseen käytetty kuvauskieli, joka on kehitetty erityisesti käytettäväksi internetissä. VRML on vähän vastaavanlainen kuin HTML-kuvauskieli, eli näytettävä aineisto kuvataan erilaisin komennoin, ja kohdekone, jossa se esitetään, generoi esityksen komentojen mukaan. 3d-maisemia ei siis lähetetä kohdekoneelle palvelimelta, vaan maisema luodaan kohdekoneessa. Näin säästytään yhteyden suurelta rasittamiselta, kun ei tarvita kuljettaa kooltaan suuria valmiita maisemia, vaan selvitään näiden sijaan tekstipohjaisella maisemankuvauksella. Tämä myös vähentää palvelimelle asetettuja vaatimuksia, koska kuvien laskenta suoritetaan vasta kohdekoneessa.

1 Johdanto

VRML (Virtual Reality Modeling Language) on kieli, jolla voidaan kuvata kolmiulotteisia maisemia internetissä. Kielen lähtökohtana ovat olleet internetin vaatimukset. Maisemien kuvaus internetissä ei olisi onnistunut niin, että palvelin hoitaisi kaiken laskemisen ja lähettäisi valmiin maiseman kohdekoneelle esitettäväksi. Minkään palvelimen resurssit eivät olisi riittäneet tähän, eikä maisemaa olisi ehkä siitä huolimatta saatu siirrettyä kohteelle riittävän nopeasti. Siksi piti kehittää jotain tehokkaampaa. Tästä syystä siirrettävä data sisältää ainoastaan maiseman generointiin tarvittavan ohjauskoodin. Varsinainen kuvan muodostus ja renderöinti tapahtuu tällöin vasta kohdekoneessa. Tällöin verkon kuormitus on huomattavasti pienempi verrattuna siihen, että palvelimelta ladataan joka kuva ja käyttäjä lähettää omat ohjauskoodinsa palvelimelle. Myöskään palvelimen ei tarvitse itse enää laskea kuvia, vaan laskemisen hoitaa kohdekone. [4]

VRML-maailman koordinaatisto on oikeakätinen, eli x-akseli osoittaa ruudulla oikealle, y-akseli ylöspäin ja z-akseli ruudusta ulospäin.[4]

Tämän dokumentin tarkoitus on esittää ensin yleiskuvaus VRML 1.0:sta, ja tämän jälkeen siirtyä tarkkailemaan VRML 2.0 versiota. Tarkoitus on esittää perusasioita ja tärkeimmät solmut ja niiden rakenne. Tarkoitus ei niinkään ole paneutua VRML:n syntaksiin, joskin sitäkin on hiukan.

2 Käytön aloitus ja tarvittavat laitteet

VRML:n käyttöön on olemassa lukuisia erilaisia vaihtoehtoja. Jotta VRML-maisemia voidaan katsella, on käyttäjällä oltava mielellään mahdollisimman uusi www-selain, sekä tähän sopiva VRML-plug in. On myös mahdollista käyttää erillistä VRML-selainta, jolloin www-selainta ja lisäohjelmistoja ei tarvita.

VRML-maailman luonti tapahtuu luomalla tiedosto, jonka pääte on .wrl. Tiedoston luontiin on myös olemassa monia tapoja. Tiedosto voidaan luoda joko tekstieditorilla tai jotain 3d-mallinnus ohjelmaa käyttäen.

3 Sovellukset

VRML:ää käyttäen voidaan luoda mitä erilaisimpia sovelluksia. Voimme luoda omasta mielestämme siistejä maisemia, jotka eivät sisällä mitään toimintaa, vaan ne on tarkoitettu vain katseltaviksi. Näin voitaisiin toteuttaa vaikkapa museoita tai vaikkapa kaupunkeja, jolloin voisi kaupungissa käymättäkin liikuskella pitkin sen katuja, ja katsella miltä siellä näyttää.

Hyötykäytössä VRML:n avulla on toteutettu mm. virtuaalisia jääkiekkohalleja, joissa lipunostaja voi ennen ostopäätöstään käydä katsomassa, kuinka paikalta näkee pelin. Näin voi etukäteen käydä katsomassa, että kannattaako paikasta maksaa pyydettyä hintaa.

Myös erilaisia kokoamisohjeita voisi yrittää tehdä käyttäen vrml-kieltä. Kolmiulotteisuus antaisi mahdollisuuden katsoa tilannetta eri kulmista, ja näin ei käyttäjälle jäisi niin paljon epäselvyyttä, kuinka kokoaminen tapahtuisi.[5]

4 VRML 1.0

Käytännössä tiedostossa on kaksi osaa, eli otsikko, jossa spesifioidaan VRML versio ja merkkikoodisto, sekä loppuosa, joka sisältää VRML-solmut. Tiedosto voisi näyttää osapuilleen tältä:[2]
#VRML V1.0 ascii Tämä on siis ascii-koodattu tekstitiedosto
# tiedosto.wrl
Kommentti alkaa risuaita-merkillä, ja päättyy, kun rivi vaihtuu: [2]
# Tämä on kommentti
Solmu on VRML-maailmojen rakentamisen perusosanen. Solmujen avulla määritellään, kuinka 3-ulotteiset kappaleet rakennetaan, minne ne sijoitetaan, kuinka ne väritetään ja kenties animoidaan. VRML 1.0-kielessä näitä solmuja on 36, ja ne on jaettu neljään ryhmään: geometriset solmut, ominaisuus solmut, ryhmittelysolmut sekä muut solmut.[2] Solmu koostuu nimestä, jonka jälkeen tulee aaltosulut, joiden sisään voi tulla eri määrä argumentteja, joilla määrätään solmun tila, muutoin käytetään oletusarvoja.

4.1 Geometriset solmut

Geometristen solmujen avulla voidaan määritellä 3-ulotteisia kappaleita. Ryhmään kuuluu seuraavat solmut: AsciiText, Cone, Cube, Cylinder, IndexedFaceSet, IndexedLineSet, PointSet ja Sphere. [2]

4.1.1 AsciiText

AsciiText-solmulla luodaan 2-ulotteista tekstiä VRML-maailmaan. FontStyle-solmulla muotoillaan tekstiä.
Separator {
	FontStyle {
		size 10
		family SERIF
		style NONE
	}
	AsciiText {
		string "Tämä on ascii-tekstiä."
		spacing 1
		justification CENTER
		width 0
	}
}
Stirng-osaan kirjoitetaan näytettävä teksti. Justification asettelee tekstin origon suhteen ja sen mahdolliset arvot ovat LEFT, CENTER ja RIGHT. Widht määrittää tekstin maksimileveyden. Jos teksti kuitenkin on tätä leveämpi, niin sitä skaalataan pienemmäksi.

4.1.2 Cone

Cone-solmun avulla mallinetaan kartio.
Cone {
	parts ALL
	bottomradius 15
	height 30
}
parts-osan avulla määritellään esitettävät kartion osat. Mahdolliset vaihtoehdot ovat SIDES, BOTTOM ja ALL, eli kyljet, pohja ja kaikki. bottomradius ja height määräävät kartion pohjan säteen sekä kartion korkeuden.

4.1.3 Cube

Cube-solmulla määritellään piirrettävä kuutio antamalla sille leveys, pituus ja syvyys.
Cube {
	width 30
	height 30
	depth 30
}

4.1.4 Cylinder

Cylinder-solmulla määritellään sylinteri säteen ja korkeuden avulla.
Cylinder {
	parts ALL
	radius 12
	height 20
}
Tässä parts-muuttujan arvot voivat olla TOP, BOTTOM, SIDES tai ALL, eli katto, pohja, kyljet tai kaikki edelliset.

4.1.5 Sphere

Sphere-solmulla määritellään pallo, jonka säde on radius.
Sphere {
	radius 10
}

4.1.6 IndexedLineSet ja IndexedFaceSet

IndexedLineSet ja IndexedFaceSet solmut käyttävät apuna ominaisuussolmua Coordinate3. IndexedLineSet-solmun avulla piirretään pisteiden välille viivoja, eli sen avulla voi tehdä ns. rautalanka malleja, kun taas IndexedFaceSet-solmun avulla piirretään pisteiden virittämiä pintoja. -1 toimii eri pintojen ja eri viivojen erottimena.
Esimerkki solmujen käytöstä, 4-kulmio
Separator {
	Coordinate3 {
		point [
		0 10 0,
		10 0 0,
		0 0 10,
		-10 0 0,
		]
	}
	IndexedFaceSet {
		coordIndex [
			0, 1, 2, -1,
			0, 2, 3, -1,
			1, 2, 3, -1,
			0, 1, 3, -1,
			]
	}
}
Ja sama rautalankapiiroksena:
Separator {
	Coordinate3 {
		point [
		0 10 0,
		10 0 0,
		0 0 10,
		-10 0 0,
		]
	}
	IndexedLineSet {
		coordIndex [
			0, 1, -1,
			0, 2, -1,
			0, 3, -1,
			1, 2, -1,
			2, 3, -1,
			1, 3, -1,
			]
	}
}

4.2 Ominaisuussolmut

Ominaisuus solmujen avulla puolestaan määritellään kappaleille ominaisuuksia, eli määritellään geometristen solmujen esitystapa. Ominaisuussolmuja ei käytetä yksinään vaan yleensä geometristen solmujen kanssa. Ominaisuussolmut voidaan jakaa kahteen osaan: Visuaalisiin ominaisuuksiin kuuluvat Coordinate3, FontStyle, Material, MaterialBinding, Normal, NormalBinding, Texture2, Texture2Transform, TextureCoordinate2 ja ShapeHints. Transformaatiominaisuuksiin kuuluvat puolestaan MatrixTransform, Rotation, Scale, Transform ja Translation.[2]

4.2.1 Visuaaliset ominaisuussolmut

Coordinate3-solmulla voidaan luoda pisteitä maailmaan. Käytetään mm. IndexedFaceSet- tai IndexedLineSet-solmujen kanssa. Pisteet määritellään pilkuilla eroteltuina.

FontStyle-solmulla valitaan AsciiTextin käyttämä fontti, sen tyyli ja koko. Käytettävän fontin määrää muuttuja family, ja sen vaihtoehdot ovat SERIF, SANS ja TYPEWRITER. Style muuttujan mahdolliset arvot ovat NONE, BOLD ja ITALIC, eli ei mitään, lihavoitu ja kursiivi. Size määrää fontin korkeuden kappaleavaruuden pisteissä.

Material-solmulla määritellään kohteen materiaalin ominaisuuksia, kuten heijastuvuutta eri tilanteissa sekä läpinäkyvyyttä, ja kuinka väri käyttäytyy näissä tilanteissa.

Objekteiden pinnoille voi laittaa pinnoitteen Texture2-solmulla. Pinnoitteen laittamisella tarkoitetaan JPEG-, PNG- tai GIF-muodossa olevien kuvien laittamista pinnalle.

Texture2 {
	filename "kuva.jpg"
}
Lainausmerkkien sisään laitetaan halutun kuvan osoite. Kuva voi siis sijaita missä tahansa.

4.2.2 Transformaatio-ominaisuudet

Transform-solmulla voi skaalata, kiertää tai siirtää objektia.
Transform {
	translation 0 10 0
	rotation 0 0 1 2.5
	scaleFactor 1 1 2
	center 2 2 2
}
Translation määrittää vektorin(origon suhteen), jonka verran objektia siirretään. Rotation määrittää kiertoakselin ja -kulman (viimeinen argumentti). ScaleFactor on skaalauskerroin, jossa jokaiselle akselille annetaan erikseen oma skaalauskertoimensa. Center:llä voi määrittää pisteen, jonka ympäri kierto tapahtuu.

Tämän lisäksi on vielä Translation-solmu, jolla voi tehdä pelkkiä siirtoja käyttäen hyväksi translation-argumenttia, kuten edellisessä esimerkissäkin.

4.3 Ryhmittelysolmut

Ryhmittelysolmujen avulla kootaan solmuja suuremmiksi kokonaisuuksiksi. Tämän avulla suuremmalle kokonaisuudelle voidaan helposti määritellä yhteisiä ominaisuuksia. Ryhmittelysolmuja ovat Separator, Switch, WWWAnchor sekä LOD.[2]

Ryhmittely solmuista on jo esiintynyt Separator-solmu, jolla vain ryhmitellään solmuja yhdeksi kappaleeksi. WWWAnchor on myös paljon käytetty ryhmittelysolmu, sillä se avulla voidaan luoda www-linkkejä muihin sivuihin, eli voidaan kätevästi siirtyä paikasta toiseen sitä klikkaamalla.

WWWAnchor {
	name "http://www.hel.fi"
	{
	Cube { }
	}
}
Eli kun kyseistä kuutiota klikkaa, pääsee helsingin kaupungin kotisivulle. Name-osaan käy siis mikä tahansa www-linkki, kuten HTML:ssäkin.

4.4 Muut solmut

Muut solmut eivät selvätikään kuulu mihinkään edellisistä ryhmistä, joten ne on koottu omaksi ryhmäkseen. Joukkoon kuuluu mm. erilaisia kameroita, valoja sekä jotain muuta pientä. Näitä solmuja ovat OrtographicCamera, PerspectiveCamera, DirectionalLight, PointLight, SpotLight, WWWInline sekä Info.[2]

4.4.1 Kamerat

VRML:ssä on kaksi erilaista kameratyyppiä: Perspektiivikamera ja ortogonaalinen kamera. Perspektiivikamera on ns. tavallinen kameratyypi. Siinä objektit pienenevät kauemmas. Ortogonaalinen kamera taas säilyttää objektien koon huolimatta etäisyydestä. Siinä siis kuution sivut ovat samansuuntaiset, kun taas perspektiivikamerassa ne lähenevät toisiaan kauemmas mentäessä.

Kameralle voidaan yleensä antaa sen paikka ja kuvaussuunta, vihje siitä, millä etäisyydellä olevista esineistä ollaan kiinnostuneita (kauempana kamera liikkuu nopeammin kuin lähellä)

4.4.2 Valot

VRML 1.0:ssä on kolme erilaista valoa, eli DirectionalLight(suunnattu valo), PointLight(pistevalo) sekä SpotLight(Kohdevalo).

SpotLight-solmu määrittelee kohdelampun, jonka valaisema alue on kartion muotoinen. Sille voidaan osoittaa suunta, johon se valaisee, sekä valaisukulma. PointLight-solmu määrittelee pistevalon, joka valaisee joka suuntaan yhtä voimakkaasti. DirectionalLight-solmu määrittelee lampun, joka valaisee ainoastaan yhteen suuntaan, ja tämä suunta on määritelty direction-argumentilla.

Yleensäkin valoille voidaan määritellä mm. paikka, voimakkuus, sen väri ja vaimennuskerroin.

5 VRML 2.0

5.1 Version uudet ominaisudet

Nykyistä staattista maailmaa on pyritty parantamaan, mutta sen lisäksi kehiin on tullut myös skriptit, interaktiivisuus, animaatiot sekä prototyypit.[3]

5.1.1 Parannettu staattinen maailma

Versiossa 2.0 on paranneltu version 1.0 ominaisuuksia. Näiden uusien ominaisuuksien ansiosta saadaan aikaan parempaa realismi maisemien katselemiseen ja kuuntelemiseen.

Uudessa versiossa helpompi luoda sadetta ja sumua, ja myös säännöttömien pintojen luominen on helpompaa.

Äänet on myös saatu mukaan uuteen versioon, joten se tuo mukanaan lisää realismia, voidaan laittaa puhelimia soimaan, tehostaa lasin särkymistä jne.

Myöskin uusien selainten tekijöille uusi versio tarjoaa helpotusta niiden optimoidessa ja tutkiessa tiedostoja.

5.1.2 Interaktiivisuus

Uuden Sensor-solmun avulla voidaan saada aikaan interaktiivisuutta. Enää eivät sivut tarvitse olla kuolleita, vaan maiseman eri kohtia klikkaamalla saatetaan saada aikaan toimintaa, jos olio on kytketty johonkin. Nyt myös aineet käyttäytyvät niin kuin luonnossakin. Neste on neste, ja kiinteä on kiinteä, jonka läpi ei pääse. On myös mahdollista liikkua pitkin pintaa oli se sitten ramppi tai askelma tai jokin muu kiinteä olio.

5.1.3 Animaatio

Versioon 2.0 on sisällytetty myös joukko animaatio objekteja, joita kutsutaan Interpolaattoreiksi (Interpolators). Tämän seurauksena on tullut mahdollisuus määritellä etukäteen animaatioita, jotka suoritetaan jonakin otollisena ajankohtana. Näin on mahdollisuus tehdä itsestään liikkuvia olentoja, kuten lintuja, aukeavia ovia, mutta myös etukäteen suunniteltuja opastettuja kiertoajeluja.

5.1.4 Skriptit

Skript-solmut ovat olennainen osa jo esiteltyjä interaktiivisuutta ja animaatioita ajatellen. Ilman skripteja ei voida saada aikaan toimintaa. Skript-solmu saa sensor-solmulta tapahtuman, jonka perusteella se päättää, kuinka täytyy toimia. Eli kun käyttäjä klikkaa jotain kohdetta, se käynnistää ehkä skriptin, joka laittaa vaikka lepakot lentämään. Eli yleensä interaktion seurauksena käynnistyy jokin toiminta, joka käynnistää jonkin animaation. Nämä kolme siis toimivat hyvin kiinteästi yhdessä.

5.1.5 Prototyypit

Prototyyppien avulla luodaan olioita, joita niille annetuilla nimillä voi käyttää myös muualla. Se helpottaa paljon elämää kirjoitettaessa VRML-maailmoja. Voidaan luoda useita erilaisia objekteja, joita sitten vuoronperään kokeilla johonkin kohtaan vain nimeä vaihtamalla kyseisessä kohdassa. Myös kopioiden tekeminen on helppoa. On helppo (kaikki on suhteellista) laittaa esim sali täyteen tuoleja.

5.2 Tiedoston rakenne

VRML-tiedosto koostuu neljästä eri osasta, otsikosta, maailmasta prototyypeistä sekä tapahtuman ohjauksesta. [5]

5.2.1 Otsikko

Jotta VRML-tiedostot tunnistettaisiin, jokainen VRML-tiedosto aloitetaan rivillä:
#VRML V2.0 < koodaus tyyppi > [ kommentti ] < rivin päättö >
V2.0 on käytettävän VRML-kielen versio, ja se voisi yhtä hyvin olla V1.0, jos käytetään vanhaa versiota. Seuraavaksi tulee koodaus tyyppi, johon voidaan laittaa mm. ascii, kun tiedosto on kirjoitettu käyttäen ascii-merkistöä. Tämän jälkeen tulevat kommentit ja rivinpäätös, eli rivinvaihto tai vastaava.

VRML 2.0 -tiedosto voisi siis alkaa esimerkiksi seuraavanlaisella rivillä:

#VRML V2.0 utf8 Interaktiivinen 3Dd-maisemani

ja vanha VRML 1.0 -tiedosto alkaisi rivillä:

#VRML V1.0 ascii Staattinen 3d-maisemani.

5.2.2 Maailma

Maailma sisältää solmuja, jotka kuvaavat olioita ja niiden ominaisuuksia.

5.2.3 Prototyypit

lahde Prototyyppien avulla useasta solmusta voidaan muodostaa olio, jota voidaan käsitellä yhtenä kappaleena, ja jonkin isomman kokonaisuuden osana. Prototyyppiä käyttäen on mahdollista täyttää esim. sali tuoleilla, kun tuolille on luotu oma prototyyppinsä.

5.2.4 Tapahtuman ohjaus

Jotkin VRML-solmut aiheuttavat tapahtumia ympäristönmuutoksien ja käyttäjän toimien vaikutuksesta. Tapahtuman ohjaus mahdollistaa maailman hierarkiasta poikkeavan mekanismin, jonka kautta tapahtumalla voidaan aiheuttaa muutoksia toisissa solmuissa. Tapahtumien sattuessa ne ohjataan määrättyihin kohteisiinsa aikajärjestyksessä ja käsitellään vastaanottavissa solmuissa. Tämä käsittely voi muuttaa solmun tilaa, aiheuttaa uusia tapahtumia, tai muuttaa maailmaa.

5.3 Solmut

Solmun rakenne on muutoin samanlainen kuin versiossa 1.0, mutta versiossa 2.0 solmulle voidaan antaa nimi. Nimi sijoitetaan yksinkertaisesti solmun eteen DEF määritteen kera. [3] Esimerkiksi:
DEF Solmu1 Sphere { }
määrittelisi pallon nimellä Solmu1.

5.3.1 Uudet solmutyypit

Ryhmittelysolmuihin on tulleet uudet solmut Collision (onko solmun läpi mahdollisuus navigoida) sekä Transform (ryhmittelee samaan koordinaatisto systeemiin kuuluvat kappaleet).

Selaimelle voidaan myös osoittaa solmuja, joiden avulla ohjataan selainta. Tällaisia solmuja ovat BackGround, NavigationInfo, ViewPoint ja WorldInfo. Nämä siis kertovat selaimella käytettävästä taustasta, navigaatiosta, kameran sijainnista ja suunnasta sekä perinteistä infoa dokumentista, kuten tekijä, otsikko jne.

Valoihin on myös lisätty uusi solmu: Fog:n avulla saadaan aikaan ilmastollisia vaikutuksia, kuten sumua.

Äänten puolella on määritelty äänen lähde, joka lähettää valoa 3-ulotteiseen avaruuteen.

Geometrian puolella on uusi solmu, Shape, jonka avulla määritellään joukko geometrisia solmuja ja ominaisuussolmuja, joita sovelletaan näihin geometrisiin solmuihin.

Geometrisille solmuille on kehitetty uusi ominaisuus solmu, jolla värit voidaan esittää. Tämä solmu on nimeltään Color, ja se käyttää RGB-koodeja.

Tekstiä muotoillaan uudessa versiossa Text-solmulla, jolla on lukuisia uusia ominaisuuksia. Text-solmu luo pohjan käyttää helpommin muutakin kieltä kuin englantia maisemien tekstinä.

Epätasaisten ja säännöttömien pintojen luomiseen on kehitetty uusi solmu nimeltä ElevationGrid.

Ulkonäköön liittyen on uusi solmu nimeltä Appearance, jolla voi kerätä yhteen kaikki jonkin kappaleen ulkonäköön liittyvät ominaisuudet. Extrusion-solmu määrittelee kompaktin esitystavan pursuaville muodoille ja kiinteälle rotaatiolle. Sensorit ovat kokonaan uusi ryhmä VRML-maailmassa, ja se on saanut jäsenikseen seuraavat uudet solmut, joiden merkityksiä ei kuitenkaan tässä käydä läpi: ProximitySensor, TouchSensor, CylinderSensor, PlaneSensor, SphereSensor, VisibilitySensor ja TimeSensor.

Skriptaukseen on tullut avuksi vain yksi solmu, Script, jolla skriptaus hoidetaan. Skriptaus tapahtuu siten, että sisään tulevan tapahtuman perusteella generoidaan ulos tuleva tapahtuma. Siis tapahtuma aiheuttaa toisen tapahtuman. Interpolaatioon liittyen on myöskin tullut uusia solmuja, joilla voi hakea erilaisten solmujen ns. keskikohtia. Näitä uusia solmuja ovat seuraavat, joissa nimen alku jo kertoo mihin ne liittyvät: ColorInterpolator, CoordinateInterpolator, NormalInterpolator, OrientationInterpolator, PositionInterpolator ja ScalarInterpolator.[3]

5.3.2 Poistuneet ja nimeä muuttaneet solmutyypit

AsciiText on muuttunut Text:ksi, Info WorldInfoksi. Ortogonaalikamera on siirretty selaimen hoideltavaksi, samoin selain hoitaa perspektiivikameran, mutta sille on siellä oma solmu nimeltä ViewPoint Separatoria ei enää ole, vaan sen tilalla täytyy käyttää Transformia. Samoin kaikki transformointiin liittyvät solmut on sisällytetty Transform-solmun alle.[3]

VRML:n tulevaisuuden näkymiä

VRML 2.0 on tulossa kovaa vauhtia käyttöön. Sille on tulossa lujaa vauhtia selaimia ja erilaisia apuvälineitä. Näiden apuvälineiden avulla pystytään kätevästi kääntämään muitakin 3-ulotteisia malleja (esim. CAD-mallit) VRML-kielelle. Monikäyttäjäympäristötkin saattavat levitä laajaan käyttöön, ja kunhan kaupungit saavat omat virtuaalikaupunkinsa valmiiksi ja yhdistettyä toisiinsa, on valmis siirtokunta kyberavaruudessa valmis, ja siellä kommunikoivat käyttäjien avattaret keskenään. [1]

Lähteet:

[1]Alanen, E., VRML - virtuaalitodellisuuden rajalla, Internet-lehti, 1996, Nro.9 [viitattu 20.09.1999]
<
http://media.urova.fi/~aalanen/texts/teksti1.htm>

[2]Bell, G. & Parisi, A. & Pesce, M. VRML 1.0C Specification, 23.10.1995,
<
http://www.vrml.org/VRML1.0/vrml10c.html>

[3]Bell, G. & Carey, R. & Marrin, C., The Virtual Reality Modeling Language Specification Version 2.0, 4.8.1996,
<
http://www.vrml.org/VRML2.0/FINAL/>

[4]Myllymaa, M., VRML-opas aloittelijalle, 2.11.1997,
<
http://www.tcm.hut.fi/Studies/Tik-110.300/1997/Essays/vrml_2.html>

[5]Salonen, M., VRML - Virtual Reality Modeling Language, 12.4.1999,
<
http://www.hit.fi/~msalonen/tkte/tkte.html>

Lisätietoja:

Crispen, B., VRMLWORKS, 22.05.1999,
< http://fly.hiwaay.net/~crispen/vrmlworks/>
VRMLworks on hyvin jäsennelty, kattava kuvaus aihealueesta. Aihealueesta löytyy tietoa mm. selaimen valinnasta, linkkejä erilaisiin vrml-maailmoihin, muutamia esseitä jne.

Jones, C., Layoffs Threaten VRML's Future,27.2.1999,
< http://www.wired.com/news/news/business/story/18148.html>
Jonesin artikkeli on suhteellisen uusi artikkeli aiheesta, joten siinä on ainakin jotain nykytilanteesta.

Nadeau, D., R, See what VRML 2.0 is all about and start building shapes today,]17.06.1998,
< http://www.netscapeworld.com/netscapeworld/nw-12-1996/nw-12-vrmltechniques.html >
Nadeaun julkaisu on yksi vrml-opas, jossa erityisen hyvää on vrml-koodia havainnollistavat kuvat, sillä niiden avulla näkee suurinpiirtein mitä koodi tuottaa, vaikkei vrml-selainta omistaisikaan.

Nadeau, D. R., VRML 2.0 Glossary,[viitattu 20.09.1999]
< http://www.netscapeworld.com/netscapeworld/common/nw-vrmlglossary.html>
Nadeau on luonut aihealueesta melko kattavan sanaston, jota ainakin asiaan lainkaan perehtymättömän kannattaa vilkaista muun materiaalin selailun ohessa.

Refracted, refractedVRML,[viitattu 20.09.1999],
< http://www.refraction.com/vrml/>
Refracted:lta löytyy vrml:ään liittyen kaikki oleellinen aiheesta. Sieltä löytyy työkaluja, erilaisia vrml-maailmoja sekä vrml-maailmojen rakentamiseen tarvittavia oppaita, etenkin 2.0 versioon liittyen.

Scott, A., VRML 2.0 Update: What are the issues, and where do we go from here?, 1.9.1996
< http://www.netscapeworld.com/netscapeworld/nw-09-1996/nw-09-vrmlupdate.html >
Scottin julkaisussa on kerrottu käytännön asioista, esim. milloin käyttää vrml:ää, spesifikaatioiden eroja, kaistanleveydestä ja muista asioista, jotka liittyvät vrml:ään.

SDSC, The VRML Repository, 13.09.1999,
< http://www.web3d.org/vrml/vrml.htm>
SDSC:llä on kattavat sivut aiheesta, ja sieltä löytyy lähestulkoon kaikki.

Shalf, J., VRML, 24.06.1997,
< http://bach.ncsa.uiuc.edu/VRML/>
Shalf on myös luonut kattavan vrml-oppaan, joka on höystetty muutamilla kuvilla ja useilla asiaa havainnollistavilla esimerkeillä. Asia on esitetty tiiviisti, turhia jaarittelematta.

The VRML Consortium, History of the VRML Spescification, 17.12.1998,
< http://www.vrml.org/about/history.html>
VRML:n Consortiumin oma, lyhyt mutta tiivis, kuvaus vrml-spesifikaatioiden historiasta.

Web3d Consortium, News, 29.03.1999
< http://www.vrml.org/fs_news.htm>
Wed3d Consortium on koonnut alan viimeisimpiä uutisia uutisotsikoidensa alle.