立体视频设置在 Unity 中不起作用

Stereoscopic video setup not working in Unity

我正在尝试使用光球和 GoogleVR (Daydream) 的剔除遮罩技术来查看(顶部底部)立体视频,但它似乎没有按预期工作。这是我所做的:

基本上我的场景在完全相同的位置有 2 个相机和 2 个光球。我正在使用左摄像机的 Culling Mask 元素来阻挡右球体,反之亦然,因此左眼只能看到左球体,而右眼只能看到右球体。 "LeftSphere" 正在播放视频的上半部分,"RightSphere" 正在播放视频的下半部分。因此,我应该看到立体的。

此外,由于我的场景启用了 VR,所以两个相机上都有一个 "Target Eye" 元素。我相应地设置了 - 左摄像头为左摄像头,右摄像头为右摄像头。

问题是当我在 Unity 中播放我的场景来测试它时,它只在双眼上播放 RightSphere 而左球体没有被任何相机看到。

这是我发现的问题。我只是不知道如何解决它:

(我正在使用 UMP - UniversalMediaPlayer 视频统一资产,顺便说一句)

我已经用我的 Pixel 在我的白日梦查看器上试过了,它确实只能播放单视场。

好吧,我终于成功了!如果将来有人 运行 遇到同样的问题,您需要执行以下操作:

我的视频播放器使用的是 Unity 2017.1.0b4 和 UniversalMediaPlayer。 请注意,这仅适用于 GoogleVR。

  1. 在播放器设置中启用 VR
  2. 将 GoogleVR 资源导入 Unity
  3. 在场景中放置 "GvrViewerMain" 预制件
  4. 复制相机并将两个相机坐标重置为零。我将我的相机命名为 "LeftEye/RightEye"
  5. 创建一个球体并将坐标也重置为零,然后复制。我将它们命名为 "LeftSphere/RightSphere"
  6. 创建两个新图层并将它们命名为 "LeftSphere" 和 "RightSphere"
  7. 在 "LeftEye" 相机 Culling Mask 元素上,取消选中 "RightSphere"。取消选中“RightEye 摄像头”上的 "LeftSphere"。
  8. 更改每个相机上的 "Target Eye" 元素以对应正确的眼睛。
  9. 创建 2 个新材质,每个球体一个,然后将它们拖到每个球体上。
  10. 将两个球体的着色器更改为 "UMP/VideoSphericalCanvas"(您需要资产商店的 UMP) 编辑:忘记提及导入和设置 UMP 预制件并将两个球体拖到它上面。超级容易设置,顺便说一句。
  11. 在 "LeftSphere" 上将平铺更改为 X1 - Y0.5 并将偏移更改为 X0 Y0
  12. 在 "RightSphere" 上将平铺更改为 X1 - Y0.5 并将偏移更改为 X0 Y0.5
  13. 将 LeftSphere 的图层从 "Default" 更改为 "LeftSphere"(您之前创建的图层),右球体则相反。

这是导致我出现问题的地方。因为每次加载或运行应用程序时都会创建新的摄像头,所以我必须找到一种方法来更改这 4 个摄像头的 "Culling Mask" 和 "Target Eye"。我找到的唯一方法是通过脚本。

  1. 将此脚本附加到您的 "LeftEye" 和 "RightEye" 游戏对象,您的检查器中将有 2 个新的左右眼罩下拉菜单。相应地更改它们(与上面的剔除蒙版相同)。

GameObject left;
Camera leftEye;

GameObject right;
Camera rightEye;

public LayerMask LeftEyeMask;
public LayerMask RightEyeMask;

// Use this for initialization
void Start () {
    left = GameObject.Find(gameObject.name + " Left");
    if (left != null) leftEye = left.GetComponent<Camera>();

    right = GameObject.Find(gameObject.name + " Right");
    if (right != null) rightEye = right.GetComponent<Camera>();
}

// Update is called once per frame
void Update () {

    // LEFT EYE
    if (left == null)
    {
        left = GameObject.Find(gameObject.name + " Left");
        if (left != null)
            leftEye = left.GetComponent<Camera>();
    }
    else
    {
        leftEye = left.GetComponent<Camera>();
        if (leftEye != null)
        {
            leftEye.stereoTargetEye = StereoTargetEyeMask.Left;
            leftEye.cullingMask = LeftEyeMask.value;
        }
    }

    // RIGHT EYE
    if (right == null)
    {
        right = GameObject.Find(gameObject.name + " Right");
        if (right != null)
            rightEye = right.GetComponent<Camera>();
    }
    else
    {
        rightEye = right.GetComponent<Camera>();
        if (rightEye != null)
        {
            rightEye.stereoTargetEye = StereoTargetEyeMask.Right;
            rightEye.cullingMask = RightEyeMask;
        }
    }
}

您的 Top-Bottom 视频现在应该可以在 Daydream 或 Cardboard 中以 3D 模式播放。