Using game engines for 3D geospatial development
CC Attribution 3.0 Unported:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor.
Kalberer, Pirmin
When it comes to 3D graphics, computer games have been the technical leaders for decades. The game engines behind it have only recently been discovered by GIS manufacturers. This talk introduces game engines in general and the leading open source game engine Godot in detail. It also shows the status of integrating GIS data, which will play an increasingly important role in the age of AR and VR.
 Well, we are continuing. The next one is the presentation of PeerMean. PeerMean is a geospatial software developer since more than five, fifteen years. He has contributed to JDAL, FUJSTORX and several other projects. PeerMean is a computer-absorbed support, a Swiss company providing JD services and solutions. So we welcome PeerMean and we are going to start your presentation. Just one second and here we go. We also have WebJS and other OSGO projects. Welcome to my talk about game engines and using it for 3D geospatial development. My name is PeerMikhalberer, I work for SourcePole. We located in Zurich. We are doing software development for QJS, WebJS and other OSGO projects. Let's look first at the typical 3D viewer in the web. So that's a typical city view in the web browser. Let's compare that to modern games running on a PC. The first game is also playing in a city. It's doing real-time rendering of city with moving cars. You can freely move within the city and stream and render online. The next game is about rendering landscapes. The story is Viking times. Here you see nice trees, wood rendering, nice landscapes, water and so on. Then a classical game, Flight Simulator. That's the new edition of the Microsoft Flight Simulator. Also city display, city rendering from high above and looking into the city. So this was a comparison with recent games, which is not fair in many senses. But the question of this talk is how could we use this game engine technology? A few years ago game engines started to pop up that this game studio published their engine. Here is a collection of important game engines. The number one is the Unreal engine from Epic Games. It's free to use, but you pay royalty after 1 million cross-revenue. The second one is Unity, which is free for personal use and then has license per seat and you pay per year for commercial games. The third one is an open-source engine, Godot. It's community-based but also has funded developers. Currently about 10. It has about 20,000 daily active users, 1-2 million installations, more than 5,000 games on each I.O. 1,300 contributors, 30 core developers. So it's quite a big project. Godot has a graphical user interface for 2D and 3D but also text editors for programming. It runs on Linux, Mac OS and Windows. It's a tiny binary. It's based on notes and scenes, supports 2D and 3D, has an animation system and is programmable either in the built-in scripting language, which is similar to Python or with GD-native, you can program in C-sharp or C++ and others. And it has also a visual scripting interface. It has login, debugging, profiling, it has XR support, it exports to several platforms, so again Linux, Mac, Windows but also Android and iPhone and also VASM exports for the web browser. I prepared a demo to show how Godot looks and how it is working with Godot. I start with a basic cube scene with a camera. Here is the preview of the camera and when I can play this scene, not much happens, so it's a cube. With the background and what I want to do next, I want to add physics to this cube, so I change the note type from the regular notes to a rigid body and then it warns me that I need a collision shape, so I add one. I have to add, create a box shape and then set the size of the box. Now I have a collision and physics of a cube, so what happens now, it falls down quite slowly, so I want to make it a little bit more dynamic. I increase the mass or weight of the cube, increase the gravity and set the initial speed. So it's falling quicker. So that's my cube and now I want to have a Tira. There is an interesting website for that, the region API, where you can extract parts of DEM and add OpenStreetMap data. So here I'll set the imagery, OSM settings, buildings and roads and extract it as glTF. That's a scene format, so I have this scene already here, this folder, I open it and the scene gets imported, consists of multiple layers, one is this road layer, another one the building layer and the terrain layer with the aerial imagery on it. It's a mesh layer and what I have to do first is I have to reduce the size and here I have to add some more view in set direction and now I can start adapting the style, I add a material for the roads, simple color setting, that's for the roads and the same for the building layer, I add a material and set the base color. So I save the scene and next step is adding the scene to the main scene, so let's see the scene with the cube and the camera and here it's combined and I have also to adapt the view settings and now let's see what happens. The cube is falling and it's falling into the terrain, I show it again. So what we need now is to add a collision shape for the terrain and in the mesh options I have possibilities to add a collision shape, I'm creating one, you see the lines, I'm the viewer, I collect this collision shape into a node, I have a better organization, I use a static body and then I can collapse and hide it. So now we run the scene again and we see a physical reaction of the cube, so that's all made without any code, that's just a physics engine of Godot and the last step I want to add some code, I attach a script, create a new script, that's scripting language of Godot which looks similar to Python, I start with a constant which is the initial scene which is loaded here, that's this cube scene, so essentially the cube and then I write a function for keyboard input, I have to catch events, use events and if it's a key press, the space key press, I call this function throwCube which I write right now, so that's the main function, I create a new box variable which is an instance of this cube scene, so I create a new instance and add this instance to the current scene, that's the whole script and now let's see how it works, so it's falling down, now press space and new cubes appear and roll down independently. So this was the Godot demo, you saw there was different terminology, this game engine so when we speak about Rossa data in GIS, that's usually sprites or textures, vector data or meshes, different formats, point clouds, all the meshes or 3D tiles, styling is usually done as material with textures or other parameters and we have containers, scenes, one of the scene formats is GLTF we used here, the next slide is about OTC standards in the area of 3D, so there's CTGML and latest one CTJSON which are an OTC standard and then we have two community standards, the first one from Acery is the index 3D scene layer and the other one are 3D tiles from Cesium, they have similar capabilities, 3D tiles is more based on GLTF but it's about models, buildings, points and so on. This GLTF scene format is maintained by the Chronos group and the question now is how do you build such a detailed 3D model and the main software in this area is Blender which is one of the best tools for creating 3D art and in comparison to Godot, Blender is made for scene creation, it has sculpting and other creation tools, it has high quality rendering so it's not uncommon to render for days for one scene to have the best available quality, there are animation tools and usually the final product is an image or a video animation and Godot is made to be programmable for interactive scenes, interactive applications, it's well suited for XR applications, has run times for multiple platforms, desktop, mobile and web and the final product is an interactive application. Most of these things can also be done by Blender but Godot is made for that. And here are some activities on the GIS side, so Esri has published ArchGiz, Maps SDK for Unity and for Unreal, last autumn and Cesium has published Cesium for Unreal this year, so there are two major companies or two major products for game engines bringing GIS data into game engines and on OGC side there is currently a revision of the E3S Community Standard and an RFC of GML3.0 and there are also other activities like Sprints in this area. What could be done or what is available for using GIS data in Godot, there is this Elevation API I just used in the demo which has a web application but this also standalone, there are OSM data as we saw and the second one is the HateMap t-replugin which optimizes meshes from DEMs and it has advanced shaders for surfaces, grouse shaders for rock shaders and so on and that's available as an open source plugin for Blender. Then there is another plugin called Geo. which is based on GDAL and imports Geo data into Godot also an open source plugin and is used for instance for this Landscape Lab application where we can place objects in Landscape and see it rendered in 3D. What could be done in this area in the future, a few ideas for Godot, there are many interesting formats which are not supported yet, Flaggillbuff is interesting, Cocktiff, Geo package but also 3D tile support I would wish for Godot and CAD formats, BIM formats would be interesting, there is a BIM plugin for Blender but would be interesting to have a direct import in Godot as well, then another idea would be a good city GML converter which directly creates scenes usable in Godot and a dream of me would also be a 3D preparation pipeline using OSM data, there are many scattered projects but the common 3D OSM pipeline would be very interesting and there is a different area procedural city modeling which could be interesting and also exchanging textures, models and so on, so a platform for sharing models in this area would be interesting. So what are the applications, we saw a few of them, Landscape planning, City planning, Landscape planning but also indoor navigation or outdoor navigation especially with augmented reality, you could display historical data in 3D and you could do GIS with virtual reality user interaction, GIS functionality like measurement, shadow analysis, visibility analysis with augmented reality or virtual reality or simply GPU based GIS calculations which could improve performance a lot. So this was my short introduction into game engines and its use with GIS data, thank you.
 Well, we are continuing.  The next one is the presentation of PeerMean.  PeerMean is a geospatial software developer since more than five, fifteen years.  He has contributed to JDAL, FUJSTORX and several other projects.  PeerMean is a computer-absorbed support, a Swiss company providing JD services and solutions.  So we welcome PeerMean and we are going to start your presentation.  Just one second and here we go.  We also have WebJS and other OSGO projects.  Welcome to my talk about game engines and using it for 3D geospatial development.  My name is PeerMikhalberer, I work for SourcePole.  We located in Zurich.  We are doing software development for QJS, WebJS and other OSGO projects.  Let's look first at the typical 3D viewer in the web.  So that's a typical city view in the web browser.  Let's compare that to modern games running on a PC.  The first game is also playing in a city.  It's doing real-time rendering of city with moving cars.  You can freely move within the city and stream and render online.  The next game is about rendering landscapes.  The story is Viking times.  Here you see nice trees, wood rendering, nice landscapes, water and so on.  Then a classical game, Flight Simulator.  That's the new edition of the Microsoft Flight Simulator.  Also city display, city rendering from high above and looking into the city.  So this was a comparison with recent games, which is not fair in many senses.  But the question of this talk is how could we use this game engine technology?  A few years ago game engines started to pop up that this game studio published their engine.  Here is a collection of important game engines.  The number one is the Unreal engine from Epic Games.  It's free to use, but you pay royalty after 1 million cross-revenue.  The second one is Unity, which is free for personal use and then has license per seat  and you pay per year for commercial games.  The third one is an open-source engine, Godot.  It's community-based but also has funded developers.  Currently about 10.  It has about 20,000 daily active users, 1-2 million installations, more than 5,000 games  on each I.O.  1,300 contributors, 30 core developers.  So it's quite a big project.  Godot has a graphical user interface for 2D and 3D but also text editors for programming.  It runs on Linux, Mac OS and Windows.  It's a tiny binary.  It's based on notes and scenes, supports 2D and 3D, has an animation system and is programmable  either in the built-in scripting language, which is similar to Python or with GD-native,  you can program in C-sharp or C++ and others.  And it has also a visual scripting interface.  It has login, debugging, profiling, it has XR support, it exports to several platforms,  so again Linux, Mac, Windows but also Android and iPhone and also VASM exports for the web  browser.  I prepared a demo to show how Godot looks and how it is working with Godot.  I start with a basic cube scene with a camera.  Here is the preview of the camera and when I can play this scene, not much happens, so  it's a cube.  With the background and what I want to do next, I want to add physics to this cube,  so I change the note type from the regular notes to a rigid body and then it warns me  that I need a collision shape, so I add one.  I have to add, create a box shape and then set the size of the box.  Now I have a collision and physics of a cube, so what happens now, it falls down quite slowly,  so I want to make it a little bit more dynamic.  I increase the mass or weight of the cube, increase the gravity and set the initial speed.  So it's falling quicker.  So that's my cube and now I want to have a Tira.  There is an interesting website for that, the region API, where you can extract parts  of DEM and add OpenStreetMap data.  So here I'll set the imagery, OSM settings, buildings and roads and extract it as glTF.  That's a scene format, so I have this scene already here, this folder, I open it and the  scene gets imported, consists of multiple layers, one is this road layer, another one  the building layer and the terrain layer with the aerial imagery on it.  It's a mesh layer and what I have to do first is I have to reduce the size and here I have  to add some more view in set direction and now I can start adapting the style, I add  a material for the roads, simple color setting, that's for the roads and the same for the  building layer, I add a material and set the base color.  So I save the scene and next step is adding the scene to the main scene, so let's see  the scene with the cube and the camera and here it's combined and I have also to adapt  the view settings and now let's see what happens.  The cube is falling and it's falling into the terrain, I show it again.  So what we need now is to add a collision shape for the terrain and in the mesh options  I have possibilities to add a collision shape, I'm creating one, you see the lines, I'm  the viewer, I collect this collision shape into a node, I have a better organization,  I use a static body and then I can collapse and hide it.  So now we run the scene again and we see a physical reaction of the cube, so that's  all made without any code, that's just a physics engine of Godot and the last step I want to  add some code, I attach a script, create a new script, that's scripting language of  Godot which looks similar to Python, I start with a constant which is the initial scene  which is loaded here, that's this cube scene, so essentially the cube and then I write a  function for keyboard input, I have to catch events, use events and if it's a key press,  the space key press, I call this function throwCube which I write right now, so that's  the main function, I create a new box variable which is an instance of this cube scene, so  I create a new instance and add this instance to the current scene, that's the whole script  and now let's see how it works, so it's falling down, now press space and new cubes appear  and roll down independently.  So this was the Godot demo, you saw there was different terminology, this game engine  so when we speak about Rossa data in GIS, that's usually sprites or textures, vector  data or meshes, different formats, point clouds, all the meshes or 3D tiles, styling is usually  done as material with textures or other parameters and we have containers, scenes, one of the  scene formats is GLTF we used here, the next slide is about OTC standards in the area of  3D, so there's CTGML and latest one CTJSON which are an OTC standard and then we have  two community standards, the first one from Acery is the index 3D scene layer and the  other one are 3D tiles from Cesium, they have similar capabilities, 3D tiles is more based  on GLTF but it's about models, buildings, points and so on.  This GLTF scene format is maintained by the Chronos group and the question now is how do  you build such a detailed 3D model and the main software in this area is Blender which  is one of the best tools for creating 3D art and in comparison to Godot, Blender is made  for scene creation, it has sculpting and other creation tools, it has high quality rendering  so it's not uncommon to render for days for one scene to have the best available quality,  there are animation tools and usually the final product is an image or a video animation  and Godot is made to be programmable for interactive scenes, interactive applications, it's well  suited for XR applications, has run times for multiple platforms, desktop, mobile and  web and the final product is an interactive application.  Most of these things can also be done by Blender but Godot is made for that.  And here are some activities on the GIS side, so Esri has published ArchGiz, Maps SDK for  Unity and for Unreal, last autumn and Cesium has published Cesium for Unreal this year,  so there are two major companies or two major products for game engines bringing GIS data  into game engines and on OGC side there is currently a revision of the E3S Community  Standard and an RFC of GML3.0 and there are also other activities like Sprints in this  area.  What could be done or what is available for using GIS data in Godot, there is this Elevation  API I just used in the demo which has a web application but this also standalone, there  are OSM data as we saw and the second one is the HateMap t-replugin which optimizes  meshes from DEMs and it has advanced shaders for surfaces, grouse shaders for rock shaders  and so on and that's available as an open source plugin for Blender.  Then there is another plugin called Geo. which is based on GDAL and imports Geo data into  Godot also an open source plugin and is used for instance for this Landscape Lab application  where we can place objects in Landscape and see it rendered in 3D.  What could be done in this area in the future, a few ideas for Godot, there are many interesting  formats which are not supported yet, Flaggillbuff is interesting, Cocktiff, Geo package but  also 3D tile support I would wish for Godot and CAD formats, BIM formats would be interesting,  there is a BIM plugin for Blender but would be interesting to have a direct import in  Godot as well, then another idea would be a good city GML converter which directly creates  scenes usable in Godot and a dream of me would also be a 3D preparation pipeline using OSM  data, there are many scattered projects but the common 3D OSM pipeline would be very interesting  and there is a different area procedural city modeling which could be interesting and also  exchanging textures, models and so on, so a platform for sharing models in this area  would be interesting.  So what are the applications, we saw a few of them, Landscape planning, City planning,  Landscape planning but also indoor navigation or outdoor navigation especially with augmented  reality, you could display historical data in 3D and you could do GIS with virtual reality  user interaction, GIS functionality like measurement, shadow analysis, visibility analysis with  augmented reality or virtual reality or simply GPU based GIS calculations which could improve  performance a lot.  So this was my short introduction into game engines and its use with GIS data, thank you.
