Web 3D 框架简介

news2024/11/20 14:38:18

前言

3D游戏引擎的历史可以追溯到20世纪80年代末和90年代初。当时,计算机技术迅速发展,人们开始对图形和游戏感兴趣。以下是3D游戏引擎的历史故事:

早期引擎的诞生(1980-1990年代)

在这个时期,一些早期的3D游戏引擎开始出现。其中一个著名的例子是id Software开发的Doom引擎,该引擎是第一个在主流市场上取得成功的3D游戏引擎。它采用了一种被称为"重建"的技术,可以在限制的硬件资源下实现3D效果。

商业化时代的到来(1990-2000年代)

随着3D游戏的普及,商业化的3D游戏引擎开始涌现。其中最著名的是id Software开发的Quake引擎,它是第一个具有实时3D渲染和支持网络游戏的引擎。Quake引擎的成功推动了更多的公司开始开发自己的3D游戏引擎,如Epic Games的Unreal Engine和Crytek的CryEngine。

开源引擎的崛起(2000年代后期)

在2000年代后期,一些开源的3D游戏引擎开始崛起。其中最著名的是Unity引擎,它提供了一个友好的界面和工具,使得游戏开发者可以轻松地创建和发布游戏。此外,还有一些其他开源引擎,如Ogre3D和Godot等,它们也受到了广泛的关注和采用。

HTML5和WebGL的兴起(2010年代)

随着HTML5和WebGL技术的发展,3D游戏引擎开始向Web领域扩展。这使得开发者可以在浏览器中创建和运行高质量的3D游戏,而无需额外的插件。一些主要的Web 3D游戏引擎,如Three.js和Babylon.js,开始出现,并得到了广泛的使用。

Web 3D 框架

Unity 3D ,团结引擎,基于 Unity 2022LTS。是 Unity 中国研发团队推出的 Unity 中国版引擎,专为中国开发者定制的实时3D引擎,它以 Unity 2022 LTS 为研发基础,推出了微信小游戏解决方案、团结引擎车机版,赋予小游戏和智能汽车领域的开发者,以更强劲的创作动能,是 Unity 中国加速本土化进程的里程碑。

f692f8ec80dc44ab8c1aeb7b80e829f7.png

Three.js,基于WebGL,提供了一些简单易用的API,使用户能够轻松地创建和显示3D对象、场景、光照和相机。支持多种渲染效果,如纹理映射、阴影、反射等,可以在网页中实现逼真的3D效果。它还提供了一些辅助功能,例如加载模型和动画、进行交互和控制等。应用于游戏开发、虚拟现实、数据可视化等领域。具有强大的灵活性和可扩展性,用户可以通过自定义着色器和材质来实现更高级的效果,还可以通过添加插件和扩展来增加功能。它的文档齐全且有很多示例和教程可供参考,对于初学者和有经验的开发者来说都是一个很好的选择。

4ca075ba0faa434fa54bb8c21fe7dabf.png

PlayCanvas,基于Web的实时图形引擎,提供了一整套工具和功能,可视化场景设计器 workflow,能够直观地创建和编辑游戏内容。这个编辑器支持实时预览和调试功能,基于WebGL和WebVR,以实现高质量的实时渲染效果。开发者可以利用引擎内置的渲染器和材质系统来创建逼真的光照和阴影效果。集成了物理引擎,可以模拟真实世界中的物理效果,如重力、碰撞和刚体运动。

b8cfe26ce65940e89f920e86e494fed9.png

babylon.js ,巴比伦 js,由微软开发和维护的基于WebGL技术 Web3D 的开源游戏引擎,用于创建高性能、交互式的3D图形应用程序。它提供了一个简单易用的API,可以实现各种效果,如渲染、动画、物理模拟、碰撞检测等。可以创建出丰富、互动性强的3D图形应用程序,如游戏、虚拟现实体验、可视化效果等。

209b507ebc7e440781e62236196f5de0.png

9fb8387fc3574384a84005970348e53e.png

CopperCube ,可视化编辑器类型,使用户可以轻松地创建三维场景。它提供了多种内置工具和特性,包括场景编辑器、物理模拟、碰撞检测、动画编辑器等,使开发人员可以在不编写任何代码的情况下创建复杂的三维应用程序。可以使用JavaScript语言来自定义应用程序的行为和交互。它还支持导入和使用3D模型、贴图和音频文件,以及创建动画效果和粒子效果。

c30491e3e85c4195aac6b9e4fc6d2994.png

a5bf9e5617004086a3cc41c099dc4875.png

​​​​​​A-frame ,用于构建虚拟现实(VR)和增强现实(AR)体验的Web开发框架。使用简单的HTML标签来创建三维图形和交互元素。它提供了一组易于使用的组件和实体,包括摄像机、光源、几何体、材质等,用于构建虚拟世界中的对象和场景。简单易用的API和强大的可扩展性。开发者可以使用JavaScript编写自定义组件,实现更复杂的交互行为和特效。同时,A-Frame也与其他Web技术无缝集成,可以与CSS、HTML、JavaScript和Web API进行交互。

d0216147934c4c6cb6c342425d885d2b.png

使用Babylon.js小试牛刀

