As part of the Godot 3 release, Godot got official support for VR headsets using Cardboard, SteamVR and OpenHMD interfaces implemented using the new GDNative functionality in Godot. Today I decided to test it using my Samsung Odyssey HMD a Windows Mixed Reality headset that has beta compatibility with SteamVR. I personally had very little hope for things to go smoothly… boy was I wrong. What follows is a step by step guide to using VR in Godot. This whole process is made possible by the hard work of Bastiaan Olij, his Godot 3 OpenVR project is available here.
First, we assume that you are using Godot 3 or higher. If you havent already installed Godot 3 or higher, go do so now.
Next, create a new project, the specifics really don’t matter. There are a few requirements, every scene must have a ARVRCamera and the camera must have an ARVROrigin as it’s parent. I start with the following setup:
The ARVROrigin only has one property, the world scale. The ARVRCamera has several more options such as FoV, an Environment and more. For now the defaults are fine. Next we need to do a small bit of code to run the VR server. Attach a script to the root node and add the following code to _ready:
func _ready(): var vr = ARVRServer.find_interface("OpenVR") if(vr and vr.initialize()): get_viewport().arvr = true get_viewport().hdr = false
And… done! Really, that’s it. Add a few objects to your scene under the ARVROrigin. Plugin in your headset and press play. At this point in time your scene should render on your headset and you should already have head tracking enabled!
Next up, let’s go ahead and install the OpenVR functionality. First select the AssetLib tab:
Now search for VR and select OpenVR module:
Click the install button. Then once downloaded, click install again:
Now click Install once again and addons will be copied to your project including all of the dlls and scenes we need.
Next it’s time to implement some controller logic. You could implement them yourself using ARVRController, or you can let someone else do the hard work! With ARVROrigin selected, right click and select Instance Child Scene…
Navigate into the module we installed earlier into the folder addons/godot-openvr/scenes and select ovr_controller.tscn.
Next you can add default behavior to the controller you just created. Right click the newly created controller node, instance child scene and this time select Function_Pointer.tscn. Your scene should now look like:
At this point you now have a 3D game with full head tracking, a single controller with pointer functionality. Pretty awesome! For even more functionality you can implement another controller, attach teleport controls to it and you will have the ability to move around. Next replace your camera with a ovr_first_person scene and presto, you’ve got a VR game!
If you’d prefer the video version check here (or embedded below):