Scroll down to the “Try the ISS VR Experience” section for the web demonstration link and the download link for the Windows standalone version which will work in flat screen mode or in VR if you have an Oculus Rift attached.
I posted before on the creation of a Virtual Reality Experience Spacewalk at the International Space Station (ISS) which was initially built while watching the NASA TV coverage of the launch of UK astronaut Tim Peake on 15th December 2015… a Space VR experience originally created in 10 minutes… using 3D models from NASA. But then I took some time afterwards to refine it a bit, add astronaut transfer and supply spacecraft, and further explore VR elements, gamepad control and the WebGL player. This post gives more details of what was added and includes images from the refined version. This took quite a bit longer than the 10 minutes it took to create the initial experience!
Creating the ISS VR Experience
- A useful “Getting Started with Unity” tutorial is available at here.
- Create a new Unity Project which usually adds a main camera and directional light. I set shadows on that light to “hard”. I add in a solid plane at 0,0,0 to act as a physics base so avatars do not drop through to infinity, and make that not show by unticking it’s “Mesh Renderer”. Add the Unity Standard Assets for Characters and add into the project a Third Person Controller such as the standard Ethan model. I usually use a predefined project base that gives me this setup to start new projects quickly, and includes an avatar controller that allow for flying and vertical motion too).
E.g., see “Project Base for OAR Converter Projects” section in
- Replace the avatar visual model with an Astronaut in Extravehicular Activity (EVA) mode. E.g. using 3D Astronaut Nr 1 (Collada .dae format) by Max Grueter and Byr2008 or the Extravehicular Mobility Unit (EMU) from http://nasa3d.arc.nasa.gov/detail/emu (.3ds format). Add this as the visual model for 3rd Person Avatar Controller (e.g. Ethan) and then scale and position it appropriately. Turn off the normal avatar visual model. You may need to turn off the “Mesh Collison” component for all the 3D parts within the EMU model to avoid any reported rigged mesh issues for the avatar in Unity 5.
- Add a suitable 3D model of the International Space Station. I used a detailed FBX version from http://nasa3d.arc.nasa.gov/detail/iss placed, say, 50m above the solid plane. The solar panels on this model can be selected in the Unity editor and rotated appropriately to face the directional light (acting as the Sun). The heat radiators should be in shadow or faced away from the sun for realism.
- Add-on spacecraft using Collada downloads via the 3D Warehouse and I found these needed to be scaled to 0.025 to fit with the ISS model I used:
- Cygnus Supply Vehicle by manboy and nebarnix .stl format file converted to .dae or .obj (e.g. via http://www.greentoken.de/onlineconv/) and resized to 0.025.
- Add a suitable Skybox to the Main Camera… via Free Earth Skybox – Hugo Peters.
Downloads of the unity packages are available at: v1, v2 [local version as unitypackage], higher resolution v3
- To add light flares use Assets -> Import Package -> Effects to bring in the Unity Standard Assets. Add an empty Game Object and name it “Flare” and to that add a component for Effects -> Light Flare. Drop the “50mmZoom” standard asset light flare onto it’s flare slot and perhaps make the colour a pale yellow for the sun. Carefully align the lens flare to the directional light, so they behave realistically. I set the directional light and light flare to originate from the opposite side of the ISS to the daytime lit Earth disk, ensuring that the ISS solar panels face towards the light source.
- By default a gamepad or joystick controller or joystick will act as an alternative for movement of the avatar. But gamepad/joystick up and down control may need to be added, e.g. on the left and right “bumpers” which for an Xbox 360 controller are “joystick button 4” and “joystick button 5” (see here for details).
- I also added code to quit the experience if the “esc” or “q” keys are pressed (note that this only works in the standalone .exe build not when run in the web player or unity editor).
- Added background sound, e.g. from http://soundbible.com/143-Astronaut-Breathing.html
Astronaut Breathing recorded by Mike Koenig.
- To use the Oculus Rift, remember to go into Build Settings -> Player Settings and tick “Virtual Reality Supported”. That’s all that is needed to enable the use of the Rift for a VR Experience.
Configuration depicted in the ISS VR Experience with Soyuz TMA-19M Docked
Please note that the ISS VR Experience uses complex 3D models and will need a computer with reasonable performance and a good graphics card.
Try a Unity Web Player version of the experience in most web browsers at
Mac users will need to use Fn+UpArrow and Fn+DownArrow for the keys needed to allow the astronaut avatar to move up and down.
Or, if you have an Oculus Rift, try a Windows (64 bit) standalone executable (.exe) version which should work with or without the Oculus Rift by obtaining the ZIP file
Unzip it, and run the .exe file. You can use the arrow keys, page up and page down to move about. If you have a game controller attached, the left stick should move the astronaut, and the right and left bumpers will move you up and down. You can quit the experience using either the “q” or “esc” keys.
Since these experiences are made available directly, rather than via the “Oculus Home” store you might need to “Allow Apps from Unknown Sources” in Oculus Home to enable them to run on the consumer versions of the Oculus Rift… see here for instructions.
Using a suitable browser, such as Firefox, try a WebGL version of the experience at
This has been built with the WebGL Player “Publishing Settings” Memory set at 1024MB, rather than the default 256MB… 512MB was also insufficient… and it may still run out of memory when you try it. Exception reporting is also turned to “None” versus the default “Explicitly Thrown” default. On our Linux Apache server we found that the gzipped compressed file handling setup in the Unity default WebGL HTML and the renaming setup in the .htaccess file generated via Unity build did not work without changing the three resource lines included in the index.html to explicitly add in the gz versions. I am still experimenting with WebGL.