禁用Unity中SteamVR摄像头的头部跟踪?

时间:2017-07-07 21:47:03

标签: unity3d steam virtual-reality openvr

我正在尝试使用两台相机为我的VR播放器开发HUD。一个是静止摄像头,指向深度= 1的HUD对象,另一个是深度= 0的主摄像头,它跟踪HMD并将HUD覆盖在其上。

然而,Unity,SteamVR或OpenVR迫使我的相机跟踪播放器的HMD。经过详尽的搜索后,我无法找到任何方法来阻止这种行为。然后我试着把我所有的HUD物体都放到我的HUD相机上,并希望最好。

这导致所有HUD对象中出现不希望的抖动:

项目层次结构:

[WorldHUD]
    |__ Container (HUD) 
        |__ Camera (eye)
            |__ TextMesh (Status) <- Is child of camera

[CameraRig]
    |__ Camera (Head) 
        |__ Camera (eye)

[SteamVR]

我相信我真的需要控制相机的变换,所以我可能会阻止它移动或阻止它跟踪玩家的HMD。

我尝试更新Update()LateUpdate()中的相机位置,但这没有任何影响。我还花了很多时间修改/调试没有正面结果的SteamVR和OVR脚本,并且摄像头从未停止跟踪。

我尝试在我的相机父母身上使用this suggested script

NegateTracking.cs:

using UnityEngine;
using UnityEngine.VR;

public class NegateTracking : MonoBehaviour
{
    void LateUpdate()
    {
        transform.position = -InputTracking.GetLocalPosition(VRNode.CenterEye);
        transform.rotation = Quaternion.Inverse(InputTracking.GetLocalRotation(VRNode.CenterEye));
    }
}

这导致相机指向一个方向但仍然翻译了一下。然而,我注意到事情看起来更加波动,并且觉得我使用它错了或者仅仅是不够。

我现在回来寻找在某些相机上禁用头部跟踪的方法,以便我能够将它们放置在我的场景中。

有谁知道SteamVR / OpenVR如何控制这些相机的变换?有没有办法禁用或覆盖此行为?

谢谢。

2 个答案:

答案 0 :(得分:1)

所以,只花了一整夜开发一个功能性的解决方法,并将一个使用一点后期处理魔法的项目组合在一起,基本上是#欺骗&#34;固定的相机。我的想法是从自定义立体摄像机设置生成两个renderTextures,这两个摄像机设置包括两个未被跟踪的独立摄像机(允许控制位置,旋转,会聚平面.fov等)。然后我将这些相机的(左和右)renderTextures传递给其中一个&#34;跟踪&#34;的左眼和右眼。 OnRenderImage()函数中的摄像头。它比我预期的要好,所以我决定把所有东西都放在GitHub上,并为其他需要这样做的人写一个简短的教程。

<强> Stationary Stereo Camera (Download From GitHub) enter image description here

答案 1 :(得分:0)

或者您可以在Camera组件中更改目标显示和目标类型(到主显示)。 (也可以在脚本中完成)