微信号:Unity-GreaterChina

介绍:Unity官方开发者平台,分享最前沿的技术文章和开发经验,精彩的Unity活动和社区相关信息.

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

2018-02-20 12:18 Unity

现在Unity 2018.1中开发者可以进行采集立体360图像和视频。无论你是想要用360度预告片来展现你精彩VR体验的开发者,还是渴求制作吸人眼球的影视短片的导演,Unity全新的采集技术将让你在汇聚成千上万观众的平台上分享你创作的沉浸式体验,现在就下载Unity 2018.1 beta,体验全新采集功能。


如何使用

我们的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)我们提供反馈!


推荐阅读






点击“阅读原文”访问Unity技术社区!

 
Unity官方平台 更多文章 在Unity中制作粒子特效 简化你的工作流程-Unity Hub (Beta) 2018年Unity技术路演-广州站报名启动 订阅Unity Plus加强版,三重好礼等待您! 直播预告|Unity跨平台Vuforia AR开发实例解析
猜您喜欢 吐血推荐 | 那些提升开发人员工作效率的在线工具 深度学习在iPhone 7P上比8P更快? 如何快速精确的和leader沟通 【转载】携程网基于应用的自动化容量管理与评估 Docker系列文章---定制Docker镜像基础