原标题:打造H5里的“3D全景漫游”秘籍 - 腾讯ISUX

近来风生水起的VR虚拟现实技术,抽空想起年初完成的“星球计划”项目,总结篇文章与各位分享一下制作基于Html5的3D全景漫游秘籍。

QQ物联与深圳市天文台合作,在手Q“发现新设备”-“公共设备”里,连接QQ物联摄像头为用户提供2016年天体大事件的直播,大家可以通过手Q实时观看到世界各地最佳观测点的日食,流星等天体现象。承载整个“星球计划”活动的运营页面,经多方讨论,我们决定尝试3D全景漫游模式的H5运营页进行推广,今天就不详述活动的具体内容,先和大家聊一聊这H5里“3D全景漫游”的制作方法。

先贴一个体验地址(请忽略GIF录屏的卡顿及字体,iOS开启陀螺仪体验最佳),Page3的宇宙部分-转动手机在模拟的宇宙里搜寻各大行星,就是我们今天要说的基于Html5的3D全景漫游。

要制作全景漫游,首先得有全景图像。全景图像的获取通常是借助鱼眼的全景摄像机的拍摄来完成的,或者是单反相机、鱼眼镜头、云台和三角架的组合。需要按照一个方向旋转360度拍摄一组照片,照片之间要有部分重合的部分,方便进行后期的拼接和融合。在拍好照片后需要将它们无缝拼接在一起,生成的全景图像可分为球面全景图、立方体全景图以及柱状全景图等。(咋们腾讯地图的街景体验,就是最常见的全景漫游技术啦)

没有全景摄像机,也可以通过一些素材站点拿到适合我们项目的全景图。例如:某素材站点

当然,星球计划的背景图是宇宙星际,相对而言是无序的,所以靠视觉设计师进行拼接绘制也是可以的。

而什么是全景漫游呢,全景漫游技术可以让体验者在全景图像构建的全景空间里切换视角的浏览。它是通过拍摄全景图像,再采用计算机图形图像技术构建出全景空间,让使用者能用控制浏览的方向,或左或右、或上或下观看物体或场景,仿佛身临其境一般。与传统的3D建模相比,全景漫游技术制作简单,数据量小,系统消耗低,且更有真实感。故近年来,也是VR技术的一大热门实现手法,用前面的贴图例子来个demo。而在移动端的全景漫游,更是可以绑定陀螺仪,让你更有身临其境的感觉。

在项目初期,预研了一些全景漫游制作方案,包括目前最为常用的全景漫游制作工具是Pano2vr & Krpano,以及用Flash,QuickTime,基于Java,js等其他方式制作全景漫游,但据预研所了解的个方案优劣势对比图如下图,结合“星球计划”项目的具体情况,最终优先选择了Threejs的实现方案。

这里顺便和大家聊聊目前最为常用的全景漫游制作工具是Pano2vr & Krpano。

(1)Pano2vr操作简单功能虽少但非常实用,“导入全景图-设置交互热点-微调-导出”即可直接生产flash,html5,Quicktime等格式。

Pano2vr对于仅用在PC,iOS上的需求非常合适快捷,但对Android机的支持表现不佳。

(2)Krpano,功能强大完善,各平台兼容性高,拓展性很强,各类VR场景特效都可承载。但自成体系,需要遵循Krpano xml的这套编程语言,没有gui的软件界面,新手上手及后期维护成本较大,生成的全景漫游专业但对载入速度,内存占用都有影响。但对于想做高阶的,个性化,定制化全景漫游项目,Krpano是不二选择。

但这2个工具都需要购买授权码才可商用,非免费。

(3)Three.js源自Github的一个开源项目,https://github.com/mrdoob/three.js,官网:http://threejs.org/ 。

看到一个同行的解释,说理解成Three + js就可以了。Three表示3D的意思,js表示java的意思,故three.js就是使用java来写3D程序的意思,格外的直白清晰啊。依靠java的语言编写,自然给这个方案带来了高拓展,高兼容,低开发成本,可高性能且免费的几大优势。

(4)Flash,QuickTime,基于Java,js等其他方式这里就不一一详述,大致的优劣势对比请参考上面的表格(具体评分仅供参考,软件版本更新也许会有各方面的升级)。

想要利用Three.js制作一个物体渲染到网页中去,需要构建这3个组建:场景(scene)、相机(camera)和渲染器(renderer):

(1)场景(scene)

即是画布,是所有物体object的容器。在最开始的时候对场景实例化,将之后构建的物体都添加到场景中即可。

(2)相机(camera)

