Notifications
Article
360场景如何和3D物体互动
Published 4 months ago
505
0
我们介绍了使用360转录技术制作无模型场景。你或许想问,真实拍摄的360照片或影片能和3D物体互动吗?答案是可以的,本文将由Unity技术经理罗志达为大家介绍,如何在360的场景中制作和3D物体的互动。

360视频的原理

一般来说,使用真实相机所拍摄出来的照片,只要在Unity中贴到圆球上,从球体的中心往外看时就会还原拍摄时的场景,这也是一般地图App里街景功能的原理。
因此想要还原整个物理结构,我们可以从地板重建开始。如果你知道当初的拍摄高度,一般来说就是你的身高减半个头左右。当初拍摄的位置作为0,0,0的话,往下算这个高度并放一个地板就能重建出一个虚拟地板。下面的示例是放在-1.7的位置。
把这个地板的Mesh renderer网格渲染器关闭只剩下Collider,并放上一个主角,你就会发现地板的位置似乎对了,但主角会不受控制的走到不对的位置。

遮罩功能

为了做到有遮罩的功能,我们可以把这张全景图,使用Photoshop处理几个遮罩,如下图所示。
将这些遮罩图片分别放到不同的球体上,记住中心都必须是0,0,0。这颗球的Scale会影响到角色被遮罩的深度,所以我们可以从Runtime运行时,把角色走到该地点并调整球的大小来符合遮罩的位置需求。
你可以叠上非常多图层来模拟很多不同的遮罩距离。这些遮罩的图片都是带有Alpha的图片制作很简单,如果你想用Chroma key的方式,也可以参考上一篇文章的方法。
实际上当同一张图片被叠在同一个位置时,就算是深度不同,渲染之后也是没有分别的,因此你可以因按照需求来制作非常多的图层,或者使用Shader的Rneder Queue来处理渲染的前后顺序。

制作碰撞结构

制作碰撞结构有二个规则需要遵守。
首先必须在当初拍摄的位置来编辑和修改。点选Main Camera之后在选功能表单的GameObject->Align View to Selected,就可以把Scene View切换到镜头的原点,也就是0,0,0。此时可以点击鼠标右键来旋转视角,但绝对不能移动镜头。
第二个规则是新增的碰撞体Y的值必须计算。由于在360照片内放置3D物体,并没有办法有实际的坐标来对齐位置,如果在制作周期中,没有把环境全都测量好,我们必须用目测的方式来重建碰撞结构。
我们只知道地板位于Y -1.7,而Unity的坐标是以物体中心为主,因此我们可以新增一个Cube,这个Cube的高度是1,因此我们把它的一半与地板坐标相加就是-1.2 作为它的Y值,这样就相当于Cube会完全的贴合在地板上,这等同加上一个Rigidbody组件,让它贴齐地板是一样的。
一旦全部的高台使用这种目测的方法,制作出对应的碰撞体之后,相当于某种程度还原现场的碰撞结构,对于一开始忘了测量环境信息的开发流程,算是还有补救的余地。
操作请查考下方视频。

阴影制作

阴影的制作和光照的反应制作和Pre-Bake 360如何使用360转录技术制作无模型场景的方法是相同的。
我们可以放一片网格在脚上跟着主角,阴影会产生在这片临时地板上,再透过Shader把阴影以外的部分去除掉,调低光源的强度让阴影带有一点半透明,就会产生不错的影子效果。

小结

针对360与3D物体互动的内容还有很多空间能够发掘,我们会在未来整理更多有用方法分享给大家! 更多Unity的技术文章分享尽在Unity官方中文论坛(UnityChina.cn) !

Unity China
350
Comments