FOSS4G_-_Using_game_engines_for_3D_geospatial_deve_9O1J_8eKovc_0_131.png FOSS4G_-_Using_game_engines_for_3D_geospatial_deve_9O1J_8eKovc_132_1355.png FOSS4G_-_Using_game_engines_for_3D_geospatial_deve_9O1J_8eKovc_1356_2843.png FOSS4G_-_Using_game_engines_for_3D_geospatial_deve_9O1J_8eKovc_2844_2987.png FOSS4G_-_Using_game_engines_for_3D_geospatial_deve_9O1J_8eKovc_2988_3167.png FOSS4G_-_Using_game_engines_for_3D_geospatial_deve_9O1J_8eKovc_3168_3215.png FOSS4G_-_Using_game_engines_for_3D_geospatial_deve_9O1J_8eKovc_3216_3383.png FOSS4G_-_Using_game_engines_for_3D_geospatial_deve_9O1J_8eKovc_3384_3467.png FOSS4G_-_Using_game_engines_for_3D_geospatial_deve_9O1J_8eKovc_3468_3611.png FOSS4G_-_Using_game_engines_for_3D_geospatial_deve_9O1J_8eKovc_3612_3815.png FOSS4G_-_Using_game_engines_for_3D_geospatial_deve_9O1J_8eKovc_3816_4151.png FOSS4G_-_Using_game_engines_for_3D_geospatial_deve_9O1J_8eKovc_4152_7391.png FOSS4G_-_Using_game_engines_for_3D_geospatial_deve_9O1J_8eKovc_7392_9575.png FOSS4G_-_Using_game_engines_for_3D_geospatial_deve_9O1J_8eKovc_9576_9839.png FOSS4G_-_Using_game_engines_for_3D_geospatial_deve_9O1J_8eKovc_9840_11015.png FOSS4G_-_Using_game_engines_for_3D_geospatial_deve_9O1J_8eKovc_11016_11987.png FOSS4G_-_Using_game_engines_for_3D_geospatial_deve_9O1J_8eKovc_11988_12143.png FOSS4G_-_Using_game_engines_for_3D_geospatial_deve_9O1J_8eKovc_12144_12527.png FOSS4G_-_Using_game_engines_for_3D_geospatial_deve_9O1J_8eKovc_12528_15719.png FOSS4G_-_Using_game_engines_for_3D_geospatial_deve_9O1J_8eKovc_15720_17159.png FOSS4G_-_Using_game_engines_for_3D_geospatial_deve_9O1J_8eKovc_17160_18479.png FOSS4G_-_Using_game_engines_for_3D_geospatial_deve_9O1J_8eKovc_18480_19895.png FOSS4G_-_Using_game_engines_for_3D_geospatial_deve_9O1J_8eKovc_19896_32831.png FOSS4G_-_Using_game_engines_for_3D_geospatial_deve_9O1J_8eKovc_32832_33209.png