ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Babylon.js Inspector v2 实战指南:场景调试、Headless 可检视模式与 AI Agent CLI

Babylon.js Inspector v2 实战指南:场景调试、Headless 可检视模式与 AI Agent CLI 图形学游戏开发3D渲染【免费下载链接】Babylon.jsBabylon.js is a powerful, beautiful, simple, and open game and rendering engine packed into a friendly JavaScript framework.项目地址https://gitcode.com/gh_mirrors/ba/Babylon.js点击查看免费下载本篇指南围绕babylonjs-inspectorUMD 包展开讲解如何在浏览器页面中直接调用INSPECTOR.ShowInspector检视与编辑场景图通过StartInspectable开启无 UI 的可检视会话以及使用内置的babylon-inspectorCLI 以 JSON 方式查询场景实体、截图与采集性能数据。读完本文你将掌握从安装到 CLI 驱动调试的完整链路并能结合仓库源码理解其底层 WebSocket Bridge 通信机制。一、包定位UMD 版 Inspector v2 与 ESM 版的选择Babylon.js Inspector v2 是一套诊断工具可以查看并编辑场景图Scene Graph、场景内实体的属性等。官方建议如果使用打包器bundler构建应用应优先使用babylonjs/inspectorESM 包而本仓库中的 UMD 包babylonjs-inspector更适合不运行自有打包器、直接在网页中用script标签引用的场景。这一点可以从 UMD 包的构建配置得到印证在 rollup.config.umd.mjs 中构建配置将全局命名空间设置为INSPECTOR产物为babylon.inspector-v2.bundle.jspackage.json 中main字段也指向babylon.inspector-v2.bundle.js版本与babylonjs等核心包保持一致当前仓库版本为 9.28.0依赖babylonjs、babylonjs-gui、babylonjs-loaders、babylonjs-materials、babylonjs-serializers等配套包。二、安装通过 npm 安装 UMD 包npm install babylonjs-inspector安装完成后产物中会包含babylon.inspector-v2.*文件bundle 及其声明文件可直接以script方式引入。三、ShowInspector一行代码唤起检视器最简单的用法是调用INSPECTOR.ShowInspector传入你的Scene实例// Your code that sets up a Babylon.js scene... INSPECTOR.ShowInspector(scene);对应到纯 HTML 页面则是先引入 bundle 脚本再在页面脚本中调用html body canvas idrenderCanvas/canvas script srcbabylon.inspector-v2.bundle.js/script script // Your code that sets up a Babylon.js scene... INSPECTOR.ShowInspector(scene); /script /body /html在源码层面ShowInspector定义于 packages/dev/inspector-v2/src/inspector.tsx。它接收scene与可选的PartialInspectorOptions返回一个InspectorToken。可用的选项定义在 inspector.common.ts选项类型默认值说明autoResizeEnginebooleantrue检视器布局变化时是否自动 resize 引擎layoutModeinline \| overlayoverlayinline检视器嵌入渲染 canvas 所在容器并重新托管 canvasoverlay检视器以浮层形式覆盖在渲染 canvas 之上InspectorToken提供以下能力dispose(): Promisevoid销毁检视器Promise 会在 React 卸载与 ServiceContainer 释放等全部异步清理完成后 resolvereadonly isDisposed: boolean是否已销毁readonly onDisposed: IReadonlyObservablevoid销毁时触发的事件。另外为保持向后兼容index.ts通过AttachDebugLayer()将 Inspector v2 附加到Scene.debugLayer见 packages/dev/inspector-v2/src/index.ts因此传统scene.debugLayer.show()调用路径依旧可用。四、Headless Inspectable不开 UI 也可被检视如果只想让场景可被 CLI 检视、而无需弹出检视器界面可以调用StartInspectable// Your code that sets up a Babylon.js scene... const token INSPECTOR.StartInspectable(scene); // When youre done, dispose the token to disconnect: token.dispose();StartInspectable会将场景连接到 Inspector CLI Bridge从而启用查询实体、截图、采集性能轨迹等 CLI 命令——全程不渲染任何检视器 UI。ShowInspector内部会自动调用StartInspectable。其实现位于 packages/dev/inspector-v2/src/inspectable.ts。从源码可以看到几个关键设计默认端口 4400_StartInspectable在未提供 bridge token 时会通过MakeModularBridge({ port: options?.port ?? DefaultPort, ... })创建一个内部 bridgeDefaultPort 4400引用计数同一场景可被多次调用StartInspectable每次返回一个 token底层连接只在所有 token 全部 dispose 后才真正拆除refCount归零触发fullyDispose场景销毁自动清理场景onDisposeObservable触发时会重置引用计数并执行完整清理避免内存泄漏headless 服务注册headless 容器只注册 CLI 相关的五个服务见下节不涉及任何 UI 服务。五、Inspector CLI为 AI Agent 设计的终端接口检视器 UI 面向人类开发者而 Inspector CLI 面向AI Agent。它以机器友好的 JSON 输出提供场景实体查询、截图、性能数据采集等能力。5.1 快速上手npx babylon-inspector --help5.2 CLI 参数一览--help输出的完整用法在 packages/dev/inspector-v2/src/cli/cli.ts 中定义参数说明--help显示帮助信息--session [session-id]列出活跃会话或指定目标会话--command [command-id]列出可用命令或执行一条命令。执行时需搭配--session session-id可用--command id --help查看某命令的参数--stop停止 Bridge 进程--bridge-script path指定自定义 bridge 脚本路径内部参数一般无需使用命令的完整形式为babylon-inspector --session session-id --command command-id [--arg value ...]5.3 配置文件.babyloninspectorCLI 与 Bridge 使用两个 WebSocket 端口浏览器会话端口与 CLI 端口。默认端口定义在 packages/dev/inspector-v2/src/cli/config.tsbrowserPort默认4400cliPort默认4401。如需自定义可在当前目录或任意上级目录放置一个名为.babyloninspector的 JSON 文件LoadConfig会从process.cwd()开始沿目录父链向上查找见 config.ts{ browserPort: 4400, cliPort: 4401 }如果文件缺失或字段类型非法会回退到默认值。置 0 表示使用操作系统自动分配的端口见 bridge.ts 中IBridgeConfig注释。5.4 典型使用流程# 列出当前活跃的会话 babylon-inspector --session # 查看会话 2 支持哪些命令 babylon-inspector --session 2 --command # 查看某条命令的参数说明 babylon-inspector --session 2 --command query-mesh --help # 执行命令查询 uniqueId 为 42 的网格 babylon-inspector --session 2 --command query-mesh --uniqueId 42值得注意的 CLI 细节均可在 cli.ts 中验证--command不带命令 id 时列出可用命令带 id 时执行若命令参数缺失Missing required argument(s)CLI 会打印帮助并以退出码 1 结束类型为file的参数会自动读取文件内容并替换为字符串值帮助中会标注[reads file content from path]CLI 与 Bridge 的请求/响应通过本地ws://127.0.0.1:cliPort完成单次请求有 15 秒超时Bridge 未运行时CLI 会尝试自动拉起spawnbridge 脚本最多重试 10 次、每次间隔 500ms。六、Bridge 架构浏览器会话与 CLI 之间的消息枢纽CLI 之所以能操控运行中的场景是因为浏览器中的检视器通过 WebSocket 连接到一个本地 Bridge而 CLI 又连接同一个 Bridge。相关实现位于 packages/dev/inspector-v2/src/cli/bridge.ts 的StartBridgeBridge 同时启动两个 WebSocket 服务browser 端口默认 4400与 CLI 端口默认 4401浏览器侧ShowInspector/StartInspectable创建的 ModularBridge连上 browser 端口并发送register消息注册会话Bridge 为其分配递增的sessionId记录会话名与连接时间CLI 侧连接 cli 端口发送sessions/commands/exec/stop四类请求Bridge 将 CLI 的请求转发给对应会话listCommands、execCommand、getInfo并把浏览器的响应commandListResponse、commandResponse、infoResponse按requestId匹配回传给 CLI浏览器会话断开或长时间无响应info 请求默认 5 秒超时时会话会被移除。CLI 的解析逻辑ParseCliArgs支持从--session后的首个数字型位置参数提取会话 id并把未知的--key value对收集到命令参数中供ParseCommandArgs二次解析从而做到--command query-mesh --uniqueId 42这类自然书写方式。七、内置 CLI 命令清单由 Headless 服务注册StartInspectable的 headless 容器注册了五个 CLI 命令服务见 inspectable.ts它们共同构成 CLI 的完整能力面7.1 实体查询query-*entityQueryService服务源码位于 packages/dev/inspector-v2/src/services/cli/entityQueryService.ts。--uniqueId省略时返回该类型全部实体的摘要列表JSON指定时返回单个实体的serialize()结果。覆盖的实体类型包括query-mesh、query-light、query-camera、query-transformNode、query-material、query-texture、query-skeleton、query-geometry、query-animation、query-animationGroup、query-particleSystem、query-morphTargetManager、query-multiMaterial、query-postProcess、query-frameGraph、query-effectLayer、query-spriteManager、query-sound、query-renderingPipeline。实现细节摘要包含uniqueId、name、className层级类实体Node还会带parentId没有原生uniqueId的实体如 Sound会通过UniqueIdGenerator生成合成 id。7.2 截图take-screenshotscreenshotCommandService定义于 packages/dev/inspector-v2/src/services/cli/screenshotCommandService.ts参数必填说明cameraUniqueId否使用的相机 uniqueId省略时默认使用活动相机有 FrameGraph 时用主相机width否截图宽度像素与height同时设置时进入自定义尺寸模式height否截图高度像素precision否分辨率倍率如2表示双倍分辨率默认1命令通过CreateScreenshotUsingRenderTargetAsync渲染出image/png数据并剥离data:前缀返回纯 base64 字符串——这正是 AI Agent API 最易于消费的形态。7.3 着色器代码get-shader-codeshaderCommandService定义于 packages/dev/inspector-v2/src/services/cli/shaderCommandService.tsuniqueId必填材质 idvariant可选compiled默认最终编译后代码、raw原始代码、beforeMigration迁移前代码。返回{ vertexShader, fragmentShader }的 JSON。若材质尚未渲染导致 Effect 不存在或未就绪会给出明确错误提示。7.4 帧统计start-perf-instrumentation/stop-perf-instrumentation/get-count-statsstatsCommandService定义于 packages/dev/inspector-v2/src/services/cli/statsCommandService.tsstart-perf-instrumentation启动SceneInstrumentation与EngineInstrumentation逐帧采集网格评估、渲染目标、帧时间、粒子、精灵、物理、动画等耗时以及 GPU 帧时间stop-perf-instrumentation停止并释放插桩get-count-stats返回场景实体计数 JSON包括totalMeshes、activeMeshes、activeIndices、activeFaces、activeBones、activeParticles等。7.5 性能轨迹start-perf-trace/stop-perf-traceperfTraceCommandService定义于 packages/dev/inspector-v2/src/services/cli/perfTraceCommandService.tsstart-perf-trace基于PerformanceViewerCollector开始收集注册默认性能策略DefaultPerfStrategiesstop-perf-trace停止采集并输出 JSON包含strategies指标 id 列表、sampleCount与按时间戳分片的samples数组。八、运行前提与限制CLI 依赖本地 Bridge 与浏览器中的检视器建立 WebSocket 连接因此使用前需先在浏览器页面里调用ShowInspector或StartInspectable且页面与 CLI 运行在同一台机器Bridge 绑定127.0.0.1若端口冲突请通过.babyloninspector配置文件调整 browser/cli 两个端口并确保页面侧与 CLI 侧配置一致会话 id 是 Bridge 进程内按注册顺序递增的临时编号重启 Bridge 后会重新分配本仓库中 Inspector v2 的开发包脚本位于 packages/dev/inspector-v2/package.json其babylon-inspector脚本为node --no-warnings dist/cli/cli.js --bridge-script dist/cli/bridge.jsUMD 发布物则由 packages/public/umd/babylonjs-inspector-v2 目录承载读者可通过阅读源码进一步研究各命令服务与 Bridge 协议协议类型定义在shared-ui-components/modularTool/services/cli/protocol中。赞分享图形学游戏开发3D渲染【免费下载链接】Babylon.jsBabylon.js is a powerful, beautiful, simple, and open game and rendering engine packed into a friendly JavaScript framework.项目地址https://gitcode.com/gh_mirrors/ba/Babylon.js点击查看免费下载相关推荐Babylon.js Inspector v2 完全指南从场景调试到面向 AI Agent 的无头 CLIBabylon.js Inspector v2 完全指南从场景调试到面向 AI Agent 的无头 CLI Babylon.js InspectorInsp图形学游戏开发3D渲染Babylon.js Inspector 深度指南从场景调试到源码级扩展Babylon.js Inspector 深度指南从场景调试到源码级扩展 导读 本文以仓库内 packages/dev/inspector/README.md图形学游戏开发3D渲染dfdx高级特性自动微分和梯度计算内部原理dfdx高级特性自动微分和梯度计算内部原理 在深度学习领域自动微分是构建高效神经网络训练系统的核心技术。dfdx作为Rust语言实现的深度学习框架凭借其独上一篇革命性扩散模型微调方案ddpo-pytorch完全指南——用LoRA实现低显存高效训练下一篇Awesome Hacker Search Engines批量导出功能CSV与JSON格式应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表