Babylon.js inspector 检查器是一个可视化调试工具,旨在帮助您确定场景中可能存在的问题。
提供多种工具,如:
场景的层次视图
使用多个特性栅格可以动态更改对象特性
特定的辅助对象,如骨架查看器等
 

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Babylon.js 基础</title>
  <style>
    html,
    body {
      overflow: hidden;
      width: 100%;
      height: 100%;
      margin: 0;
      padding: 0;
    }

    #renderCanvas {
      width: 100%;
      height: 100%;
      touch-action: none;
    }
  </style>
  <!--https://doc.cnbabylon.com/3-0-how-to-get-babylon-js/-->
  <!--基础Babylonjs包-->
  <script src="https://cdn.cnbabylon.com/babylon.js"></script>
  <!--用于生成材质-->
  <script src="https://cdn.cnbabylon.com/materialsLibrary/babylonjs.materials.min.js"></script>
  <!--用于加载素材-->
  <script src="https://cdn.cnbabylon.com/loaders/babylonjs.loaders.min.js"></script>
  <script src="https://cdn.cnbabylon.com/postProcessesLibrary/babylonjs.postProcess.min.js"></script>
  <script src="https://cdn.cnbabylon.com/proceduralTexturesLibrary/babylonjs.proceduralTextures.min.js"></script>
  <script src="https://cdn.cnbabylon.com/serializers/babylonjs.serializers.min.js"></script>
  <!--GUI 用户交互页面-->
  <script src="https://cdn.cnbabylon.com/gui/babylon.gui.min.js"></script>
  <script src="https://cdn.babylonjs.com/Oimo.js"></script>
  
</head>

