@babylonjs/ lite- compat
一个 选择入巴比伦.js-形状相容层 已执行 巴比伦语Name 大众API. 它的存在是为了给巴比伦 低平滑道向巴比伦利特的WebGPU渲染器迁移.
import { WebGPUEngine, Scene, ArcRotateCamera, HemisphericLight, MeshBuilder, StandardMaterial, Vector3, Color3 } from "@babylonjs/lite-compat";
const engine = new WebGPUEngine(canvas);
await engine.initAsync();
const scene = new Scene(engine);
const camera = new ArcRotateCamera("cam", -Math.PI / 2, Math.PI / 2.5, 5, new Vector3(0, 0, 0), scene);
camera.attachControl(canvas, true);
new HemisphericLight("light", new Vector3(0, 1, 0), scene);
const box = MeshBuilder.CreateBox("box", { size: 1 }, scene);
const mat = new StandardMaterial("mat", scene);
mat.diffuseColor = new Color3(1, 0, 0);
box.material = mat;
engine.runRenderLoop(() => scene.render());
落地移民:保留你的巴比伦.js进口
如果你有一个已有的巴比伦.js应用,你不需要重写一个导入.
此软件包传送一个捆绑插件 重写 @babylonjs/* 导入到
构建时的相容层,所以你,你现在 @babylonjs/core, (中文(简体) ), @babylonjs/loaders, (中文(简体) ),
@babylonjs/addons, (中文(简体) ), @babylonjs/materials,以及 @recast-navigation/* 进口
决 议 @babylonjs/lite-compat 换句话说.
// Your code stays exactly as it was — no edits needed:
import { Scene, ArcRotateCamera, MeshBuilder } from "@babylonjs/core";
添加您的捆绑器插件 :
维特
// vite.config.ts
import { defineConfig } from "vite";
import { liteCompat } from "@babylonjs/lite-compat/vite";
export default defineConfig({
plugins: [liteCompat()],
});
滚动 (也与"滚下"合作)
// rollup.config.js
import { liteCompat } from "@babylonjs/lite-compat/rollup";
export default {
plugins: [liteCompat()],
};
网络软件包 (也与Rspack合作)
// webpack.config.js
const { LiteCompatPlugin } = require("@babylonjs/lite-compat/webpack");
module.exports = {
plugins: [new LiteCompatPlugin()],
};
兴建
import { build } from "esbuild";
import { liteCompat } from "@babylonjs/lite-compat/esbuild";
await build({
plugins: [liteCompat()],
// …
});
每个适配器共用一个重定向表,因此它们都同样地绘制出导入图. 指定者
在支持的表面之外(例如:. @babylonjs/gui)不受影响和决心
向真实的巴比伦.js软件包 — 所以无支持的API 响亮地失败而不是默默地失败
误作. 迁移完成后,您可以放下插件并从中导入
@babylonjs/lite-compat (或当地 @babylonjs/lite直接进行.
它是什么( 和不是)
- A 类 基于阶级,巴比伦.js-形状 在Lite的平面数据 + 工厂 API.
- 选入 : 输入它。 它安装不
BABYLON全球,没有 模块级副作用,所以它从不膨胀不使用它的消费者. - 诚实: 不支持的巴比伦。 js APIs 抛出
LiteCompatError而不是说 使一些小错误. - 没有 一个完整的巴比伦。 js 重新执行。 经典的必须粒子系统, GUI, WebXR, 标记, 以及巴比伦文中未包含的其他特性都超出了范围 (节点粒子编辑器图表部分支持).
支持的 API 一览
巴比伦.js 包和特色的高级视图显示相容层 盖被. 这是共同地表、个人属性和 支持区域内的超载可能仍然不存在.
| 状态 | 含义 |
|---|---|
| ✅ | 尽可能实施和测试共同表面 |
| ⚡ | 实用子集作品; 缺少或丢出一些属性/ 过载 |
| ❌ | 当前 Lite API( 扔出) 不支持 LiteCompatError(中文(简体) ) |
@babylonjs/core
| 特征面积 | 状态 | 页:1 |
|---|---|---|
数学( E)Vector*, (中文(简体) ), Color*, (中文(简体) ), Quaternion, (中文(简体) ), Matrix, (中文(简体) ), Plane, (中文(简体) ), Ray, (中文(简体) ), Frustum, (中文(简体) ), Scalar, (中文(简体) ), Axis编号 :Space,颜色温度/白色平衡) | ✅ | 包括手性正确 LookDirection 矩阵/量; Angle 编号 : Curve3 编号 : Path3D 部分 |
发动机WebGPUEngine, (中文(简体) ), Engine, (中文(简体) ), ThinEngine, (中文(简体) ), NullEngine(中文(简体) ) | ⚡ | aync startup + 渲染回路; 逆向深度构造器选项/状态在Lite的固定倒-Z管线上被曝光; currentSampleCount 报告活动表面的MSAA计数; beginFrame编号 :endFrame、隐蔽查询、全引擎的α至覆盖和手工 scene.render() 不支持 |
计算 + GPU 缓冲器(ComputeShader, (中文(简体) ), StorageBuffer, (中文(简体) ), UniformBuffer(中文(简体) ) | ⚡ | WGSL 计算、直接/间接发送、存储缓冲和计算面向 Lite 的 Std140 统一缓冲器; 阴影登记/预处理、纹理约束、内框即时发送和面向效果的 UBO 方法仍然不支持 |
| 场景(清晰的颜色、相机/灯光、雾雾、环境、可观测物、准备状态) | ⚡ | Node.accessibilityTag 向 Lite 转发描述、 角色和 ARIA 元数据( DOM 事件处理器仍然不支持); 同步 scene.pick 向Lite的CPU三角接取器前推进,并带有薄度、上游、正常和紫外线细节; scene.meshes + 键 getMeshBy*编号 :getNodeBy* 通过条形包装器记录列出每个网格; 传送出曝光/相接/通取映射, 而由于 Lite 缺少其交叉遮光器/接通子系统, 白色平衡和流体渲染抛出 |
相机(ArcRotateCamera, (中文(简体) ), FreeCamera编号 :Universal编号 :Target, (中文(简体) ), FollowCamera, (中文(简体) ), GeospatialCamera(中文(简体) ) | ✅ | 弧控件包括指针、轮子、触摸和BJS-默认箭键输入;正线边框和投影-模式向上切换到Lite;完全不配置的正线范围使用Lite halfHeight + 侧向梯度衍生而不是巴比伦.js 渲染维度; XR / 设备定向/立体镜钻机不支持 |
灯光Hemispheric, (中文(简体) ), Directional, (中文(简体) ), Point, (中文(简体) ), Spot, (中文(简体) ), RectAreaLight(中文(简体) ) | ⚡ | 长方形区域灯光使用Lite的原生LTC路径,包括: AreaLightTextureTools 排放预处理; 对无效的负/非无限排放维度更严格. ClusteredLightContainer 组装在引擎启动前未遮蔽的点灯( qq), 而组装的点灯仍然不支持 |
阴影( N)ShadowGenerator 定向无害环境管理/全氟辛烷磺酰氟、即时全氟辛烷磺酰氟) | ⚡ | CascadedShadowGenerator 使用 Lite 本地 2–4 级联 CSM |
Meshes & 几何学(类链, MeshBuilder 原始的 变形的 稀有的, clone, (中文(简体) ), VertexData, (中文(简体) ), Mesh.MergeMeshes(中文(简体) ) | ⚡ | CreateLines编号 :CreateLineSystem 支持固定地形线列表和RGBA点颜色; CreateDashedLines 支持统一颜色的虚线列表; mesh-blending tag helpers和验证的 mesh 元数据转发到本地的Lite; MergeMeshes 烤制位置/常态/紫外线并拒绝不支持的属性/动能;多边形/外形-多面体、装饰/文本/平面构造器, GreasedLine* (粗线条), InstancedMesh,LOD/edges/outline,以及硬件实例不支持 |
| CSG / CSG2 软件 | ✅ | 超过Lite布尔操作 |
Gizmos(位置/旋转/比例/范围-框/光/相机+) GizmoManager(中文(简体) ) | ⚡ | 超过Lite gizmo套房; isEnabled 切换每轴交互( 禁用时只播放) |
材料(StandardMaterial, (中文(简体) ), PBRMaterial金属槽/光谱损失, NodeMaterial(中文(简体) ) | ⚡ | clone(name) 共享自可渲染的纹理; 固定自定义 WGSL MaterialPluginBase 支持注射(#include, regex 替换,和自定义的 UBO/ sampler 钩子不是),而高斯平面可视化插件, DitheredTileFadeMaterialPlugin, BJS 预处理 ShaderMaterial, (中文(简体) ), MultiMaterial, (中文(简体) ), BackgroundMaterial,以及 OpenPBRMaterial 保持不支持状态 |
纹理Texture, (中文(简体) ), RawTexture, (中文(简体) ), RawTexture2DArray, (中文(简体) ), RawTexture3D, (中文(简体) ), DynamicTexture, (中文(简体) ), HtmlTexture, (中文(简体) ), ExternalTexture,立方体纹理) | ⚡ | ExternalTexture 包裹Lite的原生外景纹理; HDRCubeTexture 前往本地的路径 loadHdrEnvironment· ; RawTexture2DArray 支持原始字节、图像源/URL以及单文件 KTX2 阵列; RawTexture3D 支持基础级的RGBA8卷,但不支持 mip生成; HtmlTexture 转发本地的Lite DOM捕获/更新; RenderTargetTexture 编号 : MirrorTexture 不支持 |
动画( 键框) Animation放松点, Animatable, (中文(简体) ), AnimationGroup 包括加权/附加混合) | ⚡ | 所有标准放宽课程,包括 PowerEase 编号 : BezierCurveEase,再利用Lite的原生功能曲线; beginAnimation 编号 : beginDirectAnimation 代表支持向Lite属性动画投放浮标/显示器/方位音轨;不支持的音轨使用明确的相配评价器;结构组仍为相配自控;支持加载glTF骨骼混合;支持根动分析/控制器APIs抛出 |
溶液目标(MorphTarget 编号 : MorphTargetManager(中文(简体) ) | ✅ | 超过立特形态目标 |
螺丝花( E)SpriteManager 编号 : Sprite(中文(简体) ) | ⚡ | 相机亮相广告牌; SpriteMap / 装入的地图集不支持 |
行为/行动AutoRotation, (中文(简体) ), Framing, (中文(简体) ), ActionManager,条件) | ⚡ | ActionManager 是手动发送; 拖放 / 6- DoF / XR 面向网格的行为 |
杂项Observable, (中文(简体) ), Tools, (中文(简体) ), SmartArray, (中文(简体) ), Tags,梯度, PerformanceMonitor(中文(简体) ) | ✅ | |
音频 V2(AudioEngineV2, (中文(简体) ), StaticSound, (中文(简体) ), StreamingSound, (中文(简体) ), AudioBus公共汽车/来源/分析器) | ⚡ | 超过 Lite 的 AudioV2 端口; MainAudioBus 空间/分析器和第二干线总线不支持 |
物理学(HavokPlugin, (中文(简体) ), scene.enablePhysics编号 :getPhysicsEngine, (中文(简体) ), PhysicsAggregate编号 :PhysicsBody编号 :PhysicsShape(中文(简体) ) | ⚡ | 本地 Havok V2 转发用于普通机身/形状操作、薄膜机身以及带有实例指数的过滤射线;未识别的enum值投向等效边界 |
颗粒( A)NodeParticleSystemSet 编号 : ParticleSystemSet ——节点粒子编辑器 | ⚡ | NPE 片段/ JSON 图表 : Parse编号 :ParseFromSnippetAsync → buildAsync → start,包括每个系统 set.systems[i] 运行时间( o)start编号 :animate编号 :updateSpeed编号 :particleTexture) (中文(简体) ). 绝对经典/GPU/固态 ParticleSystem 建筑 + 方案块 作者不支持 |
| 后处理,分层(光度/高光度),探测器,WebXR | ❌ | 巴比伦 create*Task 函数,包括 createMeshBlendingPostProcessTask 带有几何-登陆标记/深度/阿尔贝多输出 |
@babylonjs/loaders
| 特征面积 | 状态 | 页:1 |
|---|---|---|
glTF 2.0(+扩展), .babylon | ✅ | 通过字节 loadGltf 编号 : loadBabylon; KHR 交互资产运行于 Lite 的本地流图运行时间 |
GLTF2.KHR_interactivity 公共帮助者 | ⚡ | 实施纯操作/数据正常化和出口商数据类型;BJS FlowGraph Register/parser/block/出口规划投出带有所命名的结构阻塞器 |
| glTF 1.0 加载器和扩展 | ❌ | 名称 GLTF1 stubs throw; Lite 没有遗留的分解器、扩展注册或材料转换子系统 |
| OpenPBR glTF 材料适配器 | ❌ | 根和下导出 GLTF2; 抛出,因为 Lite 没有 OpenPBR 材料子系统 |
开 元USDFileLoader(中文(简体) ) | ⚡ | 代表二进制导入、虚拟文件、召回、诊断、资产容器和处置到Lite;所有四个自定义运行时间资产必须共享一个目录 |
SceneLoader (单位:千美元)ImportMeshAsync 编号 : AppendAsync 编号 : LoadAssetContainerAsync, (中文(简体) ), AssetsManager | ⚡ | AssetContainer 部分 |
高斯克平板电脑.ply 编号 : .splat 编号 : .sog 编号 : .spz(中文(简体) ) | ⚡ | GaussianSplattingMesh 包裹急切的Lite 加载器和Lite的选入点渲染器;点渲染比例支持 "auto" 准确 1 / n divisors 1–8的乘数. BJS 流线和独立的点-接点/布莱特类仍然取名为分贝 |
OBJ 编号 : STL 编号 : FBX 编号 : BVH | ❌ | parser/ 物质化子系统不在 Lite 中 – 转换为 glTF |
glTF 等级 :
result.meshes是 GlTF 节点分级的平面视图(转换节点外加 在巴比伦,每个节点都有一个网点。 重现为setParent()没有.parent =, (中文(简体) ), 当你平地的时候,你看 glTF 导入等级和重命名。 。 。 .
@babylonjs/addons • 妇女 @recast-navigation/*
| 特征面积 | 状态 | 页:1 |
|---|---|---|
RecastJSPlugin (导航,人群,路径,射线,离线链接,瓦片-缓冲障碍) | ✅ | 超过 Lite 本地重播- V2 API |
@babylonjs/materials
| 特征面积 | 状态 | 页:1 |
|---|---|---|
| 图书馆材料 | ⚡ | 映射到有等量的相配材料表面; 不支持的相配材料抛出 |
支持面外的指定器(例如).
@babylonjs/gui, (中文(简体) ),@babylonjs/inspector) 被捆绑插件所保留,并决心 真实的巴比伦.js, 所以没有支持的API 响亮的失败 而不是错图.
设想的移徙途径是:
@babylonjs/core → @babylonjs/lite-compat → babylon-lite (native)
每层不透明
mesh.visibility 自动为普通的标准和PBR meshes工作,独立于
mesh.isVisible。它从不改变或复制材料,所以分享材料的 meshes 可以
独立淡出。 本地用户明确导入 setMeshOpacity 编号 : getMeshOpacity
从包根; comparat 不需要启用器.
mesh.visibility = 0.5; // Sorted blending, depth writes off.
mesh.visibility = 0; // No colour or geometry-output draws; still pickable.
mesh.visibility = 1; // Original material route.
- 获取器保留了原始的有限值; 渲染它为
[0, 1]. NaN和无限 掷出RangeError(故意偏离巴比伦.js. - 暗影仍然保持全能,包括0. 选取,
isVisible状态 不变。 几何输出在其存在之前应用不透明> 0.4阿尔法门. - 淡出节点/阴影/线性材料
LiteCompatError; 向已淡出者分配一个 网格在改变材料之前被否决. 待决NodeMaterial手柄为 拒绝。 允许将能见度重设为 1, 除非本地网格被处理 . - 进口的glTF OPAQUE/MASK材料也刻意地淡出,与巴比伦不同. js的明显 透明模式行为。 MASK 截断使用原始的α 在此之前 不透明.
- 一个glTF-node 包装器在解剖学上更新了它的即时原始的 meshes,而不是孩子的 glTF 节点的原始. 可见度不是被继承的;合成根没有几何来淡出. 原始取出器属于指定的包装器,即使其原始包装器共用 产生本地渲染因子。 Clones复制了原始值并拥有新的GPU绑定.
- 微小的例子与他们的网状不透明相同.
InstancedMesh.visibility, MeshLOD 不透明, 每分层不透明,每分层不透明不支持.
见 网格- 不透明架构 本地语言 合同和明确正常化的参考政策.
glTF 导入等级和重命名
巴比伦 Lite 保留了 glTF 节点等级: 每个 glTF 节点成为了变节点, 而它的网格中的每一个原始
变成网状 下级 那个节点 对于一个有单一原始的节点,巴比伦.js转而返回一个 Mesh 那个
搭载了节点变换和几何. 共通层重建了Lite的分层结构,作为Cononical 包裹和
返回其平整,按等级顺序,从 SceneLoader.ImportMeshAsync(...).meshes 财务报告和审定财务报表 AssetContainer.meshes数字 :
- 列表是对保留等级的平分观点,而不是独立可转换的介质列表. 父母总是 来到它的孩子们面前.
- 里面装有合成器
__root__在索引 0 中, 源 glTF 转换节点, 而原始的 meshes 下方 他们. - 仅变形条目被包裹为
Mesh也可以,但不带几何:getTotalVertices() === 0不治疗 条目作为几何Mesh。 。 。 .
为什么每个入口 .parent 间断
mesh.parent = node 保持网状 当地 让世界在新父母的统治下改变.
mesh.setParent(node) 保留它 世界 变身 都表现得像巴比伦 Js 但为巴比伦写的循环
经常指定 .parent 转到每个返回的条目 :
// Fine in Babylon.js. Under compat it detaches each primitive from the glTF node that carries its transform.
for (const mesh of result.meshes) {
mesh.parent = applicationRoot;
}
在比对下,每个原始的网格 被移出上面的glTF节点 并且只保留自己的局部变换,所以
任何来自祖先节点的尺度、旋转或翻译都会丢失。 典型的案例是硬件资产模拟
以毫米表示的glTF节点大小 0.001:在环绕之后,它的原始体会使1000倍的体积太大,所以
40毫米接通器会变为40米,往往在相机范围以外.
按列表顺序烧烤失败 . bakeCurrentTransformIntoVertices() 烤的只有网状的 当地
变形:在一个仍然坐落在其glTF节点下的原始上,它留下了节点的缩放,并重设了节点
首先(在清单的前面)转变其子女在得到处理之前的继承.
安全图案
保留等级并移动整个导入 :
import { Mesh, SceneLoader } from "@babylonjs/lite-compat";
const result = await SceneLoader.ImportMeshAsync("", rootUrl, "model.glb", scene);
result.meshes[0]!.setParent(applicationRoot);
平平只放出可变的相片 保持它们现世的变迁. result.meshes 输入为
TransformNode[],将条目缩小到 Mesh 在使用只使用网格的方法之前:
const renderableMeshes = result.meshes.filter((mesh): mesh is Mesh => mesh instanceof Mesh && mesh.getTotalVertices() > 0);
for (const mesh of renderableMeshes) {
mesh.setParent(applicationRoot);
}
把成份转换成几何 只能用来做狭义的入口胶片 为了这些,打电话
setParent() 首先,完全的分层构成的世界变换成为了网状的新的局部变换,然后烘焙:
// bakeableMeshes: the entries of renderableMeshes that meet every condition listed below.
for (const mesh of bakeableMeshes) {
mesh.setParent(applicationRoot);
mesh.bakeCurrentTransformIntoVertices();
}
只有在以下所有情况都坚守时,才能烤出网格。 否则就用平了 setParent() 或保持等级和
移动整个导入 :
- 无剪由变形而来.
setParent()保留精确的相邻局部矩阵,但bakeCurrentTransformIntoVertices()重建从位置、旋转和缩放的转换,但不能 快速剪线。 当祖先有非统一尺度,其下有子孙被旋转时,剪接出现: 例如,节点缩放(2, 1, 1)在Z周围旋转了45度 烧烤这样原始的一滴 剪接并改变几何形状. - 紧凑的顶点数据. 烧烤取代顶点缓冲器
resizeMeshGeometry(),用于 相接相相接几何. 一个 glTF 原始负载只有在它至少有一个顶点属性出现时才互出 从缓冲维尤byteStride大于属性的元素大小,例如位置和常态 共享一个缓冲维尤byteStride: 24,而Draco这样的加载器扩展已经解码了。 A 类byteStride等于元素大小,许多出口商在紧凑的缓冲图上写着,保持原始 在紧凑的道路上. - 未变相几何. 面包师将基地位置,常态和切入态进行改造. 它不会改变
变形目标三角地,所以在烤出三角地后, 会在被烤到的空间中有所贡献:
0.001, 三角形 1 的贡献0.001烘焙前,还有1过后. 外皮的蛋白也没有覆盖 平地已经从上面的任何动画GlTF节点中解开一个原始的. 保持资产等级 变形目标,剥皮或节点动画必须继续工作. - 只有位置,正常和第一个紫外线. 烧烤只能重新装入其CPU阵列的顶点属性
保留。 glTF 加载器上传
COLOR_0财务报告和审定财务报表TEXCOORD_1不保留 CPU 副本,所以烘焙会降低顶点颜色 和第二套紫外线,它只保留在enableGltfCpuTangents()从@babylonjs/lite在装入前称为. - 没有细小的例子. 包括glTF节点上的每个原始
EXT_mesh_gpu_instancing,装填器 绘制为细例:它们的矩阵留在节点的局部框上,而阴影器作曲mesh.world * instanceWorld烧烤只变换了原型几何并重置了网状变形器,但不变了 实例矩阵,因此实例抵消最终会出现在烤制的空间中:0.001,一个 实例翻译(0, 1, 0)贡献0.001烘焙前,还有1之后,副本散开。 平缓 如此纠结setParent()单独,或保持等级. - 三角只列出. GLTF 装载器保留了线条、线条和三角线条原始的地貌,但是
面包师将每个索引缓冲器作为三角形列表. 当烘焙的变形镜 几何,它交换第二
和每组3人的第三指数保持风向。 将 glTF 在身份下导入
applicationRoot包括它的合成手性根的镜像, 所以一个行列表[0, 1, 2, 3, 4, 5]变成[0, 2, 1, 3, 5, 4]并连接到其他顶点;条条以同样的方式失去连接. 平线和条形 原始人拥有setParent()一个人.
setParent() 还保留了镜像变相,包括glTF导入的合成活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性活性.
缺少一个API你需要吗?
适应现实世界的移徙需要,比较表层会扩大。 如果你打了一个
巴比伦.js API还没有包裹(或扔出) LiteCompatError, (中文(简体) ),
在巴比伦语中打开一个问题
并添加 compat 标签。 描述 API 和您的使用案例
页:1 compat 标签直接输入层的维护工作流程.