用户是通过相机Camare来查看在scene下的3d场景,在three.js里包含了正交投影照相机(Orthographic Camera)和透视投影照相机(Perspective Camera)2种,从模拟人眼看物体的方式来选,透视投影照相机更适合。如下图所示,fov是相机视角的夹角,aspect等于相机画幅比例,near和far分别是照相机到视景体最近、最远的距离,均为正值,且far应大于near。

(3)渲染器(renderer)

渲染器是用来设定渲染的结果会在页面的什么元素上面呈现,以及按什么规则来渲染。

在Three.js中,场景是容器,把我们星球计划的星星们放置在构建的3D场景中的不同位置;相机对着下场景拍摄,拍摄结果通过渲染器实时的绘制在我们的浏览器上。

(4)构建宇宙并置入场景中

定义了这三大元素之后,下一步,就是构建我们的星球计划所需的宇宙了。前文有提到,全景图像可分为球面全景图、立方体全景图以及柱状全景图。

虽然球面全景图具有和人眼最接近的构建模式,但需要很多个立面才可以构建成一个球体,球面的经纬度坐标无法展开成一个平面贴图,相对于其他方案,性能消耗过高,拼接方法过于繁琐;而柱形全景图的垂直视野小,不好做顶部底部的俯仰视角。我们选定了最常见的立方图全景图来构建我们的3D场景。

立方体全景图有6个面,我们需要定义每个面贴图的背景图片,3D位置,旋转角度(默认的6个面都是朝着我们的,我们需要定义朝坐标轴的各个方向做90度的旋转,才可以搭建成一个立方体)。

然后添加到THREE.Object3D 的数组中,这样我们就在场景中构建好了一个3D的宇宙空间。

这里,考虑到星空背景主要为了氛围烘托,我们将6个面的贴图减少成2个,以此缩减了资源文件的大小,如下图所示。

(5)渲染

这里我们用的是Threejs的 实时渲染:就是需要不停的对画面进行渲染,即使画面中什么也没有改变,也需要重新渲染。其中一个重要的函数是requestAnimationFrame,这个函数就是让浏览器去执行一次参数中的函数,这样通过上面animate中调用requestAnimationFrame()函数,requestAnimationFrame()函数又让animate()再执行一次,就形成了我们通常所说的渲染循环 了。

通过上面这些步骤,我们就构建好这个3D的宇宙空间了。

(6)构建星球放置在宇宙中

一期的星球计划中,需要增加8颗星球,为了避免画面过于拥挤,星球们被分散定位在了6个面上。之前我们定义宇宙六个面的时候给了每个面一个固定的section id,通过简单的js 我们可以往平面中加入星球的DOM结构。

因此也可以很轻松的利用CSS给这些星球定位及增加个性的动画效果,这里要特别注意,不要增加阴影等耗内存特别大的动画效果,它们是Crash罪魁祸首。

(7)绑定陀螺仪

最后一步,将全景漫游绑定陀螺仪,这里涉及到需要对陀螺仪事件做个保护代码,判断机器是否支持陀螺仪。完成以上几步,既可以实现一个在移动端的全景漫游啦。

(8)其他

在项目完成的初期,对部分安卓机的内存消耗还是过大,为此在完成项目之后继续尝试了一些优化工作,包括 缩减宇宙的尺寸,合并全景贴图,禁用陀螺仪,预加载和懒加载,星球CSS3动画缩减,资源文件深度压缩等工作,但还是无法避免在内存不足的安卓机下存在Crash的风险,为保证项目的稳定上线,退而求其次对安卓机做了兼容版的体验,预期在后续的项目迭代中再优化页面在安卓下的表现,实现全平台的体验统一。

最后,仅以此文总结在移动端构建3D全景漫游的试水总结,该尝试基本上能够满足项目的需求,但在性能优化,细节完善上还继续打磨,希望能对有兴趣的小伙伴带来一些帮助^^。

感谢你的阅读,本文由 腾讯ISUX 版权所有,转载时请注明出处,违者必究,谢谢你的合作。