<body>
  <canvas id="renderCanvas"></canvas>
  <script>
  let sphere = null;
  let box = null;
  let ground = null;
  const Assets = {
		materials: {
			checkerboard_basecolor: {
				path: "https://assets.babylonjs.com/materials/checkerboard/checkerboard_basecolor.png",
				rootUrl: "https://assets.babylonjs.com/materials/checkerboard/",
				filename: "checkerboard_basecolor.png"
			},
			checkerboard_metallicRoughness: {
				path: "https://assets.babylonjs.com/materials/checkerboard/checkerboard_metallicRoughness.png",
				rootUrl: "https://assets.babylonjs.com/materials/checkerboard/",
				filename: "checkerboard_metallicRoughness.png"
			},
			checkerboard_normal: {
				path: "https://assets.babylonjs.com/materials/checkerboard/checkerboard_normal.png",
				rootUrl: "https://assets.babylonjs.com/materials/checkerboard/",
				filename: "checkerboard_normal.png"
			}
		},
		meshes: {
			aerobatic_plane: {
				path: "https://assets.babylonjs.com/meshes/aerobatic_plane.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "aerobatic_plane.glb"
			},
			alien: {
				path: "https://assets.babylonjs.com/meshes/alien.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "alien.glb"
			},
			Alien: {
				path: "https://assets.babylonjs.com/meshes/Alien/Alien.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Alien/",
				filename: "Alien.gltf"
			},
			AlphaBlendModeTest: {
				path: "https://assets.babylonjs.com/meshes/AlphaBlendModeTest.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "AlphaBlendModeTest.glb"
			},
			AttenuationTest: {
				path: "https://assets.babylonjs.com/meshes/AttenuationTest/AttenuationTest.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/AttenuationTest/",
				filename: "AttenuationTest.gltf"
			},
			babylonBuoy: {
				path: "https://assets.babylonjs.com/meshes/babylonBuoy.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "babylonBuoy.glb"
			},
			babylonJS_logo_v3: {
				path: "https://assets.babylonjs.com/meshes/BabylonJS-logo/v3/babylonJS_logo_v3.babylon",
				rootUrl: "https://assets.babylonjs.com/meshes/BabylonJS-logo/v3/",
				filename: "babylonJS_logo_v3.babylon"
			},
			Babylogo: {
				path: "https://assets.babylonjs.com/meshes/BabylonJS-logo/v1-2/Babylogo.babylon",
				rootUrl: "https://assets.babylonjs.com/meshes/BabylonJS-logo/v1-2/",
				filename: "Babylogo.babylon"
			},
			babylonJS_logo_solid_v3: {
				path: "https://assets.babylonjs.com/meshes/BabylonJS-logo/v3/babylonJS_logo_solid_v3.babylon",
				rootUrl: "https://assets.babylonjs.com/meshes/BabylonJS-logo/v3/",
				filename: "babylonJS_logo_solid_v3.babylon"
			},
			ballMesh: {
				path: "https://assets.babylonjs.com/meshes/ballMesh.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "ballMesh.glb"
			},
			blackPearl: {
				path: "https://assets.babylonjs.com/meshes/blackPearl.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "blackPearl.glb"
			},
			boombox: {
				path: "https://assets.babylonjs.com/meshes/boombox.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "boombox.glb"
			},
			BoomBox: {
				path: "https://assets.babylonjs.com/meshes/BoomBox/BoomBox.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/BoomBox/",
				filename: "BoomBox.gltf"
			},
			UnlitBoomBox: {
				path: "https://assets.babylonjs.com/meshes/BoomBox/UnlitBoomBox.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/BoomBox/",
				filename: "UnlitBoomBox.gltf"
			},
			both_houses_scene: {
				path: "https://assets.babylonjs.com/meshes/both_houses_scene.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "both_houses_scene.glb"
			},
			box: {
				path: "https://assets.babylonjs.com/meshes/box.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "box.glb"
			},
			Box_extras: {
				path: "https://assets.babylonjs.com/meshes/Box/Box_extras.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Box/",
				filename: "Box_extras.gltf"
			},
			Box: {
				path: "https://assets.babylonjs.com/meshes/Box/Box.obj",
				rootUrl: "https://assets.babylonjs.com/meshes/Box/",
				filename: "Box.obj"
			},
			BrainStem: {
				path: "https://assets.babylonjs.com/meshes/BrainStem/BrainStem.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/BrainStem/",
				filename: "BrainStem.gltf"
			},
			Buggy: {
				path: "https://assets.babylonjs.com/meshes/Buggy/glTF/Buggy.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Buggy/glTF/",
				filename: "Buggy.gltf"
			},
			candle: {
				path: "https://assets.babylonjs.com/meshes/candle.babylon",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "candle.babylon"
			},
			car: {
				path: "https://assets.babylonjs.com/meshes/car.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "car.glb"
			},
			CarbonFiberWheel: {
				path: "https://assets.babylonjs.com/meshes/CarbonFiberWheel.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "CarbonFiberWheel.glb"
			},
			Chair: {
				path: "https://assets.babylonjs.com/meshes/Chair/Chair.obj",
				rootUrl: "https://assets.babylonjs.com/meshes/Chair/",
				filename: "Chair.obj"
			},
			Channel9: {
				path: "https://assets.babylonjs.com/meshes/Channel9/Channel9.stl",
				rootUrl: "https://assets.babylonjs.com/meshes/Channel9/",
				filename: "Channel9.stl"
			},
			substanceShaderBall: {
				path: "https://assets.babylonjs.com/meshes/ClearCoatShaderBall/substanceShaderBall.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/ClearCoatShaderBall/",
				filename: "substanceShaderBall.gltf"
			},
			ClearCoatTest: {
				path: "https://assets.babylonjs.com/meshes/ClearCoatTest/ClearCoatTest.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/ClearCoatTest/",
				filename: "ClearCoatTest.gltf"
			},
			cloth_meshV1: {
				path: "https://assets.babylonjs.com/meshes/cloth/cloth_meshV1.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/cloth/",
				filename: "cloth_meshV1.glb"
			},
			cloth_meshV2: {
				path: "https://assets.babylonjs.com/meshes/cloth/cloth_meshV2.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/cloth/",
				filename: "cloth_meshV2.glb"
			},
			cloth_meshV3: {
				path: "https://assets.babylonjs.com/meshes/cloth/cloth_meshV3.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/cloth/",
				filename: "cloth_meshV3.glb"
			},
			cloth_meshV4: {
				path: "https://assets.babylonjs.com/meshes/cloth/cloth_meshV4.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/cloth/",
				filename: "cloth_meshV4.glb"
			},
			cloth_meshV5: {
				path: "https://assets.babylonjs.com/meshes/cloth/cloth_meshV5.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/cloth/",
				filename: "cloth_meshV5.glb"
			},
			cloth_meshV6: {
				path: "https://assets.babylonjs.com/meshes/cloth/cloth_meshV6.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/cloth/",
				filename: "cloth_meshV6.glb"
			},
			cloth_meshV7: {
				path: "https://assets.babylonjs.com/meshes/cloth/cloth_meshV7.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/cloth/",
				filename: "cloth_meshV7.glb"
			},
			cloth_meshV8: {
				path: "https://assets.babylonjs.com/meshes/cloth/cloth_meshV8.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/cloth/",
				filename: "cloth_meshV8.glb"
			},
			cloth_meshV9: {
				path: "https://assets.babylonjs.com/meshes/cloth/cloth_meshV9.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/cloth/",
				filename: "cloth_meshV9.glb"
			},
			clothFolds: {
				path: "https://assets.babylonjs.com/meshes/clothFolds.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "clothFolds.glb"
			},
			generic: {
				path: "https://assets.babylonjs.com/meshes/controllers/generic/generic.babylon",
				rootUrl: "https://assets.babylonjs.com/meshes/controllers/generic/",
				filename: "generic.babylon"
			},
			left: {
				path: "https://assets.babylonjs.com/meshes/controllers/oculusQuest/left.babylon",
				rootUrl: "https://assets.babylonjs.com/meshes/controllers/oculusQuest/",
				filename: "left.babylon"
			},
			right: {
				path: "https://assets.babylonjs.com/meshes/controllers/oculusQuest/right.babylon",
				rootUrl: "https://assets.babylonjs.com/meshes/controllers/oculusQuest/",
				filename: "right.babylon"
			},
			wand: {
				path: "https://assets.babylonjs.com/meshes/controllers/vive/wand.babylon",
				rootUrl: "https://assets.babylonjs.com/meshes/controllers/vive/",
				filename: "wand.babylon"
			},
			cornellBox: {
				path: "https://assets.babylonjs.com/meshes/CornellBox/cornellBox.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/CornellBox/",
				filename: "cornellBox.glb"
			},
			D20_Animation: {
				path: "https://assets.babylonjs.com/meshes/D20_Animation.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "D20_Animation.glb"
			},
			anisotropyMesh: {
				path: "https://assets.babylonjs.com/meshes/Demos/anisotropy/anisotropyMesh.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/Demos/anisotropy/",
				filename: "anisotropyMesh.glb"
			},
			morphLoader: {
				path: "https://assets.babylonjs.com/meshes/Demos/mograph/morphLoader.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/Demos/mograph/",
				filename: "morphLoader.glb"
			},
			lightFixture: {
				path: "https://assets.babylonjs.com/meshes/Demos/nmeGlow/lightFixture.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/Demos/nmeGlow/",
				filename: "lightFixture.glb"
			},
			riggedMesh: {
				path: "https://assets.babylonjs.com/meshes/Demos/retargeting/riggedMesh.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/Demos/retargeting/",
				filename: "riggedMesh.glb"
			},
			lightPaddle: {
				path: "https://assets.babylonjs.com/meshes/Demos/saber/lightPaddle.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/Demos/saber/",
				filename: "lightPaddle.glb"
			},
			BabylonShaderBall_Simple: {
				path: "https://assets.babylonjs.com/meshes/shaderBall/BabylonShaderBall_Simple.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/shaderBall/",
				filename: "BabylonShaderBall_Simple.gltf"
			},
			sign: {
				path: "https://assets.babylonjs.com/meshes/Demos/Snow_Man_Scene/sign.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/Demos/Snow_Man_Scene/",
				filename: "sign.glb"
			},
			snowBall: {
				path: "https://assets.babylonjs.com/meshes/Demos/Snow_Man_Scene/snowBall.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/Demos/Snow_Man_Scene/",
				filename: "snowBall.glb"
			},
			snowField: {
				path: "https://assets.babylonjs.com/meshes/Demos/Snow_Man_Scene/snowField.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/Demos/Snow_Man_Scene/",
				filename: "snowField.glb"
			},
			snowMan: {
				path: "https://assets.babylonjs.com/meshes/Demos/Snow_Man_Scene/snowMan.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/Demos/Snow_Man_Scene/",
				filename: "snowMan.glb"
			},
			marineGround: {
				path: "https://assets.babylonjs.com/meshes/Demos/underWaterReflections/marineGround.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/Demos/underWaterReflections/",
				filename: "marineGround.glb"
			},
			runeSword: {
				path: "https://assets.babylonjs.com/meshes/Demos/weaponsDemo/meshes/runeSword.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/Demos/weaponsDemo/meshes/",
				filename: "runeSword.glb"
			},
			greySnapper_vertColor: {
				path: "https://assets.babylonjs.com/meshes/Demos/UnderWaterScene/fish/greySnapper_vertColor.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/Demos/UnderWaterScene/fish/",
				filename: "greySnapper_vertColor.glb"
			},
			underwaterGround: {
				path: "https://assets.babylonjs.com/meshes/Demos/UnderWaterScene/ground/underwaterGround.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/Demos/UnderWaterScene/ground/",
				filename: "underwaterGround.glb"
			},
			underwaterSceneNavMesh: {
				path: "https://assets.babylonjs.com/meshes/Demos/UnderWaterScene/navMesh/underwaterSceneNavMesh.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/Demos/UnderWaterScene/navMesh/",
				filename: "underwaterSceneNavMesh.glb"
			},
			underwaterSceneShadowCatcher: {
				path: "https://assets.babylonjs.com/meshes/Demos/UnderWaterScene/shadows/underwaterSceneShadowCatcher.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/Demos/UnderWaterScene/shadows/",
				filename: "underwaterSceneShadowCatcher.glb"
			},
			underwaterScene: {
				path: "https://assets.babylonjs.com/meshes/Demos/UnderWaterScene/underwaterScene.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/Demos/UnderWaterScene/",
				filename: "underwaterScene.glb"
			},
			underwaterSceneRocksBarnaclesMussels: {
				path: "https://assets.babylonjs.com/meshes/Demos/UnderWaterScene/underwaterSceneRocksBarnaclesMussels.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/Demos/UnderWaterScene/",
				filename: "underwaterSceneRocksBarnaclesMussels.glb"
			},
			frostAxe_noMorph: {
				path: "https://assets.babylonjs.com/meshes/Demos/weaponsDemo/meshes/frostAxe_noMorph.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/Demos/weaponsDemo/meshes/",
				filename: "frostAxe_noMorph.glb"
			},
			frostAxe: {
				path: "https://assets.babylonjs.com/meshes/Demos/weaponsDemo/meshes/frostAxe.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/Demos/weaponsDemo/meshes/",
				filename: "frostAxe.glb"
			},
			gemOnly: {
				path: "https://assets.babylonjs.com/meshes/Demos/weaponsDemo/meshes/gemOnly.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/Demos/weaponsDemo/meshes/",
				filename: "gemOnly.glb"
			},
			moltenDagger: {
				path: "https://assets.babylonjs.com/meshes/Demos/weaponsDemo/meshes/moltenDagger.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/Demos/weaponsDemo/meshes/",
				filename: "moltenDagger.glb"
			},
			sword_noMat: {
				path: "https://assets.babylonjs.com/meshes/Demos/weaponsDemo/meshes/sword_noMat.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/Demos/weaponsDemo/meshes/",
				filename: "sword_noMat.glb"
			},
			dude: {
				path: "https://assets.babylonjs.com/meshes/Dude/dude.babylon",
				rootUrl: "https://assets.babylonjs.com/meshes/Dude/",
				filename: "dude.babylon"
			},
			dummy2: {
				path: "https://assets.babylonjs.com/meshes/dummy2.babylon",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "dummy2.babylon"
			},
			dummy3: {
				path: "https://assets.babylonjs.com/meshes/dummy3.babylon",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "dummy3.babylon"
			},
			Elf_allAnimations: {
				path: "https://assets.babylonjs.com/meshes/Elf/Elf_allAnimations.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Elf/",
				filename: "Elf_allAnimations.gltf"
			},
			Elf_die: {
				path: "https://assets.babylonjs.com/meshes/Elf/Elf_die.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Elf/",
				filename: "Elf_die.gltf"
			},
			Elf_run: {
				path: "https://assets.babylonjs.com/meshes/Elf/Elf_run.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Elf/",
				filename: "Elf_run.gltf"
			},
			Elf: {
				path: "https://assets.babylonjs.com/meshes/Elf/Elf.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Elf/",
				filename: "Elf.gltf"
			},
			emoji_heart: {
				path: "https://assets.babylonjs.com/meshes/emoji_heart.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "emoji_heart.glb"
			},
			ExplodingBarrel: {
				path: "https://assets.babylonjs.com/meshes/ExplodingBarrel.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "ExplodingBarrel.glb"
			},
			fish: {
				path: "https://assets.babylonjs.com/meshes/fish.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "fish.glb"
			},
			flightHelmet: {
				path: "https://assets.babylonjs.com/meshes/flightHelmet.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "flightHelmet.glb"
			},
			FlightHelmet: {
				path: "https://assets.babylonjs.com/meshes/FlightHelmetKTX/FlightHelmet.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/FlightHelmetKTX/",
				filename: "FlightHelmet.gltf"
			},
			dragon: {
				path: "https://assets.babylonjs.com/meshes/Georgia-Tech-Dragon/dragon.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/Georgia-Tech-Dragon/",
				filename: "dragon.glb"
			},
			dragonUV: {
				path: "https://assets.babylonjs.com/meshes/Georgia-Tech-Dragon/dragonUV.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/Georgia-Tech-Dragon/",
				filename: "dragonUV.glb"
			},
			GoldbergScene: {
				path: "https://assets.babylonjs.com/meshes/GoldbergScene.babylon",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "GoldbergScene.babylon"
			},
			goldbergTest: {
				path: "https://assets.babylonjs.com/meshes/goldbergTest.babylon",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "goldbergTest.babylon"
			},
			l_hand_lhs: {
				path: "https://assets.babylonjs.com/meshes/HandMeshes/l_hand_lhs.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/HandMeshes/",
				filename: "l_hand_lhs.glb"
			},
			l_hand_rhs: {
				path: "https://assets.babylonjs.com/meshes/HandMeshes/l_hand_rhs.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/HandMeshes/",
				filename: "l_hand_rhs.glb"
			},
			r_hand_lhs: {
				path: "https://assets.babylonjs.com/meshes/HandMeshes/r_hand_lhs.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/HandMeshes/",
				filename: "r_hand_lhs.glb"
			},
			r_hand_rhs: {
				path: "https://assets.babylonjs.com/meshes/HandMeshes/r_hand_rhs.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/HandMeshes/",
				filename: "r_hand_rhs.glb"
			},
			haunted_house: {
				path: "https://assets.babylonjs.com/meshes/haunted_house.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "haunted_house.glb"
			},
			studio: {
				path: "https://assets.babylonjs.com/meshes/hdri/studioLighting/blender/blenderStudio/studio.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/hdri/studioLighting/blender/blenderStudio/",
				filename: "studio.gltf"
			},
			hexTile: {
				path: "https://assets.babylonjs.com/meshes/hexTile.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "hexTile.glb"
			},
			holiday2021: {
				path: "https://assets.babylonjs.com/meshes/holiday2021.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "holiday2021.glb"
			},
			house_scene: {
				path: "https://assets.babylonjs.com/meshes/house_scene.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "house_scene.glb"
			},
			HVGirl: {
				path: "https://assets.babylonjs.com/meshes/HVGirl.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "HVGirl.glb"
			},
			KHR_materials_volume_testing: {
				path: "https://assets.babylonjs.com/meshes/KHR_materials_volume_testing.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "KHR_materials_volume_testing.glb"
			},
			lamp: {
				path: "https://assets.babylonjs.com/meshes/lamp.babylon",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "lamp.babylon"
			},
			head: {
				path: "https://assets.babylonjs.com/meshes/Lee-Perry-Smith-Head/head.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/Lee-Perry-Smith-Head/",
				filename: "head.glb"
			},
			LevelOfDetail: {
				path: "https://assets.babylonjs.com/meshes/Tests/LevelOfDetail/LevelOfDetail.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/LevelOfDetail/",
				filename: "LevelOfDetail.gltf"
			},
			marble: {
				path: "https://assets.babylonjs.com/meshes/Marble/marble/marble.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Marble/marble/",
				filename: "marble.gltf"
			},
			marbleTower: {
				path: "https://assets.babylonjs.com/meshes/Marble/marbleTower/marbleTower.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Marble/marbleTower/",
				filename: "marbleTower.gltf"
			},
			miniBar2: {
				path: "https://assets.babylonjs.com/meshes/miniBar2.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "miniBar2.glb"
			},
			morphTargetBars: {
				path: "https://assets.babylonjs.com/meshes/morphTargetBars.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "morphTargetBars.glb"
			},
			bars: {
				path: "https://assets.babylonjs.com/meshes/morphTargetDemo/bars.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/morphTargetDemo/",
				filename: "bars.glb"
			},
			"mrtk-fluent-backplate": {
				path: "https://assets.babylonjs.com/meshes/MRTK/mrtk-fluent-backplate.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/MRTK/",
				filename: "mrtk-fluent-backplate.glb"
			},
			"mrtk-fluent-button": {
				path: "https://assets.babylonjs.com/meshes/MRTK/mrtk-fluent-button.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/MRTK/",
				filename: "mrtk-fluent-button.glb"
			},
			octopus_customRig: {
				path: "https://assets.babylonjs.com/meshes/octopus_customRig.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "octopus_customRig.glb"
			},
			PBR_Spheres: {
				path: "https://assets.babylonjs.com/meshes/PBR_Spheres.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "PBR_Spheres.glb"
			},
			pill: {
				path: "https://assets.babylonjs.com/meshes/pill.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "pill.glb"
			},
			cannon: {
				path: "https://assets.babylonjs.com/meshes/pirateFort/cannon.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/pirateFort/",
				filename: "cannon.glb"
			},
			pirateFort: {
				path: "https://assets.babylonjs.com/meshes/pirateFort/pirateFort.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/pirateFort/",
				filename: "pirateFort.glb"
			},
			powerplant: {
				path: "https://assets.babylonjs.com/meshes/PowerPlant/powerplant.obj",
				rootUrl: "https://assets.babylonjs.com/meshes/PowerPlant/",
				filename: "powerplant.obj"
			},
			pumpkinBucketCarved: {
				path: "https://assets.babylonjs.com/meshes/pumpkinBucketCarved.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "pumpkinBucketCarved.glb"
			},
			Rabbit: {
				path: "https://assets.babylonjs.com/meshes/Rabbit.babylon",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "Rabbit.babylon"
			},
			roundedCube: {
				path: "https://assets.babylonjs.com/meshes/roundedCube.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "roundedCube.glb"
			},
			roundedCylinder: {
				path: "https://assets.babylonjs.com/meshes/roundedCylinder.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "roundedCylinder.glb"
			},
			seagulf: {
				path: "https://assets.babylonjs.com/meshes/seagulf.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "seagulf.glb"
			},
			shaderBall: {
				path: "https://assets.babylonjs.com/meshes/shaderBall.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "shaderBall.glb"
			},
			shark: {
				path: "https://assets.babylonjs.com/meshes/shark.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "shark.glb"
			},
			Cloth: {
				path: "https://assets.babylonjs.com/meshes/Sheen/Cloth.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Sheen/",
				filename: "Cloth.gltf"
			},
			SheenChair: {
				path: "https://assets.babylonjs.com/meshes/SheenChair.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "SheenChair.glb"
			},
			SheenCloth: {
				path: "https://assets.babylonjs.com/meshes/SheenCloth/SheenCloth.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/SheenCloth/",
				filename: "SheenCloth.gltf"
			},
			shoe_variants: {
				path: "https://assets.babylonjs.com/meshes/shoe_variants.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "shoe_variants.glb"
			},
			skull: {
				path: "https://assets.babylonjs.com/meshes/Skull/skull.babylon",
				rootUrl: "https://assets.babylonjs.com/meshes/Skull/",
				filename: "skull.babylon"
			},
			solar_system: {
				path: "https://assets.babylonjs.com/meshes/solar_system.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "solar_system.glb"
			},
			SpecularTest: {
				path: "https://assets.babylonjs.com/meshes/SpecularTest/SpecularTest.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/SpecularTest/",
				filename: "SpecularTest.gltf"
			},
			SSAOcat: {
				path: "https://assets.babylonjs.com/meshes/SSAOcat.babylon",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "SSAOcat.babylon"
			},
			StanfordBunny: {
				path: "https://assets.babylonjs.com/meshes/StanfordBunny.obj",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "StanfordBunny.obj"
			},
			stud: {
				path: "https://assets.babylonjs.com/meshes/stud.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "stud.glb"
			},
			target: {
				path: "https://assets.babylonjs.com/meshes/target.glb",
				rootUrl: "https://assets.babylonjs.com/meshes/",
				filename: "target.glb"
			},
			TeapotsGalore: {
				path: "https://assets.babylonjs.com/meshes/TeapotsGalore/TeapotsGalore.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/TeapotsGalore/",
				filename: "TeapotsGalore.gltf"
			},
			Animation_Node_00: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Node/Animation_Node_00.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Node/",
				filename: "Animation_Node_00.gltf"
			},
			Animation_Node_01: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Node/Animation_Node_01.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Node/",
				filename: "Animation_Node_01.gltf"
			},
			Animation_Node_02: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Node/Animation_Node_02.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Node/",
				filename: "Animation_Node_02.gltf"
			},
			Animation_Node_03: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Node/Animation_Node_03.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Node/",
				filename: "Animation_Node_03.gltf"
			},
			Animation_Node_04: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Node/Animation_Node_04.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Node/",
				filename: "Animation_Node_04.gltf"
			},
			Animation_Node_05: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Node/Animation_Node_05.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Node/",
				filename: "Animation_Node_05.gltf"
			},
			Animation_NodeMisc_00: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_NodeMisc/Animation_NodeMisc_00.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_NodeMisc/",
				filename: "Animation_NodeMisc_00.gltf"
			},
			Animation_NodeMisc_01: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_NodeMisc/Animation_NodeMisc_01.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_NodeMisc/",
				filename: "Animation_NodeMisc_01.gltf"
			},
			Animation_NodeMisc_02: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_NodeMisc/Animation_NodeMisc_02.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_NodeMisc/",
				filename: "Animation_NodeMisc_02.gltf"
			},
			Animation_NodeMisc_03: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_NodeMisc/Animation_NodeMisc_03.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_NodeMisc/",
				filename: "Animation_NodeMisc_03.gltf"
			},
			Animation_NodeMisc_04: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_NodeMisc/Animation_NodeMisc_04.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_NodeMisc/",
				filename: "Animation_NodeMisc_04.gltf"
			},
			Animation_NodeMisc_05: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_NodeMisc/Animation_NodeMisc_05.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_NodeMisc/",
				filename: "Animation_NodeMisc_05.gltf"
			},
			Animation_NodeMisc_06: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_NodeMisc/Animation_NodeMisc_06.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_NodeMisc/",
				filename: "Animation_NodeMisc_06.gltf"
			},
			Animation_NodeMisc_07: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_NodeMisc/Animation_NodeMisc_07.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_NodeMisc/",
				filename: "Animation_NodeMisc_07.gltf"
			},
			Animation_Skin_00: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Skin/Animation_Skin_00.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Skin/",
				filename: "Animation_Skin_00.gltf"
			},
			Animation_Skin_01: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Skin/Animation_Skin_01.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Skin/",
				filename: "Animation_Skin_01.gltf"
			},
			Animation_Skin_02: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Skin/Animation_Skin_02.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Skin/",
				filename: "Animation_Skin_02.gltf"
			},
			Animation_Skin_03: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Skin/Animation_Skin_03.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Skin/",
				filename: "Animation_Skin_03.gltf"
			},
			Animation_Skin_04: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Skin/Animation_Skin_04.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Skin/",
				filename: "Animation_Skin_04.gltf"
			},
			Animation_Skin_05: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Skin/Animation_Skin_05.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Skin/",
				filename: "Animation_Skin_05.gltf"
			},
			Animation_Skin_06: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Skin/Animation_Skin_06.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Skin/",
				filename: "Animation_Skin_06.gltf"
			},
			Animation_Skin_07: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Skin/Animation_Skin_07.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Skin/",
				filename: "Animation_Skin_07.gltf"
			},
			Animation_Skin_08: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Skin/Animation_Skin_08.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Skin/",
				filename: "Animation_Skin_08.gltf"
			},
			Animation_Skin_09: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Skin/Animation_Skin_09.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Skin/",
				filename: "Animation_Skin_09.gltf"
			},
			Animation_Skin_10: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Skin/Animation_Skin_10.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Skin/",
				filename: "Animation_Skin_10.gltf"
			},
			Animation_Skin_11: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Skin/Animation_Skin_11.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_Skin/",
				filename: "Animation_Skin_11.gltf"
			},
			Animation_SkinType_00: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_SkinType/Animation_SkinType_00.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_SkinType/",
				filename: "Animation_SkinType_00.gltf"
			},
			Animation_SkinType_01: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_SkinType/Animation_SkinType_01.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_SkinType/",
				filename: "Animation_SkinType_01.gltf"
			},
			Animation_SkinType_02: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_SkinType/Animation_SkinType_02.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_SkinType/",
				filename: "Animation_SkinType_02.gltf"
			},
			Animation_SkinType_03: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_SkinType/Animation_SkinType_03.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Animation_SkinType/",
				filename: "Animation_SkinType_03.gltf"
			},
			Buffer_Interleaved_00: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Buffer_Interleaved/Buffer_Interleaved_00.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Buffer_Interleaved/",
				filename: "Buffer_Interleaved_00.gltf"
			},
			Buffer_Interleaved_01: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Buffer_Interleaved/Buffer_Interleaved_01.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Buffer_Interleaved/",
				filename: "Buffer_Interleaved_01.gltf"
			},
			Buffer_Interleaved_02: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Buffer_Interleaved/Buffer_Interleaved_02.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Buffer_Interleaved/",
				filename: "Buffer_Interleaved_02.gltf"
			},
			Buffer_Interleaved_03: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Buffer_Interleaved/Buffer_Interleaved_03.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Buffer_Interleaved/",
				filename: "Buffer_Interleaved_03.gltf"
			},
			Buffer_Interleaved_04: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Buffer_Interleaved/Buffer_Interleaved_04.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Buffer_Interleaved/",
				filename: "Buffer_Interleaved_04.gltf"
			},
			Compatibility_00: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Compatibility/Compatibility_00.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Compatibility/",
				filename: "Compatibility_00.gltf"
			},
			Compatibility_01: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Compatibility/Compatibility_01.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Compatibility/",
				filename: "Compatibility_01.gltf"
			},
			Compatibility_02: {
				path: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Compatibility/Compatibility_02.gltf",
				rootUrl: "https://assets.babylonjs.com/meshes/Tests/AssetGenerator/0.6/Compatibility/",
				filename: "Compatibility_02.gltf"
			},
			Co

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1683009.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单细胞分析(Signac): PBMC scATAC-seq 聚类

