您当前的位置: 首页 >  vr

每日出拳老爷子

暂无认证

  • 3浏览

    0关注

    135博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

每日出拳老爷子 发布时间:2022-06-20 13:33:49 ,浏览量:3

【背景】

之前的几篇帖子中,我们最终捕获并存储的全景图仍然是平面的。如果要造成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游戏中拍摄照片的功能。

关注
打赏
1657016083
查看更多评论
立即登录/注册

微信扫码登录

0.0381s