Monialustainen kontitettu palvelinratkaisu 3D-ympäristössä sijaitsevan reaaliaikaisen datan esittämiseen
Kuokkanen, Mikael (2021)
Kuokkanen, Mikael
2021
All rights reserved. This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-202105168843
https://urn.fi/URN:NBN:fi:amk-202105168843
Tiivistelmä
Insinöörityön tarkoituksena oli toteuttaa kehitteillä olevaan PWA-sovellukseen (Progressive Web Application) integroitavissa oleva palvelinratkaisu jo olemassa olevalle reaaliaikaista dataa havainnollistavalle digitaalisen kaksosen (digital twin) Unity-projektille sekä jatkokehittää kyseistä projektia. Toteutuksessa pyrittiin myös tarjoamaan moninpelimuotoinen alustariippumaton interaktiivinen kokemus, jossa Unity-projektissa pystyisi reaaliaikaisen datan tarkastelun lisäksi sekä liikkumaan että olemaan jollain tapaa vuorovaikutuksessa muiden pelaajien kanssa.
Moninpelimuoto toteutettiin Unityn Mirror-kirjastoa käyttäen, ja eri versioille rakennettiin WebGL-alustalle aihiot, jotka pakattiin Docker-konttialustaa käyttäen Microsoft Azure -julkaisuympäristössä suoritettaviksi konteiksi. Docker-image-tiedostojen rakennus- ja julkaisuprosessi toteutettiin automatisoidusti GitHub Actions -palvelussa.
Projektissa käytetty 3D-malli todettiin kaiken optimoinnin jälkeen liian raskaaksi suorittaa selaimessa, joten interaktiivisten WebGL-versioiden sijaan päätettiin, että PWA-sovellukseen integroitava osuus tulisi olemaan vain reaaliaikainen suoratoisto projektiin tehdystä automatisoidusta ylilennosta, jossa reaaliaikaista dataa havainnollistetaan. Tämän lisäksi WebGL-versiot muunnettiin natiivimuotoisiksi ladattavissa oleviksi erillisiksi interaktiivisiksi sovelluksiksi.
Unity-projektin suoratoisto mahdollistettiin sulauttamalla siihen FFmpeg-multimediatyökalu, jota käyttäen lähetettiin projektissa renderöityä kuvaa RTMP-protokollalla sitä vastaanottavalle NGINX-palvelimelle. Palvelin konfiguroitiin julkaisemaan HLS-soittolistaa (HTTP Live Streaming) React-kirjastolla tehdyn asiakasohjelman käyttöön, josta suoraa lähetystä pystyi toistamaan verkkoselaimessa.
Insinöörityössä opituista käytännöistä saatiin selville suoratoiston kokonaisvaltaisen palvelun toteuttamisen monimutkaisuus sekä suurten 3D-mallien renderöimisen haasteet. Projektissa käytetty konttipohjainen ketterä kehitysmalli oli sekä arvokas oppi tekijän saaman taitotiedon että projektin jatkokehitysmahdollisuuksien kannalta. Tuloksena syntyi toimiva uudelleenkäytettävissä oleva ratkaisu.
Moninpelimuoto toteutettiin Unityn Mirror-kirjastoa käyttäen, ja eri versioille rakennettiin WebGL-alustalle aihiot, jotka pakattiin Docker-konttialustaa käyttäen Microsoft Azure -julkaisuympäristössä suoritettaviksi konteiksi. Docker-image-tiedostojen rakennus- ja julkaisuprosessi toteutettiin automatisoidusti GitHub Actions -palvelussa.
Projektissa käytetty 3D-malli todettiin kaiken optimoinnin jälkeen liian raskaaksi suorittaa selaimessa, joten interaktiivisten WebGL-versioiden sijaan päätettiin, että PWA-sovellukseen integroitava osuus tulisi olemaan vain reaaliaikainen suoratoisto projektiin tehdystä automatisoidusta ylilennosta, jossa reaaliaikaista dataa havainnollistetaan. Tämän lisäksi WebGL-versiot muunnettiin natiivimuotoisiksi ladattavissa oleviksi erillisiksi interaktiivisiksi sovelluksiksi.
Unity-projektin suoratoisto mahdollistettiin sulauttamalla siihen FFmpeg-multimediatyökalu, jota käyttäen lähetettiin projektissa renderöityä kuvaa RTMP-protokollalla sitä vastaanottavalle NGINX-palvelimelle. Palvelin konfiguroitiin julkaisemaan HLS-soittolistaa (HTTP Live Streaming) React-kirjastolla tehdyn asiakasohjelman käyttöön, josta suoraa lähetystä pystyi toistamaan verkkoselaimessa.
Insinöörityössä opituista käytännöistä saatiin selville suoratoiston kokonaisvaltaisen palvelun toteuttamisen monimutkaisuus sekä suurten 3D-mallien renderöimisen haasteet. Projektissa käytetty konttipohjainen ketterä kehitysmalli oli sekä arvokas oppi tekijän saaman taitotiedon että projektin jatkokehitysmahdollisuuksien kannalta. Tuloksena syntyi toimiva uudelleenkäytettävissä oleva ratkaisu.