注明出处格式:腾讯ISUX (https://isux.tencent.com/3d.html)返回搜狐,查看更多

责任编辑:

html5 3d场景设计,打造H5里的“3D全景漫游”秘籍 - 腾讯ISUX相关推荐

  1. Three.js打造H5里的“3D全景漫游”秘籍

    近来风生水起的VR虚拟现实技术,抽空想起年初完成的"星球计划"项目,总结篇文章与各位分享一下制作基于Html5的3D全景漫游秘籍. QQ物联与深圳市天文台合作,在手Q"发 ...

  2. 打造H5里的“3D全景漫游”秘籍

    近来风生水起的VR虚拟现实技术,抽空想起年初完成的"星球计划"项目,总结篇文章与各位分享一下制作基于Html5的3D全景漫游秘籍. QQ物联与深圳市天文台合作,在手Q"发 ...

  3. QQ物联打造H5里的“3D全景漫游”秘籍

    QQ截图20160524143715.jpg (21.15 KB, 下载次数: 15) 下载附件 2016-5-26 10:58 上传 近来风生水起的 VR 虚拟现实技术,抽空想起年初完成的" ...

  4. html5 3d场景设计,H5打造3d场景不完全攻略(二): Amazing CSS3D

    原标题:H5打造3d场景不完全攻略(二): Amazing CSS3D 前言 对的,本文就是着重介绍如何使用CSS3中的3D变换打造出H5中的3D效果.灵感来源于造物节团队的3d引擎,因为使用方法比较 ...

  5. html5 3d场景设计,基于 HTML5 WebGL 的加油站 3D 可视化监控

    前言 随着数字化,工业互联网,物联网的发展,我国加油站正向有人值守,无人操作,远程控制的方向发展,传统的人工巡查方式逐渐转变为以自动化控制为主的在线监控方式,即采用数据采集与监控系统 SCADA.SC ...

  6. 3D场景设计和渲染软件Adobe Substance 3D Stager中文版

    Adobe Substance 3D Stager一款用于场景设计和渲染的专业舞台工具.导入内容.安排场景.应用材质和纹理.调整基于图像的照明和物理照明.保存具有不同分辨率的相机以及渲染逼真的图像 - ...

  7. viper4android 3D,中国设计之窗--The Viper 3D播放器界面设计图文综合

    由于数字娱乐已经慢慢进入每个人的生活中.人们使用电脑的同时也开始离不开各式各样的音乐播放器,从Winamp 开始到Media Player.iTunes各式各样的播放器开始出现在大家的桌面上.这时人们 ...

  8. H5动效的常见制作手法 - 腾讯ISUX

    众所周知,一个元素,动往往比静更吸引眼球: 一套操作界面,合适的动态交互反馈能给用户带来更好的操作体验: 一个H5运营宣传页,炫酷的动画特效定能助力传播和品牌打造. 近两年,小到loading动画,表 ...

  9. Unity 基于eventTriggers的3D场景交互系统

    Unity 基于eventTriggers的3D场景交互系统 Unity里的3D项目有时候需要大量的交互,而且是无UI的交互. 这时候可以像UI系统里,使用eventTrigger去制作交互系统.但是 ...

最新文章

  1. 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it
  2. 软件设计原则——迪米特法则
  3. 使用Apache Ignite优化Spark作业性能(第1部分)
  4. flavr—超级漂亮的jQuery扁平弹出对话框
  5. 我两小时学完指针,你学会数组/指针与函数需要多久?
  6. space index.php 7-14,SpacePack高效部署PHP生产环境
  7. Redis基础2(Centos7 下 安装redis)
  8. springmvc结合freemarker,非自定义标签
  9. CCNA-(5)-IP路由汇总
  10. 网络攻防 第六周学习总结
  11. 位说法的由来_南方土地庙有榕树的原因,为何会有榕树不容人的说法?
  12. viper4android哪个版本好,viper4android免root版下载
  13. AOSP ~ Camera - YUV格式简介
  14. 【转载】钽电容封装详述
  15. matlab里的pid参数调节,基于MATLAB的PID控制系统参数调节
  16. 高斯日记python实现
  17. 计算机画图工具怎么缩小图片,win7系统画图工具放大缩小图片的技巧
  18. 【JZOJ4847】【NOIP2016提高A组集训第5场11.2】夕阳
  19. idea 拉取报错You have not concluded your merge (MERGE_HEAD exists). Exiting because of unfinished merge.
  20. pdf编辑器工具哪个好?好用的pdf编辑器一款就够!

热门文章

  1. 母亲节感恩母亲电子相册PPT模板
  2. C++模板学习02(类模板)(类模板语法、类模板与函数模板的区别、类模板中的成员函数创建时机、类模板对象做函数参数、类模板与继承、类模板成员函数类外实现、类模板分文件编写、类模板与友元)
  3. 2023湖北工业大学计算机考研信息汇总
  4. 用日食如何导入java项目_CLASSPATH,Java Buld Path(日食)和WEB-INF \ LIB:使用什么,何时使用以及为什么使用?...
  5. 今年春晚不一样,XR技术如何打造移步换景
  6. buuctf misc USB
  7. linux里以第一列排序,Linux操作系统中排序命令Sort的使用方法
  8. 网博士 -您的知识管理专家
  9. 27、scratch教程-画心形
  10. 浪潮存储不能配置raid5,或只能配置raid0办法