2017-07-07 154 views
0

我正在嘗試爲使用兩個攝像頭的VR播放器開發HUD。一個是固定的相機,它指向我的HUD物體,深度= 1,另一個是深度= 0的主相機,用於跟蹤HMD並將HUD疊加在其上。禁用Unity中SteamVR攝像頭的頭部跟蹤?

但是,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如何控制這些相機的轉換?有什麼辦法可以禁用或重寫這種行爲嗎?

謝謝。

回答

1

因此,只花了整整一晚的時間開發一個功能性的解決方法,並將一個項目使用一個小的後期處理魔術來基本上「欺騙」一個固定的相機。我的想法是從一個自定義的立體相機設置中生成兩個renderTextures,這個設置由兩個單獨的相機組成,這兩個相機沒有被跟蹤(允許控制位置,旋轉,會聚平面,fov等等)。然後,我將這些相機的(左和右)renderTextures傳遞給OnRenderImage()函數內的一個「已跟蹤」攝像機的左眼和右眼。它比我預期的更好,所以我決定把所有東西放在GitHub上,併爲其他需要這樣做的人寫一個簡短的教程。

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

0

或者你可以改變你的相機組件的目標顯示和目標類型(主顯示器)。 (也可以在腳本中完成)