通过babylon.js使用blender导出的模型创建web3d应用

本文涉及的产品
交互式建模 PAI-DSW,每月250计算时 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
模型训练 PAI-DLC,5000CU*H 3个月
简介: 通过babylon.js使用blender导出的模型创建web3d应用

通过babylon.js使用blender导出的模型创建web3d应用

什么是babylon.js?

Babylon.js,是由微软使用TypeScript开发的一款开源的web端3d游戏引擎,与three.js一样都支持webgpu。但相比于three.js来说,babylon.js更强大。现在在github上18.8K的star:

babylon.js的github仓库链接: BabylonJS/Babylon.js: Babylon.js is a powerful, beautiful, simple, and open game and rendering engine packed into a friendly JavaScript framework. (github.com)

而它的竞品three.js在github上有87k的star:mrdoob/three.js: JavaScript 3D Library. (github.com)

为什么是babylon.js?

虽然说这两引擎在github上的star相差很多,但我认为这是由于时机的关系。three.js在2009年发布,而babylon.js在2013年发布。

其次,three.js是由社区推动,并且使用javascript开发。而babylon.js有个有钱的爹——微软,使用TypeScript开发,这意味着当你进行开发时,你能够得到更好的类型提示,如果不熟悉TypeScript的朋友,可以看我的专栏:TS入门小记 - 跟我一起秃秃秃的专栏 - 掘金 (juejin.cn)

babylon.js的官方社区也在快速的发展:Babylon.js (babylonjs.com),如果你在官方论坛中提问的话,大概率半小时内能得到答复。

而且,非常重要的一点。babylon.js的定位是web3d游戏引擎,而three.js的定位为一个web3d库。

综上,我选择babylon.js,下面将先进行对模型的处理。

一、导出模型

本篇文章导出模型的建模软件为blender。

如果模型设置了修改器,请先全部应用(a全选后右键点击,选择转换到网格,勾选保留原有)。建议ctrl+j合并。

随后导出glb文件(建议勾选压缩)。

二、压缩材质图片

大多数时候我们导出的文件很大是因为材质图片太大。

gltf-pipeline提供了一个工具来对glb/gltf文件拆解和合成,我们先对这个工具进行下载,请确保你的操作系统上安装了node.js:

npm install -g gltf-pipeline

或者使用pnpm

pnpm add -g gltf-pipeline

使用:gltf-pipeline -i model.gltf -t 命令模板,将纹理材质图片单独输出

随后,你可以通过ps,将图片都保存为web格式,选择图片的品质,可以尝试选择,大多数时候图片的品质并没有什么影响。但是空间却只有原来的最多1/10。

然后使用:gltf-pipeline -i model.gltf -o model.glb 命令模板,将分离的模型文件和纹理材质文件统一打包转为单体glb文件。

本篇文章使用github存储模型文件,我们可以使用任何允许跨域的网站来导入我们的模型文件。

三、在playground中使用模型

babylon也有editor,这是一个很有潜力的项目。不过这个软件不太好用,而且是由社区开发的。所以我建议入门选手使用playground来编写程序和使用模型:

Babylon.js Playground (babylonjs-playground.com)

我们选择语言为TypeScript,如果没有合适的模型的朋友,可以使用我github仓库中的两个模型来进行学习:qian357891/MeshesLibrary: A assets library for glb file (github.com)

我们在playground中输入以下代码,关于各个变量和函数的作用,可以看我的注释:

class Playground {
  public static CreateScene(
    engine: BABYLON.Engine,
    canvas: HTMLCanvasElement
  ): BABYLON.Scene {
    const scene = new BABYLON.Scene(engine);// 创建一个场景,这是一个必须的常量/变量,参数为Playground类中CreateScene静态方法的engine属性

    // 创建一个相机,这也是一个必须的常量/变量。这个相机是BABYLON.ArcRotateCamera类的一个实例,这个相机能够让我们使用鼠标和触摸对模型进行观看。
    const camera = new BABYLON.ArcRotateCamera(
      "camera",
      0,
      Math.PI / 2,
      10,
      BABYLON.Vector3.Zero(),
      scene
    );

    // 导入模型
    BABYLON.SceneLoader.ImportMesh(
      "",
      "https://cdn.jsdelivr.net/gh/qian357891/MeshesLibrary@b393a2d7702579e657ceb3c5a150ba650f13b68a/",
      "temple_single_s.glb",
      scene,
      function (meshes) {
        scene.createDefaultCameraOrLight(true, true, true);
        scene.createDefaultEnvironment();
      }
    );

    // 该静态方法返回的是我们定义的scene场景
    return scene;
  }
}

关于在playground中导入外部资源,也可以看看官方的文档,在本篇文章中,我们使用的是jsdelivr.com。

