【Unity VR开发窍门】如何在Unity中捕捉有深度的3D图像

【背景】

之前的几篇帖子中,我们最终捕获并存储的全景图仍然是平面的。如果要造成VR效果的图像,需要有深度。
VR中的深度怎么实现的呢?其实就是通过左右眼的视差,两眼观察两幅存在视差的图像来模拟出立体深度的感官,知道了这个原理,我们就能在之前平面图捕获的代码基础上增加右眼平面图的捕获,合成到一个立体图片对象上,实现直接捕获立体VR图像的目的。

【代码和说明】

进入到之前帖子完成的代码,变量部分增加:

public bool stereoscopic = false;
public RenderTexture cubeMapRight;

第一行的布尔变量后续用作开管,勾选状态下截取立体图(双平面视差图像),不勾选则仍然截取平面图。
第二行的cubeMap变量用于存放右眼图像。

Capture功能内容变更如下:

    public void Capture()
    {
    
    
        if (!stereoscopic)
        {
    
    
            targetCamera.RenderToCubemap(cubeMapLeft);
            cubeMapLeft.ConvertToEquirect(equirectRT);
        }
        else
        {
    
    
            targetCamera.stereoSeparation = 0.065f;
            targetCamera.RenderToCubemap(cubeMapLeft,63,Camera.MonoOrStereoscopicEye.Left);
            targetCamera.RenderToCubemap(cubeMapRight,63,Camera.MonoOrStereoscopicEye.Right);

            cubeMapLeft.ConvertToEquirect(equirectRT,Camera.MonoOrStereoscopicEye.Left);
            cubeMapRight.ConvertToEquirect(equirectRT,Camera.MonoOrStereoscopicEye.Right);
        }
        Save(equirectRT);
    }

当stereoscopic选中时,执行else部分,可以看到,先设置了视差为0.065,接下来的render和convert动作都分别对左右眼都做了处理。

【相关设置】

脚本改完后,还要进行相关设置功能才能正常实现。
首先进入Edit->project setting->player的other settings中,找到360 stereo capture设置打上勾,这样游戏相机才具备景深截图功能。
在这里插入图片描述
然后回到脚本,新加的cubeMapRight变量需要和外部文件关联,直接复制cubeMapLeft,改名为cubeMapRight,然后关联到cubeMapRight变量即可。
在这里插入图片描述
在这里插入图片描述

【测试】

运行游戏,勾选Stereoscopic后,再摁下space键,发现截图结果是两张有视差的图片
在这里插入图片描述

【应用】

截取的VR图片最直接的应用就是可以返应用到VR游戏中,也就是系列帖子开篇所说的VR游戏中拍摄照片的功能。

猜你喜欢

转载自blog.csdn.net/weixin_41697242/article/details/125370953