【背景】
之前的几篇帖子中,我们最终捕获并存储的全景图仍然是平面的。如果要造成VR效果的图像,需要有深度。
VR中的深度怎么实现的呢?其实就是通过左右眼的视差,两眼观察两幅存在视差的图像来模拟出立体深度的感官,知道了这个原理,我们就能在之前平面图捕获的代码基础上增加右眼平面图的捕获,合成到一个立体图片对象上,实现直接捕获立体VR图像的目的。
【代码和说明】
进入到之前帖子完成的代码,变量部分增加:
public bool stereoscopic = false;
public RenderTexture cubeMapRight;
第一行的布尔变量后续用作开管,勾选状态下截取立体图(双平面视差图像),不勾选则仍然截取平面图。
第二行的cubeMap变量用于存放右眼图像。
Capture功能内容变更如下:
public void Capture()
{
if (!stereoscopic)
{
targetCamera.RenderToCubemap(cubeMapLeft);
cubeMapLeft.ConvertToEquirect(equirectRT);
}
else
{
左右3d怎么看
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游戏中拍摄照片的功能。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论