首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在页面极速渲染3D模型

本文将从模型网格和贴图文件两方面分析,介绍几种通过技术角度优化加载速度和提高渲染性能的途径,在保证 3D 模型不减面,贴图不缩小的情况下,将模型精致地还原在 H5 或其他应用程序中。...将模型导出为 glTF 格式 glTF 介绍 glTF 称为“ 3D 界的 JPEG”,使用了更优的数据结构,为应用程序实时渲染而生。...,最小化 3D 文件资源; - 优化了应用程序读取效率和和减少渲染模型的运行时间; - 支持 3D 模型几何体、材质、动画及场景、摄影机等信息。...模型贴图优化 上述描述的模型压缩只针对模型网格数据,不会对 glTF 文件里的贴图进行处理。然而很多时候贴图文件往往大于模型。...)才能开始渲染,而具有相同尺寸的贴图纹理 GPU 占用内存大小相同,故压缩后的 png/jpg 对于渲染过程并没有优化

8.5K32

Threejs进阶之二:gltf模型场景优化--添加地面和灯光

上一节中我们将一辆摩托车的gltf模型加载到了三维场景中,这一节我们来对场景进行优化,使其更符合现实的情况,先看最终效果 添加地面首先我们给场景添加一个地面,这里用到了PlaneGeometry,创建一个...//开启阴影 this.scene.add(sportLight); }此时刷新浏览器,我们发现,聚光灯的效果已经有了,但是场景中并没有出现阴影,前面我们讲过,要开启阴影,需要同时设置渲染器的...shadowMap的enabled为true,灯光的castShadow 为true,网格的castShadow 为true,地板的receiveShadow 为true才能产生阴影效果 设置渲染器shadowMap...// console.log(gltf); const motorModel = gltf.scene motorModel.traverse(obj => {...在render() 方法中添加如下代码this.controls.update()刷新浏览器,可以看到此时鼠标的缩放和旋转已经被限制在了一定的范围内 好了,这次就先到这里吧,后面会继续对该场景进行优化

2.6K10
您找到你想要的搜索结果了吗?
是的
没有找到

Threejs在你的网页里放一个冰墩墩!

Threejs基础场景 首先当然也是最重要的,你必须得有冰墩墩的3D模型。而这最重要的一环,大帅花了3美刀已经为大家买来了。 接下来我们用Threejs把冰墩墩在网页里显示出来。...大帅之前写过几篇Threejs的文章,想要学习网页3D渲染的小伙伴们记得点点赞,后续我还会多更新一些Threejs的教程。 2天赚了4个W,手把手教你用Threejs搭建一个Web3D汽车展厅!...模型优点 这里我再给没看过之前文章的小伙伴们分享下GLTF的格式的特点以及如何在Threejs里加载GLTF模型。...GLTF格式(图形语言传输格式)是由OpenGL官方维护团队推出的现代3d模型通用格式,可以包含几何体、材质、动画及场景、摄影机等信息,并且文件量还小。有3D模型界的JPEG之称。...那是因为原本的身体模型对象上就有贴图,我直接拿去作为卡通渲染材质的贴图,省的再加载一遍了。 现在我们的冰墩墩就很BlingBling了对吧~ Enjoy~

2.2K20

干货 | 2D+1D | vivo官网Web 3D应用开发与实战

常用的一些3D渲染库有:ThreeJs、BabylonJS、SceneJS以及CesiumJs; 几种不同3D渲染库对比: ?...所以,基于以上的对比,我们选取ThreeJs作为我们3D渲染的底层库去实现手机模型3D渲染。 4.1.2 模型选型 了解了渲染库,我们再来聊一聊常用的3D模型格式:OBJ、FBX、GLTF。...2)FBX 由于不同引擎解析的规范不同,导致不同引擎渲染出的效果差别较大 3)GLTF(GLB) 模型格式扩展性较高,ThreeJs、Babylonjs等WebGL渲染引擎的支持性较好 4.2 3D场景搭建及方案实施...4.3 性能优化 4.3.1 模型压缩 为了提升页面初始化的加载速度以及切换颜色模型时的解析速度,我们在制作完成模型后,需要对模型进行压缩以降低模型的体积量。...谷歌针对GLB模型有一个压缩库Draco 3D,可以在不影响模型展示效果的情况下,对模型的体积进行压缩。可以利用GLTF Pipeline命令行对GLTF模型进行压缩。

2.1K40

2D+1D | vivo官网Web 3D应用开发与实战