引言 在本教学指南中&#xff0c;我们将探讨由10x Genomics公司提供的人类外周血单核细胞&#xff08;PBMCs&#xff09;的单细胞ATAC-seq数据集。 加载包 首先加载 Signac、Seurat 和我们将用于分析人类数据的其他一些包。 if (!requireNamespace("EnsDb.Hsapiens.v75&qu…

Dijkstra算法在《庆余年》中的应用:范闲的皇宫之旅

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

英语学习笔记24——Give me/us/him/her/them some ...

Give me/us/him/her/them some … 给我/我们/他/她/他们一些…… 词汇 Vocabulary desk n. 课桌&#xff08;有书桌堂&#xff09;&#xff0c;写字台 复数&#xff1a;desks 搭配&#xff1a;desk mate 同桌    构成&#xff1a;desk mate 桌子上的伙伴 同桌    cl…

FBB-Frontiers in Bioengineering and Biotechnology

文章目录 一、期刊简介二、征稿信息三、期刊表现四、投稿须知五、投稿咨询 一、期刊简介 Frontiers in Bioengineering and Biotechnology是专注生物工程和生物技术领域的开放获取期刊。 研究范围涵盖生物材料、生物力学、生物工艺工程、生物安全和生物安保&#xff0c;生物传…

计算机系统基础 7 分支程序的实现

