1 Käyttöohje ja -raportti Virtuaali-Frami, CAVE-ohjelmisto Harri Mähönen projektiassistentti Seinäjoen ammattikorkeakoulu Versio 1.2 20.1.2006
2 Versiohistoria Päivämäärä Versio Tekijä Muutokset 17.1.2006 1.0 Harri Mähönen Alustava versio. 19.1.2006 1.1 Harri Mähönen Muutoksia liitteisiin. 20.1.2006 1.2 Harri Mähönen Kielioppivirheiden korjausta ja yleiskuvaus kappaleen uudelleen muotoilu. Lisätty kuva ohjelmasta simulaattorissa sekä asetustiedostoliite, versiohistorian lisäys.
3 Sisällys 1 Johdanto... 4 1.1 Dokumentin tarkoitus... 4 1.2 Dokumentin rakenne... 4 1.3 Käytetyt termit ja lyhenteet... 5 2 CAVE-ohjelmisto... 6 2.1 Yleiskuvaus... 6 2.2 Laitteisto- ja ohjelmistovaatimukset... 7 2.3 3D-näkymän rakenne ja määrittely... 8 2.4 Näkymien vaihtaminen... 9 2.5 3D-mallien tuonti ohjelmistoon... 10 3 Ohjelman käyttö... 11 3.1 Ohjelman ajaminen... 11 3.2 Navigointi... 11 3.3 Painikkeet... 11 3.4 Lento- ja kävelytila... 12 4 Käyttötapaukset... 13 4.1 Navigointi lentotilassa... 13 4.2 Navigointi kävelytilassa... 13 Liitteet... 14 Liite 1. Asetustiedoston muoto... 14 Liite 2. Asetustiedosto... 17
4 1 Johdanto 1.1 Dokumentin tarkoitus Tämän dokumentin tarkoituksena on esitellä Virtuaali-Frami -projektin yhteydessä toteutettu CAVE-ohjelmisto, sen ominaisuudet sekä käyttö. 1.2 Dokumentin rakenne Dokumentti on jaettu neljään eri osaan: 1. Ensimmäisessä osassa esitellään dokumentin tarkoitus, rakenne sekä selvitetään käytetyt termit ja lyhenteet. 2. Toisessa osassa kuvaillaan itse CAVE-ohjelmisto ja 3D-maailman rakenne. 3. Kolmannessa osassa kuvaillaan ohjelman käyttö, navigointi ja painikkeiden toiminta. 4. Neljännessä osassa kuvaillaan muutamia esimerkkejä ohjelman käyttämisestä ja 3D-näkymässä liikkumisesta.
5 1.3 Käytetyt termit ja lyhenteet 3D-maailma Näkyvissä oleva 3D-maailma; Useasta eri näkymästä koostuva kokoelma (rakenne) 3D-malli 3D-geometria; 3D-geometrian sisältävä tiedosto 3DS Max mallinnusohjelmisto CAVE CAVE TM Automatic Virtual Environment, kuutionmuotoinen usean seinän muodostama virtuaalitila CAVElib CAVE-ohjelmointikirjasto, joka vastaa usean eri seinän ohjaamisesta CAVE-simulaattori Microsoft Windows -ympäristössä toimiva virtuaalinen CAVE-tila Irix Kohdealustan käyttöjärjestelmä JPG Hyvin suosittu, pakkaava kuvaformaatti. Lähes kaikki digikamerat käyttävät tätä tiedostomuotoa. Kuuma piste Piste, jolla on määriteltynä säde (muodostaen näkymättömän pallon). Käytetään navigoimisessa eri näkymien välillä. Näkymä Näkyvissä oleva 3D-maailma, joka koostuu useita eri olioista. Olio Esiintymä, joka määrittelee 3D-mallin paikan näkymän sisällä. OpenGL Performer 3D-ohjelmointikirjasto XML Kuvauskieli, käytetään asetustiedoston muotona
6 2 CAVE-ohjelmisto 2.1 Yleiskuvaus Virtuaali-Frami -projektin yhtenä tavoitteena oli luoda Seinäjoen ammattikorkeakoulun virtuaalikeskuksen CAVE-tilassa toimiva ohjelmisto. Ohjelmiston tarkoituksena on tarjota mahdollisuus tarkastella ja tutkia Frami-rakennuksen kolmiulotteista mallia sisältä ja ulkoa. Kuva 1 esittää näkymää Framista ulkopuolelta, CAVE-simulaattorin kautta ajettuna. Frami-rakennus on mallinnettu osissa, esimerkiksi aula ja A-siiven käytävä ovat erillisiä kolmiulotteisia malleja. Ohjelma kokoaa nämä mallit saumattomaksi kokonaisuudeksi, jolloin Frami-mallia voidaan tarkastella kokonaisuudessaan. Kuva 1. Näkymä Framin ulkopuolelta simulaattorin kautta ajettuna
7 2.2 Laitteisto- ja ohjelmistovaatimukset CAVE-ohjelmiston kohdealusta on: Silicon Graphicsin Onyx4 UltimateVision -visualisointitietokone. Tietokonetta käytetään virtuaalikeskuksen CAVE-ympäristön ohjaamiseen. Käyttöjärjestelmäalustana Irix 6.5.28 tai uudempi. Virtuaali-Frami -ohjelmiston ympäristö- sekä ohjelmistovaatimukset ovat: VRCO CAVElib 3.1 -ohjelmointikirjasto, jota käytetään CAVEtilassa olevan viiden eri näyttöpinnan ohjaamiseen ja käsittelyyn. Silicon Graphicsin OpenGL Performer 3.2 -ohjelmointikirjasto kolmiulotteisin grafiikan piirtämistä varten.
8 2.3 3D-näkymän rakenne ja määrittely Virtuaali-Frami -ohjelmiston rakenne koostuu näkymistä (scene), olioista (entity) sekä malleista (model). Näiden riippuvuus toisistaan on havainnollistettu kuvassa 2. Näkymä Olio Olio 3D-malli Näkymä Olio 3D-malli Kuva 2. 3D-maailman rakenne 3D-maailma koostuu yhdestä tai useammasta näkymästä. Jokainen näkymä sisältää yhden tai useamman olion. Olio on esiintymä, joka määrittelee 3Dmallin paikan ja aseman 3D-maailmassa. 3D-malleja voidaan käyttää yhdessä tai useammassa oliossa. Yksi olio voi kuulua vain yhteen näkymään. Virtuaali-Frami -ohjelmistossa näkymä kattaa yhden 3D-mallin, esimerkiksi aulan tai auditorion kolmiulotteiset mallit. Useimmissa tapauksissa yhden näkymän sisällä on vain yksi olio, joka on esiintymä kyseisestä 3D-mallista.
9 3D-malleista itsestään pidetään kirjaa erikseen. Tämä rakenne mahdollistaa saman mallin esittämisen eri paikoissa, useaan kertaan ilman että varsinaista 3D-geometriaa tarvitsee ladata useaan kertaan. 2.4 Näkymien vaihtaminen Näkymien välillä voi navigoida eli liikkua kolmiulotteisessa maailmassa. Tämä tarkoittaa, että esimerkiksi aulan näkymästä voidaan vaihtaa auditorioon. Näkymän vaihtaminen tapahtuu sulavasti vain liikkumalla 3Dmaailmassa sopivaan kohtaan, jolloin näkymä vaihtuu automaattisesti ja sulavasti. Tämä toimenpide tapahtuu käyttämällä nk. kuumia pisteitä. Kuuma piste on näkymätön piste, jolla on säde ja kohde. Ohjelma vertailee ajonaikaisesti sen hetkisen näkymän pisteitä laskemalla käyttäjän paikasta etäisyyden pisteeseen. Kun pisteelle määritellyn säteen etäisyys on suurempi kuin käyttäjän etäisyys pisteeseen, tapahtuu näkymän ja paikan vaihtaminen. Paikkaa voidaan vaihtaa joko saman näkymän sisällä tai eri näkymien välillä. Käytännössä tämä tapahtuu käyttäjän huomaamatta. Esimerkiksi kun käyttäjä lähestyy auditoriossa ovea ja joutuu kuuman pisteen lähelle, kuva pimenee mustaksi ja palaa takaisin nopeasti. Tässä välissä näkymä ja paikka on vaihtunut. Käyttäjä huomaa siirtyneensä uuteen paikkaan, esimerkiksi aulaan.
10 2.5 3D-mallien tuonti ohjelmistoon Virtuaali Frami -projektin 3D-mallit on toteutettu 3DS Max 7 - mallinnusohjelmiston avulla. Mallinnusohjelmistosta nämä 3D-mallit voidaan tuoda VRML-muodossa WWW-selaimella katsottavaksi. CAVE-ohjelmistossa käytetään ei voida suoraan käyttää VRMLtiedostomuotoa, vaan 3D-mallit tuodaan mallinnusohjelmistosta 3DStiedostomuodossa, jota ohjelmisto osaa käyttää hyväkseen. CAVEohjelmistossa 3D-mallin pinnoitteet, tekstuurit, muunnetaan VRMLselaimessa käytettävästä JPG-formaatista CAVE-ohjelmiston tukemaan RGB-formaattiin. Nämä 3DS-mallit määritellään tekstipohjaisen XML-kuvauskielen avulla asetustiedostoon. Samassa asetustiedostossa määritellään myös näkymät, oliot sekä kuumat pisteet.
11 3 Ohjelman käyttö 3.1 Ohjelman ajaminen CAVE-ohjelmisto on yksi kokonaisuus, sisältäen niin ohjelmiston, asetustiedoston, 3D-geometrian kuin pintojen materiaalit. Ohjelman on ajettavissa kohdealustalla (Onyx4) sekä CAVE-simulaattorin avulla Microsoft Windows -ympäristössä. Ohjelman käynnistäminen tapahtuu komentorivikomennolla framiviewer config.xml, jossa jälkimmäinen parametri on asetustiedoston nimi. Vaihtoehtosesti ohjelmalle voidaan määritellä etukäteen pikakuvake, jonka avulla se voidaan ajaa. Ohjelman lopettaminen tapahtuu ohjaustietokoneelta painamalla ESC-näppäintä. 3.2 Navigointi Ohjelmistossa kolmiulotteisessa maailmassa liikkuminen tapahtuu sauvaohjaimen avulla. Sauvaohjain on osoitinlaite, jonka avulla osoittamalla ja analogista painiketta eteenpäin painamalla voidaan liikkua 3D-näkymän sisällä. Liikkuminen itsessään on oletuksena lukittu sen hetkiseen lattiatasoon. 3.3 Painikkeet Ohjelmassa on määriteltynä kaksi toimintoa sauvaohjaimen painikkeille: Keskimmäistä painiketta painamalla ja samanaikaisesti liikkumalla eteen- tai taaksepäin 3D-näkymässä, käyttäjän vauhti kolminkertaistuu.
12 Oikeaa painiketta painamalla voidaan palata asetustiedostossa määriteltyyn aloitusnäkymään ja paikkaan. 3.4 Lento- ja kävelytila Kolmiulotteisessa maailmassa navigoiminen ja liikkuminen tapahtuu pääsääntöisesti kävelytilassa, jossa käyttäjän paikka on lukittu lattiatasoon. Tästä voidaan tehdä poikkeus asetustiedoston avulla, jolloin on mahdollista käyttää lentotilaa. Lentotila on käytännöllinen esimerkiksi Framirakennuksen ulkomallia tarkasteltaessa. Lento- ja kävelytilan välillä vaihtaminen tapahtuu automaattisesti ilman käyttäjän toimenpiteitä.
13 4 Käyttötapaukset 4.1 Navigointi lentotilassa Käyttäjä tarkastelee CAVE-tilassa näkymää Framin ulkopuolelta. Painamalla sauvaohjaimen keskellä sijaitsevaa mustaa palloa hän liikkuu sauvaohjaimen osoittamaan suuntaan. Kun hän lopettaa pallon painamisen, liike pysähtyy. Osoittamalla sauvaohjaimella ylöspäin, hän voi nousta ylös maan tasosta ja alaspäin hän lähestyy kohti maata. Käyttäjä lähestyy yhtä Framin A-siiven ovista, kunnes tarpeeksi lähelle päästyään tapahtuu siirtymä. Käyttäjä on nyt käytävällä. 4.2 Navigointi kävelytilassa Käyttäjä on käytävällä. Käyttävä voi liikkua käytävää pitkin ja käytössä on kävelytila. Käyttäjä havaitsee, että portaat ovat hyvän matkan päässä, jolloin hän painaa liikkuessaan eteenpäin samanaikaisesti keskimmäistä painiketta. Nopeus kasvaa ja käyttäjän saapuessa portaikkoon ja alkaessa nousta niitä, näkymä vaihtuu toiseen käytävään.
14 Liitteet Liite 1. Asetustiedoston muoto Frami-ohjelmiston tarkoituksena on luoda saumaton kokonaisuus eri mallien, mm. ulko- ja sisänäkymien välillä ja tarjota helppo ja vaivaton tapa liikkua näiden mallien välillä. Asetustiedostossa määritellään miten näitä malleja näytetään ja kuinka niissä liikutaan. Frami-malli koostuu useista eri näkymistä (scene), joita ovat mm. ulkomalli, käytävä ja eri blokit. Jokainen näkymä koostuu esityksistä (entity), jotka ovat yhden 3D-mallin esiintymiä. Tällä mahdollistetaan, että samasta 3D-mallista voi olla useita samanaikaisia esiintymiä yhdessä näkymässä. Ohjelma lataa oletuksena config/config.xml -asetustiedoston, jos komentorivillä ei määritellä toista asetustiedostoa. Ohjelmassa on valmiina määriteltynä asetustiedostot sekä Windows- että Irix-ympäristöille. 3D-mallien määrittely Mallinnusohjelmistosta tuodut 3DS/PFB-mallit määritellään modelelementillä. Model-elementti sisältää tiedot 3D-mallin tiedostonimestä sekä määrittelee nimen, jonka avulla esitys voi viitata malliin. Esimerkiksi: <model name = "model_corridor" file = "kaytava.3ds" />
15 Näkymän määrittely Näkymä on kokoelma esiintymiä 3D-malleista. Samasta 3D-mallista voi olla useampia eri esityksiä eri paikoissa (esimerkiksi tuolin 3D-mallia voidaan toistaa eri paikoissa, ilman että sitä ladataan useampaan kertaan). Lisäksi näkymä määrittelee ns. "kuumat pisteet" (hotspot), joiden avulla voidaan luoda sujuva liikkuminen mallista toiseen tai liikkuminen saman mallin sisällä paikasta toiseen. Esimerkki: <scene name = "scene_ulkoframi"> <entity...> <hotspot...> </hotspot> Olion määrittely 3D-mallia ei suoraan esitetä näkymässä vaan siitä luodaan olio, joka määrittelee missä malli sijaitsee ja miten se on asemoitunut. Olioita voi luoda useita eri malleista. Oliolle määritellään nimi ja malli mitä se käyttää. Malli on viite aiemmin määritellyn 3D-mallin nimeen. Olio sisältää kaksi alielementtiä, position ja orientation, jotka määrittelevät missä ja miten malli sijaitsee. Esimerkki: <entity name = "entity_ulkoframi" model = "model_ulkoframi">
16 Ylläoleva esimerkki määrittelee olion nimeltä entity_ulkoframi, joka käyttää asetustiedostossa määriteltyä mallia model_ulkoframi. Olio sijaitsee paikassa (0, 0, 0) ja sitä ei ole pyöritetty minkään akselin ympäri. Kuumien pisteiden määrittely Hotspotit ovat näkymättömiä palloja (source-elementti), Ohjelma tarkistaa jatkuvasti käyttäjän sijainnin ja tarkastaa onko käyttäjä pallon sisällä. Jos käyttäjä on pallon sisällä, tapahtuu siirtymä määriteltyyn näkymään ja asemaan (target). Esimerkki: <hotspot name = "hotspot_stairs"> <source radius=2.0 x=0.0 y=0.0 z=0.0 /> <target scene="scene_kale" x=0.0 y=-60.0 z=0.0 h=0.0 p=0.0 r=0.0 /> </hotspot>
17 Liite 2. Asetustiedosto <media path = "." /> <!-- viewer --> <viewer speed=5.0> <start scene="scene_outdoors"> </start> </viewer> <!-- models --> <model name = "model_block" file = "blokki.3ds" /> <model name = "model_lobby" file = "lobby.3ds" /> <model name = "model_c-corridor" file = "c-corridor.3ds" /> <model name = "model_auditorium" file = "auditorium.3ds" /> <model name = "model_a1" file = "a1-corridor.3ds" /> <model name = "model_a2" file = "a2-corridor.3ds" /> <model name = "model_outdoors" file = "outdoors.3ds" /> <model name = "model_a1301"file = "a1301.3ds" /> <model name = "model_a1303" file = "a1303.3ds" /> <model name = "model_a1404" file = "a1404.3ds" /> <model name = "model_a1507" file = "a1507.3ds" /> <model name = "model_a2201" file = "a2201.3ds" /> <model name = "model_a2203" file = "a2203.3ds" /> <model name = "model_a2205" file = "a2205.3ds" /> <model name = "model_a2405" file = "a2405.3ds" /> <model name = "model_teamroom" file = "teamroom.3ds" /> <!-- scene definitions --> <scene name = "scene_block" fly="no"> <entity name = "entity_block" model = "model_block"> <scene name = "scene_lobby" fly="no"> <entity name = "entity_lobby" model = "model_lobby"> <scene name = "scene_c-corridor" fly="no"> <entity name = "entity_c-corridor" model = "model_c-corridor"> <scene name = "scene_auditorium" fly="no"> <entity name = "entity_auditorium" model = "model_auditorium"> <hotspot name = "to_lobby"> <source radius=2.0 x=-6.65339 y=2.63769 z=0.6029 /> <target scene="scene_lobby" x=0.0 y=0.0 z=0.0 h=0.0 p=0.0 r=0.0 /> </hotspot> <scene name = "scene_a1" fly="no"> <entity name = "entity_a1" model = "model_a1"> <scene name = "scene_a2" fly="no"> <entity name = "entity_a2" model = "model_a2"> <scene name = "scene_outdoors" fly="no"> <entity name = "entity_outdoors" model = "model_outdoors"> <hotspot name = "to_lobby_north"> <source radius=2.0 x=37.1501 y=-34.841 z=0.0 /> <target scene="scene_c-corridor" x=39.1 y=-0.43 z=3.5 h=0.0 p=0.0 r=0.0 /> </hotspot> <hotspot name = "to_a1_south"> <source radius=2.0 x=51.3889 y=-12.059 z=0.0 /> <target scene="scene_a1301" x=-3.0 y=-9.75 z=-0.6 h=0.0 p=0.0 r=0.0 /> </hotspot> <hotspot name = "to_a1_middle"> <source radius=2.0 x=50.3391 y=26.9223 z=0.0 /> <target scene="scene_a1303" x=-3.0 y=-9.75 z=-0.6 h=0.0 p=0.0 r=0.0 /> </hotspot> <hotspot name = "to_a1_north"> <source radius=2.0 x=52.1047 y=75.0031 z=0.634112 /> <target scene="scene_a1404" x=-3.0 y=-9.75 z=-0.6 h=0.0 p=0.0 r=0.0 /> </hotspot> <scene name = "scene_a1301" fly="no"> <entity name = "entity_a1301" model = "model_a1301"> <scene name = "scene_a1303" fly="no"> <entity name = "entity_a1303" model = "model_a1303"> <scene name = "scene_a1404" fly="no"> <entity name = "entity_a1404" model = "model_a1404">
18 <scene name = "scene_a1507" fly="no"> <entity name = "entity_a1507" model = "model_a1507"> <scene name = "scene_a2201" fly="no"> <entity name = "entity_a2201" model = "model_a2201"> <scene name = "scene_a2203" fly="no"> <entity name = "entity_a2203" model = "model_a2203"> <scene name = "scene_a2205" fly="no"> <entity name = "entity_a2205" model = "model_a2205"> <scene name = "scene_a2405" fly="no"> <entity name = "entity_a2405" model = "model_a2405"> <scene name = "scene_teamroom" fly="no"> <entity name = "entity_teamroom" model = "model_teamroom"> <hotspot name = "to_lobby"> <source radius=2.0 x=-0.20434 y=-4.94508 z=-1.33538 /> <target scene="scene_lobby" x=0.0 y=0.0 z=0.0 h=0.0 p=0.0 r=0.0 /> </hotspot>