如何用Three.js+Blender打造一个web3D展览馆运营活动新玩法层出不穷,web3D炙手可热,本文将

运营活动新玩法层出不穷,web3D炙手可热,本文将一步步带大家了解如何利用Three.js和Blender来打造一个沉浸式web3D展览馆。

3D展览馆是什么,先来预览下效果:

看起来像个3D冒险类手游,用户可以操纵屏幕中央的虚拟摇杆,以第一人称视角在房间内自由移动、看展览。

首先介绍一个背景,我们的工作内容是做游戏中心的用户运营活动,会做些好玩的活动让用户参与,并get一些福利。

当时的活动背景是我司一年一度的vivo游戏节,并且元宇宙是大热词。所以做它的原因有几个:

用到的组合方案:Three.js+Blender。

开源的3D框架有很多,但最常用的有两种:Three.js、Babylon.js,我们只需要从中二选一。分析后发现两者各有优势:

考虑到3D展览馆的几个基本特性:

Three.js包体更小、有更多参考案例、上手更快,所以虽然Babylon.js有它的优势,但Three.js更适合这个项目。

Blender是一款轻量的开源3D建模软件,有很多好用的免费插件,而且Blender能导出GLTF/GLB模型(后面会对GLTF/GLB模型做简介),匹配Three.js的使用方式,整体更简单好用一些。

所以,就是它了。

在进入开发之前,先简单了解Blender和GLTF/GLB模型。

首先,Blender大概长这样,图中是设计师交付的3D展览馆稿子。简单理解为,左侧是模型的层次结构,中间是模型的预览效果,右侧是模型的属性面板。

GLTF(GraphicsLanguageTransmissionFormat)是一种标准的3D模型文件格式,它以JSON的形式存储3D模型信息,例如模型的层次结构、材质、动画、纹理等。

模型中依赖的静态资源,比如图片,可以通过外部URI的方式来引入,也可以转成base64直接插入在GLTF文件中。

它包含两种形式的后缀,分别是.gltf(JSON/ASCII)和.glb(Binary)。.gltf是以JSON的形式存储信息。.glb则是.gltf的扩展格式,它以二进制的形式存储信息,因此导出的模型体积也更小一些。如果我们不需要通过JSON对.gltf模型进行直接修改,建议使用.glb模型,它更小、加载更快。

在blender中,可以直接将模型导出为GLTF/GLB格式,三种选项的差别不再赘述,我们先简单选择最高效的.glb格式。

有了模型之后,我们可以开始通过Three.js创建场景,并导入这个模型了。

怎么加载一个模型?

(1)创建一个空场景

首先创建一个空场景scene,后续所有的模型或材质都会被添加到这个场景中。

import*asTHREEfrom'three'//1.创建场景constscene=newTHREE.Scene();//2.创建镜头constcamera=newTHREE.PerspectiveCamera(75,window.innerWidth/window.innerHeight,0.1,1000);//3.创建Rendererconstrenderer=newTHREE.WebGLRenderer();renderer.setSize(window.innerWidth,window.innerHeight);document.body.appendChild(renderer.domElement);(2)导入GLTF/GLB模型

通过GLTFLoader导入.glb模型,并添加到场景中。