简单条件转移指令 根据单个标志位的值&#xff08;CF&#xff0c; SF&#xff0c;OF&#xff0c;PF&#xff0c;ZF&#xff09;来确定是否转移&#xff0c; 如果条件成立&#xff0c;则&#xff08;EIP&#xff09; 位移量 ➡ EIP&#xff0c;否则什么也不做。 注意&#xff0…

【Andoird开发】android获取蓝牙权限,搜索蓝牙设备MAC

<!-- Android 12以下才需要定位权限&#xff0c; Android 9以下官方建议申请ACCESS_COARSE_LOCATION --><uses-permission android:name"android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name"android.permission.ACCES…

参考文献交叉引用两个文献,逗号隔开

1.引用两个参考文献&#xff0c;定位到word正文中需要引用的位置&#xff0c;然后插入-交叉引用&#xff0c;引好文献 2.选中两个参考文献&#xff0c;切换域代码&#xff0c;然后进行修改&#xff1a; 改为 上面的两张图片中的点是空格的含义&#xff0c;word中按ctrlshift8就…

【计算机网络实验】TCP协议的抓包分析:三次握手四次挥手UDP和TCP的区别(超详细教程)

计算机网络实验——TCP协议抓包分析 文章目录 计算机网络实验——TCP协议抓包分析一、基础知识点1、运输层两个重要协议的特点对比&#xff08;TCP和UDP&#xff09;2、TCP报文的格式3、常见的TCP报文标识字段&#xff08;FLAG字段&#xff09;4、TCP连接的建立过程及理解——三…

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!

