         @head = head ? new @context.GameObject
         @head.set_rotation_order 'Q'
         @scene.add_object @head
-        @head.parent_to @scene.active_camera, false
+        # @head.parent_to @scene.active_camera, keep_transform: false
+        for ob in @scene.active_camera.children
+            ob.parent = @head
         if use_room_scale_parent
-            @head.parent_to @scene.active_camera.parent, true
+            @head.parent_to @scene.active_camera.parent, keep_transform: true
         @frame_data = new VRFrameData
         @old_pm0 = mat4.create()
         @left_orientation = quat.create()
         @right_orientation = quat.create()
         @last_time = performance.now()
         @use_unpredict = use_unpredict and @HMD.displayName == 'OpenVR HMD'
+        if not /Oculus/.test @HMD.displayName
+            @is_wmr = true # we'll set it to false when we detect velocity
         @sst = mat4.create()
         @sst_inverse = mat4.create()
         @sst3 = mat3.create()
         if use_room_scale_parent
-            mat4.copyArray @sst, @HMD.stageParameters.sittingToStandingTransform
-            mat4.invert @sst_inverse, @sst
-            mat3.fromMat4 @sst3, @sst
+            @update_room_matrix()
         # @to_Z_up = mat4.new 1,0,0,0, 0,0,1,0, 0,-1,0,0, 0,0,0,1
         # left eye viewport
-        camera = left_cam = @scene.active_camera.clone()
+        camera = left_cam = @scene.active_camera.clone recursive: false
         camera.rotation_order = 'Q'
         mat4.identity camera.matrix_parent_inverse
         quat.identity camera.rotation

            use_room_scale_parent=true
            use_unpredict=true
            head
        } = options
        if use_room_scale_parent and not @scene.active_camera.parent?
            throw Error "use_room_scale_parent requires the camera to have a
                parent. Add a parent or set use_room_scale_parent to false
                for a seated experience controller by the original camera."
        if use_room_scale_parent \
            and not @HMD.stageParameters?.sittingToStandingTransform?
                use_room_scale_parent = false
        @context.vr_screen = this
        @canvas = @context.canvas
        {@framebuffer} = @context.canvas_screen

        @viewports[1].camera._update_matrices()
        mat4.copyArray pm0, leftProjectionMatrix
        mat4.copyArray pm1, rightProjectionMatrix
        #TODO: detect headset
        # pm0.m09 = -pm0.m09
        # pm1.m09 = -pm1.m09
        if not mat4.equals pm0, @old_pm0
            # culling planes need to be updated
            mat4.invert @viewports[0].camera.projection_matrix_inv, pm0