常用的一些3D渲染库有:ThreeJs、BabylonJS、SceneJS以及CesiumJs; 几种不同3D渲染库对比: 通过对比我们可以发现,上述几种渲染库各有优点。...但是在做手机模型3D渲染时,对于光照和阴影以及反射的侧重点比较高,并不需要碰撞检测等特性。所以,基于以上的对比,我们选取ThreeJs作为我们3D渲染的底层库去实现手机模型3D渲染。...4.1.2 模型选型 了解了渲染库,我们再来聊一聊常用的3D模型格式:OBJ、FBX、GLTF。...2)FBX 由于不同引擎解析的规范不同,导致不同引擎渲染出的效果差别较大 3)GLTF(GLB) 模型格式扩展性较高,ThreeJs、Babylonjs等WebGL渲染引擎的支持性较好 4.2 3D...4.3 性能优化 4.3.1 模型压缩 为了提升页面初始化的加载速度以及切换颜色模型时的解析速度,我们在制作完成模型后,需要对模型进行压缩以降低模型的体积量。

2.1K40

Threejs进阶之一:基于vite+vue3+threejs构建三维场景

threejs创建三维场景,并挂载到div上进行展示引入Threejs库文件、轨道控制器和GLTF加载器在motor3d.js中引入Threejs库文件,并引入轨道控制器和GLTFLoader文件import...,首先我们创建一个添加GLTF文件的方法添加addGLTFModel(modelName) 方法// 加载模型 addGLTFModel(modelName) { return new Promise...模型添加成功') }) }) }创建initMesh() 方法创建initMesh() 方法,在该方法中调用上面的addGLTFModel()方法,并传入3dModels文件夹下GLTF...('resize',this.onWindowResize.bind(this)) }刷新浏览器,看效果 这里我们遇到了和前面将到的threejsgltf模型颜色色差的问题,将如下代码添加到渲染器初始化函数中...//解决加载gltf格式模型纹理贴图和原图不一样问题 this.renderer.outputEncoding = THREE.sRGBEncoding;重新刷新浏览器,问题解决 好的,

4.9K21

3D领域的jpg?模型交换格式glTF概述

什么是glTF? 在3D开发领域,存储模型是一个基本需求,对于前端也不例外。...通常来说,3d模型的数据由一些固定的元素构成,但存储格式却种类繁多,web常用的格式有obj、stl等等,不同平台和渲染引擎也会设计自己的私有格式,它们之间通常互不兼容,导致跨平台交换模型十分困难。...2.0版本,并得到许多建模软件和渲染引擎的支持,Maya、3dmax、unity、blender等都可以导入导出glTF模型threejs,babylonjs等web渲染引擎都提供动态加载器。...如果你有跨平台需要交换3d模型的需求,不妨考虑使用它。 glTF的设计思想 glTF的核心设计思路是数据和结构的分离,通过json文件存储模型的层级和索引信息,通过二进制文件存储扁平的数据体。...总结 glTF作为一种通用模型交换格式,可以容纳常见的3d模型所必须的信息,由于采用json结构表达,也非常适合前端同学入门学习。

3.9K52

Threejs进阶之三:通过GUI修改gltf模型(摩托车)颜色

上一节我们对摩托车的场景进行了优化,添加了聚光灯及阴影等效果,这一节我们继续对摩托车场景进行优化,我们通过GUI来控制摩托车各个部位颜色的修改 先看下修改后的最终效果 引入GUI在motor3d.js中通过...import引入GUI插件import { GUI } from 'three/examples/jsm/libs/lil-gui.module.min.js' //引入GUImotor03.gltf的组成在对...gltf模型进行修改之前,我们需要先了解下这个模型的组成,我们可以通过在控制台打印该模型的方式查看其文件结构,也可以在threejs官网通过editor功能查看。...创建车身材质定义一个bodyMaterial变量,用于接收Threejs的材质对象,这里我们使用Threejs提供的物理网关材质MeshPhysicalMaterial,这个材质是基于物理渲染,也就是PBR...traverse递归遍历模型Threejs为我们提供了一个递归遍历的方法.traverse,使用它可以遍历很方便的获取我们需要的Mesh,traverse提供了一个回调函数,我们在traverse的回调函数中通过判断对象的

4.3K30

Threejs入门之二十五:Threejs加载gltf文件

这一节我们来通过Threejs加载一个glft格式的三维模型文件,首先我们先简单了解下gltf文件gltf文件gltf文件全称Graphics Language Transmission Forma(图形语言传输格式...),是一种三维模型格式,用于传输和加载3D场景和模型;其号称是图形界的JPEG,能够实现快速的模型数据交换。...加载gltf文件下面通过代码实现加载一个gltf格式的文件到场景中,首先还是需要创建场景、相机、渲染器等初始化代码,具体步骤查看前面章节,代码如下页面初始化import * as THREE from...,同时打开调试工具,查看gltf打印的数据结构 鼠标旋转发现,图像颜色与原本的gltf文件颜色有偏差,这里只需要修改WebGL渲染器默认的编码方式.outputEncoding就可以了 在initRenderer...()函数中加入如下代码//解决加载gltf格式模型纹理贴图和原图不一样问题 renderer.outputEncoding = THREE.sRGBEncoding;再次刷新浏览器,看效果 修改gltf

5.4K31

Threejs项目实战之二:产品三维爆炸图效果展示