这段时间一直在搞文件上传相关的知识&#xff0c;正好把ctf的题目做做写写给自字做个总结&#xff01; 不过有一个确定就是所有的测试全部是黑盒测试&#xff0c;无法从代码层面和大家解释&#xff0c;我找个时间把upload-labs靶场做一做给大家讲讲白盒的代码审计 一、实验准…

多台Centos快速区分,让Centos开机自动显示它的IP地址!

背景说明&#xff1a;当公司拥有多台Centos服务器&#xff0c;管理员很容易弄混淆导致不好区分&#xff0c;在这样的情况下我们可以写个简单脚本来实现开机自动显示它的IP地址&#xff0c;从而达到区分开来的结果&#xff01; 首先我们来开下效果&#xff0c;登录之前的 下面是…

调试时JSON库一直提示 PDB找不到 使用需要对象文件来进行调试的 /DEBUG:Fastlink生成的

最近调试时一直提示上面的提示框&#xff0c;很是烦躁。 为什么会出现这个错误呢&#xff0c;我一直使用的是/DEBUG。出现原因没有找出来&#xff0c;理论上市使用了/DEBUG:Fastlink这个模式才会出&#xff0c;但是就是一直在报这个错误。 /DEBUG&#xff08;生成调试信息&am…

Linux进程的地址空间

