立体视频设置在 Unity 中不起作用
Stereoscopic video setup not working in Unity
我正在尝试使用光球和 GoogleVR (Daydream) 的剔除遮罩技术来查看(顶部底部)立体视频,但它似乎没有按预期工作。这是我所做的:
基本上我的场景在完全相同的位置有 2 个相机和 2 个光球。我正在使用左摄像机的 Culling Mask 元素来阻挡右球体,反之亦然,因此左眼只能看到左球体,而右眼只能看到右球体。 "LeftSphere" 正在播放视频的上半部分,"RightSphere" 正在播放视频的下半部分。因此,我应该看到立体的。
此外,由于我的场景启用了 VR,所以两个相机上都有一个 "Target Eye" 元素。我相应地设置了 - 左摄像头为左摄像头,右摄像头为右摄像头。
问题是当我在 Unity 中播放我的场景来测试它时,它只在双眼上播放 RightSphere 而左球体没有被任何相机看到。
这是我发现的问题。我只是不知道如何解决它:
- 当我在 Unity 中点击播放时,它会创建两个新的儿童相机(用于左眼和右眼,包括在图片中)。它们在 Inspector 中也有自己的 "Target Eye" 元素,但它们对 LeftEye 的两个子摄像机显示 "Left",对 RightEye 的两个子摄像机显示 "Right"。如果我更改那些 "Target Eyes" 以匹配正确的眼睛,它就会起作用。但除非我处于播放模式,否则我无法编辑它们。如您所知,一旦我退出播放模式,它就会恢复您所做的任何更改。我如何访问这些儿童相机?这就是问题所在吗?
(我正在使用 UMP - UniversalMediaPlayer 视频统一资产,顺便说一句)
我已经用我的 Pixel 在我的白日梦查看器上试过了,它确实只能播放单视场。
好吧,我终于成功了!如果将来有人 运行 遇到同样的问题,您需要执行以下操作:
我的视频播放器使用的是 Unity 2017.1.0b4 和 UniversalMediaPlayer。
请注意,这仅适用于 GoogleVR。
- 在播放器设置中启用 VR
- 将 GoogleVR 资源导入 Unity
- 在场景中放置 "GvrViewerMain" 预制件
- 复制相机并将两个相机坐标重置为零。我将我的相机命名为 "LeftEye/RightEye"
- 创建一个球体并将坐标也重置为零,然后复制。我将它们命名为 "LeftSphere/RightSphere"
- 创建两个新图层并将它们命名为 "LeftSphere" 和 "RightSphere"
- 在 "LeftEye" 相机 Culling Mask 元素上,取消选中 "RightSphere"。取消选中“RightEye 摄像头”上的 "LeftSphere"。
- 更改每个相机上的 "Target Eye" 元素以对应正确的眼睛。
- 创建 2 个新材质,每个球体一个,然后将它们拖到每个球体上。
- 将两个球体的着色器更改为 "UMP/VideoSphericalCanvas"(您需要资产商店的 UMP)
编辑:忘记提及导入和设置 UMP 预制件并将两个球体拖到它上面。超级容易设置,顺便说一句。
- 在 "LeftSphere" 上将平铺更改为 X1 - Y0.5 并将偏移更改为 X0 Y0
- 在 "RightSphere" 上将平铺更改为 X1 - Y0.5 并将偏移更改为 X0 Y0.5
- 将 LeftSphere 的图层从 "Default" 更改为 "LeftSphere"(您之前创建的图层),右球体则相反。
这是导致我出现问题的地方。因为每次加载或运行应用程序时都会创建新的摄像头,所以我必须找到一种方法来更改这 4 个摄像头的 "Culling Mask" 和 "Target Eye"。我找到的唯一方法是通过脚本。
- 将此脚本附加到您的 "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 模式播放。
我正在尝试使用光球和 GoogleVR (Daydream) 的剔除遮罩技术来查看(顶部底部)立体视频,但它似乎没有按预期工作。这是我所做的:
基本上我的场景在完全相同的位置有 2 个相机和 2 个光球。我正在使用左摄像机的 Culling Mask 元素来阻挡右球体,反之亦然,因此左眼只能看到左球体,而右眼只能看到右球体。 "LeftSphere" 正在播放视频的上半部分,"RightSphere" 正在播放视频的下半部分。因此,我应该看到立体的。
此外,由于我的场景启用了 VR,所以两个相机上都有一个 "Target Eye" 元素。我相应地设置了 - 左摄像头为左摄像头,右摄像头为右摄像头。
问题是当我在 Unity 中播放我的场景来测试它时,它只在双眼上播放 RightSphere 而左球体没有被任何相机看到。
这是我发现的问题。我只是不知道如何解决它:
- 当我在 Unity 中点击播放时,它会创建两个新的儿童相机(用于左眼和右眼,包括在图片中)。它们在 Inspector 中也有自己的 "Target Eye" 元素,但它们对 LeftEye 的两个子摄像机显示 "Left",对 RightEye 的两个子摄像机显示 "Right"。如果我更改那些 "Target Eyes" 以匹配正确的眼睛,它就会起作用。但除非我处于播放模式,否则我无法编辑它们。如您所知,一旦我退出播放模式,它就会恢复您所做的任何更改。我如何访问这些儿童相机?这就是问题所在吗?
(我正在使用 UMP - UniversalMediaPlayer 视频统一资产,顺便说一句)
我已经用我的 Pixel 在我的白日梦查看器上试过了,它确实只能播放单视场。
好吧,我终于成功了!如果将来有人 运行 遇到同样的问题,您需要执行以下操作:
我的视频播放器使用的是 Unity 2017.1.0b4 和 UniversalMediaPlayer。 请注意,这仅适用于 GoogleVR。
- 在播放器设置中启用 VR
- 将 GoogleVR 资源导入 Unity
- 在场景中放置 "GvrViewerMain" 预制件
- 复制相机并将两个相机坐标重置为零。我将我的相机命名为 "LeftEye/RightEye"
- 创建一个球体并将坐标也重置为零,然后复制。我将它们命名为 "LeftSphere/RightSphere"
- 创建两个新图层并将它们命名为 "LeftSphere" 和 "RightSphere"
- 在 "LeftEye" 相机 Culling Mask 元素上,取消选中 "RightSphere"。取消选中“RightEye 摄像头”上的 "LeftSphere"。
- 更改每个相机上的 "Target Eye" 元素以对应正确的眼睛。
- 创建 2 个新材质,每个球体一个,然后将它们拖到每个球体上。
- 将两个球体的着色器更改为 "UMP/VideoSphericalCanvas"(您需要资产商店的 UMP) 编辑:忘记提及导入和设置 UMP 预制件并将两个球体拖到它上面。超级容易设置,顺便说一句。
- 在 "LeftSphere" 上将平铺更改为 X1 - Y0.5 并将偏移更改为 X0 Y0
- 在 "RightSphere" 上将平铺更改为 X1 - Y0.5 并将偏移更改为 X0 Y0.5
- 将 LeftSphere 的图层从 "Default" 更改为 "LeftSphere"(您之前创建的图层),右球体则相反。
这是导致我出现问题的地方。因为每次加载或运行应用程序时都会创建新的摄像头,所以我必须找到一种方法来更改这 4 个摄像头的 "Culling Mask" 和 "Target Eye"。我找到的唯一方法是通过脚本。
- 将此脚本附加到您的 "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 模式播放。