importGLTFLoaderfrom'GLTFLoader'constloader=newGLTFLoader()loader.load('path/to/gallery.glb',gltf=>{scene.add(gltf.scene)//添加到场景中}}(3)开始渲染

通过requestAnimationFrame来调用renderer.render方法,开始实时渲染场景。

functionanimate(){requestAnimationFrame(animate);renderer.render(scene,camera);}animate();ok,这样我们就完成了3D模型的导入,但是发现整个场景一片漆黑。

试试加个环境光。

ok,亮起来了,但是效果依然很差,很劣质。

原因是模型中的材质效果、光源、阴影、环境纹理,这些全都丢失了,所以当我们导入模型时,看到的就是一堆简陋的纯色形状。

所以我们要一步步将这些丢失东西找回,还原设计稿。

接下来一步步还原设计稿。

(1)加上光源

查看Blender模型,看到设计稿中添加了一堆点光源、平行光源。

点光源可以理解为房间中的灯泡,光线强弱随着距离衰减;

平行光源可以理解为太阳的直射光,它和点光源不同,光线强弱不随着距离衰减。

于是我们也增加一些光源:

//一些灯光选项//如果是平行光则没有distance、decay选项constlightOptions=[{type:'point',//灯光类型:1.point点光源、2.directional平行光源color:0xfff0bf,//灯光颜色intensity:0.4,//灯光强度distance:30,//光照距离decay:2,//衰减速度position:{//光源位置x:2,y:6,z:0}},...]functioncreateLights(){pointLightOptions.forEach(option=>{constlight=option.type==='point'newTHREE.PointLight(option.color,option.intensity,option.distance,option.decay):newTHREE.DirectionalLight(option.color,option.intensity)constposition=option.positionlight.position.set(position.x,position.y,position.z)scene.add(light)})}createLights()可以看到场景比之前好了一些,有了光源后,模型变得立体和真实了,多了一些反色的光泽。

但是我们注意到,画面中的logo、长椅的两侧都是黑色的,并且旁边的球体、椅子等都显得不够真实。

所以,我们需要进行下一步调整:调整模型材质、增加环境纹理。

(2)调整模型材质,增加环境纹理

先简单了解一下材质和环境纹理。

材质就像物体的皮肤,我们可以调整皮肤的光泽、金属度、粗糙度、透明与否等属性,让物体有不同的视觉效果。

一般从blender导出的模型中,已经包含了一些材质属性,但是Three.js中的材质属性和Blender中的属性并非完全的映射关系,模型在导入到Three.js后,效果和设计稿会有差异。这时候我们需要手动调整材质的属性,来达到和设计稿近似的效果。

环境纹理就是让模型映射周围的环境,让场景或物体更真实。例如我们要渲染一个立方体,把立方体放进一个屋子里,这个屋子的环境就会影响立方体的渲染效果。

比如镜面的物体被贴上环境纹理后,就可以实时反射周围的环境镜像,看起来很real。

设计稿中也是将一个大厅作为了环境纹理,让场景更真实。

环境纹理分为:球形纹理和立方体形纹理。两者都可以,这里我们采用一张大厅的球形纹理作为环境贴图。

以画面中的vivo游戏节logo为例,我们通过调整它的材质和环境纹理,让它变得更真实。

constloader=newGLTFLoader()loader.load('path/to/gallery.glb',gltf=>{//1.根据Blender中物体的名字,找到logo模型gltf.scene.traverse(child=>{if(isLogo(child)){initLogo(child)//2.调整材质setEnvMap(child)//3.设置环境纹理}})scene.add(gltf.scene)}}//判断是否为LogoconstisLogo=object.name==='logo'functioninitLogo(object){object.material.roughness=0//调整表面粗糙度object.material.metalness=1//调整金属度}//加载环境纹理letenvMapconstenvmaploader=newTHREE.PMREMGenerator(renderer)constsetEnvMap=(object)=>{if(envMap){object.material.envMap=envMap.texture}else{textureLoader.load('path/to/envMap.jpg',texture=>{texture.encoding=THREE.sRGBEncodingenvMap=envmaploader.fromCubemap(texture)object.material.envMap=envMap.texture})}}经过上面的处理后,可以看到原先黑色的logo有了金属光泽,并且会反射周围的环境纹理。

其它物体经过类似的处理后,也变得更真实一些。

现在整个场景更接近了设计稿一些,但场景中少了阴影,显得很干瘪。

加上阴影。

(3)增加阴影

增加阴影分四步:

添加阴影后,有质的提升,发现整个场景立体了很多,此时还原度已经很高。

如果不考虑性能损耗,这个场景的样式已经可以投入使用了。(后续会提到性能优化)

小结一下,刚刚做的几件事:

现在3D展览馆场景已经还原的差不多了,接下来要构造一个虚拟移动摇杆,控制第一人称镜头的移动和转向,实现沉浸式逛展的效果。

要实现通过虚拟移动摇杆控制镜头的移动和转向,我们需要三个东西:

有人会问为什么需要一个player,通过摇杆直接控制镜头不就行了吗?其实player的作用是用于做碰撞检测,当player遇到凳子、墙壁等障碍物时,需要停止镜头移动。直接控制镜头,是无法做碰撞检测的。

所以,实际上镜头移动的逻辑是:

用户操纵摇杆→更新player位置和朝向→从而同步更新camera位置和朝向

(1)创建移动摇杆

移动摇杆的实现原理很简单,这里仅做简述。

核心在于创建一个圆盘,监听触摸手势,并根据手势的方向来实时更新move参数,控制镜头的移动和转向。

constspeed=8//移动速度constturnSpeed=3//转向速度//moveoption,用于调整第一人称镜头的移动和转向constmove={turn:0,//旋转角度forward:0//前进距离}//创建一个handler,并监听手势,调整moveoptionconsthandler=newHandler()handler.onTouchMove=()=>{//updatemoveoption}(2)创建player

首先创建一个player对象,它是一个1.2*2*1的透明长方体。

每次渲染(render)时,更新player的位置和朝向,并同步更新镜头的位置和朝向。

完成上述步骤后,我们就可以通过控制虚拟移动摇杆,来让镜头移动和转向了。

接下来加入碰撞检测,对镜头移动加点限制。

碰撞检测的步骤也很简单:

(1)收集障碍物

模型加载完成后,遍历所有的child,如果child是一个物体(mesh),则把它加入到障碍物队列(colliders)中。

constcolliders=[]loader.load('path/to/gallery.glb',gltf=>{gltf.scene.traverse(child=>{//收集障碍物if(isMesh(child)){colliders.push(child)}})}})(2)检测碰撞

调整刚刚的updatePlayer方法,在其中插入检测碰撞的逻辑。

碰撞检测逻辑基于THREE.Raycaster来实现,racaster可以理解为一个射线,当射线穿过了某个物体,我们就认为射线和物体相交了。

当我们移动到椅子、墙壁等障碍物附近时,镜头会停止移动。镜头的移动范围也被我们限制在房间里,不会穿到房间外部。

3D展览馆的基本功能已经完成了,但还没有做任何的性能调优。当我们把项目运行在手机上,会发现设备发热发烫,帧率很低,低端机型甚至无法运行。

经过分析,实时的光影渲染是罪魁祸首。

页面中有10+个光源,每个光源都在实时投射阴影(尤其是点光源十分消耗资源,引起卡顿)。但实际,场景中的光源和物体位置都没有发生改变,这意味着我们不需要计算实时阴影,只需要固定的阴影。

这点可以通过纹理烘焙来实现。并且在移动端,经过纹理烘焙的光影效果实际上要优于设备计算的实时光影效果。

纹理烘焙,是指通过将场景效果预渲染到指定纹理上,生成一个模型贴图。在Blender中,我们可以选中任意对象进行烘焙。

以3D展览馆的地板为例,我们可以通过纹理烘焙,将光影效果直接渲染到贴图上。

左图是原本的棋盘格纹理,右图是结合了光影效果的烘焙贴图。烘焙完成后,地板上的光影效果就被固定下来了,我们也不需要再做实时的光影渲染。

用同样的方式,将地板、墙壁、天花板等物体,一一进行烘焙处理,导出一个新的模型。由于光影效果已经被渲染到贴图上,我们可以将大部分光源去掉,只保留2-3个必要的点、平行光源和全局光。再次运行后,发现卡顿、发烫的问题已经不再明显。并且效果其实比实时渲染更精细一些。

这里没有对烘焙做过多介绍,要生成精致的烘焙结果还需要依赖对UVMap、烘焙参数的了解,虽然这些偏向于设计同学的工作,一般由他们来输出烘焙纹理。但是作为开发者,了解了这些后才能和UI更好地沟通和配合。

模型大小约为23M,首次加载模型需要9s左右。(尤其是在做完纹理烘焙后,由于贴图变得复杂,模型更大了)

以下是几个优化模型大小的建议:

(左图为优化前,右图为优化后)

现在,我们基本完成了整个3D展览馆的开发。虽然有一些细节没有在文中涉及到,但开发过程大致如此。

THE END
1.裸眼3D看文物!殷墟博物馆新馆正式开馆,近3000件套文物首次亮相利用裸眼3D技术展示文物 正观新闻记者怀揣好奇走进新馆,探秘新馆有哪些亮点与乐趣。据介绍,殷墟博物馆新馆展厅面积约2.2万平方米,将展出青铜器、陶器、玉器、甲骨等文物近4000件套,其中,四分之三以上的珍贵文物属于首次亮相。此次展陈聚焦“伟大的商文明”这一主题,设有3个基本陈列、4个专题展览和1个特色沉浸https://baijiahao.baidu.com/s?id=1791933080476245223&wfr=spider&for=pc
2.3D展览馆立体图片3D展览馆三维素材3D展览馆模板下载智能精选为您提供丰富的3D展览馆图片素材,3D展览馆立体,3D展览馆三维,3D展览馆图片素材下载。助力您对于3D展览馆立体三维的创意设计灵感,充实饱满作品,查找更多立体三维作品选择摄图网下载https://699pic.com/image/3dzhanlanguan.html
3.展览馆3d模型下载展览馆3d模型下载下载地址 模型详情我要评价该模型 编号:34133 类别:工装模型-商业展示 风格:现代风格 版本:MAX 2009 大小:190KB 编辑日期:2017-07-11 贴图:无 材质:无 关键词:3d模型下载 3dmax模型 现代风格模型 黄色模型 分享:赵明朋分享 立即下载 https://mx.shejiben.com/m34133.html
4.鞍山3D魔幻展览馆攻略,3D魔幻展览馆门票3D魔幻展览馆概况 蜂蜂点评(0条) 我要点评 穿越时间,穿越空间 景点位置 辽宁省鞍山市铁东区站前乐购四楼暂无内容 更新纠错马蜂窝旅游网 中国年轻一代用得更多的旅游网站 上亿旅行者共同打造的"旅行神器" 60,000 多个全球旅游目的地 600,000 个细分目的地新玩法 760,000,000 次攻略下载 38,000 家旅游产品https://www.mafengwo.cn/poi/107054020.html
5.企业产品展厅设计企业产品展厅设计 3D展览馆方案策划公司 成都九来九往信息科技是专业的数字化展厅建设公司沉浸式展厅设计图片 方案策划 互动设备开发 布置等一体化服务 验收后的智慧展厅深受参观人员的*** 创意展厅是利用数字化设备与展厅空间实物结合展示内容的一种内容http://xaqhhy.cn.trustexporter.com/xinwen-463607.htm
6.展览馆3D模型下载,CAD图纸下载展览馆 城市展览馆建筑图 收藏 下载图纸 QQ2540089940 154 17 某展览馆配电图 收藏 下载图纸 QQ2540089940 134 6 关于我们 | VIP说明 | 联系我们 | 版权说明 开拔网官方 开拔机械联盟 免责申明:本网站模型由用户自行上传,如权利人发现存在误传其作品情形,请及时与本站联系。 Copyright 2013-2024 WWW.https://www.sanweimoxing.com/t-%E5%B1%95%E8%A7%88%E9%A6%86-0.html
7.博物馆展览馆3d模型3D素材下载编号16268293博物馆展览馆3d模型 文件属性: 材质: 模型灯光: 注意事项: 请仔细阅读描述格式、版本、渲染器和插件。obj、fbx等通用格式不会兼容所有软件,购买前先咨询。 格式转换出错、软件不兼容问题不在售后范围内。 使用非描述中的格式、版本以及软件环境打开文件可能会有不兼容的问题。此情况不在售后范围内,请按需购买https://weili.ooopic.com/weili_16268293.html
8.点点展览馆3d模型点点展览馆模型图片素材免费下载3D溜溜网3d模型库,汇集多类型点点展览馆模型图片素材,帮设计师根据不同场景,寻找免费下载的三维立体,3dmax和C4D模型素材,找点点展览馆3d模型图片素材就来3D溜溜网。https://3d.3d66.com/relation/relation_2276970.html
9.展览3D科技与概念服装展览馆开幕式日记【展览】3D科技与概念服装展览馆开幕式 10月24日下午,在武汉创意天地创意工坊11#2内,科技3项(3D打印、参数化设计、互动游戏)和服装设计正式面向大家拉开序幕。本次活动由武汉市洪山区人民政府、武汉光谷联合集团、李全武工作室联合举办。现场人气颇https://m.douban.com/note/488337648/
10.中国展览馆协会相关的广州3D传感器公司名单中国展览馆协会相关的公司名单(广州,3D传感器)导出当前榜单数据 + 订阅商机 行业标签:包含一个即可 行业标签:必须同时包含 已选: 清空 导出当前数据 找到 条企业排名,公司达到一定热度才能上榜,数据每天更新。企业标签根据算法分析标注,可能具有相关性,但可能并不准确。有误请联系客服。仅供参考。暂无数据 https://www.jobui.com/rank/company/view/guangzhou/3dchuanganqi/a-caec/
11.用H5技术打造新颖的互联网展馆—Web3D网上虚拟展厅(原创)基于3D技术和数据库技术,统一管理模型资源,集产品展示、技术选型、3D预览、3D互动、模型数据下载等多种功能于一体,帮助企业节省销售成本和实现营销创新。 产品可以部署在私有网络,也可以发布到互联网。欢迎与我们联系了解详情和价格。 四、网上展览馆 网上展馆是一个利用全新Web3D形成将展览馆放到互联网上进行展示的平台https://www.dhznkj.com/news/1010863.html
12.清远首个裸眼3D城市规划展览馆即将落成图为正在调试的裸眼3D展览区。 南方日报记者 王良珏 摄 清远城市规划展览馆将让宾客更直观更具体的了解到清远市的整体规划。?王良珏 摄 ? 南方日报讯(记者/王良珏 陈步上 摄影报道)今日,记者从相关部门了解到,清远市城市规划展览馆即将在2013国际旅游文化节开幕前夕开馆。本报记者来到尚在施工中的展览馆内看到,除https://news.sina.com.cn/c/2013-10-28/150228552261.shtml?ivk_sa=1024320u
13.网上虚拟展览馆布展系统3Dshowing3Dshowing是一款用于展览馆仿真设计的CAD软件系统,借助这个软件,展览馆管理人员可以在计算机上设计整个展览馆的布局,以供参观者在虚拟的展馆中漫游。3Dshowing的主要功能包括:平面设计,室内装饰,漫游功能,模型管理等。本虚拟展览馆系统基于一种适于描述虚拟展览馆场景的场景描述语言XVM(XML-based Scene Description Languagehttps://ndsc.nju.edu.cn/86/0f/c39171a493071/page.htm
14.展览馆素材展览馆图片展览馆素材图片下载觅知网为您找到269个原创展览馆素材图片,包括展览馆图片,展览馆素材,展览馆海报,展览馆背景,展览馆模板源文件下载服务,包含PSD、PNG、JPG、AI、CDR等格式素材,更多关于展览馆素材、图片、海报、背景、插画、配图、矢量、UI、PS、免抠,模板、艺术字、PPT、视频等设计https://www.51miz.com/so-sucai/251158.html
15.3D虚拟展览馆建设方案三维数字虚拟展馆建设方案第五:互融化是指把企业风格、产品、发展方向、定位等融入到3D虚拟展览馆建设中。通过环境的搭建让虚拟展馆和企业格调想通。例如企业是做环保产品的,那么虚拟展馆就设计的绿色、蓝色等具有环保效应的格调。 第六:实用化是指让展馆不是摆设让展馆真正的起到应该有的效应。 https://www.gotovr.cn/news/gs/175.html
16.网上3D廉政警示教育展览馆设计,虚拟廉政教育基地策划方案今后,我们应该进一步加强网上3D廉政警示教育展厅的建设和管理,不断完善其功能和内容,为推动反腐倡廉工作的发展和落实提供更加有力的支持。 西安光之影科技致力于廉政类展厅展馆项目的效果图设计、廉政教育基地方案策划、廉政互动体验多媒体设备开发、廉洁文化馆建设施工一站式服务。 发布时间:2024-12-01 展开全文https://93510498.b2b.11467.com/m/news/6563084.asp
17.vr展厅方案制作线上虚拟展会商迪3D将汽车的物理形态通过3Dmax、Blender等建模软件制作VR线上车展一比一还原汽车与线下展馆形态,实现汽车VR线上车展360度无死角观看。 了解更多> VR文博艺术馆 云端3D文物展览馆,逼真的视觉感受、美术文博VR展厅从设计到布局、层层递进3D沉浸式感官体验,让人身临其境接受艺术历史文化的熏陶、是商迪3D制作VR博物http://www.kushixiu.com/
18.海南省规划展览馆海南省规划展览馆国土空间规划裸眼3D影片废标、流标的原因海南华夏世纪项目管理有限公司受海南省规划展览馆的委托,就海南省规划展览馆国土空间规划裸眼3D影片组织竞争性磋商,开标时间为2021年05月06日10时00分。因该项目通过初步审查的公司家数不足法定三家,根据政府采购法律法规的有关规定,本项目采购失败 https://www.ccgp-hainan.gov.cn/mobile/cgw_show_fblbgg.jsp?id=7631
19.展馆简介三馆项目是长春市的十大重点工程,于2012年破土动工, 至2016年10月完成全部土建、室外景观、室内装修及规划馆的布展工程。三馆项目由规划馆、博物馆和书画馆组成,项目占地面积约7.3万平方米,总建筑面积约6.3万平方米,其中规划展览馆建筑面积约2.7万平方米,布展面积约1.5万平方米。 http://www.ccghzg.com/zggk/zgjj.htm
20.3D展厅3D画廊3D艺术馆3D展览馆返回张雄艺术网首页 在线商城 艺术家网 新闻中心 在线视频 在线展厅 设计摄影 论坛 博客 3D艺术馆手机版请扫二维码 手机版请扫二维码 手机版请扫二维码 手机版请扫二维码 手机版请扫二维码 手机版请扫二维码 手机版请扫二维码 手机版请扫二维码 手机版请扫二维码 手机版请扫二维码 首页上一页1234567http://www.zxart.cn/3d.html