Linux进程的地址空间 1. 前言 在编写程序语言的代码时&#xff0c;打印输出一个变量的地址时&#xff0c;这个地址在内存中是以什么形式存在的&#xff1f;一个地址可以存储两个不同的值吗&#xff1f; 运行以下代码&#xff1a; #include <stdio.h> #include <un…

云和恩墨海外首秀在吉隆坡召开的2024中国智能科技与文化展览会

作为中马建交50周年官方重点推荐的活动之一&#xff0c;2024中国智能科技与文化展览会&#xff08;第四届&#xff09;于5月20至21日在毗邻吉隆坡双子塔的吉隆坡国际会展中心举办。本次展览会获得马来西亚科学技术创新部、马来西亚通讯部、中国驻马来西亚大使馆和马来西亚中华总…

向郭老师学习研发项目管理

学习研发项目管理思路 通过以下思路来学习研发项目管理&#xff1a; 1、研发项目管理分3级 2、研发项目管理分4类 3、研发项目管理分5大过程组 4、新产品开发项目生命周期分6个阶段 5、研发项目管理分10大知识体系 项目组合、项目集、简单项目3级管理 针对Portfolio组合…

融合基因组序列识别scATAC-seq的细胞类型

利用scATAC-seq技术进行单细胞分析&#xff0c;可以在单细胞分辨率下深入了解基因调控和表观遗传异质性&#xff0c;但由于数据的高维性和极端稀疏性&#xff0c;scATAC-seq的细胞注释仍然具有挑战性。现有的细胞注释方法大多集中在细胞峰矩阵上&#xff0c;没有充分利用潜在的…