随后我们点击抬头栏目中的下载按钮,便可以得到一个打包好的压缩文件。

image-20221123191055055

下载好压缩文件后,打开压缩文件中的index.html。发现依赖包已经通过cdn引入了依赖包,你可以直接打开html文件进行预览:
代码片段

相关文章
|
17天前
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
30 3
|
22天前
|
移动开发 开发者 HTML5
构建响应式Web界面:Flexbox与Grid的实战应用
【10月更文挑战第22天】随着互联网的普及,用户对Web界面的要求越来越高,不仅需要美观,还要具备良好的响应性和兼容性。为了满足这些需求,Web开发者需要掌握一些高级的布局技术。Flexbox和Grid是现代Web布局的两大法宝,它们分别由CSS3和HTML5引入,能够帮助开发者构建出更加灵活和易于维护的响应式Web界面。本文将深入探讨Flexbox和Grid的实战应用,并通过具体实例来展示它们在构建响应式Web界面中的强大能力。
34 3
|
4天前
|
缓存 安全 网络安全
HTTP/2与HTTPS在Web加速中的应用
HTTP/2与HTTPS在Web加速中的应用
|
7天前
|
SQL 安全 前端开发
PHP与现代Web开发:构建高效的网络应用
【10月更文挑战第37天】在数字化时代,PHP作为一门强大的服务器端脚本语言,持续影响着Web开发的面貌。本文将深入探讨PHP在现代Web开发中的角色,包括其核心优势、面临的挑战以及如何利用PHP构建高效、安全的网络应用。通过具体代码示例和最佳实践的分享,旨在为开发者提供实用指南,帮助他们在不断变化的技术环境中保持竞争力。
|
18天前
|
前端开发 安全 应用服务中间件
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第26天】随着互联网的快速发展,前端性能调优成为开发者的重要任务。本文探讨了HTTP/2与HTTPS在前端性能优化中的应用,介绍了二进制分帧、多路复用和服务器推送等特性,并通过Nginx配置示例展示了如何启用HTTP/2和HTTPS,以提升Web应用的性能和安全性。
17 3
|
18天前
|
数据可视化 JavaScript 前端开发
数据可视化进阶:D3.js在复杂数据可视化中的应用
【10月更文挑战第26天】数据可视化是将数据以图形、图表等形式呈现的过程,帮助我们理解数据和揭示趋势。D3.js(Data-Driven Documents)是一个基于JavaScript的库,使用HTML、SVG和CSS创建动态、交互式的数据可视化。它通过数据驱动文档的方式,将数据与DOM元素关联,提供高度的灵活性和定制性,适用于复杂数据的可视化任务。 示例代码展示了如何使用D3.js创建一个简单的柱状图,展示了其基本用法。D3.js的链式调用和回调函数机制使代码简洁易懂,支持复杂的布局和交互逻辑。
55 3
|
18天前
|
前端开发 JavaScript API
前端框架新探索:Svelte在构建高性能Web应用中的优势
【10月更文挑战第26天】近年来,前端技术飞速发展,Svelte凭借独特的编译时优化和简洁的API设计,成为构建高性能Web应用的优选。本文介绍Svelte的特点和优势,包括编译而非虚拟DOM、组件化开发、状态管理及响应式更新机制,并通过示例代码展示其使用方法。
33 2
|
18天前
|
测试技术 持续交付 PHP
PHP在Web开发中的应用与最佳实践###
【10月更文挑战第25天】 本文将深入探讨PHP在现代Web开发中的应用及其优势,并分享一些最佳实践来帮助开发者更有效地使用PHP。无论是初学者还是有经验的开发者,都能从中受益。 ###
39 1
|
18天前
|
负载均衡 监控 算法
论负载均衡技术在Web系统中的应用
【11月更文挑战第4天】在当今高并发的互联网环境中,负载均衡技术已经成为提升Web系统性能不可或缺的一环。通过有效地将请求分发到多个服务器上,负载均衡不仅能够提高系统的响应速度和处理能力,还能增强系统的可扩展性和稳定性。本文将结合我参与的一个实际软件项目,从项目概述、负载均衡算法原理以及实际应用三个方面,深入探讨负载均衡技术在Web系统中的应用。
48 2
|
22天前
|
JavaScript 前端开发 持续交付
构建现代Web应用:Vue.js与Node.js的完美结合
【10月更文挑战第22天】随着互联网技术的快速发展,Web应用已经成为了人们日常生活和工作的重要组成部分。前端技术和后端技术的不断创新,为Web应用的构建提供了更多可能。在本篇文章中,我们将探讨Vue.js和Node.js这两大热门技术如何完美结合,构建现代Web应用。
21 4

热门文章

最新文章