立体360图像与视频采集技术

如何使用

我们的360立体采集技术源自Google的Omni-directional Stereo (ODS)技术,使用立体立方体贴图渲染实现。它支持在编辑器和PC独立播放器上, 使用Unity内置的图形管线将画面渲染为立体立方体贴图。在立体立方体贴图生成后,我们可以将这些立方体贴图转换为立体等距矩形贴图,这种贴图是360视频播放器所使用的投影格式。

录制编辑器或独立播放器中的场景十分简单,只要为左眼和右眼各调用一次Camera.RenderToCubemap()即可:

camera.stereoSeparation = 0.064; // Eye separation (IPD) of 64mm.

camera.RenderToCubemap(cubemapLeftEye, 63, Camera.MonoOrStereoscopicEye.Left);

camera.RenderToCubemap(cubemapRightEye, 63, Camera.MonoOrStereoscopicEye.Right);

在采集每个眼睛的画面期间,我们会启用一个着色器关键字,使用一个着色器函数ODSOffset(),扭曲场景中各顶点的位置,双眼投影和偏移计算就是在这个函数中完成的。

立体360采集能同时用于正向和延迟光照管线,拥有屏幕空间和立方体贴图阴影、天空盒、MSAA、HDR,以及最新的后期处理栈。要想将立方体贴图转换为立体等距矩形贴图,调用RenderTexture.ConvertToEquirect()即可:

cubemapLeftEye.ConvertToEquirect(equirect, Camera.MonoOrStereoscopicEye.Left);

cubemapRightEye.ConvertToEquirect(equirect,Camera.MonoOrStereoscopicEye.Right);

利用Unity frame recorder帧录制器,可以将这些等距矩形图像作为一部立体360视频的帧进行采集。然后你可以将这个视频发布到任何支持360视频回放的视频网站上,也可以通过Unity 2017.3的360视频回放功能,在你的应用中使用它。

对于PC独立播放器,你需要在生成设置中启用“360 Stereo Capture”选项,以便Unity生成启用了360采集功能的着色器变体,默认情况下这些变体在正常构建中是禁用的。

在实际操作中,大多数360全景采集工作可以在PC下的编辑器/运行模式中完成。

对于VR应用来说,在采集360立体立方体贴图时,我们建议在编辑器里禁用VR功能因为立体360采集功能不需要VR设备,这样可以提高性能且不会影响采集结果。

立体360采集的技术说明

对于那些使用自定义着色器或用自己的算法实现阴影的用户,下面部分的说明可以帮助你整合Unity的立体360采集功能。

我们增加了一个可选着色器关键字:STEREO_CUBEMAP_RENDER。在启用时,该关键字会在UnityObjectToClipPos()函数中增加额外的着色器代码,用ODSOffset()函数变换位置坐标,详情请查阅Unity 2018.1的UnityShaderUtilities文件。这个关键字还会让引擎针对立体360采集渲染做出相应的设置。

如果你正在实现屏幕空间阴影效果,那还有一点需要注意,根据深度贴图(应用了后期ODS偏移功能)和视线重建的世界空间阴影计算结果并不是原始的世界空间位置。这将影响光照空间中的阴影查找,因为这个过程需要变换前的真实世界位置。而且视线也是基于原始摄像机而非ODS空间。

解决这个问题的一个方法是,渲染场景,使用屏幕空间阴影贴图创建一个一对一的世界位置映射,将世界位置(未受ODS偏移修改)输出成一个浮点纹理。将这个贴图作为真实世界位置,从光照空间查找阴影。如果你基于场景中心和世界边界判断该场景适合16位浮点精度,你也可以使用16位浮点纹理。

相关资料

Unity frame recorder

https://github.com/Unity-Technologies/GenericFrameRecorder

Google的Omni-directional Stereo (ODS)技术

https://developers.google.com/vr/jump/rendering-ods-content.pdf

新的立体360采集API说明

https://docs.unity3d.com/2018.1/Documentation/ScriptReference/Camera.RenderToCubemap.html

小结

你可以将你的360视频作品链接分享到Unity Connect上或附上#madewithunity。还有,别忘了这个功能仍处于试验阶段。如果你有任何意见,请访问Unity官方社区(UnityChina.cn)我们提供反馈!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180220A0ABGR00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券