列表的创建和删除

目录 使用赋值运算符直接创建列表 创建空列表 创建数值列表 删除列表 自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501\ 对于歌曲列表大家一定很熟悉&#xff0c;在列表中记录着要播放的歌曲名称…

精品UI响应式视频教程知识付费系统源码在线教育网络课程在线点播可二开分销分站功能

这是一款知识付费平台模板&#xff0c;后台可上传本地视频&#xff0c;批量上传视频连接&#xff0c; 视频后台可设计权限观看&#xff0c;免费试看时间时长&#xff0c;会员等级观看&#xff0c;付费观看等功能&#xff0c; 也带软件app权限下载&#xff0c;帮助知识教育和软件…

数据开放最全sql面试合集(leetcode)

关注公众号“大数据领航员"领取PDF版本和大数据面经 https://leetcode-cn.com/problemset/database/ 题目都是leetcode 上了可以点击题目会有相应的链接 由于个人比较喜欢用开窗函数&#xff0c;所以都优先用了开窗 &#xff0c;当然这些并不一定都是最优解&#xff0c…

【C++】多态(多态的原理)

在本篇博客中&#xff0c;作者将会带领你深入理解C中的多态。 声明&#xff01;&#xff01;&#xff01;本代码以及讲解都是在32位机器下进行完成的&#xff0c;64位机器下会有所不同&#xff0c;但大同小异。 一.多态的概念 什么是多态&#xff1f; 多态就是不同的对象去做…

patroni 部分源码阅读

问题1 /usr/local/lib/python3.9/site-packages/patroni/postgresql/init.py 964 contextmanager 965 def get_replication_connection_cursor(self, hostNone, port5432, **kwargs): 966 conn_kwargs self.config.replication.copy() 967 conn_kwar…