import * as THREE from 'three' 这里我们选择的产品模型gltf格式的文件,因此,我们需要引入threejs为我们提供的GLTFLoader加载器 import {...相关设置 const init = () => {} 为了便于后期代码的维护,我这里将创建threejs场景、相机、灯光、渲染器及控制器等各个部分进行了分别的封装,这样便于后期的代码维护与修改。...模型函数,使用Threejs提供的new GLTFLoader()方法加载gltf模型文件,具体代码如下: // 加载GLTF模型 const initModel = () => { loader...= new GLTFLoader() loader.load('/model/fm.gltf', gltf => { model = gltf.scene model.position.set...(0, -0.08, 0) // 添加模型到场景 scene.add(model) }) } 创建初始化渲染器函数,使用Threejs提供的new THREE.WebGLRenderer

51221

谈谈3D Tiles(3):个人总结

Cesium渲染调度 目前,WebGL技术+三维球开源框架+大数据渲染,如果拿这三个条件来过滤,除了Cesium并没有其他选择,所以这块要求不能太高。...首先,glTF是针对单个模型的情况,强调数据的完整性,独立性。但3D Tiles是一个树关系,每个Tile只是其中的一个Node。打个比方,一棵树上,节点是叶子,但现在节点对应的是一颗小树。...所以,站在3D Tiles的角度,glTF有很多过度设计的部分。比如shader,animation,scenemanager等,还有纹理部分,不能说做不到纹理公用,但确实在设计上没有体现。...在渲染调度上,3D Tiles和glTF都是基于状态,你可以想象,虽然在代码逻辑上清晰,但在运行时上,对浏览器来说是一个负担。明明一次性能做好的事情,非要分成好几个任务,还美其名曰敏捷。...开源 有感于最近的一些亲身经历,也看了看threejs,Openlayers,Leaflet,Echart等项目,也在思考这些优秀的开源项目之所以优秀,到底有没有一些共性。

4.6K110

Vue3 + Three.js 商城可视化实战

效果展示 支持不同位置展示不同描述:配合数据配置渲染不同桢的效果 根据选中的产品,切换相应产品效果 根据选中场景,切换相应的场景 实现思路 封装一个Three的函数,支持设置相机、场景、渲染函数,添加模型解析器...增加一个场景展示的div,用于渲染3D信息 Three 实战 加载场景及控制器 初始化场景HDR图片 // 初始化场景 initScene() { this.scene = new THREE.Scene...this.model = gltf.scene.children[0]; this.scene.add(gltf.scene); }); } // 添加模型 async...修改相机为模型相机 this.camera = gltf.cameras[0]; ... } 调整后模型位置在画面中间 调整场景其他配置 // 设置模型 setModel(modelName) {...根据选中的产品,切换相应产品效果 根据选中场景,切换相应的场景 总结 通过类的方式创建的方法,能够很好的保存了创建过程中3D模型的所具备的属性和功能,在实例化后,可以很便捷的获取到相应的属性 在创建场景

14210

Flutter 中渲染3D 模型

**我们将实现一个模型查看器演示程序,并在您的flutter应用程序中使用model_viewer包以glTF和GLB格式显示3D模型。...地址:https://pub.dev/packages/model_viewer 介绍 Flutter小部件,用于在glTF和GLB设计中提供交互式3D模型。...它以glTF和GLB格式显示3D模型,并通过鼠标,手触摸和自动旋转将其旋转360度。 功能 模型查看器具有以下功能: 呈现glTF和GLB模型。(此外,USDZ型号在iOS 12+上。)...参数 **src:**此参数用于3D模型的URL或路径。此参数是必需的。仅支持glTF / GLB型号。...某些模型查看器功能,参数,创建用于运行模型查看器的演示程序,并以glTF和GLB**格式显示3D模型,并通过鼠标,手触摸和在flutter应用程序中使用model_viewer包自动旋转360°度。

24.7K20

大型 3D 互动项目开发和优化实践

3D 渲染层不停地在调用渲染方法,以响应用户操作和播放动画,这耗费了大量 CPU 和 GPU 的计算资源,还占用了存储模型顶点信息和贴图纹理的内存空间,因此在多个 3D 渲染层共存的情况下,需进行一定的管理以优化性能...— 在众多的 3D 模型格式中,我们选择了 .gltf 格式。...相对于其他模型格式,.gltf 可以减少 3D 格式中与渲染无关的的冗余数据,从而确保文件体积更小。 目前 3D 素材相对来说都比较大,这对于移动端加载体验来说,无疑是致命的。...参考团队内其他同学的优化经验(说一说 glTF 文件压缩),使用 gltf-transform 工具对模型进行自动化减面。...总结 以上内容基本覆盖了团队内开发 3D web 项目的整个流程,在从 0 到 1 的过程中积累了对 3D 模型的控制方法和 3D 渲染原理的理解,并用工程化手段简化中间的一些渲染优化流程。

24620
领券