Unity中全景场景搭建
发表于2018-04-25
全景场景能够直观的展现一部分区域的全貌,在全景场景中我们能360°观看周围的景象,仿佛自身就在这个场景中,在场景的外部,我们能发现场景就是一个密封的球体,我们是处在球体的内部观察周围,在球内部观察四周看到的都是球的内表面,所以我们看到的全景其实就是贴在密封球体内的一张全景图片。接下来就和大家下如何在unity中用一个球体来搭建全景场景。
一、场景搭建的准备
接下来介绍的是使用暴风魔镜观看的全景场景,我们要先下载一个暴风魔镜在unity中运用的SDK插件,一张全景图片。这样我们通过SDK插件就能实现360°视觉观看的效果,而观看全景肯定需要图片,全景图片就是为观看全景环境而准备的。我们可以发现全景图片在一些地方是有扭曲的,这些就是方便这张图首尾的衔接自然,达到整个图片的完整性。如果使用一张普通的图片而非全景图片,在图片衔接时就会产生图像的扭曲。图片和插件准备好后就可以进行全景场景的搭建。
二、搭建场景
在unity中先导入SDK插件,然后创建一个Sphere球体,把原有的摄像头删除,加入SDK插件中的预制体MojingMain,这个预制体其实就相当于暴风魔镜的眼镜,把预制体放在球体的内部 ,灯光也得放在球体内部。接下来搭建场景的最重要的部分就是让全景图片贴在球体的内部。要让图片贴在物体上就需要用到渲染器 Shader,我们需要创建一个渲染器脚本,然后把图片拖入脚本中,这样就能改变图片的渲染方式,把图片拖入球体中,设置材质的渲染方式,就能让图片贴在球体内部。
渲染器脚本:
Shader "Unlit/DoubleSided" { Properties { _Color("Main Color", Color) = (1,1,1,1) _MainTex("Texture", 2D) = "white" {} } SubShader { //Ambient pass Pass { Name "BASE" Tags {"LightMode" = "Always" /* Upgrade NOTE: changed from PixelOrNone to Always */} Color[_PPLAmbient] SetTexture[_BumpMap] { constantColor(.5,.5,.5) combine constant lerp(texture) previous } SetTexture[_MainTex] { constantColor[_Color] Combine texture * previous DOUBLE, texture *constant } } //Vertex lights Pass{ Name "BASE" Tags {"LightMode" = "Vertex"} Material { Diffuse[_Color] Emission[_PPLAmbient] Shininess[_Shininess] Specular[_SpecColor] } SeparateSpecular On Lighting On cull off SetTexture[_BumpMap] { constantColor(.5,.5,.5) combine constant lerp(texture) previous } SetTexture[_MainTex] { Combine texture *previous DOUBLE, texture *primary } } } FallBack "Diffuse", 1 }
脚本中的unlit/DoubleSided就是设置渲染器所用的选项,如下图
当材质贴图设置好后,图片就会从球的外表面变为内表面,如下图
这样球体全景便搭建好了。
三、场景体验
运行项目,会发现整个场景被分为两部分,分别为眼镜的左右眼,按住Alt键移动鼠标就能自由移动视角观看场景。如果打包成APK文件,安装到手机上,就可以戴暴风魔镜进行全景观看,通过眼镜晃动头就可以观看四周的景象。
四、总结
全景搭建主要就是用球体来设置全景环境,把图片放入球体内部,从而达到360°无死角全景观看,也能够让图片进行无缝衔接,全景中最重要的就是让图片能够渲染在球体内部,把摄像头放置在球体内部就是一个简单的360°全景场景。