From fd491042c157dbb5b51ae75a67550d4adf158208 Mon Sep 17 00:00:00 2001 From: flash555588 Date: Wed, 3 Jun 2026 20:51:30 +0800 Subject: [PATCH] Release 0.4.3 --- .github/ISSUE_TEMPLATE/bug_report.yml | 69 + .github/workflows/release.yml | 3 + AGENTS.md | 93 ++ CHANGELOG.md | 13 + CLAUDE.md | 122 +- README.md | 5 +- README.zh-CN.md | 5 +- docs/README.md | 50 + docs/development-handoff.md | 240 ++++ docs/requirements-tracker.md | 100 ++ main.js | 1176 +++++++++-------- manifest.json | 2 +- .../grouped-parts/grouped parts.gltf | 170 +++ package-lock.json | 4 +- package.json | 19 +- scripts/verify-diagnostics.mjs | 122 ++ scripts/verify-knowledge-index.mjs | 166 ++- scripts/verify-obsidian.mjs | 114 ++ scripts/verify-preview-success.mjs | 8 + scripts/verify-preview.mjs | 45 + scripts/verify-settings-migration.mjs | 17 + scripts/visual-preview-entry.ts | 66 +- src/diagnostics/report.ts | 118 ++ src/domain/models.ts | 37 + src/i18n/en.ts | 24 +- src/i18n/zh-CN.ts | 24 +- src/main.ts | 54 +- src/render/babylon/scene.ts | 114 +- src/render/preview/summary.ts | 6 + src/render/three/scene.ts | 89 +- src/store/plugin-store.ts | 89 +- src/view/direct-view.ts | 143 +- src/view/direct-workbench-registered-match.ts | 58 + src/view/workbench/analysis-result.ts | 123 +- src/view/workbench/knowledge-note.ts | 208 ++- styles.css | 100 ++ versions.json | 2 +- 37 files changed, 3061 insertions(+), 737 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 AGENTS.md create mode 100644 docs/README.md create mode 100644 docs/development-handoff.md create mode 100644 docs/requirements-tracker.md create mode 100644 models/resource-fixtures/grouped-parts/grouped parts.gltf create mode 100644 scripts/verify-diagnostics.mjs create mode 100644 src/diagnostics/report.ts create mode 100644 src/view/direct-workbench-registered-match.ts diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..6b31459 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,69 @@ +name: Bug report +description: Report a model loading, rendering, or knowledge note issue. +title: "[Bug]: " +labels: ["bug"] +body: + - type: markdown + attributes: + value: | + Before filing, run **AI Model Workbench: Copy diagnostics report** from the Obsidian command palette and paste it below. The report intentionally omits draft service URLs and local converter command paths. + - type: textarea + id: diagnostics + attributes: + label: Diagnostics report + description: Paste the copied diagnostics report here. + render: markdown + validations: + required: true + - type: input + id: obsidian-version + attributes: + label: Obsidian version + placeholder: "Example: 1.12.7" + validations: + required: true + - type: input + id: plugin-version + attributes: + label: Plugin version + placeholder: "Example: 0.4.1" + validations: + required: true + - type: dropdown + id: model-format + attributes: + label: Model format + options: + - GLB + - GLTF + external resources + - OBJ / MTL + - STL + - PLY + - FBX + - STEP / IGES / CAD + - Other + validations: + required: true + - type: textarea + id: steps + attributes: + label: Steps to reproduce + placeholder: | + 1. Open ... + 2. Click ... + 3. See ... + validations: + required: true + - type: textarea + id: expected + attributes: + label: Expected behavior + validations: + required: true + - type: textarea + id: actual + attributes: + label: Actual behavior + description: Include console errors if available. Remove any private paths, tokens, or model content you cannot share. + validations: + required: true diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f59c9c7..8f884df 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -39,6 +39,9 @@ jobs: - name: Verify knowledge index run: npm run verify:knowledge-index + - name: Verify diagnostics + run: npm run verify:diagnostics + - name: Build run: npm run build diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..aa7e544 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,93 @@ +# Agent Development Guide + +This file is the model-agnostic handoff for coding agents working on AI Model Workbench. +Read it before changing code. For deeper product/spec context, use +`docs/development-handoff.md`. + +## First Steps + +1. Run `git status --short` and treat existing changes as user work unless you made them. +2. Read `docs/development-handoff.md` for the current architecture, routing decisions, + verification matrix, and active product direction. +3. Check `CHANGELOG.md` before planning a release-facing change. +4. Use `rg` / `rg --files` for repository search. +5. Use focused edits and keep generated bundle changes intentional. + +## Current Product Contract + +- This is an Obsidian plugin for rendering 3D assets and turning model evidence into + linked knowledge notes. +- Single-model GLB/GLTF/STL/PLY/OBJ preview paths use Three.js by default. +- Babylon.js remains the production capability backend for `3dgrid`, conservative + fallback behavior, and any future local-only SPLAT restoration. +- Direct file view can opt into Experimental Three workbench for direct GLB/GLTF and + falls back to Babylon on failure. +- Knowledge generation is local-first. Remote draft support is optional and sends only + sanitized evidence when explicitly configured. +- Named GLB/GLTF groups are treated as higher-confidence part candidates. Direct file + view auto-registers captured part candidates into the model profile so later models + can detect likely reused parts before a full report exists. + +## Tool Usage Setup + +Prefer these commands from the repository root: + +```bash +npm install +npm run build +npm run typecheck +npm run verify:preview +npm run verify:preview:success +npm run verify:settings +npm run verify:knowledge-index +npm run verify:diagnostics +npm run verify:remote-draft +npm run verify:release +npm run verify:obsidian +``` + +Use `npm run verify:obsidian` only when Obsidian is installed and the host can launch it. +Use `npm run verify:obsidian -- --clean` to remove the temporary verification vault. +After a release, use `npm run verify:obsidian -- --release-tag ` to install +assets downloaded from GitHub. + +For preview harness failures, inspect `.tmp/preview-failures/`. +For a custom browser, set `PLAYWRIGHT_CHROMIUM_EXECUTABLE`. + +## Change-To-Test Mapping + +| Change area | Minimum useful checks | +|-------------|-----------------------| +| Type/domain/store/settings migration | `npm run typecheck`, `npm run verify:settings` | +| Three/Babylon route, preview UI, annotation overlay | `npm run verify:preview`, often `npm run verify:preview:success` | +| Three performance, frame budget, visibility/disposal | `npm run verify:preview` plus route-specific harness flags | +| Knowledge notes, reports, indexes, part notes, registered part reuse | `npm run verify:knowledge-index` | +| Remote draft client/privacy | `npm run verify:remote-draft` | +| Diagnostics output | `npm run verify:diagnostics` | +| Conversion, external resources, Obsidian integration | `npm run verify:obsidian` when available | +| Release assets/version/hash workflow | `npm run build`, `npm run verify:release` | + +## Editing Rules + +- Keep vault paths and filesystem paths separate. Vault paths use `/`; filesystem paths + are OS-native and should pass through existing helpers. +- Reuse `src/utils/resolve-path.ts` and `src/io/conversion/python-path.ts` instead of + ad hoc path parsing. +- Reuse renderer-agnostic preview interfaces in `src/render/preview/types.ts` before + adding renderer-specific hooks. +- Do not broaden workbench or `3dgrid` routing without updating + `docs/preview-routing-matrix.md` and verification coverage. +- Do not copy GPL code. See `docs/mit-upstream-guidelines.md`. +- Never paste or preserve PATs/tokens. See `SECURITY.md`. +- If you change generated docs or behavior, update `CHANGELOG.md`. + +## Important Specs + +- `docs/development-handoff.md` - canonical model handoff and spec map. +- `docs/preview-routing-matrix.md` - renderer routing contract. +- `docs/workbench-3dgrid-feasibility-note.md` - why production workbench and `3dgrid` + remain conservative. +- `docs/threejs-migration-roadmap.md` - historical and future Three.js migration logic. +- `FORMAT_SUPPORT_DESIGN.md` - format/conversion strategy. +- `docs/cross-platform-development.md` - portability rules for path and converter work. +- `SECURITY.md` - release token safety and leak response. diff --git a/CHANGELOG.md b/CHANGELOG.md index 28ddb28..beae231 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## Unreleased + +## 0.4.3 + +- Add a command-palette diagnostics report that copies sanitized runtime, renderer, model, knowledge-generation, and conversion status for bug reports. +- Preserve generated `knowledgeIndexPath` and the last knowledge-generation summary across Obsidian restarts. +- Let the `Open knowledge index` command fall back to the latest generated index when no model file is currently focused. +- Add `npm run verify:diagnostics` to confirm diagnostics include useful support context without leaking draft service URLs or local converter command paths. +- Register named model groups/assemblies as higher-confidence part candidates, while preserving ungrouped meshes as standalone parts. +- Auto-register captured part candidates into each model profile as soon as a direct file view loads, so later imported models can match reused parts before a report has been generated. +- Match current part candidates against previously registered parts from other analyzed models, linking likely reused parts in the report, sidecar, draft input, index, and part notes. +- Show the source model for direct-workbench registered part matches and let the Open action fall back to that source model when no part note exists yet. + ## 0.4.0 - Generate first-pass part note drafts for the strongest captured part candidates and link them from the main knowledge report and analysis sidecar. diff --git a/CLAUDE.md b/CLAUDE.md index 1c2ee69..2d70818 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,84 +1,62 @@ # CLAUDE.md -This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. +This file is a Claude Code entry point. The canonical model-agnostic instructions live +in `AGENTS.md`, and the deeper specification handoff lives in +`docs/development-handoff.md`. -## Project +## Read First -**AI 3D Model Workbench** - An Obsidian plugin that renders 3D models (GLB/GLTF/STL/OBJ/SPLAT/PLY) in a Babylon.js viewport and links them to Obsidian knowledge notes. Targets Obsidian >= 1.5.0, desktop and mobile. +1. `AGENTS.md` +2. `docs/development-handoff.md` +3. `docs/preview-routing-matrix.md` +4. `CHANGELOG.md` -## Build Commands +## Current Project Summary + +AI Model Workbench is an Obsidian plugin for rendering 3D model assets, annotating +model regions, and generating linked knowledge notes from local model evidence. + +Current renderer contract: + +- Three.js is the default single-model preview path for GLB/GLTF/STL/PLY/OBJ across + inline previews, Live Preview, and direct file view. +- Babylon.js remains the production capability/fallback backend for `3dgrid` and + conservative workbench behavior. +- Direct GLB/GLTF file view can use Experimental Three workbench with Babylon fallback. + +Current knowledge contract: + +- Generated knowledge notes are evidence-backed, local-first, and can create model + reports, sidecars, indexes, evidence snapshots, and part-note drafts. +- Named GLB/GLTF groups are higher-confidence part candidates. +- Direct file view auto-registers captured part candidates into model profiles so + later imported models can detect reused parts before a full report exists. + +## Build And Verification ```bash -npm install # install deps -npm run dev # dev build with watch (esbuild) -npm run build # production build → main.js (~1.7 MB minified) -npm run typecheck # tsc --noEmit --skipLibCheck +npm install +npm run build +npm run typecheck +npm run verify:preview +npm run verify:preview:success +npm run verify:settings +npm run verify:knowledge-index +npm run verify:diagnostics +npm run verify:remote-draft +npm run verify:release +npm run verify:obsidian ``` -No test runner is configured. The only verification gate is `typecheck`. +Choose checks based on the changed surface. See `AGENTS.md` for the change-to-test +mapping and `README.md` for longer verification notes. -## Architecture +## Claude-Specific Working Notes -Entry point: `src/main.ts` → esbuild bundles to `main.js` (CJS, ES2018). `main.js` + `manifest.json` + `styles.css` are deployed to the Obsidian vault's `.obsidian/plugins/ai-model-workbench/`. +- Use `rg` for repository search. +- Start by checking `git status --short`; this repository may already contain user or + generated changes. +- Do not reset or discard existing changes unless explicitly asked. +- Keep edits focused and update `CHANGELOG.md` for release-facing behavior. +- Never paste or preserve tokens. Follow `SECURITY.md`. -### Layer Layout - -| Layer | Directory | Responsibility | -|-------|-----------|---------------| -| Plugin shell | `src/main.ts` | Obsidian Plugin lifecycle, commands, state persistence | -| Domain types | `src/domain/models.ts` | All shared interfaces — no runtime code | -| Constants | `src/domain/constants.ts` | `SUPPORTED_MODEL_EXTENSIONS`, `DEFAULT_SETTINGS`, default camera/light/scene configs | -| Store | `src/store/create-store.ts` | ~30-line custom store primitive (getState/setState/subscribe) | -| Store bridge | `src/store/plugin-store.ts` | Obsidian `loadData`/`saveData` bridge with 500ms debounce | -| Babylon facade | `src/render/babylon/scene.ts` | `BabylonModelPreview` class: Engine/Scene/Camera lifecycle, model loading, config application (lights/camera/scene), snapshot export | -| Grid renderer | `src/render/babylon/grid.ts` | `GridRenderer` class: single Engine/Scene with per-cell viewports, LayerMask isolation, `loadWithPreset()` for preset layouts | -| Presets | `src/render/babylon/presets/` | Preset template system: `compare` (A/B), `showcase` (multi-angle), `explode` (ring), `timeline` (strip) | -| STL loader | `src/render/babylon/loaders/stl-loader.ts` | Self-written binary STL parser registered as Babylon SceneLoader plugin | -| PLY loader | `src/render/babylon/loaders/ply-loader.ts` | Self-written ASCII/binary PLY parser (triangulated mesh + point cloud + vertex color) | -| Loader registry | `src/render/babylon/loaders/register.ts` | Side-effect imports registering GLTF, OBJ, SPLAT loaders with Babylon SceneLoader | -| Explode | `src/render/babylon/explode.ts` | Explosion view (world-space displacement) | -| Picking | `src/render/babylon/picking.ts` | Click-to-highlight (clones material to avoid shared-material mutation) | -| Knowledge notes | `src/view/workbench/knowledge-note.ts` | Builds and writes local model report notes from current store state | -| File picker | `src/view/model-file-suggest-modal.ts` | `FuzzySuggestModal` filtered to `SUPPORTED_MODEL_EXTENSIONS` | -| Code block | `src/view/inline/code-block.ts` | ```` ```3d path ```` or JSON config processor with config application and helper buttons; ```` ```3dgrid ```` multi-model grid processor | -| Live Preview | `src/view/inline/live-preview.ts` | CM6 StateField + Widget for `![[model.ext]]` embed rendering in Live Preview | -| Helper buttons | `src/view/inline/helper-buttons.ts` | Remove, Copy snapshot, Export snapshot toolbar; `SnapshotProvider` interface for both `BabylonModelPreview` and `GridRenderer` | -| Direct view | `src/view/direct-view.ts` | `FileView` for opening .glb/.gltf/.stl files directly in a viewer tab | -| Live Preview | `src/view/inline/live-preview.ts` | CM6 StateField + Widget for `![[model.ext]]` embed rendering in Live Preview | -| Settings | `src/settings.ts` | `PluginSettingTab` with 3 fields (folders + auto-generate toggle) | -| Utilities | `src/utils/format.ts` | `formatFileSize`, `escapeObsidianMarkup`, `normalizeTagList` | -| Device | `src/utils/device.ts` | `isMobile()`, `hardwareScale()` — mobile detection and Babylon resolution tuning | - -### Key Data Flow - -1. **State persistence**: `PluginState` (settings, currentModelPath, modelAssetProfiles, agentDraft/Plan) saved via Obsidian's `saveData`/`loadData` through the store bridge with 500ms debounce. - -2. **Model loading**: `BabylonModelPreview.loadModel(data, ext)` parses with Babylon's GLTF/OBJ/SPLAT loaders or self-written STL loader. Returns `ModelPreviewSummary` with mesh/triangle/material/bounding counts. - -3. **Knowledge notes**: `generateKnowledgeNote()` in `src/view/workbench/knowledge-note.ts` builds Markdown with frontmatter + summary table + sections. It updates an existing report note or creates one in the configured report folder. - - -### Bundle Size - -Babylon.js core is the dominant cost (~98% of 1.7 MB minified). Subpath imports (`@babylonjs/core/Engines/engine.js` etc.) are mandatory — barrel imports pull in Physics/WebGPU/XR and inflate to 7 MB. All Babylon imports in `src/render/babylon/` use subpath imports. - -### Build Configuration - -esbuild config externalizes `obsidian`, `electron`, `@codemirror/*`, `@lezer/*`. No Vue aliases or feature flags. Tree-shaking is enabled. - -## Conventions - -- All state mutations go through `ps.store.setState()` — views subscribe and re-render. -- `BabylonModelPreview` owns its render loop (`requestAnimationFrame`) and must be `destroy()`-ed by the view that created it. -- `SUPPORTED_MODEL_EXTENSIONS` is defined once in `src/domain/constants.ts` — both `main.ts` and `model-file-suggest-modal.ts` import from there. -- Tags are capped at 12 per field (`normalizeTagList`). -- STL loader validates buffer bounds before parsing (84-byte header, triangle count × 50 bytes). -- Picking clones material before modifying emissive color to avoid shared-material side effects. -- Explode uses world-space coordinates (`getAbsolutePosition` / `setAbsolutePosition`). -- The `3d` code block supports both simple path (` ```3d model.glb `) and JSON config format with models, camera, lights, scene, stl fields. -- The `3dgrid` code block renders multiple models in a single Babylon Scene using per-cell viewports (`GridRenderer`). One Engine/one WebGL context regardless of grid size. `scene.autoClear = false` + manual viewport + scissor per cell. -- `3dgrid` supports `preset` field: `"compare"` (side-by-side), `"showcase"` (multi-angle single model), `"explode"` (ring arrangement), `"timeline"` (horizontal strip), `"gallery"` (all models in one scene, single camera, no cell limit), `"compose"` (combine multiple presets). Presets are pure functions in `src/render/babylon/presets/` that return `{ placements, cells }`. -- Preset cameras use `PresetCameraDef` (alpha, beta, radiusMultiplier, target, fov). Named presets: `iso`, `front`, `side`, `top`, `back`, `3/4`. -- Model path resolution uses `metadataCache.getFirstLinkpathDest` for link-style paths, falling back to exact vault path. -- Direct file opening registers `.glb/.gltf/.stl` extensions via `registerExtensions` and opens `DirectModelView`. -- Helper buttons (remove/copy/export) are always visible below preview (`.ai3d-helper-toolbar`). They use `SnapshotProvider.captureSnapshot()` which both `BabylonModelPreview` and `GridRenderer` implement. diff --git a/README.md b/README.md index 4f3af07..d0d06e9 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ - **Inline and file previews**: Live Preview, code blocks, and direct file view - **Grid system**: render multiple models in a single viewport with presets - **3D annotations**: click-to-pin bookmarks with labels, colors, and depth-aware occlusion -- **Knowledge notes**: generate structured Markdown from loaded models +- **Knowledge notes**: generate structured Markdown from loaded models and auto-register captured part candidates for cross-model reuse checks - **Snapshots**: copy, save, or download rendered previews as PNG - **i18n**: English and Simplified Chinese with auto-detect system locale - **Desktop support**: Obsidian Desktop on Windows, macOS, and Linux @@ -377,7 +377,7 @@ The workbench `Generate note` action creates an evidence-backed Markdown note ra - a current viewport evidence snapshot in `Media/3D Previews` - an editable local draft that turns the captured evidence, annotations, tags, and profile notes into a first-pass knowledge note body, plus local draft metadata for tags and next actions -The default local pass does not send model data to a remote service. It uses renderer evidence, saved annotations, tags, and profile notes as the grounding layer for later AI-assisted drafting. +The default local pass does not send model data to a remote service. It uses renderer evidence, saved annotations, tags, and profile notes as the grounding layer for later AI-assisted drafting. When a GLB/GLTF file contains named internal groups or assemblies, the renderer registers those groups as higher-confidence part candidates and keeps ungrouped meshes as standalone candidates. Direct file view stores those captured candidates in the model profile immediately after a successful load, so later imported models can match reused parts even before a full report exists. During note generation, current part candidates are also compared with parts registered in other profiles or analyzed model sidecars, so likely reused components can be linked back to their existing part notes for review. After a report has been generated, use the direct workbench `Open index` action or the command palette `Open knowledge index` command to jump back into the model's knowledge map. @@ -651,6 +651,7 @@ npm run verify:release # Release asset version/hash/size check npm run verify:settings # Legacy data.json/default-settings migration check npm run verify:remote-draft # Remote draft privacy/client behavior check npm run verify:knowledge-index # Knowledge index link and refresh regression check +npm run verify:diagnostics # Sanitized diagnostics report regression check ``` ### Preview Verification diff --git a/README.zh-CN.md b/README.zh-CN.md index 5f63b03..80e2687 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -35,7 +35,7 @@ - **内联与文件视图**:实时预览、代码块、直接文件查看 - **网格系统**:在单个视口中渲染多个模型,支持预设布局 - **3D 标注**:点击模型表面添加带标签和颜色的书签,支持深度遮挡 -- **知识笔记**:从已加载的模型生成结构化 Markdown +- **知识笔记**:从已加载的模型生成结构化 Markdown,并自动注册捕获到的零件候选用于跨模型复用识别 - **快照功能**:复制、保存或下载渲染预览为 PNG - **国际化**:英文和简体中文,自动检测系统语言 - **桌面端支持**:Windows、macOS、Linux 上的 Obsidian Desktop @@ -391,7 +391,7 @@ ai-model-workbench/ - `Media/3D Previews` 下的当前视口证据截图 - 一个可直接编辑的本地草稿,把捕获到的证据、标注、标签和 profile notes 组织成第一版知识笔记正文,并附带本地草稿元数据、建议标签和下一步动作 -默认本地分析不会把模型数据发送到远程服务。它会先用渲染器证据、已保存标注、标签和 profile notes 建立后续 AI 草稿所需的 grounding 层。 +默认本地分析不会把模型数据发送到远程服务。它会先用渲染器证据、已保存标注、标签和 profile notes 建立后续 AI 草稿所需的 grounding 层。对于带有命名内部 group/assembly 的 GLB/GLTF,渲染器会自动把这些分组注册为更高置信度的部件候选,同时保留未归组 mesh 作为独立候选。直接文件视图在模型加载成功后会立刻把捕获到的候选零件写入模型 profile,所以后续导入的模型即使还没生成完整报告,也能识别疑似复用零件。生成笔记时,当前部件候选还会和其他 profile 或已分析模型 sidecar 中注册过的部件做本地相似度匹配,把疑似复用组件链接回已有部件笔记,方便人工复核。 报告生成后,可以在 direct workbench 使用“打开索引”,或在命令面板执行“打开知识索引”,直接回到该模型的知识地图入口。 @@ -664,6 +664,7 @@ npm run verify:release # 发布资产版本/hash/体积检查 npm run verify:settings # 旧 data.json/default settings 迁移检查 npm run verify:remote-draft # 远程草稿隐私/客户端行为检查 npm run verify:knowledge-index # 知识索引链接和刷新回归检查 +npm run verify:diagnostics # 脱敏诊断报告回归检查 ``` ### 预览验证 diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..b7de308 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,50 @@ +# Documentation Index + +Use this page to choose the right document before changing code. + +## Start Here + +- `../AGENTS.md` - coding-agent working rules, tool setup, and change-to-test mapping. +- `development-handoff.md` - current architecture, product contract, specification map, + and handoff checklist for a new model or developer. +- `../CLAUDE.md` - Claude Code entry point that points back to the shared handoff docs. + +## Product And Architecture Specs + +- `preview-routing-matrix.md` - canonical Three/Babylon routing contract and smoke tests. +- `requirements-tracker.md` - stable product requirements, statuses, acceptance + criteria, and verification mapping. +- `threejs-migration-roadmap.md` - Three.js migration history, target state, and reopen + conditions. +- `workbench-3dgrid-feasibility-note.md` - why production workbench and `3dgrid` + remain conservative capability paths. +- `../FORMAT_SUPPORT_DESIGN.md` - format support and local conversion strategy. +- `ai-3d-plugin-design-report.md` - early product/design background. +- `demo.md` - usage examples for code blocks, grids, annotations, snapshots, and notes. + +## Engineering Guardrails + +- `cross-platform-development.md` - vault/filesystem path rules, converter discovery, + and platform diagnostics requirements. +- `mit-upstream-guidelines.md` - license boundaries for upstream code or ideas. +- `../SECURITY.md` - release token safety and PAT leak response. + +## Release And Verification References + +- `../README.md` - user-facing install, format support, verification, and release notes. +- `../README.zh-CN.md` - Simplified Chinese user-facing docs. +- `../CHANGELOG.md` - current unreleased and release history. +- `../.github/workflows/release.yml` - release asset publishing workflow. + +## Quick Selection Guide + +| If you are changing... | Read first | +|------------------------|------------| +| Renderer route, rollout, annotation preview | `preview-routing-matrix.md` | +| Product scope, requirement status, release gates | `requirements-tracker.md` | +| Three.js migration or workbench route policy | `workbench-3dgrid-feasibility-note.md` | +| `3dgrid` behavior or presets | `workbench-3dgrid-feasibility-note.md`, `demo.md` | +| Supported formats or conversion | `../FORMAT_SUPPORT_DESIGN.md`, `cross-platform-development.md` | +| Generated reports, indexes, part notes | `development-handoff.md`, `../README.md` Knowledge Notes | +| Persisted state, settings migration | `development-handoff.md`, `../AGENTS.md` | +| Release publishing or token handling | `../SECURITY.md`, `../README.md` Release Publishing | diff --git a/docs/development-handoff.md b/docs/development-handoff.md new file mode 100644 index 0000000..912bcf7 --- /dev/null +++ b/docs/development-handoff.md @@ -0,0 +1,240 @@ +# Development Handoff + +This document prepares a new coding model or developer to continue AI Model Workbench +without rediscovering the project contract. Use it as the alignment layer between the +README, implementation, verification scripts, and release/security docs. + +## Repository Snapshot + +AI Model Workbench is an Obsidian plugin that renders 3D model files inside a vault, +adds 3D annotations/bookmarks, and generates linked knowledge notes from model evidence. +The current package version is `0.4.0`. + +Important runtime files: + +- `main.js`, `manifest.json`, `styles.css` are the shipped Obsidian plugin assets. +- `src/main.ts` registers commands, direct file views, code block processors, live + preview widgets, settings, and diagnostics. +- `src/domain/models.ts` is the shared type contract. Keep runtime code out of it. +- `src/store/plugin-store.ts` normalizes persisted `data.json` state and must preserve + backward compatibility. + +## Current Strategic Decisions + +### Renderer Split + +Three.js is the main single-model mesh preview path: + +- inline `3d` +- Live Preview embeds +- direct file view +- GLB/GLTF/STL/PLY/OBJ direct formats +- readonly and edit annotation overlays on supported single-model routes + +Babylon.js remains the capability and fallback path: + +- `3dgrid` +- conservative workbench/fallback routes +- legacy fallback when Three is disabled or rollout requires Babylon +- paths outside Three direct support + +The route contract lives in `src/render/preview/routing.ts` and +`docs/preview-routing-matrix.md`. If route behavior changes, update both code and docs. + +### Experimental Three Workbench + +Direct file view can enable an Experimental Three workbench route for direct GLB/GLTF +resources when settings allow it. It falls back to Babylon if Three loading fails. +This is not the same as changing all production workbench behavior. + +Use `docs/workbench-3dgrid-feasibility-note.md` before reopening broader workbench or +`3dgrid` migration decisions. + +### Knowledge Notes And Part Registration + +Knowledge generation is local-first. The workbench/direct view evidence pipeline writes: + +- a model report +- a JSON analysis sidecar +- a model knowledge index +- evidence snapshots +- up to 8 generated part note drafts +- local editable draft sections + +Named GLB/GLTF model groups are promoted to higher-confidence part candidates while +ungrouped meshes remain candidates. Direct file view auto-registers captured part +candidates into each model profile after successful load. This lets later imported +models detect likely reused parts before a full report/sidecar exists. Full report +generation upgrades those candidates with sidecar and part-note links. + +Core files: + +- `src/view/workbench/analysis-result.ts` +- `src/view/workbench/knowledge-note.ts` +- `src/view/direct-view.ts` +- `scripts/verify-knowledge-index.mjs` + +### Conversion Strategy + +The plugin keeps heavy CAD and uncommon mesh conversion out of the browser runtime. +Conversion-capable formats route to local desktop converters and produce GLB assets. +Mobile keeps direct lightweight formats. + +Core files: + +- `src/io/formats/registry.ts` +- `src/io/model-pipeline.ts` +- `src/io/conversion/*` +- `src/io/cache/converted-asset-cache.ts` + +Spec docs: + +- `FORMAT_SUPPORT_DESIGN.md` +- `docs/cross-platform-development.md` + +## Spec Alignment Map + +| Spec / doc | Use when | +|------------|----------| +| `README.md` / `README.zh-CN.md` | User-facing capability, install, verification, release overview | +| `CHANGELOG.md` | Release-facing behavior changes and current unreleased work | +| `AGENTS.md` | Agent tool setup and repository working rules | +| `docs/requirements-tracker.md` | Stable product requirements, acceptance criteria, and verification mapping | +| `docs/preview-routing-matrix.md` | Any renderer route or rollout change | +| `docs/workbench-3dgrid-feasibility-note.md` | Workbench or `3dgrid` migration decisions | +| `docs/threejs-migration-roadmap.md` | Historical Three migration rationale and reopen conditions | +| `FORMAT_SUPPORT_DESIGN.md` | Format support, conversion strategy, external tool boundaries | +| `docs/cross-platform-development.md` | Paths, converter discovery, Python scripts, platform copy | +| `docs/mit-upstream-guidelines.md` | External code/license decisions | +| `SECURITY.md` | Release token handling and leak response | +| `.github/workflows/release.yml` | Release asset publishing behavior | + +## Architecture Map + +```text +src/ +├── main.ts # Obsidian lifecycle, commands, views, processors +├── settings.ts # Plugin settings UI and diagnostics controls +├── domain/ +│ ├── models.ts # Shared interfaces and persisted state types +│ └── constants.ts # Defaults and supported extension set +├── store/ +│ ├── create-store.ts # Small store primitive +│ └── plugin-store.ts # Obsidian loadData/saveData bridge +├── render/ +│ ├── preview/ # Renderer-agnostic interfaces, routing, annotations +│ ├── three/ # ThreeModelPreview and Three loaders/adapters +│ └── babylon/ # Babylon preview, grid renderer, custom loaders +├── io/ +│ ├── formats/ # Format capability registry +│ ├── conversion/ # Converter discovery, manager, adapters +│ ├── cache/ # Converted asset cache +│ └── model-pipeline.ts # Direct/convert preparation +└── view/ + ├── direct-view.ts # Direct file view and direct workbench panel + ├── inline/ # `3d`, `3dgrid`, Live Preview, helper toolbar + └── workbench/ # Analysis result, knowledge note, remote draft helpers +``` + +## Verification Matrix + +Run only the checks that match the risk, but do not ship route, state, knowledge, or +release changes without their matching verification. + +| Command | Purpose | +|---------|---------| +| `npm run build` | Production esbuild bundle | +| `npm run typecheck` | TypeScript contract check | +| `npm run verify:preview` | Focused browser preview smoke test | +| `npm run verify:preview:success` | Full preview route and interaction suite | +| `npm run verify:settings` | Legacy `data.json` migration/defaults check | +| `npm run verify:knowledge-index` | Report/index/part-note/registered part regression | +| `npm run verify:remote-draft` | Remote draft privacy and request shaping | +| `npm run verify:diagnostics` | Sanitized diagnostics output | +| `npm run verify:release` | Release asset version/hash/size check | +| `npm run verify:obsidian` | Real Obsidian smoke test when available | + +Preview harness notes: + +- The harness auto-detects Chrome/Edge/Chromium/Brave. +- Set `PLAYWRIGHT_CHROMIUM_EXECUTABLE` only for a custom browser. +- Failure screenshots and logs are written under `.tmp/preview-failures/`. + +Useful focused preview examples: + +```bash +npm run verify:preview -- --mode workbench --allow-workbench-three +npm run verify:preview -- --rollout babylon-safe +npm run verify:preview -- --model "models/resource-fixtures/grouped-parts/grouped parts.gltf" --expect-group-parts +``` + +## Tool And Environment Notes + +- Node/npm are used for all builds and verification scripts. +- Obsidian app verification is macOS-oriented in the current script and uses a temporary + vault under `/tmp/ai-model-workbench-verify-vault`. +- Converter features depend on local desktop tools and Python environments. Do not assume + a converter exists because a command name is common. +- Release publishing should rely on GitHub Actions `GITHUB_TOKEN`, not pasted PATs. + +## Common Development Workflows + +### Preview Or Renderer Change + +1. Read `docs/preview-routing-matrix.md`. +2. Change the renderer or route code. +3. Update route docs if behavior changed. +4. Run `npm run typecheck`. +5. Run `npm run verify:preview` or `npm run verify:preview:success`. + +### Knowledge Generation Change + +1. Read the Knowledge Notes section in `README.md`. +2. Inspect `src/view/workbench/analysis-result.ts` and `knowledge-note.ts`. +3. Preserve user-written index content outside managed markers. +4. Run `npm run verify:knowledge-index`. +5. Update `CHANGELOG.md` if behavior changed. + +### Persisted State Or Settings Change + +1. Update `src/domain/models.ts` and `src/store/plugin-store.ts` together. +2. Normalize missing legacy fields safely. +3. Run `npm run typecheck` and `npm run verify:settings`. +4. Update diagnostics if the new state helps support/debugging. + +### Converter Or Path Handling Change + +1. Read `docs/cross-platform-development.md`. +2. Keep vault paths and filesystem paths separate. +3. Preserve user setting/env override priority. +4. Add or update diagnostics before expecting users to debug in DevTools. +5. Prefer Obsidian app verification when the change touches real file access. + +### Release Preparation + +1. Ensure `package.json`, `manifest.json`, and `versions.json` align. +2. Run `npm run build`. +3. Run `npm run verify:release`. +4. Scan for tokens as described in `SECURITY.md`. +5. Publish through GitHub Actions with a tag such as `0.4.0` (no `v` prefix). + +## Current Follow-Up Direction + +Short-term product direction after `0.4.0`: + +- Tighten auto part registration and cross-model part reuse feedback. +- Keep improving direct workbench UX without prematurely moving all workbench routes. +- Maintain Three.js as the single-model main path. +- Keep `3dgrid` and production workbench conservative until workflow-level evidence says + migration is worth it. +- Continue improving release safety, diagnostics, and real Obsidian verification. + +## Handoff Checklist For A New Model + +Before doing implementation work, confirm: + +- You know which renderer route the target surface should use. +- You know whether the change touches persisted data. +- You know which verification command proves the change. +- You have checked existing uncommitted files with `git status --short`. +- You have read the relevant spec doc from the alignment map above. diff --git a/docs/requirements-tracker.md b/docs/requirements-tracker.md new file mode 100644 index 0000000..1080134 --- /dev/null +++ b/docs/requirements-tracker.md @@ -0,0 +1,100 @@ +# Requirements Tracker + +Use this file to track AI Model Workbench requirements that affect product scope, +verification, and handoff. Keep IDs stable once created so changelog entries, tests, and +future agent notes can refer to the same requirement over time. + +## Status Key + +| Status | Meaning | +|--------|---------| +| `Accepted` | In scope and ready for implementation or ongoing refinement | +| `In Progress` | Currently being changed | +| `Verified` | Implemented and covered by the listed verification | +| `Deferred` | Valid, but intentionally postponed | +| `Dropped` | No longer in scope | + +## Priority Key + +| Priority | Meaning | +|----------|---------| +| `P0` | Required for safe plugin operation | +| `P1` | Important for the next release-quality build | +| `P2` | Useful improvement | +| `P3` | Nice-to-have or exploratory | + +## Requirement Index + +| ID | Requirement | Priority | Status | Verification | +|----|-------------|----------|--------|--------------| +| REQ-001 | Single-model previews use Three.js by default while Babylon remains fallback/capability backend | P0 | Verified | `npm run verify:preview`, `npm run verify:preview:success` | +| REQ-002 | `3dgrid` and conservative workbench routes remain on Babylon until workflow evidence justifies migration | P0 | Accepted | `docs/preview-routing-matrix.md`, `npm run verify:preview` | +| REQ-003 | Knowledge generation remains local-first and records report, sidecar, index, preview evidence, and part notes | P0 | Verified | `npm run verify:knowledge-index` | +| REQ-004 | Direct file view auto-registers captured part candidates for later cross-model reuse matching | P1 | Verified | `npm run verify:knowledge-index`, `node scripts/verify-preview.mjs --model "models/resource-fixtures/grouped-parts/grouped parts.gltf" --expect-group-parts` | +| REQ-005 | Registered part reuse feedback is visible in generated notes and direct workbench UI | P1 | Verified | `npm run verify:knowledge-index`, `npm run typecheck`, `node scripts/verify-preview.mjs --mode workbench --allow-workbench-three` | +| REQ-006 | Diagnostics reports expose support context without leaking draft service URLs or converter command paths | P1 | Verified | `npm run verify:diagnostics` | +| REQ-007 | Release assets keep `manifest.json`, `package.json`, `versions.json`, `main.js`, and `styles.css` aligned | P0 | Verified | `npm run build`, `npm run verify:release` | +| REQ-008 | Real Obsidian smoke verification covers install, rendering, knowledge generation, and diagnostics when the host can launch Obsidian | P1 | Accepted | `npm run verify:obsidian` | + +## Active Requirement Details + +### REQ-004: Auto Part Registration + +- Status: Verified +- Priority: P1 +- User value: Named groups and assemblies in GLB/GLTF files should become reusable part candidates without requiring a full report first. +- Current behavior: + - Named model groups are promoted to higher-confidence part candidates. + - Ungrouped mesh parts remain available as lower-confidence candidates. + - The grouped-parts browser fixture verifies that group and mesh evidence are both preserved. +- Verification: + - `npm run verify:knowledge-index` + - `node scripts/verify-preview.mjs --model "models/resource-fixtures/grouped-parts/grouped parts.gltf" --expect-group-parts` + +### REQ-005: Registered Part Reuse Feedback + +- Status: Verified +- Priority: P1 +- User value: When a newly loaded model contains parts that resemble parts from another model, users should see where the match came from and have an immediate action to inspect the existing evidence. +- Current behavior: + - Knowledge reports, sidecars, draft input, index entries, and part notes preserve registered matches. + - Direct workbench shows the strongest cross-model matches. + - Direct workbench now includes the source model label, explains what the action opens, and opens the matched part note, falling back to the source model file if no part note exists yet. +- Acceptance criteria: + - Match rows show the current part, matched registered part, match reasons, score, and source model. + - The action label distinguishes opening a part note from opening a source model fallback. + - The action is enabled when either a part note or source model path is available. + - Generated analysis preserves `sourceModelPath` for matched registered parts. + - The UI stays compact on narrow panes. +- Verification: + - `npm run typecheck` + - `npm run verify:knowledge-index` + - `node scripts/verify-preview.mjs --mode workbench --allow-workbench-three` + - `npm run verify:preview:success` for full route coverage when changing broader preview behavior. + +## New Requirement Template + +```md +### REQ-000: Requirement Name + +- Status: Accepted +- Priority: P2 +- User value: +- Scope: +- Out of scope: +- Acceptance criteria: + - +- Verification: + - +- Related files: + - +``` + +## Review Rules + +- Update this tracker when product scope, route policy, release gates, or acceptance + criteria change. +- Keep implementation details in source/docs; keep this file focused on what must remain + true and how to verify it. +- Before release, every P0 requirement should be `Verified` or intentionally documented + as `Deferred`/`Dropped`. diff --git a/main.js b/main.js index 086013a..b5a7b58 100644 --- a/main.js +++ b/main.js @@ -1,10 +1,10 @@ -"use strict";var zR=Object.defineProperty;var mj=Object.getOwnPropertyDescriptor;var pj=Object.getOwnPropertyNames;var _j=Object.prototype.hasOwnProperty;var C=(n,e)=>()=>(n&&(e=n(n=0)),e);var et=(n,e)=>{for(var t in e)zR(n,t,{get:e[t],enumerable:!0})},gj=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of pj(e))!_j.call(n,r)&&r!==t&&zR(n,r,{get:()=>e[r],enumerable:!(i=mj(e,r))||i.enumerable});return n};var vj=n=>gj(zR({},"__esModule",{value:!0}),n);function _d(n,e,t){return`${n}::${e}::${t}`}function Ej(n,e){return!!(n.cacheVersion===2&&n.converterId&&n.converterCacheKey&&n.sourcePath&&n.sourceExt&&n.targetExt==="glb"&&n.outputPath&&n.outputExt==="glb"&&Number.isFinite(n.createdAt)&&e-n.createdAt<=2592e6)}function qO(n,e=Date.now()){let t=new Map;for(let i of n){if(!Ej(i,e))continue;let r=_d(i.sourcePath,i.sourceExt,i.targetExt),s=t.get(r);(!s||i.createdAt>s.createdAt)&&t.set(r,i)}return[...t.values()].sort((i,r)=>r.createdAt-i.createdAt).slice(0,200)}function Sj(n,e){return!!n&&!!e&&n.cacheVersion===e.cacheVersion&&n.converterId===e.converterId&&n.converterCacheKey===e.converterCacheKey&&n.sourcePath===e.sourcePath&&n.sourceExt===e.sourceExt&&n.targetExt===e.targetExt&&n.outputPath===e.outputPath&&n.outputExt===e.outputExt&&n.createdAt===e.createdAt&&n.warnings.join(` +"use strict";var nb=Object.defineProperty;var Nj=Object.getOwnPropertyDescriptor;var wj=Object.getOwnPropertyNames;var Fj=Object.prototype.hasOwnProperty;var C=(n,e)=>()=>(n&&(e=n(n=0)),e);var $e=(n,e)=>{for(var t in e)nb(n,t,{get:e[t],enumerable:!0})},Bj=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of wj(e))!Fj.call(n,r)&&r!==t&&nb(n,r,{get:()=>e[r],enumerable:!(i=Nj(e,r))||i.enumerable});return n};var Uj=n=>Bj(nb({},"__esModule",{value:!0}),n);function vd(n,e,t){return`${n}::${e}::${t}`}function Vj(n,e){return!!(n.cacheVersion===2&&n.converterId&&n.converterCacheKey&&n.sourcePath&&n.sourceExt&&n.targetExt==="glb"&&n.outputPath&&n.outputExt==="glb"&&Number.isFinite(n.createdAt)&&e-n.createdAt<=2592e6)}function sN(n,e=Date.now()){let t=new Map;for(let i of n){if(!Vj(i,e))continue;let r=vd(i.sourcePath,i.sourceExt,i.targetExt),s=t.get(r);(!s||i.createdAt>s.createdAt)&&t.set(r,i)}return[...t.values()].sort((i,r)=>r.createdAt-i.createdAt).slice(0,200)}function Gj(n,e){return!!n&&!!e&&n.cacheVersion===e.cacheVersion&&n.converterId===e.converterId&&n.converterCacheKey===e.converterCacheKey&&n.sourcePath===e.sourcePath&&n.sourceExt===e.sourceExt&&n.targetExt===e.targetExt&&n.outputPath===e.outputPath&&n.outputExt===e.outputExt&&n.createdAt===e.createdAt&&n.warnings.join(` `)===e.warnings.join(` -`)}function ZO(n=[],e){function t(){return qO([...s.values()])}function i(l){s.clear();for(let c of l)s.set(_d(c.sourcePath,c.sourceExt,c.targetExt),c)}let r=qO(n),s=new Map(r.map(l=>[_d(l.sourcePath,l.sourceExt,l.targetExt),l]));function a(){let l=t();i(l),e==null||e(l)}return(n.length!==r.length||r.some((l,c)=>!Sj(l,n[c])))&&(e==null||e(r)),{get(l,c,f){return s.get(_d(l,c,f))},set(l){s.set(_d(l.sourcePath,l.sourceExt,l.targetExt),l),a()},delete(l,c,f){let h=s.delete(_d(l,c,f));return h&&a(),h},clear(){s.size!==0&&(s.clear(),a())},entries(){return t()}}}var XR=C(()=>{"use strict"});function ya(n){return n.trim().toLowerCase().replace(/^\./,"")}function YR(n){return Tj.get(ya(n))}function fl(n){let e=YR(n);return!!(e!=null&&e.enabled)}function rp(n){return["splat","spz","sog"].includes(ya(n))}function Yf(){return QO.filter(n=>n.enabled).map(n=>n.ext)}var QO,Tj,hl=C(()=>{"use strict";QO=[{ext:"glb",family:"mesh",strategy:"direct",directLoader:"babylon",enabled:!0},{ext:"gltf",family:"mesh",strategy:"direct",directLoader:"babylon",enabled:!0},{ext:"stl",family:"mesh",strategy:"direct",directLoader:"custom-stl",enabled:!0},{ext:"obj",family:"mesh",strategy:"direct",directLoader:"babylon",converterId:"obj2gltf",outputFormat:"glb",enabled:!0},{ext:"ply",family:"mesh",strategy:"direct",directLoader:"custom-ply",enabled:!0},{ext:"fbx",family:"mesh",strategy:"convert",converterId:"fbx2gltf",outputFormat:"glb",enabled:!0},{ext:"step",family:"cad",strategy:"convert",converterId:"freecad",outputFormat:"glb",enabled:!0},{ext:"stp",family:"cad",strategy:"convert",converterId:"freecad",outputFormat:"glb",enabled:!0},{ext:"iges",family:"cad",strategy:"convert",converterId:"freecad",outputFormat:"glb",enabled:!0},{ext:"igs",family:"cad",strategy:"convert",converterId:"freecad",outputFormat:"glb",enabled:!0},{ext:"brep",family:"cad",strategy:"convert",converterId:"freecad",outputFormat:"glb",enabled:!0},{ext:"sldprt",family:"cad",strategy:"convert",converterId:"sldprt",outputFormat:"glb",enabled:!0},{ext:"3mf",family:"mesh",strategy:"convert",converterId:"assimp",outputFormat:"glb",enabled:!0},{ext:"dae",family:"mesh",strategy:"convert",converterId:"assimp",outputFormat:"glb",enabled:!0}],Tj=new Map(QO.map(n=>[n.ext,n]))});var KR,eN=C(()=>{"use strict";KR={"settings.title":"AI 3d model workbench","settings.folders":"Folders","settings.behavior":"Behavior","settings.converters":"Converters","settings.converterMenu":"Model converters","settings.converterMenu.desc":"Closed by default. Open this section only when you want to manually enable an optional local conversion route.","settings.environmentInspector":"Environment inspector","settings.environmentInspector.desc":"Closed by default. Open this section when you need to configure command paths or run environment checks.","settings.paths":"Converter paths","settings.diagnostics":"Converter command diagnostics","settings.performance":"Performance & display","settings.mobileSupport":"Mobile support","settings.knowledgeGeneration":"Knowledge generation","settings.sourceModelFolder":"Source model folder","settings.sourceModelFolder.desc":"Vault folder where source model files are stored.","settings.reportFolder":"Report folder","settings.reportFolder.desc":"Vault folder where generated knowledge notes are saved.","settings.partFolder":"Part notes folder","settings.partFolder.desc":"Vault folder where generated part note drafts are saved.","settings.snapshotFolder":"Snapshot folder","settings.snapshotFolder.desc":"Vault folder where exported snapshots are saved.","settings.autoGenerateKnowledgeNotes":"Auto-generate knowledge notes","settings.autoGenerateKnowledgeNotes.desc":"Reserved for a future automation flow. For now, generate notes manually from the command palette.","settings.annotationPreviewMode":"Annotation preview mode","settings.annotationPreviewMode.desc":"Choose how bound note previews render in annotation popovers and the editor.","settings.annotationPreviewMode.plainText":"Plain text","settings.annotationPreviewMode.markdown":"Markdown","settings.previewRendererRollout":"Preview compatibility mode","settings.previewRendererRollout.desc":"Controls how widely the Three.js preview path is used for single-model previews (GLB, GLTF, STL, PLY, OBJ). Switch back to Compatibility mode if pin projection, occlusion, edit pins, snapshots, or toolbar behavior regress. 3dgrid is not affected by this setting.","settings.previewRendererRollout.babylonSafe":"Compatibility mode","settings.previewRendererRollout.readonly":"Reading surfaces only","settings.previewRendererRollout.direct":"Reading + file view (Recommended)","settings.useThreeRenderer":"Use Three.js renderer","settings.useThreeRenderer.desc":"Toggle between Three.js (faster, lighter) and Babylon.js (full compatibility) for single-model previews. Three.js supports GLB/GLTF/STL/PLY/OBJ. 3dgrid always uses Babylon.js.","settings.experimentalThreeWorkbench":"Experimental Three workbench","settings.experimentalThreeWorkbench.desc":"Try the Three.js workbench path for direct GLB/GLTF files only. If loading fails, the file view falls back to Babylon.js automatically.","settings.autoRotateDefault":"Auto-rotate by default","settings.autoRotateDefault.desc":"Start model previews with auto-rotation enabled.","settings.snapshotNaming":"Snapshot naming","settings.snapshotNaming.desc":"How exported snapshot files are named.","settings.snapshotNaming.modelName":"Model name + timestamp","settings.snapshotNaming.timestamp":"Timestamp only","settings.logLevel":"Log level","settings.logLevel.desc":"Controls plugin runtime log verbosity in the developer console.","settings.language":"Language","settings.language.desc":"Display language for plugin settings. Takes effect immediately.","settings.analysisMode":"AI drafting mode","settings.analysisMode.desc":"Controls whether knowledge-note generation stays local or also requests a sanitized remote draft. Raw model upload is blocked by the current client.","settings.analysisMode.local":"Local evidence only","settings.analysisMode.hybrid":"Local evidence + remote draft","settings.analysisMode.remote":"Remote draft from evidence","settings.serviceBaseUrl":"Draft service URL","settings.serviceBaseUrl.desc":"Optional base URL for a service that accepts POST /draft-note. Leave empty to keep all drafting local.","settings.sendGeometrySummaryToRemote":"Send geometry summary","settings.sendGeometrySummaryToRemote.desc":"Allow sanitized mesh counts, bounds, part candidates, annotation coordinates, and nearest-part links to be included in remote draft input.","settings.sendPreviewImagesToRemote":"Send preview image references","settings.sendPreviewImagesToRemote.desc":"Allow generated preview image paths to be listed in the remote draft input. Image bytes are not uploaded by this client.","settings.sendRawModelToRemote":"Send raw model file","settings.sendRawModelToRemote.desc":"Reserved for future explicit upload support. If enabled manually, remote draft requests are blocked instead of uploading the model.","settings.enableCad":"Enable cad conversion for step, iges, and brep files","settings.enableCad.desc":"Enable cad conversion for step, iges, and brep formats. Requires cadquery and trimesh in your python environment.","settings.enableObj2gltf":"Enable obj2gltf converter (experimental)","settings.enableObj2gltf.desc":"Keep obj direct loading as the default. Enable this only if you want an optional local normalization route through obj2gltf.","settings.preferObj2gltf":"Prefer obj2gltf for obj","settings.preferObj2gltf.desc":"Recommended default is off. Turn this on only when you want normalized output files or direct obj loading is not good enough.","settings.enableFbx2gltf":"Enable FBX2glTF converter","settings.enableFbx2gltf.desc":"Enable conversion for fbx files via FBX2glTF. Requires the FBX2glTF binary installed locally.","settings.enableMesh":"Enable mesh conversion for 3mf and dae files","settings.enableMesh.desc":"Enable conversion for 3mf and dae formats via python trimesh. Requires trimesh, numpy, networkx, and pycollada in your python environment.","settings.enableSldprt":"Enable sldprt conversion for SolidWorks files","settings.enableSldprt.desc":"Enable conversion for SolidWorks sldprt files via FreeCAD. Requires FreeCAD installed locally.","settings.mobileSupport.desc":"On iOS, iPadOS, and Android, direct formats like GLB, GLTF, STL, OBJ, and PLY are supported. Local converter settings and diagnostics remain desktop-only.","settings.pythonCmd":"Path to the python command for cad conversion","settings.pythonCmd.desc":"Optional path to the python command used for cad conversion. Windows usually uses py. macOS and Linux usually use python3. Overrides auto-discovery when set.","settings.freecadCmd":"Path to the FreeCAD command for sldprt conversion","settings.freecadCmd.desc":"Optional path to the FreeCAD command used for SolidWorks file conversion. Windows usually uses FreeCADCmd.exe, macOS usually uses FreeCADCmd, and Linux usually uses freecadcmd. Overrides auto-discovery when set.","settings.obj2gltfCmd":"Path to the obj2gltf command","settings.obj2gltfCmd.desc":"Optional path to the obj2gltf command. Windows usually uses obj2gltf.cmd, and macOS and Linux usually use obj2gltf. Overrides auto-discovery when set.","settings.fbx2gltfCmd":"FBX2glTF command path","settings.fbx2gltfCmd.desc":"Optional path to the FBX2glTF command. Windows usually uses FBX2glTF.exe, and macOS and Linux usually use FBX2glTF. Overrides auto-discovery when set.","settings.assimpCmd":"Path to the python command for 3mf and dae conversion","settings.assimpCmd.desc":"Optional path to the python command used for 3mf and dae conversion. Windows usually uses py. macOS and Linux usually use python3. Overrides auto-discovery when set.","settings.diagnostics.desc":"Shows the exact executable path the plugin would use right now and runs lightweight self-checks for Python environments and converter CLIs.","settings.diagnostics.idle":"Diagnostics are off by default. Click Check now to run them manually.","settings.diagnostics.checkNow":"Check now","settings.diagnostics.checking":"Checking...","settings.diagnostics.refreshed":"Converter command diagnostics refreshed.","settings.diagnostics.checkingAvailability":"Checking converter command availability...","settings.diagnostics.available":"available","settings.diagnostics.notFound":"not found","settings.diagnostics.sourceLabel":"Source","settings.diagnostics.commandLabel":"Command","settings.diagnostics.resolvedPathLabel":"Resolved path","settings.diagnostics.selfCheckLabel":"Self-check","settings.diagnostics.selfCheckOk":"passed","settings.diagnostics.selfCheckFailed":"failed","settings.diagnostics.cadPythonCheck":"Python packages (cadquery, trimesh)","settings.diagnostics.meshPythonCheck":"Python packages (trimesh, numpy, networkx, collada)","settings.diagnostics.freecadCmdCheck":"FreeCADCmd launch probe","settings.diagnostics.obj2gltfCheck":"obj2gltf launch probe","settings.diagnostics.fbx2gltfCheck":"FBX2glTF launch probe","settings.canvasHeight":"Default canvas height","settings.canvasHeight.desc":"Default height (px) for inline model previews. Range: 200\u2013800.","settings.autoRotateSpeed":"Auto-rotate speed","settings.autoRotateSpeed.desc":"Rotation speed when auto-rotate is enabled. Range: 0.1\u20132.0.","settings.renderQuality":"Render quality","settings.renderQuality.desc":"Higher quality uses more GPU resources. Affects anti-aliasing and resolution.","settings.renderScale":"Resolution scale","settings.renderScale.desc":"Render resolution multiplier. 1.0 = native, 0.5 = half, 2.0 = double (supersampling). Range: 0.25\u20132.0.","modelLoad.warningTitle":"Model preview unavailable","modelLoad.warningMessage":"{ext} files need the {converterName} converter enabled in plugin settings before they can load.","modelLoad.warningHint":"Enable the matching converter in plugin settings, then reload this file.","modelLoad.mobileWarningMessage":"{ext} files need local conversion tools that are unavailable on iOS, iPadOS, and Android.","modelLoad.mobileWarningHint":"Open this file on desktop, or convert it to GLB, GLTF, OBJ, STL, or PLY first.","modelLoad.errorTitle":"Couldn't display this model","modelLoad.errorMessage":"Failed to load: {reason}","modelLoad.errorHint":"Check the file format or open the developer console for details.","headingPin.showSingle":"Show linked pin","headingPin.showMultiple":"Show linked pins","headingPin.linkedTo":"Pin linked to: {models}","helper.resetViewLabel":"Reset view","helper.resetViewDone":"Reset","helper.copyModelInfoLabel":"Copy model info as Markdown","helper.copySelectedPartInfoLabel":"Copy selected part info","helper.noSelectedPart":"Select a part first","helper.copied":"Copied!","helper.failed":"Failed","helper.toggleWireframeLabel":"Toggle wireframe","helper.wireframeOn":"Wireframe","helper.wireframeOff":"Solid","helper.toggleAxesLabel":"Toggle orientation axes","helper.axesOn":"Axes on","helper.axesOff":"Axes off","helper.toggleBoundingBoxLabel":"Toggle bounding box","helper.boundingBoxOn":"Bounding box on","helper.boundingBoxOff":"Bounding box off","helper.toggleFocusSelectionLabel":"Focus selected part","helper.focusSelectionOn":"Focus mode on","helper.focusSelectionOff":"Focus mode off","helper.toggleDisassemblyLabel":"Toggle disassembly mode","helper.disassemblyOn":"Disassembly on","helper.disassemblyOff":"Disassembly off","helper.resetPartsLabel":"Reset disassembled parts","helper.partsReset":"Parts reset","helper.changeResolutionLabel":"Change resolution","helper.resolutionValue":"Resolution: {value}","helper.toggleAnimationLabel":"Play or pause animation","helper.playing":"Playing","helper.paused":"Paused","helper.removePreviewLabel":"Remove preview","helper.copySnapshotLabel":"Copy snapshot","helper.saveSnapshotLabel":"Save snapshot to vault","helper.saved":"Saved!","helper.downloadSnapshotLabel":"Download snapshot","helper.downloaded":"Downloaded!","helper.toggleAnnotationLabel":"Toggle annotation mode","helper.toggleAnnotationsVisibilityLabel":"Show or hide annotations","helper.annotateOn":"Annotation mode on","helper.annotateOff":"Annotation mode off","helper.annotationsVisible":"Annotations shown","helper.annotationsHidden":"Annotations hidden","helper.enableInteractionLabel":"Enable touch interaction","helper.disableInteractionLabel":"Return to scroll mode","helper.interactionOn":"Model interaction on","helper.interactionOff":"Scroll mode on","helper.showMoreActionsLabel":"Show more actions","helper.hideMoreActionsLabel":"Hide extra actions","helper.moreActionsShown":"More actions shown","helper.moreActionsHidden":"Extra actions hidden","helper.interactAction":"Interact","helper.scrollAction":"Scroll","workbench.emptyTitle":"No model","workbench.emptyText":'Use the "import 3D model" command to load a GLB, GLTF, STL, OBJ, or PLY file.',"workbench.modelTitle":"Model","workbench.studioTitle":"AI Model Workbench","workbench.studioTagline":"Inspect, annotate, and turn 3D assets into linked notes.","workbench.navLabel":"Workbench sections","workbench.navGallery":"Gallery","workbench.navLibrary":"Library","workbench.navNotebooks":"Notebooks","workbench.navSettings":"Settings","workbench.sourcesTitle":"Model sources","workbench.layersTitle":"Review layers","workbench.viewModeTitle":"View mode","workbench.modeMesh":"Mesh view","workbench.modeFocus":"Focus selection","workbench.modeMeshShort":"Mesh","workbench.modeFocusShort":"Focus","workbench.previewViewsTitle":"Preview views","workbench.connectionsTitle":"Knowledge connections","workbench.currentModelLabel":"Current model","workbench.noReportYet":"No report note yet","workbench.noIndexYet":"No knowledge index yet. Generate a knowledge note first.","workbench.noModelLoaded":"No model loaded","workbench.disassemblyTitle":"Disassembly","workbench.explodeLabel":"Explode","workbench.summaryTitle":"Summary","workbench.meshesLabel":"Meshes","workbench.splatsLabel":"Splats","workbench.trianglesLabel":"Triangles","workbench.verticesLabel":"Vertices","workbench.materialsLabel":"Materials","workbench.boundingSizeLabel":"Bounds","workbench.centerLabel":"Center","workbench.selectedPartTitle":"Selected Part","workbench.partMeshLabel":"Mesh","workbench.noSelectedPart":"Click a model part to inspect it here.","workbench.tagsTitle":"Tags","workbench.noTagsYet":"No tags yet","workbench.addTagPlaceholder":"Add tag...","workbench.addTagAction":"Add","workbench.annotationsTitle":"Annotations","workbench.exitAnnotate":"Exit annotate","workbench.annotate":"Annotate","workbench.annotateHintActive":"Click the model to add a label \xB7 press Esc to exit","workbench.annotateHintActiveMobile":"Tap the model to add a label. Switch back to Scroll when you want to move through the note again.","workbench.pinCount":"{count} pin(s)","workbench.editAction":"Edit","workbench.deleteAction":"Delete","workbench.resetViewAction":"Reset view","workbench.insertInfoAction":"Insert info","workbench.insertGalleryAction":"Insert Gallery","workbench.insertCompareAction":"Insert Compare","workbench.playAction":"Play","workbench.pauseAction":"Pause","workbench.saveProfileAction":"Save profile","workbench.generateNoteAction":"Generate note","workbench.openNoteAction":"Open note","workbench.openIndexAction":"Open index","workbench.recordTitle":"Specimen card","workbench.recordSubtitle":"Current asset profile","workbench.notesTitle":"Analysis notes","workbench.whereTitle":"Where it connects","workbench.noteReady":"Linked note ready","workbench.indexReady":"Knowledge index ready","workbench.notePending":"Linked note pending","workbench.analysisLabel":"Analysis","workbench.settingsUnavailable":"Open this plugin from Obsidian settings to change workbench options.","workbench.profileSaved":"Profile saved","workbench.viewReset":"View reset","workbench.infoInserted":"Model info inserted","workbench.infoCopied":"Model info copied","workbench.templateInserted":"Template inserted","workbench.templateCopied":"Template copied","workbench.mobileHint":"Mobile tip: tap Interact to move the model, then switch back to Scroll to keep reading the note.","workbench.mobileHintInteractive":"Interaction mode is on. Switch back to Scroll when you want to move through the note again.","directView.mobileHint":"Mobile tip: use the toolbar Interact button to switch between model interaction and note scrolling.","directWorkbench.backendLabel":"Backend","directWorkbench.routeLabel":"Route","directWorkbench.performanceLabel":"Performance","directWorkbench.explodeAxisLabel":"Explode axis","directWorkbench.explodeResetLabel":"Reset","directWorkbench.knowledgeTitle":"Knowledge","workbench.fileNotFound":"File not found: {path}","annotation.selectColor":"Select color {color}","annotation.sectionEmpty":"Section is empty.","modal.selectModel":"Select a 3D model...","main.commandImportModel":"Import a 3D model","main.commandGenerateNote":"Generate knowledge note","main.commandOpenKnowledgeIndex":"Open knowledge index","main.commandClearConversionCache":"Clear conversion cache","main.commandCheckConverters":"Check converters","main.converterDiagnosticsMobileUnavailable":"Converter diagnostics are only available on desktop. On iOS, iPadOS, and Android, direct formats can still load.","codeBlock.noModelPathOrConfig":"No model path or config specified.","codeBlock.jsonParseError":"JSON parse error: {error}","codeBlock.jsonParseLine":" (line {line})","codeBlock.noModelsInConfig":"No models specified in config.","codeBlock.unsupportedFormat":"Unsupported format: {ext}. Supported: {formats}","codeBlock.splatDisabled":"SPLAT preview is disabled in packaged builds. Local-only .splat support is planned first; .spz/.sog need locally bundled decoders before reevaluation.","codeBlock.noConfigSpecified":"No config specified.","codeBlock.noModelsSpecified":"No models specified.","codeBlock.mobileHint":"Mobile tip: use Interact to manipulate the model, then switch back to Scroll to keep moving through the note.","codeBlock.renderingGrid":"Rendering grid...","codeBlock.composeRequiresSections":'"compose" preset requires a "sections" array.',"codeBlock.composeNoValidSections":"Compose: no valid sections.","codeBlock.unknownPreset":'Unknown preset: "{preset}". Available: compare, showcase, explode, timeline, compose',"codeBlock.presetRequiresModels":'Preset "{preset}" requires {min}-{max} models, got {count}.',"codeBlock.gridFailed":"Grid failed: {reason}","livePreview.mobileHint":"Mobile tip: switch between Interact and Scroll depending on whether you want to move the model or keep reading.","loading.default":"Loading...","loading.preparingModel":"Preparing model...","loading.loadingModel":"Loading model..."}});var tN,iN=C(()=>{"use strict";tN={"settings.title":"AI 3D \u6A21\u578B\u5DE5\u4F5C\u53F0","settings.folders":"\u6587\u4EF6\u5939","settings.behavior":"\u884C\u4E3A","settings.converters":"\u8F6C\u6362\u5668","settings.converterMenu":"\u6A21\u578B\u8F6C\u6362\u5668","settings.converterMenu.desc":"\u9ED8\u8BA4\u6536\u8D77\u3002\u4EC5\u5728\u4F60\u9700\u8981\u624B\u52A8\u542F\u7528\u67D0\u6761\u672C\u5730\u8F6C\u6362\u8DEF\u7EBF\u65F6\u518D\u5C55\u5F00\u3002","settings.environmentInspector":"\u73AF\u5883\u68C0\u67E5\u5668","settings.environmentInspector.desc":"\u9ED8\u8BA4\u6536\u8D77\u3002\u4EC5\u5728\u9700\u8981\u914D\u7F6E\u547D\u4EE4\u8DEF\u5F84\u6216\u624B\u52A8\u6267\u884C\u73AF\u5883\u68C0\u67E5\u65F6\u518D\u5C55\u5F00\u3002","settings.paths":"\u8F6C\u6362\u5668\u8DEF\u5F84","settings.diagnostics":"\u8F6C\u6362\u5668\u547D\u4EE4\u8BCA\u65AD","settings.performance":"\u6027\u80FD\u4E0E\u663E\u793A","settings.mobileSupport":"\u79FB\u52A8\u7AEF\u652F\u6301","settings.knowledgeGeneration":"\u77E5\u8BC6\u751F\u6210","settings.sourceModelFolder":"\u6E90\u6A21\u578B\u6587\u4EF6\u5939","settings.sourceModelFolder.desc":"\u5B58\u653E\u6E90 3D \u6A21\u578B\u7684\u5E93\u6587\u4EF6\u5939\u3002","settings.reportFolder":"\u62A5\u544A\u6587\u4EF6\u5939","settings.reportFolder.desc":"\u4FDD\u5B58\u751F\u6210\u7684\u77E5\u8BC6\u7B14\u8BB0\u7684\u5E93\u6587\u4EF6\u5939\u3002","settings.partFolder":"\u90E8\u4EF6\u7B14\u8BB0\u6587\u4EF6\u5939","settings.partFolder.desc":"\u4FDD\u5B58\u751F\u6210\u7684\u90E8\u4EF6\u7B14\u8BB0\u8349\u7A3F\u7684\u5E93\u6587\u4EF6\u5939\u3002","settings.snapshotFolder":"\u5FEB\u7167\u6587\u4EF6\u5939","settings.snapshotFolder.desc":"\u4FDD\u5B58\u5BFC\u51FA\u5FEB\u7167\u7684\u5E93\u6587\u4EF6\u5939\u3002","settings.autoGenerateKnowledgeNotes":"\u81EA\u52A8\u751F\u6210\u77E5\u8BC6\u7B14\u8BB0","settings.autoGenerateKnowledgeNotes.desc":"\u9884\u7559\u7ED9\u540E\u7EED\u81EA\u52A8\u5316\u6D41\u7A0B\u3002\u5F53\u524D\u8BF7\u901A\u8FC7\u547D\u4EE4\u6216\u5DE5\u4F5C\u53F0\u6309\u94AE\u624B\u52A8\u751F\u6210\u77E5\u8BC6\u7B14\u8BB0\u3002","settings.annotationPreviewMode":"\u6807\u6CE8\u9884\u89C8\u6A21\u5F0F","settings.annotationPreviewMode.desc":"\u9009\u62E9\u6807\u6CE8\u7ED1\u5B9A\u7B14\u8BB0\u5728\u60AC\u6D6E\u9884\u89C8\u548C\u7F16\u8F91\u5668\u4E2D\u7684\u663E\u793A\u65B9\u5F0F\u3002","settings.annotationPreviewMode.plainText":"\u7EAF\u6587\u672C","settings.annotationPreviewMode.markdown":"Markdown","settings.previewRendererRollout":"\u9884\u89C8\u517C\u5BB9\u6A21\u5F0F","settings.previewRendererRollout.desc":"\u63A7\u5236\u5355\u6A21\u578B\u9884\u89C8\uFF08GLB\u3001GLTF\u3001STL\u3001PLY\u3001OBJ\uFF09\u4E2D Three.js \u6E32\u67D3\u8DEF\u5F84\u7684\u542F\u7528\u8303\u56F4\u3002\u53EA\u8981\u51FA\u73B0 pin \u6295\u5F71\u3001\u906E\u6321\u3001\u7F16\u8F91\u6001 pin\u3001\u5FEB\u7167\u6216\u5DE5\u5177\u680F\u884C\u4E3A\u56DE\u9000\uFF0C\u5C31\u5207\u56DE\u201C\u517C\u5BB9\u4F18\u5148\u201D\u3002workbench \u548C 3dgrid \u4E0D\u53D7\u8FD9\u4E2A\u8BBE\u7F6E\u5F71\u54CD\u3002","settings.previewRendererRollout.babylonSafe":"\u517C\u5BB9\u4F18\u5148","settings.previewRendererRollout.readonly":"\u4EC5\u9605\u8BFB\u573A\u666F","settings.previewRendererRollout.direct":"\u9605\u8BFB + \u6587\u4EF6\u89C6\u56FE\uFF08\u63A8\u8350\uFF09","settings.useThreeRenderer":"\u4F7F\u7528 Three.js \u6E32\u67D3\u5668","settings.useThreeRenderer.desc":"\u5728 Three.js\uFF08\u66F4\u5FEB\u3001\u66F4\u8F7B\u91CF\uFF09\u548C Babylon.js\uFF08\u5B8C\u5168\u517C\u5BB9\uFF09\u4E4B\u95F4\u5207\u6362\u5355\u6A21\u578B\u9884\u89C8\u6E32\u67D3\u5668\u3002Three.js \u652F\u6301 GLB/GLTF/STL/PLY/OBJ\u3002\u5DE5\u4F5C\u53F0\u548C 3dgrid \u59CB\u7EC8\u4F7F\u7528 Babylon.js\u3002","settings.experimentalThreeWorkbench":"\u5B9E\u9A8C\u6027 Three \u5DE5\u4F5C\u53F0","settings.experimentalThreeWorkbench.desc":"\u4EC5\u5BF9\u76F4\u8BFB GLB/GLTF \u6587\u4EF6\u5C1D\u8BD5\u4F7F\u7528 Three.js \u5DE5\u4F5C\u53F0\u8DEF\u5F84\u3002\u52A0\u8F7D\u5931\u8D25\u65F6\uFF0C\u6587\u4EF6\u89C6\u56FE\u4F1A\u81EA\u52A8\u56DE\u9000\u5230 Babylon.js\u3002","settings.autoRotateDefault":"\u9ED8\u8BA4\u81EA\u52A8\u65CB\u8F6C","settings.autoRotateDefault.desc":"\u542F\u52A8 3D \u9884\u89C8\u65F6\u9ED8\u8BA4\u5F00\u542F\u81EA\u52A8\u65CB\u8F6C\u3002","settings.snapshotNaming":"\u5FEB\u7167\u547D\u540D","settings.snapshotNaming.desc":"\u5BFC\u51FA\u5FEB\u7167\u6587\u4EF6\u7684\u547D\u540D\u65B9\u5F0F\u3002","settings.snapshotNaming.modelName":"\u6A21\u578B\u540D + \u65F6\u95F4\u6233","settings.snapshotNaming.timestamp":"\u4EC5\u65F6\u95F4\u6233","settings.logLevel":"\u65E5\u5FD7\u7EA7\u522B","settings.logLevel.desc":"\u63A7\u5236\u63D2\u4EF6\u5728\u5F00\u53D1\u8005\u63A7\u5236\u53F0\u4E2D\u7684\u65E5\u5FD7\u8BE6\u7EC6\u7A0B\u5EA6\u3002","settings.language":"\u8BED\u8A00","settings.language.desc":"\u63D2\u4EF6\u8BBE\u7F6E\u754C\u9762\u7684\u663E\u793A\u8BED\u8A00\u3002\u7ACB\u5373\u751F\u6548\u3002","settings.analysisMode":"AI \u8349\u7A3F\u6A21\u5F0F","settings.analysisMode.desc":"\u63A7\u5236\u77E5\u8BC6\u7B14\u8BB0\u751F\u6210\u4FDD\u6301\u672C\u5730\uFF0C\u8FD8\u662F\u989D\u5916\u8BF7\u6C42\u7ECF\u8FC7\u88C1\u526A\u7684\u8FDC\u7A0B\u8349\u7A3F\u3002\u5F53\u524D\u5BA2\u6237\u7AEF\u4F1A\u963B\u6B62\u539F\u59CB\u6A21\u578B\u4E0A\u4F20\u3002","settings.analysisMode.local":"\u4EC5\u672C\u5730\u8BC1\u636E","settings.analysisMode.hybrid":"\u672C\u5730\u8BC1\u636E + \u8FDC\u7A0B\u8349\u7A3F","settings.analysisMode.remote":"\u57FA\u4E8E\u8BC1\u636E\u7684\u8FDC\u7A0B\u8349\u7A3F","settings.serviceBaseUrl":"\u8349\u7A3F\u670D\u52A1 URL","settings.serviceBaseUrl.desc":"\u53EF\u9009\u7684\u8349\u7A3F\u670D\u52A1\u57FA\u7840\u5730\u5740\uFF0C\u670D\u52A1\u9700\u63A5\u6536 POST /draft-note\u3002\u7559\u7A7A\u65F6\u6240\u6709\u8349\u7A3F\u8F93\u5165\u90FD\u4FDD\u7559\u5728\u672C\u5730\u3002","settings.sendGeometrySummaryToRemote":"\u53D1\u9001\u51E0\u4F55\u6458\u8981","settings.sendGeometrySummaryToRemote.desc":"\u5141\u8BB8\u628A\u7ECF\u8FC7\u88C1\u526A\u7684\u7F51\u683C\u6570\u91CF\u3001\u5305\u56F4\u76D2\u3001\u90E8\u4EF6\u5019\u9009\u3001\u6807\u6CE8\u5750\u6807\u548C\u6700\u8FD1\u90E8\u4EF6\u5173\u8054\u52A0\u5165\u8FDC\u7A0B\u8349\u7A3F\u8F93\u5165\u3002","settings.sendPreviewImagesToRemote":"\u53D1\u9001\u9884\u89C8\u56FE\u5F15\u7528","settings.sendPreviewImagesToRemote.desc":"\u5141\u8BB8\u5728\u8FDC\u7A0B\u8349\u7A3F\u8F93\u5165\u4E2D\u5217\u51FA\u751F\u6210\u7684\u9884\u89C8\u56FE\u8DEF\u5F84\u3002\u5F53\u524D\u5BA2\u6237\u7AEF\u4E0D\u4F1A\u4E0A\u4F20\u56FE\u7247\u5B57\u8282\u3002","settings.sendRawModelToRemote":"\u53D1\u9001\u539F\u59CB\u6A21\u578B\u6587\u4EF6","settings.sendRawModelToRemote.desc":"\u9884\u7559\u7ED9\u672A\u6765\u663E\u5F0F\u4E0A\u4F20\u652F\u6301\u3002\u82E5\u624B\u52A8\u5F00\u542F\uFF0C\u8FDC\u7A0B\u8349\u7A3F\u8BF7\u6C42\u4F1A\u88AB\u963B\u6B62\uFF0C\u4E0D\u4F1A\u4E0A\u4F20\u6A21\u578B\u3002","settings.enableCad":"\u542F\u7528 CAD \u8F6C\u6362\u5668 (STEP/IGES/BREP)","settings.enableCad.desc":"\u542F\u7528 STEP/IGES/BREP \u683C\u5F0F\u7684 CAD \u8F6C\u6362\u8DEF\u7EBF\uFF0C\u901A\u8FC7 Python CadQuery (OpenCASCADE)\u3002\u9700\u8981\uFF1Apip install cadquery trimesh","settings.enableObj2gltf":"\u542F\u7528 obj2gltf \u8F6C\u6362\u5668\uFF08\u5B9E\u9A8C\u6027\uFF09","settings.enableObj2gltf.desc":"\u9ED8\u8BA4\u4F7F\u7528 OBJ \u76F4\u63A5\u52A0\u8F7D\u3002\u4EC5\u5728\u9700\u8981\u672C\u5730\u6807\u51C6\u5316 GLB \u8F93\u51FA\u65F6\u542F\u7528\u3002","settings.preferObj2gltf":"OBJ \u4F18\u5148\u4F7F\u7528 obj2gltf","settings.preferObj2gltf.desc":"\u9ED8\u8BA4\u5173\u95ED\u3002\u4EC5\u5728\u9700\u8981\u6807\u51C6\u5316 GLB \u8F93\u51FA\u6216\u76F4\u63A5 OBJ \u52A0\u8F7D\u6548\u679C\u4E0D\u4F73\u65F6\u5F00\u542F\u3002","settings.enableFbx2gltf":"\u542F\u7528 FBX2glTF \u8F6C\u6362\u5668","settings.enableFbx2gltf.desc":"\u542F\u7528 FBX \u6587\u4EF6\u901A\u8FC7 FBX2glTF \u8F6C\u6362\u3002\u9700\u8981\u672C\u5730\u5B89\u88C5 FBX2glTF \u4E8C\u8FDB\u5236\u6587\u4EF6\u3002","settings.enableMesh":"\u542F\u7528\u7F51\u683C\u8F6C\u6362\u5668 (3MF/DAE)","settings.enableMesh.desc":"\u542F\u7528 3MF \u548C DAE (Collada) \u683C\u5F0F\u7684\u8F6C\u6362\u8DEF\u7EBF\uFF0C\u901A\u8FC7 Python trimesh\u3002\u9700\u8981\u5B89\u88C5 Python \u548C trimesh (pip install trimesh numpy networkx pycollada)\u3002","settings.enableSldprt":"\u542F\u7528 SLDPRT \u8F6C\u6362\u5668 (SolidWorks)","settings.enableSldprt.desc":"\u542F\u7528 SolidWorks .sldprt \u6587\u4EF6\u901A\u8FC7 FreeCAD \u8F6C\u6362\u3002\u9700\u8981\u5B89\u88C5 FreeCAD (https://www.freecad.org/downloads.php)\u3002","settings.mobileSupport.desc":"\u5728 iOS\u3001iPadOS \u548C Android \u4E0A\uFF0CGLB\u3001GLTF\u3001STL\u3001OBJ\u3001PLY \u8FD9\u7C7B\u76F4\u8BFB\u683C\u5F0F\u53EF\u7528\u3002\u672C\u5730\u8F6C\u6362\u5668\u8BBE\u7F6E\u548C\u547D\u4EE4\u8BCA\u65AD\u4ECD\u4EC5\u652F\u6301\u684C\u9762\u7AEF\u3002","settings.pythonCmd":"Python \u547D\u4EE4\u8DEF\u5F84\uFF08CAD \u7528\uFF09","settings.pythonCmd.desc":"\u53EF\u9009\u7684 Python \u547D\u4EE4\u8DEF\u5F84\uFF0C\u7528\u4E8E CAD \u8F6C\u6362\u3002Windows \u901A\u5E38\u7528 py\uFF0CmacOS \u548C Linux \u901A\u5E38\u7528 python3\u3002\u8BBE\u7F6E\u540E\u8986\u76D6\u81EA\u52A8\u53D1\u73B0\u548C AI3D_FREECAD_CMD\u3002","settings.freecadCmd":"FreeCAD \u547D\u4EE4\u8DEF\u5F84\uFF08SLDPRT \u7528\uFF09","settings.freecadCmd.desc":"\u53EF\u9009\u7684 FreeCAD \u547D\u4EE4\u8DEF\u5F84\uFF0C\u7528\u4E8E SolidWorks \u6587\u4EF6\u8F6C\u6362\u3002Windows \u901A\u5E38\u7528 FreeCADCmd.exe\uFF0CmacOS \u901A\u5E38\u7528 FreeCADCmd\uFF0CLinux \u901A\u5E38\u7528 freecadcmd\u3002\u8BBE\u7F6E\u540E\u8986\u76D6\u81EA\u52A8\u53D1\u73B0\u548C AI3D_FREECADCMD\u3002","settings.obj2gltfCmd":"obj2gltf \u547D\u4EE4\u8DEF\u5F84","settings.obj2gltfCmd.desc":"\u53EF\u9009\u7684 obj2gltf \u547D\u4EE4\u8DEF\u5F84\u3002Windows \u901A\u5E38\u7528 obj2gltf.cmd\uFF0CmacOS \u548C Linux \u901A\u5E38\u7528 obj2gltf\u3002\u8BBE\u7F6E\u540E\u8986\u76D6\u81EA\u52A8\u53D1\u73B0\u548C AI3D_OBJ2GLTF_CMD\u3002","settings.fbx2gltfCmd":"FBX2glTF \u547D\u4EE4\u8DEF\u5F84","settings.fbx2gltfCmd.desc":"\u53EF\u9009\u7684 FBX2glTF \u547D\u4EE4\u8DEF\u5F84\u3002Windows \u901A\u5E38\u7528 FBX2glTF.exe\uFF0CmacOS \u548C Linux \u901A\u5E38\u7528 FBX2glTF\u3002\u8BBE\u7F6E\u540E\u8986\u76D6\u81EA\u52A8\u53D1\u73B0\u548C AI3D_FBX2GLTF_CMD\u3002","settings.assimpCmd":"Python \u547D\u4EE4\u8DEF\u5F84\uFF083MF/DAE \u7528\uFF09","settings.assimpCmd.desc":"\u53EF\u9009\u7684 Python \u547D\u4EE4\u8DEF\u5F84\uFF0C\u7528\u4E8E 3MF \u548C DAE \u8F6C\u6362\u3002Windows \u901A\u5E38\u7528 py\uFF0CmacOS \u548C Linux \u901A\u5E38\u7528 python3\u3002\u8BBE\u7F6E\u540E\u8986\u76D6\u81EA\u52A8\u53D1\u73B0\u548C AI3D_ASSIMP_CMD\u3002","settings.diagnostics.desc":"\u663E\u793A\u63D2\u4EF6\u5F53\u524D\u5B9E\u9645\u4F7F\u7528\u7684\u53EF\u6267\u884C\u6587\u4EF6\u8DEF\u5F84\uFF0C\u5E76\u4E3A Python \u73AF\u5883\u548C\u8F6C\u6362\u5668\u547D\u4EE4\u6267\u884C\u8F7B\u91CF\u81EA\u68C0\u3002","settings.diagnostics.idle":"\u73AF\u5883\u68C0\u67E5\u9ED8\u8BA4\u5173\u95ED\u3002\u70B9\u51FB\u201C\u7ACB\u5373\u68C0\u67E5\u201D\u540E\u624D\u4F1A\u6267\u884C\u3002","settings.diagnostics.checkNow":"\u7ACB\u5373\u68C0\u67E5","settings.diagnostics.checking":"\u68C0\u67E5\u4E2D...","settings.diagnostics.refreshed":"AI 3D \u8F6C\u6362\u5668\u547D\u4EE4\u8BCA\u65AD\u5DF2\u5237\u65B0\u3002","settings.diagnostics.checkingAvailability":"\u6B63\u5728\u68C0\u67E5\u8F6C\u6362\u5668\u547D\u4EE4\u53EF\u7528\u6027...","settings.diagnostics.available":"\u53EF\u7528","settings.diagnostics.notFound":"\u672A\u627E\u5230","settings.diagnostics.sourceLabel":"\u6765\u6E90","settings.diagnostics.commandLabel":"\u547D\u4EE4","settings.diagnostics.resolvedPathLabel":"\u89E3\u6790\u8DEF\u5F84","settings.diagnostics.selfCheckLabel":"\u81EA\u68C0","settings.diagnostics.selfCheckOk":"\u901A\u8FC7","settings.diagnostics.selfCheckFailed":"\u5931\u8D25","settings.diagnostics.cadPythonCheck":"Python \u5305\uFF08cadquery\u3001trimesh\uFF09","settings.diagnostics.meshPythonCheck":"Python \u5305\uFF08trimesh\u3001numpy\u3001networkx\u3001collada\uFF09","settings.diagnostics.freecadCmdCheck":"FreeCADCmd \u542F\u52A8\u63A2\u6D4B","settings.diagnostics.obj2gltfCheck":"obj2gltf \u542F\u52A8\u63A2\u6D4B","settings.diagnostics.fbx2gltfCheck":"FBX2glTF \u542F\u52A8\u63A2\u6D4B","settings.canvasHeight":"\u9ED8\u8BA4\u753B\u5E03\u9AD8\u5EA6","settings.canvasHeight.desc":"\u5185\u8054 3D \u9884\u89C8\u7684\u9ED8\u8BA4\u9AD8\u5EA6\uFF08\u50CF\u7D20\uFF09\u3002\u8303\u56F4\uFF1A200\u2013800\u3002","settings.autoRotateSpeed":"\u81EA\u52A8\u65CB\u8F6C\u901F\u5EA6","settings.autoRotateSpeed.desc":"\u542F\u7528\u81EA\u52A8\u65CB\u8F6C\u65F6\u7684\u65CB\u8F6C\u901F\u5EA6\u3002\u8303\u56F4\uFF1A0.1\u20132.0\u3002","settings.renderQuality":"\u6E32\u67D3\u8D28\u91CF","settings.renderQuality.desc":"\u66F4\u9AD8\u8D28\u91CF\u4F7F\u7528\u66F4\u591A GPU \u8D44\u6E90\u3002\u5F71\u54CD\u6297\u952F\u9F7F\u548C\u5206\u8FA8\u7387\u3002","settings.renderScale":"\u6E32\u67D3\u7F29\u653E","settings.renderScale.desc":"\u6E32\u67D3\u5206\u8FA8\u7387\u500D\u6570\u30021.0 = \u539F\u59CB\uFF0C0.5 = \u4E00\u534A\uFF0C2.0 = \u53CC\u500D\uFF08\u8D85\u91C7\u6837\uFF09\u3002\u8303\u56F4\uFF1A0.25\u20132.0\u3002","modelLoad.warningTitle":"\u6682\u65F6\u65E0\u6CD5\u9884\u89C8\u6A21\u578B","modelLoad.warningMessage":"{ext} \u6587\u4EF6\u9700\u8981\u5148\u5728\u63D2\u4EF6\u8BBE\u7F6E\u4E2D\u542F\u7528 {converterName} \u8F6C\u6362\u5668\uFF0C\u624D\u80FD\u52A0\u8F7D\u3002","modelLoad.warningHint":"\u8BF7\u5148\u5728\u63D2\u4EF6\u8BBE\u7F6E\u4E2D\u542F\u7528\u5BF9\u5E94\u8F6C\u6362\u5668\uFF0C\u7136\u540E\u91CD\u65B0\u52A0\u8F7D\u5F53\u524D\u6587\u4EF6\u3002","modelLoad.mobileWarningMessage":"{ext} \u6587\u4EF6\u9700\u8981\u672C\u5730\u8F6C\u6362\u5DE5\u5177\uFF0C\u4F46\u8FD9\u4E9B\u5DE5\u5177\u5728 iOS\u3001iPadOS \u548C Android \u4E0A\u4E0D\u53EF\u7528\u3002","modelLoad.mobileWarningHint":"\u8BF7\u5728\u684C\u9762\u7AEF\u6253\u5F00\u6B64\u6587\u4EF6\uFF0C\u6216\u5148\u5C06\u5B83\u8F6C\u6362\u4E3A GLB\u3001GLTF\u3001OBJ\u3001STL \u6216 PLY\u3002","modelLoad.errorTitle":"\u65E0\u6CD5\u663E\u793A\u8FD9\u4E2A\u6A21\u578B","modelLoad.errorMessage":"\u52A0\u8F7D\u5931\u8D25\uFF1A{reason}","modelLoad.errorHint":"\u8BF7\u68C0\u67E5\u6587\u4EF6\u683C\u5F0F\uFF0C\u6216\u6253\u5F00\u5F00\u53D1\u8005\u63A7\u5236\u53F0\u67E5\u770B\u8BE6\u7EC6\u4FE1\u606F\u3002","headingPin.showSingle":"\u663E\u793A\u5173\u8054\u6807\u6CE8","headingPin.showMultiple":"\u663E\u793A\u5173\u8054\u6807\u6CE8","headingPin.linkedTo":"\u5173\u8054\u5230\uFF1A{models}","helper.resetViewLabel":"\u91CD\u7F6E\u89C6\u56FE","helper.resetViewDone":"\u5DF2\u91CD\u7F6E","helper.copyModelInfoLabel":"\u590D\u5236\u6A21\u578B\u4FE1\u606F\u4E3A Markdown","helper.copySelectedPartInfoLabel":"\u590D\u5236\u9009\u4E2D\u90E8\u4EF6\u4FE1\u606F","helper.noSelectedPart":"\u8BF7\u5148\u70B9\u51FB\u4E00\u4E2A\u90E8\u4EF6","helper.copied":"\u5DF2\u590D\u5236","helper.failed":"\u5931\u8D25","helper.toggleWireframeLabel":"\u5207\u6362\u7EBF\u6846\u663E\u793A","helper.wireframeOn":"\u7EBF\u6846","helper.wireframeOff":"\u5B9E\u4F53","helper.toggleAxesLabel":"\u5207\u6362\u65B9\u5411\u5750\u6807\u8F74","helper.axesOn":"\u5750\u6807\u8F74\u5DF2\u5F00\u542F","helper.axesOff":"\u5750\u6807\u8F74\u5DF2\u5173\u95ED","helper.toggleBoundingBoxLabel":"\u5207\u6362\u5305\u56F4\u76D2","helper.boundingBoxOn":"\u5305\u56F4\u76D2\u5DF2\u5F00\u542F","helper.boundingBoxOff":"\u5305\u56F4\u76D2\u5DF2\u5173\u95ED","helper.toggleFocusSelectionLabel":"\u805A\u7126\u9009\u4E2D\u90E8\u4EF6","helper.focusSelectionOn":"\u805A\u7126\u6A21\u5F0F\u5DF2\u5F00\u542F","helper.focusSelectionOff":"\u805A\u7126\u6A21\u5F0F\u5DF2\u5173\u95ED","helper.toggleDisassemblyLabel":"\u5207\u6362\u5206\u89E3\u6A21\u5F0F","helper.disassemblyOn":"\u5206\u89E3\u6A21\u5F0F\u5DF2\u5F00\u542F","helper.disassemblyOff":"\u5206\u89E3\u6A21\u5F0F\u5DF2\u5173\u95ED","helper.resetPartsLabel":"\u91CD\u7F6E\u5206\u89E3\u90E8\u4EF6","helper.partsReset":"\u90E8\u4EF6\u5DF2\u91CD\u7F6E","helper.changeResolutionLabel":"\u5207\u6362\u5206\u8FA8\u7387","helper.resolutionValue":"\u5206\u8FA8\u7387\uFF1A{value}","helper.toggleAnimationLabel":"\u64AD\u653E\u6216\u6682\u505C\u52A8\u753B","helper.playing":"\u64AD\u653E\u4E2D","helper.paused":"\u5DF2\u6682\u505C","helper.removePreviewLabel":"\u79FB\u9664\u9884\u89C8","helper.copySnapshotLabel":"\u590D\u5236\u5FEB\u7167","helper.saveSnapshotLabel":"\u4FDD\u5B58\u5FEB\u7167\u5230\u4ED3\u5E93","helper.saved":"\u5DF2\u4FDD\u5B58","helper.downloadSnapshotLabel":"\u4E0B\u8F7D\u5FEB\u7167","helper.downloaded":"\u5DF2\u4E0B\u8F7D","helper.toggleAnnotationLabel":"\u5207\u6362\u6807\u6CE8\u6A21\u5F0F","helper.toggleAnnotationsVisibilityLabel":"\u663E\u793A\u6216\u9690\u85CF\u6807\u6CE8","helper.annotateOn":"\u6807\u6CE8\u6A21\u5F0F\u5DF2\u5F00\u542F","helper.annotateOff":"\u6807\u6CE8\u6A21\u5F0F\u5DF2\u5173\u95ED","helper.annotationsVisible":"\u6807\u6CE8\u5DF2\u663E\u793A","helper.annotationsHidden":"\u6807\u6CE8\u5DF2\u9690\u85CF","helper.enableInteractionLabel":"\u542F\u7528\u89E6\u63A7\u4EA4\u4E92","helper.disableInteractionLabel":"\u5207\u56DE\u6EDA\u52A8\u6A21\u5F0F","helper.interactionOn":"\u6A21\u578B\u4EA4\u4E92\u5DF2\u5F00\u542F","helper.interactionOff":"\u6EDA\u52A8\u6A21\u5F0F\u5DF2\u5F00\u542F","helper.showMoreActionsLabel":"\u663E\u793A\u66F4\u591A\u64CD\u4F5C","helper.hideMoreActionsLabel":"\u6536\u8D77\u989D\u5916\u64CD\u4F5C","helper.moreActionsShown":"\u5DF2\u5C55\u5F00\u66F4\u591A\u64CD\u4F5C","helper.moreActionsHidden":"\u5DF2\u6536\u8D77\u989D\u5916\u64CD\u4F5C","helper.interactAction":"\u4EA4\u4E92","helper.scrollAction":"\u6EDA\u52A8","workbench.emptyTitle":"\u6682\u65E0\u6A21\u578B","workbench.emptyText":"\u4F7F\u7528\u201C\u5BFC\u5165 3D \u6A21\u578B\u201D\u547D\u4EE4\u52A0\u8F7D GLB\u3001GLTF\u3001STL\u3001OBJ \u6216 PLY \u6587\u4EF6\u3002","workbench.modelTitle":"3D \u6A21\u578B","workbench.studioTitle":"AI \u6A21\u578B\u5DE5\u4F5C\u53F0","workbench.studioTagline":"\u68C0\u67E5\u3001\u6807\u6CE8\uFF0C\u5E76\u628A 3D \u8D44\u4EA7\u6574\u7406\u6210\u53CC\u94FE\u7B14\u8BB0\u3002","workbench.navLabel":"\u5DE5\u4F5C\u53F0\u5206\u533A","workbench.navGallery":"\u753B\u5ECA","workbench.navLibrary":"\u8D44\u6599\u5E93","workbench.navNotebooks":"\u7B14\u8BB0\u672C","workbench.navSettings":"\u8BBE\u7F6E","workbench.sourcesTitle":"\u6A21\u578B\u6765\u6E90","workbench.layersTitle":"\u5BA1\u9605\u5C42","workbench.viewModeTitle":"\u89C6\u56FE\u6A21\u5F0F","workbench.modeMesh":"\u7F51\u683C\u89C6\u56FE","workbench.modeFocus":"\u805A\u7126\u9009\u533A","workbench.modeMeshShort":"\u7F51\u683C","workbench.modeFocusShort":"\u805A\u7126","workbench.previewViewsTitle":"\u9884\u89C8\u89C6\u56FE","workbench.connectionsTitle":"\u77E5\u8BC6\u8FDE\u63A5","workbench.currentModelLabel":"\u5F53\u524D\u6A21\u578B","workbench.noReportYet":"\u8FD8\u6CA1\u6709\u62A5\u544A\u7B14\u8BB0","workbench.noIndexYet":"\u8FD8\u6CA1\u6709\u77E5\u8BC6\u7D22\u5F15\u3002\u8BF7\u5148\u751F\u6210\u77E5\u8BC6\u7B14\u8BB0\u3002","workbench.noModelLoaded":"\u5C1A\u672A\u52A0\u8F7D\u6A21\u578B","workbench.disassemblyTitle":"\u5206\u89E3","workbench.explodeLabel":"\u7206\u70B8","workbench.summaryTitle":"\u6458\u8981","workbench.meshesLabel":"\u7F51\u683C","workbench.splatsLabel":"\u70B9\u4E91","workbench.trianglesLabel":"\u4E09\u89D2\u5F62","workbench.verticesLabel":"\u9876\u70B9","workbench.materialsLabel":"\u6750\u8D28","workbench.boundingSizeLabel":"\u5305\u56F4\u76D2","workbench.centerLabel":"\u4E2D\u5FC3","workbench.selectedPartTitle":"\u5F53\u524D\u9009\u4E2D\u90E8\u4EF6","workbench.partMeshLabel":"\u7F51\u683C","workbench.noSelectedPart":"\u70B9\u51FB\u6A21\u578B\u4E2D\u7684\u90E8\u4EF6\u540E\u4F1A\u663E\u793A\u8BE6\u7EC6\u4FE1\u606F\u3002","workbench.tagsTitle":"\u6807\u7B7E","workbench.noTagsYet":"\u8FD8\u6CA1\u6709\u6807\u7B7E","workbench.addTagPlaceholder":"\u6DFB\u52A0\u6807\u7B7E...","workbench.addTagAction":"\u6DFB\u52A0","workbench.annotationsTitle":"\u6807\u6CE8","workbench.exitAnnotate":"\u9000\u51FA\u6807\u6CE8","workbench.annotate":"\u6807\u6CE8","workbench.annotateHintActive":"\u70B9\u51FB\u6A21\u578B\u6DFB\u52A0\u6807\u7B7E \xB7 \u6309 Esc \u9000\u51FA","workbench.annotateHintActiveMobile":"\u70B9\u6309\u6A21\u578B\u6DFB\u52A0\u6807\u7B7E\u3002\u9700\u8981\u7EE7\u7EED\u9605\u8BFB\u65F6\u5207\u56DE\u201C\u6EDA\u52A8\u201D\u3002","workbench.pinCount":"{count} \u4E2A\u6807\u6CE8","workbench.editAction":"\u7F16\u8F91","workbench.deleteAction":"\u5220\u9664","workbench.resetViewAction":"\u91CD\u7F6E\u89C6\u56FE","workbench.insertInfoAction":"\u63D2\u5165\u4FE1\u606F","workbench.insertGalleryAction":"\u63D2\u5165 Gallery","workbench.insertCompareAction":"\u63D2\u5165\u5BF9\u6BD4","workbench.playAction":"\u64AD\u653E","workbench.pauseAction":"\u6682\u505C","workbench.saveProfileAction":"\u4FDD\u5B58\u914D\u7F6E","workbench.generateNoteAction":"\u751F\u6210\u7B14\u8BB0","workbench.openNoteAction":"\u6253\u5F00\u7B14\u8BB0","workbench.openIndexAction":"\u6253\u5F00\u7D22\u5F15","workbench.recordTitle":"\u6807\u672C\u5361","workbench.recordSubtitle":"\u5F53\u524D\u8D44\u4EA7\u6863\u6848","workbench.notesTitle":"\u5206\u6790\u672D\u8BB0","workbench.whereTitle":"\u5173\u8054\u4F4D\u7F6E","workbench.noteReady":"\u5173\u8054\u7B14\u8BB0\u5DF2\u5C31\u7EEA","workbench.indexReady":"\u77E5\u8BC6\u7D22\u5F15\u5DF2\u5C31\u7EEA","workbench.notePending":"\u5173\u8054\u7B14\u8BB0\u5F85\u751F\u6210","workbench.analysisLabel":"\u5206\u6790","workbench.settingsUnavailable":"\u8BF7\u4ECE Obsidian \u8BBE\u7F6E\u4E2D\u6253\u5F00\u672C\u63D2\u4EF6\u6765\u8C03\u6574\u5DE5\u4F5C\u53F0\u9009\u9879\u3002","workbench.profileSaved":"\u914D\u7F6E\u5DF2\u4FDD\u5B58","workbench.viewReset":"\u89C6\u56FE\u5DF2\u91CD\u7F6E","workbench.infoInserted":"\u6A21\u578B\u4FE1\u606F\u5DF2\u63D2\u5165","workbench.infoCopied":"\u6A21\u578B\u4FE1\u606F\u5DF2\u590D\u5236","workbench.templateInserted":"\u6A21\u677F\u5DF2\u63D2\u5165","workbench.templateCopied":"\u6A21\u677F\u5DF2\u590D\u5236","workbench.mobileHint":"\u79FB\u52A8\u7AEF\u63D0\u793A\uFF1A\u9700\u8981\u64CD\u4F5C\u6A21\u578B\u65F6\u70B9\u201C\u4EA4\u4E92\u201D\uFF0C\u7EE7\u7EED\u9605\u8BFB\u7B14\u8BB0\u65F6\u5207\u56DE\u201C\u6EDA\u52A8\u201D\u3002","workbench.mobileHintInteractive":"\u5F53\u524D\u4E3A\u4EA4\u4E92\u6A21\u5F0F\u3002\u9700\u8981\u7EE7\u7EED\u6EDA\u52A8\u7B14\u8BB0\u65F6\uFF0C\u8BF7\u5207\u56DE\u201C\u6EDA\u52A8\u201D\u3002","directView.mobileHint":"\u79FB\u52A8\u7AEF\u63D0\u793A\uFF1A\u4F7F\u7528\u4E0B\u65B9\u5DE5\u5177\u680F\u91CC\u7684\u201C\u4EA4\u4E92\u201D\u6309\u94AE\uFF0C\u5728\u6A21\u578B\u64CD\u4F5C\u548C\u7B14\u8BB0\u6EDA\u52A8\u4E4B\u95F4\u5207\u6362\u3002","directWorkbench.backendLabel":"\u540E\u7AEF","directWorkbench.routeLabel":"\u8DEF\u7531","directWorkbench.performanceLabel":"\u6027\u80FD","directWorkbench.explodeAxisLabel":"\u7206\u70B8\u8F74\u5411","directWorkbench.explodeResetLabel":"\u91CD\u7F6E","directWorkbench.knowledgeTitle":"\u77E5\u8BC6","workbench.fileNotFound":"\u672A\u627E\u5230\u6587\u4EF6\uFF1A{path}","annotation.selectColor":"\u9009\u62E9\u989C\u8272 {color}","annotation.sectionEmpty":"\u8BE5\u6BB5\u5185\u5BB9\u4E3A\u7A7A\u3002","modal.selectModel":"\u9009\u62E9\u4E00\u4E2A 3D \u6A21\u578B...","main.commandImportModel":"\u5BFC\u5165 3D \u6A21\u578B","main.commandGenerateNote":"\u751F\u6210\u77E5\u8BC6\u7B14\u8BB0","main.commandOpenKnowledgeIndex":"\u6253\u5F00\u77E5\u8BC6\u7D22\u5F15","main.commandClearConversionCache":"\u6E05\u9664\u8F6C\u6362\u7F13\u5B58","main.commandCheckConverters":"\u68C0\u67E5\u8F6C\u6362\u5668","main.converterDiagnosticsMobileUnavailable":"\u8F6C\u6362\u5668\u8BCA\u65AD\u4EC5\u652F\u6301\u684C\u9762\u7AEF\u3002\u5728 iOS\u3001iPadOS \u548C Android \u4E0A\uFF0C\u76F4\u8BFB\u683C\u5F0F\u4ECD\u53EF\u52A0\u8F7D\u3002","codeBlock.noModelPathOrConfig":"\u672A\u6307\u5B9A\u6A21\u578B\u8DEF\u5F84\u6216\u914D\u7F6E\u3002","codeBlock.jsonParseError":"JSON \u89E3\u6790\u9519\u8BEF\uFF1A{error}","codeBlock.jsonParseLine":"\uFF08\u7B2C {line} \u884C\uFF09","codeBlock.noModelsInConfig":"\u914D\u7F6E\u4E2D\u672A\u6307\u5B9A\u6A21\u578B\u3002","codeBlock.unsupportedFormat":"\u4E0D\u652F\u6301\u7684\u683C\u5F0F\uFF1A{ext}\u3002\u652F\u6301\uFF1A{formats}","codeBlock.splatDisabled":"\u5F53\u524D\u6253\u5305\u7248\u672C\u6682\u672A\u542F\u7528 SPLAT \u9884\u89C8\u3002\u540E\u7EED\u4F1A\u4F18\u5148\u6062\u590D\u672C\u5730-only .splat\uFF1B.spz/.sog \u9700\u8981\u672C\u5730\u6253\u5305\u89E3\u7801\u5668\u540E\u518D\u8BC4\u4F30\u3002","codeBlock.noConfigSpecified":"\u672A\u6307\u5B9A\u914D\u7F6E\u3002","codeBlock.noModelsSpecified":"\u672A\u6307\u5B9A\u6A21\u578B\u3002","codeBlock.mobileHint":"\u79FB\u52A8\u7AEF\u63D0\u793A\uFF1A\u9700\u8981\u64CD\u4F5C\u6A21\u578B\u65F6\u70B9\u201C\u4EA4\u4E92\u201D\uFF0C\u7EE7\u7EED\u9605\u8BFB\u7B14\u8BB0\u65F6\u5207\u56DE\u201C\u6EDA\u52A8\u201D\u3002","codeBlock.renderingGrid":"\u6B63\u5728\u6E32\u67D3\u7F51\u683C...","codeBlock.composeRequiresSections":"\u201Ccompose\u201D \u9884\u8BBE\u9700\u8981\u63D0\u4F9B \u201Csections\u201D \u6570\u7EC4\u3002","codeBlock.composeNoValidSections":"Compose\uFF1A\u6CA1\u6709\u6709\u6548\u7684\u5206\u6BB5\u3002","codeBlock.unknownPreset":"\u672A\u77E5\u9884\u8BBE\uFF1A\u201C{preset}\u201D\u3002\u53EF\u7528\uFF1Acompare\u3001showcase\u3001explode\u3001timeline\u3001compose","codeBlock.presetRequiresModels":"\u9884\u8BBE \u201C{preset}\u201D \u9700\u8981 {min}-{max} \u4E2A\u6A21\u578B\uFF0C\u5F53\u524D\u4E3A {count} \u4E2A\u3002","codeBlock.gridFailed":"\u7F51\u683C\u6E32\u67D3\u5931\u8D25\uFF1A{reason}","livePreview.mobileHint":"\u79FB\u52A8\u7AEF\u63D0\u793A\uFF1A\u9700\u8981\u62D6\u52A8\u6A21\u578B\u65F6\u5207\u5230\u201C\u4EA4\u4E92\u201D\uFF0C\u7EE7\u7EED\u9605\u8BFB\u65F6\u5207\u56DE\u201C\u6EDA\u52A8\u201D\u3002","loading.default":"\u52A0\u8F7D\u4E2D...","loading.preparingModel":"\u6B63\u5728\u51C6\u5907\u6A21\u578B...","loading.loadingModel":"\u6B63\u5728\u52A0\u8F7D\u6A21\u578B..."}});function np(n){rN=n;for(let e of jR)e()}function te(n){var e,t,i;return(i=(t=(e=Rj[rN])==null?void 0:e[n])!=null?t:KR[n])!=null?i:n}function nN(n){return jR.add(n),()=>{jR.delete(n)}}function bj(n,e){return n.replace(/\{(\w+)\}/g,(t,i)=>{var r;return(r=e[i])!=null?r:""})}function Cr(n,e){return bj(te(n),e)}var Rj,rN,jR,Pa=C(()=>{"use strict";eN();iN();Rj={en:KR,"zh-CN":tN},rN="en",jR=new Set});function Ij(){if("require"in activeWindow)return activeWindow.require}function wg(){if("process"in activeWindow)return activeWindow.process}function sp(n){let e=Ij();if(!e)return null;try{return e(n)}catch(t){return null}}function Ms(n,e){if(n===null)throw new Error(`${e} is not available in this environment (mobile or web).`);return n}function $n(n,e){return Ms(ap,"node:fs/promises").access(n,e)}function Zs(n){return Ms(ap,"node:fs/promises").readFile(n)}function vd(n,e,t){return Ms(ap,"node:fs/promises").writeFile(n,e,{encoding:t})}function Ed(n,e){return Ms(ap,"node:fs/promises").mkdir(n,e)}function Sd(n,e){return Ms(ap,"node:fs/promises").rm(n,e)}function Gi(...n){return Ms(dl,"node:path").join(...n)}function So(n){return Ms(dl,"node:path").dirname(n)}function To(n,e){return Ms(dl,"node:path").basename(n,e)}function Qs(n){return Ms(dl,"node:path").extname(n)}function qR(n){return Ms(dl,"node:path").normalize(n)}function Bn(n){return Ms(dl,"node:path").isAbsolute(n)}function Js(n,e,t,i){Ms(Mj,"node:child_process").execFile(n,e,t,i)}function Td(){return Ms(Cj,"node:os").tmpdir()}var ap,gd,dl,Mj,Cj,sN,es,aN,lN,oN,cN,ir=C(()=>{"use strict";ap=sp("node:fs/promises"),gd=sp("node:fs"),dl=sp("node:path"),Mj=sp("node:child_process"),Cj=sp("node:os");es=(sN=gd==null?void 0:gd.constants.F_OK)!=null?sN:0,lN=(aN=gd==null?void 0:gd.constants.X_OK)!=null?aN:0;cN=(oN=dl==null?void 0:dl.delimiter)!=null?oN:":"});function ZR(n){return n.replace(/\\/g,"/")}function Bg(n){let e=ZR(n),t=[];for(let i of e.split("/"))if(!(!i||i===".")){if(i===".."){t.pop();continue}t.push(i)}return t.join("/")}function fN(n){try{return decodeURIComponent(n)}catch(e){return n}}function Cs(n,e){var r;let t=fN((r=e.split(/[?#]/,1)[0])!=null?r:e),i=Bg(t);return n?Bg(`${n}/${i}`):i}function op(n){let e=ZR(n).replace(/\/+$/,""),t=e.lastIndexOf("/");return t>0?e.slice(0,t):""}function $s(n){let e=ZR(n).replace(/\/+$/,""),t=e.lastIndexOf("/");return t>=0?e.slice(t+1):e}function Xr(n){return $s(n).replace(/\.[^.]+$/,"")}async function yj(n,e){let t=Bg(e);if(!t)return null;let i=t.split("/"),r="",s=n.vault.getRoot().children;for(let a of i){let o=s.find(c=>c.name===a),l=o!=null?o:s.find(c=>c.name.toLowerCase()===a.toLowerCase());if(!l)return null;if(r=r?`${r}/${l.name}`:l.name,l instanceof Ad.TFile)return r;if(!(l instanceof Ad.TFolder))return null;s=l.children}return null}function Pj(n){return Uint8Array.from(n).buffer}function Dj(n){let e=n.vault.adapter;return typeof e.getBasePath=="function"?e.getBasePath():typeof e.basePath=="string"&&e.basePath.length>0?e.basePath:null}function xd(n,e){var r,s;let t=n.vault.getAbstractFileByPath(e);if(t)return t.path;let i=(s=(r=n.metadataCache)==null?void 0:r.getFirstLinkpathDest)==null?void 0:s.call(r,e,"");return i?i.path:null}function Kf(n,e){if(Bn(e))return qR(e);let t=Dj(n);return t?qR(Gi(t,e)):null}async function Da(n,e){if(Bn(e)){let r=await Zs(e);return Pj(r)}let t=Bg(fN(e)),i=n.vault.getAbstractFileByPath(t);if(!(i instanceof Ad.TFile)){let r=await yj(n,t);if(r){let s=n.vault.getAbstractFileByPath(r);if(s instanceof Ad.TFile)return n.vault.readBinary(s)}throw new Error(`File not found: ${t}`)}return n.vault.readBinary(i)}var Ad,ea=C(()=>{"use strict";Ad=require("obsidian");ir();ir()});function Zt(n){return{x:n.x,y:n.y,z:n.z}}function Yr(n){return{x:n.x,y:n.y,z:n.z}}function Rd(n,e){return{x:n.x-e.x,y:n.y-e.y,z:n.z-e.z}}function lp(n,e){return{x:n.x*e,y:n.y*e,z:n.z*e}}function uN(n,e){let t=Rd(n,e);return Math.hypot(t.x,t.y,t.z)}function QR(n){let e=Math.hypot(n.x,n.y,n.z);return e<=Number.EPSILON?null:lp(n,1/e)}function jf(n,e){return{x:n.x+e.x,y:n.y+e.y,z:n.z+e.z}}function hN(n,e){return n.x*e.x+n.y*e.y+n.z*e.z}function mN(n,e,t){return{x:e==="x"?n.x+t:n.x,y:e==="y"?n.y+t:n.y,z:e==="z"?n.z+t:n.z}}function pN(n){return Math.max(n*.01,.01)}function bc(n,e,t=pN(e)){return n{"use strict"});function Uj(){return`pin-${Date.now()}-${Nj++}`}function vN(n){return Yr(n)}function Vj(n,e,t){return n.lefte.left-t&&n.tope.top-t}var cp,Id,Nj,JR,Fj,wj,_N,gN,Bj,Md,Mc,Wg=C(()=>{"use strict";cp=require("obsidian");Pa();ea();ys();Id=["#4a9eff","#ff6b6b","#51cf66","#ffd43b","#845ef7","#ff922b","#22b8cf","#f06595","#94d82d","#ffa8a8"],Nj=1,JR=4,Fj=2,wj=6,_N=6,gN=72,Bj=80;Md=class Md{constructor(e,t,i,r,s,a,o,l={}){this.provider=e;this.hostEl=t;this.mode=i;this.onChange=s;this.noteReader=a;this.headingSearch=o;this.pinEls=new Map;this.observer=null;this.resizeObs=null;this.annotations=[];this.editorEl=null;this.disposeCallbacks=[];this.frameCount=0;this.lastCamState="";this.idleFrames=0;this.cameraIdle=!1;this.movingOcclusionCursor=0;this.hoverPopover=null;this.hoverTimeout=null;this.hoverRequestId=0;this._highlightHandler=null;this._pulseTimeout=null;this._headingDropdown=null;this._headingDebounce=null;this._selectedHeading=null;this.previewRenderRoot=new cp.Component;this.previewRenderChildren=new WeakMap;var c;this.previewApp=l.app,this.previewMode=(c=l.previewMode)!=null?c:"plain-text",this.previewRenderRoot.load(),this.overlay=this.hostEl.createDiv({cls:"ai3d-annotation-overlay"}),this.setAnnotations(r),this._highlightHandler=f=>{let h=f.detail,d=h==null?void 0:h.pinId;d&&this.pulsePin(d)},activeDocument.addEventListener("ai3d-pin-highlight",this._highlightHandler),this.disposeCallbacks.push(()=>activeDocument.removeEventListener("ai3d-pin-highlight",this._highlightHandler)),this.disposeCallbacks.push(()=>this.previewRenderRoot.unload()),this.startProjectionLoop()}setAnnotations(e){for(let[,t]of this.pinEls)t.el.remove();this.pinEls.clear(),this.annotations=[...e];for(let t of e)this.createPinElement(t);this.updateProjections()}addPin(e,t,i){var s;let r={id:Uj(),position:[e.x,e.y,e.z],label:t,color:i!=null?i:Id[this.annotations.length%Id.length],createdAt:new Date().toISOString()};return this.annotations.push(r),this.createPinElement(r),this.updateProjections(),(s=this.onChange)==null||s.call(this,this.annotations),r}removePin(e){var i;let t=this.pinEls.get(e);t&&(t.el.remove(),this.pinEls.delete(e)),this.annotations=this.annotations.filter(r=>r.id!==e),(i=this.onChange)==null||i.call(this,this.annotations)}updatePin(e,t){var s;let i=this.annotations.find(a=>a.id===e);if(!i)return;Object.assign(i,t);let r=this.pinEls.get(e);if(r){t.position&&(r.worldPos={x:t.position[0],y:t.position[1],z:t.position[2]});let a=r.el.querySelector(".ai3d-pin-label");a&&t.label!==void 0&&(a.textContent=t.label);let o=r.el.querySelector(".ai3d-pin-dot");o&&t.color!==void 0&&o.style.setProperty("--pin-color",t.color)}this.updateProjections(),(s=this.onChange)==null||s.call(this,this.annotations)}showEditor(e,t,i){this.showEditorInternal(e,t,i)}editPin(e){let t=this.annotations.find(o=>o.id===e);if(!t)return;let i=this.pinEls.get(e);if(!i)return;let r=i.el.getBoundingClientRect(),s=r.left+r.width/2,a=r.top;this.showEditorInternal(s,a,vN(i.worldPos),t)}getPinPosition(e){let t=this.pinEls.get(e);return t?vN(t.worldPos):null}getAnnotations(){return this.annotations}showEditorInternal(e,t,i,r){var O,V;this.hideEditor(),this._selectedHeading=null;let s=this.overlay.createDiv({cls:"ai3d-annotation-editor"}),a=s.createDiv({cls:"ai3d-editor-input-wrap"}),o=a.createEl("input",{cls:"ai3d-annotation-editor-input"});o.type="text",o.placeholder=this.headingSearch?"Label or search heading...":"Label...",r&&(o.value=r.label);let l=a.createSpan({cls:"ai3d-editor-binding-tag is-hidden"}),c=l.createEl("button",{cls:"ai3d-editor-binding-clear"});c.textContent="\xD7",c.addEventListener("click",N=>{N.stopPropagation(),this._selectedHeading=null,l.classList.add("is-hidden"),f.classList.add("is-hidden"),f.textContent="",o.value="",o.focus()});let f=s.createDiv({cls:"ai3d-editor-content-preview is-hidden"}),h=s.createDiv({cls:"ai3d-heading-dropdown is-hidden"});this._headingDropdown=h;let d=-1,u=[],m=N=>{let w=h.querySelectorAll(".ai3d-heading-dropdown-item");w.forEach(U=>U.classList.remove("active")),d=N,N>=0&&N{var G;this._selectedHeading=N,o.value=N.heading;let w=Xr(N.notePath);(G=l.querySelector(".ai3d-editor-binding-text"))==null||G.remove();let U=l.createSpan({cls:"ai3d-editor-binding-text"});U.textContent=`\u{1F4C4} ${w}`,l.classList.remove("is-hidden"),p(),o.focus(),this.loadContentPreview(f,N.notePath,N.heading)},p=()=>{h.classList.add("is-hidden"),h.replaceChildren(),d=-1},g=N=>{if(h.replaceChildren(),d=-1,u=N,N.length===0){h.classList.add("is-hidden");return}for(let w=0;w{Q.preventDefault(),Q.stopPropagation(),_(U)}),G.addEventListener("mouseenter",()=>m(w))}h.classList.remove("is-hidden")};o.addEventListener("input",()=>{if(!this.headingSearch)return;this._headingDebounce&&window.clearTimeout(this._headingDebounce);let N=o.value.trim();if(N.length<1){p();return}this._headingDebounce=window.setTimeout(()=>{let w=this.headingSearch(N);g(w)},150)}),o.addEventListener("keydown",N=>{if(h.classList.contains("is-hidden")){N.key==="Enter"?(N.preventDefault(),R.click()):N.key==="Escape"&&(N.preventDefault(),this.hideEditor());return}let w=h.querySelectorAll(".ai3d-heading-dropdown-item");N.key==="ArrowDown"?(N.preventDefault(),m(Math.min(d+1,w.length-1))):N.key==="ArrowUp"?(N.preventDefault(),m(Math.max(d-1,0))):N.key==="Enter"?(N.preventDefault(),d>=0&&d{window.setTimeout(p,150)});let v=s.createDiv({cls:"ai3d-annotation-editor-colors"}),x=(O=r==null?void 0:r.color)==null?void 0:O.trim(),A=x||Id[0],E=x&&!Id.includes(x)?[x,...Id]:Id;for(let N of E){let w=v.createEl("button",{cls:"ai3d-pin-color-swatch"});w.type="button",w.title=N,w.setAttribute("aria-label",Cr("annotation.selectColor",{color:N})),w.style.setProperty("--swatch-color",N),w.style.backgroundColor=N,N===A&&w.classList.add("is-selected"),w.addEventListener("click",U=>{U.stopPropagation(),A=N,v.querySelectorAll(".ai3d-pin-color-swatch").forEach(G=>G.classList.remove("is-selected")),w.classList.add("is-selected")})}let T=s.createDiv({cls:"ai3d-annotation-editor-actions"});if(r){let N=T.createEl("button",{cls:"ai3d-annotation-editor-btn ai3d-annotation-editor-delete"});N.textContent="Delete",N.addEventListener("click",w=>{w.stopPropagation(),this.removePin(r.id),this.hideEditor()})}let R=T.createEl("button",{cls:"ai3d-annotation-editor-btn ai3d-annotation-editor-confirm"});R.textContent=r?"Save":"OK",R.addEventListener("click",N=>{N.stopPropagation();let w=o.value.trim()||"Pin",U=this._selectedHeading;if(r){let G={label:w,color:A};U&&(G.notePath=U.notePath,G.headingRef=U.heading,G.headingLevel=U.level),this.updatePin(r.id,G)}else{let G=this.addPin(i,w,A);U&&this.updatePin(G.id,{notePath:U.notePath,headingRef:U.heading,headingLevel:U.level})}this.hideEditor()});let I=T.createEl("button",{cls:"ai3d-annotation-editor-btn ai3d-annotation-editor-cancel"});I.textContent="Cancel",I.addEventListener("click",N=>{N.stopPropagation(),this.hideEditor()});let y=this.overlay.getBoundingClientRect(),M=e-y.left,D=t-y.top;if(s.style.setProperty("--editor-left",`${Math.max(0,Math.min(M,y.width-220))}px`),s.style.setProperty("--editor-top",`${Math.max(0,Math.min(D-10,y.height-160))}px`),this.editorEl=s,r!=null&&r.notePath&&(r!=null&&r.headingRef)){let N=Xr(r.notePath),w=l.createSpan({cls:"ai3d-editor-binding-text"});w.textContent=`\u{1F4C4} ${N}`,l.classList.remove("is-hidden"),this._selectedHeading={notePath:r.notePath,heading:r.headingRef,level:(V=r.headingLevel)!=null?V:2},this.loadContentPreview(f,r.notePath,r.headingRef)}window.requestAnimationFrame(()=>o.focus()),s.addEventListener("pointerdown",N=>N.stopPropagation()),s.addEventListener("mousedown",N=>N.stopPropagation())}hideEditor(){if(this._headingDebounce&&(window.clearTimeout(this._headingDebounce),this._headingDebounce=null),this._headingDropdown=null,this._selectedHeading=null,this.editorEl){let e=this.editorEl.querySelector(".ai3d-editor-content-preview");e&&this.clearRenderedPreview(e),this.editorEl.remove(),this.editorEl=null}}async loadContentPreview(e,t,i){if(!this.noteReader)return;this.clearRenderedPreview(e),e.classList.add("is-hidden");let r=await this.noteReader(t,i);if(!r){e.textContent=te("annotation.sectionEmpty"),e.className="ai3d-editor-content-preview ai3d-editor-content-preview--empty",e.classList.remove("is-hidden");return}await this.renderPreviewContent(e,r,t,"editor")}async showHoverPopover(e,t,i){if(!this.noteReader||!i.notePath||!i.headingRef)return;this.hideHoverPopover();let r=await this.noteReader(i.notePath,i.headingRef);if(!r||e!==this.hoverRequestId||!t.isConnected||!this.hostEl.isConnected)return;let s=createDiv({cls:"ai3d-pin-popover"}),a=s.createDiv({cls:"ai3d-pin-popover-title"});a.textContent=i.headingRef;let o=s.createDiv({cls:"ai3d-pin-popover-body"});if(await this.renderPreviewContent(o,r,i.notePath,"popover"),e!==this.hoverRequestId||!t.isConnected||!this.hostEl.isConnected){this.clearRenderedPreview(o);return}let l=t.getBoundingClientRect();s.style.setProperty("--popover-left",`${l.left+l.width/2}px`),s.style.setProperty("--popover-top",`${l.bottom+4}px`),activeDocument.body.appendChild(s),this.hoverPopover=s}hideHoverPopover(){if(this.hoverTimeout&&(window.clearTimeout(this.hoverTimeout),this.hoverTimeout=null),this.hoverPopover){let e=this.hoverPopover.querySelector(".ai3d-pin-popover-body");e&&this.clearRenderedPreview(e),this.hoverPopover.remove(),this.hoverPopover=null}}clearRenderedPreview(e){let t=this.previewRenderChildren.get(e);t&&(this.previewRenderRoot.removeChild(t),this.previewRenderChildren.delete(e)),e.replaceChildren()}async renderPreviewContent(e,t,i,r){let s=this.previewMode==="markdown"&&!!this.previewApp,a=r==="editor";if(!s){let l=a&&t.length>300?t.slice(0,300)+"...":t;e.textContent=l,e.className=a?"ai3d-editor-content-preview":"ai3d-pin-popover-body",a&&e.classList.remove("is-hidden");return}e.className=a?"ai3d-editor-content-preview ai3d-editor-content-preview--markdown markdown-rendered":"ai3d-pin-popover-body ai3d-pin-popover-body--markdown markdown-rendered",a&&e.classList.remove("is-hidden");let o=this.previewRenderRoot.addChild(new cp.Component);this.previewRenderChildren.set(e,o);try{await cp.MarkdownRenderer.render(this.previewApp,t,e,i,o)}catch(l){this.previewRenderRoot.removeChild(o),this.previewRenderChildren.delete(e),e.textContent=a&&t.length>300?t.slice(0,300)+"...":t,e.className=a?"ai3d-editor-content-preview":"ai3d-pin-popover-body",a&&e.classList.remove("is-hidden"),console.warn("[AI3D] Annotation markdown preview fallback:",l)}}pulsePin(e){let t=this.pinEls.get(e);t&&(this._pulseTimeout&&(window.clearTimeout(this._pulseTimeout),this._pulseTimeout=null),t.el.classList.remove("ai3d-pin-pulse"),t.el.offsetWidth,t.el.classList.add("ai3d-pin-pulse"),this._pulseTimeout=window.setTimeout(()=>{t.el.classList.remove("ai3d-pin-pulse"),this._pulseTimeout=null},1200))}destroy(){var e,t,i;this.hoverRequestId++,this.hideHoverPopover(),this._pulseTimeout&&(window.clearTimeout(this._pulseTimeout),this._pulseTimeout=null),this._headingDebounce&&(window.clearTimeout(this._headingDebounce),this._headingDebounce=null),this._headingDropdown=null,this._selectedHeading=null,(e=this.observer)==null||e.remove(),this.observer=null,(t=this.resizeObs)==null||t.disconnect(),this.resizeObs=null;for(let r of this.disposeCallbacks)r();this.disposeCallbacks=[],this.overlay.remove(),this.pinEls.clear(),(i=this.editorEl)==null||i.remove(),this.editorEl=null}createPinElement(e){let t=this.overlay.createDiv({cls:"ai3d-annotation-pin"});t.dataset.pinId=e.id,t.createDiv({cls:"ai3d-pin-dot"}).style.setProperty("--pin-color",e.color);let r=t.createSpan({cls:"ai3d-pin-label"});if(r.textContent=e.label,this.mode==="edit"){let s=t.createEl("button",{cls:"ai3d-pin-delete"});s.textContent="\xD7",s.addEventListener("click",a=>{a.stopPropagation(),this.removePin(e.id)}),t.addEventListener("click",a=>{a.target.closest(".ai3d-pin-delete")||(a.stopPropagation(),this.editPin(e.id))})}t.addEventListener("pointerdown",s=>s.stopPropagation()),t.addEventListener("wheel",s=>{s.preventDefault(),s.stopPropagation(),this.provider.canvas.dispatchEvent(new WheelEvent("wheel",{bubbles:!0,cancelable:!0,clientX:s.clientX,clientY:s.clientY,ctrlKey:s.ctrlKey,deltaMode:s.deltaMode,deltaX:s.deltaX,deltaY:s.deltaY,deltaZ:s.deltaZ,metaKey:s.metaKey,shiftKey:s.shiftKey}))},{passive:!1}),e.notePath&&e.headingRef&&this.noteReader&&(t.addEventListener("mouseenter",()=>{this.hoverTimeout&&window.clearTimeout(this.hoverTimeout);let s=++this.hoverRequestId;this.hoverTimeout=window.setTimeout(()=>{this.hoverTimeout=null,s===this.hoverRequestId&&this.showHoverPopover(s,t,e)},300)}),t.addEventListener("mouseleave",()=>{this.hoverTimeout&&(window.clearTimeout(this.hoverTimeout),this.hoverTimeout=null),this.hoverRequestId++,this.hideHoverPopover()})),this.pinEls.set(e.id,{el:t,worldPos:{x:e.position[0],y:e.position[1],z:e.position[2]}})}startProjectionLoop(){this.observer=this.provider.observeRender(()=>this.updateProjections()),this.resizeObs=new ResizeObserver(()=>this.updateProjections()),this.resizeObs.observe(this.provider.canvas)}updateProjections(){if(this.pinEls.size===0)return;let{canvas:e}=this.provider;if(!this.hostEl.isConnected||!e.isConnected||e.clientWidth===0||e.clientHeight===0)return;let t=this.provider.getCameraStateKey();t===this.lastCamState?this.idleFrames++:(this.idleFrames=0,this.cameraIdle=!1),this.lastCamState=t,this.idleFrames>=Md.IDLE_THRESHOLD&&!this.cameraIdle&&(this.cameraIdle=!0),this.frameCount++;let i=this.cameraIdle?1:this.pinEls.size>=12?3:2;if(!this.cameraIdle&&this.frameCount%i!==0)return;let r=Array.from(this.pinEls.values()),s=this.cameraIdle?this.frameCount%wj===0:this.frameCount%Fj===0,a=this.cameraIdle||r.length<=JR,o=a?0:this.movingOcclusionCursor%r.length,l=o+JR,c=Md._scratchProjection,f=[];for(let h=0;h1||c.depth<0)this.hidePin(d.el);else{d.el.style.setProperty("--pin-left",`${c.screenX}px`),d.el.style.setProperty("--pin-top",`${c.screenY}px`),this.updatePinPriority(d.el,c.depth),f.push({el:d.el,screenX:c.screenX,screenY:c.screenY,depth:c.depth});let u=a||h>=o&&hr.length&&h0&&(this.movingOcclusionCursor=(o+JR)%r.length),this.applyLabelAvoidance(f)}updatePinPriority(e,t){let i=Math.max(0,Math.min(1,1-t)),r=this.cameraIdle?0:160,s=e.classList.contains("ai3d-pin-occluded")?80:0;e.style.zIndex=String(100+r+Math.round(i*120)-s)}applyLabelAvoidance(e){if(e.length===0)return;if(e.length>Bj){for(let r of e)r.el.style.removeProperty("--pin-offset-y");return}let t=[],i=e.filter(r=>!r.el.classList.contains("ai3d-pin-hidden")).sort((r,s)=>r.depth-s.depth);for(let r of i){let s=0;r.el.setCssProps({"--pin-offset-y":"0px"});let a=r.el.getBoundingClientRect();for(let o of t){if(!Vj(a,o,_N))continue;let l=r.screenY>=o.top+o.height/2?1:-1;s=Math.max(-gN,Math.min(gN,s+l*(o.height+_N))),r.el.setCssProps({"--pin-offset-y":`${s}px`}),a=r.el.getBoundingClientRect()}t.push(a)}}hidePin(e){e.classList.remove("ai3d-pin-occluded"),e.classList.add("ai3d-pin-hidden")}showPin(e){e.classList.remove("ai3d-pin-hidden")}};Md.IDLE_THRESHOLD=15,Md._scratchProjection={screenX:0,screenY:0,depth:0};Mc=Md});function kj(n){return n!=null?n:SN}function Hg(n){var c;let e=n.ext.trim().toLowerCase(),t=(c=n.annotationMode)!=null?c:"none",i=!!n.allowEditModeOnThree,r=!!n.allowWorkbenchFeaturesOnThree,s=!!n.requireWorkbenchFeatures,a=kj(n.rendererRollout);if(!(n.useThreeRenderer!==!1))return{backend:"babylon",ext:e,annotationMode:t,requireWorkbenchFeatures:s,rendererRollout:a,reason:"useThreeRenderer=false"};if(EN.has(e)&&(!s||r)){if(s&&!Gj.has(e))return{backend:"babylon",ext:e,annotationMode:t,requireWorkbenchFeatures:s,rendererRollout:a,reason:`workbench experimental Three supports GLB/GLTF only, ext=${e}`};if(t==="edit"&&a!=="three-direct-glb")return{backend:"babylon",ext:e,annotationMode:t,requireWorkbenchFeatures:s,rendererRollout:a,reason:`annotationMode=edit, rendererRollout=${a}`};if(a==="babylon-safe")return{backend:"babylon",ext:e,annotationMode:t,requireWorkbenchFeatures:s,rendererRollout:a,reason:`rendererRollout=${a}`};if(t==="edit"&&!i)return{backend:"babylon",ext:e,annotationMode:t,requireWorkbenchFeatures:s,rendererRollout:a,reason:"annotationMode=edit, allowEditModeOnThree=false"};let f=s?`${e} workbench preview`:t==="edit"?`${e} direct view edit preview`:t==="readonly"?`${e} preview with readonly annotations`:`simple ${e} preview`;return{backend:"three",ext:e,annotationMode:t,requireWorkbenchFeatures:s,rendererRollout:a,reason:f}}let l=[];return EN.has(e)||l.push(`ext=${e}`),t!=="none"&&l.push(`annotationMode=${t}`),t==="edit"&&!i&&l.push("allowEditModeOnThree=false"),s&&l.push("requireWorkbenchFeatures=true"),a!==SN&&l.push(`rendererRollout=${a}`),{backend:"babylon",ext:e,annotationMode:t,requireWorkbenchFeatures:s,rendererRollout:a,reason:l.join(", ")||"fallback route"}}function TN(){return{backend:"babylon",reason:"grid previews remain on the Babylon grid renderer"}}var SN,EN,Gj,$R=C(()=>{"use strict";SN="three-direct-glb",EN=new Set(["glb","gltf","stl","ply","obj"]),Gj=new Set(["glb","gltf"])});function Wj(n){for(let e=n.length-1;e>=0;--e)if(n[e]>=65535)return!0;return!1}function Hj(n){return ArrayBuffer.isView(n)&&!(n instanceof DataView)}function Xd(n){return document.createElementNS("http://www.w3.org/1999/xhtml",n)}function kF(){let n=Xd("canvas");return n.style.display="block",n}function Ap(...n){let e="THREE."+n.shift();Yd?Yd("log",e,...n):console.log(e,...n)}function WF(n){let e=n[0];if(typeof e=="string"&&e.startsWith("TSL:")){let t=n[1];t&&t.isStackTrace?n[0]+=" "+t.getLocation():n[1]='Stack trace not available. Enable "THREE.Node.captureStackTrace" to capture stack traces.'}return n}function Ct(...n){n=WF(n);let e="THREE."+n.shift();if(Yd)Yd("warn",e,...n);else{let t=n[0];t&&t.isStackTrace?console.warn(t.getError(e)):console.warn(e,...n)}}function Gt(...n){n=WF(n);let e="THREE."+n.shift();if(Yd)Yd("error",e,...n);else{let t=n[0];t&&t.isStackTrace?console.error(t.getError(e)):console.error(e,...n)}}function Cv(...n){let e=n.join(" ");e in AN||(AN[e]=!0,Ct(...n))}function HF(n,e,t){return new Promise(function(i,r){function s(){switch(n.clientWaitSync(e,n.SYNC_FLUSH_COMMANDS_BIT,0)){case n.WAIT_FAILED:r();break;case n.TIMEOUT_EXPIRED:setTimeout(s,t);break;default:i()}}setTimeout(s,t)})}function Ba(){let n=Math.random()*4294967295|0,e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,i=Math.random()*4294967295|0;return(_n[n&255]+_n[n>>8&255]+_n[n>>16&255]+_n[n>>24&255]+"-"+_n[e&255]+_n[e>>8&255]+"-"+_n[e>>16&15|64]+_n[e>>24&255]+"-"+_n[t&63|128]+_n[t>>8&255]+"-"+_n[t>>16&255]+_n[t>>24&255]+_n[i&255]+_n[i>>8&255]+_n[i>>16&255]+_n[i>>24&255]).toLowerCase()}function mi(n,e,t){return Math.max(e,Math.min(t,n))}function rI(n,e){return(n%e+e)%e}function zj(n,e,t,i,r){return i+(n-e)*(r-i)/(t-e)}function Xj(n,e,t){return n!==e?(t-n)/(e-n):0}function Ep(n,e,t){return(1-t)*n+t*e}function Yj(n,e,t,i){return Ep(n,e,1-Math.exp(-t*i))}function Kj(n,e=1){return e-Math.abs(rI(n,e*2)-e)}function jj(n,e,t){return n<=e?0:n>=t?1:(n=(n-e)/(t-e),n*n*(3-2*n))}function qj(n,e,t){return n<=e?0:n>=t?1:(n=(n-e)/(t-e),n*n*n*(n*(n*6-15)+10))}function Zj(n,e){return n+Math.floor(Math.random()*(e-n+1))}function Qj(n,e){return n+Math.random()*(e-n)}function Jj(n){return n*(.5-Math.random())}function $j(n){n!==void 0&&(xN=n);let e=xN+=1831565813;return e=Math.imul(e^e>>>15,e|1),e^=e+Math.imul(e^e>>>7,e|61),((e^e>>>14)>>>0)/4294967296}function eq(n){return n*vp}function tq(n){return n*ah}function iq(n){return(n&n-1)===0&&n!==0}function rq(n){return Math.pow(2,Math.ceil(Math.log(n)/Math.LN2))}function nq(n){return Math.pow(2,Math.floor(Math.log(n)/Math.LN2))}function sq(n,e,t,i,r){let s=Math.cos,a=Math.sin,o=s(t/2),l=a(t/2),c=s((e+i)/2),f=a((e+i)/2),h=s((e-i)/2),d=a((e-i)/2),u=s((i-e)/2),m=a((i-e)/2);switch(r){case"XYX":n.set(o*f,l*h,l*d,o*c);break;case"YZY":n.set(l*d,o*f,l*h,o*c);break;case"ZXZ":n.set(l*h,l*d,o*f,o*c);break;case"XZX":n.set(o*f,l*m,l*u,o*c);break;case"YXY":n.set(l*u,o*f,l*m,o*c);break;case"ZYZ":n.set(l*m,l*u,o*f,o*c);break;default:Ct("MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+r)}}function Fa(n,e){switch(e.constructor){case Float32Array:return n;case Uint32Array:return n/4294967295;case Uint16Array:return n/65535;case Uint8Array:return n/255;case Int32Array:return Math.max(n/2147483647,-1);case Int16Array:return Math.max(n/32767,-1);case Int8Array:return Math.max(n/127,-1);default:throw new Error("Invalid component type.")}}function Wi(n,e){switch(e.constructor){case Float32Array:return n;case Uint32Array:return Math.round(n*4294967295);case Uint16Array:return Math.round(n*65535);case Uint8Array:return Math.round(n*255);case Int32Array:return Math.round(n*2147483647);case Int16Array:return Math.round(n*32767);case Int8Array:return Math.round(n*127);default:throw new Error("Invalid component type.")}}function aq(){let n={enabled:!0,workingColorSpace:Vn,spaces:{},convert:function(r,s,a){return this.enabled===!1||s===a||!s||!a||(this.spaces[s].transfer===ki&&(r.r=El(r.r),r.g=El(r.g),r.b=El(r.b)),this.spaces[s].primaries!==this.spaces[a].primaries&&(r.applyMatrix3(this.spaces[s].toXYZ),r.applyMatrix3(this.spaces[a].fromXYZ)),this.spaces[a].transfer===ki&&(r.r=Wd(r.r),r.g=Wd(r.g),r.b=Wd(r.b))),r},workingToColorSpace:function(r,s){return this.convert(r,this.workingColorSpace,s)},colorSpaceToWorking:function(r,s){return this.convert(r,s,this.workingColorSpace)},getPrimaries:function(r){return this.spaces[r].primaries},getTransfer:function(r){return r===bl?Tp:this.spaces[r].transfer},getToneMappingMode:function(r){return this.spaces[r].outputColorSpaceConfig.toneMappingMode||"standard"},getLuminanceCoefficients:function(r,s=this.workingColorSpace){return r.fromArray(this.spaces[s].luminanceCoefficients)},define:function(r){Object.assign(this.spaces,r)},_getMatrix:function(r,s,a){return r.copy(this.spaces[s].toXYZ).multiply(this.spaces[a].fromXYZ)},_getDrawingBufferColorSpace:function(r){return this.spaces[r].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(r=this.workingColorSpace){return this.spaces[r].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(r,s){return Cv("ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),n.workingToColorSpace(r,s)},toWorkingColorSpace:function(r,s){return Cv("ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),n.colorSpaceToWorking(r,s)}},e=[.64,.33,.3,.6,.15,.06],t=[.2126,.7152,.0722],i=[.3127,.329];return n.define({[Vn]:{primaries:e,whitePoint:i,transfer:Tp,toXYZ:bN,fromXYZ:IN,luminanceCoefficients:t,workingColorSpaceConfig:{unpackColorSpace:Ni},outputColorSpaceConfig:{drawingBufferColorSpace:Ni}},[Ni]:{primaries:e,whitePoint:i,transfer:ki,toXYZ:bN,fromXYZ:IN,luminanceCoefficients:t,outputColorSpaceConfig:{drawingBufferColorSpace:Ni}}}),n}function El(n){return n<.04045?n*.0773993808:Math.pow(n*.9478672986+.0521327014,2.4)}function Wd(n){return n<.0031308?n*12.92:1.055*Math.pow(n,.41666)-.055}function ib(n){return typeof HTMLImageElement!="undefined"&&n instanceof HTMLImageElement||typeof HTMLCanvasElement!="undefined"&&n instanceof HTMLCanvasElement||typeof ImageBitmap!="undefined"&&n instanceof ImageBitmap?yv.getDataURL(n):n.data?{data:Array.from(n.data),width:n.width,height:n.height,type:n.data.constructor.name}:(Ct("Texture: Unable to serialize Texture."),{})}function sb(n,e,t){return t<0&&(t+=1),t>1&&(t-=1),t<1/6?n+(e-n)*6*t:t<1/2?e:t<2/3?n+(e-n)*6*(2/3-t):n}function ub(n,e,t,i,r){for(let s=0,a=n.length-3;s<=a;s+=3){Zf.fromArray(n,s);let o=r.x*Math.abs(Zf.x)+r.y*Math.abs(Zf.y)+r.z*Math.abs(Zf.z),l=e.dot(Zf),c=t.dot(Zf),f=i.dot(Zf);if(Math.max(-Math.max(l,c,f),Math.min(l,c,f))>o)return!1}return!0}function Sq(n,e,t,i,r,s,a,o){let l;if(e.side===fn?l=i.intersectTriangle(a,s,r,!0,o):l=i.intersectTriangle(r,s,a,e.side===Os,o),l===null)return null;nv.copy(o),nv.applyMatrix4(n.matrixWorld);let c=t.ray.origin.distanceTo(nv);return ct.far?null:{distance:c,point:nv.clone(),object:n}}function sv(n,e,t,i,r,s,a,o,l,c){n.getVertexPosition(o,ev),n.getVertexPosition(l,tv),n.getVertexPosition(c,iv);let f=Sq(n,e,t,i,ev,tv,iv,BN);if(f){let h=new ne;Nc.getBarycoord(BN,ev,tv,iv,h),r&&(f.uv=Nc.getInterpolatedAttribute(r,o,l,c,h,new Lt)),s&&(f.uv1=Nc.getInterpolatedAttribute(s,o,l,c,h,new Lt)),a&&(f.normal=Nc.getInterpolatedAttribute(a,o,l,c,h,new ne),f.normal.dot(i.direction)>0&&f.normal.multiplyScalar(-1));let d={a:o,b:l,c,normal:new ne,materialIndex:0};Nc.getNormal(ev,tv,iv,d.normal),f.face=d,f.barycoord=h}return f}function fv(n,e,t,i,r,s,a){let o=n.geometry.attributes.position;if(Lv.fromBufferAttribute(o,r),Ov.fromBufferAttribute(o,s),t.distanceSqToSegment(Lv,Ov,xb,YN)>i)return;xb.applyMatrix4(n.matrixWorld);let c=e.ray.origin.distanceTo(xb);if(!(ce.far))return{distance:c,point:YN.clone().applyMatrix4(n.matrixWorld),index:a,face:null,faceIndex:null,barycoord:null,object:n}}function ZN(n,e,t,i,r,s,a){let o=yb.distanceSqToPoint(n);if(or.far)return;s.push({distance:c,distanceToRay:Math.sqrt(o),point:l,index:e,face:null,faceIndex:null,barycoord:null,object:a})}}function _h(n){let e={};for(let t in n){e[t]={};for(let i in n[t]){let r=n[t][i];if(QN(r))r.isRenderTargetTexture?(Ct("UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms()."),e[t][i]=null):e[t][i]=r.clone();else if(Array.isArray(r))if(QN(r[0])){let s=[];for(let a=0,o=r.length;a{Gc={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},kc={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},aF=0,Bb=1,oF=2,kp=1,qv=2,su=3,Os=0,fn=1,aa=2,Oo=0,ih=1,Ub=2,Vb=3,Gb=4,lF=5,Fc=100,cF=101,fF=102,hF=103,dF=104,uF=200,mF=201,pF=202,_F=203,vv=204,Ev=205,gF=206,vF=207,EF=208,SF=209,TF=210,AF=211,xF=212,RF=213,bF=214,Sv=0,Tv=1,Av=2,rh=3,xv=4,Rv=5,bv=6,Iv=7,Wp=0,IF=1,MF=2,Bs=0,kb=1,Wb=2,Hb=3,zb=4,Xb=5,Yb=6,Kb=7,Ib="attached",CF="detached",jb=300,Wc=301,mh=302,Zv=303,Qv=304,Hp=306,Ro=1e3,ra=1001,Hd=1002,yr=1003,Jv=1004,ph=1005,Pr=1006,au=1007,Ha=1008,os=1009,qb=1010,Zb=1011,ou=1012,$v=1013,za=1014,Us=1015,No=1016,eE=1017,tE=1018,lu=1020,Qb=35902,Jb=35899,$b=1021,eI=1022,Vs=1023,bo=1026,Hc=1027,iE=1028,rE=1029,zc=1030,nE=1031,sE=1033,zp=33776,Xp=33777,Yp=33778,Kp=33779,aE=35840,oE=35841,lE=35842,cE=35843,fE=36196,hE=37492,dE=37496,uE=37488,mE=37489,jp=37490,pE=37491,_E=37808,gE=37809,vE=37810,EE=37811,SE=37812,TE=37813,AE=37814,xE=37815,RE=37816,bE=37817,IE=37818,ME=37819,CE=37820,yE=37821,PE=36492,DE=36494,LE=36495,OE=36283,NE=36284,qp=36285,FE=36286,yF=2200,PF=2201,DF=2202,nh=2300,sh=2301,gv=2302,Mb=2303,eh=2400,th=2401,Sp=2402,wE=2500,LF=2501,tI=0,Zp=1,cu=2,OF=3200,fu=0,NF=1,bl="",Ni="srgb",Vn="srgb-linear",Tp="linear",ki="srgb",$f=7680,Cb=519,FF=512,wF=513,BF=514,BE=515,UF=516,VF=517,UE=518,GF=519,Mv=35044,iI="300 es",wa=2e3,zd=2001;AN={},Yd=null;zF={[Sv]:Tv,[Av]:bv,[xv]:Iv,[rh]:Rv,[Tv]:Sv,[bv]:Av,[Iv]:xv,[Rv]:rh},na=class{addEventListener(e,t){this._listeners===void 0&&(this._listeners={});let i=this._listeners;i[e]===void 0&&(i[e]=[]),i[e].indexOf(t)===-1&&i[e].push(t)}hasEventListener(e,t){let i=this._listeners;return i===void 0?!1:i[e]!==void 0&&i[e].indexOf(t)!==-1}removeEventListener(e,t){let i=this._listeners;if(i===void 0)return;let r=i[e];if(r!==void 0){let s=r.indexOf(t);s!==-1&&r.splice(s,1)}}dispatchEvent(e){let t=this._listeners;if(t===void 0)return;let i=t[e.type];if(i!==void 0){e.target=this;let r=i.slice(0);for(let s=0,a=r.length;s0){let u=.5/Math.sqrt(d+1);this._w=.25/u,this._x=(f-l)*u,this._y=(s-c)*u,this._z=(a-r)*u}else if(i>o&&i>h){let u=2*Math.sqrt(1+i-o-h);this._w=(f-l)/u,this._x=.25*u,this._y=(r+a)/u,this._z=(s+c)/u}else if(o>h){let u=2*Math.sqrt(1+o-i-h);this._w=(s-c)/u,this._x=(r+a)/u,this._y=.25*u,this._z=(l+f)/u}else{let u=2*Math.sqrt(1+h-i-o);this._w=(a-r)/u,this._x=(s+c)/u,this._y=(l+f)/u,this._z=.25*u}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let i=e.dot(t)+1;return i<1e-8?(i=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=i):(this._x=0,this._y=-e.z,this._z=e.y,this._w=i)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=i),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(mi(this.dot(e),-1,1)))}rotateTowards(e,t){let i=this.angleTo(e);if(i===0)return this;let r=Math.min(1,t/i);return this.slerp(e,r),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){let i=e._x,r=e._y,s=e._z,a=e._w,o=t._x,l=t._y,c=t._z,f=t._w;return this._x=i*f+a*o+r*c-s*l,this._y=r*f+a*l+s*o-i*c,this._z=s*f+a*c+i*l-r*o,this._w=a*f-i*o-r*l-s*c,this._onChangeCallback(),this}slerp(e,t){let i=e._x,r=e._y,s=e._z,a=e._w,o=this.dot(e);o<0&&(i=-i,r=-r,s=-s,a=-a,o=-o);let l=1-t;if(o<.9995){let c=Math.acos(o),f=Math.sin(c);l=Math.sin(l*c)/f,t=Math.sin(t*c)/f,this._x=this._x*l+i*t,this._y=this._y*l+r*t,this._z=this._z*l+s*t,this._w=this._w*l+a*t,this._onChangeCallback()}else this._x=this._x*l+i*t,this._y=this._y*l+r*t,this._z=this._z*l+s*t,this._w=this._w*l+a*t,this.normalize();return this}slerpQuaternions(e,t,i){return this.copy(e).slerp(t,i)}random(){let e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),i=Math.random(),r=Math.sqrt(1-i),s=Math.sqrt(i);return this.set(r*Math.sin(e),r*Math.cos(e),s*Math.sin(t),s*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}},cI=class cI{constructor(e=0,t=0,i=0){this.x=e,this.y=t,this.z=i}set(e,t,i){return i===void 0&&(i=this.z),this.x=e,this.y=t,this.z=i,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(RN.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(RN.setFromAxisAngle(e,t))}applyMatrix3(e){let t=this.x,i=this.y,r=this.z,s=e.elements;return this.x=s[0]*t+s[3]*i+s[6]*r,this.y=s[1]*t+s[4]*i+s[7]*r,this.z=s[2]*t+s[5]*i+s[8]*r,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){let t=this.x,i=this.y,r=this.z,s=e.elements,a=1/(s[3]*t+s[7]*i+s[11]*r+s[15]);return this.x=(s[0]*t+s[4]*i+s[8]*r+s[12])*a,this.y=(s[1]*t+s[5]*i+s[9]*r+s[13])*a,this.z=(s[2]*t+s[6]*i+s[10]*r+s[14])*a,this}applyQuaternion(e){let t=this.x,i=this.y,r=this.z,s=e.x,a=e.y,o=e.z,l=e.w,c=2*(a*r-o*i),f=2*(o*t-s*r),h=2*(s*i-a*t);return this.x=t+l*c+a*h-o*f,this.y=i+l*f+o*c-s*h,this.z=r+l*h+s*f-a*c,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){let t=this.x,i=this.y,r=this.z,s=e.elements;return this.x=s[0]*t+s[4]*i+s[8]*r,this.y=s[1]*t+s[5]*i+s[9]*r,this.z=s[2]*t+s[6]*i+s[10]*r,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=mi(this.x,e.x,t.x),this.y=mi(this.y,e.y,t.y),this.z=mi(this.z,e.z,t.z),this}clampScalar(e,t){return this.x=mi(this.x,e,t),this.y=mi(this.y,e,t),this.z=mi(this.z,e,t),this}clampLength(e,t){let i=this.length();return this.divideScalar(i||1).multiplyScalar(mi(i,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){let i=e.x,r=e.y,s=e.z,a=t.x,o=t.y,l=t.z;return this.x=r*l-s*o,this.y=s*a-i*l,this.z=i*o-r*a,this}projectOnVector(e){let t=e.lengthSq();if(t===0)return this.set(0,0,0);let i=e.dot(this)/t;return this.copy(e).multiplyScalar(i)}projectOnPlane(e){return eb.copy(this).projectOnVector(e),this.sub(eb)}reflect(e){return this.sub(eb.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let i=this.dot(e)/t;return Math.acos(mi(i,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,i=this.y-e.y,r=this.z-e.z;return t*t+i*i+r*r}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,i){let r=Math.sin(t)*e;return this.x=r*Math.sin(i),this.y=Math.cos(t)*e,this.z=r*Math.cos(i),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,i){return this.x=e*Math.sin(t),this.y=i,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){let t=this.setFromMatrixColumn(e,0).length(),i=this.setFromMatrixColumn(e,1).length(),r=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=i,this.z=r,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let e=Math.random()*Math.PI*2,t=Math.random()*2-1,i=Math.sqrt(1-t*t);return this.x=i*Math.cos(e),this.y=t,this.z=i*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}};cI.prototype.isVector3=!0;ne=cI,eb=new ne,RN=new Kr,fI=class fI{constructor(e,t,i,r,s,a,o,l,c){this.elements=[1,0,0,0,1,0,0,0,1],e!==void 0&&this.set(e,t,i,r,s,a,o,l,c)}set(e,t,i,r,s,a,o,l,c){let f=this.elements;return f[0]=e,f[1]=r,f[2]=o,f[3]=t,f[4]=s,f[5]=l,f[6]=i,f[7]=a,f[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){let t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],this}extractBasis(e,t,i){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(e){let t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let i=e.elements,r=t.elements,s=this.elements,a=i[0],o=i[3],l=i[6],c=i[1],f=i[4],h=i[7],d=i[2],u=i[5],m=i[8],_=r[0],p=r[3],g=r[6],v=r[1],x=r[4],A=r[7],E=r[2],T=r[5],R=r[8];return s[0]=a*_+o*v+l*E,s[3]=a*p+o*x+l*T,s[6]=a*g+o*A+l*R,s[1]=c*_+f*v+h*E,s[4]=c*p+f*x+h*T,s[7]=c*g+f*A+h*R,s[2]=d*_+u*v+m*E,s[5]=d*p+u*x+m*T,s[8]=d*g+u*A+m*R,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){let e=this.elements,t=e[0],i=e[1],r=e[2],s=e[3],a=e[4],o=e[5],l=e[6],c=e[7],f=e[8];return t*a*f-t*o*c-i*s*f+i*o*l+r*s*c-r*a*l}invert(){let e=this.elements,t=e[0],i=e[1],r=e[2],s=e[3],a=e[4],o=e[5],l=e[6],c=e[7],f=e[8],h=f*a-o*c,d=o*l-f*s,u=c*s-a*l,m=t*h+i*d+r*u;if(m===0)return this.set(0,0,0,0,0,0,0,0,0);let _=1/m;return e[0]=h*_,e[1]=(r*c-f*i)*_,e[2]=(o*i-r*a)*_,e[3]=d*_,e[4]=(f*t-r*l)*_,e[5]=(r*s-o*t)*_,e[6]=u*_,e[7]=(i*l-c*t)*_,e[8]=(a*t-i*s)*_,this}transpose(){let e,t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){let t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,i,r,s,a,o){let l=Math.cos(s),c=Math.sin(s);return this.set(i*l,i*c,-i*(l*a+c*o)+a+e,-r*c,r*l,-r*(-c*a+l*o)+o+t,0,0,1),this}scale(e,t){return this.premultiply(tb.makeScale(e,t)),this}rotate(e){return this.premultiply(tb.makeRotation(-e)),this}translate(e,t){return this.premultiply(tb.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){let t=Math.cos(e),i=Math.sin(e);return this.set(t,-i,0,i,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){let t=this.elements,i=e.elements;for(let r=0;r<9;r++)if(t[r]!==i[r])return!1;return!0}fromArray(e,t=0){for(let i=0;i<9;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){let i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e}clone(){return new this.constructor().fromArray(this.elements)}};fI.prototype.isMatrix3=!0;ii=fI,tb=new ii,bN=new ii().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),IN=new ii().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);ai=aq();yv=class{static getDataURL(e,t="image/png"){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement=="undefined")return e.src;let i;if(e instanceof HTMLCanvasElement)i=e;else{Cd===void 0&&(Cd=Xd("canvas")),Cd.width=e.width,Cd.height=e.height;let r=Cd.getContext("2d");e instanceof ImageData?r.putImageData(e,0,0):r.drawImage(e,0,0,e.width,e.height),i=Cd}return i.toDataURL(t)}static sRGBToLinear(e){if(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement||typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement||typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap){let t=Xd("canvas");t.width=e.width,t.height=e.height;let i=t.getContext("2d");i.drawImage(e,0,0,e.width,e.height);let r=i.getImageData(0,0,e.width,e.height),s=r.data;for(let a=0;a1),this.pmremVersion=0,this.normalized=!1}get width(){return this.source.getSize(rb).x}get height(){return this.source.getSize(rb).y}get depth(){return this.source.getSize(rb).z}get image(){return this.source.data}set image(e){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.channel=e.channel,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.normalized=e.normalized,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.colorSpace=e.colorSpace,this.renderTarget=e.renderTarget,this.isRenderTargetTexture=e.isRenderTargetTexture,this.isArrayTexture=e.isArrayTexture,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}setValues(e){for(let t in e){let i=e[t];if(i===void 0){Ct(`Texture.setValues(): parameter '${t}' has value of undefined.`);continue}let r=this[t];if(r===void 0){Ct(`Texture.setValues(): property '${t}' does not exist.`);continue}r&&i&&r.isVector2&&i.isVector2||r&&i&&r.isVector3&&i.isVector3||r&&i&&r.isMatrix3&&i.isMatrix3?r.copy(i):this[t]=i}}toJSON(e){let t=e===void 0||typeof e=="string";if(!t&&e.textures[this.uuid]!==void 0)return e.textures[this.uuid];let i={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,normalized:this.normalized,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(i.userData=this.userData),t||(e.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(e){if(this.mapping!==jb)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case Ro:e.x=e.x-Math.floor(e.x);break;case ra:e.x=e.x<0?0:1;break;case Hd:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x=e.x-Math.floor(e.x);break}if(e.y<0||e.y>1)switch(this.wrapT){case Ro:e.y=e.y-Math.floor(e.y);break;case ra:e.y=e.y<0?0:1;break;case Hd:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y=e.y-Math.floor(e.y);break}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){e===!0&&this.pmremVersion++}};Ar.DEFAULT_IMAGE=null;Ar.DEFAULT_MAPPING=jb;Ar.DEFAULT_ANISOTROPY=1;hI=class hI{constructor(e=0,t=0,i=0,r=1){this.x=e,this.y=t,this.z=i,this.w=r}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,i,r){return this.x=e,this.y=t,this.z=i,this.w=r,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w!==void 0?e.w:1,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){let t=this.x,i=this.y,r=this.z,s=this.w,a=e.elements;return this.x=a[0]*t+a[4]*i+a[8]*r+a[12]*s,this.y=a[1]*t+a[5]*i+a[9]*r+a[13]*s,this.z=a[2]*t+a[6]*i+a[10]*r+a[14]*s,this.w=a[3]*t+a[7]*i+a[11]*r+a[15]*s,this}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this.w/=e.w,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);let t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,i,r,s,l=e.elements,c=l[0],f=l[4],h=l[8],d=l[1],u=l[5],m=l[9],_=l[2],p=l[6],g=l[10];if(Math.abs(f-d)<.01&&Math.abs(h-_)<.01&&Math.abs(m-p)<.01){if(Math.abs(f+d)<.1&&Math.abs(h+_)<.1&&Math.abs(m+p)<.1&&Math.abs(c+u+g-3)<.1)return this.set(1,0,0,0),this;t=Math.PI;let x=(c+1)/2,A=(u+1)/2,E=(g+1)/2,T=(f+d)/4,R=(h+_)/4,I=(m+p)/4;return x>A&&x>E?x<.01?(i=0,r=.707106781,s=.707106781):(i=Math.sqrt(x),r=T/i,s=R/i):A>E?A<.01?(i=.707106781,r=0,s=.707106781):(r=Math.sqrt(A),i=T/r,s=I/r):E<.01?(i=.707106781,r=.707106781,s=0):(s=Math.sqrt(E),i=R/s,r=I/s),this.set(i,r,s,t),this}let v=Math.sqrt((p-m)*(p-m)+(h-_)*(h-_)+(d-f)*(d-f));return Math.abs(v)<.001&&(v=1),this.x=(p-m)/v,this.y=(h-_)/v,this.z=(d-f)/v,this.w=Math.acos((c+u+g-1)/2),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this.w=t[15],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,t){return this.x=mi(this.x,e.x,t.x),this.y=mi(this.y,e.y,t.y),this.z=mi(this.z,e.z,t.z),this.w=mi(this.w,e.w,t.w),this}clampScalar(e,t){return this.x=mi(this.x,e,t),this.y=mi(this.y,e,t),this.z=mi(this.z,e,t),this.w=mi(this.w,e,t),this}clampLength(e,t){let i=this.length();return this.divideScalar(i||1).multiplyScalar(mi(i,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this.w=e.w+(t.w-e.w)*i,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}};hI.prototype.isVector4=!0;ji=hI,Pv=class extends na{constructor(e=1,t=1,i={}){super(),i=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:Pr,depthBuffer:!0,stencilBuffer:!1,resolveDepthBuffer:!0,resolveStencilBuffer:!0,depthTexture:null,samples:0,count:1,depth:1,multiview:!1},i),this.isRenderTarget=!0,this.width=e,this.height=t,this.depth=i.depth,this.scissor=new ji(0,0,e,t),this.scissorTest=!1,this.viewport=new ji(0,0,e,t),this.textures=[];let r={width:e,height:t,depth:i.depth},s=new Ar(r),a=i.count;for(let o=0;o1);this.dispose()}this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}clone(){return new this.constructor().copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.scissor.copy(e.scissor),this.scissorTest=e.scissorTest,this.viewport.copy(e.viewport),this.textures.length=0;for(let t=0,i=e.textures.length;t>>0}enable(e){this.mask|=1<1){for(let t=0;t1){for(let i=0;i0&&(r.userData=this.userData),r.layers=this.layers.mask,r.matrix=this.matrix.toArray(),r.up=this.up.toArray(),this.pivot!==null&&(r.pivot=this.pivot.toArray()),this.matrixAutoUpdate===!1&&(r.matrixAutoUpdate=!1),this.morphTargetDictionary!==void 0&&(r.morphTargetDictionary=Object.assign({},this.morphTargetDictionary)),this.morphTargetInfluences!==void 0&&(r.morphTargetInfluences=this.morphTargetInfluences.slice()),this.isInstancedMesh&&(r.type="InstancedMesh",r.count=this.count,r.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(r.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(r.type="BatchedMesh",r.perObjectFrustumCulled=this.perObjectFrustumCulled,r.sortObjects=this.sortObjects,r.drawRanges=this._drawRanges,r.reservedRanges=this._reservedRanges,r.geometryInfo=this._geometryInfo.map(o=>({...o,boundingBox:o.boundingBox?o.boundingBox.toJSON():void 0,boundingSphere:o.boundingSphere?o.boundingSphere.toJSON():void 0})),r.instanceInfo=this._instanceInfo.map(o=>({...o})),r.availableInstanceIds=this._availableInstanceIds.slice(),r.availableGeometryIds=this._availableGeometryIds.slice(),r.nextIndexStart=this._nextIndexStart,r.nextVertexStart=this._nextVertexStart,r.geometryCount=this._geometryCount,r.maxInstanceCount=this._maxInstanceCount,r.maxVertexCount=this._maxVertexCount,r.maxIndexCount=this._maxIndexCount,r.geometryInitialized=this._geometryInitialized,r.matricesTexture=this._matricesTexture.toJSON(e),r.indirectTexture=this._indirectTexture.toJSON(e),this._colorsTexture!==null&&(r.colorsTexture=this._colorsTexture.toJSON(e)),this.boundingSphere!==null&&(r.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(r.boundingBox=this.boundingBox.toJSON()));function s(o,l){return o[l.uuid]===void 0&&(o[l.uuid]=l.toJSON(e)),l.uuid}if(this.isScene)this.background&&(this.background.isColor?r.background=this.background.toJSON():this.background.isTexture&&(r.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(r.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){r.geometry=s(e.geometries,this.geometry);let o=this.geometry.parameters;if(o!==void 0&&o.shapes!==void 0){let l=o.shapes;if(Array.isArray(l))for(let c=0,f=l.length;c0){r.children=[];for(let o=0;o0){r.animations=[];for(let o=0;o0&&(i.geometries=o),l.length>0&&(i.materials=l),c.length>0&&(i.textures=c),f.length>0&&(i.images=f),h.length>0&&(i.shapes=h),d.length>0&&(i.skeletons=d),u.length>0&&(i.animations=u),m.length>0&&(i.nodes=m)}return i.object=r,i;function a(o){let l=[];for(let c in o){let f=o[c];delete f.metadata,l.push(f)}return l}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.pivot=e.pivot!==null?e.pivot.clone():null,this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.static=e.static,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let i=0;iu+m?(c.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:e.handedness,target:this})):!c.inputState.pinching&&d<=u-m&&(c.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:e.handedness,target:this}))}else l!==null&&e.gripSpace&&(s=t.getPose(e.gripSpace,i),s!==null&&(l.matrix.fromArray(s.transform.matrix),l.matrix.decompose(l.position,l.rotation,l.scale),l.matrixWorldNeedsUpdate=!0,s.linearVelocity?(l.hasLinearVelocity=!0,l.linearVelocity.copy(s.linearVelocity)):l.hasLinearVelocity=!1,s.angularVelocity?(l.hasAngularVelocity=!0,l.angularVelocity.copy(s.angularVelocity)):l.hasAngularVelocity=!1,l.eventsEnabled&&l.dispatchEvent({type:"gripUpdated",data:e,target:this})));o!==null&&(r=t.getPose(e.targetRaySpace,i),r===null&&s!==null&&(r=s),r!==null&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(pq)))}return o!==null&&(o.visible=r!==null),l!==null&&(l.visible=s!==null),c!==null&&(c.visible=a!==null),this}_getHandJoint(e,t){if(e.joints[t.jointName]===void 0){let i=new Ls;i.matrixAutoUpdate=!1,i.visible=!1,e.joints[t.jointName]=i,e.add(i)}return e.joints[t.jointName]}},XF={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},yc={h:0,s:0,l:0},Yg={h:0,s:0,l:0};ct=class{constructor(e,t,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,i)}set(e,t,i){if(t===void 0&&i===void 0){let r=e;r&&r.isColor?this.copy(r):typeof r=="number"?this.setHex(r):typeof r=="string"&&this.setStyle(r)}else this.setRGB(e,t,i);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=Ni){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,ai.colorSpaceToWorking(this,t),this}setRGB(e,t,i,r=ai.workingColorSpace){return this.r=e,this.g=t,this.b=i,ai.colorSpaceToWorking(this,r),this}setHSL(e,t,i,r=ai.workingColorSpace){if(e=rI(e,1),t=mi(t,0,1),i=mi(i,0,1),t===0)this.r=this.g=this.b=i;else{let s=i<=.5?i*(1+t):i+t-i*t,a=2*i-s;this.r=sb(a,s,e+1/3),this.g=sb(a,s,e),this.b=sb(a,s,e-1/3)}return ai.colorSpaceToWorking(this,r),this}setStyle(e,t=Ni){function i(s){s!==void 0&&parseFloat(s)<1&&Ct("Color: Alpha component of "+e+" will be ignored.")}let r;if(r=/^(\w+)\(([^\)]*)\)/.exec(e)){let s,a=r[1],o=r[2];switch(a){case"rgb":case"rgba":if(s=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(s[4]),this.setRGB(Math.min(255,parseInt(s[1],10))/255,Math.min(255,parseInt(s[2],10))/255,Math.min(255,parseInt(s[3],10))/255,t);if(s=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(s[4]),this.setRGB(Math.min(100,parseInt(s[1],10))/100,Math.min(100,parseInt(s[2],10))/100,Math.min(100,parseInt(s[3],10))/100,t);break;case"hsl":case"hsla":if(s=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(s[4]),this.setHSL(parseFloat(s[1])/360,parseFloat(s[2])/100,parseFloat(s[3])/100,t);break;default:Ct("Color: Unknown color model "+e)}}else if(r=/^\#([A-Fa-f\d]+)$/.exec(e)){let s=r[1],a=s.length;if(a===3)return this.setRGB(parseInt(s.charAt(0),16)/15,parseInt(s.charAt(1),16)/15,parseInt(s.charAt(2),16)/15,t);if(a===6)return this.setHex(parseInt(s,16),t);Ct("Color: Invalid hex color "+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=Ni){let i=XF[e.toLowerCase()];return i!==void 0?this.setHex(i,t):Ct("Color: Unknown color "+e),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=El(e.r),this.g=El(e.g),this.b=El(e.b),this}copyLinearToSRGB(e){return this.r=Wd(e.r),this.g=Wd(e.g),this.b=Wd(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=Ni){return ai.workingToColorSpace(gn.copy(this),e),Math.round(mi(gn.r*255,0,255))*65536+Math.round(mi(gn.g*255,0,255))*256+Math.round(mi(gn.b*255,0,255))}getHexString(e=Ni){return("000000"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=ai.workingColorSpace){ai.workingToColorSpace(gn.copy(this),t);let i=gn.r,r=gn.g,s=gn.b,a=Math.max(i,r,s),o=Math.min(i,r,s),l,c,f=(o+a)/2;if(o===a)l=0,c=0;else{let h=a-o;switch(c=f<=.5?h/(a+o):h/(2-a-o),a){case i:l=(r-s)/h+(r0&&(t.object.backgroundBlurriness=this.backgroundBlurriness),this.backgroundIntensity!==1&&(t.object.backgroundIntensity=this.backgroundIntensity),t.object.backgroundRotation=this.backgroundRotation.toArray(),this.environmentIntensity!==1&&(t.object.environmentIntensity=this.environmentIntensity),t.object.environmentRotation=this.environmentRotation.toArray(),t}},Oa=new ne,ml=new ne,ab=new ne,pl=new ne,Ld=new ne,Od=new ne,NN=new ne,ob=new ne,lb=new ne,cb=new ne,fb=new ji,hb=new ji,db=new ji,Nc=class n{constructor(e=new ne,t=new ne,i=new ne){this.a=e,this.b=t,this.c=i}static getNormal(e,t,i,r){r.subVectors(i,t),Oa.subVectors(e,t),r.cross(Oa);let s=r.lengthSq();return s>0?r.multiplyScalar(1/Math.sqrt(s)):r.set(0,0,0)}static getBarycoord(e,t,i,r,s){Oa.subVectors(r,t),ml.subVectors(i,t),ab.subVectors(e,t);let a=Oa.dot(Oa),o=Oa.dot(ml),l=Oa.dot(ab),c=ml.dot(ml),f=ml.dot(ab),h=a*c-o*o;if(h===0)return s.set(0,0,0),null;let d=1/h,u=(c*l-o*f)*d,m=(a*f-o*l)*d;return s.set(1-u-m,m,u)}static containsPoint(e,t,i,r){return this.getBarycoord(e,t,i,r,pl)===null?!1:pl.x>=0&&pl.y>=0&&pl.x+pl.y<=1}static getInterpolation(e,t,i,r,s,a,o,l){return this.getBarycoord(e,t,i,r,pl)===null?(l.x=0,l.y=0,"z"in l&&(l.z=0),"w"in l&&(l.w=0),null):(l.setScalar(0),l.addScaledVector(s,pl.x),l.addScaledVector(a,pl.y),l.addScaledVector(o,pl.z),l)}static getInterpolatedAttribute(e,t,i,r,s,a){return fb.setScalar(0),hb.setScalar(0),db.setScalar(0),fb.fromBufferAttribute(e,t),hb.fromBufferAttribute(e,i),db.fromBufferAttribute(e,r),a.setScalar(0),a.addScaledVector(fb,s.x),a.addScaledVector(hb,s.y),a.addScaledVector(db,s.z),a}static isFrontFacing(e,t,i,r){return Oa.subVectors(i,t),ml.subVectors(e,t),Oa.cross(ml).dot(r)<0}set(e,t,i){return this.a.copy(e),this.b.copy(t),this.c.copy(i),this}setFromPointsAndIndices(e,t,i,r){return this.a.copy(e[t]),this.b.copy(e[i]),this.c.copy(e[r]),this}setFromAttributeAndIndices(e,t,i,r){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,i),this.c.fromBufferAttribute(e,r),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return Oa.subVectors(this.c,this.b),ml.subVectors(this.a,this.b),Oa.cross(ml).length()*.5}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(e){return n.getNormal(this.a,this.b,this.c,e)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(e,t){return n.getBarycoord(e,this.a,this.b,this.c,t)}getInterpolation(e,t,i,r,s){return n.getInterpolation(e,this.a,this.b,this.c,t,i,r,s)}containsPoint(e){return n.containsPoint(e,this.a,this.b,this.c)}isFrontFacing(e){return n.isFrontFacing(this.a,this.b,this.c,e)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){let i=this.a,r=this.b,s=this.c,a,o;Ld.subVectors(r,i),Od.subVectors(s,i),ob.subVectors(e,i);let l=Ld.dot(ob),c=Od.dot(ob);if(l<=0&&c<=0)return t.copy(i);lb.subVectors(e,r);let f=Ld.dot(lb),h=Od.dot(lb);if(f>=0&&h<=f)return t.copy(r);let d=l*h-f*c;if(d<=0&&l>=0&&f<=0)return a=l/(l-f),t.copy(i).addScaledVector(Ld,a);cb.subVectors(e,s);let u=Ld.dot(cb),m=Od.dot(cb);if(m>=0&&u<=m)return t.copy(s);let _=u*c-l*m;if(_<=0&&c>=0&&m<=0)return o=c/(c-m),t.copy(i).addScaledVector(Od,o);let p=f*m-u*h;if(p<=0&&h-f>=0&&u-m>=0)return NN.subVectors(s,r),o=(h-f)/(h-f+(u-m)),t.copy(r).addScaledVector(NN,o);let g=1/(p+_+d);return a=_*g,o=d*g,t.copy(i).addScaledVector(Ld,a).addScaledVector(Od,o)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}},xr=class{constructor(e=new ne(1/0,1/0,1/0),t=new ne(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){this.makeEmpty();for(let t=0,i=e.length;t=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,Na),Na.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,i;return e.normal.x>0?(t=e.normal.x*this.min.x,i=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,i=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,i+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,i+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,i+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,i+=e.normal.z*this.min.z),t<=-e.constant&&i>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(hp),jg.subVectors(this.max,hp),Nd.subVectors(e.a,hp),Fd.subVectors(e.b,hp),wd.subVectors(e.c,hp),Pc.subVectors(Fd,Nd),Dc.subVectors(wd,Fd),qf.subVectors(Nd,wd);let t=[0,-Pc.z,Pc.y,0,-Dc.z,Dc.y,0,-qf.z,qf.y,Pc.z,0,-Pc.x,Dc.z,0,-Dc.x,qf.z,0,-qf.x,-Pc.y,Pc.x,0,-Dc.y,Dc.x,0,-qf.y,qf.x,0];return!ub(t,Nd,Fd,wd,jg)||(t=[1,0,0,0,1,0,0,0,1],!ub(t,Nd,Fd,wd,jg))?!1:(qg.crossVectors(Pc,Dc),t=[qg.x,qg.y,qg.z],ub(t,Nd,Fd,wd,jg))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,Na).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(Na).length()*.5),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(_l[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),_l[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),_l[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),_l[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),_l[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),_l[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),_l[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),_l[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(_l),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(e){return this.min.fromArray(e.min),this.max.fromArray(e.max),this}},_l=[new ne,new ne,new ne,new ne,new ne,new ne,new ne,new ne],Na=new ne,Kg=new xr,Nd=new ne,Fd=new ne,wd=new ne,Pc=new ne,Dc=new ne,qf=new ne,hp=new ne,jg=new ne,qg=new ne,Zf=new ne;wr=new ne,Zg=new Lt,_q=0,rr=class extends na{constructor(e,t,i=!1){if(super(),Array.isArray(e))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:_q++}),this.name="",this.array=e,this.itemSize=t,this.count=e!==void 0?e.length/t:0,this.normalized=i,this.usage=Mv,this.updateRanges=[],this.gpuType=Us,this.version=0}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this.gpuType=e.gpuType,this}copyAt(e,t,i){e*=this.itemSize,i*=t.itemSize;for(let r=0,s=this.itemSize;rthis.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;dp.subVectors(e,this.center);let t=dp.lengthSq();if(t>this.radius*this.radius){let i=Math.sqrt(t),r=(i-this.radius)*.5;this.center.addScaledVector(dp,r/i),this.radius+=r}return this}union(e){return e.isEmpty()?this:this.isEmpty()?(this.copy(e),this):(this.center.equals(e.center)===!0?this.radius=Math.max(this.radius,e.radius):(mb.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(dp.copy(e.center).add(mb)),this.expandByPoint(dp.copy(e.center).sub(mb))),this)}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(e){return this.radius=e.radius,this.center.fromArray(e.center),this}},vq=0,ta=new li,pb=new nr,Bd=new ne,Ds=new xr,up=new xr,nn=new ne,sr=class n extends na{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:vq++}),this.uuid=Ba(),this.name="",this.type="BufferGeometry",this.index=null,this.indirect=null,this.indirectOffset=0,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(e){return Array.isArray(e)?this.index=new(Wj(e)?bp:Rp)(e,1):this.index=e,this}setIndirect(e,t=0){return this.indirect=e,this.indirectOffset=t,this}getIndirect(){return this.indirect}getAttribute(e){return this.attributes[e]}setAttribute(e,t){return this.attributes[e]=t,this}deleteAttribute(e){return delete this.attributes[e],this}hasAttribute(e){return this.attributes[e]!==void 0}addGroup(e,t,i=0){this.groups.push({start:e,count:t,materialIndex:i})}clearGroups(){this.groups=[]}setDrawRange(e,t){this.drawRange.start=e,this.drawRange.count=t}applyMatrix4(e){let t=this.attributes.position;t!==void 0&&(t.applyMatrix4(e),t.needsUpdate=!0);let i=this.attributes.normal;if(i!==void 0){let s=new ii().getNormalMatrix(e);i.applyNormalMatrix(s),i.needsUpdate=!0}let r=this.attributes.tangent;return r!==void 0&&(r.transformDirection(e),r.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}applyQuaternion(e){return ta.makeRotationFromQuaternion(e),this.applyMatrix4(ta),this}rotateX(e){return ta.makeRotationX(e),this.applyMatrix4(ta),this}rotateY(e){return ta.makeRotationY(e),this.applyMatrix4(ta),this}rotateZ(e){return ta.makeRotationZ(e),this.applyMatrix4(ta),this}translate(e,t,i){return ta.makeTranslation(e,t,i),this.applyMatrix4(ta),this}scale(e,t,i){return ta.makeScale(e,t,i),this.applyMatrix4(ta),this}lookAt(e){return pb.lookAt(e),pb.updateMatrix(),this.applyMatrix4(pb.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(Bd).negate(),this.translate(Bd.x,Bd.y,Bd.z),this}setFromPoints(e){let t=this.getAttribute("position");if(t===void 0){let i=[];for(let r=0,s=e.length;rt.count&&Ct("BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),t.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new xr);let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){Gt("BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new ne(-1/0,-1/0,-1/0),new ne(1/0,1/0,1/0));return}if(e!==void 0){if(this.boundingBox.setFromBufferAttribute(e),t)for(let i=0,r=t.length;i0&&(e.userData=this.userData),this.parameters!==void 0){let l=this.parameters;for(let c in l)l[c]!==void 0&&(e[c]=l[c]);return e}e.data={attributes:{}};let t=this.index;t!==null&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});let i=this.attributes;for(let l in i){let c=i[l];e.data.attributes[l]=c.toJSON(e.data)}let r={},s=!1;for(let l in this.morphAttributes){let c=this.morphAttributes[l],f=[];for(let h=0,d=c.length;h0&&(r[l]=f,s=!0)}s&&(e.data.morphAttributes=r,e.data.morphTargetsRelative=this.morphTargetsRelative);let a=this.groups;a.length>0&&(e.data.groups=JSON.parse(JSON.stringify(a)));let o=this.boundingSphere;return o!==null&&(e.data.boundingSphere=o.toJSON()),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;let t={};this.name=e.name;let i=e.index;i!==null&&this.setIndex(i.clone());let r=e.attributes;for(let c in r){let f=r[c];this.setAttribute(c,f.clone(t))}let s=e.morphAttributes;for(let c in s){let f=[],h=s[c];for(let d=0,u=h.length;d0!=e>0&&this.version++,this._alphaTest=e}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(e!==void 0)for(let t in e){let i=e[t];if(i===void 0){Ct(`Material: parameter '${t}' has value of undefined.`);continue}let r=this[t];if(r===void 0){Ct(`Material: '${t}' is not a property of THREE.${this.type}.`);continue}r&&r.isColor?r.set(i):r&&r.isVector3&&i&&i.isVector3?r.copy(i):this[t]=i}}toJSON(e){let t=e===void 0||typeof e=="string";t&&(e={textures:{},images:{}});let i={metadata:{version:4.7,type:"Material",generator:"Material.toJSON"}};i.uuid=this.uuid,i.type=this.type,this.name!==""&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),this.roughness!==void 0&&(i.roughness=this.roughness),this.metalness!==void 0&&(i.metalness=this.metalness),this.sheen!==void 0&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(i.shininess=this.shininess),this.clearcoat!==void 0&&(i.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.sheenColorMap&&this.sheenColorMap.isTexture&&(i.sheenColorMap=this.sheenColorMap.toJSON(e).uuid),this.sheenRoughnessMap&&this.sheenRoughnessMap.isTexture&&(i.sheenRoughnessMap=this.sheenRoughnessMap.toJSON(e).uuid),this.dispersion!==void 0&&(i.dispersion=this.dispersion),this.iridescence!==void 0&&(i.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(i.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.anisotropy!==void 0&&(i.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(i.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(i.anisotropyMap=this.anisotropyMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(e).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(e).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(e).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(e).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(e).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(e).uuid,this.combine!==void 0&&(i.combine=this.combine)),this.envMapRotation!==void 0&&(i.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(i.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(i.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(e).uuid),this.transmission!==void 0&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(e).uuid),this.thickness!==void 0&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(e).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(i.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(i.size=this.size),this.shadowSide!==null&&(i.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(i.sizeAttenuation=this.sizeAttenuation),this.blending!==ih&&(i.blending=this.blending),this.side!==Os&&(i.side=this.side),this.vertexColors===!0&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),this.transparent===!0&&(i.transparent=!0),this.blendSrc!==vv&&(i.blendSrc=this.blendSrc),this.blendDst!==Ev&&(i.blendDst=this.blendDst),this.blendEquation!==Fc&&(i.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(i.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(i.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(i.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(i.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(i.blendAlpha=this.blendAlpha),this.depthFunc!==rh&&(i.depthFunc=this.depthFunc),this.depthTest===!1&&(i.depthTest=this.depthTest),this.depthWrite===!1&&(i.depthWrite=this.depthWrite),this.colorWrite===!1&&(i.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(i.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==Cb&&(i.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(i.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(i.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==$f&&(i.stencilFail=this.stencilFail),this.stencilZFail!==$f&&(i.stencilZFail=this.stencilZFail),this.stencilZPass!==$f&&(i.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(i.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(i.rotation=this.rotation),this.polygonOffset===!0&&(i.polygonOffset=!0),this.polygonOffsetFactor!==0&&(i.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(i.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(i.linewidth=this.linewidth),this.dashSize!==void 0&&(i.dashSize=this.dashSize),this.gapSize!==void 0&&(i.gapSize=this.gapSize),this.scale!==void 0&&(i.scale=this.scale),this.dithering===!0&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),this.alphaHash===!0&&(i.alphaHash=!0),this.alphaToCoverage===!0&&(i.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(i.premultipliedAlpha=!0),this.forceSinglePass===!0&&(i.forceSinglePass=!0),this.allowOverride===!1&&(i.allowOverride=!1),this.wireframe===!0&&(i.wireframe=!0),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!=="round"&&(i.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!=="round"&&(i.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(i.flatShading=!0),this.visible===!1&&(i.visible=!1),this.toneMapped===!1&&(i.toneMapped=!1),this.fog===!1&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData);function r(s){let a=[];for(let o in s){let l=s[o];delete l.metadata,a.push(l)}return a}if(t){let s=r(e.textures),a=r(e.images);s.length>0&&(i.textures=s),a.length>0&&(i.images=a)}return i}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.blendColor.copy(e.blendColor),this.blendAlpha=e.blendAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;let t=e.clippingPlanes,i=null;if(t!==null){let r=t.length;i=new Array(r);for(let s=0;s!==r;++s)i[s]=t[s].clone()}return this.clippingPlanes=i,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaHash=e.alphaHash,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.allowOverride=e.allowOverride,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(e){e===!0&&this.version++}},gl=new ne,_b=new ne,Qg=new ne,Lc=new ne,gb=new ne,Jg=new ne,vb=new ne,Io=class{constructor(e=new ne,t=new ne(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,gl)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);let i=t.dot(this.direction);return i<0?t.copy(this.origin):t.copy(this.origin).addScaledVector(this.direction,i)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){let t=gl.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(gl.copy(this.origin).addScaledVector(this.direction,t),gl.distanceToSquared(e))}distanceSqToSegment(e,t,i,r){_b.copy(e).add(t).multiplyScalar(.5),Qg.copy(t).sub(e).normalize(),Lc.copy(this.origin).sub(_b);let s=e.distanceTo(t)*.5,a=-this.direction.dot(Qg),o=Lc.dot(this.direction),l=-Lc.dot(Qg),c=Lc.lengthSq(),f=Math.abs(1-a*a),h,d,u,m;if(f>0)if(h=a*l-o,d=a*o-l,m=s*f,h>=0)if(d>=-m)if(d<=m){let _=1/f;h*=_,d*=_,u=h*(h+a*d+2*o)+d*(a*h+d+2*l)+c}else d=s,h=Math.max(0,-(a*d+o)),u=-h*h+d*(d+2*l)+c;else d=-s,h=Math.max(0,-(a*d+o)),u=-h*h+d*(d+2*l)+c;else d<=-m?(h=Math.max(0,-(-a*s+o)),d=h>0?-s:Math.min(Math.max(-s,-l),s),u=-h*h+d*(d+2*l)+c):d<=m?(h=0,d=Math.min(Math.max(-s,-l),s),u=d*(d+2*l)+c):(h=Math.max(0,-(a*s+o)),d=h>0?s:Math.min(Math.max(-s,-l),s),u=-h*h+d*(d+2*l)+c);else d=a>0?-s:s,h=Math.max(0,-(a*d+o)),u=-h*h+d*(d+2*l)+c;return i&&i.copy(this.origin).addScaledVector(this.direction,h),r&&r.copy(_b).addScaledVector(Qg,d),u}intersectSphere(e,t){gl.subVectors(e.center,this.origin);let i=gl.dot(this.direction),r=gl.dot(gl)-i*i,s=e.radius*e.radius;if(r>s)return null;let a=Math.sqrt(s-r),o=i-a,l=i+a;return l<0?null:o<0?this.at(l,t):this.at(o,t)}intersectsSphere(e){return e.radius<0?!1:this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){let t=e.normal.dot(this.direction);if(t===0)return e.distanceToPoint(this.origin)===0?0:null;let i=-(this.origin.dot(e.normal)+e.constant)/t;return i>=0?i:null}intersectPlane(e,t){let i=this.distanceToPlane(e);return i===null?null:this.at(i,t)}intersectsPlane(e){let t=e.distanceToPoint(this.origin);return t===0||e.normal.dot(this.direction)*t<0}intersectBox(e,t){let i,r,s,a,o,l,c=1/this.direction.x,f=1/this.direction.y,h=1/this.direction.z,d=this.origin;return c>=0?(i=(e.min.x-d.x)*c,r=(e.max.x-d.x)*c):(i=(e.max.x-d.x)*c,r=(e.min.x-d.x)*c),f>=0?(s=(e.min.y-d.y)*f,a=(e.max.y-d.y)*f):(s=(e.max.y-d.y)*f,a=(e.min.y-d.y)*f),i>a||s>r||((s>i||isNaN(i))&&(i=s),(a=0?(o=(e.min.z-d.z)*h,l=(e.max.z-d.z)*h):(o=(e.max.z-d.z)*h,l=(e.min.z-d.z)*h),i>l||o>r)||((o>i||i!==i)&&(i=o),(l=0?i:r,t)}intersectsBox(e){return this.intersectBox(e,gl)!==null}intersectTriangle(e,t,i,r,s){gb.subVectors(t,e),Jg.subVectors(i,e),vb.crossVectors(gb,Jg);let a=this.direction.dot(vb),o;if(a>0){if(r)return null;o=1}else if(a<0)o=-1,a=-a;else return null;Lc.subVectors(this.origin,e);let l=o*this.direction.dot(Jg.crossVectors(Lc,Jg));if(l<0)return null;let c=o*this.direction.dot(gb.cross(Lc));if(c<0||l+c>a)return null;let f=-o*Lc.dot(vb);return f<0?null:this.at(f/a,s)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}},Va=class extends Ur{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new ct(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Ua,this.combine=Wp,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}},FN=new li,Qf=new Io,$g=new ts,wN=new ne,ev=new ne,tv=new ne,iv=new ne,Eb=new ne,rv=new ne,BN=new ne,nv=new ne,ci=class extends nr{constructor(e=new sr,t=new Va){super(),this.isMesh=!0,this.type="Mesh",this.geometry=e,this.material=t,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.count=1,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),e.morphTargetInfluences!==void 0&&(this.morphTargetInfluences=e.morphTargetInfluences.slice()),e.morphTargetDictionary!==void 0&&(this.morphTargetDictionary=Object.assign({},e.morphTargetDictionary)),this.material=Array.isArray(e.material)?e.material.slice():e.material,this.geometry=e.geometry,this}updateMorphTargets(){let t=this.geometry.morphAttributes,i=Object.keys(t);if(i.length>0){let r=t[i[0]];if(r!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let s=0,a=r.length;s(e.far-e.near)**2))&&(FN.copy(s).invert(),Qf.copy(e.ray).applyMatrix4(FN),!(i.boundingBox!==null&&Qf.intersectsBox(i.boundingBox)===!1)&&this._computeIntersections(e,t,Qf)))}_computeIntersections(e,t,i){let r,s=this.geometry,a=this.material,o=s.index,l=s.attributes.position,c=s.attributes.uv,f=s.attributes.uv1,h=s.attributes.normal,d=s.groups,u=s.drawRange;if(o!==null)if(Array.isArray(a))for(let m=0,_=d.length;m<_;m++){let p=d[m],g=a[p.materialIndex],v=Math.max(p.start,u.start),x=Math.min(o.count,Math.min(p.start+p.count,u.start+u.count));for(let A=v,E=x;A1)?null:t.copy(e.start).addScaledVector(r,a)}intersectsLine(e){let t=this.distanceToPoint(e.start),i=this.distanceToPoint(e.end);return t<0&&i>0||i<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){let i=t||bq.getNormalMatrix(e),r=this.coplanarPoint(Ab).applyMatrix4(e),s=this.normal.applyMatrix3(i).normalize();return this.constant=-r.dot(s),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new this.constructor().copy(this)}},Jf=new ts,Iq=new Lt(.5,.5),lv=new ne,eu=class{constructor(e=new ia,t=new ia,i=new ia,r=new ia,s=new ia,a=new ia){this.planes=[e,t,i,r,s,a]}set(e,t,i,r,s,a){let o=this.planes;return o[0].copy(e),o[1].copy(t),o[2].copy(i),o[3].copy(r),o[4].copy(s),o[5].copy(a),this}copy(e){let t=this.planes;for(let i=0;i<6;i++)t[i].copy(e.planes[i]);return this}setFromProjectionMatrix(e,t=wa,i=!1){let r=this.planes,s=e.elements,a=s[0],o=s[1],l=s[2],c=s[3],f=s[4],h=s[5],d=s[6],u=s[7],m=s[8],_=s[9],p=s[10],g=s[11],v=s[12],x=s[13],A=s[14],E=s[15];if(r[0].setComponents(c-a,u-f,g-m,E-v).normalize(),r[1].setComponents(c+a,u+f,g+m,E+v).normalize(),r[2].setComponents(c+o,u+h,g+_,E+x).normalize(),r[3].setComponents(c-o,u-h,g-_,E-x).normalize(),i)r[4].setComponents(l,d,p,A).normalize(),r[5].setComponents(c-l,u-d,g-p,E-A).normalize();else if(r[4].setComponents(c-l,u-d,g-p,E-A).normalize(),t===wa)r[5].setComponents(c+l,u+d,g+p,E+A).normalize();else if(t===zd)r[5].setComponents(l,d,p,A).normalize();else throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+t);return this}intersectsObject(e){if(e.boundingSphere!==void 0)e.boundingSphere===null&&e.computeBoundingSphere(),Jf.copy(e.boundingSphere).applyMatrix4(e.matrixWorld);else{let t=e.geometry;t.boundingSphere===null&&t.computeBoundingSphere(),Jf.copy(t.boundingSphere).applyMatrix4(e.matrixWorld)}return this.intersectsSphere(Jf)}intersectsSprite(e){Jf.center.set(0,0,0);let t=Iq.distanceTo(e.center);return Jf.radius=.7071067811865476+t,Jf.applyMatrix4(e.matrixWorld),this.intersectsSphere(Jf)}intersectsSphere(e){let t=this.planes,i=e.center,r=-e.radius;for(let s=0;s<6;s++)if(t[s].distanceToPoint(i)0?e.max.x:e.min.x,lv.y=r.normal.y>0?e.max.y:e.min.y,lv.z=r.normal.z>0?e.max.z:e.min.z,r.distanceToPoint(lv)<0)return!1}return!0}containsPoint(e){let t=this.planes;for(let i=0;i<6;i++)if(t[i].distanceToPoint(e)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}},Fs=class extends Ur{constructor(e){super(),this.isLineBasicMaterial=!0,this.type="LineBasicMaterial",this.color=new ct(16777215),this.map=null,this.linewidth=1,this.linecap="round",this.linejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.linewidth=e.linewidth,this.linecap=e.linecap,this.linejoin=e.linejoin,this.fog=e.fog,this}},Lv=new ne,Ov=new ne,XN=new li,gp=new Io,cv=new ts,xb=new ne,YN=new ne,ch=class extends nr{constructor(e=new sr,t=new Fs){super(),this.isLine=!0,this.type="Line",this.geometry=e,this.material=t,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),this.material=Array.isArray(e.material)?e.material.slice():e.material,this.geometry=e.geometry,this}computeLineDistances(){let e=this.geometry;if(e.index===null){let t=e.attributes.position,i=[0];for(let r=1,s=t.count;r0){let r=t[i[0]];if(r!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let s=0,a=r.length;s0){let r=t[i[0]];if(r!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let s=0,a=r.length;s0?1:-1,f.push(Y.x,Y.y,Y.z),h.push(j/R),h.push(1-Q/I),G+=1}}for(let Q=0;Q[vd(l.sourcePath,l.sourceExt,l.targetExt),l]));function a(){let l=t();i(l),e==null||e(l)}return(n.length!==r.length||r.some((l,c)=>!Gj(l,n[c])))&&(e==null||e(r)),{get(l,c,f){return s.get(vd(l,c,f))},set(l){s.set(vd(l.sourcePath,l.sourceExt,l.targetExt),l),a()},delete(l,c,f){let h=s.delete(vd(l,c,f));return h&&a(),h},clear(){s.size!==0&&(s.clear(),a())},entries(){return t()}}}var sb=C(()=>{"use strict"});function Oa(n){return n.trim().toLowerCase().replace(/^\./,"")}function ab(n){return kj.get(Oa(n))}function dl(n){let e=ab(n);return!!(e!=null&&e.enabled)}function cp(n){return["splat","spz","sog"].includes(Oa(n))}function ul(){return oN.filter(n=>n.enabled).map(n=>n.ext)}var oN,kj,To=C(()=>{"use strict";oN=[{ext:"glb",family:"mesh",strategy:"direct",directLoader:"babylon",enabled:!0},{ext:"gltf",family:"mesh",strategy:"direct",directLoader:"babylon",enabled:!0},{ext:"stl",family:"mesh",strategy:"direct",directLoader:"custom-stl",enabled:!0},{ext:"obj",family:"mesh",strategy:"direct",directLoader:"babylon",converterId:"obj2gltf",outputFormat:"glb",enabled:!0},{ext:"ply",family:"mesh",strategy:"direct",directLoader:"custom-ply",enabled:!0},{ext:"fbx",family:"mesh",strategy:"convert",converterId:"fbx2gltf",outputFormat:"glb",enabled:!0},{ext:"step",family:"cad",strategy:"convert",converterId:"freecad",outputFormat:"glb",enabled:!0},{ext:"stp",family:"cad",strategy:"convert",converterId:"freecad",outputFormat:"glb",enabled:!0},{ext:"iges",family:"cad",strategy:"convert",converterId:"freecad",outputFormat:"glb",enabled:!0},{ext:"igs",family:"cad",strategy:"convert",converterId:"freecad",outputFormat:"glb",enabled:!0},{ext:"brep",family:"cad",strategy:"convert",converterId:"freecad",outputFormat:"glb",enabled:!0},{ext:"sldprt",family:"cad",strategy:"convert",converterId:"sldprt",outputFormat:"glb",enabled:!0},{ext:"3mf",family:"mesh",strategy:"convert",converterId:"assimp",outputFormat:"glb",enabled:!0},{ext:"dae",family:"mesh",strategy:"convert",converterId:"assimp",outputFormat:"glb",enabled:!0}],kj=new Map(oN.map(n=>[n.ext,n]))});var ob,hN=C(()=>{"use strict";ob={"settings.title":"AI 3d model workbench","settings.folders":"Folders","settings.behavior":"Behavior","settings.converters":"Converters","settings.converterMenu":"Model converters","settings.converterMenu.desc":"Closed by default. Open this section only when you want to manually enable an optional local conversion route.","settings.environmentInspector":"Environment inspector","settings.environmentInspector.desc":"Closed by default. Open this section when you need to configure command paths or run environment checks.","settings.paths":"Converter paths","settings.diagnostics":"Converter command diagnostics","settings.performance":"Performance & display","settings.mobileSupport":"Mobile support","settings.knowledgeGeneration":"Knowledge generation","settings.sourceModelFolder":"Source model folder","settings.sourceModelFolder.desc":"Vault folder where source model files are stored.","settings.reportFolder":"Report folder","settings.reportFolder.desc":"Vault folder where generated knowledge notes are saved.","settings.partFolder":"Part notes folder","settings.partFolder.desc":"Vault folder where generated part note drafts are saved.","settings.snapshotFolder":"Snapshot folder","settings.snapshotFolder.desc":"Vault folder where exported snapshots are saved.","settings.autoGenerateKnowledgeNotes":"Auto-generate knowledge notes","settings.autoGenerateKnowledgeNotes.desc":"Reserved for a future automation flow. For now, generate notes manually from the command palette.","settings.annotationPreviewMode":"Annotation preview mode","settings.annotationPreviewMode.desc":"Choose how bound note previews render in annotation popovers and the editor.","settings.annotationPreviewMode.plainText":"Plain text","settings.annotationPreviewMode.markdown":"Markdown","settings.previewRendererRollout":"Preview compatibility mode","settings.previewRendererRollout.desc":"Controls how widely the Three.js preview path is used for single-model previews (GLB, GLTF, STL, PLY, OBJ). Switch back to Compatibility mode if pin projection, occlusion, edit pins, snapshots, or toolbar behavior regress. 3dgrid is not affected by this setting.","settings.previewRendererRollout.babylonSafe":"Compatibility mode","settings.previewRendererRollout.readonly":"Reading surfaces only","settings.previewRendererRollout.direct":"Reading + file view (Recommended)","settings.useThreeRenderer":"Use Three.js renderer","settings.useThreeRenderer.desc":"Toggle between Three.js (faster, lighter) and Babylon.js (full compatibility) for single-model previews. Three.js supports GLB/GLTF/STL/PLY/OBJ. 3dgrid always uses Babylon.js.","settings.experimentalThreeWorkbench":"Experimental Three workbench","settings.experimentalThreeWorkbench.desc":"Try the Three.js workbench path for direct GLB/GLTF files only. If loading fails, the file view falls back to Babylon.js automatically.","settings.autoRotateDefault":"Auto-rotate by default","settings.autoRotateDefault.desc":"Start model previews with auto-rotation enabled.","settings.snapshotNaming":"Snapshot naming","settings.snapshotNaming.desc":"How exported snapshot files are named.","settings.snapshotNaming.modelName":"Model name + timestamp","settings.snapshotNaming.timestamp":"Timestamp only","settings.logLevel":"Log level","settings.logLevel.desc":"Controls plugin runtime log verbosity in the developer console.","settings.language":"Language","settings.language.desc":"Display language for plugin settings. Takes effect immediately.","settings.analysisMode":"AI drafting mode","settings.analysisMode.desc":"Controls whether knowledge-note generation stays local or also requests a sanitized remote draft. Raw model upload is blocked by the current client.","settings.analysisMode.local":"Local evidence only","settings.analysisMode.hybrid":"Local evidence + remote draft","settings.analysisMode.remote":"Remote draft from evidence","settings.serviceBaseUrl":"Draft service URL","settings.serviceBaseUrl.desc":"Optional base URL for a service that accepts POST /draft-note. Leave empty to keep all drafting local.","settings.sendGeometrySummaryToRemote":"Send geometry summary","settings.sendGeometrySummaryToRemote.desc":"Allow sanitized mesh counts, bounds, part candidates, annotation coordinates, and nearest-part links to be included in remote draft input.","settings.sendPreviewImagesToRemote":"Send preview image references","settings.sendPreviewImagesToRemote.desc":"Allow generated preview image paths to be listed in the remote draft input. Image bytes are not uploaded by this client.","settings.sendRawModelToRemote":"Send raw model file","settings.sendRawModelToRemote.desc":"Reserved for future explicit upload support. If enabled manually, remote draft requests are blocked instead of uploading the model.","settings.enableCad":"Enable cad conversion for step, iges, and brep files","settings.enableCad.desc":"Enable cad conversion for step, iges, and brep formats. Requires cadquery and trimesh in your python environment.","settings.enableObj2gltf":"Enable obj2gltf converter (experimental)","settings.enableObj2gltf.desc":"Keep obj direct loading as the default. Enable this only if you want an optional local normalization route through obj2gltf.","settings.preferObj2gltf":"Prefer obj2gltf for obj","settings.preferObj2gltf.desc":"Recommended default is off. Turn this on only when you want normalized output files or direct obj loading is not good enough.","settings.enableFbx2gltf":"Enable FBX2glTF converter","settings.enableFbx2gltf.desc":"Enable conversion for fbx files via FBX2glTF. Requires the FBX2glTF binary installed locally.","settings.enableMesh":"Enable mesh conversion for 3mf and dae files","settings.enableMesh.desc":"Enable conversion for 3mf and dae formats via python trimesh. Requires trimesh, numpy, networkx, and pycollada in your python environment.","settings.enableSldprt":"Enable sldprt conversion for SolidWorks files","settings.enableSldprt.desc":"Enable conversion for SolidWorks sldprt files via FreeCAD. Requires FreeCAD installed locally.","settings.mobileSupport.desc":"On iOS, iPadOS, and Android, direct formats like GLB, GLTF, STL, OBJ, and PLY are supported. Local converter settings and diagnostics remain desktop-only.","settings.pythonCmd":"Path to the python command for cad conversion","settings.pythonCmd.desc":"Optional path to the python command used for cad conversion. Windows usually uses py. macOS and Linux usually use python3. Overrides auto-discovery when set.","settings.freecadCmd":"Path to the FreeCAD command for sldprt conversion","settings.freecadCmd.desc":"Optional path to the FreeCAD command used for SolidWorks file conversion. Windows usually uses FreeCADCmd.exe, macOS usually uses FreeCADCmd, and Linux usually uses freecadcmd. Overrides auto-discovery when set.","settings.obj2gltfCmd":"Path to the obj2gltf command","settings.obj2gltfCmd.desc":"Optional path to the obj2gltf command. Windows usually uses obj2gltf.cmd, and macOS and Linux usually use obj2gltf. Overrides auto-discovery when set.","settings.fbx2gltfCmd":"FBX2glTF command path","settings.fbx2gltfCmd.desc":"Optional path to the FBX2glTF command. Windows usually uses FBX2glTF.exe, and macOS and Linux usually use FBX2glTF. Overrides auto-discovery when set.","settings.assimpCmd":"Path to the python command for 3mf and dae conversion","settings.assimpCmd.desc":"Optional path to the python command used for 3mf and dae conversion. Windows usually uses py. macOS and Linux usually use python3. Overrides auto-discovery when set.","settings.diagnostics.desc":"Shows the exact executable path the plugin would use right now and runs lightweight self-checks for Python environments and converter CLIs.","settings.diagnostics.idle":"Diagnostics are off by default. Click Check now to run them manually.","settings.diagnostics.checkNow":"Check now","settings.diagnostics.checking":"Checking...","settings.diagnostics.refreshed":"Converter command diagnostics refreshed.","settings.diagnostics.checkingAvailability":"Checking converter command availability...","settings.diagnostics.available":"available","settings.diagnostics.notFound":"not found","settings.diagnostics.sourceLabel":"Source","settings.diagnostics.commandLabel":"Command","settings.diagnostics.resolvedPathLabel":"Resolved path","settings.diagnostics.selfCheckLabel":"Self-check","settings.diagnostics.selfCheckOk":"passed","settings.diagnostics.selfCheckFailed":"failed","settings.diagnostics.cadPythonCheck":"Python packages (cadquery, trimesh)","settings.diagnostics.meshPythonCheck":"Python packages (trimesh, numpy, networkx, collada)","settings.diagnostics.freecadCmdCheck":"FreeCADCmd launch probe","settings.diagnostics.obj2gltfCheck":"obj2gltf launch probe","settings.diagnostics.fbx2gltfCheck":"FBX2glTF launch probe","settings.canvasHeight":"Default canvas height","settings.canvasHeight.desc":"Default height (px) for inline model previews. Range: 200\u2013800.","settings.autoRotateSpeed":"Auto-rotate speed","settings.autoRotateSpeed.desc":"Rotation speed when auto-rotate is enabled. Range: 0.1\u20132.0.","settings.renderQuality":"Render quality","settings.renderQuality.desc":"Higher quality uses more GPU resources. Affects anti-aliasing and resolution.","settings.renderScale":"Resolution scale","settings.renderScale.desc":"Render resolution multiplier. 1.0 = native, 0.5 = half, 2.0 = double (supersampling). Range: 0.25\u20132.0.","modelLoad.warningTitle":"Model preview unavailable","modelLoad.warningMessage":"{ext} files need the {converterName} converter enabled in plugin settings before they can load.","modelLoad.warningHint":"Enable the matching converter in plugin settings, then reload this file.","modelLoad.mobileWarningMessage":"{ext} files need local conversion tools that are unavailable on iOS, iPadOS, and Android.","modelLoad.mobileWarningHint":"Open this file on desktop, or convert it to GLB, GLTF, OBJ, STL, or PLY first.","modelLoad.errorTitle":"Couldn't display this model","modelLoad.errorMessage":"Failed to load: {reason}","modelLoad.errorHint":"Check the file format or open the developer console for details.","headingPin.showSingle":"Show linked pin","headingPin.showMultiple":"Show linked pins","headingPin.linkedTo":"Pin linked to: {models}","helper.resetViewLabel":"Reset view","helper.resetViewDone":"Reset","helper.copyModelInfoLabel":"Copy model info as Markdown","helper.copySelectedPartInfoLabel":"Copy selected part info","helper.noSelectedPart":"Select a part first","helper.copied":"Copied!","helper.failed":"Failed","helper.toggleWireframeLabel":"Toggle wireframe","helper.wireframeOn":"Wireframe","helper.wireframeOff":"Solid","helper.toggleAxesLabel":"Toggle orientation axes","helper.axesOn":"Axes on","helper.axesOff":"Axes off","helper.toggleBoundingBoxLabel":"Toggle bounding box","helper.boundingBoxOn":"Bounding box on","helper.boundingBoxOff":"Bounding box off","helper.toggleFocusSelectionLabel":"Focus selected part","helper.focusSelectionOn":"Focus mode on","helper.focusSelectionOff":"Focus mode off","helper.toggleDisassemblyLabel":"Toggle disassembly mode","helper.disassemblyOn":"Disassembly on","helper.disassemblyOff":"Disassembly off","helper.resetPartsLabel":"Reset disassembled parts","helper.partsReset":"Parts reset","helper.changeResolutionLabel":"Change resolution","helper.resolutionValue":"Resolution: {value}","helper.toggleAnimationLabel":"Play or pause animation","helper.playing":"Playing","helper.paused":"Paused","helper.removePreviewLabel":"Remove preview","helper.copySnapshotLabel":"Copy snapshot","helper.saveSnapshotLabel":"Save snapshot to vault","helper.saved":"Saved!","helper.downloadSnapshotLabel":"Download snapshot","helper.downloaded":"Downloaded!","helper.toggleAnnotationLabel":"Toggle annotation mode","helper.toggleAnnotationsVisibilityLabel":"Show or hide annotations","helper.annotateOn":"Annotation mode on","helper.annotateOff":"Annotation mode off","helper.annotationsVisible":"Annotations shown","helper.annotationsHidden":"Annotations hidden","helper.enableInteractionLabel":"Enable touch interaction","helper.disableInteractionLabel":"Return to scroll mode","helper.interactionOn":"Model interaction on","helper.interactionOff":"Scroll mode on","helper.showMoreActionsLabel":"Show more actions","helper.hideMoreActionsLabel":"Hide extra actions","helper.moreActionsShown":"More actions shown","helper.moreActionsHidden":"Extra actions hidden","helper.interactAction":"Interact","helper.scrollAction":"Scroll","workbench.emptyTitle":"No model","workbench.emptyText":'Use the "import 3D model" command to load a GLB, GLTF, STL, OBJ, or PLY file.',"workbench.modelTitle":"Model","workbench.studioTitle":"AI Model Workbench","workbench.studioTagline":"Inspect, annotate, and turn 3D assets into linked notes.","workbench.navLabel":"Workbench sections","workbench.navGallery":"Gallery","workbench.navLibrary":"Library","workbench.navNotebooks":"Notebooks","workbench.navSettings":"Settings","workbench.sourcesTitle":"Model sources","workbench.layersTitle":"Review layers","workbench.viewModeTitle":"View mode","workbench.modeMesh":"Mesh view","workbench.modeFocus":"Focus selection","workbench.modeMeshShort":"Mesh","workbench.modeFocusShort":"Focus","workbench.previewViewsTitle":"Preview views","workbench.connectionsTitle":"Knowledge connections","workbench.currentModelLabel":"Current model","workbench.noReportYet":"No report note yet","workbench.noIndexYet":"No knowledge index yet. Generate a knowledge note first.","workbench.noModelLoaded":"No model loaded","workbench.disassemblyTitle":"Disassembly","workbench.explodeLabel":"Explode","workbench.summaryTitle":"Summary","workbench.meshesLabel":"Meshes","workbench.splatsLabel":"Splats","workbench.trianglesLabel":"Triangles","workbench.verticesLabel":"Vertices","workbench.materialsLabel":"Materials","workbench.boundingSizeLabel":"Bounds","workbench.centerLabel":"Center","workbench.selectedPartTitle":"Selected Part","workbench.partMeshLabel":"Mesh","workbench.noSelectedPart":"Click a model part to inspect it here.","workbench.tagsTitle":"Tags","workbench.noTagsYet":"No tags yet","workbench.addTagPlaceholder":"Add tag...","workbench.addTagAction":"Add","workbench.annotationsTitle":"Annotations","workbench.exitAnnotate":"Exit annotate","workbench.annotate":"Annotate","workbench.annotateHintActive":"Click the model to add a label \xB7 press Esc to exit","workbench.annotateHintActiveMobile":"Tap the model to add a label. Switch back to Scroll when you want to move through the note again.","workbench.pinCount":"{count} pin(s)","workbench.editAction":"Edit","workbench.deleteAction":"Delete","workbench.resetViewAction":"Reset view","workbench.insertInfoAction":"Insert info","workbench.insertGalleryAction":"Insert Gallery","workbench.insertCompareAction":"Insert Compare","workbench.playAction":"Play","workbench.pauseAction":"Pause","workbench.saveProfileAction":"Save profile","workbench.generateNoteAction":"Generate note","workbench.openNoteAction":"Open note","workbench.openIndexAction":"Open index","workbench.recordTitle":"Specimen card","workbench.recordSubtitle":"Current asset profile","workbench.notesTitle":"Analysis notes","workbench.whereTitle":"Where it connects","workbench.noteReady":"Linked note ready","workbench.indexReady":"Knowledge index ready","workbench.notePending":"Linked note pending","workbench.analysisLabel":"Analysis","workbench.settingsUnavailable":"Open this plugin from Obsidian settings to change workbench options.","workbench.profileSaved":"Profile saved","workbench.viewReset":"View reset","workbench.infoInserted":"Model info inserted","workbench.infoCopied":"Model info copied","workbench.templateInserted":"Template inserted","workbench.templateCopied":"Template copied","workbench.mobileHint":"Mobile tip: tap Interact to move the model, then switch back to Scroll to keep reading the note.","workbench.mobileHintInteractive":"Interaction mode is on. Switch back to Scroll when you want to move through the note again.","directView.mobileHint":"Mobile tip: use the toolbar Interact button to switch between model interaction and note scrolling.","directWorkbench.backendLabel":"Backend","directWorkbench.routeLabel":"Route","directWorkbench.performanceLabel":"Performance","directWorkbench.partCandidatesLabel":"Part candidates","directWorkbench.explodeAxisLabel":"Explode axis","directWorkbench.explodeResetLabel":"Reset","directWorkbench.knowledgeTitle":"Knowledge","directWorkbench.registeredTitle":"Registered part matches","directWorkbench.registeredLoading":"Checking...","directWorkbench.registeredCount":"{count} match(es)","directWorkbench.registeredEmpty":"No cross-model part match yet","directWorkbench.registeredUnavailable":"Part evidence unavailable","directWorkbench.registeredOpen":"Open","directWorkbench.registeredOpenNote":"Note","directWorkbench.registeredOpenModel":"Model","directWorkbench.registeredSourceModel":"From {model}","directWorkbench.registeredTargetPartNote":"Opens matched part note","directWorkbench.registeredTargetSourceModel":"Opens source model","directWorkbench.registeredTargetUnavailable":"No linked target","workbench.fileNotFound":"File not found: {path}","annotation.selectColor":"Select color {color}","annotation.sectionEmpty":"Section is empty.","modal.selectModel":"Select a 3D model...","main.commandImportModel":"Import a 3D model","main.commandGenerateNote":"Generate knowledge note","main.commandOpenKnowledgeIndex":"Open knowledge index","main.commandClearConversionCache":"Clear conversion cache","main.commandCheckConverters":"Check converters","main.commandCopyDiagnostics":"Copy diagnostics report","main.converterDiagnosticsMobileUnavailable":"Converter diagnostics are only available on desktop. On iOS, iPadOS, and Android, direct formats can still load.","main.diagnosticsCopied":"AI Model Workbench diagnostics copied to clipboard.","main.diagnosticsCopyFailed":"Couldn't copy diagnostics. A sanitized diagnostics note was created instead.","codeBlock.noModelPathOrConfig":"No model path or config specified.","codeBlock.jsonParseError":"JSON parse error: {error}","codeBlock.jsonParseLine":" (line {line})","codeBlock.noModelsInConfig":"No models specified in config.","codeBlock.unsupportedFormat":"Unsupported format: {ext}. Supported: {formats}","codeBlock.splatDisabled":"SPLAT preview is disabled in packaged builds. Local-only .splat support is planned first; .spz/.sog need locally bundled decoders before reevaluation.","codeBlock.noConfigSpecified":"No config specified.","codeBlock.noModelsSpecified":"No models specified.","codeBlock.mobileHint":"Mobile tip: use Interact to manipulate the model, then switch back to Scroll to keep moving through the note.","codeBlock.renderingGrid":"Rendering grid...","codeBlock.composeRequiresSections":'"compose" preset requires a "sections" array.',"codeBlock.composeNoValidSections":"Compose: no valid sections.","codeBlock.unknownPreset":'Unknown preset: "{preset}". Available: compare, showcase, explode, timeline, compose',"codeBlock.presetRequiresModels":'Preset "{preset}" requires {min}-{max} models, got {count}.',"codeBlock.gridFailed":"Grid failed: {reason}","livePreview.mobileHint":"Mobile tip: switch between Interact and Scroll depending on whether you want to move the model or keep reading.","loading.default":"Loading...","loading.preparingModel":"Preparing model...","loading.loadingModel":"Loading model..."}});var dN,uN=C(()=>{"use strict";dN={"settings.title":"AI 3D \u6A21\u578B\u5DE5\u4F5C\u53F0","settings.folders":"\u6587\u4EF6\u5939","settings.behavior":"\u884C\u4E3A","settings.converters":"\u8F6C\u6362\u5668","settings.converterMenu":"\u6A21\u578B\u8F6C\u6362\u5668","settings.converterMenu.desc":"\u9ED8\u8BA4\u6536\u8D77\u3002\u4EC5\u5728\u4F60\u9700\u8981\u624B\u52A8\u542F\u7528\u67D0\u6761\u672C\u5730\u8F6C\u6362\u8DEF\u7EBF\u65F6\u518D\u5C55\u5F00\u3002","settings.environmentInspector":"\u73AF\u5883\u68C0\u67E5\u5668","settings.environmentInspector.desc":"\u9ED8\u8BA4\u6536\u8D77\u3002\u4EC5\u5728\u9700\u8981\u914D\u7F6E\u547D\u4EE4\u8DEF\u5F84\u6216\u624B\u52A8\u6267\u884C\u73AF\u5883\u68C0\u67E5\u65F6\u518D\u5C55\u5F00\u3002","settings.paths":"\u8F6C\u6362\u5668\u8DEF\u5F84","settings.diagnostics":"\u8F6C\u6362\u5668\u547D\u4EE4\u8BCA\u65AD","settings.performance":"\u6027\u80FD\u4E0E\u663E\u793A","settings.mobileSupport":"\u79FB\u52A8\u7AEF\u652F\u6301","settings.knowledgeGeneration":"\u77E5\u8BC6\u751F\u6210","settings.sourceModelFolder":"\u6E90\u6A21\u578B\u6587\u4EF6\u5939","settings.sourceModelFolder.desc":"\u5B58\u653E\u6E90 3D \u6A21\u578B\u7684\u5E93\u6587\u4EF6\u5939\u3002","settings.reportFolder":"\u62A5\u544A\u6587\u4EF6\u5939","settings.reportFolder.desc":"\u4FDD\u5B58\u751F\u6210\u7684\u77E5\u8BC6\u7B14\u8BB0\u7684\u5E93\u6587\u4EF6\u5939\u3002","settings.partFolder":"\u90E8\u4EF6\u7B14\u8BB0\u6587\u4EF6\u5939","settings.partFolder.desc":"\u4FDD\u5B58\u751F\u6210\u7684\u90E8\u4EF6\u7B14\u8BB0\u8349\u7A3F\u7684\u5E93\u6587\u4EF6\u5939\u3002","settings.snapshotFolder":"\u5FEB\u7167\u6587\u4EF6\u5939","settings.snapshotFolder.desc":"\u4FDD\u5B58\u5BFC\u51FA\u5FEB\u7167\u7684\u5E93\u6587\u4EF6\u5939\u3002","settings.autoGenerateKnowledgeNotes":"\u81EA\u52A8\u751F\u6210\u77E5\u8BC6\u7B14\u8BB0","settings.autoGenerateKnowledgeNotes.desc":"\u9884\u7559\u7ED9\u540E\u7EED\u81EA\u52A8\u5316\u6D41\u7A0B\u3002\u5F53\u524D\u8BF7\u901A\u8FC7\u547D\u4EE4\u6216\u5DE5\u4F5C\u53F0\u6309\u94AE\u624B\u52A8\u751F\u6210\u77E5\u8BC6\u7B14\u8BB0\u3002","settings.annotationPreviewMode":"\u6807\u6CE8\u9884\u89C8\u6A21\u5F0F","settings.annotationPreviewMode.desc":"\u9009\u62E9\u6807\u6CE8\u7ED1\u5B9A\u7B14\u8BB0\u5728\u60AC\u6D6E\u9884\u89C8\u548C\u7F16\u8F91\u5668\u4E2D\u7684\u663E\u793A\u65B9\u5F0F\u3002","settings.annotationPreviewMode.plainText":"\u7EAF\u6587\u672C","settings.annotationPreviewMode.markdown":"Markdown","settings.previewRendererRollout":"\u9884\u89C8\u517C\u5BB9\u6A21\u5F0F","settings.previewRendererRollout.desc":"\u63A7\u5236\u5355\u6A21\u578B\u9884\u89C8\uFF08GLB\u3001GLTF\u3001STL\u3001PLY\u3001OBJ\uFF09\u4E2D Three.js \u6E32\u67D3\u8DEF\u5F84\u7684\u542F\u7528\u8303\u56F4\u3002\u53EA\u8981\u51FA\u73B0 pin \u6295\u5F71\u3001\u906E\u6321\u3001\u7F16\u8F91\u6001 pin\u3001\u5FEB\u7167\u6216\u5DE5\u5177\u680F\u884C\u4E3A\u56DE\u9000\uFF0C\u5C31\u5207\u56DE\u201C\u517C\u5BB9\u4F18\u5148\u201D\u3002workbench \u548C 3dgrid \u4E0D\u53D7\u8FD9\u4E2A\u8BBE\u7F6E\u5F71\u54CD\u3002","settings.previewRendererRollout.babylonSafe":"\u517C\u5BB9\u4F18\u5148","settings.previewRendererRollout.readonly":"\u4EC5\u9605\u8BFB\u573A\u666F","settings.previewRendererRollout.direct":"\u9605\u8BFB + \u6587\u4EF6\u89C6\u56FE\uFF08\u63A8\u8350\uFF09","settings.useThreeRenderer":"\u4F7F\u7528 Three.js \u6E32\u67D3\u5668","settings.useThreeRenderer.desc":"\u5728 Three.js\uFF08\u66F4\u5FEB\u3001\u66F4\u8F7B\u91CF\uFF09\u548C Babylon.js\uFF08\u5B8C\u5168\u517C\u5BB9\uFF09\u4E4B\u95F4\u5207\u6362\u5355\u6A21\u578B\u9884\u89C8\u6E32\u67D3\u5668\u3002Three.js \u652F\u6301 GLB/GLTF/STL/PLY/OBJ\u3002\u5DE5\u4F5C\u53F0\u548C 3dgrid \u59CB\u7EC8\u4F7F\u7528 Babylon.js\u3002","settings.experimentalThreeWorkbench":"\u5B9E\u9A8C\u6027 Three \u5DE5\u4F5C\u53F0","settings.experimentalThreeWorkbench.desc":"\u4EC5\u5BF9\u76F4\u8BFB GLB/GLTF \u6587\u4EF6\u5C1D\u8BD5\u4F7F\u7528 Three.js \u5DE5\u4F5C\u53F0\u8DEF\u5F84\u3002\u52A0\u8F7D\u5931\u8D25\u65F6\uFF0C\u6587\u4EF6\u89C6\u56FE\u4F1A\u81EA\u52A8\u56DE\u9000\u5230 Babylon.js\u3002","settings.autoRotateDefault":"\u9ED8\u8BA4\u81EA\u52A8\u65CB\u8F6C","settings.autoRotateDefault.desc":"\u542F\u52A8 3D \u9884\u89C8\u65F6\u9ED8\u8BA4\u5F00\u542F\u81EA\u52A8\u65CB\u8F6C\u3002","settings.snapshotNaming":"\u5FEB\u7167\u547D\u540D","settings.snapshotNaming.desc":"\u5BFC\u51FA\u5FEB\u7167\u6587\u4EF6\u7684\u547D\u540D\u65B9\u5F0F\u3002","settings.snapshotNaming.modelName":"\u6A21\u578B\u540D + \u65F6\u95F4\u6233","settings.snapshotNaming.timestamp":"\u4EC5\u65F6\u95F4\u6233","settings.logLevel":"\u65E5\u5FD7\u7EA7\u522B","settings.logLevel.desc":"\u63A7\u5236\u63D2\u4EF6\u5728\u5F00\u53D1\u8005\u63A7\u5236\u53F0\u4E2D\u7684\u65E5\u5FD7\u8BE6\u7EC6\u7A0B\u5EA6\u3002","settings.language":"\u8BED\u8A00","settings.language.desc":"\u63D2\u4EF6\u8BBE\u7F6E\u754C\u9762\u7684\u663E\u793A\u8BED\u8A00\u3002\u7ACB\u5373\u751F\u6548\u3002","settings.analysisMode":"AI \u8349\u7A3F\u6A21\u5F0F","settings.analysisMode.desc":"\u63A7\u5236\u77E5\u8BC6\u7B14\u8BB0\u751F\u6210\u4FDD\u6301\u672C\u5730\uFF0C\u8FD8\u662F\u989D\u5916\u8BF7\u6C42\u7ECF\u8FC7\u88C1\u526A\u7684\u8FDC\u7A0B\u8349\u7A3F\u3002\u5F53\u524D\u5BA2\u6237\u7AEF\u4F1A\u963B\u6B62\u539F\u59CB\u6A21\u578B\u4E0A\u4F20\u3002","settings.analysisMode.local":"\u4EC5\u672C\u5730\u8BC1\u636E","settings.analysisMode.hybrid":"\u672C\u5730\u8BC1\u636E + \u8FDC\u7A0B\u8349\u7A3F","settings.analysisMode.remote":"\u57FA\u4E8E\u8BC1\u636E\u7684\u8FDC\u7A0B\u8349\u7A3F","settings.serviceBaseUrl":"\u8349\u7A3F\u670D\u52A1 URL","settings.serviceBaseUrl.desc":"\u53EF\u9009\u7684\u8349\u7A3F\u670D\u52A1\u57FA\u7840\u5730\u5740\uFF0C\u670D\u52A1\u9700\u63A5\u6536 POST /draft-note\u3002\u7559\u7A7A\u65F6\u6240\u6709\u8349\u7A3F\u8F93\u5165\u90FD\u4FDD\u7559\u5728\u672C\u5730\u3002","settings.sendGeometrySummaryToRemote":"\u53D1\u9001\u51E0\u4F55\u6458\u8981","settings.sendGeometrySummaryToRemote.desc":"\u5141\u8BB8\u628A\u7ECF\u8FC7\u88C1\u526A\u7684\u7F51\u683C\u6570\u91CF\u3001\u5305\u56F4\u76D2\u3001\u90E8\u4EF6\u5019\u9009\u3001\u6807\u6CE8\u5750\u6807\u548C\u6700\u8FD1\u90E8\u4EF6\u5173\u8054\u52A0\u5165\u8FDC\u7A0B\u8349\u7A3F\u8F93\u5165\u3002","settings.sendPreviewImagesToRemote":"\u53D1\u9001\u9884\u89C8\u56FE\u5F15\u7528","settings.sendPreviewImagesToRemote.desc":"\u5141\u8BB8\u5728\u8FDC\u7A0B\u8349\u7A3F\u8F93\u5165\u4E2D\u5217\u51FA\u751F\u6210\u7684\u9884\u89C8\u56FE\u8DEF\u5F84\u3002\u5F53\u524D\u5BA2\u6237\u7AEF\u4E0D\u4F1A\u4E0A\u4F20\u56FE\u7247\u5B57\u8282\u3002","settings.sendRawModelToRemote":"\u53D1\u9001\u539F\u59CB\u6A21\u578B\u6587\u4EF6","settings.sendRawModelToRemote.desc":"\u9884\u7559\u7ED9\u672A\u6765\u663E\u5F0F\u4E0A\u4F20\u652F\u6301\u3002\u82E5\u624B\u52A8\u5F00\u542F\uFF0C\u8FDC\u7A0B\u8349\u7A3F\u8BF7\u6C42\u4F1A\u88AB\u963B\u6B62\uFF0C\u4E0D\u4F1A\u4E0A\u4F20\u6A21\u578B\u3002","settings.enableCad":"\u542F\u7528 CAD \u8F6C\u6362\u5668 (STEP/IGES/BREP)","settings.enableCad.desc":"\u542F\u7528 STEP/IGES/BREP \u683C\u5F0F\u7684 CAD \u8F6C\u6362\u8DEF\u7EBF\uFF0C\u901A\u8FC7 Python CadQuery (OpenCASCADE)\u3002\u9700\u8981\uFF1Apip install cadquery trimesh","settings.enableObj2gltf":"\u542F\u7528 obj2gltf \u8F6C\u6362\u5668\uFF08\u5B9E\u9A8C\u6027\uFF09","settings.enableObj2gltf.desc":"\u9ED8\u8BA4\u4F7F\u7528 OBJ \u76F4\u63A5\u52A0\u8F7D\u3002\u4EC5\u5728\u9700\u8981\u672C\u5730\u6807\u51C6\u5316 GLB \u8F93\u51FA\u65F6\u542F\u7528\u3002","settings.preferObj2gltf":"OBJ \u4F18\u5148\u4F7F\u7528 obj2gltf","settings.preferObj2gltf.desc":"\u9ED8\u8BA4\u5173\u95ED\u3002\u4EC5\u5728\u9700\u8981\u6807\u51C6\u5316 GLB \u8F93\u51FA\u6216\u76F4\u63A5 OBJ \u52A0\u8F7D\u6548\u679C\u4E0D\u4F73\u65F6\u5F00\u542F\u3002","settings.enableFbx2gltf":"\u542F\u7528 FBX2glTF \u8F6C\u6362\u5668","settings.enableFbx2gltf.desc":"\u542F\u7528 FBX \u6587\u4EF6\u901A\u8FC7 FBX2glTF \u8F6C\u6362\u3002\u9700\u8981\u672C\u5730\u5B89\u88C5 FBX2glTF \u4E8C\u8FDB\u5236\u6587\u4EF6\u3002","settings.enableMesh":"\u542F\u7528\u7F51\u683C\u8F6C\u6362\u5668 (3MF/DAE)","settings.enableMesh.desc":"\u542F\u7528 3MF \u548C DAE (Collada) \u683C\u5F0F\u7684\u8F6C\u6362\u8DEF\u7EBF\uFF0C\u901A\u8FC7 Python trimesh\u3002\u9700\u8981\u5B89\u88C5 Python \u548C trimesh (pip install trimesh numpy networkx pycollada)\u3002","settings.enableSldprt":"\u542F\u7528 SLDPRT \u8F6C\u6362\u5668 (SolidWorks)","settings.enableSldprt.desc":"\u542F\u7528 SolidWorks .sldprt \u6587\u4EF6\u901A\u8FC7 FreeCAD \u8F6C\u6362\u3002\u9700\u8981\u5B89\u88C5 FreeCAD (https://www.freecad.org/downloads.php)\u3002","settings.mobileSupport.desc":"\u5728 iOS\u3001iPadOS \u548C Android \u4E0A\uFF0CGLB\u3001GLTF\u3001STL\u3001OBJ\u3001PLY \u8FD9\u7C7B\u76F4\u8BFB\u683C\u5F0F\u53EF\u7528\u3002\u672C\u5730\u8F6C\u6362\u5668\u8BBE\u7F6E\u548C\u547D\u4EE4\u8BCA\u65AD\u4ECD\u4EC5\u652F\u6301\u684C\u9762\u7AEF\u3002","settings.pythonCmd":"Python \u547D\u4EE4\u8DEF\u5F84\uFF08CAD \u7528\uFF09","settings.pythonCmd.desc":"\u53EF\u9009\u7684 Python \u547D\u4EE4\u8DEF\u5F84\uFF0C\u7528\u4E8E CAD \u8F6C\u6362\u3002Windows \u901A\u5E38\u7528 py\uFF0CmacOS \u548C Linux \u901A\u5E38\u7528 python3\u3002\u8BBE\u7F6E\u540E\u8986\u76D6\u81EA\u52A8\u53D1\u73B0\u548C AI3D_FREECAD_CMD\u3002","settings.freecadCmd":"FreeCAD \u547D\u4EE4\u8DEF\u5F84\uFF08SLDPRT \u7528\uFF09","settings.freecadCmd.desc":"\u53EF\u9009\u7684 FreeCAD \u547D\u4EE4\u8DEF\u5F84\uFF0C\u7528\u4E8E SolidWorks \u6587\u4EF6\u8F6C\u6362\u3002Windows \u901A\u5E38\u7528 FreeCADCmd.exe\uFF0CmacOS \u901A\u5E38\u7528 FreeCADCmd\uFF0CLinux \u901A\u5E38\u7528 freecadcmd\u3002\u8BBE\u7F6E\u540E\u8986\u76D6\u81EA\u52A8\u53D1\u73B0\u548C AI3D_FREECADCMD\u3002","settings.obj2gltfCmd":"obj2gltf \u547D\u4EE4\u8DEF\u5F84","settings.obj2gltfCmd.desc":"\u53EF\u9009\u7684 obj2gltf \u547D\u4EE4\u8DEF\u5F84\u3002Windows \u901A\u5E38\u7528 obj2gltf.cmd\uFF0CmacOS \u548C Linux \u901A\u5E38\u7528 obj2gltf\u3002\u8BBE\u7F6E\u540E\u8986\u76D6\u81EA\u52A8\u53D1\u73B0\u548C AI3D_OBJ2GLTF_CMD\u3002","settings.fbx2gltfCmd":"FBX2glTF \u547D\u4EE4\u8DEF\u5F84","settings.fbx2gltfCmd.desc":"\u53EF\u9009\u7684 FBX2glTF \u547D\u4EE4\u8DEF\u5F84\u3002Windows \u901A\u5E38\u7528 FBX2glTF.exe\uFF0CmacOS \u548C Linux \u901A\u5E38\u7528 FBX2glTF\u3002\u8BBE\u7F6E\u540E\u8986\u76D6\u81EA\u52A8\u53D1\u73B0\u548C AI3D_FBX2GLTF_CMD\u3002","settings.assimpCmd":"Python \u547D\u4EE4\u8DEF\u5F84\uFF083MF/DAE \u7528\uFF09","settings.assimpCmd.desc":"\u53EF\u9009\u7684 Python \u547D\u4EE4\u8DEF\u5F84\uFF0C\u7528\u4E8E 3MF \u548C DAE \u8F6C\u6362\u3002Windows \u901A\u5E38\u7528 py\uFF0CmacOS \u548C Linux \u901A\u5E38\u7528 python3\u3002\u8BBE\u7F6E\u540E\u8986\u76D6\u81EA\u52A8\u53D1\u73B0\u548C AI3D_ASSIMP_CMD\u3002","settings.diagnostics.desc":"\u663E\u793A\u63D2\u4EF6\u5F53\u524D\u5B9E\u9645\u4F7F\u7528\u7684\u53EF\u6267\u884C\u6587\u4EF6\u8DEF\u5F84\uFF0C\u5E76\u4E3A Python \u73AF\u5883\u548C\u8F6C\u6362\u5668\u547D\u4EE4\u6267\u884C\u8F7B\u91CF\u81EA\u68C0\u3002","settings.diagnostics.idle":"\u73AF\u5883\u68C0\u67E5\u9ED8\u8BA4\u5173\u95ED\u3002\u70B9\u51FB\u201C\u7ACB\u5373\u68C0\u67E5\u201D\u540E\u624D\u4F1A\u6267\u884C\u3002","settings.diagnostics.checkNow":"\u7ACB\u5373\u68C0\u67E5","settings.diagnostics.checking":"\u68C0\u67E5\u4E2D...","settings.diagnostics.refreshed":"AI 3D \u8F6C\u6362\u5668\u547D\u4EE4\u8BCA\u65AD\u5DF2\u5237\u65B0\u3002","settings.diagnostics.checkingAvailability":"\u6B63\u5728\u68C0\u67E5\u8F6C\u6362\u5668\u547D\u4EE4\u53EF\u7528\u6027...","settings.diagnostics.available":"\u53EF\u7528","settings.diagnostics.notFound":"\u672A\u627E\u5230","settings.diagnostics.sourceLabel":"\u6765\u6E90","settings.diagnostics.commandLabel":"\u547D\u4EE4","settings.diagnostics.resolvedPathLabel":"\u89E3\u6790\u8DEF\u5F84","settings.diagnostics.selfCheckLabel":"\u81EA\u68C0","settings.diagnostics.selfCheckOk":"\u901A\u8FC7","settings.diagnostics.selfCheckFailed":"\u5931\u8D25","settings.diagnostics.cadPythonCheck":"Python \u5305\uFF08cadquery\u3001trimesh\uFF09","settings.diagnostics.meshPythonCheck":"Python \u5305\uFF08trimesh\u3001numpy\u3001networkx\u3001collada\uFF09","settings.diagnostics.freecadCmdCheck":"FreeCADCmd \u542F\u52A8\u63A2\u6D4B","settings.diagnostics.obj2gltfCheck":"obj2gltf \u542F\u52A8\u63A2\u6D4B","settings.diagnostics.fbx2gltfCheck":"FBX2glTF \u542F\u52A8\u63A2\u6D4B","settings.canvasHeight":"\u9ED8\u8BA4\u753B\u5E03\u9AD8\u5EA6","settings.canvasHeight.desc":"\u5185\u8054 3D \u9884\u89C8\u7684\u9ED8\u8BA4\u9AD8\u5EA6\uFF08\u50CF\u7D20\uFF09\u3002\u8303\u56F4\uFF1A200\u2013800\u3002","settings.autoRotateSpeed":"\u81EA\u52A8\u65CB\u8F6C\u901F\u5EA6","settings.autoRotateSpeed.desc":"\u542F\u7528\u81EA\u52A8\u65CB\u8F6C\u65F6\u7684\u65CB\u8F6C\u901F\u5EA6\u3002\u8303\u56F4\uFF1A0.1\u20132.0\u3002","settings.renderQuality":"\u6E32\u67D3\u8D28\u91CF","settings.renderQuality.desc":"\u66F4\u9AD8\u8D28\u91CF\u4F7F\u7528\u66F4\u591A GPU \u8D44\u6E90\u3002\u5F71\u54CD\u6297\u952F\u9F7F\u548C\u5206\u8FA8\u7387\u3002","settings.renderScale":"\u6E32\u67D3\u7F29\u653E","settings.renderScale.desc":"\u6E32\u67D3\u5206\u8FA8\u7387\u500D\u6570\u30021.0 = \u539F\u59CB\uFF0C0.5 = \u4E00\u534A\uFF0C2.0 = \u53CC\u500D\uFF08\u8D85\u91C7\u6837\uFF09\u3002\u8303\u56F4\uFF1A0.25\u20132.0\u3002","modelLoad.warningTitle":"\u6682\u65F6\u65E0\u6CD5\u9884\u89C8\u6A21\u578B","modelLoad.warningMessage":"{ext} \u6587\u4EF6\u9700\u8981\u5148\u5728\u63D2\u4EF6\u8BBE\u7F6E\u4E2D\u542F\u7528 {converterName} \u8F6C\u6362\u5668\uFF0C\u624D\u80FD\u52A0\u8F7D\u3002","modelLoad.warningHint":"\u8BF7\u5148\u5728\u63D2\u4EF6\u8BBE\u7F6E\u4E2D\u542F\u7528\u5BF9\u5E94\u8F6C\u6362\u5668\uFF0C\u7136\u540E\u91CD\u65B0\u52A0\u8F7D\u5F53\u524D\u6587\u4EF6\u3002","modelLoad.mobileWarningMessage":"{ext} \u6587\u4EF6\u9700\u8981\u672C\u5730\u8F6C\u6362\u5DE5\u5177\uFF0C\u4F46\u8FD9\u4E9B\u5DE5\u5177\u5728 iOS\u3001iPadOS \u548C Android \u4E0A\u4E0D\u53EF\u7528\u3002","modelLoad.mobileWarningHint":"\u8BF7\u5728\u684C\u9762\u7AEF\u6253\u5F00\u6B64\u6587\u4EF6\uFF0C\u6216\u5148\u5C06\u5B83\u8F6C\u6362\u4E3A GLB\u3001GLTF\u3001OBJ\u3001STL \u6216 PLY\u3002","modelLoad.errorTitle":"\u65E0\u6CD5\u663E\u793A\u8FD9\u4E2A\u6A21\u578B","modelLoad.errorMessage":"\u52A0\u8F7D\u5931\u8D25\uFF1A{reason}","modelLoad.errorHint":"\u8BF7\u68C0\u67E5\u6587\u4EF6\u683C\u5F0F\uFF0C\u6216\u6253\u5F00\u5F00\u53D1\u8005\u63A7\u5236\u53F0\u67E5\u770B\u8BE6\u7EC6\u4FE1\u606F\u3002","headingPin.showSingle":"\u663E\u793A\u5173\u8054\u6807\u6CE8","headingPin.showMultiple":"\u663E\u793A\u5173\u8054\u6807\u6CE8","headingPin.linkedTo":"\u5173\u8054\u5230\uFF1A{models}","helper.resetViewLabel":"\u91CD\u7F6E\u89C6\u56FE","helper.resetViewDone":"\u5DF2\u91CD\u7F6E","helper.copyModelInfoLabel":"\u590D\u5236\u6A21\u578B\u4FE1\u606F\u4E3A Markdown","helper.copySelectedPartInfoLabel":"\u590D\u5236\u9009\u4E2D\u90E8\u4EF6\u4FE1\u606F","helper.noSelectedPart":"\u8BF7\u5148\u70B9\u51FB\u4E00\u4E2A\u90E8\u4EF6","helper.copied":"\u5DF2\u590D\u5236","helper.failed":"\u5931\u8D25","helper.toggleWireframeLabel":"\u5207\u6362\u7EBF\u6846\u663E\u793A","helper.wireframeOn":"\u7EBF\u6846","helper.wireframeOff":"\u5B9E\u4F53","helper.toggleAxesLabel":"\u5207\u6362\u65B9\u5411\u5750\u6807\u8F74","helper.axesOn":"\u5750\u6807\u8F74\u5DF2\u5F00\u542F","helper.axesOff":"\u5750\u6807\u8F74\u5DF2\u5173\u95ED","helper.toggleBoundingBoxLabel":"\u5207\u6362\u5305\u56F4\u76D2","helper.boundingBoxOn":"\u5305\u56F4\u76D2\u5DF2\u5F00\u542F","helper.boundingBoxOff":"\u5305\u56F4\u76D2\u5DF2\u5173\u95ED","helper.toggleFocusSelectionLabel":"\u805A\u7126\u9009\u4E2D\u90E8\u4EF6","helper.focusSelectionOn":"\u805A\u7126\u6A21\u5F0F\u5DF2\u5F00\u542F","helper.focusSelectionOff":"\u805A\u7126\u6A21\u5F0F\u5DF2\u5173\u95ED","helper.toggleDisassemblyLabel":"\u5207\u6362\u5206\u89E3\u6A21\u5F0F","helper.disassemblyOn":"\u5206\u89E3\u6A21\u5F0F\u5DF2\u5F00\u542F","helper.disassemblyOff":"\u5206\u89E3\u6A21\u5F0F\u5DF2\u5173\u95ED","helper.resetPartsLabel":"\u91CD\u7F6E\u5206\u89E3\u90E8\u4EF6","helper.partsReset":"\u90E8\u4EF6\u5DF2\u91CD\u7F6E","helper.changeResolutionLabel":"\u5207\u6362\u5206\u8FA8\u7387","helper.resolutionValue":"\u5206\u8FA8\u7387\uFF1A{value}","helper.toggleAnimationLabel":"\u64AD\u653E\u6216\u6682\u505C\u52A8\u753B","helper.playing":"\u64AD\u653E\u4E2D","helper.paused":"\u5DF2\u6682\u505C","helper.removePreviewLabel":"\u79FB\u9664\u9884\u89C8","helper.copySnapshotLabel":"\u590D\u5236\u5FEB\u7167","helper.saveSnapshotLabel":"\u4FDD\u5B58\u5FEB\u7167\u5230\u4ED3\u5E93","helper.saved":"\u5DF2\u4FDD\u5B58","helper.downloadSnapshotLabel":"\u4E0B\u8F7D\u5FEB\u7167","helper.downloaded":"\u5DF2\u4E0B\u8F7D","helper.toggleAnnotationLabel":"\u5207\u6362\u6807\u6CE8\u6A21\u5F0F","helper.toggleAnnotationsVisibilityLabel":"\u663E\u793A\u6216\u9690\u85CF\u6807\u6CE8","helper.annotateOn":"\u6807\u6CE8\u6A21\u5F0F\u5DF2\u5F00\u542F","helper.annotateOff":"\u6807\u6CE8\u6A21\u5F0F\u5DF2\u5173\u95ED","helper.annotationsVisible":"\u6807\u6CE8\u5DF2\u663E\u793A","helper.annotationsHidden":"\u6807\u6CE8\u5DF2\u9690\u85CF","helper.enableInteractionLabel":"\u542F\u7528\u89E6\u63A7\u4EA4\u4E92","helper.disableInteractionLabel":"\u5207\u56DE\u6EDA\u52A8\u6A21\u5F0F","helper.interactionOn":"\u6A21\u578B\u4EA4\u4E92\u5DF2\u5F00\u542F","helper.interactionOff":"\u6EDA\u52A8\u6A21\u5F0F\u5DF2\u5F00\u542F","helper.showMoreActionsLabel":"\u663E\u793A\u66F4\u591A\u64CD\u4F5C","helper.hideMoreActionsLabel":"\u6536\u8D77\u989D\u5916\u64CD\u4F5C","helper.moreActionsShown":"\u5DF2\u5C55\u5F00\u66F4\u591A\u64CD\u4F5C","helper.moreActionsHidden":"\u5DF2\u6536\u8D77\u989D\u5916\u64CD\u4F5C","helper.interactAction":"\u4EA4\u4E92","helper.scrollAction":"\u6EDA\u52A8","workbench.emptyTitle":"\u6682\u65E0\u6A21\u578B","workbench.emptyText":"\u4F7F\u7528\u201C\u5BFC\u5165 3D \u6A21\u578B\u201D\u547D\u4EE4\u52A0\u8F7D GLB\u3001GLTF\u3001STL\u3001OBJ \u6216 PLY \u6587\u4EF6\u3002","workbench.modelTitle":"3D \u6A21\u578B","workbench.studioTitle":"AI \u6A21\u578B\u5DE5\u4F5C\u53F0","workbench.studioTagline":"\u68C0\u67E5\u3001\u6807\u6CE8\uFF0C\u5E76\u628A 3D \u8D44\u4EA7\u6574\u7406\u6210\u53CC\u94FE\u7B14\u8BB0\u3002","workbench.navLabel":"\u5DE5\u4F5C\u53F0\u5206\u533A","workbench.navGallery":"\u753B\u5ECA","workbench.navLibrary":"\u8D44\u6599\u5E93","workbench.navNotebooks":"\u7B14\u8BB0\u672C","workbench.navSettings":"\u8BBE\u7F6E","workbench.sourcesTitle":"\u6A21\u578B\u6765\u6E90","workbench.layersTitle":"\u5BA1\u9605\u5C42","workbench.viewModeTitle":"\u89C6\u56FE\u6A21\u5F0F","workbench.modeMesh":"\u7F51\u683C\u89C6\u56FE","workbench.modeFocus":"\u805A\u7126\u9009\u533A","workbench.modeMeshShort":"\u7F51\u683C","workbench.modeFocusShort":"\u805A\u7126","workbench.previewViewsTitle":"\u9884\u89C8\u89C6\u56FE","workbench.connectionsTitle":"\u77E5\u8BC6\u8FDE\u63A5","workbench.currentModelLabel":"\u5F53\u524D\u6A21\u578B","workbench.noReportYet":"\u8FD8\u6CA1\u6709\u62A5\u544A\u7B14\u8BB0","workbench.noIndexYet":"\u8FD8\u6CA1\u6709\u77E5\u8BC6\u7D22\u5F15\u3002\u8BF7\u5148\u751F\u6210\u77E5\u8BC6\u7B14\u8BB0\u3002","workbench.noModelLoaded":"\u5C1A\u672A\u52A0\u8F7D\u6A21\u578B","workbench.disassemblyTitle":"\u5206\u89E3","workbench.explodeLabel":"\u7206\u70B8","workbench.summaryTitle":"\u6458\u8981","workbench.meshesLabel":"\u7F51\u683C","workbench.splatsLabel":"\u70B9\u4E91","workbench.trianglesLabel":"\u4E09\u89D2\u5F62","workbench.verticesLabel":"\u9876\u70B9","workbench.materialsLabel":"\u6750\u8D28","workbench.boundingSizeLabel":"\u5305\u56F4\u76D2","workbench.centerLabel":"\u4E2D\u5FC3","workbench.selectedPartTitle":"\u5F53\u524D\u9009\u4E2D\u90E8\u4EF6","workbench.partMeshLabel":"\u7F51\u683C","workbench.noSelectedPart":"\u70B9\u51FB\u6A21\u578B\u4E2D\u7684\u90E8\u4EF6\u540E\u4F1A\u663E\u793A\u8BE6\u7EC6\u4FE1\u606F\u3002","workbench.tagsTitle":"\u6807\u7B7E","workbench.noTagsYet":"\u8FD8\u6CA1\u6709\u6807\u7B7E","workbench.addTagPlaceholder":"\u6DFB\u52A0\u6807\u7B7E...","workbench.addTagAction":"\u6DFB\u52A0","workbench.annotationsTitle":"\u6807\u6CE8","workbench.exitAnnotate":"\u9000\u51FA\u6807\u6CE8","workbench.annotate":"\u6807\u6CE8","workbench.annotateHintActive":"\u70B9\u51FB\u6A21\u578B\u6DFB\u52A0\u6807\u7B7E \xB7 \u6309 Esc \u9000\u51FA","workbench.annotateHintActiveMobile":"\u70B9\u6309\u6A21\u578B\u6DFB\u52A0\u6807\u7B7E\u3002\u9700\u8981\u7EE7\u7EED\u9605\u8BFB\u65F6\u5207\u56DE\u201C\u6EDA\u52A8\u201D\u3002","workbench.pinCount":"{count} \u4E2A\u6807\u6CE8","workbench.editAction":"\u7F16\u8F91","workbench.deleteAction":"\u5220\u9664","workbench.resetViewAction":"\u91CD\u7F6E\u89C6\u56FE","workbench.insertInfoAction":"\u63D2\u5165\u4FE1\u606F","workbench.insertGalleryAction":"\u63D2\u5165 Gallery","workbench.insertCompareAction":"\u63D2\u5165\u5BF9\u6BD4","workbench.playAction":"\u64AD\u653E","workbench.pauseAction":"\u6682\u505C","workbench.saveProfileAction":"\u4FDD\u5B58\u914D\u7F6E","workbench.generateNoteAction":"\u751F\u6210\u7B14\u8BB0","workbench.openNoteAction":"\u6253\u5F00\u7B14\u8BB0","workbench.openIndexAction":"\u6253\u5F00\u7D22\u5F15","workbench.recordTitle":"\u6807\u672C\u5361","workbench.recordSubtitle":"\u5F53\u524D\u8D44\u4EA7\u6863\u6848","workbench.notesTitle":"\u5206\u6790\u672D\u8BB0","workbench.whereTitle":"\u5173\u8054\u4F4D\u7F6E","workbench.noteReady":"\u5173\u8054\u7B14\u8BB0\u5DF2\u5C31\u7EEA","workbench.indexReady":"\u77E5\u8BC6\u7D22\u5F15\u5DF2\u5C31\u7EEA","workbench.notePending":"\u5173\u8054\u7B14\u8BB0\u5F85\u751F\u6210","workbench.analysisLabel":"\u5206\u6790","workbench.settingsUnavailable":"\u8BF7\u4ECE Obsidian \u8BBE\u7F6E\u4E2D\u6253\u5F00\u672C\u63D2\u4EF6\u6765\u8C03\u6574\u5DE5\u4F5C\u53F0\u9009\u9879\u3002","workbench.profileSaved":"\u914D\u7F6E\u5DF2\u4FDD\u5B58","workbench.viewReset":"\u89C6\u56FE\u5DF2\u91CD\u7F6E","workbench.infoInserted":"\u6A21\u578B\u4FE1\u606F\u5DF2\u63D2\u5165","workbench.infoCopied":"\u6A21\u578B\u4FE1\u606F\u5DF2\u590D\u5236","workbench.templateInserted":"\u6A21\u677F\u5DF2\u63D2\u5165","workbench.templateCopied":"\u6A21\u677F\u5DF2\u590D\u5236","workbench.mobileHint":"\u79FB\u52A8\u7AEF\u63D0\u793A\uFF1A\u9700\u8981\u64CD\u4F5C\u6A21\u578B\u65F6\u70B9\u201C\u4EA4\u4E92\u201D\uFF0C\u7EE7\u7EED\u9605\u8BFB\u7B14\u8BB0\u65F6\u5207\u56DE\u201C\u6EDA\u52A8\u201D\u3002","workbench.mobileHintInteractive":"\u5F53\u524D\u4E3A\u4EA4\u4E92\u6A21\u5F0F\u3002\u9700\u8981\u7EE7\u7EED\u6EDA\u52A8\u7B14\u8BB0\u65F6\uFF0C\u8BF7\u5207\u56DE\u201C\u6EDA\u52A8\u201D\u3002","directView.mobileHint":"\u79FB\u52A8\u7AEF\u63D0\u793A\uFF1A\u4F7F\u7528\u4E0B\u65B9\u5DE5\u5177\u680F\u91CC\u7684\u201C\u4EA4\u4E92\u201D\u6309\u94AE\uFF0C\u5728\u6A21\u578B\u64CD\u4F5C\u548C\u7B14\u8BB0\u6EDA\u52A8\u4E4B\u95F4\u5207\u6362\u3002","directWorkbench.backendLabel":"\u540E\u7AEF","directWorkbench.routeLabel":"\u8DEF\u7531","directWorkbench.performanceLabel":"\u6027\u80FD","directWorkbench.partCandidatesLabel":"\u5019\u9009\u96F6\u4EF6","directWorkbench.explodeAxisLabel":"\u7206\u70B8\u8F74\u5411","directWorkbench.explodeResetLabel":"\u91CD\u7F6E","directWorkbench.knowledgeTitle":"\u77E5\u8BC6","directWorkbench.registeredTitle":"\u5DF2\u6CE8\u518C\u96F6\u4EF6\u5339\u914D","directWorkbench.registeredLoading":"\u68C0\u67E5\u4E2D...","directWorkbench.registeredCount":"{count} \u4E2A\u5339\u914D","directWorkbench.registeredEmpty":"\u6682\u65E0\u8DE8\u6A21\u578B\u96F6\u4EF6\u5339\u914D","directWorkbench.registeredUnavailable":"\u6682\u65E0\u96F6\u4EF6\u8BC1\u636E","directWorkbench.registeredOpen":"\u6253\u5F00","directWorkbench.registeredOpenNote":"\u7B14\u8BB0","directWorkbench.registeredOpenModel":"\u6A21\u578B","directWorkbench.registeredSourceModel":"\u6765\u81EA {model}","directWorkbench.registeredTargetPartNote":"\u6253\u5F00\u5339\u914D\u96F6\u4EF6\u7B14\u8BB0","directWorkbench.registeredTargetSourceModel":"\u6253\u5F00\u6765\u6E90\u6A21\u578B","directWorkbench.registeredTargetUnavailable":"\u6682\u65E0\u53EF\u6253\u5F00\u76EE\u6807","workbench.fileNotFound":"\u672A\u627E\u5230\u6587\u4EF6\uFF1A{path}","annotation.selectColor":"\u9009\u62E9\u989C\u8272 {color}","annotation.sectionEmpty":"\u8BE5\u6BB5\u5185\u5BB9\u4E3A\u7A7A\u3002","modal.selectModel":"\u9009\u62E9\u4E00\u4E2A 3D \u6A21\u578B...","main.commandImportModel":"\u5BFC\u5165 3D \u6A21\u578B","main.commandGenerateNote":"\u751F\u6210\u77E5\u8BC6\u7B14\u8BB0","main.commandOpenKnowledgeIndex":"\u6253\u5F00\u77E5\u8BC6\u7D22\u5F15","main.commandClearConversionCache":"\u6E05\u9664\u8F6C\u6362\u7F13\u5B58","main.commandCheckConverters":"\u68C0\u67E5\u8F6C\u6362\u5668","main.commandCopyDiagnostics":"\u590D\u5236\u8BCA\u65AD\u62A5\u544A","main.converterDiagnosticsMobileUnavailable":"\u8F6C\u6362\u5668\u8BCA\u65AD\u4EC5\u652F\u6301\u684C\u9762\u7AEF\u3002\u5728 iOS\u3001iPadOS \u548C Android \u4E0A\uFF0C\u76F4\u8BFB\u683C\u5F0F\u4ECD\u53EF\u52A0\u8F7D\u3002","main.diagnosticsCopied":"AI Model Workbench \u8BCA\u65AD\u62A5\u544A\u5DF2\u590D\u5236\u5230\u526A\u8D34\u677F\u3002","main.diagnosticsCopyFailed":"\u65E0\u6CD5\u590D\u5236\u8BCA\u65AD\u62A5\u544A\uFF0C\u5DF2\u6539\u4E3A\u521B\u5EFA\u4E00\u4EFD\u8131\u654F\u8BCA\u65AD\u7B14\u8BB0\u3002","codeBlock.noModelPathOrConfig":"\u672A\u6307\u5B9A\u6A21\u578B\u8DEF\u5F84\u6216\u914D\u7F6E\u3002","codeBlock.jsonParseError":"JSON \u89E3\u6790\u9519\u8BEF\uFF1A{error}","codeBlock.jsonParseLine":"\uFF08\u7B2C {line} \u884C\uFF09","codeBlock.noModelsInConfig":"\u914D\u7F6E\u4E2D\u672A\u6307\u5B9A\u6A21\u578B\u3002","codeBlock.unsupportedFormat":"\u4E0D\u652F\u6301\u7684\u683C\u5F0F\uFF1A{ext}\u3002\u652F\u6301\uFF1A{formats}","codeBlock.splatDisabled":"\u5F53\u524D\u6253\u5305\u7248\u672C\u6682\u672A\u542F\u7528 SPLAT \u9884\u89C8\u3002\u540E\u7EED\u4F1A\u4F18\u5148\u6062\u590D\u672C\u5730-only .splat\uFF1B.spz/.sog \u9700\u8981\u672C\u5730\u6253\u5305\u89E3\u7801\u5668\u540E\u518D\u8BC4\u4F30\u3002","codeBlock.noConfigSpecified":"\u672A\u6307\u5B9A\u914D\u7F6E\u3002","codeBlock.noModelsSpecified":"\u672A\u6307\u5B9A\u6A21\u578B\u3002","codeBlock.mobileHint":"\u79FB\u52A8\u7AEF\u63D0\u793A\uFF1A\u9700\u8981\u64CD\u4F5C\u6A21\u578B\u65F6\u70B9\u201C\u4EA4\u4E92\u201D\uFF0C\u7EE7\u7EED\u9605\u8BFB\u7B14\u8BB0\u65F6\u5207\u56DE\u201C\u6EDA\u52A8\u201D\u3002","codeBlock.renderingGrid":"\u6B63\u5728\u6E32\u67D3\u7F51\u683C...","codeBlock.composeRequiresSections":"\u201Ccompose\u201D \u9884\u8BBE\u9700\u8981\u63D0\u4F9B \u201Csections\u201D \u6570\u7EC4\u3002","codeBlock.composeNoValidSections":"Compose\uFF1A\u6CA1\u6709\u6709\u6548\u7684\u5206\u6BB5\u3002","codeBlock.unknownPreset":"\u672A\u77E5\u9884\u8BBE\uFF1A\u201C{preset}\u201D\u3002\u53EF\u7528\uFF1Acompare\u3001showcase\u3001explode\u3001timeline\u3001compose","codeBlock.presetRequiresModels":"\u9884\u8BBE \u201C{preset}\u201D \u9700\u8981 {min}-{max} \u4E2A\u6A21\u578B\uFF0C\u5F53\u524D\u4E3A {count} \u4E2A\u3002","codeBlock.gridFailed":"\u7F51\u683C\u6E32\u67D3\u5931\u8D25\uFF1A{reason}","livePreview.mobileHint":"\u79FB\u52A8\u7AEF\u63D0\u793A\uFF1A\u9700\u8981\u62D6\u52A8\u6A21\u578B\u65F6\u5207\u5230\u201C\u4EA4\u4E92\u201D\uFF0C\u7EE7\u7EED\u9605\u8BFB\u65F6\u5207\u56DE\u201C\u6EDA\u52A8\u201D\u3002","loading.default":"\u52A0\u8F7D\u4E2D...","loading.preparingModel":"\u6B63\u5728\u51C6\u5907\u6A21\u578B...","loading.loadingModel":"\u6B63\u5728\u52A0\u8F7D\u6A21\u578B..."}});function hp(n){mN=n;for(let e of lb)e()}function ee(n){var e,t,i;return(i=(t=(e=Yj[mN])==null?void 0:e[n])!=null?t:ob[n])!=null?i:n}function pN(n){return lb.add(n),()=>{lb.delete(n)}}function Kj(n,e){return n.replace(/\{(\w+)\}/g,(t,i)=>{var r;return(r=e[i])!=null?r:""})}function fr(n,e){return Kj(ee(n),e)}var Yj,mN,lb,Js=C(()=>{"use strict";hN();uN();Yj={en:ob,"zh-CN":dN},mN="en",lb=new Set});function jj(){if("require"in activeWindow)return activeWindow.require}function Xg(){if("process"in activeWindow)return activeWindow.process}function dp(n){let e=jj();if(!e)return null;try{return e(n)}catch(t){return null}}function Ms(n,e){if(n===null)throw new Error(`${e} is not available in this environment (mobile or web).`);return n}function Jn(n,e){return Ms(up,"node:fs/promises").access(n,e)}function ea(n){return Ms(up,"node:fs/promises").readFile(n)}function Sd(n,e,t){return Ms(up,"node:fs/promises").writeFile(n,e,{encoding:t})}function Td(n,e){return Ms(up,"node:fs/promises").mkdir(n,e)}function Ad(n,e){return Ms(up,"node:fs/promises").rm(n,e)}function Gi(...n){return Ms(ml,"node:path").join(...n)}function Ao(n){return Ms(ml,"node:path").dirname(n)}function xo(n,e){return Ms(ml,"node:path").basename(n,e)}function ta(n){return Ms(ml,"node:path").extname(n)}function cb(n){return Ms(ml,"node:path").normalize(n)}function Bn(n){return Ms(ml,"node:path").isAbsolute(n)}function ia(n,e,t,i){Ms(qj,"node:child_process").execFile(n,e,t,i)}function xd(){return Ms(Zj,"node:os").tmpdir()}var up,Ed,ml,qj,Zj,_N,es,gN,EN,vN,SN,ir=C(()=>{"use strict";up=dp("node:fs/promises"),Ed=dp("node:fs"),ml=dp("node:path"),qj=dp("node:child_process"),Zj=dp("node:os");es=(_N=Ed==null?void 0:Ed.constants.F_OK)!=null?_N:0,EN=(gN=Ed==null?void 0:Ed.constants.X_OK)!=null?gN:0;SN=(vN=ml==null?void 0:ml.delimiter)!=null?vN:":"});function fb(n){return n.replace(/\\/g,"/")}function Yg(n){let e=fb(n),t=[];for(let i of e.split("/"))if(!(!i||i===".")){if(i===".."){t.pop();continue}t.push(i)}return t.join("/")}function TN(n){try{return decodeURIComponent(n)}catch(e){return n}}function Cs(n,e){var r;let t=TN((r=e.split(/[?#]/,1)[0])!=null?r:e),i=Yg(t);return n?Yg(`${n}/${i}`):i}function mp(n){let e=fb(n).replace(/\/+$/,""),t=e.lastIndexOf("/");return t>0?e.slice(0,t):""}function ra(n){let e=fb(n).replace(/\/+$/,""),t=e.lastIndexOf("/");return t>=0?e.slice(t+1):e}function Xr(n){return ra(n).replace(/\.[^.]+$/,"")}async function Qj(n,e){let t=Yg(e);if(!t)return null;let i=t.split("/"),r="",s=n.vault.getRoot().children;for(let a of i){let o=s.find(c=>c.name===a),l=o!=null?o:s.find(c=>c.name.toLowerCase()===a.toLowerCase());if(!l)return null;if(r=r?`${r}/${l.name}`:l.name,l instanceof Rd.TFile)return r;if(!(l instanceof Rd.TFolder))return null;s=l.children}return null}function $j(n){return Uint8Array.from(n).buffer}function Jj(n){let e=n.vault.adapter;return typeof e.getBasePath=="function"?e.getBasePath():typeof e.basePath=="string"&&e.basePath.length>0?e.basePath:null}function bd(n,e){var r,s;let t=n.vault.getAbstractFileByPath(e);if(t)return t.path;let i=(s=(r=n.metadataCache)==null?void 0:r.getFirstLinkpathDest)==null?void 0:s.call(r,e,"");return i?i.path:null}function Kf(n,e){if(Bn(e))return cb(e);let t=Jj(n);return t?cb(Gi(t,e)):null}async function Na(n,e){if(Bn(e)){let r=await ea(e);return $j(r)}let t=Yg(TN(e)),i=n.vault.getAbstractFileByPath(t);if(!(i instanceof Rd.TFile)){let r=await Qj(n,t);if(r){let s=n.vault.getAbstractFileByPath(r);if(s instanceof Rd.TFile)return n.vault.readBinary(s)}throw new Error(`File not found: ${t}`)}return n.vault.readBinary(i)}var Rd,na=C(()=>{"use strict";Rd=require("obsidian");ir();ir()});function Ht(n){return{x:n.x,y:n.y,z:n.z}}function Yr(n){return{x:n.x,y:n.y,z:n.z}}function Id(n,e){return{x:n.x-e.x,y:n.y-e.y,z:n.z-e.z}}function pp(n,e){return{x:n.x*e,y:n.y*e,z:n.z*e}}function RN(n,e){let t=Id(n,e);return Math.hypot(t.x,t.y,t.z)}function hb(n){let e=Math.hypot(n.x,n.y,n.z);return e<=Number.EPSILON?null:pp(n,1/e)}function jf(n,e){return{x:n.x+e.x,y:n.y+e.y,z:n.z+e.z}}function AN(n,e){return n.x*e.x+n.y*e.y+n.z*e.z}function bN(n,e,t){return{x:e==="x"?n.x+t:n.x,y:e==="y"?n.y+t:n.y,z:e==="z"?n.z+t:n.z}}function IN(n){return Math.max(n*.01,.01)}function Cc(n,e,t=IN(e)){return n{"use strict"});function aq(){return`pin-${Date.now()}-${iq++}`}function yN(n){return Yr(n)}function oq(n,e,t){return n.lefte.left-t&&n.tope.top-t}var _p,Cd,iq,db,rq,nq,MN,CN,sq,yd,Pc,Qg=C(()=>{"use strict";_p=require("obsidian");Js();na();ys();Cd=["#4a9eff","#ff6b6b","#51cf66","#ffd43b","#845ef7","#ff922b","#22b8cf","#f06595","#94d82d","#ffa8a8"],iq=1,db=4,rq=2,nq=6,MN=6,CN=72,sq=80;yd=class yd{constructor(e,t,i,r,s,a,o,l={}){this.provider=e;this.hostEl=t;this.mode=i;this.onChange=s;this.noteReader=a;this.headingSearch=o;this.pinEls=new Map;this.observer=null;this.resizeObs=null;this.annotations=[];this.editorEl=null;this.disposeCallbacks=[];this.frameCount=0;this.lastCamState="";this.idleFrames=0;this.cameraIdle=!1;this.movingOcclusionCursor=0;this.hoverPopover=null;this.hoverTimeout=null;this.hoverRequestId=0;this._highlightHandler=null;this._pulseTimeout=null;this._headingDropdown=null;this._headingDebounce=null;this._selectedHeading=null;this.previewRenderRoot=new _p.Component;this.previewRenderChildren=new WeakMap;var c;this.previewApp=l.app,this.previewMode=(c=l.previewMode)!=null?c:"plain-text",this.previewRenderRoot.load(),this.overlay=this.hostEl.createDiv({cls:"ai3d-annotation-overlay"}),this.setAnnotations(r),this._highlightHandler=f=>{let h=f.detail,d=h==null?void 0:h.pinId;d&&this.pulsePin(d)},activeDocument.addEventListener("ai3d-pin-highlight",this._highlightHandler),this.disposeCallbacks.push(()=>activeDocument.removeEventListener("ai3d-pin-highlight",this._highlightHandler)),this.disposeCallbacks.push(()=>this.previewRenderRoot.unload()),this.startProjectionLoop()}setAnnotations(e){for(let[,t]of this.pinEls)t.el.remove();this.pinEls.clear(),this.annotations=[...e];for(let t of e)this.createPinElement(t);this.updateProjections()}addPin(e,t,i){var s;let r={id:aq(),position:[e.x,e.y,e.z],label:t,color:i!=null?i:Cd[this.annotations.length%Cd.length],createdAt:new Date().toISOString()};return this.annotations.push(r),this.createPinElement(r),this.updateProjections(),(s=this.onChange)==null||s.call(this,this.annotations),r}removePin(e){var i;let t=this.pinEls.get(e);t&&(t.el.remove(),this.pinEls.delete(e)),this.annotations=this.annotations.filter(r=>r.id!==e),(i=this.onChange)==null||i.call(this,this.annotations)}updatePin(e,t){var s;let i=this.annotations.find(a=>a.id===e);if(!i)return;Object.assign(i,t);let r=this.pinEls.get(e);if(r){t.position&&(r.worldPos={x:t.position[0],y:t.position[1],z:t.position[2]});let a=r.el.querySelector(".ai3d-pin-label");a&&t.label!==void 0&&(a.textContent=t.label);let o=r.el.querySelector(".ai3d-pin-dot");o&&t.color!==void 0&&o.style.setProperty("--pin-color",t.color)}this.updateProjections(),(s=this.onChange)==null||s.call(this,this.annotations)}showEditor(e,t,i){this.showEditorInternal(e,t,i)}editPin(e){let t=this.annotations.find(o=>o.id===e);if(!t)return;let i=this.pinEls.get(e);if(!i)return;let r=i.el.getBoundingClientRect(),s=r.left+r.width/2,a=r.top;this.showEditorInternal(s,a,yN(i.worldPos),t)}getPinPosition(e){let t=this.pinEls.get(e);return t?yN(t.worldPos):null}getAnnotations(){return this.annotations}showEditorInternal(e,t,i,r){var O,V;this.hideEditor(),this._selectedHeading=null;let s=this.overlay.createDiv({cls:"ai3d-annotation-editor"}),a=s.createDiv({cls:"ai3d-editor-input-wrap"}),o=a.createEl("input",{cls:"ai3d-annotation-editor-input"});o.type="text",o.placeholder=this.headingSearch?"Label or search heading...":"Label...",r&&(o.value=r.label);let l=a.createSpan({cls:"ai3d-editor-binding-tag is-hidden"}),c=l.createEl("button",{cls:"ai3d-editor-binding-clear"});c.textContent="\xD7",c.addEventListener("click",N=>{N.stopPropagation(),this._selectedHeading=null,l.classList.add("is-hidden"),f.classList.add("is-hidden"),f.textContent="",o.value="",o.focus()});let f=s.createDiv({cls:"ai3d-editor-content-preview is-hidden"}),h=s.createDiv({cls:"ai3d-heading-dropdown is-hidden"});this._headingDropdown=h;let d=-1,u=[],m=N=>{let F=h.querySelectorAll(".ai3d-heading-dropdown-item");F.forEach(U=>U.classList.remove("active")),d=N,N>=0&&N{var W;this._selectedHeading=N,o.value=N.heading;let F=Xr(N.notePath);(W=l.querySelector(".ai3d-editor-binding-text"))==null||W.remove();let U=l.createSpan({cls:"ai3d-editor-binding-text"});U.textContent=`\u{1F4C4} ${F}`,l.classList.remove("is-hidden"),p(),o.focus(),this.loadContentPreview(f,N.notePath,N.heading)},p=()=>{h.classList.add("is-hidden"),h.replaceChildren(),d=-1},g=N=>{if(h.replaceChildren(),d=-1,u=N,N.length===0){h.classList.add("is-hidden");return}for(let F=0;F{Z.preventDefault(),Z.stopPropagation(),_(U)}),W.addEventListener("mouseenter",()=>m(F))}h.classList.remove("is-hidden")};o.addEventListener("input",()=>{if(!this.headingSearch)return;this._headingDebounce&&window.clearTimeout(this._headingDebounce);let N=o.value.trim();if(N.length<1){p();return}this._headingDebounce=window.setTimeout(()=>{let F=this.headingSearch(N);g(F)},150)}),o.addEventListener("keydown",N=>{if(h.classList.contains("is-hidden")){N.key==="Enter"?(N.preventDefault(),R.click()):N.key==="Escape"&&(N.preventDefault(),this.hideEditor());return}let F=h.querySelectorAll(".ai3d-heading-dropdown-item");N.key==="ArrowDown"?(N.preventDefault(),m(Math.min(d+1,F.length-1))):N.key==="ArrowUp"?(N.preventDefault(),m(Math.max(d-1,0))):N.key==="Enter"?(N.preventDefault(),d>=0&&d{window.setTimeout(p,150)});let v=s.createDiv({cls:"ai3d-annotation-editor-colors"}),x=(O=r==null?void 0:r.color)==null?void 0:O.trim(),A=x||Cd[0],S=x&&!Cd.includes(x)?[x,...Cd]:Cd;for(let N of S){let F=v.createEl("button",{cls:"ai3d-pin-color-swatch"});F.type="button",F.title=N,F.setAttribute("aria-label",fr("annotation.selectColor",{color:N})),F.style.setProperty("--swatch-color",N),F.style.backgroundColor=N,N===A&&F.classList.add("is-selected"),F.addEventListener("click",U=>{U.stopPropagation(),A=N,v.querySelectorAll(".ai3d-pin-color-swatch").forEach(W=>W.classList.remove("is-selected")),F.classList.add("is-selected")})}let E=s.createDiv({cls:"ai3d-annotation-editor-actions"});if(r){let N=E.createEl("button",{cls:"ai3d-annotation-editor-btn ai3d-annotation-editor-delete"});N.textContent="Delete",N.addEventListener("click",F=>{F.stopPropagation(),this.removePin(r.id),this.hideEditor()})}let R=E.createEl("button",{cls:"ai3d-annotation-editor-btn ai3d-annotation-editor-confirm"});R.textContent=r?"Save":"OK",R.addEventListener("click",N=>{N.stopPropagation();let F=o.value.trim()||"Pin",U=this._selectedHeading;if(r){let W={label:F,color:A};U&&(W.notePath=U.notePath,W.headingRef=U.heading,W.headingLevel=U.level),this.updatePin(r.id,W)}else{let W=this.addPin(i,F,A);U&&this.updatePin(W.id,{notePath:U.notePath,headingRef:U.heading,headingLevel:U.level})}this.hideEditor()});let I=E.createEl("button",{cls:"ai3d-annotation-editor-btn ai3d-annotation-editor-cancel"});I.textContent="Cancel",I.addEventListener("click",N=>{N.stopPropagation(),this.hideEditor()});let y=this.overlay.getBoundingClientRect(),M=e-y.left,D=t-y.top;if(s.style.setProperty("--editor-left",`${Math.max(0,Math.min(M,y.width-220))}px`),s.style.setProperty("--editor-top",`${Math.max(0,Math.min(D-10,y.height-160))}px`),this.editorEl=s,r!=null&&r.notePath&&(r!=null&&r.headingRef)){let N=Xr(r.notePath),F=l.createSpan({cls:"ai3d-editor-binding-text"});F.textContent=`\u{1F4C4} ${N}`,l.classList.remove("is-hidden"),this._selectedHeading={notePath:r.notePath,heading:r.headingRef,level:(V=r.headingLevel)!=null?V:2},this.loadContentPreview(f,r.notePath,r.headingRef)}window.requestAnimationFrame(()=>o.focus()),s.addEventListener("pointerdown",N=>N.stopPropagation()),s.addEventListener("mousedown",N=>N.stopPropagation())}hideEditor(){if(this._headingDebounce&&(window.clearTimeout(this._headingDebounce),this._headingDebounce=null),this._headingDropdown=null,this._selectedHeading=null,this.editorEl){let e=this.editorEl.querySelector(".ai3d-editor-content-preview");e&&this.clearRenderedPreview(e),this.editorEl.remove(),this.editorEl=null}}async loadContentPreview(e,t,i){if(!this.noteReader)return;this.clearRenderedPreview(e),e.classList.add("is-hidden");let r=await this.noteReader(t,i);if(!r){e.textContent=ee("annotation.sectionEmpty"),e.className="ai3d-editor-content-preview ai3d-editor-content-preview--empty",e.classList.remove("is-hidden");return}await this.renderPreviewContent(e,r,t,"editor")}async showHoverPopover(e,t,i){if(!this.noteReader||!i.notePath||!i.headingRef)return;this.hideHoverPopover();let r=await this.noteReader(i.notePath,i.headingRef);if(!r||e!==this.hoverRequestId||!t.isConnected||!this.hostEl.isConnected)return;let s=createDiv({cls:"ai3d-pin-popover"}),a=s.createDiv({cls:"ai3d-pin-popover-title"});a.textContent=i.headingRef;let o=s.createDiv({cls:"ai3d-pin-popover-body"});if(await this.renderPreviewContent(o,r,i.notePath,"popover"),e!==this.hoverRequestId||!t.isConnected||!this.hostEl.isConnected){this.clearRenderedPreview(o);return}let l=t.getBoundingClientRect();s.style.setProperty("--popover-left",`${l.left+l.width/2}px`),s.style.setProperty("--popover-top",`${l.bottom+4}px`),activeDocument.body.appendChild(s),this.hoverPopover=s}hideHoverPopover(){if(this.hoverTimeout&&(window.clearTimeout(this.hoverTimeout),this.hoverTimeout=null),this.hoverPopover){let e=this.hoverPopover.querySelector(".ai3d-pin-popover-body");e&&this.clearRenderedPreview(e),this.hoverPopover.remove(),this.hoverPopover=null}}clearRenderedPreview(e){let t=this.previewRenderChildren.get(e);t&&(this.previewRenderRoot.removeChild(t),this.previewRenderChildren.delete(e)),e.replaceChildren()}async renderPreviewContent(e,t,i,r){let s=this.previewMode==="markdown"&&!!this.previewApp,a=r==="editor";if(!s){let l=a&&t.length>300?t.slice(0,300)+"...":t;e.textContent=l,e.className=a?"ai3d-editor-content-preview":"ai3d-pin-popover-body",a&&e.classList.remove("is-hidden");return}e.className=a?"ai3d-editor-content-preview ai3d-editor-content-preview--markdown markdown-rendered":"ai3d-pin-popover-body ai3d-pin-popover-body--markdown markdown-rendered",a&&e.classList.remove("is-hidden");let o=this.previewRenderRoot.addChild(new _p.Component);this.previewRenderChildren.set(e,o);try{await _p.MarkdownRenderer.render(this.previewApp,t,e,i,o)}catch(l){this.previewRenderRoot.removeChild(o),this.previewRenderChildren.delete(e),e.textContent=a&&t.length>300?t.slice(0,300)+"...":t,e.className=a?"ai3d-editor-content-preview":"ai3d-pin-popover-body",a&&e.classList.remove("is-hidden"),console.warn("[AI3D] Annotation markdown preview fallback:",l)}}pulsePin(e){let t=this.pinEls.get(e);t&&(this._pulseTimeout&&(window.clearTimeout(this._pulseTimeout),this._pulseTimeout=null),t.el.classList.remove("ai3d-pin-pulse"),t.el.offsetWidth,t.el.classList.add("ai3d-pin-pulse"),this._pulseTimeout=window.setTimeout(()=>{t.el.classList.remove("ai3d-pin-pulse"),this._pulseTimeout=null},1200))}destroy(){var e,t,i;this.hoverRequestId++,this.hideHoverPopover(),this._pulseTimeout&&(window.clearTimeout(this._pulseTimeout),this._pulseTimeout=null),this._headingDebounce&&(window.clearTimeout(this._headingDebounce),this._headingDebounce=null),this._headingDropdown=null,this._selectedHeading=null,(e=this.observer)==null||e.remove(),this.observer=null,(t=this.resizeObs)==null||t.disconnect(),this.resizeObs=null;for(let r of this.disposeCallbacks)r();this.disposeCallbacks=[],this.overlay.remove(),this.pinEls.clear(),(i=this.editorEl)==null||i.remove(),this.editorEl=null}createPinElement(e){let t=this.overlay.createDiv({cls:"ai3d-annotation-pin"});t.dataset.pinId=e.id,t.createDiv({cls:"ai3d-pin-dot"}).style.setProperty("--pin-color",e.color);let r=t.createSpan({cls:"ai3d-pin-label"});if(r.textContent=e.label,this.mode==="edit"){let s=t.createEl("button",{cls:"ai3d-pin-delete"});s.textContent="\xD7",s.addEventListener("click",a=>{a.stopPropagation(),this.removePin(e.id)}),t.addEventListener("click",a=>{a.target.closest(".ai3d-pin-delete")||(a.stopPropagation(),this.editPin(e.id))})}t.addEventListener("pointerdown",s=>s.stopPropagation()),t.addEventListener("wheel",s=>{s.preventDefault(),s.stopPropagation(),this.provider.canvas.dispatchEvent(new WheelEvent("wheel",{bubbles:!0,cancelable:!0,clientX:s.clientX,clientY:s.clientY,ctrlKey:s.ctrlKey,deltaMode:s.deltaMode,deltaX:s.deltaX,deltaY:s.deltaY,deltaZ:s.deltaZ,metaKey:s.metaKey,shiftKey:s.shiftKey}))},{passive:!1}),e.notePath&&e.headingRef&&this.noteReader&&(t.addEventListener("mouseenter",()=>{this.hoverTimeout&&window.clearTimeout(this.hoverTimeout);let s=++this.hoverRequestId;this.hoverTimeout=window.setTimeout(()=>{this.hoverTimeout=null,s===this.hoverRequestId&&this.showHoverPopover(s,t,e)},300)}),t.addEventListener("mouseleave",()=>{this.hoverTimeout&&(window.clearTimeout(this.hoverTimeout),this.hoverTimeout=null),this.hoverRequestId++,this.hideHoverPopover()})),this.pinEls.set(e.id,{el:t,worldPos:{x:e.position[0],y:e.position[1],z:e.position[2]}})}startProjectionLoop(){this.observer=this.provider.observeRender(()=>this.updateProjections()),this.resizeObs=new ResizeObserver(()=>this.updateProjections()),this.resizeObs.observe(this.provider.canvas)}updateProjections(){if(this.pinEls.size===0)return;let{canvas:e}=this.provider;if(!this.hostEl.isConnected||!e.isConnected||e.clientWidth===0||e.clientHeight===0)return;let t=this.provider.getCameraStateKey();t===this.lastCamState?this.idleFrames++:(this.idleFrames=0,this.cameraIdle=!1),this.lastCamState=t,this.idleFrames>=yd.IDLE_THRESHOLD&&!this.cameraIdle&&(this.cameraIdle=!0),this.frameCount++;let i=this.cameraIdle?1:this.pinEls.size>=12?3:2;if(!this.cameraIdle&&this.frameCount%i!==0)return;let r=Array.from(this.pinEls.values()),s=this.cameraIdle?this.frameCount%nq===0:this.frameCount%rq===0,a=this.cameraIdle||r.length<=db,o=a?0:this.movingOcclusionCursor%r.length,l=o+db,c=yd._scratchProjection,f=[];for(let h=0;h1||c.depth<0)this.hidePin(d.el);else{d.el.style.setProperty("--pin-left",`${c.screenX}px`),d.el.style.setProperty("--pin-top",`${c.screenY}px`),this.updatePinPriority(d.el,c.depth),f.push({el:d.el,screenX:c.screenX,screenY:c.screenY,depth:c.depth});let u=a||h>=o&&hr.length&&h0&&(this.movingOcclusionCursor=(o+db)%r.length),this.applyLabelAvoidance(f)}updatePinPriority(e,t){let i=Math.max(0,Math.min(1,1-t)),r=this.cameraIdle?0:160,s=e.classList.contains("ai3d-pin-occluded")?80:0;e.style.zIndex=String(100+r+Math.round(i*120)-s)}applyLabelAvoidance(e){if(e.length===0)return;if(e.length>sq){for(let r of e)r.el.style.removeProperty("--pin-offset-y");return}let t=[],i=e.filter(r=>!r.el.classList.contains("ai3d-pin-hidden")).sort((r,s)=>r.depth-s.depth);for(let r of i){let s=0;r.el.setCssProps({"--pin-offset-y":"0px"});let a=r.el.getBoundingClientRect();for(let o of t){if(!oq(a,o,MN))continue;let l=r.screenY>=o.top+o.height/2?1:-1;s=Math.max(-CN,Math.min(CN,s+l*(o.height+MN))),r.el.setCssProps({"--pin-offset-y":`${s}px`}),a=r.el.getBoundingClientRect()}t.push(a)}}hidePin(e){e.classList.remove("ai3d-pin-occluded"),e.classList.add("ai3d-pin-hidden")}showPin(e){e.classList.remove("ai3d-pin-hidden")}};yd.IDLE_THRESHOLD=15,yd._scratchProjection={screenX:0,screenY:0,depth:0};Pc=yd});function cq(n){return n!=null?n:DN}function Pd(n){var c;let e=n.ext.trim().toLowerCase(),t=(c=n.annotationMode)!=null?c:"none",i=!!n.allowEditModeOnThree,r=!!n.allowWorkbenchFeaturesOnThree,s=!!n.requireWorkbenchFeatures,a=cq(n.rendererRollout);if(!(n.useThreeRenderer!==!1))return{backend:"babylon",ext:e,annotationMode:t,requireWorkbenchFeatures:s,rendererRollout:a,reason:"useThreeRenderer=false"};if(PN.has(e)&&(!s||r)){if(s&&!lq.has(e))return{backend:"babylon",ext:e,annotationMode:t,requireWorkbenchFeatures:s,rendererRollout:a,reason:`workbench experimental Three supports GLB/GLTF only, ext=${e}`};if(t==="edit"&&a!=="three-direct-glb")return{backend:"babylon",ext:e,annotationMode:t,requireWorkbenchFeatures:s,rendererRollout:a,reason:`annotationMode=edit, rendererRollout=${a}`};if(a==="babylon-safe")return{backend:"babylon",ext:e,annotationMode:t,requireWorkbenchFeatures:s,rendererRollout:a,reason:`rendererRollout=${a}`};if(t==="edit"&&!i)return{backend:"babylon",ext:e,annotationMode:t,requireWorkbenchFeatures:s,rendererRollout:a,reason:"annotationMode=edit, allowEditModeOnThree=false"};let f=s?`${e} workbench preview`:t==="edit"?`${e} direct view edit preview`:t==="readonly"?`${e} preview with readonly annotations`:`simple ${e} preview`;return{backend:"three",ext:e,annotationMode:t,requireWorkbenchFeatures:s,rendererRollout:a,reason:f}}let l=[];return PN.has(e)||l.push(`ext=${e}`),t!=="none"&&l.push(`annotationMode=${t}`),t==="edit"&&!i&&l.push("allowEditModeOnThree=false"),s&&l.push("requireWorkbenchFeatures=true"),a!==DN&&l.push(`rendererRollout=${a}`),{backend:"babylon",ext:e,annotationMode:t,requireWorkbenchFeatures:s,rendererRollout:a,reason:l.join(", ")||"fallback route"}}function LN(){return{backend:"babylon",reason:"grid previews remain on the Babylon grid renderer"}}var DN,PN,lq,$g=C(()=>{"use strict";DN="three-direct-glb",PN=new Set(["glb","gltf","stl","ply","obj"]),lq=new Set(["glb","gltf"])});function fq(n){for(let e=n.length-1;e>=0;--e)if(n[e]>=65535)return!0;return!1}function hq(n){return ArrayBuffer.isView(n)&&!(n instanceof DataView)}function jd(n){return document.createElementNS("http://www.w3.org/1999/xhtml",n)}function $w(){let n=jd("canvas");return n.style.display="block",n}function yp(...n){let e="THREE."+n.shift();qd?qd("log",e,...n):console.log(e,...n)}function Jw(n){let e=n[0];if(typeof e=="string"&&e.startsWith("TSL:")){let t=n[1];t&&t.isStackTrace?n[0]+=" "+t.getLocation():n[1]='Stack trace not available. Enable "THREE.Node.captureStackTrace" to capture stack traces.'}return n}function Ct(...n){n=Jw(n);let e="THREE."+n.shift();if(qd)qd("warn",e,...n);else{let t=n[0];t&&t.isStackTrace?console.warn(t.getError(e)):console.warn(e,...n)}}function Gt(...n){n=Jw(n);let e="THREE."+n.shift();if(qd)qd("error",e,...n);else{let t=n[0];t&&t.isStackTrace?console.error(t.getError(e)):console.error(e,...n)}}function Bv(...n){let e=n.join(" ");e in ON||(ON[e]=!0,Ct(...n))}function eF(n,e,t){return new Promise(function(i,r){function s(){switch(n.clientWaitSync(e,n.SYNC_FLUSH_COMMANDS_BIT,0)){case n.WAIT_FAILED:r();break;case n.TIMEOUT_EXPIRED:setTimeout(s,t);break;default:i()}}setTimeout(s,t)})}function Ga(){let n=Math.random()*4294967295|0,e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,i=Math.random()*4294967295|0;return(vn[n&255]+vn[n>>8&255]+vn[n>>16&255]+vn[n>>24&255]+"-"+vn[e&255]+vn[e>>8&255]+"-"+vn[e>>16&15|64]+vn[e>>24&255]+"-"+vn[t&63|128]+vn[t>>8&255]+"-"+vn[t>>16&255]+vn[t>>24&255]+vn[i&255]+vn[i>>8&255]+vn[i>>16&255]+vn[i>>24&255]).toLowerCase()}function mi(n,e,t){return Math.max(e,Math.min(t,n))}function _0(n,e){return(n%e+e)%e}function dq(n,e,t,i,r){return i+(n-e)*(r-i)/(t-e)}function uq(n,e,t){return n!==e?(t-n)/(e-n):0}function Ip(n,e,t){return(1-t)*n+t*e}function mq(n,e,t,i){return Ip(n,e,1-Math.exp(-t*i))}function pq(n,e=1){return e-Math.abs(_0(n,e*2)-e)}function _q(n,e,t){return n<=e?0:n>=t?1:(n=(n-e)/(t-e),n*n*(3-2*n))}function gq(n,e,t){return n<=e?0:n>=t?1:(n=(n-e)/(t-e),n*n*n*(n*(n*6-15)+10))}function vq(n,e){return n+Math.floor(Math.random()*(e-n+1))}function Eq(n,e){return n+Math.random()*(e-n)}function Sq(n){return n*(.5-Math.random())}function Tq(n){n!==void 0&&(NN=n);let e=NN+=1831565813;return e=Math.imul(e^e>>>15,e|1),e^=e+Math.imul(e^e>>>7,e|61),((e^e>>>14)>>>0)/4294967296}function Aq(n){return n*bp}function xq(n){return n*ah}function Rq(n){return(n&n-1)===0&&n!==0}function bq(n){return Math.pow(2,Math.ceil(Math.log(n)/Math.LN2))}function Iq(n){return Math.pow(2,Math.floor(Math.log(n)/Math.LN2))}function Mq(n,e,t,i,r){let s=Math.cos,a=Math.sin,o=s(t/2),l=a(t/2),c=s((e+i)/2),f=a((e+i)/2),h=s((e-i)/2),d=a((e-i)/2),u=s((i-e)/2),m=a((i-e)/2);switch(r){case"XYX":n.set(o*f,l*h,l*d,o*c);break;case"YZY":n.set(l*d,o*f,l*h,o*c);break;case"ZXZ":n.set(l*h,l*d,o*f,o*c);break;case"XZX":n.set(o*f,l*m,l*u,o*c);break;case"YXY":n.set(l*u,o*f,l*m,o*c);break;case"ZYZ":n.set(l*m,l*u,o*f,o*c);break;default:Ct("MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+r)}}function Ua(n,e){switch(e.constructor){case Float32Array:return n;case Uint32Array:return n/4294967295;case Uint16Array:return n/65535;case Uint8Array:return n/255;case Int32Array:return Math.max(n/2147483647,-1);case Int16Array:return Math.max(n/32767,-1);case Int8Array:return Math.max(n/127,-1);default:throw new Error("Invalid component type.")}}function Wi(n,e){switch(e.constructor){case Float32Array:return n;case Uint32Array:return Math.round(n*4294967295);case Uint16Array:return Math.round(n*65535);case Uint8Array:return Math.round(n*255);case Int32Array:return Math.round(n*2147483647);case Int16Array:return Math.round(n*32767);case Int8Array:return Math.round(n*127);default:throw new Error("Invalid component type.")}}function Cq(){let n={enabled:!0,workingColorSpace:Vn,spaces:{},convert:function(r,s,a){return this.enabled===!1||s===a||!s||!a||(this.spaces[s].transfer===ki&&(r.r=Tl(r.r),r.g=Tl(r.g),r.b=Tl(r.b)),this.spaces[s].primaries!==this.spaces[a].primaries&&(r.applyMatrix3(this.spaces[s].toXYZ),r.applyMatrix3(this.spaces[a].fromXYZ)),this.spaces[a].transfer===ki&&(r.r=Xd(r.r),r.g=Xd(r.g),r.b=Xd(r.b))),r},workingToColorSpace:function(r,s){return this.convert(r,this.workingColorSpace,s)},colorSpaceToWorking:function(r,s){return this.convert(r,s,this.workingColorSpace)},getPrimaries:function(r){return this.spaces[r].primaries},getTransfer:function(r){return r===Ml?Cp:this.spaces[r].transfer},getToneMappingMode:function(r){return this.spaces[r].outputColorSpaceConfig.toneMappingMode||"standard"},getLuminanceCoefficients:function(r,s=this.workingColorSpace){return r.fromArray(this.spaces[s].luminanceCoefficients)},define:function(r){Object.assign(this.spaces,r)},_getMatrix:function(r,s,a){return r.copy(this.spaces[s].toXYZ).multiply(this.spaces[a].fromXYZ)},_getDrawingBufferColorSpace:function(r){return this.spaces[r].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(r=this.workingColorSpace){return this.spaces[r].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(r,s){return Bv("ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),n.workingToColorSpace(r,s)},toWorkingColorSpace:function(r,s){return Bv("ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),n.colorSpaceToWorking(r,s)}},e=[.64,.33,.3,.6,.15,.06],t=[.2126,.7152,.0722],i=[.3127,.329];return n.define({[Vn]:{primaries:e,whitePoint:i,transfer:Cp,toXYZ:FN,fromXYZ:BN,luminanceCoefficients:t,workingColorSpaceConfig:{unpackColorSpace:Ni},outputColorSpaceConfig:{drawingBufferColorSpace:Ni}},[Ni]:{primaries:e,whitePoint:i,transfer:ki,toXYZ:FN,fromXYZ:BN,luminanceCoefficients:t,outputColorSpaceConfig:{drawingBufferColorSpace:Ni}}}),n}function Tl(n){return n<.04045?n*.0773993808:Math.pow(n*.9478672986+.0521327014,2.4)}function Xd(n){return n<.0031308?n*12.92:1.055*Math.pow(n,.41666)-.055}function pb(n){return typeof HTMLImageElement!="undefined"&&n instanceof HTMLImageElement||typeof HTMLCanvasElement!="undefined"&&n instanceof HTMLCanvasElement||typeof ImageBitmap!="undefined"&&n instanceof ImageBitmap?Uv.getDataURL(n):n.data?{data:Array.from(n.data),width:n.width,height:n.height,type:n.data.constructor.name}:(Ct("Texture: Unable to serialize Texture."),{})}function vb(n,e,t){return t<0&&(t+=1),t>1&&(t-=1),t<1/6?n+(e-n)*6*t:t<1/2?e:t<2/3?n+(e-n)*6*(2/3-t):n}function Ib(n,e,t,i,r){for(let s=0,a=n.length-3;s<=a;s+=3){Zf.fromArray(n,s);let o=r.x*Math.abs(Zf.x)+r.y*Math.abs(Zf.y)+r.z*Math.abs(Zf.z),l=e.dot(Zf),c=t.dot(Zf),f=i.dot(Zf);if(Math.max(-Math.max(l,c,f),Math.min(l,c,f))>o)return!1}return!0}function Wq(n,e,t,i,r,s,a,o){let l;if(e.side===dn?l=i.intersectTriangle(a,s,r,!0,o):l=i.intersectTriangle(r,s,a,e.side===Os,o),l===null)return null;uv.copy(o),uv.applyMatrix4(n.matrixWorld);let c=t.ray.origin.distanceTo(uv);return ct.far?null:{distance:c,point:uv.clone(),object:n}}function mv(n,e,t,i,r,s,a,o,l,c){n.getVertexPosition(o,cv),n.getVertexPosition(l,fv),n.getVertexPosition(c,hv);let f=Wq(n,e,t,i,cv,fv,hv,jN);if(f){let h=new ne;Bc.getBarycoord(jN,cv,fv,hv,h),r&&(f.uv=Bc.getInterpolatedAttribute(r,o,l,c,h,new Lt)),s&&(f.uv1=Bc.getInterpolatedAttribute(s,o,l,c,h,new Lt)),a&&(f.normal=Bc.getInterpolatedAttribute(a,o,l,c,h,new ne),f.normal.dot(i.direction)>0&&f.normal.multiplyScalar(-1));let d={a:o,b:l,c,normal:new ne,materialIndex:0};Bc.getNormal(cv,fv,hv,d.normal),f.face=d,f.barycoord=h}return f}function Ev(n,e,t,i,r,s,a){let o=n.geometry.attributes.position;if(kv.fromBufferAttribute(o,r),Wv.fromBufferAttribute(o,s),t.distanceSqToSegment(kv,Wv,Fb,rw)>i)return;Fb.applyMatrix4(n.matrixWorld);let c=e.ray.origin.distanceTo(Fb);if(!(ce.far))return{distance:c,point:rw.clone().applyMatrix4(n.matrixWorld),index:a,face:null,faceIndex:null,barycoord:null,object:n}}function ow(n,e,t,i,r,s,a){let o=Wb.distanceSqToPoint(n);if(or.far)return;s.push({distance:c,distanceToRay:Math.sqrt(o),point:l,index:e,face:null,faceIndex:null,barycoord:null,object:a})}}function _h(n){let e={};for(let t in n){e[t]={};for(let i in n[t]){let r=n[t][i];if(lw(r))r.isRenderTargetTexture?(Ct("UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms()."),e[t][i]=null):e[t][i]=r.clone();else if(Array.isArray(r))if(lw(r[0])){let s=[];for(let a=0,o=r.length;a{Hc={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},zc={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},gw=0,Zb=1,vw=2,jp=1,nE=2,lu=3,Os=0,dn=1,fa=2,wo=0,ih=1,Qb=2,$b=3,Jb=4,Ew=5,Uc=100,Sw=101,Tw=102,Aw=103,xw=104,Rw=200,bw=201,Iw=202,Mw=203,Mv=204,Cv=205,Cw=206,yw=207,Pw=208,Dw=209,Lw=210,Ow=211,Nw=212,ww=213,Fw=214,yv=0,Pv=1,Dv=2,rh=3,Lv=4,Ov=5,Nv=6,wv=7,qp=0,Bw=1,Uw=2,Bs=0,e0=1,t0=2,i0=3,r0=4,n0=5,s0=6,a0=7,Vb="attached",Vw="detached",o0=300,Xc=301,mh=302,sE=303,aE=304,Zp=306,Io=1e3,oa=1001,Yd=1002,yr=1003,oE=1004,ph=1005,Pr=1006,cu=1007,Ya=1008,os=1009,l0=1010,c0=1011,fu=1012,lE=1013,Ka=1014,Us=1015,Fo=1016,cE=1017,fE=1018,hu=1020,f0=35902,h0=35899,d0=1021,u0=1022,Vs=1023,Mo=1026,Yc=1027,hE=1028,dE=1029,Kc=1030,uE=1031,mE=1033,Qp=33776,$p=33777,Jp=33778,e_=33779,pE=35840,_E=35841,gE=35842,vE=35843,EE=36196,SE=37492,TE=37496,AE=37488,xE=37489,t_=37490,RE=37491,bE=37808,IE=37809,ME=37810,CE=37811,yE=37812,PE=37813,DE=37814,LE=37815,OE=37816,NE=37817,wE=37818,FE=37819,BE=37820,UE=37821,VE=36492,GE=36494,kE=36495,WE=36283,HE=36284,i_=36285,zE=36286,Gw=2200,kw=2201,Ww=2202,nh=2300,sh=2301,Iv=2302,Gb=2303,eh=2400,th=2401,Mp=2402,XE=2500,Hw=2501,m0=0,r_=1,du=2,zw=3200,uu=0,Xw=1,Ml="",Ni="srgb",Vn="srgb-linear",Cp="linear",ki="srgb",Jf=7680,kb=519,Yw=512,Kw=513,jw=514,YE=515,qw=516,Zw=517,KE=518,Qw=519,Fv=35044,p0="300 es",Va=2e3,Kd=2001;ON={},qd=null;tF={[yv]:Pv,[Dv]:Nv,[Lv]:wv,[rh]:Ov,[Pv]:yv,[Nv]:Dv,[wv]:Lv,[Ov]:rh},la=class{addEventListener(e,t){this._listeners===void 0&&(this._listeners={});let i=this._listeners;i[e]===void 0&&(i[e]=[]),i[e].indexOf(t)===-1&&i[e].push(t)}hasEventListener(e,t){let i=this._listeners;return i===void 0?!1:i[e]!==void 0&&i[e].indexOf(t)!==-1}removeEventListener(e,t){let i=this._listeners;if(i===void 0)return;let r=i[e];if(r!==void 0){let s=r.indexOf(t);s!==-1&&r.splice(s,1)}}dispatchEvent(e){let t=this._listeners;if(t===void 0)return;let i=t[e.type];if(i!==void 0){e.target=this;let r=i.slice(0);for(let s=0,a=r.length;s0){let u=.5/Math.sqrt(d+1);this._w=.25/u,this._x=(f-l)*u,this._y=(s-c)*u,this._z=(a-r)*u}else if(i>o&&i>h){let u=2*Math.sqrt(1+i-o-h);this._w=(f-l)/u,this._x=.25*u,this._y=(r+a)/u,this._z=(s+c)/u}else if(o>h){let u=2*Math.sqrt(1+o-i-h);this._w=(s-c)/u,this._x=(r+a)/u,this._y=.25*u,this._z=(l+f)/u}else{let u=2*Math.sqrt(1+h-i-o);this._w=(a-r)/u,this._x=(s+c)/u,this._y=(l+f)/u,this._z=.25*u}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let i=e.dot(t)+1;return i<1e-8?(i=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=i):(this._x=0,this._y=-e.z,this._z=e.y,this._w=i)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=i),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(mi(this.dot(e),-1,1)))}rotateTowards(e,t){let i=this.angleTo(e);if(i===0)return this;let r=Math.min(1,t/i);return this.slerp(e,r),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){let i=e._x,r=e._y,s=e._z,a=e._w,o=t._x,l=t._y,c=t._z,f=t._w;return this._x=i*f+a*o+r*c-s*l,this._y=r*f+a*l+s*o-i*c,this._z=s*f+a*c+i*l-r*o,this._w=a*f-i*o-r*l-s*c,this._onChangeCallback(),this}slerp(e,t){let i=e._x,r=e._y,s=e._z,a=e._w,o=this.dot(e);o<0&&(i=-i,r=-r,s=-s,a=-a,o=-o);let l=1-t;if(o<.9995){let c=Math.acos(o),f=Math.sin(c);l=Math.sin(l*c)/f,t=Math.sin(t*c)/f,this._x=this._x*l+i*t,this._y=this._y*l+r*t,this._z=this._z*l+s*t,this._w=this._w*l+a*t,this._onChangeCallback()}else this._x=this._x*l+i*t,this._y=this._y*l+r*t,this._z=this._z*l+s*t,this._w=this._w*l+a*t,this.normalize();return this}slerpQuaternions(e,t,i){return this.copy(e).slerp(t,i)}random(){let e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),i=Math.random(),r=Math.sqrt(1-i),s=Math.sqrt(i);return this.set(r*Math.sin(e),r*Math.cos(e),s*Math.sin(t),s*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}},A0=class A0{constructor(e=0,t=0,i=0){this.x=e,this.y=t,this.z=i}set(e,t,i){return i===void 0&&(i=this.z),this.x=e,this.y=t,this.z=i,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(wN.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(wN.setFromAxisAngle(e,t))}applyMatrix3(e){let t=this.x,i=this.y,r=this.z,s=e.elements;return this.x=s[0]*t+s[3]*i+s[6]*r,this.y=s[1]*t+s[4]*i+s[7]*r,this.z=s[2]*t+s[5]*i+s[8]*r,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){let t=this.x,i=this.y,r=this.z,s=e.elements,a=1/(s[3]*t+s[7]*i+s[11]*r+s[15]);return this.x=(s[0]*t+s[4]*i+s[8]*r+s[12])*a,this.y=(s[1]*t+s[5]*i+s[9]*r+s[13])*a,this.z=(s[2]*t+s[6]*i+s[10]*r+s[14])*a,this}applyQuaternion(e){let t=this.x,i=this.y,r=this.z,s=e.x,a=e.y,o=e.z,l=e.w,c=2*(a*r-o*i),f=2*(o*t-s*r),h=2*(s*i-a*t);return this.x=t+l*c+a*h-o*f,this.y=i+l*f+o*c-s*h,this.z=r+l*h+s*f-a*c,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){let t=this.x,i=this.y,r=this.z,s=e.elements;return this.x=s[0]*t+s[4]*i+s[8]*r,this.y=s[1]*t+s[5]*i+s[9]*r,this.z=s[2]*t+s[6]*i+s[10]*r,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=mi(this.x,e.x,t.x),this.y=mi(this.y,e.y,t.y),this.z=mi(this.z,e.z,t.z),this}clampScalar(e,t){return this.x=mi(this.x,e,t),this.y=mi(this.y,e,t),this.z=mi(this.z,e,t),this}clampLength(e,t){let i=this.length();return this.divideScalar(i||1).multiplyScalar(mi(i,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){let i=e.x,r=e.y,s=e.z,a=t.x,o=t.y,l=t.z;return this.x=r*l-s*o,this.y=s*a-i*l,this.z=i*o-r*a,this}projectOnVector(e){let t=e.lengthSq();if(t===0)return this.set(0,0,0);let i=e.dot(this)/t;return this.copy(e).multiplyScalar(i)}projectOnPlane(e){return ub.copy(this).projectOnVector(e),this.sub(ub)}reflect(e){return this.sub(ub.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let i=this.dot(e)/t;return Math.acos(mi(i,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,i=this.y-e.y,r=this.z-e.z;return t*t+i*i+r*r}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,i){let r=Math.sin(t)*e;return this.x=r*Math.sin(i),this.y=Math.cos(t)*e,this.z=r*Math.cos(i),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,i){return this.x=e*Math.sin(t),this.y=i,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){let t=this.setFromMatrixColumn(e,0).length(),i=this.setFromMatrixColumn(e,1).length(),r=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=i,this.z=r,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let e=Math.random()*Math.PI*2,t=Math.random()*2-1,i=Math.sqrt(1-t*t);return this.x=i*Math.cos(e),this.y=t,this.z=i*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}};A0.prototype.isVector3=!0;ne=A0,ub=new ne,wN=new Kr,x0=class x0{constructor(e,t,i,r,s,a,o,l,c){this.elements=[1,0,0,0,1,0,0,0,1],e!==void 0&&this.set(e,t,i,r,s,a,o,l,c)}set(e,t,i,r,s,a,o,l,c){let f=this.elements;return f[0]=e,f[1]=r,f[2]=o,f[3]=t,f[4]=s,f[5]=l,f[6]=i,f[7]=a,f[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){let t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],this}extractBasis(e,t,i){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(e){let t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let i=e.elements,r=t.elements,s=this.elements,a=i[0],o=i[3],l=i[6],c=i[1],f=i[4],h=i[7],d=i[2],u=i[5],m=i[8],_=r[0],p=r[3],g=r[6],v=r[1],x=r[4],A=r[7],S=r[2],E=r[5],R=r[8];return s[0]=a*_+o*v+l*S,s[3]=a*p+o*x+l*E,s[6]=a*g+o*A+l*R,s[1]=c*_+f*v+h*S,s[4]=c*p+f*x+h*E,s[7]=c*g+f*A+h*R,s[2]=d*_+u*v+m*S,s[5]=d*p+u*x+m*E,s[8]=d*g+u*A+m*R,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){let e=this.elements,t=e[0],i=e[1],r=e[2],s=e[3],a=e[4],o=e[5],l=e[6],c=e[7],f=e[8];return t*a*f-t*o*c-i*s*f+i*o*l+r*s*c-r*a*l}invert(){let e=this.elements,t=e[0],i=e[1],r=e[2],s=e[3],a=e[4],o=e[5],l=e[6],c=e[7],f=e[8],h=f*a-o*c,d=o*l-f*s,u=c*s-a*l,m=t*h+i*d+r*u;if(m===0)return this.set(0,0,0,0,0,0,0,0,0);let _=1/m;return e[0]=h*_,e[1]=(r*c-f*i)*_,e[2]=(o*i-r*a)*_,e[3]=d*_,e[4]=(f*t-r*l)*_,e[5]=(r*s-o*t)*_,e[6]=u*_,e[7]=(i*l-c*t)*_,e[8]=(a*t-i*s)*_,this}transpose(){let e,t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){let t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,i,r,s,a,o){let l=Math.cos(s),c=Math.sin(s);return this.set(i*l,i*c,-i*(l*a+c*o)+a+e,-r*c,r*l,-r*(-c*a+l*o)+o+t,0,0,1),this}scale(e,t){return this.premultiply(mb.makeScale(e,t)),this}rotate(e){return this.premultiply(mb.makeRotation(-e)),this}translate(e,t){return this.premultiply(mb.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){let t=Math.cos(e),i=Math.sin(e);return this.set(t,-i,0,i,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){let t=this.elements,i=e.elements;for(let r=0;r<9;r++)if(t[r]!==i[r])return!1;return!0}fromArray(e,t=0){for(let i=0;i<9;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){let i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e}clone(){return new this.constructor().fromArray(this.elements)}};x0.prototype.isMatrix3=!0;ii=x0,mb=new ii,FN=new ii().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),BN=new ii().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);ai=Cq();Uv=class{static getDataURL(e,t="image/png"){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement=="undefined")return e.src;let i;if(e instanceof HTMLCanvasElement)i=e;else{Dd===void 0&&(Dd=jd("canvas")),Dd.width=e.width,Dd.height=e.height;let r=Dd.getContext("2d");e instanceof ImageData?r.putImageData(e,0,0):r.drawImage(e,0,0,e.width,e.height),i=Dd}return i.toDataURL(t)}static sRGBToLinear(e){if(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement||typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement||typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap){let t=jd("canvas");t.width=e.width,t.height=e.height;let i=t.getContext("2d");i.drawImage(e,0,0,e.width,e.height);let r=i.getImageData(0,0,e.width,e.height),s=r.data;for(let a=0;a1),this.pmremVersion=0,this.normalized=!1}get width(){return this.source.getSize(_b).x}get height(){return this.source.getSize(_b).y}get depth(){return this.source.getSize(_b).z}get image(){return this.source.data}set image(e){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.channel=e.channel,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.normalized=e.normalized,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.colorSpace=e.colorSpace,this.renderTarget=e.renderTarget,this.isRenderTargetTexture=e.isRenderTargetTexture,this.isArrayTexture=e.isArrayTexture,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}setValues(e){for(let t in e){let i=e[t];if(i===void 0){Ct(`Texture.setValues(): parameter '${t}' has value of undefined.`);continue}let r=this[t];if(r===void 0){Ct(`Texture.setValues(): property '${t}' does not exist.`);continue}r&&i&&r.isVector2&&i.isVector2||r&&i&&r.isVector3&&i.isVector3||r&&i&&r.isMatrix3&&i.isMatrix3?r.copy(i):this[t]=i}}toJSON(e){let t=e===void 0||typeof e=="string";if(!t&&e.textures[this.uuid]!==void 0)return e.textures[this.uuid];let i={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,normalized:this.normalized,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(i.userData=this.userData),t||(e.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(e){if(this.mapping!==o0)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case Io:e.x=e.x-Math.floor(e.x);break;case oa:e.x=e.x<0?0:1;break;case Yd:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x=e.x-Math.floor(e.x);break}if(e.y<0||e.y>1)switch(this.wrapT){case Io:e.y=e.y-Math.floor(e.y);break;case oa:e.y=e.y<0?0:1;break;case Yd:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y=e.y-Math.floor(e.y);break}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){e===!0&&this.pmremVersion++}};Rr.DEFAULT_IMAGE=null;Rr.DEFAULT_MAPPING=o0;Rr.DEFAULT_ANISOTROPY=1;R0=class R0{constructor(e=0,t=0,i=0,r=1){this.x=e,this.y=t,this.z=i,this.w=r}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,i,r){return this.x=e,this.y=t,this.z=i,this.w=r,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w!==void 0?e.w:1,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){let t=this.x,i=this.y,r=this.z,s=this.w,a=e.elements;return this.x=a[0]*t+a[4]*i+a[8]*r+a[12]*s,this.y=a[1]*t+a[5]*i+a[9]*r+a[13]*s,this.z=a[2]*t+a[6]*i+a[10]*r+a[14]*s,this.w=a[3]*t+a[7]*i+a[11]*r+a[15]*s,this}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this.w/=e.w,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);let t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,i,r,s,l=e.elements,c=l[0],f=l[4],h=l[8],d=l[1],u=l[5],m=l[9],_=l[2],p=l[6],g=l[10];if(Math.abs(f-d)<.01&&Math.abs(h-_)<.01&&Math.abs(m-p)<.01){if(Math.abs(f+d)<.1&&Math.abs(h+_)<.1&&Math.abs(m+p)<.1&&Math.abs(c+u+g-3)<.1)return this.set(1,0,0,0),this;t=Math.PI;let x=(c+1)/2,A=(u+1)/2,S=(g+1)/2,E=(f+d)/4,R=(h+_)/4,I=(m+p)/4;return x>A&&x>S?x<.01?(i=0,r=.707106781,s=.707106781):(i=Math.sqrt(x),r=E/i,s=R/i):A>S?A<.01?(i=.707106781,r=0,s=.707106781):(r=Math.sqrt(A),i=E/r,s=I/r):S<.01?(i=.707106781,r=.707106781,s=0):(s=Math.sqrt(S),i=R/s,r=I/s),this.set(i,r,s,t),this}let v=Math.sqrt((p-m)*(p-m)+(h-_)*(h-_)+(d-f)*(d-f));return Math.abs(v)<.001&&(v=1),this.x=(p-m)/v,this.y=(h-_)/v,this.z=(d-f)/v,this.w=Math.acos((c+u+g-1)/2),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this.w=t[15],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,t){return this.x=mi(this.x,e.x,t.x),this.y=mi(this.y,e.y,t.y),this.z=mi(this.z,e.z,t.z),this.w=mi(this.w,e.w,t.w),this}clampScalar(e,t){return this.x=mi(this.x,e,t),this.y=mi(this.y,e,t),this.z=mi(this.z,e,t),this.w=mi(this.w,e,t),this}clampLength(e,t){let i=this.length();return this.divideScalar(i||1).multiplyScalar(mi(i,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this.w=e.w+(t.w-e.w)*i,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}};R0.prototype.isVector4=!0;ji=R0,Vv=class extends la{constructor(e=1,t=1,i={}){super(),i=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:Pr,depthBuffer:!0,stencilBuffer:!1,resolveDepthBuffer:!0,resolveStencilBuffer:!0,depthTexture:null,samples:0,count:1,depth:1,multiview:!1},i),this.isRenderTarget=!0,this.width=e,this.height=t,this.depth=i.depth,this.scissor=new ji(0,0,e,t),this.scissorTest=!1,this.viewport=new ji(0,0,e,t),this.textures=[];let r={width:e,height:t,depth:i.depth},s=new Rr(r),a=i.count;for(let o=0;o1);this.dispose()}this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}clone(){return new this.constructor().copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.scissor.copy(e.scissor),this.scissorTest=e.scissorTest,this.viewport.copy(e.viewport),this.textures.length=0;for(let t=0,i=e.textures.length;t>>0}enable(e){this.mask|=1<1){for(let t=0;t1){for(let i=0;i0&&(r.userData=this.userData),r.layers=this.layers.mask,r.matrix=this.matrix.toArray(),r.up=this.up.toArray(),this.pivot!==null&&(r.pivot=this.pivot.toArray()),this.matrixAutoUpdate===!1&&(r.matrixAutoUpdate=!1),this.morphTargetDictionary!==void 0&&(r.morphTargetDictionary=Object.assign({},this.morphTargetDictionary)),this.morphTargetInfluences!==void 0&&(r.morphTargetInfluences=this.morphTargetInfluences.slice()),this.isInstancedMesh&&(r.type="InstancedMesh",r.count=this.count,r.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(r.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(r.type="BatchedMesh",r.perObjectFrustumCulled=this.perObjectFrustumCulled,r.sortObjects=this.sortObjects,r.drawRanges=this._drawRanges,r.reservedRanges=this._reservedRanges,r.geometryInfo=this._geometryInfo.map(o=>({...o,boundingBox:o.boundingBox?o.boundingBox.toJSON():void 0,boundingSphere:o.boundingSphere?o.boundingSphere.toJSON():void 0})),r.instanceInfo=this._instanceInfo.map(o=>({...o})),r.availableInstanceIds=this._availableInstanceIds.slice(),r.availableGeometryIds=this._availableGeometryIds.slice(),r.nextIndexStart=this._nextIndexStart,r.nextVertexStart=this._nextVertexStart,r.geometryCount=this._geometryCount,r.maxInstanceCount=this._maxInstanceCount,r.maxVertexCount=this._maxVertexCount,r.maxIndexCount=this._maxIndexCount,r.geometryInitialized=this._geometryInitialized,r.matricesTexture=this._matricesTexture.toJSON(e),r.indirectTexture=this._indirectTexture.toJSON(e),this._colorsTexture!==null&&(r.colorsTexture=this._colorsTexture.toJSON(e)),this.boundingSphere!==null&&(r.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(r.boundingBox=this.boundingBox.toJSON()));function s(o,l){return o[l.uuid]===void 0&&(o[l.uuid]=l.toJSON(e)),l.uuid}if(this.isScene)this.background&&(this.background.isColor?r.background=this.background.toJSON():this.background.isTexture&&(r.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(r.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){r.geometry=s(e.geometries,this.geometry);let o=this.geometry.parameters;if(o!==void 0&&o.shapes!==void 0){let l=o.shapes;if(Array.isArray(l))for(let c=0,f=l.length;c0){r.children=[];for(let o=0;o0){r.animations=[];for(let o=0;o0&&(i.geometries=o),l.length>0&&(i.materials=l),c.length>0&&(i.textures=c),f.length>0&&(i.images=f),h.length>0&&(i.shapes=h),d.length>0&&(i.skeletons=d),u.length>0&&(i.animations=u),m.length>0&&(i.nodes=m)}return i.object=r,i;function a(o){let l=[];for(let c in o){let f=o[c];delete f.metadata,l.push(f)}return l}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.pivot=e.pivot!==null?e.pivot.clone():null,this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.static=e.static,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let i=0;iu+m?(c.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:e.handedness,target:this})):!c.inputState.pinching&&d<=u-m&&(c.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:e.handedness,target:this}))}else l!==null&&e.gripSpace&&(s=t.getPose(e.gripSpace,i),s!==null&&(l.matrix.fromArray(s.transform.matrix),l.matrix.decompose(l.position,l.rotation,l.scale),l.matrixWorldNeedsUpdate=!0,s.linearVelocity?(l.hasLinearVelocity=!0,l.linearVelocity.copy(s.linearVelocity)):l.hasLinearVelocity=!1,s.angularVelocity?(l.hasAngularVelocity=!0,l.angularVelocity.copy(s.angularVelocity)):l.hasAngularVelocity=!1,l.eventsEnabled&&l.dispatchEvent({type:"gripUpdated",data:e,target:this})));o!==null&&(r=t.getPose(e.targetRaySpace,i),r===null&&s!==null&&(r=s),r!==null&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(Bq)))}return o!==null&&(o.visible=r!==null),l!==null&&(l.visible=s!==null),c!==null&&(c.visible=a!==null),this}_getHandJoint(e,t){if(e.joints[t.jointName]===void 0){let i=new Ls;i.matrixAutoUpdate=!1,i.visible=!1,e.joints[t.jointName]=i,e.add(i)}return e.joints[t.jointName]}},iF={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Lc={h:0,s:0,l:0},tv={h:0,s:0,l:0};ct=class{constructor(e,t,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,i)}set(e,t,i){if(t===void 0&&i===void 0){let r=e;r&&r.isColor?this.copy(r):typeof r=="number"?this.setHex(r):typeof r=="string"&&this.setStyle(r)}else this.setRGB(e,t,i);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=Ni){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,ai.colorSpaceToWorking(this,t),this}setRGB(e,t,i,r=ai.workingColorSpace){return this.r=e,this.g=t,this.b=i,ai.colorSpaceToWorking(this,r),this}setHSL(e,t,i,r=ai.workingColorSpace){if(e=_0(e,1),t=mi(t,0,1),i=mi(i,0,1),t===0)this.r=this.g=this.b=i;else{let s=i<=.5?i*(1+t):i+t-i*t,a=2*i-s;this.r=vb(a,s,e+1/3),this.g=vb(a,s,e),this.b=vb(a,s,e-1/3)}return ai.colorSpaceToWorking(this,r),this}setStyle(e,t=Ni){function i(s){s!==void 0&&parseFloat(s)<1&&Ct("Color: Alpha component of "+e+" will be ignored.")}let r;if(r=/^(\w+)\(([^\)]*)\)/.exec(e)){let s,a=r[1],o=r[2];switch(a){case"rgb":case"rgba":if(s=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(s[4]),this.setRGB(Math.min(255,parseInt(s[1],10))/255,Math.min(255,parseInt(s[2],10))/255,Math.min(255,parseInt(s[3],10))/255,t);if(s=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(s[4]),this.setRGB(Math.min(100,parseInt(s[1],10))/100,Math.min(100,parseInt(s[2],10))/100,Math.min(100,parseInt(s[3],10))/100,t);break;case"hsl":case"hsla":if(s=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(s[4]),this.setHSL(parseFloat(s[1])/360,parseFloat(s[2])/100,parseFloat(s[3])/100,t);break;default:Ct("Color: Unknown color model "+e)}}else if(r=/^\#([A-Fa-f\d]+)$/.exec(e)){let s=r[1],a=s.length;if(a===3)return this.setRGB(parseInt(s.charAt(0),16)/15,parseInt(s.charAt(1),16)/15,parseInt(s.charAt(2),16)/15,t);if(a===6)return this.setHex(parseInt(s,16),t);Ct("Color: Invalid hex color "+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=Ni){let i=iF[e.toLowerCase()];return i!==void 0?this.setHex(i,t):Ct("Color: Unknown color "+e),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=Tl(e.r),this.g=Tl(e.g),this.b=Tl(e.b),this}copyLinearToSRGB(e){return this.r=Xd(e.r),this.g=Xd(e.g),this.b=Xd(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=Ni){return ai.workingToColorSpace(En.copy(this),e),Math.round(mi(En.r*255,0,255))*65536+Math.round(mi(En.g*255,0,255))*256+Math.round(mi(En.b*255,0,255))}getHexString(e=Ni){return("000000"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=ai.workingColorSpace){ai.workingToColorSpace(En.copy(this),t);let i=En.r,r=En.g,s=En.b,a=Math.max(i,r,s),o=Math.min(i,r,s),l,c,f=(o+a)/2;if(o===a)l=0,c=0;else{let h=a-o;switch(c=f<=.5?h/(a+o):h/(2-a-o),a){case i:l=(r-s)/h+(r0&&(t.object.backgroundBlurriness=this.backgroundBlurriness),this.backgroundIntensity!==1&&(t.object.backgroundIntensity=this.backgroundIntensity),t.object.backgroundRotation=this.backgroundRotation.toArray(),this.environmentIntensity!==1&&(t.object.environmentIntensity=this.environmentIntensity),t.object.environmentRotation=this.environmentRotation.toArray(),t}},Fa=new ne,_l=new ne,Eb=new ne,gl=new ne,wd=new ne,Fd=new ne,XN=new ne,Sb=new ne,Tb=new ne,Ab=new ne,xb=new ji,Rb=new ji,bb=new ji,Bc=class n{constructor(e=new ne,t=new ne,i=new ne){this.a=e,this.b=t,this.c=i}static getNormal(e,t,i,r){r.subVectors(i,t),Fa.subVectors(e,t),r.cross(Fa);let s=r.lengthSq();return s>0?r.multiplyScalar(1/Math.sqrt(s)):r.set(0,0,0)}static getBarycoord(e,t,i,r,s){Fa.subVectors(r,t),_l.subVectors(i,t),Eb.subVectors(e,t);let a=Fa.dot(Fa),o=Fa.dot(_l),l=Fa.dot(Eb),c=_l.dot(_l),f=_l.dot(Eb),h=a*c-o*o;if(h===0)return s.set(0,0,0),null;let d=1/h,u=(c*l-o*f)*d,m=(a*f-o*l)*d;return s.set(1-u-m,m,u)}static containsPoint(e,t,i,r){return this.getBarycoord(e,t,i,r,gl)===null?!1:gl.x>=0&&gl.y>=0&&gl.x+gl.y<=1}static getInterpolation(e,t,i,r,s,a,o,l){return this.getBarycoord(e,t,i,r,gl)===null?(l.x=0,l.y=0,"z"in l&&(l.z=0),"w"in l&&(l.w=0),null):(l.setScalar(0),l.addScaledVector(s,gl.x),l.addScaledVector(a,gl.y),l.addScaledVector(o,gl.z),l)}static getInterpolatedAttribute(e,t,i,r,s,a){return xb.setScalar(0),Rb.setScalar(0),bb.setScalar(0),xb.fromBufferAttribute(e,t),Rb.fromBufferAttribute(e,i),bb.fromBufferAttribute(e,r),a.setScalar(0),a.addScaledVector(xb,s.x),a.addScaledVector(Rb,s.y),a.addScaledVector(bb,s.z),a}static isFrontFacing(e,t,i,r){return Fa.subVectors(i,t),_l.subVectors(e,t),Fa.cross(_l).dot(r)<0}set(e,t,i){return this.a.copy(e),this.b.copy(t),this.c.copy(i),this}setFromPointsAndIndices(e,t,i,r){return this.a.copy(e[t]),this.b.copy(e[i]),this.c.copy(e[r]),this}setFromAttributeAndIndices(e,t,i,r){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,i),this.c.fromBufferAttribute(e,r),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return Fa.subVectors(this.c,this.b),_l.subVectors(this.a,this.b),Fa.cross(_l).length()*.5}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(e){return n.getNormal(this.a,this.b,this.c,e)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(e,t){return n.getBarycoord(e,this.a,this.b,this.c,t)}getInterpolation(e,t,i,r,s){return n.getInterpolation(e,this.a,this.b,this.c,t,i,r,s)}containsPoint(e){return n.containsPoint(e,this.a,this.b,this.c)}isFrontFacing(e){return n.isFrontFacing(this.a,this.b,this.c,e)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){let i=this.a,r=this.b,s=this.c,a,o;wd.subVectors(r,i),Fd.subVectors(s,i),Sb.subVectors(e,i);let l=wd.dot(Sb),c=Fd.dot(Sb);if(l<=0&&c<=0)return t.copy(i);Tb.subVectors(e,r);let f=wd.dot(Tb),h=Fd.dot(Tb);if(f>=0&&h<=f)return t.copy(r);let d=l*h-f*c;if(d<=0&&l>=0&&f<=0)return a=l/(l-f),t.copy(i).addScaledVector(wd,a);Ab.subVectors(e,s);let u=wd.dot(Ab),m=Fd.dot(Ab);if(m>=0&&u<=m)return t.copy(s);let _=u*c-l*m;if(_<=0&&c>=0&&m<=0)return o=c/(c-m),t.copy(i).addScaledVector(Fd,o);let p=f*m-u*h;if(p<=0&&h-f>=0&&u-m>=0)return XN.subVectors(s,r),o=(h-f)/(h-f+(u-m)),t.copy(r).addScaledVector(XN,o);let g=1/(p+_+d);return a=_*g,o=d*g,t.copy(i).addScaledVector(wd,a).addScaledVector(Fd,o)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}},vr=class{constructor(e=new ne(1/0,1/0,1/0),t=new ne(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){this.makeEmpty();for(let t=0,i=e.length;t=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,Ba),Ba.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,i;return e.normal.x>0?(t=e.normal.x*this.min.x,i=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,i=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,i+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,i+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,i+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,i+=e.normal.z*this.min.z),t<=-e.constant&&i>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(vp),rv.subVectors(this.max,vp),Bd.subVectors(e.a,vp),Ud.subVectors(e.b,vp),Vd.subVectors(e.c,vp),Oc.subVectors(Ud,Bd),Nc.subVectors(Vd,Ud),qf.subVectors(Bd,Vd);let t=[0,-Oc.z,Oc.y,0,-Nc.z,Nc.y,0,-qf.z,qf.y,Oc.z,0,-Oc.x,Nc.z,0,-Nc.x,qf.z,0,-qf.x,-Oc.y,Oc.x,0,-Nc.y,Nc.x,0,-qf.y,qf.x,0];return!Ib(t,Bd,Ud,Vd,rv)||(t=[1,0,0,0,1,0,0,0,1],!Ib(t,Bd,Ud,Vd,rv))?!1:(nv.crossVectors(Oc,Nc),t=[nv.x,nv.y,nv.z],Ib(t,Bd,Ud,Vd,rv))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,Ba).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(Ba).length()*.5),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(vl[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),vl[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),vl[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),vl[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),vl[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),vl[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),vl[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),vl[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(vl),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(e){return this.min.fromArray(e.min),this.max.fromArray(e.max),this}},vl=[new ne,new ne,new ne,new ne,new ne,new ne,new ne,new ne],Ba=new ne,iv=new vr,Bd=new ne,Ud=new ne,Vd=new ne,Oc=new ne,Nc=new ne,qf=new ne,vp=new ne,rv=new ne,nv=new ne,Zf=new ne;Fr=new ne,sv=new Lt,Uq=0,rr=class extends la{constructor(e,t,i=!1){if(super(),Array.isArray(e))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:Uq++}),this.name="",this.array=e,this.itemSize=t,this.count=e!==void 0?e.length/t:0,this.normalized=i,this.usage=Fv,this.updateRanges=[],this.gpuType=Us,this.version=0}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this.gpuType=e.gpuType,this}copyAt(e,t,i){e*=this.itemSize,i*=t.itemSize;for(let r=0,s=this.itemSize;rthis.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;Ep.subVectors(e,this.center);let t=Ep.lengthSq();if(t>this.radius*this.radius){let i=Math.sqrt(t),r=(i-this.radius)*.5;this.center.addScaledVector(Ep,r/i),this.radius+=r}return this}union(e){return e.isEmpty()?this:this.isEmpty()?(this.copy(e),this):(this.center.equals(e.center)===!0?this.radius=Math.max(this.radius,e.radius):(Mb.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(Ep.copy(e.center).add(Mb)),this.expandByPoint(Ep.copy(e.center).sub(Mb))),this)}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(e){return this.radius=e.radius,this.center.fromArray(e.center),this}},Gq=0,sa=new li,Cb=new nr,Gd=new ne,Ds=new vr,Sp=new vr,nn=new ne,sr=class n extends la{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:Gq++}),this.uuid=Ga(),this.name="",this.type="BufferGeometry",this.index=null,this.indirect=null,this.indirectOffset=0,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(e){return Array.isArray(e)?this.index=new(fq(e)?Lp:Dp)(e,1):this.index=e,this}setIndirect(e,t=0){return this.indirect=e,this.indirectOffset=t,this}getIndirect(){return this.indirect}getAttribute(e){return this.attributes[e]}setAttribute(e,t){return this.attributes[e]=t,this}deleteAttribute(e){return delete this.attributes[e],this}hasAttribute(e){return this.attributes[e]!==void 0}addGroup(e,t,i=0){this.groups.push({start:e,count:t,materialIndex:i})}clearGroups(){this.groups=[]}setDrawRange(e,t){this.drawRange.start=e,this.drawRange.count=t}applyMatrix4(e){let t=this.attributes.position;t!==void 0&&(t.applyMatrix4(e),t.needsUpdate=!0);let i=this.attributes.normal;if(i!==void 0){let s=new ii().getNormalMatrix(e);i.applyNormalMatrix(s),i.needsUpdate=!0}let r=this.attributes.tangent;return r!==void 0&&(r.transformDirection(e),r.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}applyQuaternion(e){return sa.makeRotationFromQuaternion(e),this.applyMatrix4(sa),this}rotateX(e){return sa.makeRotationX(e),this.applyMatrix4(sa),this}rotateY(e){return sa.makeRotationY(e),this.applyMatrix4(sa),this}rotateZ(e){return sa.makeRotationZ(e),this.applyMatrix4(sa),this}translate(e,t,i){return sa.makeTranslation(e,t,i),this.applyMatrix4(sa),this}scale(e,t,i){return sa.makeScale(e,t,i),this.applyMatrix4(sa),this}lookAt(e){return Cb.lookAt(e),Cb.updateMatrix(),this.applyMatrix4(Cb.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(Gd).negate(),this.translate(Gd.x,Gd.y,Gd.z),this}setFromPoints(e){let t=this.getAttribute("position");if(t===void 0){let i=[];for(let r=0,s=e.length;rt.count&&Ct("BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),t.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new vr);let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){Gt("BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new ne(-1/0,-1/0,-1/0),new ne(1/0,1/0,1/0));return}if(e!==void 0){if(this.boundingBox.setFromBufferAttribute(e),t)for(let i=0,r=t.length;i0&&(e.userData=this.userData),this.parameters!==void 0){let l=this.parameters;for(let c in l)l[c]!==void 0&&(e[c]=l[c]);return e}e.data={attributes:{}};let t=this.index;t!==null&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});let i=this.attributes;for(let l in i){let c=i[l];e.data.attributes[l]=c.toJSON(e.data)}let r={},s=!1;for(let l in this.morphAttributes){let c=this.morphAttributes[l],f=[];for(let h=0,d=c.length;h0&&(r[l]=f,s=!0)}s&&(e.data.morphAttributes=r,e.data.morphTargetsRelative=this.morphTargetsRelative);let a=this.groups;a.length>0&&(e.data.groups=JSON.parse(JSON.stringify(a)));let o=this.boundingSphere;return o!==null&&(e.data.boundingSphere=o.toJSON()),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;let t={};this.name=e.name;let i=e.index;i!==null&&this.setIndex(i.clone());let r=e.attributes;for(let c in r){let f=r[c];this.setAttribute(c,f.clone(t))}let s=e.morphAttributes;for(let c in s){let f=[],h=s[c];for(let d=0,u=h.length;d0!=e>0&&this.version++,this._alphaTest=e}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(e!==void 0)for(let t in e){let i=e[t];if(i===void 0){Ct(`Material: parameter '${t}' has value of undefined.`);continue}let r=this[t];if(r===void 0){Ct(`Material: '${t}' is not a property of THREE.${this.type}.`);continue}r&&r.isColor?r.set(i):r&&r.isVector3&&i&&i.isVector3?r.copy(i):this[t]=i}}toJSON(e){let t=e===void 0||typeof e=="string";t&&(e={textures:{},images:{}});let i={metadata:{version:4.7,type:"Material",generator:"Material.toJSON"}};i.uuid=this.uuid,i.type=this.type,this.name!==""&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),this.roughness!==void 0&&(i.roughness=this.roughness),this.metalness!==void 0&&(i.metalness=this.metalness),this.sheen!==void 0&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(i.shininess=this.shininess),this.clearcoat!==void 0&&(i.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.sheenColorMap&&this.sheenColorMap.isTexture&&(i.sheenColorMap=this.sheenColorMap.toJSON(e).uuid),this.sheenRoughnessMap&&this.sheenRoughnessMap.isTexture&&(i.sheenRoughnessMap=this.sheenRoughnessMap.toJSON(e).uuid),this.dispersion!==void 0&&(i.dispersion=this.dispersion),this.iridescence!==void 0&&(i.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(i.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.anisotropy!==void 0&&(i.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(i.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(i.anisotropyMap=this.anisotropyMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(e).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(e).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(e).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(e).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(e).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(e).uuid,this.combine!==void 0&&(i.combine=this.combine)),this.envMapRotation!==void 0&&(i.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(i.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(i.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(e).uuid),this.transmission!==void 0&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(e).uuid),this.thickness!==void 0&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(e).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(i.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(i.size=this.size),this.shadowSide!==null&&(i.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(i.sizeAttenuation=this.sizeAttenuation),this.blending!==ih&&(i.blending=this.blending),this.side!==Os&&(i.side=this.side),this.vertexColors===!0&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),this.transparent===!0&&(i.transparent=!0),this.blendSrc!==Mv&&(i.blendSrc=this.blendSrc),this.blendDst!==Cv&&(i.blendDst=this.blendDst),this.blendEquation!==Uc&&(i.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(i.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(i.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(i.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(i.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(i.blendAlpha=this.blendAlpha),this.depthFunc!==rh&&(i.depthFunc=this.depthFunc),this.depthTest===!1&&(i.depthTest=this.depthTest),this.depthWrite===!1&&(i.depthWrite=this.depthWrite),this.colorWrite===!1&&(i.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(i.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==kb&&(i.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(i.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(i.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==Jf&&(i.stencilFail=this.stencilFail),this.stencilZFail!==Jf&&(i.stencilZFail=this.stencilZFail),this.stencilZPass!==Jf&&(i.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(i.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(i.rotation=this.rotation),this.polygonOffset===!0&&(i.polygonOffset=!0),this.polygonOffsetFactor!==0&&(i.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(i.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(i.linewidth=this.linewidth),this.dashSize!==void 0&&(i.dashSize=this.dashSize),this.gapSize!==void 0&&(i.gapSize=this.gapSize),this.scale!==void 0&&(i.scale=this.scale),this.dithering===!0&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),this.alphaHash===!0&&(i.alphaHash=!0),this.alphaToCoverage===!0&&(i.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(i.premultipliedAlpha=!0),this.forceSinglePass===!0&&(i.forceSinglePass=!0),this.allowOverride===!1&&(i.allowOverride=!1),this.wireframe===!0&&(i.wireframe=!0),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!=="round"&&(i.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!=="round"&&(i.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(i.flatShading=!0),this.visible===!1&&(i.visible=!1),this.toneMapped===!1&&(i.toneMapped=!1),this.fog===!1&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData);function r(s){let a=[];for(let o in s){let l=s[o];delete l.metadata,a.push(l)}return a}if(t){let s=r(e.textures),a=r(e.images);s.length>0&&(i.textures=s),a.length>0&&(i.images=a)}return i}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.blendColor.copy(e.blendColor),this.blendAlpha=e.blendAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;let t=e.clippingPlanes,i=null;if(t!==null){let r=t.length;i=new Array(r);for(let s=0;s!==r;++s)i[s]=t[s].clone()}return this.clippingPlanes=i,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaHash=e.alphaHash,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.allowOverride=e.allowOverride,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(e){e===!0&&this.version++}},El=new ne,yb=new ne,av=new ne,wc=new ne,Pb=new ne,ov=new ne,Db=new ne,Co=class{constructor(e=new ne,t=new ne(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,El)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);let i=t.dot(this.direction);return i<0?t.copy(this.origin):t.copy(this.origin).addScaledVector(this.direction,i)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){let t=El.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(El.copy(this.origin).addScaledVector(this.direction,t),El.distanceToSquared(e))}distanceSqToSegment(e,t,i,r){yb.copy(e).add(t).multiplyScalar(.5),av.copy(t).sub(e).normalize(),wc.copy(this.origin).sub(yb);let s=e.distanceTo(t)*.5,a=-this.direction.dot(av),o=wc.dot(this.direction),l=-wc.dot(av),c=wc.lengthSq(),f=Math.abs(1-a*a),h,d,u,m;if(f>0)if(h=a*l-o,d=a*o-l,m=s*f,h>=0)if(d>=-m)if(d<=m){let _=1/f;h*=_,d*=_,u=h*(h+a*d+2*o)+d*(a*h+d+2*l)+c}else d=s,h=Math.max(0,-(a*d+o)),u=-h*h+d*(d+2*l)+c;else d=-s,h=Math.max(0,-(a*d+o)),u=-h*h+d*(d+2*l)+c;else d<=-m?(h=Math.max(0,-(-a*s+o)),d=h>0?-s:Math.min(Math.max(-s,-l),s),u=-h*h+d*(d+2*l)+c):d<=m?(h=0,d=Math.min(Math.max(-s,-l),s),u=d*(d+2*l)+c):(h=Math.max(0,-(a*s+o)),d=h>0?s:Math.min(Math.max(-s,-l),s),u=-h*h+d*(d+2*l)+c);else d=a>0?-s:s,h=Math.max(0,-(a*d+o)),u=-h*h+d*(d+2*l)+c;return i&&i.copy(this.origin).addScaledVector(this.direction,h),r&&r.copy(yb).addScaledVector(av,d),u}intersectSphere(e,t){El.subVectors(e.center,this.origin);let i=El.dot(this.direction),r=El.dot(El)-i*i,s=e.radius*e.radius;if(r>s)return null;let a=Math.sqrt(s-r),o=i-a,l=i+a;return l<0?null:o<0?this.at(l,t):this.at(o,t)}intersectsSphere(e){return e.radius<0?!1:this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){let t=e.normal.dot(this.direction);if(t===0)return e.distanceToPoint(this.origin)===0?0:null;let i=-(this.origin.dot(e.normal)+e.constant)/t;return i>=0?i:null}intersectPlane(e,t){let i=this.distanceToPlane(e);return i===null?null:this.at(i,t)}intersectsPlane(e){let t=e.distanceToPoint(this.origin);return t===0||e.normal.dot(this.direction)*t<0}intersectBox(e,t){let i,r,s,a,o,l,c=1/this.direction.x,f=1/this.direction.y,h=1/this.direction.z,d=this.origin;return c>=0?(i=(e.min.x-d.x)*c,r=(e.max.x-d.x)*c):(i=(e.max.x-d.x)*c,r=(e.min.x-d.x)*c),f>=0?(s=(e.min.y-d.y)*f,a=(e.max.y-d.y)*f):(s=(e.max.y-d.y)*f,a=(e.min.y-d.y)*f),i>a||s>r||((s>i||isNaN(i))&&(i=s),(a=0?(o=(e.min.z-d.z)*h,l=(e.max.z-d.z)*h):(o=(e.max.z-d.z)*h,l=(e.min.z-d.z)*h),i>l||o>r)||((o>i||i!==i)&&(i=o),(l=0?i:r,t)}intersectsBox(e){return this.intersectBox(e,El)!==null}intersectTriangle(e,t,i,r,s){Pb.subVectors(t,e),ov.subVectors(i,e),Db.crossVectors(Pb,ov);let a=this.direction.dot(Db),o;if(a>0){if(r)return null;o=1}else if(a<0)o=-1,a=-a;else return null;wc.subVectors(this.origin,e);let l=o*this.direction.dot(ov.crossVectors(wc,ov));if(l<0)return null;let c=o*this.direction.dot(Pb.cross(wc));if(c<0||l+c>a)return null;let f=-o*wc.dot(Db);return f<0?null:this.at(f/a,s)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}},Wa=class extends Ur{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new ct(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new ka,this.combine=qp,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}},YN=new li,Qf=new Co,lv=new ts,KN=new ne,cv=new ne,fv=new ne,hv=new ne,Lb=new ne,dv=new ne,jN=new ne,uv=new ne,ci=class extends nr{constructor(e=new sr,t=new Wa){super(),this.isMesh=!0,this.type="Mesh",this.geometry=e,this.material=t,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.count=1,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),e.morphTargetInfluences!==void 0&&(this.morphTargetInfluences=e.morphTargetInfluences.slice()),e.morphTargetDictionary!==void 0&&(this.morphTargetDictionary=Object.assign({},e.morphTargetDictionary)),this.material=Array.isArray(e.material)?e.material.slice():e.material,this.geometry=e.geometry,this}updateMorphTargets(){let t=this.geometry.morphAttributes,i=Object.keys(t);if(i.length>0){let r=t[i[0]];if(r!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let s=0,a=r.length;s(e.far-e.near)**2))&&(YN.copy(s).invert(),Qf.copy(e.ray).applyMatrix4(YN),!(i.boundingBox!==null&&Qf.intersectsBox(i.boundingBox)===!1)&&this._computeIntersections(e,t,Qf)))}_computeIntersections(e,t,i){let r,s=this.geometry,a=this.material,o=s.index,l=s.attributes.position,c=s.attributes.uv,f=s.attributes.uv1,h=s.attributes.normal,d=s.groups,u=s.drawRange;if(o!==null)if(Array.isArray(a))for(let m=0,_=d.length;m<_;m++){let p=d[m],g=a[p.materialIndex],v=Math.max(p.start,u.start),x=Math.min(o.count,Math.min(p.start+p.count,u.start+u.count));for(let A=v,S=x;A1)?null:t.copy(e.start).addScaledVector(r,a)}intersectsLine(e){let t=this.distanceToPoint(e.start),i=this.distanceToPoint(e.end);return t<0&&i>0||i<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){let i=t||Kq.getNormalMatrix(e),r=this.coplanarPoint(wb).applyMatrix4(e),s=this.normal.applyMatrix3(i).normalize();return this.constant=-r.dot(s),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new this.constructor().copy(this)}},$f=new ts,jq=new Lt(.5,.5),gv=new ne,ru=class{constructor(e=new aa,t=new aa,i=new aa,r=new aa,s=new aa,a=new aa){this.planes=[e,t,i,r,s,a]}set(e,t,i,r,s,a){let o=this.planes;return o[0].copy(e),o[1].copy(t),o[2].copy(i),o[3].copy(r),o[4].copy(s),o[5].copy(a),this}copy(e){let t=this.planes;for(let i=0;i<6;i++)t[i].copy(e.planes[i]);return this}setFromProjectionMatrix(e,t=Va,i=!1){let r=this.planes,s=e.elements,a=s[0],o=s[1],l=s[2],c=s[3],f=s[4],h=s[5],d=s[6],u=s[7],m=s[8],_=s[9],p=s[10],g=s[11],v=s[12],x=s[13],A=s[14],S=s[15];if(r[0].setComponents(c-a,u-f,g-m,S-v).normalize(),r[1].setComponents(c+a,u+f,g+m,S+v).normalize(),r[2].setComponents(c+o,u+h,g+_,S+x).normalize(),r[3].setComponents(c-o,u-h,g-_,S-x).normalize(),i)r[4].setComponents(l,d,p,A).normalize(),r[5].setComponents(c-l,u-d,g-p,S-A).normalize();else if(r[4].setComponents(c-l,u-d,g-p,S-A).normalize(),t===Va)r[5].setComponents(c+l,u+d,g+p,S+A).normalize();else if(t===Kd)r[5].setComponents(l,d,p,A).normalize();else throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+t);return this}intersectsObject(e){if(e.boundingSphere!==void 0)e.boundingSphere===null&&e.computeBoundingSphere(),$f.copy(e.boundingSphere).applyMatrix4(e.matrixWorld);else{let t=e.geometry;t.boundingSphere===null&&t.computeBoundingSphere(),$f.copy(t.boundingSphere).applyMatrix4(e.matrixWorld)}return this.intersectsSphere($f)}intersectsSprite(e){$f.center.set(0,0,0);let t=jq.distanceTo(e.center);return $f.radius=.7071067811865476+t,$f.applyMatrix4(e.matrixWorld),this.intersectsSphere($f)}intersectsSphere(e){let t=this.planes,i=e.center,r=-e.radius;for(let s=0;s<6;s++)if(t[s].distanceToPoint(i)0?e.max.x:e.min.x,gv.y=r.normal.y>0?e.max.y:e.min.y,gv.z=r.normal.z>0?e.max.z:e.min.z,r.distanceToPoint(gv)<0)return!1}return!0}containsPoint(e){let t=this.planes;for(let i=0;i<6;i++)if(t[i].distanceToPoint(e)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}},ws=class extends Ur{constructor(e){super(),this.isLineBasicMaterial=!0,this.type="LineBasicMaterial",this.color=new ct(16777215),this.map=null,this.linewidth=1,this.linecap="round",this.linejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.linewidth=e.linewidth,this.linecap=e.linecap,this.linejoin=e.linejoin,this.fog=e.fog,this}},kv=new ne,Wv=new ne,iw=new li,Rp=new Co,vv=new ts,Fb=new ne,rw=new ne,ch=class extends nr{constructor(e=new sr,t=new ws){super(),this.isLine=!0,this.type="Line",this.geometry=e,this.material=t,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),this.material=Array.isArray(e.material)?e.material.slice():e.material,this.geometry=e.geometry,this}computeLineDistances(){let e=this.geometry;if(e.index===null){let t=e.attributes.position,i=[0];for(let r=1,s=t.count;r0){let r=t[i[0]];if(r!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let s=0,a=r.length;s0){let r=t[i[0]];if(r!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let s=0,a=r.length;s0?1:-1,f.push(q.x,q.y,q.z),h.push(Y/R),h.push(1-Z/I),W+=1}}for(let Z=0;Z0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader,t.lights=this.lights,t.clipping=this.clipping;let i={};for(let r in this.extensions)this.extensions[r]===!0&&(i[r]=!0);return Object.keys(i).length>0&&(t.extensions=i),t}},Fv=class extends ws{constructor(e){super(e),this.isRawShaderMaterial=!0,this.type="RawShaderMaterial"}},rs=class extends Ur{constructor(e){super(),this.isMeshStandardMaterial=!0,this.type="MeshStandardMaterial",this.defines={STANDARD:""},this.color=new ct(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new ct(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=fu,this.normalScale=new Lt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Ua,this.envMapIntensity=1,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.defines={STANDARD:""},this.color.copy(e.color),this.roughness=e.roughness,this.metalness=e.metalness,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.roughnessMap=e.roughnessMap,this.metalnessMap=e.metalnessMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.envMapIntensity=e.envMapIntensity,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}},ns=class extends rs{constructor(e){super(),this.isMeshPhysicalMaterial=!0,this.defines={STANDARD:"",PHYSICAL:""},this.type="MeshPhysicalMaterial",this.anisotropyRotation=0,this.anisotropyMap=null,this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new Lt(1,1),this.clearcoatNormalMap=null,this.ior=1.5,Object.defineProperty(this,"reflectivity",{get:function(){return mi(2.5*(this.ior-1)/(this.ior+1),0,1)},set:function(t){this.ior=(1+.4*t)/(1-.4*t)}}),this.iridescenceMap=null,this.iridescenceIOR=1.3,this.iridescenceThicknessRange=[100,400],this.iridescenceThicknessMap=null,this.sheenColor=new ct(0),this.sheenColorMap=null,this.sheenRoughness=1,this.sheenRoughnessMap=null,this.transmissionMap=null,this.thickness=0,this.thicknessMap=null,this.attenuationDistance=1/0,this.attenuationColor=new ct(1,1,1),this.specularIntensity=1,this.specularIntensityMap=null,this.specularColor=new ct(1,1,1),this.specularColorMap=null,this._anisotropy=0,this._clearcoat=0,this._dispersion=0,this._iridescence=0,this._sheen=0,this._transmission=0,this.setValues(e)}get anisotropy(){return this._anisotropy}set anisotropy(e){this._anisotropy>0!=e>0&&this.version++,this._anisotropy=e}get clearcoat(){return this._clearcoat}set clearcoat(e){this._clearcoat>0!=e>0&&this.version++,this._clearcoat=e}get iridescence(){return this._iridescence}set iridescence(e){this._iridescence>0!=e>0&&this.version++,this._iridescence=e}get dispersion(){return this._dispersion}set dispersion(e){this._dispersion>0!=e>0&&this.version++,this._dispersion=e}get sheen(){return this._sheen}set sheen(e){this._sheen>0!=e>0&&this.version++,this._sheen=e}get transmission(){return this._transmission}set transmission(e){this._transmission>0!=e>0&&this.version++,this._transmission=e}copy(e){return super.copy(e),this.defines={STANDARD:"",PHYSICAL:""},this.anisotropy=e.anisotropy,this.anisotropyRotation=e.anisotropyRotation,this.anisotropyMap=e.anisotropyMap,this.clearcoat=e.clearcoat,this.clearcoatMap=e.clearcoatMap,this.clearcoatRoughness=e.clearcoatRoughness,this.clearcoatRoughnessMap=e.clearcoatRoughnessMap,this.clearcoatNormalMap=e.clearcoatNormalMap,this.clearcoatNormalScale.copy(e.clearcoatNormalScale),this.dispersion=e.dispersion,this.ior=e.ior,this.iridescence=e.iridescence,this.iridescenceMap=e.iridescenceMap,this.iridescenceIOR=e.iridescenceIOR,this.iridescenceThicknessRange=[...e.iridescenceThicknessRange],this.iridescenceThicknessMap=e.iridescenceThicknessMap,this.sheen=e.sheen,this.sheenColor.copy(e.sheenColor),this.sheenColorMap=e.sheenColorMap,this.sheenRoughness=e.sheenRoughness,this.sheenRoughnessMap=e.sheenRoughnessMap,this.transmission=e.transmission,this.transmissionMap=e.transmissionMap,this.thickness=e.thickness,this.thicknessMap=e.thicknessMap,this.attenuationDistance=e.attenuationDistance,this.attenuationColor.copy(e.attenuationColor),this.specularIntensity=e.specularIntensity,this.specularIntensityMap=e.specularIntensityMap,this.specularColor.copy(e.specularColor),this.specularColorMap=e.specularColorMap,this}},hh=class extends Ur{constructor(e){super(),this.isMeshPhongMaterial=!0,this.type="MeshPhongMaterial",this.color=new ct(16777215),this.specular=new ct(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new ct(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=fu,this.normalScale=new Lt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Ua,this.combine=Wp,this.reflectivity=1,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.specular.copy(e.specular),this.shininess=e.shininess,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.envMapIntensity=e.envMapIntensity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}},Lp=class extends Ur{constructor(e){super(),this.isMeshLambertMaterial=!0,this.type="MeshLambertMaterial",this.color=new ct(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new ct(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=fu,this.normalScale=new Lt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Ua,this.combine=Wp,this.reflectivity=1,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.envMapIntensity=e.envMapIntensity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}},wv=class extends Ur{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=OF,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(e)}copy(e){return super.copy(e),this.depthPacking=e.depthPacking,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this}},Bv=class extends Ur{constructor(e){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(e)}copy(e){return super.copy(e),this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}};Mo=class{constructor(e,t,i,r){this.parameterPositions=e,this._cachedIndex=0,this.resultBuffer=r!==void 0?r:new t.constructor(i),this.sampleValues=t,this.valueSize=i,this.settings=null,this.DefaultSettings_={}}evaluate(e){let t=this.parameterPositions,i=this._cachedIndex,r=t[i],s=t[i-1];e:{t:{let a;i:{r:if(!(e=s)){let o=t[1];e=s)break t}a=i,i=0;break i}break e}for(;i>>1;et;)--a;if(++a,s!==0||a!==r){s>=a&&(a=Math.max(a,1),s=a-1);let o=this.getValueSize();this.times=i.slice(s,a),this.values=this.values.slice(s*o,a*o)}return this}validate(){let e=!0,t=this.getValueSize();t-Math.floor(t)!==0&&(Gt("KeyframeTrack: Invalid value size in track.",this),e=!1);let i=this.times,r=this.values,s=i.length;s===0&&(Gt("KeyframeTrack: Track is empty.",this),e=!1);let a=null;for(let o=0;o!==s;o++){let l=i[o];if(typeof l=="number"&&isNaN(l)){Gt("KeyframeTrack: Time is not a valid number.",this,o,l),e=!1;break}if(a!==null&&a>l){Gt("KeyframeTrack: Out of order keys.",this,o,l,a),e=!1;break}a=l}if(r!==void 0&&Hj(r))for(let o=0,l=r.length;o!==l;++o){let c=r[o];if(isNaN(c)){Gt("KeyframeTrack: Value is not a valid number.",this,o,c),e=!1;break}}return e}optimize(){let e=this.times.slice(),t=this.values.slice(),i=this.getValueSize(),r=this.getInterpolation()===gv,s=e.length-1,a=1;for(let o=1;o0){e[a]=e[s];for(let o=s*i,l=a*i,c=0;c!==i;++c)t[l+c]=t[o+c];++a}return a!==e.length?(this.times=e.slice(0,a),this.values=t.slice(0,a*i)):(this.times=e,this.values=t),this}clone(){let e=this.times.slice(),t=this.values.slice(),i=this.constructor,r=new i(this.name,e,t);return r.createInterpolant=this.createInterpolant,r}};ss.prototype.ValueTypeName="";ss.prototype.TimeBufferType=Float32Array;ss.prototype.ValueBufferType=Float32Array;ss.prototype.DefaultInterpolation=sh;Tl=class extends ss{constructor(e,t,i){super(e,t,i)}};Tl.prototype.ValueTypeName="bool";Tl.prototype.ValueBufferType=Array;Tl.prototype.DefaultInterpolation=nh;Tl.prototype.InterpolantFactoryMethodLinear=void 0;Tl.prototype.InterpolantFactoryMethodSmooth=void 0;Np=class extends ss{constructor(e,t,i,r){super(e,t,i,r)}};Np.prototype.ValueTypeName="color";Co=class extends ss{constructor(e,t,i,r){super(e,t,i,r)}};Co.prototype.ValueTypeName="number";kv=class extends Mo{constructor(e,t,i,r){super(e,t,i,r)}interpolate_(e,t,i,r){let s=this.resultBuffer,a=this.sampleValues,o=this.valueSize,l=(i-t)/(r-t),c=e*o;for(let f=c+o;c!==f;c+=4)Kr.slerpFlat(s,0,a,c-o,a,c,l);return s}},yo=class extends ss{constructor(e,t,i,r){super(e,t,i,r)}InterpolantFactoryMethodLinear(e){return new kv(this.times,this.values,this.getValueSize(),e)}};yo.prototype.ValueTypeName="quaternion";yo.prototype.InterpolantFactoryMethodSmooth=void 0;Al=class extends ss{constructor(e,t,i){super(e,t,i)}};Al.prototype.ValueTypeName="string";Al.prototype.ValueBufferType=Array;Al.prototype.DefaultInterpolation=nh;Al.prototype.InterpolantFactoryMethodLinear=void 0;Al.prototype.InterpolantFactoryMethodSmooth=void 0;Po=class extends ss{constructor(e,t,i,r){super(e,t,i,r)}};Po.prototype.ValueTypeName="vector";dh=class{constructor(e="",t=-1,i=[],r=wE){this.name=e,this.tracks=i,this.duration=t,this.blendMode=r,this.uuid=Ba(),this.userData={},this.duration<0&&this.resetDuration()}static parse(e){let t=[],i=e.tracks,r=1/(e.fps||1);for(let a=0,o=i.length;a!==o;++a)t.push(Lq(i[a]).scale(r));let s=new this(e.name,e.duration,t,e.blendMode);return s.uuid=e.uuid,s.userData=JSON.parse(e.userData||"{}"),s}static toJSON(e){let t=[],i=e.tracks,r={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid,blendMode:e.blendMode,userData:JSON.stringify(e.userData)};for(let s=0,a=i.length;s!==a;++s)t.push(ss.toJSON(i[s]));return r}static CreateFromMorphTargetSequence(e,t,i,r){let s=t.length,a=[];for(let o=0;o1){let h=f[1],d=r[h];d||(r[h]=d=[]),d.push(c)}}let a=[];for(let o in r)a.push(this.CreateFromMorphTargetSequence(o,r[o],t,i));return a}static parseAnimation(e,t){if(Ct("AnimationClip: parseAnimation() is deprecated and will be removed with r185"),!e)return Gt("AnimationClip: No animation in JSONLoader data."),null;let i=function(h,d,u,m,_){if(u.length!==0){let p=[],g=[];KF(u,p,g,m),p.length!==0&&_.push(new h(d,p,g))}},r=[],s=e.name||"default",a=e.fps||30,o=e.blendMode,l=e.length||-1,c=e.hierarchy||[];for(let h=0;h{t&&t(s),this.manager.itemEnd(e)},0);return}if(vl[e]!==void 0){vl[e].push({onLoad:t,onProgress:i,onError:r});return}vl[e]=[],vl[e].push({onLoad:t,onProgress:i,onError:r});let a=new Request(e,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin",signal:typeof AbortSignal.any=="function"?AbortSignal.any([this._abortController.signal,this.manager.abortController.signal]):this._abortController.signal}),o=this.mimeType,l=this.responseType;fetch(a).then(c=>{if(c.status===200||c.status===0){if(c.status===0&&Ct("FileLoader: HTTP Status 0 received."),typeof ReadableStream=="undefined"||c.body===void 0||c.body.getReader===void 0)return c;let f=vl[e],h=c.body.getReader(),d=c.headers.get("X-File-Size")||c.headers.get("Content-Length"),u=d?parseInt(d):0,m=u!==0,_=0,p=new ReadableStream({start(g){v();function v(){h.read().then(({done:x,value:A})=>{if(x)g.close();else{_+=A.byteLength;let E=new ProgressEvent("progress",{lengthComputable:m,loaded:_,total:u});for(let T=0,R=f.length;T{g.error(x)})}}});return new Response(p)}else throw new Pb(`fetch for "${c.url}" responded with ${c.status}: ${c.statusText}`,c)}).then(c=>{switch(l){case"arraybuffer":return c.arrayBuffer();case"blob":return c.blob();case"document":return c.text().then(f=>new DOMParser().parseFromString(f,o));case"json":return c.json();default:if(o==="")return c.text();{let h=/charset="?([^;"\s]*)"?/i.exec(o),d=h&&h[1]?h[1].toLowerCase():void 0,u=new TextDecoder(d);return c.arrayBuffer().then(m=>u.decode(m))}}}).then(c=>{xo.add(`file:${e}`,c);let f=vl[e];delete vl[e];for(let h=0,d=f.length;h{let f=vl[e];if(f===void 0)throw this.manager.itemError(e),c;delete vl[e];for(let h=0,d=f.length;h{this.manager.itemEnd(e)}),this.manager.itemStart(e)}setResponseType(e){return this.responseType=e,this}setMimeType(e){return this.mimeType=e,this}abort(){return this._abortController.abort(),this._abortController=new AbortController,this}},Vd=new WeakMap,Hv=class extends sn{constructor(e){super(e)}load(e,t,i,r){this.path!==void 0&&(e=this.path+e),e=this.manager.resolveURL(e);let s=this,a=xo.get(`image:${e}`);if(a!==void 0){if(a.complete===!0)s.manager.itemStart(e),setTimeout(function(){t&&t(a),s.manager.itemEnd(e)},0);else{let h=Vd.get(a);h===void 0&&(h=[],Vd.set(a,h)),h.push({onLoad:t,onError:r})}return a}let o=Xd("img");function l(){f(),t&&t(this);let h=Vd.get(this)||[];for(let d=0;d{bb.has(a)===!0?(r&&r(bb.get(a)),s.manager.itemError(e),s.manager.itemEnd(e)):(t&&t(c),s.manager.itemEnd(e))});return}setTimeout(function(){t&&t(a),s.manager.itemEnd(e)},0);return}let o={};o.credentials=this.crossOrigin==="anonymous"?"same-origin":"include",o.headers=this.requestHeader,o.signal=typeof AbortSignal.any=="function"?AbortSignal.any([this._abortController.signal,this.manager.abortController.signal]):this._abortController.signal;let l=fetch(e,o).then(function(c){return c.blob()}).then(function(c){return createImageBitmap(c,Object.assign(s.options,{colorSpaceConversion:"none"}))}).then(function(c){xo.add(`image-bitmap:${e}`,c),t&&t(c),s.manager.itemEnd(e)}).catch(function(c){r&&r(c),bb.set(l,c),xo.remove(`image-bitmap:${e}`),s.manager.itemError(e),s.manager.itemEnd(e)});xo.add(`image-bitmap:${e}`,l),s.manager.itemStart(e)}abort(){return this._abortController.abort(),this._abortController=new AbortController,this}},Gd=-90,kd=1,zv=class extends nr{constructor(e,t,i){super(),this.type="CubeCamera",this.renderTarget=i,this.coordinateSystem=null,this.activeMipmapLevel=0;let r=new Br(Gd,kd,e,t);r.layers=this.layers,this.add(r);let s=new Br(Gd,kd,e,t);s.layers=this.layers,this.add(s);let a=new Br(Gd,kd,e,t);a.layers=this.layers,this.add(a);let o=new Br(Gd,kd,e,t);o.layers=this.layers,this.add(o);let l=new Br(Gd,kd,e,t);l.layers=this.layers,this.add(l);let c=new Br(Gd,kd,e,t);c.layers=this.layers,this.add(c)}updateCoordinateSystem(){let e=this.coordinateSystem,t=this.children.concat(),[i,r,s,a,o,l]=t;for(let c of t)this.remove(c);if(e===wa)i.up.set(0,1,0),i.lookAt(1,0,0),r.up.set(0,1,0),r.lookAt(-1,0,0),s.up.set(0,0,-1),s.lookAt(0,1,0),a.up.set(0,0,1),a.lookAt(0,-1,0),o.up.set(0,1,0),o.lookAt(0,0,1),l.up.set(0,1,0),l.lookAt(0,0,-1);else if(e===zd)i.up.set(0,-1,0),i.lookAt(-1,0,0),r.up.set(0,-1,0),r.lookAt(1,0,0),s.up.set(0,0,1),s.lookAt(0,1,0),a.up.set(0,0,-1),a.lookAt(0,-1,0),o.up.set(0,-1,0),o.lookAt(0,0,1),l.up.set(0,-1,0),l.lookAt(0,0,-1);else throw new Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: "+e);for(let c of t)this.add(c),c.updateMatrixWorld()}update(e,t){this.parent===null&&this.updateMatrixWorld();let{renderTarget:i,activeMipmapLevel:r}=this;this.coordinateSystem!==e.coordinateSystem&&(this.coordinateSystem=e.coordinateSystem,this.updateCoordinateSystem());let[s,a,o,l,c,f]=this.children,h=e.getRenderTarget(),d=e.getActiveCubeFace(),u=e.getActiveMipmapLevel(),m=e.xr.enabled;e.xr.enabled=!1;let _=i.texture.generateMipmaps;i.texture.generateMipmaps=!1;let p=!1;e.isWebGLRenderer===!0?p=e.state.buffers.depth.getReversed():p=e.reversedDepthBuffer,e.setRenderTarget(i,0,r),p&&e.autoClear===!1&&e.clearDepth(),e.render(t,s),e.setRenderTarget(i,1,r),p&&e.autoClear===!1&&e.clearDepth(),e.render(t,a),e.setRenderTarget(i,2,r),p&&e.autoClear===!1&&e.clearDepth(),e.render(t,o),e.setRenderTarget(i,3,r),p&&e.autoClear===!1&&e.clearDepth(),e.render(t,l),e.setRenderTarget(i,4,r),p&&e.autoClear===!1&&e.clearDepth(),e.render(t,c),i.texture.generateMipmaps=_,e.setRenderTarget(i,5,r),p&&e.autoClear===!1&&e.clearDepth(),e.render(t,f),e.setRenderTarget(h,d,u),e.xr.enabled=m,i.texture.needsPMREMUpdate=!0}},Xv=class extends Br{constructor(e=[]){super(),this.isArrayCamera=!0,this.isMultiViewCamera=!1,this.cameras=e}},Yv=class{constructor(e,t,i){this.binding=e,this.valueSize=i;let r,s,a;switch(t){case"quaternion":r=this._slerp,s=this._slerpAdditive,a=this._setAdditiveIdentityQuaternion,this.buffer=new Float64Array(i*6),this._workIndex=5;break;case"string":case"bool":r=this._select,s=this._select,a=this._setAdditiveIdentityOther,this.buffer=new Array(i*5);break;default:r=this._lerp,s=this._lerpAdditive,a=this._setAdditiveIdentityNumeric,this.buffer=new Float64Array(i*5)}this._mixBufferRegion=r,this._mixBufferRegionAdditive=s,this._setIdentity=a,this._origIndex=3,this._addIndex=4,this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,this.useCount=0,this.referenceCount=0}accumulate(e,t){let i=this.buffer,r=this.valueSize,s=e*r+r,a=this.cumulativeWeight;if(a===0){for(let o=0;o!==r;++o)i[s+o]=i[o];a=t}else{a+=t;let o=t/a;this._mixBufferRegion(i,s,0,o,r)}this.cumulativeWeight=a}accumulateAdditive(e){let t=this.buffer,i=this.valueSize,r=i*this._addIndex;this.cumulativeWeightAdditive===0&&this._setIdentity(),this._mixBufferRegionAdditive(t,r,0,e,i),this.cumulativeWeightAdditive+=e}apply(e){let t=this.valueSize,i=this.buffer,r=e*t+t,s=this.cumulativeWeight,a=this.cumulativeWeightAdditive,o=this.binding;if(this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,s<1){let l=t*this._origIndex;this._mixBufferRegion(i,r,l,1-s,t)}a>0&&this._mixBufferRegionAdditive(i,r,this._addIndex*t,1,t);for(let l=t,c=t+t;l!==c;++l)if(i[l]!==i[l+t]){o.setValue(i,r);break}}saveOriginalState(){let e=this.binding,t=this.buffer,i=this.valueSize,r=i*this._origIndex;e.getValue(t,r);for(let s=i,a=r;s!==a;++s)t[s]=t[r+s%i];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){let e=this.valueSize*3;this.binding.setValue(this.buffer,e)}_setAdditiveIdentityNumeric(){let e=this._addIndex*this.valueSize,t=e+this.valueSize;for(let i=e;i=.5)for(let a=0;a!==s;++a)e[t+a]=e[i+a]}_slerp(e,t,i,r){Kr.slerpFlat(e,t,e,t,e,i,r)}_slerpAdditive(e,t,i,r,s){let a=this._workIndex*s;Kr.multiplyQuaternionsFlat(e,a,e,t,e,i),Kr.slerpFlat(e,t,e,t,e,a,r)}_lerp(e,t,i,r,s){let a=1-r;for(let o=0;o!==s;++o){let l=t+o;e[l]=e[l]*a+e[i+o]*r}}_lerpAdditive(e,t,i,r,s){for(let a=0;a!==s;++a){let o=t+a;e[o]=e[o]+e[i+a]*r}}},sI="\\[\\]\\.:\\/",Oq=new RegExp("["+sI+"]","g"),aI="[^"+sI+"]",Nq="[^"+sI.replace("\\.","")+"]",Fq=/((?:WC+[\/:])*)/.source.replace("WC",aI),wq=/(WCOD+)?/.source.replace("WCOD",Nq),Bq=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",aI),Uq=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",aI),Vq=new RegExp("^"+Fq+wq+Bq+Uq+"$"),Gq=["material","materials","bones","map"],Nb=class{constructor(e,t,i){let r=i||Ki.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,r)}getValue(e,t){this.bind();let i=this._targetGroup.nCachedObjects_,r=this._bindings[i];r!==void 0&&r.getValue(e,t)}setValue(e,t){let i=this._bindings;for(let r=this._targetGroup.nCachedObjects_,s=i.length;r!==s;++r)i[r].setValue(e,t)}bind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,i=e.length;t!==i;++t)e[t].bind()}unbind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,i=e.length;t!==i;++t)e[t].unbind()}},Ki=class n{constructor(e,t,i){this.path=t,this.parsedPath=i||n.parseTrackName(t),this.node=n.findNode(e,this.parsedPath.nodeName),this.rootNode=e,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(e,t,i){return e&&e.isAnimationObjectGroup?new n.Composite(e,t,i):new n(e,t,i)}static sanitizeNodeName(e){return e.replace(/\s/g,"_").replace(Oq,"")}static parseTrackName(e){let t=Vq.exec(e);if(t===null)throw new Error("PropertyBinding: Cannot parse trackName: "+e);let i={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},r=i.nodeName&&i.nodeName.lastIndexOf(".");if(r!==void 0&&r!==-1){let s=i.nodeName.substring(r+1);Gq.indexOf(s)!==-1&&(i.nodeName=i.nodeName.substring(0,r),i.objectName=s)}if(i.propertyName===null||i.propertyName.length===0)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+e);return i}static findNode(e,t){if(t===void 0||t===""||t==="."||t===-1||t===e.name||t===e.uuid)return e;if(e.skeleton){let i=e.skeleton.getBoneByName(t);if(i!==void 0)return i}if(e.children){let i=function(s){for(let a=0;a0){let l=this._interpolants,c=this._propertyBindings;switch(this.blendMode){case LF:for(let f=0,h=l.length;f!==h;++f)l[f].evaluate(a),c[f].accumulateAdditive(o);break;case wE:default:for(let f=0,h=l.length;f!==h;++f)l[f].evaluate(a),c[f].accumulate(r,o)}}}_updateWeight(e){let t=0;if(this.enabled){t=this.weight;let i=this._weightInterpolant;if(i!==null){let r=i.evaluate(e)[0];t*=r,e>i.parameterPositions[1]&&(this.stopFading(),r===0&&(this.enabled=!1))}}return this._effectiveWeight=t,t}_updateTimeScale(e){let t=0;if(!this.paused){t=this.timeScale;let i=this._timeScaleInterpolant;if(i!==null){let r=i.evaluate(e)[0];t*=r,e>i.parameterPositions[1]&&(this.stopWarping(),t===0?this.paused=!0:this.timeScale=t)}}return this._effectiveTimeScale=t,t}_updateTime(e){let t=this._clip.duration,i=this.loop,r=this.time+e,s=this._loopCount,a=i===DF;if(e===0)return s===-1?r:a&&(s&1)===1?t-r:r;if(i===yF){s===-1&&(this._loopCount=0,this._setEndings(!0,!0,!1));e:{if(r>=t)r=t;else if(r<0)r=0;else{this.time=r;break e}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=r,this._mixer.dispatchEvent({type:"finished",action:this,direction:e<0?-1:1})}}else{if(s===-1&&(e>=0?(s=0,this._setEndings(!0,this.repetitions===0,a)):this._setEndings(this.repetitions===0,!0,a)),r>=t||r<0){let o=Math.floor(r/t);r-=t*o,s+=Math.abs(o);let l=this.repetitions-s;if(l<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,r=e>0?t:0,this.time=r,this._mixer.dispatchEvent({type:"finished",action:this,direction:e>0?1:-1});else{if(l===1){let c=e<0;this._setEndings(c,!c,a)}else this._setEndings(!1,!1,a);this._loopCount=s,this.time=r,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:o})}}else this._loopCount=s,this.time=r;if(a&&(s&1)===1)return t-r}return r}_setEndings(e,t,i){let r=this._interpolantSettings;i?(r.endingStart=th,r.endingEnd=th):(e?r.endingStart=this.zeroSlopeAtStart?th:eh:r.endingStart=Sp,t?r.endingEnd=this.zeroSlopeAtEnd?th:eh:r.endingEnd=Sp)}_scheduleFading(e,t,i){let r=this._mixer,s=r.time,a=this._weightInterpolant;a===null&&(a=r._lendControlInterpolant(),this._weightInterpolant=a);let o=a.parameterPositions,l=a.sampleValues;return o[0]=s,l[0]=t,o[1]=s+e,l[1]=i,this}},kq=new Float32Array(1),Up=class extends na{constructor(e){super(),this._root=e,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1,typeof __THREE_DEVTOOLS__!="undefined"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}_bindAction(e,t){let i=e._localRoot||this._root,r=e._clip.tracks,s=r.length,a=e._propertyBindings,o=e._interpolants,l=i.uuid,c=this._bindingsByRootAndName,f=c[l];f===void 0&&(f={},c[l]=f);for(let h=0;h!==s;++h){let d=r[h],u=d.name,m=f[u];if(m!==void 0)++m.referenceCount,a[h]=m;else{if(m=a[h],m!==void 0){m._cacheIndex===null&&(++m.referenceCount,this._addInactiveBinding(m,l,u));continue}let _=t&&t._propertyBindings[h].binding.parsedPath;m=new Yv(Ki.create(i,u,_),d.ValueTypeName,d.getValueSize()),++m.referenceCount,this._addInactiveBinding(m,l,u),a[h]=m}o[h].resultBuffer=m.buffer}}_activateAction(e){if(!this._isActiveAction(e)){if(e._cacheIndex===null){let i=(e._localRoot||this._root).uuid,r=e._clip.uuid,s=this._actionsByClip[r];this._bindAction(e,s&&s.knownActions[0]),this._addInactiveAction(e,r,i)}let t=e._propertyBindings;for(let i=0,r=t.length;i!==r;++i){let s=t[i];s.useCount++===0&&(this._lendBinding(s),s.saveOriginalState())}this._lendAction(e)}}_deactivateAction(e){if(this._isActiveAction(e)){let t=e._propertyBindings;for(let i=0,r=t.length;i!==r;++i){let s=t[i];--s.useCount===0&&(s.restoreOriginalState(),this._takeBackBinding(s))}this._takeBackAction(e)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;let e=this;this.stats={actions:{get total(){return e._actions.length},get inUse(){return e._nActiveActions}},bindings:{get total(){return e._bindings.length},get inUse(){return e._nActiveBindings}},controlInterpolants:{get total(){return e._controlInterpolants.length},get inUse(){return e._nActiveControlInterpolants}}}}_isActiveAction(e){let t=e._cacheIndex;return t!==null&&t=0;--i)e[i].stop();return this}update(e){e*=this.timeScale;let t=this._actions,i=this._nActiveActions,r=this.time+=e,s=Math.sign(e),a=this._accuIndex^=1;for(let c=0;c!==i;++c)t[c]._update(r,e,s,a);let o=this._bindings,l=this._nActiveBindings;for(let c=0;c!==l;++c)o[c].apply(a);return this}setTime(e){this.time=0;for(let t=0;tu.start-m.start);let d=0;for(let u=1;u0;x=e.get(x,A)}return x}function m(v){let x=!1,A=u(v);A===null?p(a,o):A&&A.isColor&&(p(A,1),x=!0);let E=n.xr.getEnvironmentBlendMode();E==="additive"?t.buffers.color.setClear(0,0,0,1,s):E==="alpha-blend"&&t.buffers.color.setClear(0,0,0,0,s),(n.autoClear||x)&&(t.buffers.depth.setTest(!0),t.buffers.depth.setMask(!0),t.buffers.color.setMask(!0),n.clear(n.autoClearColor,n.autoClearDepth,n.autoClearStencil))}function _(v,x){let A=u(x);A&&(A.isCubeTexture||A.mapping===Hp)?(c===void 0&&(c=new ci(new Bc(1,1,1),new ws({name:"BackgroundCubeMaterial",uniforms:_h(wo.backgroundCube.uniforms),vertexShader:wo.backgroundCube.vertexShader,fragmentShader:wo.backgroundCube.fragmentShader,side:fn,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),c.geometry.deleteAttribute("normal"),c.geometry.deleteAttribute("uv"),c.onBeforeRender=function(E,T,R){this.matrixWorld.copyPosition(R.matrixWorld)},Object.defineProperty(c.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),i.update(c)),c.material.uniforms.envMap.value=A,c.material.uniforms.backgroundBlurriness.value=x.backgroundBlurriness,c.material.uniforms.backgroundIntensity.value=x.backgroundIntensity,c.material.uniforms.backgroundRotation.value.setFromMatrix4(bJ.makeRotationFromEuler(x.backgroundRotation)).transpose(),A.isCubeTexture&&A.isRenderTargetTexture===!1&&c.material.uniforms.backgroundRotation.value.premultiply(gw),c.material.toneMapped=ai.getTransfer(A.colorSpace)!==ki,(f!==A||h!==A.version||d!==n.toneMapping)&&(c.material.needsUpdate=!0,f=A,h=A.version,d=n.toneMapping),c.layers.enableAll(),v.unshift(c,c.geometry,c.material,0,0,null)):A&&A.isTexture&&(l===void 0&&(l=new ci(new fh(2,2),new ws({name:"BackgroundMaterial",uniforms:_h(wo.background.uniforms),vertexShader:wo.background.vertexShader,fragmentShader:wo.background.fragmentShader,side:Os,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),l.geometry.deleteAttribute("normal"),Object.defineProperty(l.material,"map",{get:function(){return this.uniforms.t2D.value}}),i.update(l)),l.material.uniforms.t2D.value=A,l.material.uniforms.backgroundIntensity.value=x.backgroundIntensity,l.material.toneMapped=ai.getTransfer(A.colorSpace)!==ki,A.matrixAutoUpdate===!0&&A.updateMatrix(),l.material.uniforms.uvTransform.value.copy(A.matrix),(f!==A||h!==A.version||d!==n.toneMapping)&&(l.material.needsUpdate=!0,f=A,h=A.version,d=n.toneMapping),l.layers.enableAll(),v.unshift(l,l.geometry,l.material,0,0,null))}function p(v,x){v.getRGB(GE,nI(n)),t.buffers.color.setClear(GE.r,GE.g,GE.b,x,s)}function g(){c!==void 0&&(c.geometry.dispose(),c.material.dispose(),c=void 0),l!==void 0&&(l.geometry.dispose(),l.material.dispose(),l=void 0)}return{getClearColor:function(){return a},setClearColor:function(v,x=1){a.set(v),o=x,p(a,o)},getClearAlpha:function(){return o},setClearAlpha:function(v){o=v,p(a,o)},render:m,addToRenderList:_,dispose:g}}function MJ(n,e){let t=n.getParameter(n.MAX_VERTEX_ATTRIBS),i={},r=d(null),s=r,a=!1;function o(D,O,V,N,w){let U=!1,G=h(D,N,V,O);s!==G&&(s=G,c(s.object)),U=u(D,N,V,w),U&&m(D,N,V,w),w!==null&&e.update(w,n.ELEMENT_ARRAY_BUFFER),(U||a)&&(a=!1,A(D,O,V,N),w!==null&&n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,e.get(w).buffer))}function l(){return n.createVertexArray()}function c(D){return n.bindVertexArray(D)}function f(D){return n.deleteVertexArray(D)}function h(D,O,V,N){let w=N.wireframe===!0,U=i[O.id];U===void 0&&(U={},i[O.id]=U);let G=D.isInstancedMesh===!0?D.id:0,J=U[G];J===void 0&&(J={},U[G]=J);let Y=J[V.id];Y===void 0&&(Y={},J[V.id]=Y);let Q=Y[w];return Q===void 0&&(Q=d(l()),Y[w]=Q),Q}function d(D){let O=[],V=[],N=[];for(let w=0;w=0){let X=w[Y],j=U[Y];if(j===void 0&&(Y==="instanceMatrix"&&D.instanceMatrix&&(j=D.instanceMatrix),Y==="instanceColor"&&D.instanceColor&&(j=D.instanceColor)),X===void 0||X.attribute!==j||j&&X.data!==j.data)return!0;G++}return s.attributesNum!==G||s.index!==N}function m(D,O,V,N){let w={},U=O.attributes,G=0,J=V.getAttributes();for(let Y in J)if(J[Y].location>=0){let X=U[Y];X===void 0&&(Y==="instanceMatrix"&&D.instanceMatrix&&(X=D.instanceMatrix),Y==="instanceColor"&&D.instanceColor&&(X=D.instanceColor));let j={};j.attribute=X,X&&X.data&&(j.data=X.data),w[Y]=j,G++}s.attributes=w,s.attributesNum=G,s.index=N}function _(){let D=s.newAttributes;for(let O=0,V=D.length;O=0){let Q=w[J];if(Q===void 0&&(J==="instanceMatrix"&&D.instanceMatrix&&(Q=D.instanceMatrix),J==="instanceColor"&&D.instanceColor&&(Q=D.instanceColor)),Q!==void 0){let X=Q.normalized,j=Q.itemSize,me=e.get(Q);if(me===void 0)continue;let xe=me.buffer,Ge=me.type,se=me.bytesPerElement,pe=Ge===n.INT||Ge===n.UNSIGNED_INT||Q.gpuType===$v;if(Q.isInterleavedBufferAttribute){let ie=Q.data,_e=ie.stride,Pe=Q.offset;if(ie.isInstancedInterleavedBuffer){for(let de=0;de0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.HIGH_FLOAT).precision>0)return"highp";R="mediump"}return R==="mediump"&&n.getShaderPrecisionFormat(n.VERTEX_SHADER,n.MEDIUM_FLOAT).precision>0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let c=t.precision!==void 0?t.precision:"highp",f=l(c);f!==c&&(Ct("WebGLRenderer:",c,"not supported, using",f,"instead."),c=f);let h=t.logarithmicDepthBuffer===!0,d=t.reversedDepthBuffer===!0&&e.has("EXT_clip_control");t.reversedDepthBuffer===!0&&d===!1&&Ct("WebGLRenderer: Unable to use reversed depth buffer due to missing EXT_clip_control extension. Fallback to default depth buffer.");let u=n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS),m=n.getParameter(n.MAX_VERTEX_TEXTURE_IMAGE_UNITS),_=n.getParameter(n.MAX_TEXTURE_SIZE),p=n.getParameter(n.MAX_CUBE_MAP_TEXTURE_SIZE),g=n.getParameter(n.MAX_VERTEX_ATTRIBS),v=n.getParameter(n.MAX_VERTEX_UNIFORM_VECTORS),x=n.getParameter(n.MAX_VARYING_VECTORS),A=n.getParameter(n.MAX_FRAGMENT_UNIFORM_VECTORS),E=n.getParameter(n.MAX_SAMPLES),T=n.getParameter(n.SAMPLES);return{isWebGL2:!0,getMaxAnisotropy:s,getMaxPrecision:l,textureFormatReadable:a,textureTypeReadable:o,precision:c,logarithmicDepthBuffer:h,reversedDepthBuffer:d,maxTextures:u,maxVertexTextures:m,maxTextureSize:_,maxCubemapSize:p,maxAttributes:g,maxVertexUniforms:v,maxVaryings:x,maxFragmentUniforms:A,maxSamples:E,samples:T}}function PJ(n){let e=this,t=null,i=0,r=!1,s=!1,a=new ia,o=new ii,l={value:null,needsUpdate:!1};this.uniform=l,this.numPlanes=0,this.numIntersection=0,this.init=function(h,d){let u=h.length!==0||d||i!==0||r;return r=d,i=h.length,u},this.beginShadows=function(){s=!0,f(null)},this.endShadows=function(){s=!1},this.setGlobalState=function(h,d){t=f(h,d,0)},this.setState=function(h,d,u){let m=h.clippingPlanes,_=h.clipIntersection,p=h.clipShadows,g=n.get(h);if(!r||m===null||m.length===0||s&&!p)s?f(null):c();else{let v=s?0:i,x=v*4,A=g.clippingState||null;l.value=A,A=f(m,d,x,u);for(let E=0;E!==x;++E)A[E]=t[E];g.clippingState=A,this.numIntersection=_?this.numPlanes:0,this.numPlanes+=v}};function c(){l.value!==t&&(l.value=t,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function f(h,d,u,m){let _=h!==null?h.length:0,p=null;if(_!==0){if(p=l.value,m!==!0||p===null){let g=u+_*4,v=d.matrixWorldInverse;o.getNormalMatrix(v),(p===null||p.lengthn-Xc?l=jF[a-n+Xc-1]:a===0&&(l=0),t.push(l);let c=1/(o-2),f=-c,h=1+c,d=[f,f,h,f,h,h,f,f,h,h,f,h],u=6,m=6,_=3,p=2,g=1,v=new Float32Array(_*m*u),x=new Float32Array(p*m*u),A=new Float32Array(g*m*u);for(let T=0;T2?0:-1,y=[R,I,0,R+2/3,I,0,R+2/3,I+1,0,R,I,0,R+2/3,I+1,0,R,I+1,0];v.set(y,_*m*T),x.set(d,p*m*T);let M=[T,T,T,T,T,T];A.set(M,g*m*T)}let E=new sr;E.setAttribute("position",new rr(v,_)),E.setAttribute("uv",new rr(x,p)),E.setAttribute("faceIndex",new rr(A,g)),i.push(new ci(E,null)),r>Xc&&r--}return{lodMeshes:i,sizeLods:e,sigmas:t}}function ZF(n,e,t){let i=new Ns(n,e,t);return i.texture.mapping=Hp,i.texture.name="PMREM.cubeUv",i.scissorTest=!0,i}function hu(n,e,t,i,r){n.viewport.set(e,t,i,r),n.scissor.set(e,t,i,r)}function NJ(n,e,t){return new ws({name:"PMREMGGXConvolution",defines:{GGX_SAMPLES:DJ,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/t,CUBEUV_MAX_MIP:`${n}.0`},uniforms:{envMap:{value:null},roughness:{value:0},mipInt:{value:0}},vertexShader:zE(),fragmentShader:` +}`,Fs=class extends Ur{constructor(e){super(),this.isShaderMaterial=!0,this.type="ShaderMaterial",this.defines={},this.uniforms={},this.uniformsGroups=[],this.vertexShader=Zq,this.fragmentShader=Qq,this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.forceSinglePass=!0,this.extensions={clipCullDistance:!1,multiDraw:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv1:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,e!==void 0&&this.setValues(e)}copy(e){return super.copy(e),this.fragmentShader=e.fragmentShader,this.vertexShader=e.vertexShader,this.uniforms=_h(e.uniforms),this.uniformsGroups=qq(e.uniformsGroups),this.defines=Object.assign({},e.defines),this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.fog=e.fog,this.lights=e.lights,this.clipping=e.clipping,this.extensions=Object.assign({},e.extensions),this.glslVersion=e.glslVersion,this.defaultAttributeValues=Object.assign({},e.defaultAttributeValues),this.index0AttributeName=e.index0AttributeName,this.uniformsNeedUpdate=e.uniformsNeedUpdate,this}toJSON(e){let t=super.toJSON(e);t.glslVersion=this.glslVersion,t.uniforms={};for(let r in this.uniforms){let a=this.uniforms[r].value;a&&a.isTexture?t.uniforms[r]={type:"t",value:a.toJSON(e).uuid}:a&&a.isColor?t.uniforms[r]={type:"c",value:a.getHex()}:a&&a.isVector2?t.uniforms[r]={type:"v2",value:a.toArray()}:a&&a.isVector3?t.uniforms[r]={type:"v3",value:a.toArray()}:a&&a.isVector4?t.uniforms[r]={type:"v4",value:a.toArray()}:a&&a.isMatrix3?t.uniforms[r]={type:"m3",value:a.toArray()}:a&&a.isMatrix4?t.uniforms[r]={type:"m4",value:a.toArray()}:t.uniforms[r]={value:a}}Object.keys(this.defines).length>0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader,t.lights=this.lights,t.clipping=this.clipping;let i={};for(let r in this.extensions)this.extensions[r]===!0&&(i[r]=!0);return Object.keys(i).length>0&&(t.extensions=i),t}},zv=class extends Fs{constructor(e){super(e),this.isRawShaderMaterial=!0,this.type="RawShaderMaterial"}},rs=class extends Ur{constructor(e){super(),this.isMeshStandardMaterial=!0,this.type="MeshStandardMaterial",this.defines={STANDARD:""},this.color=new ct(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new ct(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=uu,this.normalScale=new Lt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new ka,this.envMapIntensity=1,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.defines={STANDARD:""},this.color.copy(e.color),this.roughness=e.roughness,this.metalness=e.metalness,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.roughnessMap=e.roughnessMap,this.metalnessMap=e.metalnessMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.envMapIntensity=e.envMapIntensity,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}},ns=class extends rs{constructor(e){super(),this.isMeshPhysicalMaterial=!0,this.defines={STANDARD:"",PHYSICAL:""},this.type="MeshPhysicalMaterial",this.anisotropyRotation=0,this.anisotropyMap=null,this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new Lt(1,1),this.clearcoatNormalMap=null,this.ior=1.5,Object.defineProperty(this,"reflectivity",{get:function(){return mi(2.5*(this.ior-1)/(this.ior+1),0,1)},set:function(t){this.ior=(1+.4*t)/(1-.4*t)}}),this.iridescenceMap=null,this.iridescenceIOR=1.3,this.iridescenceThicknessRange=[100,400],this.iridescenceThicknessMap=null,this.sheenColor=new ct(0),this.sheenColorMap=null,this.sheenRoughness=1,this.sheenRoughnessMap=null,this.transmissionMap=null,this.thickness=0,this.thicknessMap=null,this.attenuationDistance=1/0,this.attenuationColor=new ct(1,1,1),this.specularIntensity=1,this.specularIntensityMap=null,this.specularColor=new ct(1,1,1),this.specularColorMap=null,this._anisotropy=0,this._clearcoat=0,this._dispersion=0,this._iridescence=0,this._sheen=0,this._transmission=0,this.setValues(e)}get anisotropy(){return this._anisotropy}set anisotropy(e){this._anisotropy>0!=e>0&&this.version++,this._anisotropy=e}get clearcoat(){return this._clearcoat}set clearcoat(e){this._clearcoat>0!=e>0&&this.version++,this._clearcoat=e}get iridescence(){return this._iridescence}set iridescence(e){this._iridescence>0!=e>0&&this.version++,this._iridescence=e}get dispersion(){return this._dispersion}set dispersion(e){this._dispersion>0!=e>0&&this.version++,this._dispersion=e}get sheen(){return this._sheen}set sheen(e){this._sheen>0!=e>0&&this.version++,this._sheen=e}get transmission(){return this._transmission}set transmission(e){this._transmission>0!=e>0&&this.version++,this._transmission=e}copy(e){return super.copy(e),this.defines={STANDARD:"",PHYSICAL:""},this.anisotropy=e.anisotropy,this.anisotropyRotation=e.anisotropyRotation,this.anisotropyMap=e.anisotropyMap,this.clearcoat=e.clearcoat,this.clearcoatMap=e.clearcoatMap,this.clearcoatRoughness=e.clearcoatRoughness,this.clearcoatRoughnessMap=e.clearcoatRoughnessMap,this.clearcoatNormalMap=e.clearcoatNormalMap,this.clearcoatNormalScale.copy(e.clearcoatNormalScale),this.dispersion=e.dispersion,this.ior=e.ior,this.iridescence=e.iridescence,this.iridescenceMap=e.iridescenceMap,this.iridescenceIOR=e.iridescenceIOR,this.iridescenceThicknessRange=[...e.iridescenceThicknessRange],this.iridescenceThicknessMap=e.iridescenceThicknessMap,this.sheen=e.sheen,this.sheenColor.copy(e.sheenColor),this.sheenColorMap=e.sheenColorMap,this.sheenRoughness=e.sheenRoughness,this.sheenRoughnessMap=e.sheenRoughnessMap,this.transmission=e.transmission,this.transmissionMap=e.transmissionMap,this.thickness=e.thickness,this.thicknessMap=e.thicknessMap,this.attenuationDistance=e.attenuationDistance,this.attenuationColor.copy(e.attenuationColor),this.specularIntensity=e.specularIntensity,this.specularIntensityMap=e.specularIntensityMap,this.specularColor.copy(e.specularColor),this.specularColorMap=e.specularColorMap,this}},hh=class extends Ur{constructor(e){super(),this.isMeshPhongMaterial=!0,this.type="MeshPhongMaterial",this.color=new ct(16777215),this.specular=new ct(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new ct(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=uu,this.normalScale=new Lt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new ka,this.combine=qp,this.reflectivity=1,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.specular.copy(e.specular),this.shininess=e.shininess,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.envMapIntensity=e.envMapIntensity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}},Vp=class extends Ur{constructor(e){super(),this.isMeshLambertMaterial=!0,this.type="MeshLambertMaterial",this.color=new ct(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new ct(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=uu,this.normalScale=new Lt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new ka,this.combine=qp,this.reflectivity=1,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.envMapIntensity=e.envMapIntensity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}},Xv=class extends Ur{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=zw,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(e)}copy(e){return super.copy(e),this.depthPacking=e.depthPacking,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this}},Yv=class extends Ur{constructor(e){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(e)}copy(e){return super.copy(e),this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}};yo=class{constructor(e,t,i,r){this.parameterPositions=e,this._cachedIndex=0,this.resultBuffer=r!==void 0?r:new t.constructor(i),this.sampleValues=t,this.valueSize=i,this.settings=null,this.DefaultSettings_={}}evaluate(e){let t=this.parameterPositions,i=this._cachedIndex,r=t[i],s=t[i-1];e:{t:{let a;i:{r:if(!(e=s)){let o=t[1];e=s)break t}a=i,i=0;break i}break e}for(;i>>1;et;)--a;if(++a,s!==0||a!==r){s>=a&&(a=Math.max(a,1),s=a-1);let o=this.getValueSize();this.times=i.slice(s,a),this.values=this.values.slice(s*o,a*o)}return this}validate(){let e=!0,t=this.getValueSize();t-Math.floor(t)!==0&&(Gt("KeyframeTrack: Invalid value size in track.",this),e=!1);let i=this.times,r=this.values,s=i.length;s===0&&(Gt("KeyframeTrack: Track is empty.",this),e=!1);let a=null;for(let o=0;o!==s;o++){let l=i[o];if(typeof l=="number"&&isNaN(l)){Gt("KeyframeTrack: Time is not a valid number.",this,o,l),e=!1;break}if(a!==null&&a>l){Gt("KeyframeTrack: Out of order keys.",this,o,l,a),e=!1;break}a=l}if(r!==void 0&&hq(r))for(let o=0,l=r.length;o!==l;++o){let c=r[o];if(isNaN(c)){Gt("KeyframeTrack: Value is not a valid number.",this,o,c),e=!1;break}}return e}optimize(){let e=this.times.slice(),t=this.values.slice(),i=this.getValueSize(),r=this.getInterpolation()===Iv,s=e.length-1,a=1;for(let o=1;o0){e[a]=e[s];for(let o=s*i,l=a*i,c=0;c!==i;++c)t[l+c]=t[o+c];++a}return a!==e.length?(this.times=e.slice(0,a),this.values=t.slice(0,a*i)):(this.times=e,this.values=t),this}clone(){let e=this.times.slice(),t=this.values.slice(),i=this.constructor,r=new i(this.name,e,t);return r.createInterpolant=this.createInterpolant,r}};ss.prototype.ValueTypeName="";ss.prototype.TimeBufferType=Float32Array;ss.prototype.ValueBufferType=Float32Array;ss.prototype.DefaultInterpolation=sh;xl=class extends ss{constructor(e,t,i){super(e,t,i)}};xl.prototype.ValueTypeName="bool";xl.prototype.ValueBufferType=Array;xl.prototype.DefaultInterpolation=nh;xl.prototype.InterpolantFactoryMethodLinear=void 0;xl.prototype.InterpolantFactoryMethodSmooth=void 0;kp=class extends ss{constructor(e,t,i,r){super(e,t,i,r)}};kp.prototype.ValueTypeName="color";Po=class extends ss{constructor(e,t,i,r){super(e,t,i,r)}};Po.prototype.ValueTypeName="number";Zv=class extends yo{constructor(e,t,i,r){super(e,t,i,r)}interpolate_(e,t,i,r){let s=this.resultBuffer,a=this.sampleValues,o=this.valueSize,l=(i-t)/(r-t),c=e*o;for(let f=c+o;c!==f;c+=4)Kr.slerpFlat(s,0,a,c-o,a,c,l);return s}},Do=class extends ss{constructor(e,t,i,r){super(e,t,i,r)}InterpolantFactoryMethodLinear(e){return new Zv(this.times,this.values,this.getValueSize(),e)}};Do.prototype.ValueTypeName="quaternion";Do.prototype.InterpolantFactoryMethodSmooth=void 0;Rl=class extends ss{constructor(e,t,i){super(e,t,i)}};Rl.prototype.ValueTypeName="string";Rl.prototype.ValueBufferType=Array;Rl.prototype.DefaultInterpolation=nh;Rl.prototype.InterpolantFactoryMethodLinear=void 0;Rl.prototype.InterpolantFactoryMethodSmooth=void 0;Lo=class extends ss{constructor(e,t,i,r){super(e,t,i,r)}};Lo.prototype.ValueTypeName="vector";dh=class{constructor(e="",t=-1,i=[],r=XE){this.name=e,this.tracks=i,this.duration=t,this.blendMode=r,this.uuid=Ga(),this.userData={},this.duration<0&&this.resetDuration()}static parse(e){let t=[],i=e.tracks,r=1/(e.fps||1);for(let a=0,o=i.length;a!==o;++a)t.push(eZ(i[a]).scale(r));let s=new this(e.name,e.duration,t,e.blendMode);return s.uuid=e.uuid,s.userData=JSON.parse(e.userData||"{}"),s}static toJSON(e){let t=[],i=e.tracks,r={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid,blendMode:e.blendMode,userData:JSON.stringify(e.userData)};for(let s=0,a=i.length;s!==a;++s)t.push(ss.toJSON(i[s]));return r}static CreateFromMorphTargetSequence(e,t,i,r){let s=t.length,a=[];for(let o=0;o1){let h=f[1],d=r[h];d||(r[h]=d=[]),d.push(c)}}let a=[];for(let o in r)a.push(this.CreateFromMorphTargetSequence(o,r[o],t,i));return a}static parseAnimation(e,t){if(Ct("AnimationClip: parseAnimation() is deprecated and will be removed with r185"),!e)return Gt("AnimationClip: No animation in JSONLoader data."),null;let i=function(h,d,u,m,_){if(u.length!==0){let p=[],g=[];nF(u,p,g,m),p.length!==0&&_.push(new h(d,p,g))}},r=[],s=e.name||"default",a=e.fps||30,o=e.blendMode,l=e.length||-1,c=e.hierarchy||[];for(let h=0;h{t&&t(s),this.manager.itemEnd(e)},0);return}if(Sl[e]!==void 0){Sl[e].push({onLoad:t,onProgress:i,onError:r});return}Sl[e]=[],Sl[e].push({onLoad:t,onProgress:i,onError:r});let a=new Request(e,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin",signal:typeof AbortSignal.any=="function"?AbortSignal.any([this._abortController.signal,this.manager.abortController.signal]):this._abortController.signal}),o=this.mimeType,l=this.responseType;fetch(a).then(c=>{if(c.status===200||c.status===0){if(c.status===0&&Ct("FileLoader: HTTP Status 0 received."),typeof ReadableStream=="undefined"||c.body===void 0||c.body.getReader===void 0)return c;let f=Sl[e],h=c.body.getReader(),d=c.headers.get("X-File-Size")||c.headers.get("Content-Length"),u=d?parseInt(d):0,m=u!==0,_=0,p=new ReadableStream({start(g){v();function v(){h.read().then(({done:x,value:A})=>{if(x)g.close();else{_+=A.byteLength;let S=new ProgressEvent("progress",{lengthComputable:m,loaded:_,total:u});for(let E=0,R=f.length;E{g.error(x)})}}});return new Response(p)}else throw new Hb(`fetch for "${c.url}" responded with ${c.status}: ${c.statusText}`,c)}).then(c=>{switch(l){case"arraybuffer":return c.arrayBuffer();case"blob":return c.blob();case"document":return c.text().then(f=>new DOMParser().parseFromString(f,o));case"json":return c.json();default:if(o==="")return c.text();{let h=/charset="?([^;"\s]*)"?/i.exec(o),d=h&&h[1]?h[1].toLowerCase():void 0,u=new TextDecoder(d);return c.arrayBuffer().then(m=>u.decode(m))}}}).then(c=>{bo.add(`file:${e}`,c);let f=Sl[e];delete Sl[e];for(let h=0,d=f.length;h{let f=Sl[e];if(f===void 0)throw this.manager.itemError(e),c;delete Sl[e];for(let h=0,d=f.length;h{this.manager.itemEnd(e)}),this.manager.itemStart(e)}setResponseType(e){return this.responseType=e,this}setMimeType(e){return this.mimeType=e,this}abort(){return this._abortController.abort(),this._abortController=new AbortController,this}},Wd=new WeakMap,$v=class extends sn{constructor(e){super(e)}load(e,t,i,r){this.path!==void 0&&(e=this.path+e),e=this.manager.resolveURL(e);let s=this,a=bo.get(`image:${e}`);if(a!==void 0){if(a.complete===!0)s.manager.itemStart(e),setTimeout(function(){t&&t(a),s.manager.itemEnd(e)},0);else{let h=Wd.get(a);h===void 0&&(h=[],Wd.set(a,h)),h.push({onLoad:t,onError:r})}return a}let o=jd("img");function l(){f(),t&&t(this);let h=Wd.get(this)||[];for(let d=0;d{Ub.has(a)===!0?(r&&r(Ub.get(a)),s.manager.itemError(e),s.manager.itemEnd(e)):(t&&t(c),s.manager.itemEnd(e))});return}setTimeout(function(){t&&t(a),s.manager.itemEnd(e)},0);return}let o={};o.credentials=this.crossOrigin==="anonymous"?"same-origin":"include",o.headers=this.requestHeader,o.signal=typeof AbortSignal.any=="function"?AbortSignal.any([this._abortController.signal,this.manager.abortController.signal]):this._abortController.signal;let l=fetch(e,o).then(function(c){return c.blob()}).then(function(c){return createImageBitmap(c,Object.assign(s.options,{colorSpaceConversion:"none"}))}).then(function(c){bo.add(`image-bitmap:${e}`,c),t&&t(c),s.manager.itemEnd(e)}).catch(function(c){r&&r(c),Ub.set(l,c),bo.remove(`image-bitmap:${e}`),s.manager.itemError(e),s.manager.itemEnd(e)});bo.add(`image-bitmap:${e}`,l),s.manager.itemStart(e)}abort(){return this._abortController.abort(),this._abortController=new AbortController,this}},Hd=-90,zd=1,Jv=class extends nr{constructor(e,t,i){super(),this.type="CubeCamera",this.renderTarget=i,this.coordinateSystem=null,this.activeMipmapLevel=0;let r=new Br(Hd,zd,e,t);r.layers=this.layers,this.add(r);let s=new Br(Hd,zd,e,t);s.layers=this.layers,this.add(s);let a=new Br(Hd,zd,e,t);a.layers=this.layers,this.add(a);let o=new Br(Hd,zd,e,t);o.layers=this.layers,this.add(o);let l=new Br(Hd,zd,e,t);l.layers=this.layers,this.add(l);let c=new Br(Hd,zd,e,t);c.layers=this.layers,this.add(c)}updateCoordinateSystem(){let e=this.coordinateSystem,t=this.children.concat(),[i,r,s,a,o,l]=t;for(let c of t)this.remove(c);if(e===Va)i.up.set(0,1,0),i.lookAt(1,0,0),r.up.set(0,1,0),r.lookAt(-1,0,0),s.up.set(0,0,-1),s.lookAt(0,1,0),a.up.set(0,0,1),a.lookAt(0,-1,0),o.up.set(0,1,0),o.lookAt(0,0,1),l.up.set(0,1,0),l.lookAt(0,0,-1);else if(e===Kd)i.up.set(0,-1,0),i.lookAt(-1,0,0),r.up.set(0,-1,0),r.lookAt(1,0,0),s.up.set(0,0,1),s.lookAt(0,1,0),a.up.set(0,0,-1),a.lookAt(0,-1,0),o.up.set(0,-1,0),o.lookAt(0,0,1),l.up.set(0,-1,0),l.lookAt(0,0,-1);else throw new Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: "+e);for(let c of t)this.add(c),c.updateMatrixWorld()}update(e,t){this.parent===null&&this.updateMatrixWorld();let{renderTarget:i,activeMipmapLevel:r}=this;this.coordinateSystem!==e.coordinateSystem&&(this.coordinateSystem=e.coordinateSystem,this.updateCoordinateSystem());let[s,a,o,l,c,f]=this.children,h=e.getRenderTarget(),d=e.getActiveCubeFace(),u=e.getActiveMipmapLevel(),m=e.xr.enabled;e.xr.enabled=!1;let _=i.texture.generateMipmaps;i.texture.generateMipmaps=!1;let p=!1;e.isWebGLRenderer===!0?p=e.state.buffers.depth.getReversed():p=e.reversedDepthBuffer,e.setRenderTarget(i,0,r),p&&e.autoClear===!1&&e.clearDepth(),e.render(t,s),e.setRenderTarget(i,1,r),p&&e.autoClear===!1&&e.clearDepth(),e.render(t,a),e.setRenderTarget(i,2,r),p&&e.autoClear===!1&&e.clearDepth(),e.render(t,o),e.setRenderTarget(i,3,r),p&&e.autoClear===!1&&e.clearDepth(),e.render(t,l),e.setRenderTarget(i,4,r),p&&e.autoClear===!1&&e.clearDepth(),e.render(t,c),i.texture.generateMipmaps=_,e.setRenderTarget(i,5,r),p&&e.autoClear===!1&&e.clearDepth(),e.render(t,f),e.setRenderTarget(h,d,u),e.xr.enabled=m,i.texture.needsPMREMUpdate=!0}},eE=class extends Br{constructor(e=[]){super(),this.isArrayCamera=!0,this.isMultiViewCamera=!1,this.cameras=e}},tE=class{constructor(e,t,i){this.binding=e,this.valueSize=i;let r,s,a;switch(t){case"quaternion":r=this._slerp,s=this._slerpAdditive,a=this._setAdditiveIdentityQuaternion,this.buffer=new Float64Array(i*6),this._workIndex=5;break;case"string":case"bool":r=this._select,s=this._select,a=this._setAdditiveIdentityOther,this.buffer=new Array(i*5);break;default:r=this._lerp,s=this._lerpAdditive,a=this._setAdditiveIdentityNumeric,this.buffer=new Float64Array(i*5)}this._mixBufferRegion=r,this._mixBufferRegionAdditive=s,this._setIdentity=a,this._origIndex=3,this._addIndex=4,this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,this.useCount=0,this.referenceCount=0}accumulate(e,t){let i=this.buffer,r=this.valueSize,s=e*r+r,a=this.cumulativeWeight;if(a===0){for(let o=0;o!==r;++o)i[s+o]=i[o];a=t}else{a+=t;let o=t/a;this._mixBufferRegion(i,s,0,o,r)}this.cumulativeWeight=a}accumulateAdditive(e){let t=this.buffer,i=this.valueSize,r=i*this._addIndex;this.cumulativeWeightAdditive===0&&this._setIdentity(),this._mixBufferRegionAdditive(t,r,0,e,i),this.cumulativeWeightAdditive+=e}apply(e){let t=this.valueSize,i=this.buffer,r=e*t+t,s=this.cumulativeWeight,a=this.cumulativeWeightAdditive,o=this.binding;if(this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,s<1){let l=t*this._origIndex;this._mixBufferRegion(i,r,l,1-s,t)}a>0&&this._mixBufferRegionAdditive(i,r,this._addIndex*t,1,t);for(let l=t,c=t+t;l!==c;++l)if(i[l]!==i[l+t]){o.setValue(i,r);break}}saveOriginalState(){let e=this.binding,t=this.buffer,i=this.valueSize,r=i*this._origIndex;e.getValue(t,r);for(let s=i,a=r;s!==a;++s)t[s]=t[r+s%i];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){let e=this.valueSize*3;this.binding.setValue(this.buffer,e)}_setAdditiveIdentityNumeric(){let e=this._addIndex*this.valueSize,t=e+this.valueSize;for(let i=e;i=.5)for(let a=0;a!==s;++a)e[t+a]=e[i+a]}_slerp(e,t,i,r){Kr.slerpFlat(e,t,e,t,e,i,r)}_slerpAdditive(e,t,i,r,s){let a=this._workIndex*s;Kr.multiplyQuaternionsFlat(e,a,e,t,e,i),Kr.slerpFlat(e,t,e,t,e,a,r)}_lerp(e,t,i,r,s){let a=1-r;for(let o=0;o!==s;++o){let l=t+o;e[l]=e[l]*a+e[i+o]*r}}_lerpAdditive(e,t,i,r,s){for(let a=0;a!==s;++a){let o=t+a;e[o]=e[o]+e[i+a]*r}}},v0="\\[\\]\\.:\\/",tZ=new RegExp("["+v0+"]","g"),E0="[^"+v0+"]",iZ="[^"+v0.replace("\\.","")+"]",rZ=/((?:WC+[\/:])*)/.source.replace("WC",E0),nZ=/(WCOD+)?/.source.replace("WCOD",iZ),sZ=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",E0),aZ=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",E0),oZ=new RegExp("^"+rZ+nZ+sZ+aZ+"$"),lZ=["material","materials","bones","map"],Kb=class{constructor(e,t,i){let r=i||Ki.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,r)}getValue(e,t){this.bind();let i=this._targetGroup.nCachedObjects_,r=this._bindings[i];r!==void 0&&r.getValue(e,t)}setValue(e,t){let i=this._bindings;for(let r=this._targetGroup.nCachedObjects_,s=i.length;r!==s;++r)i[r].setValue(e,t)}bind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,i=e.length;t!==i;++t)e[t].bind()}unbind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,i=e.length;t!==i;++t)e[t].unbind()}},Ki=class n{constructor(e,t,i){this.path=t,this.parsedPath=i||n.parseTrackName(t),this.node=n.findNode(e,this.parsedPath.nodeName),this.rootNode=e,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(e,t,i){return e&&e.isAnimationObjectGroup?new n.Composite(e,t,i):new n(e,t,i)}static sanitizeNodeName(e){return e.replace(/\s/g,"_").replace(tZ,"")}static parseTrackName(e){let t=oZ.exec(e);if(t===null)throw new Error("PropertyBinding: Cannot parse trackName: "+e);let i={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},r=i.nodeName&&i.nodeName.lastIndexOf(".");if(r!==void 0&&r!==-1){let s=i.nodeName.substring(r+1);lZ.indexOf(s)!==-1&&(i.nodeName=i.nodeName.substring(0,r),i.objectName=s)}if(i.propertyName===null||i.propertyName.length===0)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+e);return i}static findNode(e,t){if(t===void 0||t===""||t==="."||t===-1||t===e.name||t===e.uuid)return e;if(e.skeleton){let i=e.skeleton.getBoneByName(t);if(i!==void 0)return i}if(e.children){let i=function(s){for(let a=0;a0){let l=this._interpolants,c=this._propertyBindings;switch(this.blendMode){case Hw:for(let f=0,h=l.length;f!==h;++f)l[f].evaluate(a),c[f].accumulateAdditive(o);break;case XE:default:for(let f=0,h=l.length;f!==h;++f)l[f].evaluate(a),c[f].accumulate(r,o)}}}_updateWeight(e){let t=0;if(this.enabled){t=this.weight;let i=this._weightInterpolant;if(i!==null){let r=i.evaluate(e)[0];t*=r,e>i.parameterPositions[1]&&(this.stopFading(),r===0&&(this.enabled=!1))}}return this._effectiveWeight=t,t}_updateTimeScale(e){let t=0;if(!this.paused){t=this.timeScale;let i=this._timeScaleInterpolant;if(i!==null){let r=i.evaluate(e)[0];t*=r,e>i.parameterPositions[1]&&(this.stopWarping(),t===0?this.paused=!0:this.timeScale=t)}}return this._effectiveTimeScale=t,t}_updateTime(e){let t=this._clip.duration,i=this.loop,r=this.time+e,s=this._loopCount,a=i===Ww;if(e===0)return s===-1?r:a&&(s&1)===1?t-r:r;if(i===Gw){s===-1&&(this._loopCount=0,this._setEndings(!0,!0,!1));e:{if(r>=t)r=t;else if(r<0)r=0;else{this.time=r;break e}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=r,this._mixer.dispatchEvent({type:"finished",action:this,direction:e<0?-1:1})}}else{if(s===-1&&(e>=0?(s=0,this._setEndings(!0,this.repetitions===0,a)):this._setEndings(this.repetitions===0,!0,a)),r>=t||r<0){let o=Math.floor(r/t);r-=t*o,s+=Math.abs(o);let l=this.repetitions-s;if(l<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,r=e>0?t:0,this.time=r,this._mixer.dispatchEvent({type:"finished",action:this,direction:e>0?1:-1});else{if(l===1){let c=e<0;this._setEndings(c,!c,a)}else this._setEndings(!1,!1,a);this._loopCount=s,this.time=r,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:o})}}else this._loopCount=s,this.time=r;if(a&&(s&1)===1)return t-r}return r}_setEndings(e,t,i){let r=this._interpolantSettings;i?(r.endingStart=th,r.endingEnd=th):(e?r.endingStart=this.zeroSlopeAtStart?th:eh:r.endingStart=Mp,t?r.endingEnd=this.zeroSlopeAtEnd?th:eh:r.endingEnd=Mp)}_scheduleFading(e,t,i){let r=this._mixer,s=r.time,a=this._weightInterpolant;a===null&&(a=r._lendControlInterpolant(),this._weightInterpolant=a);let o=a.parameterPositions,l=a.sampleValues;return o[0]=s,l[0]=t,o[1]=s+e,l[1]=i,this}},cZ=new Float32Array(1),Xp=class extends la{constructor(e){super(),this._root=e,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1,typeof __THREE_DEVTOOLS__!="undefined"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}_bindAction(e,t){let i=e._localRoot||this._root,r=e._clip.tracks,s=r.length,a=e._propertyBindings,o=e._interpolants,l=i.uuid,c=this._bindingsByRootAndName,f=c[l];f===void 0&&(f={},c[l]=f);for(let h=0;h!==s;++h){let d=r[h],u=d.name,m=f[u];if(m!==void 0)++m.referenceCount,a[h]=m;else{if(m=a[h],m!==void 0){m._cacheIndex===null&&(++m.referenceCount,this._addInactiveBinding(m,l,u));continue}let _=t&&t._propertyBindings[h].binding.parsedPath;m=new tE(Ki.create(i,u,_),d.ValueTypeName,d.getValueSize()),++m.referenceCount,this._addInactiveBinding(m,l,u),a[h]=m}o[h].resultBuffer=m.buffer}}_activateAction(e){if(!this._isActiveAction(e)){if(e._cacheIndex===null){let i=(e._localRoot||this._root).uuid,r=e._clip.uuid,s=this._actionsByClip[r];this._bindAction(e,s&&s.knownActions[0]),this._addInactiveAction(e,r,i)}let t=e._propertyBindings;for(let i=0,r=t.length;i!==r;++i){let s=t[i];s.useCount++===0&&(this._lendBinding(s),s.saveOriginalState())}this._lendAction(e)}}_deactivateAction(e){if(this._isActiveAction(e)){let t=e._propertyBindings;for(let i=0,r=t.length;i!==r;++i){let s=t[i];--s.useCount===0&&(s.restoreOriginalState(),this._takeBackBinding(s))}this._takeBackAction(e)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;let e=this;this.stats={actions:{get total(){return e._actions.length},get inUse(){return e._nActiveActions}},bindings:{get total(){return e._bindings.length},get inUse(){return e._nActiveBindings}},controlInterpolants:{get total(){return e._controlInterpolants.length},get inUse(){return e._nActiveControlInterpolants}}}}_isActiveAction(e){let t=e._cacheIndex;return t!==null&&t=0;--i)e[i].stop();return this}update(e){e*=this.timeScale;let t=this._actions,i=this._nActiveActions,r=this.time+=e,s=Math.sign(e),a=this._accuIndex^=1;for(let c=0;c!==i;++c)t[c]._update(r,e,s,a);let o=this._bindings,l=this._nActiveBindings;for(let c=0;c!==l;++c)o[c].apply(a);return this}setTime(e){this.time=0;for(let t=0;tu.start-m.start);let d=0;for(let u=1;u0;x=e.get(x,A)}return x}function m(v){let x=!1,A=u(v);A===null?p(a,o):A&&A.isColor&&(p(A,1),x=!0);let S=n.xr.getEnvironmentBlendMode();S==="additive"?t.buffers.color.setClear(0,0,0,1,s):S==="alpha-blend"&&t.buffers.color.setClear(0,0,0,0,s),(n.autoClear||x)&&(t.buffers.depth.setTest(!0),t.buffers.depth.setMask(!0),t.buffers.color.setMask(!0),n.clear(n.autoClearColor,n.autoClearDepth,n.autoClearStencil))}function _(v,x){let A=u(x);A&&(A.isCubeTexture||A.mapping===Zp)?(c===void 0&&(c=new ci(new Gc(1,1,1),new Fs({name:"BackgroundCubeMaterial",uniforms:_h(Uo.backgroundCube.uniforms),vertexShader:Uo.backgroundCube.vertexShader,fragmentShader:Uo.backgroundCube.fragmentShader,side:dn,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),c.geometry.deleteAttribute("normal"),c.geometry.deleteAttribute("uv"),c.onBeforeRender=function(S,E,R){this.matrixWorld.copyPosition(R.matrixWorld)},Object.defineProperty(c.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),i.update(c)),c.material.uniforms.envMap.value=A,c.material.uniforms.backgroundBlurriness.value=x.backgroundBlurriness,c.material.uniforms.backgroundIntensity.value=x.backgroundIntensity,c.material.uniforms.backgroundRotation.value.setFromMatrix4(K$.makeRotationFromEuler(x.backgroundRotation)).transpose(),A.isCubeTexture&&A.isRenderTargetTexture===!1&&c.material.uniforms.backgroundRotation.value.premultiply(CF),c.material.toneMapped=ai.getTransfer(A.colorSpace)!==ki,(f!==A||h!==A.version||d!==n.toneMapping)&&(c.material.needsUpdate=!0,f=A,h=A.version,d=n.toneMapping),c.layers.enableAll(),v.unshift(c,c.geometry,c.material,0,0,null)):A&&A.isTexture&&(l===void 0&&(l=new ci(new fh(2,2),new Fs({name:"BackgroundMaterial",uniforms:_h(Uo.background.uniforms),vertexShader:Uo.background.vertexShader,fragmentShader:Uo.background.fragmentShader,side:Os,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),l.geometry.deleteAttribute("normal"),Object.defineProperty(l.material,"map",{get:function(){return this.uniforms.t2D.value}}),i.update(l)),l.material.uniforms.t2D.value=A,l.material.uniforms.backgroundIntensity.value=x.backgroundIntensity,l.material.toneMapped=ai.getTransfer(A.colorSpace)!==ki,A.matrixAutoUpdate===!0&&A.updateMatrix(),l.material.uniforms.uvTransform.value.copy(A.matrix),(f!==A||h!==A.version||d!==n.toneMapping)&&(l.material.needsUpdate=!0,f=A,h=A.version,d=n.toneMapping),l.layers.enableAll(),v.unshift(l,l.geometry,l.material,0,0,null))}function p(v,x){v.getRGB(qE,g0(n)),t.buffers.color.setClear(qE.r,qE.g,qE.b,x,s)}function g(){c!==void 0&&(c.geometry.dispose(),c.material.dispose(),c=void 0),l!==void 0&&(l.geometry.dispose(),l.material.dispose(),l=void 0)}return{getClearColor:function(){return a},setClearColor:function(v,x=1){a.set(v),o=x,p(a,o)},getClearAlpha:function(){return o},setClearAlpha:function(v){o=v,p(a,o)},render:m,addToRenderList:_,dispose:g}}function q$(n,e){let t=n.getParameter(n.MAX_VERTEX_ATTRIBS),i={},r=d(null),s=r,a=!1;function o(D,O,V,N,F){let U=!1,W=h(D,N,V,O);s!==W&&(s=W,c(s.object)),U=u(D,N,V,F),U&&m(D,N,V,F),F!==null&&e.update(F,n.ELEMENT_ARRAY_BUFFER),(U||a)&&(a=!1,A(D,O,V,N),F!==null&&n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,e.get(F).buffer))}function l(){return n.createVertexArray()}function c(D){return n.bindVertexArray(D)}function f(D){return n.deleteVertexArray(D)}function h(D,O,V,N){let F=N.wireframe===!0,U=i[O.id];U===void 0&&(U={},i[O.id]=U);let W=D.isInstancedMesh===!0?D.id:0,$=U[W];$===void 0&&($={},U[W]=$);let q=$[V.id];q===void 0&&(q={},$[V.id]=q);let Z=q[F];return Z===void 0&&(Z=d(l()),q[F]=Z),Z}function d(D){let O=[],V=[],N=[];for(let F=0;F=0){let X=F[q],Y=U[q];if(Y===void 0&&(q==="instanceMatrix"&&D.instanceMatrix&&(Y=D.instanceMatrix),q==="instanceColor"&&D.instanceColor&&(Y=D.instanceColor)),X===void 0||X.attribute!==Y||Y&&X.data!==Y.data)return!0;W++}return s.attributesNum!==W||s.index!==N}function m(D,O,V,N){let F={},U=O.attributes,W=0,$=V.getAttributes();for(let q in $)if($[q].location>=0){let X=U[q];X===void 0&&(q==="instanceMatrix"&&D.instanceMatrix&&(X=D.instanceMatrix),q==="instanceColor"&&D.instanceColor&&(X=D.instanceColor));let Y={};Y.attribute=X,X&&X.data&&(Y.data=X.data),F[q]=Y,W++}s.attributes=F,s.attributesNum=W,s.index=N}function _(){let D=s.newAttributes;for(let O=0,V=D.length;O=0){let Z=F[$];if(Z===void 0&&($==="instanceMatrix"&&D.instanceMatrix&&(Z=D.instanceMatrix),$==="instanceColor"&&D.instanceColor&&(Z=D.instanceColor)),Z!==void 0){let X=Z.normalized,Y=Z.itemSize,fe=e.get(Z);if(fe===void 0)continue;let xe=fe.buffer,Fe=fe.type,se=fe.bytesPerElement,pe=Fe===n.INT||Fe===n.UNSIGNED_INT||Z.gpuType===lE;if(Z.isInterleavedBufferAttribute){let ie=Z.data,_e=ie.stride,Pe=Z.offset;if(ie.isInstancedInterleavedBuffer){for(let ue=0;ue0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.HIGH_FLOAT).precision>0)return"highp";R="mediump"}return R==="mediump"&&n.getShaderPrecisionFormat(n.VERTEX_SHADER,n.MEDIUM_FLOAT).precision>0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let c=t.precision!==void 0?t.precision:"highp",f=l(c);f!==c&&(Ct("WebGLRenderer:",c,"not supported, using",f,"instead."),c=f);let h=t.logarithmicDepthBuffer===!0,d=t.reversedDepthBuffer===!0&&e.has("EXT_clip_control");t.reversedDepthBuffer===!0&&d===!1&&Ct("WebGLRenderer: Unable to use reversed depth buffer due to missing EXT_clip_control extension. Fallback to default depth buffer.");let u=n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS),m=n.getParameter(n.MAX_VERTEX_TEXTURE_IMAGE_UNITS),_=n.getParameter(n.MAX_TEXTURE_SIZE),p=n.getParameter(n.MAX_CUBE_MAP_TEXTURE_SIZE),g=n.getParameter(n.MAX_VERTEX_ATTRIBS),v=n.getParameter(n.MAX_VERTEX_UNIFORM_VECTORS),x=n.getParameter(n.MAX_VARYING_VECTORS),A=n.getParameter(n.MAX_FRAGMENT_UNIFORM_VECTORS),S=n.getParameter(n.MAX_SAMPLES),E=n.getParameter(n.SAMPLES);return{isWebGL2:!0,getMaxAnisotropy:s,getMaxPrecision:l,textureFormatReadable:a,textureTypeReadable:o,precision:c,logarithmicDepthBuffer:h,reversedDepthBuffer:d,maxTextures:u,maxVertexTextures:m,maxTextureSize:_,maxCubemapSize:p,maxAttributes:g,maxVertexUniforms:v,maxVaryings:x,maxFragmentUniforms:A,maxSamples:S,samples:E}}function $$(n){let e=this,t=null,i=0,r=!1,s=!1,a=new aa,o=new ii,l={value:null,needsUpdate:!1};this.uniform=l,this.numPlanes=0,this.numIntersection=0,this.init=function(h,d){let u=h.length!==0||d||i!==0||r;return r=d,i=h.length,u},this.beginShadows=function(){s=!0,f(null)},this.endShadows=function(){s=!1},this.setGlobalState=function(h,d){t=f(h,d,0)},this.setState=function(h,d,u){let m=h.clippingPlanes,_=h.clipIntersection,p=h.clipShadows,g=n.get(h);if(!r||m===null||m.length===0||s&&!p)s?f(null):c();else{let v=s?0:i,x=v*4,A=g.clippingState||null;l.value=A,A=f(m,d,x,u);for(let S=0;S!==x;++S)A[S]=t[S];g.clippingState=A,this.numIntersection=_?this.numPlanes:0,this.numPlanes+=v}};function c(){l.value!==t&&(l.value=t,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function f(h,d,u,m){let _=h!==null?h.length:0,p=null;if(_!==0){if(p=l.value,m!==!0||p===null){let g=u+_*4,v=d.matrixWorldInverse;o.getNormalMatrix(v),(p===null||p.lengthn-jc?l=sF[a-n+jc-1]:a===0&&(l=0),t.push(l);let c=1/(o-2),f=-c,h=1+c,d=[f,f,h,f,h,h,f,f,h,h,f,h],u=6,m=6,_=3,p=2,g=1,v=new Float32Array(_*m*u),x=new Float32Array(p*m*u),A=new Float32Array(g*m*u);for(let E=0;E2?0:-1,y=[R,I,0,R+2/3,I,0,R+2/3,I+1,0,R,I,0,R+2/3,I+1,0,R,I+1,0];v.set(y,_*m*E),x.set(d,p*m*E);let M=[E,E,E,E,E,E];A.set(M,g*m*E)}let S=new sr;S.setAttribute("position",new rr(v,_)),S.setAttribute("uv",new rr(x,p)),S.setAttribute("faceIndex",new rr(A,g)),i.push(new ci(S,null)),r>jc&&r--}return{lodMeshes:i,sizeLods:e,sigmas:t}}function oF(n,e,t){let i=new Ns(n,e,t);return i.texture.mapping=Zp,i.texture.name="PMREM.cubeUv",i.scissorTest=!0,i}function mu(n,e,t,i,r){n.viewport.set(e,t,i,r),n.scissor.set(e,t,i,r)}function iJ(n,e,t){return new Fs({name:"PMREMGGXConvolution",defines:{GGX_SAMPLES:J$,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/t,CUBEUV_MAX_MIP:`${n}.0`},uniforms:{envMap:{value:null},roughness:{value:0},mipInt:{value:0}},vertexShader:JE(),fragmentShader:` precision highp float; precision highp int; @@ -108,7 +108,7 @@ gl_FragColor = vec4(prefilteredColor, 1.0); } - `,blending:Oo,depthTest:!1,depthWrite:!1})}function FJ(n,e,t){let i=new Float32Array(gh),r=new ne(0,1,0);return new ws({name:"SphericalGaussianBlur",defines:{n:gh,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/t,CUBEUV_MAX_MIP:`${n}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:i},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:r}},vertexShader:zE(),fragmentShader:` + `,blending:wo,depthTest:!1,depthWrite:!1})}function rJ(n,e,t){let i=new Float32Array(gh),r=new ne(0,1,0);return new Fs({name:"SphericalGaussianBlur",defines:{n:gh,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/t,CUBEUV_MAX_MIP:`${n}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:i},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:r}},vertexShader:JE(),fragmentShader:` precision mediump float; precision mediump int; @@ -168,7 +168,7 @@ } } - `,blending:Oo,depthTest:!1,depthWrite:!1})}function QF(){return new ws({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:zE(),fragmentShader:` + `,blending:wo,depthTest:!1,depthWrite:!1})}function lF(){return new Fs({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:JE(),fragmentShader:` precision mediump float; precision mediump int; @@ -187,7 +187,7 @@ gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 ); } - `,blending:Oo,depthTest:!1,depthWrite:!1})}function JF(){return new ws({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:zE(),fragmentShader:` + `,blending:wo,depthTest:!1,depthWrite:!1})}function cF(){return new Fs({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:JE(),fragmentShader:` precision mediump float; precision mediump int; @@ -203,7 +203,7 @@ gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) ); } - `,blending:Oo,depthTest:!1,depthWrite:!1})}function zE(){return` + `,blending:wo,depthTest:!1,depthWrite:!1})}function JE(){return` precision mediump float; precision mediump int; @@ -258,7 +258,7 @@ gl_Position = vec4( position, 1.0 ); } - `}function wJ(n){let e=new WeakMap,t=new WeakMap,i=null;function r(d,u=!1){return d==null?null:u?a(d):s(d)}function s(d){if(d&&d.isTexture){let u=d.mapping;if(u===Zv||u===Qv)if(e.has(d)){let m=e.get(d).texture;return o(m,d.mapping)}else{let m=d.image;if(m&&m.height>0){let _=new WE(m.height);return _.fromEquirectangularTexture(n,d),e.set(d,_),d.addEventListener("dispose",c),o(_.texture,d.mapping)}else return null}}return d}function a(d){if(d&&d.isTexture){let u=d.mapping,m=u===Zv||u===Qv,_=u===Wc||u===mh;if(m||_){let p=t.get(d),g=p!==void 0?p.texture.pmremVersion:0;if(d.isRenderTargetTexture&&d.pmremVersion!==g)return i===null&&(i=new uu(n)),p=m?i.fromEquirectangular(d,p):i.fromCubemap(d,p),p.texture.pmremVersion=d.pmremVersion,t.set(d,p),p.texture;if(p!==void 0)return p.texture;{let v=d.image;return m&&v&&v.height>0||_&&v&&l(v)?(i===null&&(i=new uu(n)),p=m?i.fromEquirectangular(d):i.fromCubemap(d),p.texture.pmremVersion=d.pmremVersion,t.set(d,p),d.addEventListener("dispose",f),p.texture):null}}}return d}function o(d,u){return u===Zv?d.mapping=Wc:u===Qv&&(d.mapping=mh),d}function l(d){let u=0,m=6;for(let _=0;_=65535?bp:Rp)(d,1);p.version=_;let g=s.get(h);g&&e.remove(g),s.set(h,p)}function f(h){let d=s.get(h);if(d){let u=h.index;u!==null&&d.versione.maxTextureSize&&(E=Math.ceil(A/e.maxTextureSize),A=e.maxTextureSize);let T=new Float32Array(A*E*4*h),R=new xp(T,A,E,h);R.type=Us,R.needsUpdate=!0;let I=x*4;for(let M=0;M0){let _=new QE(m.height);return _.fromEquirectangularTexture(n,d),e.set(d,_),d.addEventListener("dispose",c),o(_.texture,d.mapping)}else return null}}return d}function a(d){if(d&&d.isTexture){let u=d.mapping,m=u===sE||u===aE,_=u===Xc||u===mh;if(m||_){let p=t.get(d),g=p!==void 0?p.texture.pmremVersion:0;if(d.isRenderTargetTexture&&d.pmremVersion!==g)return i===null&&(i=new _u(n)),p=m?i.fromEquirectangular(d,p):i.fromCubemap(d,p),p.texture.pmremVersion=d.pmremVersion,t.set(d,p),p.texture;if(p!==void 0)return p.texture;{let v=d.image;return m&&v&&v.height>0||_&&v&&l(v)?(i===null&&(i=new _u(n)),p=m?i.fromEquirectangular(d):i.fromCubemap(d),p.texture.pmremVersion=d.pmremVersion,t.set(d,p),d.addEventListener("dispose",f),p.texture):null}}}return d}function o(d,u){return u===sE?d.mapping=Xc:u===aE&&(d.mapping=mh),d}function l(d){let u=0,m=6;for(let _=0;_=65535?Lp:Dp)(d,1);p.version=_;let g=s.get(h);g&&e.remove(g),s.set(h,p)}function f(h){let d=s.get(h);if(d){let u=h.index;u!==null&&d.versione.maxTextureSize&&(S=Math.ceil(A/e.maxTextureSize),A=e.maxTextureSize);let E=new Float32Array(A*S*4*h),R=new Pp(E,A,S,h);R.type=Us,R.needsUpdate=!0;let I=x*4;for(let M=0;M0&&p[0].isRenderPass===!0;let x=s.width,A=s.height;for(let E=0;E0)return n;let r=e*t,s=$F[r];if(s===void 0&&(s=new Float32Array(r),$F[r]=s),e!==0){i.toArray(s,0);for(let a=1,o=0;a!==e;++a)o+=t,n[a].toArray(s,o)}return s}function jr(n,e){if(n.length!==e.length)return!1;for(let t=0,i=n.length;t0&&p[0].isRenderPass===!0;let x=s.width,A=s.height;for(let S=0;S0)return n;let r=e*t,s=fF[r];if(s===void 0&&(s=new Float32Array(r),fF[r]=s),e!==0){i.toArray(s,0);for(let a=1,o=0;a!==e;++a)o+=t,n[a].toArray(s,o)}return s}function jr(n,e){if(n.length!==e.length)return!1;for(let t=0,i=n.length;t":" "} ${o}: ${t[a]}`)}return i.join(` -`)}function F$(n){ai._getMatrix(aw,ai.workingColorSpace,n);let e=`mat3( ${aw.elements.map(t=>t.toFixed(4))} )`;switch(ai.getTransfer(n)){case Tp:return[e,"LinearTransferOETF"];case ki:return[e,"sRGBTransferOETF"];default:return Ct("WebGLProgram: Unsupported color space: ",n),[e,"LinearTransferOETF"]}}function ow(n,e,t){let i=n.getShaderParameter(e,n.COMPILE_STATUS),s=(n.getShaderInfoLog(e)||"").trim();if(i&&s==="")return"";let a=/ERROR: 0:(\d+)/.exec(s);if(a){let o=parseInt(a[1]);return t.toUpperCase()+` +`)}function ree(n){ai._getMatrix(gF,ai.workingColorSpace,n);let e=`mat3( ${gF.elements.map(t=>t.toFixed(4))} )`;switch(ai.getTransfer(n)){case Cp:return[e,"LinearTransferOETF"];case ki:return[e,"sRGBTransferOETF"];default:return Ct("WebGLProgram: Unsupported color space: ",n),[e,"LinearTransferOETF"]}}function vF(n,e,t){let i=n.getShaderParameter(e,n.COMPILE_STATUS),s=(n.getShaderInfoLog(e)||"").trim();if(i&&s==="")return"";let a=/ERROR: 0:(\d+)/.exec(s);if(a){let o=parseInt(a[1]);return t.toUpperCase()+` `+s+` -`+N$(n.getShaderSource(e),o)}else return s}function w$(n,e){let t=F$(e);return[`vec4 ${n}( vec4 value ) {`,` return ${t[1]}( vec4( value.rgb * ${t[0]}, value.a ) );`,"}"].join(` -`)}function U$(n,e){let t=B$[e];return t===void 0?(Ct("WebGLProgram: Unsupported toneMapping:",e),"vec3 "+n+"( vec3 color ) { return LinearToneMapping( color ); }"):"vec3 "+n+"( vec3 color ) { return "+t+"ToneMapping( color ); }"}function V$(){ai.getLuminanceCoefficients(kE);let n=kE.x.toFixed(4),e=kE.y.toFixed(4),t=kE.z.toFixed(4);return["float luminance( const in vec3 rgb ) {",` const vec3 weights = vec3( ${n}, ${e}, ${t} );`," return dot( weights, rgb );","}"].join(` -`)}function G$(n){return[n.extensionClipCullDistance?"#extension GL_ANGLE_clip_cull_distance : require":"",n.extensionMultiDraw?"#extension GL_ANGLE_multi_draw : require":""].filter(e_).join(` -`)}function k$(n){let e=[];for(let t in n){let i=n[t];i!==!1&&e.push("#define "+t+" "+i)}return e.join(` -`)}function W$(n,e){let t={},i=n.getProgramParameter(e,n.ACTIVE_ATTRIBUTES);for(let r=0;r")}return RI(t)}function fw(n){return n.replace(Y$,K$)}function K$(n,e,t,i){let r="";for(let s=parseInt(e);s")}return B0(t)}function TF(n){return n.replace(mee,pee)}function pee(n,e,t,i){let r="";for(let s=parseInt(e);s0&&(p+=` -`),g=["#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,m].filter(e_).join(` +`),g=["#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,m].filter(o_).join(` `),g.length>0&&(g+=` -`)):(p=[hw(t),"#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,m,t.extensionClipCullDistance?"#define USE_CLIP_DISTANCE":"",t.batching?"#define USE_BATCHING":"",t.batchingColor?"#define USE_BATCHING_COLOR":"",t.instancing?"#define USE_INSTANCING":"",t.instancingColor?"#define USE_INSTANCING_COLOR":"",t.instancingMorph?"#define USE_INSTANCING_MORPH":"",t.useFog&&t.fog?"#define USE_FOG":"",t.useFog&&t.fogExp2?"#define FOG_EXP2":"",t.map?"#define USE_MAP":"",t.envMap?"#define USE_ENVMAP":"",t.envMap?"#define "+f:"",t.lightMap?"#define USE_LIGHTMAP":"",t.aoMap?"#define USE_AOMAP":"",t.bumpMap?"#define USE_BUMPMAP":"",t.normalMap?"#define USE_NORMALMAP":"",t.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",t.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",t.displacementMap?"#define USE_DISPLACEMENTMAP":"",t.emissiveMap?"#define USE_EMISSIVEMAP":"",t.anisotropy?"#define USE_ANISOTROPY":"",t.anisotropyMap?"#define USE_ANISOTROPYMAP":"",t.clearcoatMap?"#define USE_CLEARCOATMAP":"",t.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",t.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",t.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",t.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",t.specularMap?"#define USE_SPECULARMAP":"",t.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",t.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",t.roughnessMap?"#define USE_ROUGHNESSMAP":"",t.metalnessMap?"#define USE_METALNESSMAP":"",t.alphaMap?"#define USE_ALPHAMAP":"",t.alphaHash?"#define USE_ALPHAHASH":"",t.transmission?"#define USE_TRANSMISSION":"",t.transmissionMap?"#define USE_TRANSMISSIONMAP":"",t.thicknessMap?"#define USE_THICKNESSMAP":"",t.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",t.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",t.mapUv?"#define MAP_UV "+t.mapUv:"",t.alphaMapUv?"#define ALPHAMAP_UV "+t.alphaMapUv:"",t.lightMapUv?"#define LIGHTMAP_UV "+t.lightMapUv:"",t.aoMapUv?"#define AOMAP_UV "+t.aoMapUv:"",t.emissiveMapUv?"#define EMISSIVEMAP_UV "+t.emissiveMapUv:"",t.bumpMapUv?"#define BUMPMAP_UV "+t.bumpMapUv:"",t.normalMapUv?"#define NORMALMAP_UV "+t.normalMapUv:"",t.displacementMapUv?"#define DISPLACEMENTMAP_UV "+t.displacementMapUv:"",t.metalnessMapUv?"#define METALNESSMAP_UV "+t.metalnessMapUv:"",t.roughnessMapUv?"#define ROUGHNESSMAP_UV "+t.roughnessMapUv:"",t.anisotropyMapUv?"#define ANISOTROPYMAP_UV "+t.anisotropyMapUv:"",t.clearcoatMapUv?"#define CLEARCOATMAP_UV "+t.clearcoatMapUv:"",t.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+t.clearcoatNormalMapUv:"",t.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+t.clearcoatRoughnessMapUv:"",t.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+t.iridescenceMapUv:"",t.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+t.iridescenceThicknessMapUv:"",t.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+t.sheenColorMapUv:"",t.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+t.sheenRoughnessMapUv:"",t.specularMapUv?"#define SPECULARMAP_UV "+t.specularMapUv:"",t.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+t.specularColorMapUv:"",t.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+t.specularIntensityMapUv:"",t.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+t.transmissionMapUv:"",t.thicknessMapUv?"#define THICKNESSMAP_UV "+t.thicknessMapUv:"",t.vertexTangents&&t.flatShading===!1?"#define USE_TANGENT":"",t.vertexNormals?"#define HAS_NORMAL":"",t.vertexColors?"#define USE_COLOR":"",t.vertexAlphas?"#define USE_COLOR_ALPHA":"",t.vertexUv1s?"#define USE_UV1":"",t.vertexUv2s?"#define USE_UV2":"",t.vertexUv3s?"#define USE_UV3":"",t.pointsUvs?"#define USE_POINTS_UV":"",t.flatShading?"#define FLAT_SHADED":"",t.skinning?"#define USE_SKINNING":"",t.morphTargets?"#define USE_MORPHTARGETS":"",t.morphNormals&&t.flatShading===!1?"#define USE_MORPHNORMALS":"",t.morphColors?"#define USE_MORPHCOLORS":"",t.morphTargetsCount>0?"#define MORPHTARGETS_TEXTURE_STRIDE "+t.morphTextureStride:"",t.morphTargetsCount>0?"#define MORPHTARGETS_COUNT "+t.morphTargetsCount:"",t.doubleSided?"#define DOUBLE_SIDED":"",t.flipSided?"#define FLIP_SIDED":"",t.shadowMapEnabled?"#define USE_SHADOWMAP":"",t.shadowMapEnabled?"#define "+l:"",t.sizeAttenuation?"#define USE_SIZEATTENUATION":"",t.numLightProbes>0?"#define USE_LIGHT_PROBES":"",t.logarithmicDepthBuffer?"#define USE_LOGARITHMIC_DEPTH_BUFFER":"",t.reversedDepthBuffer?"#define USE_REVERSED_DEPTH_BUFFER":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING"," attribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR"," attribute vec3 instanceColor;","#endif","#ifdef USE_INSTANCING_MORPH"," uniform sampler2D morphTexture;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_UV1"," attribute vec2 uv1;","#endif","#ifdef USE_UV2"," attribute vec2 uv2;","#endif","#ifdef USE_UV3"," attribute vec2 uv3;","#endif","#ifdef USE_TANGENT"," attribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )"," attribute vec4 color;","#elif defined( USE_COLOR )"," attribute vec3 color;","#endif","#ifdef USE_SKINNING"," attribute vec4 skinIndex;"," attribute vec4 skinWeight;","#endif",` -`].filter(e_).join(` -`),g=[hw(t),"#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,m,t.useFog&&t.fog?"#define USE_FOG":"",t.useFog&&t.fogExp2?"#define FOG_EXP2":"",t.alphaToCoverage?"#define ALPHA_TO_COVERAGE":"",t.map?"#define USE_MAP":"",t.matcap?"#define USE_MATCAP":"",t.envMap?"#define USE_ENVMAP":"",t.envMap?"#define "+c:"",t.envMap?"#define "+f:"",t.envMap?"#define "+h:"",d?"#define CUBEUV_TEXEL_WIDTH "+d.texelWidth:"",d?"#define CUBEUV_TEXEL_HEIGHT "+d.texelHeight:"",d?"#define CUBEUV_MAX_MIP "+d.maxMip+".0":"",t.lightMap?"#define USE_LIGHTMAP":"",t.aoMap?"#define USE_AOMAP":"",t.bumpMap?"#define USE_BUMPMAP":"",t.normalMap?"#define USE_NORMALMAP":"",t.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",t.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",t.packedNormalMap?"#define USE_PACKED_NORMALMAP":"",t.emissiveMap?"#define USE_EMISSIVEMAP":"",t.anisotropy?"#define USE_ANISOTROPY":"",t.anisotropyMap?"#define USE_ANISOTROPYMAP":"",t.clearcoat?"#define USE_CLEARCOAT":"",t.clearcoatMap?"#define USE_CLEARCOATMAP":"",t.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",t.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",t.dispersion?"#define USE_DISPERSION":"",t.iridescence?"#define USE_IRIDESCENCE":"",t.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",t.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",t.specularMap?"#define USE_SPECULARMAP":"",t.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",t.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",t.roughnessMap?"#define USE_ROUGHNESSMAP":"",t.metalnessMap?"#define USE_METALNESSMAP":"",t.alphaMap?"#define USE_ALPHAMAP":"",t.alphaTest?"#define USE_ALPHATEST":"",t.alphaHash?"#define USE_ALPHAHASH":"",t.sheen?"#define USE_SHEEN":"",t.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",t.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",t.transmission?"#define USE_TRANSMISSION":"",t.transmissionMap?"#define USE_TRANSMISSIONMAP":"",t.thicknessMap?"#define USE_THICKNESSMAP":"",t.vertexTangents&&t.flatShading===!1?"#define USE_TANGENT":"",t.vertexColors||t.instancingColor?"#define USE_COLOR":"",t.vertexAlphas||t.batchingColor?"#define USE_COLOR_ALPHA":"",t.vertexUv1s?"#define USE_UV1":"",t.vertexUv2s?"#define USE_UV2":"",t.vertexUv3s?"#define USE_UV3":"",t.pointsUvs?"#define USE_POINTS_UV":"",t.gradientMap?"#define USE_GRADIENTMAP":"",t.flatShading?"#define FLAT_SHADED":"",t.doubleSided?"#define DOUBLE_SIDED":"",t.flipSided?"#define FLIP_SIDED":"",t.shadowMapEnabled?"#define USE_SHADOWMAP":"",t.shadowMapEnabled?"#define "+l:"",t.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",t.numLightProbes>0?"#define USE_LIGHT_PROBES":"",t.numLightProbeGrids>0?"#define USE_LIGHT_PROBES_GRID":"",t.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",t.decodeVideoTextureEmissive?"#define DECODE_VIDEO_TEXTURE_EMISSIVE":"",t.logarithmicDepthBuffer?"#define USE_LOGARITHMIC_DEPTH_BUFFER":"",t.reversedDepthBuffer?"#define USE_REVERSED_DEPTH_BUFFER":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",t.toneMapping!==Bs?"#define TONE_MAPPING":"",t.toneMapping!==Bs?fi.tonemapping_pars_fragment:"",t.toneMapping!==Bs?U$("toneMapping",t.toneMapping):"",t.dithering?"#define DITHERING":"",t.opaque?"#define OPAQUE":"",fi.colorspace_pars_fragment,w$("linearToOutputTexel",t.outputColorSpace),V$(),t.useDepthPacking?"#define DEPTH_PACKING "+t.depthPacking:"",` -`].filter(e_).join(` -`)),a=RI(a),a=lw(a,t),a=cw(a,t),o=RI(o),o=lw(o,t),o=cw(o,t),a=fw(a),o=fw(o),t.isRawShaderMaterial!==!0&&(v=`#version 300 es +`)):(p=[AF(t),"#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,m,t.extensionClipCullDistance?"#define USE_CLIP_DISTANCE":"",t.batching?"#define USE_BATCHING":"",t.batchingColor?"#define USE_BATCHING_COLOR":"",t.instancing?"#define USE_INSTANCING":"",t.instancingColor?"#define USE_INSTANCING_COLOR":"",t.instancingMorph?"#define USE_INSTANCING_MORPH":"",t.useFog&&t.fog?"#define USE_FOG":"",t.useFog&&t.fogExp2?"#define FOG_EXP2":"",t.map?"#define USE_MAP":"",t.envMap?"#define USE_ENVMAP":"",t.envMap?"#define "+f:"",t.lightMap?"#define USE_LIGHTMAP":"",t.aoMap?"#define USE_AOMAP":"",t.bumpMap?"#define USE_BUMPMAP":"",t.normalMap?"#define USE_NORMALMAP":"",t.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",t.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",t.displacementMap?"#define USE_DISPLACEMENTMAP":"",t.emissiveMap?"#define USE_EMISSIVEMAP":"",t.anisotropy?"#define USE_ANISOTROPY":"",t.anisotropyMap?"#define USE_ANISOTROPYMAP":"",t.clearcoatMap?"#define USE_CLEARCOATMAP":"",t.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",t.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",t.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",t.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",t.specularMap?"#define USE_SPECULARMAP":"",t.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",t.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",t.roughnessMap?"#define USE_ROUGHNESSMAP":"",t.metalnessMap?"#define USE_METALNESSMAP":"",t.alphaMap?"#define USE_ALPHAMAP":"",t.alphaHash?"#define USE_ALPHAHASH":"",t.transmission?"#define USE_TRANSMISSION":"",t.transmissionMap?"#define USE_TRANSMISSIONMAP":"",t.thicknessMap?"#define USE_THICKNESSMAP":"",t.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",t.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",t.mapUv?"#define MAP_UV "+t.mapUv:"",t.alphaMapUv?"#define ALPHAMAP_UV "+t.alphaMapUv:"",t.lightMapUv?"#define LIGHTMAP_UV "+t.lightMapUv:"",t.aoMapUv?"#define AOMAP_UV "+t.aoMapUv:"",t.emissiveMapUv?"#define EMISSIVEMAP_UV "+t.emissiveMapUv:"",t.bumpMapUv?"#define BUMPMAP_UV "+t.bumpMapUv:"",t.normalMapUv?"#define NORMALMAP_UV "+t.normalMapUv:"",t.displacementMapUv?"#define DISPLACEMENTMAP_UV "+t.displacementMapUv:"",t.metalnessMapUv?"#define METALNESSMAP_UV "+t.metalnessMapUv:"",t.roughnessMapUv?"#define ROUGHNESSMAP_UV "+t.roughnessMapUv:"",t.anisotropyMapUv?"#define ANISOTROPYMAP_UV "+t.anisotropyMapUv:"",t.clearcoatMapUv?"#define CLEARCOATMAP_UV "+t.clearcoatMapUv:"",t.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+t.clearcoatNormalMapUv:"",t.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+t.clearcoatRoughnessMapUv:"",t.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+t.iridescenceMapUv:"",t.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+t.iridescenceThicknessMapUv:"",t.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+t.sheenColorMapUv:"",t.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+t.sheenRoughnessMapUv:"",t.specularMapUv?"#define SPECULARMAP_UV "+t.specularMapUv:"",t.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+t.specularColorMapUv:"",t.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+t.specularIntensityMapUv:"",t.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+t.transmissionMapUv:"",t.thicknessMapUv?"#define THICKNESSMAP_UV "+t.thicknessMapUv:"",t.vertexTangents&&t.flatShading===!1?"#define USE_TANGENT":"",t.vertexNormals?"#define HAS_NORMAL":"",t.vertexColors?"#define USE_COLOR":"",t.vertexAlphas?"#define USE_COLOR_ALPHA":"",t.vertexUv1s?"#define USE_UV1":"",t.vertexUv2s?"#define USE_UV2":"",t.vertexUv3s?"#define USE_UV3":"",t.pointsUvs?"#define USE_POINTS_UV":"",t.flatShading?"#define FLAT_SHADED":"",t.skinning?"#define USE_SKINNING":"",t.morphTargets?"#define USE_MORPHTARGETS":"",t.morphNormals&&t.flatShading===!1?"#define USE_MORPHNORMALS":"",t.morphColors?"#define USE_MORPHCOLORS":"",t.morphTargetsCount>0?"#define MORPHTARGETS_TEXTURE_STRIDE "+t.morphTextureStride:"",t.morphTargetsCount>0?"#define MORPHTARGETS_COUNT "+t.morphTargetsCount:"",t.doubleSided?"#define DOUBLE_SIDED":"",t.flipSided?"#define FLIP_SIDED":"",t.shadowMapEnabled?"#define USE_SHADOWMAP":"",t.shadowMapEnabled?"#define "+l:"",t.sizeAttenuation?"#define USE_SIZEATTENUATION":"",t.numLightProbes>0?"#define USE_LIGHT_PROBES":"",t.logarithmicDepthBuffer?"#define USE_LOGARITHMIC_DEPTH_BUFFER":"",t.reversedDepthBuffer?"#define USE_REVERSED_DEPTH_BUFFER":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING"," attribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR"," attribute vec3 instanceColor;","#endif","#ifdef USE_INSTANCING_MORPH"," uniform sampler2D morphTexture;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_UV1"," attribute vec2 uv1;","#endif","#ifdef USE_UV2"," attribute vec2 uv2;","#endif","#ifdef USE_UV3"," attribute vec2 uv3;","#endif","#ifdef USE_TANGENT"," attribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )"," attribute vec4 color;","#elif defined( USE_COLOR )"," attribute vec3 color;","#endif","#ifdef USE_SKINNING"," attribute vec4 skinIndex;"," attribute vec4 skinWeight;","#endif",` +`].filter(o_).join(` +`),g=[AF(t),"#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,m,t.useFog&&t.fog?"#define USE_FOG":"",t.useFog&&t.fogExp2?"#define FOG_EXP2":"",t.alphaToCoverage?"#define ALPHA_TO_COVERAGE":"",t.map?"#define USE_MAP":"",t.matcap?"#define USE_MATCAP":"",t.envMap?"#define USE_ENVMAP":"",t.envMap?"#define "+c:"",t.envMap?"#define "+f:"",t.envMap?"#define "+h:"",d?"#define CUBEUV_TEXEL_WIDTH "+d.texelWidth:"",d?"#define CUBEUV_TEXEL_HEIGHT "+d.texelHeight:"",d?"#define CUBEUV_MAX_MIP "+d.maxMip+".0":"",t.lightMap?"#define USE_LIGHTMAP":"",t.aoMap?"#define USE_AOMAP":"",t.bumpMap?"#define USE_BUMPMAP":"",t.normalMap?"#define USE_NORMALMAP":"",t.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",t.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",t.packedNormalMap?"#define USE_PACKED_NORMALMAP":"",t.emissiveMap?"#define USE_EMISSIVEMAP":"",t.anisotropy?"#define USE_ANISOTROPY":"",t.anisotropyMap?"#define USE_ANISOTROPYMAP":"",t.clearcoat?"#define USE_CLEARCOAT":"",t.clearcoatMap?"#define USE_CLEARCOATMAP":"",t.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",t.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",t.dispersion?"#define USE_DISPERSION":"",t.iridescence?"#define USE_IRIDESCENCE":"",t.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",t.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",t.specularMap?"#define USE_SPECULARMAP":"",t.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",t.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",t.roughnessMap?"#define USE_ROUGHNESSMAP":"",t.metalnessMap?"#define USE_METALNESSMAP":"",t.alphaMap?"#define USE_ALPHAMAP":"",t.alphaTest?"#define USE_ALPHATEST":"",t.alphaHash?"#define USE_ALPHAHASH":"",t.sheen?"#define USE_SHEEN":"",t.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",t.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",t.transmission?"#define USE_TRANSMISSION":"",t.transmissionMap?"#define USE_TRANSMISSIONMAP":"",t.thicknessMap?"#define USE_THICKNESSMAP":"",t.vertexTangents&&t.flatShading===!1?"#define USE_TANGENT":"",t.vertexColors||t.instancingColor?"#define USE_COLOR":"",t.vertexAlphas||t.batchingColor?"#define USE_COLOR_ALPHA":"",t.vertexUv1s?"#define USE_UV1":"",t.vertexUv2s?"#define USE_UV2":"",t.vertexUv3s?"#define USE_UV3":"",t.pointsUvs?"#define USE_POINTS_UV":"",t.gradientMap?"#define USE_GRADIENTMAP":"",t.flatShading?"#define FLAT_SHADED":"",t.doubleSided?"#define DOUBLE_SIDED":"",t.flipSided?"#define FLIP_SIDED":"",t.shadowMapEnabled?"#define USE_SHADOWMAP":"",t.shadowMapEnabled?"#define "+l:"",t.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",t.numLightProbes>0?"#define USE_LIGHT_PROBES":"",t.numLightProbeGrids>0?"#define USE_LIGHT_PROBES_GRID":"",t.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",t.decodeVideoTextureEmissive?"#define DECODE_VIDEO_TEXTURE_EMISSIVE":"",t.logarithmicDepthBuffer?"#define USE_LOGARITHMIC_DEPTH_BUFFER":"",t.reversedDepthBuffer?"#define USE_REVERSED_DEPTH_BUFFER":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",t.toneMapping!==Bs?"#define TONE_MAPPING":"",t.toneMapping!==Bs?fi.tonemapping_pars_fragment:"",t.toneMapping!==Bs?aee("toneMapping",t.toneMapping):"",t.dithering?"#define DITHERING":"",t.opaque?"#define OPAQUE":"",fi.colorspace_pars_fragment,nee("linearToOutputTexel",t.outputColorSpace),oee(),t.useDepthPacking?"#define DEPTH_PACKING "+t.depthPacking:"",` +`].filter(o_).join(` +`)),a=B0(a),a=EF(a,t),a=SF(a,t),o=B0(o),o=EF(o,t),o=SF(o,t),a=TF(a),o=TF(o),t.isRawShaderMaterial!==!0&&(v=`#version 300 es `,p=[u,"#define attribute in","#define varying out","#define texture2D texture"].join(` `)+` -`+p,g=["#define varying in",t.glslVersion===iI?"":"layout(location = 0) out highp vec4 pc_fragColor;",t.glslVersion===iI?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join(` +`+p,g=["#define varying in",t.glslVersion===p0?"":"layout(location = 0) out highp vec4 pc_fragColor;",t.glslVersion===p0?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join(` `)+` -`+g);let x=v+p+a,A=v+g+o,E=sw(r,r.VERTEX_SHADER,x),T=sw(r,r.FRAGMENT_SHADER,A);r.attachShader(_,E),r.attachShader(_,T),t.index0AttributeName!==void 0?r.bindAttribLocation(_,0,t.index0AttributeName):t.morphTargets===!0&&r.bindAttribLocation(_,0,"position"),r.linkProgram(_);function R(D){if(n.debug.checkShaderErrors){let O=r.getProgramInfoLog(_)||"",V=r.getShaderInfoLog(E)||"",N=r.getShaderInfoLog(T)||"",w=O.trim(),U=V.trim(),G=N.trim(),J=!0,Y=!0;if(r.getProgramParameter(_,r.LINK_STATUS)===!1)if(J=!1,typeof n.debug.onShaderError=="function")n.debug.onShaderError(r,_,E,T);else{let Q=ow(r,E,"vertex"),X=ow(r,T,"fragment");Gt("THREE.WebGLProgram: Shader Error "+r.getError()+" - VALIDATE_STATUS "+r.getProgramParameter(_,r.VALIDATE_STATUS)+` +`+g);let x=v+p+a,A=v+g+o,S=_F(r,r.VERTEX_SHADER,x),E=_F(r,r.FRAGMENT_SHADER,A);r.attachShader(_,S),r.attachShader(_,E),t.index0AttributeName!==void 0?r.bindAttribLocation(_,0,t.index0AttributeName):t.morphTargets===!0&&r.bindAttribLocation(_,0,"position"),r.linkProgram(_);function R(D){if(n.debug.checkShaderErrors){let O=r.getProgramInfoLog(_)||"",V=r.getShaderInfoLog(S)||"",N=r.getShaderInfoLog(E)||"",F=O.trim(),U=V.trim(),W=N.trim(),$=!0,q=!0;if(r.getProgramParameter(_,r.LINK_STATUS)===!1)if($=!1,typeof n.debug.onShaderError=="function")n.debug.onShaderError(r,_,S,E);else{let Z=vF(r,S,"vertex"),X=vF(r,E,"fragment");Gt("THREE.WebGLProgram: Shader Error "+r.getError()+" - VALIDATE_STATUS "+r.getProgramParameter(_,r.VALIDATE_STATUS)+` Material Name: `+D.name+` Material Type: `+D.type+` -Program Info Log: `+w+` -`+Q+` -`+X)}else w!==""?Ct("WebGLProgram: Program Info Log:",w):(U===""||G==="")&&(Y=!1);Y&&(D.diagnostics={runnable:J,programLog:w,vertexShader:{log:U,prefix:p},fragmentShader:{log:G,prefix:g}})}r.deleteShader(E),r.deleteShader(T),I=new du(r,_),y=W$(r,_)}let I;this.getUniforms=function(){return I===void 0&&R(this),I};let y;this.getAttributes=function(){return y===void 0&&R(this),y};let M=t.rendererExtensionParallelShaderCompile===!1;return this.isReady=function(){return M===!1&&(M=r.getProgramParameter(_,L$)),M},this.destroy=function(){i.releaseStatesOfProgram(this),r.deleteProgram(_),this.program=void 0},this.type=t.shaderType,this.name=t.shaderName,this.id=O$++,this.cacheKey=e,this.usedTimes=1,this.program=_,this.vertexShader=E,this.fragmentShader=T,this}function see(n){return n===zc||n===jp||n===qp}function aee(n,e,t,i,r,s){let a=new jd,o=new bI,l=new Set,c=[],f=new Map,h=i.logarithmicDepthBuffer,d=i.precision,u={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distance",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"};function m(I){return l.add(I),I===0?"uv":`uv${I}`}function _(I,y,M,D,O,V){let N=D.fog,w=O.geometry,U=I.isMeshStandardMaterial||I.isMeshLambertMaterial||I.isMeshPhongMaterial?D.environment:null,G=I.isMeshStandardMaterial||I.isMeshLambertMaterial&&!I.envMap||I.isMeshPhongMaterial&&!I.envMap,J=e.get(I.envMap||U,G),Y=J&&J.mapping===Hp?J.image.height:null,Q=u[I.type];I.precision!==null&&(d=i.getMaxPrecision(I.precision),d!==I.precision&&Ct("WebGLProgram.getParameters:",I.precision,"not supported, using",d,"instead."));let X=w.morphAttributes.position||w.morphAttributes.normal||w.morphAttributes.color,j=X!==void 0?X.length:0,me=0;w.morphAttributes.position!==void 0&&(me=1),w.morphAttributes.normal!==void 0&&(me=2),w.morphAttributes.color!==void 0&&(me=3);let xe,Ge,se,pe;if(Q){let ei=wo[Q];xe=ei.vertexShader,Ge=ei.fragmentShader}else xe=I.vertexShader,Ge=I.fragmentShader,o.update(I),se=o.getVertexShaderID(I),pe=o.getFragmentShaderID(I);let ie=n.getRenderTarget(),_e=n.state.buffers.depth.getReversed(),Pe=O.isInstancedMesh===!0,de=O.isBatchedMesh===!0,be=!!I.map,Ze=!!I.matcap,Tt=!!J,Ye=!!I.aoMap,Ke=!!I.lightMap,fe=!!I.bumpMap,Fe=!!I.normalMap,Vt=!!I.displacementMap,re=!!I.emissiveMap,di=!!I.metalnessMap,zt=!!I.roughnessMap,bi=I.anisotropy>0,ot=I.clearcoat>0,Xi=I.dispersion>0,z=I.iridescence>0,B=I.sheen>0,ue=I.transmission>0,Ce=bi&&!!I.anisotropyMap,Be=ot&&!!I.clearcoatMap,je=ot&&!!I.clearcoatNormalMap,st=ot&&!!I.clearcoatRoughnessMap,Me=z&&!!I.iridescenceMap,De=z&&!!I.iridescenceThicknessMap,mt=B&&!!I.sheenColorMap,At=B&&!!I.sheenRoughnessMap,at=!!I.specularMap,Je=!!I.specularColorMap,jt=!!I.specularIntensityMap,ti=ue&&!!I.transmissionMap,Ii=ue&&!!I.thicknessMap,ae=!!I.gradientMap,$e=!!I.alphaMap,ye=I.alphaTest>0,pt=!!I.alphaHash,rt=!!I.extensions,Ue=Bs;I.toneMapped&&(ie===null||ie.isXRRenderTarget===!0)&&(Ue=n.toneMapping);let Mt={shaderID:Q,shaderType:I.type,shaderName:I.name,vertexShader:xe,fragmentShader:Ge,defines:I.defines,customVertexShaderID:se,customFragmentShaderID:pe,isRawShaderMaterial:I.isRawShaderMaterial===!0,glslVersion:I.glslVersion,precision:d,batching:de,batchingColor:de&&O._colorsTexture!==null,instancing:Pe,instancingColor:Pe&&O.instanceColor!==null,instancingMorph:Pe&&O.morphTexture!==null,outputColorSpace:ie===null?n.outputColorSpace:ie.isXRRenderTarget===!0?ie.texture.colorSpace:ai.workingColorSpace,alphaToCoverage:!!I.alphaToCoverage,map:be,matcap:Ze,envMap:Tt,envMapMode:Tt&&J.mapping,envMapCubeUVHeight:Y,aoMap:Ye,lightMap:Ke,bumpMap:fe,normalMap:Fe,displacementMap:Vt,emissiveMap:re,normalMapObjectSpace:Fe&&I.normalMapType===NF,normalMapTangentSpace:Fe&&I.normalMapType===fu,packedNormalMap:Fe&&I.normalMapType===fu&&see(I.normalMap.format),metalnessMap:di,roughnessMap:zt,anisotropy:bi,anisotropyMap:Ce,clearcoat:ot,clearcoatMap:Be,clearcoatNormalMap:je,clearcoatRoughnessMap:st,dispersion:Xi,iridescence:z,iridescenceMap:Me,iridescenceThicknessMap:De,sheen:B,sheenColorMap:mt,sheenRoughnessMap:At,specularMap:at,specularColorMap:Je,specularIntensityMap:jt,transmission:ue,transmissionMap:ti,thicknessMap:Ii,gradientMap:ae,opaque:I.transparent===!1&&I.blending===ih&&I.alphaToCoverage===!1,alphaMap:$e,alphaTest:ye,alphaHash:pt,combine:I.combine,mapUv:be&&m(I.map.channel),aoMapUv:Ye&&m(I.aoMap.channel),lightMapUv:Ke&&m(I.lightMap.channel),bumpMapUv:fe&&m(I.bumpMap.channel),normalMapUv:Fe&&m(I.normalMap.channel),displacementMapUv:Vt&&m(I.displacementMap.channel),emissiveMapUv:re&&m(I.emissiveMap.channel),metalnessMapUv:di&&m(I.metalnessMap.channel),roughnessMapUv:zt&&m(I.roughnessMap.channel),anisotropyMapUv:Ce&&m(I.anisotropyMap.channel),clearcoatMapUv:Be&&m(I.clearcoatMap.channel),clearcoatNormalMapUv:je&&m(I.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:st&&m(I.clearcoatRoughnessMap.channel),iridescenceMapUv:Me&&m(I.iridescenceMap.channel),iridescenceThicknessMapUv:De&&m(I.iridescenceThicknessMap.channel),sheenColorMapUv:mt&&m(I.sheenColorMap.channel),sheenRoughnessMapUv:At&&m(I.sheenRoughnessMap.channel),specularMapUv:at&&m(I.specularMap.channel),specularColorMapUv:Je&&m(I.specularColorMap.channel),specularIntensityMapUv:jt&&m(I.specularIntensityMap.channel),transmissionMapUv:ti&&m(I.transmissionMap.channel),thicknessMapUv:Ii&&m(I.thicknessMap.channel),alphaMapUv:$e&&m(I.alphaMap.channel),vertexTangents:!!w.attributes.tangent&&(Fe||bi),vertexNormals:!!w.attributes.normal,vertexColors:I.vertexColors,vertexAlphas:I.vertexColors===!0&&!!w.attributes.color&&w.attributes.color.itemSize===4,pointsUvs:O.isPoints===!0&&!!w.attributes.uv&&(be||$e),fog:!!N,useFog:I.fog===!0,fogExp2:!!N&&N.isFogExp2,flatShading:I.wireframe===!1&&(I.flatShading===!0||w.attributes.normal===void 0&&Fe===!1&&(I.isMeshLambertMaterial||I.isMeshPhongMaterial||I.isMeshStandardMaterial||I.isMeshPhysicalMaterial)),sizeAttenuation:I.sizeAttenuation===!0,logarithmicDepthBuffer:h,reversedDepthBuffer:_e,skinning:O.isSkinnedMesh===!0,morphTargets:w.morphAttributes.position!==void 0,morphNormals:w.morphAttributes.normal!==void 0,morphColors:w.morphAttributes.color!==void 0,morphTargetsCount:j,morphTextureStride:me,numDirLights:y.directional.length,numPointLights:y.point.length,numSpotLights:y.spot.length,numSpotLightMaps:y.spotLightMap.length,numRectAreaLights:y.rectArea.length,numHemiLights:y.hemi.length,numDirLightShadows:y.directionalShadowMap.length,numPointLightShadows:y.pointShadowMap.length,numSpotLightShadows:y.spotShadowMap.length,numSpotLightShadowsWithMaps:y.numSpotLightShadowsWithMaps,numLightProbes:y.numLightProbes,numLightProbeGrids:V.length,numClippingPlanes:s.numPlanes,numClipIntersection:s.numIntersection,dithering:I.dithering,shadowMapEnabled:n.shadowMap.enabled&&M.length>0,shadowMapType:n.shadowMap.type,toneMapping:Ue,decodeVideoTexture:be&&I.map.isVideoTexture===!0&&ai.getTransfer(I.map.colorSpace)===ki,decodeVideoTextureEmissive:re&&I.emissiveMap.isVideoTexture===!0&&ai.getTransfer(I.emissiveMap.colorSpace)===ki,premultipliedAlpha:I.premultipliedAlpha,doubleSided:I.side===aa,flipSided:I.side===fn,useDepthPacking:I.depthPacking>=0,depthPacking:I.depthPacking||0,index0AttributeName:I.index0AttributeName,extensionClipCullDistance:rt&&I.extensions.clipCullDistance===!0&&t.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(rt&&I.extensions.multiDraw===!0||de)&&t.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:t.has("KHR_parallel_shader_compile"),customProgramCacheKey:I.customProgramCacheKey()};return Mt.vertexUv1s=l.has(1),Mt.vertexUv2s=l.has(2),Mt.vertexUv3s=l.has(3),l.clear(),Mt}function p(I){let y=[];if(I.shaderID?y.push(I.shaderID):(y.push(I.customVertexShaderID),y.push(I.customFragmentShaderID)),I.defines!==void 0)for(let M in I.defines)y.push(M),y.push(I.defines[M]);return I.isRawShaderMaterial===!1&&(g(y,I),v(y,I),y.push(n.outputColorSpace)),y.push(I.customProgramCacheKey),y.join()}function g(I,y){I.push(y.precision),I.push(y.outputColorSpace),I.push(y.envMapMode),I.push(y.envMapCubeUVHeight),I.push(y.mapUv),I.push(y.alphaMapUv),I.push(y.lightMapUv),I.push(y.aoMapUv),I.push(y.bumpMapUv),I.push(y.normalMapUv),I.push(y.displacementMapUv),I.push(y.emissiveMapUv),I.push(y.metalnessMapUv),I.push(y.roughnessMapUv),I.push(y.anisotropyMapUv),I.push(y.clearcoatMapUv),I.push(y.clearcoatNormalMapUv),I.push(y.clearcoatRoughnessMapUv),I.push(y.iridescenceMapUv),I.push(y.iridescenceThicknessMapUv),I.push(y.sheenColorMapUv),I.push(y.sheenRoughnessMapUv),I.push(y.specularMapUv),I.push(y.specularColorMapUv),I.push(y.specularIntensityMapUv),I.push(y.transmissionMapUv),I.push(y.thicknessMapUv),I.push(y.combine),I.push(y.fogExp2),I.push(y.sizeAttenuation),I.push(y.morphTargetsCount),I.push(y.morphAttributeCount),I.push(y.numDirLights),I.push(y.numPointLights),I.push(y.numSpotLights),I.push(y.numSpotLightMaps),I.push(y.numHemiLights),I.push(y.numRectAreaLights),I.push(y.numDirLightShadows),I.push(y.numPointLightShadows),I.push(y.numSpotLightShadows),I.push(y.numSpotLightShadowsWithMaps),I.push(y.numLightProbes),I.push(y.shadowMapType),I.push(y.toneMapping),I.push(y.numClippingPlanes),I.push(y.numClipIntersection),I.push(y.depthPacking)}function v(I,y){a.disableAll(),y.instancing&&a.enable(0),y.instancingColor&&a.enable(1),y.instancingMorph&&a.enable(2),y.matcap&&a.enable(3),y.envMap&&a.enable(4),y.normalMapObjectSpace&&a.enable(5),y.normalMapTangentSpace&&a.enable(6),y.clearcoat&&a.enable(7),y.iridescence&&a.enable(8),y.alphaTest&&a.enable(9),y.vertexColors&&a.enable(10),y.vertexAlphas&&a.enable(11),y.vertexUv1s&&a.enable(12),y.vertexUv2s&&a.enable(13),y.vertexUv3s&&a.enable(14),y.vertexTangents&&a.enable(15),y.anisotropy&&a.enable(16),y.alphaHash&&a.enable(17),y.batching&&a.enable(18),y.dispersion&&a.enable(19),y.batchingColor&&a.enable(20),y.gradientMap&&a.enable(21),y.packedNormalMap&&a.enable(22),y.vertexNormals&&a.enable(23),I.push(a.mask),a.disableAll(),y.fog&&a.enable(0),y.useFog&&a.enable(1),y.flatShading&&a.enable(2),y.logarithmicDepthBuffer&&a.enable(3),y.reversedDepthBuffer&&a.enable(4),y.skinning&&a.enable(5),y.morphTargets&&a.enable(6),y.morphNormals&&a.enable(7),y.morphColors&&a.enable(8),y.premultipliedAlpha&&a.enable(9),y.shadowMapEnabled&&a.enable(10),y.doubleSided&&a.enable(11),y.flipSided&&a.enable(12),y.useDepthPacking&&a.enable(13),y.dithering&&a.enable(14),y.transmission&&a.enable(15),y.sheen&&a.enable(16),y.opaque&&a.enable(17),y.pointsUvs&&a.enable(18),y.decodeVideoTexture&&a.enable(19),y.decodeVideoTextureEmissive&&a.enable(20),y.alphaToCoverage&&a.enable(21),y.numLightProbeGrids>0&&a.enable(22),I.push(a.mask)}function x(I){let y=u[I.type],M;if(y){let D=wo[y];M=YF.clone(D.uniforms)}else M=I.uniforms;return M}function A(I,y){let M=f.get(y);return M!==void 0?++M.usedTimes:(M=new ree(n,y,I,r),c.push(M),f.set(y,M)),M}function E(I){if(--I.usedTimes===0){let y=c.indexOf(I);c[y]=c[c.length-1],c.pop(),f.delete(I.cacheKey),I.destroy()}}function T(I){o.remove(I)}function R(){o.dispose()}return{getParameters:_,getProgramCacheKey:p,getUniforms:x,acquireProgram:A,releaseProgram:E,releaseShaderCache:T,programs:c,dispose:R}}function oee(){let n=new WeakMap;function e(a){return n.has(a)}function t(a){let o=n.get(a);return o===void 0&&(o={},n.set(a,o)),o}function i(a){n.delete(a)}function r(a,o,l){n.get(a)[o]=l}function s(){n=new WeakMap}return{has:e,get:t,remove:i,update:r,dispose:s}}function lee(n,e){return n.groupOrder!==e.groupOrder?n.groupOrder-e.groupOrder:n.renderOrder!==e.renderOrder?n.renderOrder-e.renderOrder:n.material.id!==e.material.id?n.material.id-e.material.id:n.materialVariant!==e.materialVariant?n.materialVariant-e.materialVariant:n.z!==e.z?n.z-e.z:n.id-e.id}function dw(n,e){return n.groupOrder!==e.groupOrder?n.groupOrder-e.groupOrder:n.renderOrder!==e.renderOrder?n.renderOrder-e.renderOrder:n.z!==e.z?e.z-n.z:n.id-e.id}function uw(){let n=[],e=0,t=[],i=[],r=[];function s(){e=0,t.length=0,i.length=0,r.length=0}function a(d){let u=0;return d.isInstancedMesh&&(u+=2),d.isSkinnedMesh&&(u+=1),u}function o(d,u,m,_,p,g){let v=n[e];return v===void 0?(v={id:d.id,object:d,geometry:u,material:m,materialVariant:a(d),groupOrder:_,renderOrder:d.renderOrder,z:p,group:g},n[e]=v):(v.id=d.id,v.object=d,v.geometry=u,v.material=m,v.materialVariant=a(d),v.groupOrder=_,v.renderOrder=d.renderOrder,v.z=p,v.group=g),e++,v}function l(d,u,m,_,p,g){let v=o(d,u,m,_,p,g);m.transmission>0?i.push(v):m.transparent===!0?r.push(v):t.push(v)}function c(d,u,m,_,p,g){let v=o(d,u,m,_,p,g);m.transmission>0?i.unshift(v):m.transparent===!0?r.unshift(v):t.unshift(v)}function f(d,u){t.length>1&&t.sort(d||lee),i.length>1&&i.sort(u||dw),r.length>1&&r.sort(u||dw)}function h(){for(let d=e,u=n.length;d=s.length?(a=new uw,s.push(a)):a=s[r],a}function t(){n=new WeakMap}return{get:e,dispose:t}}function fee(){let n={};return{get:function(e){if(n[e.id]!==void 0)return n[e.id];let t;switch(e.type){case"DirectionalLight":t={direction:new ne,color:new ct};break;case"SpotLight":t={position:new ne,direction:new ne,color:new ct,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":t={position:new ne,color:new ct,distance:0,decay:0};break;case"HemisphereLight":t={direction:new ne,skyColor:new ct,groundColor:new ct};break;case"RectAreaLight":t={color:new ct,position:new ne,halfWidth:new ne,halfHeight:new ne};break}return n[e.id]=t,t}}}function hee(){let n={};return{get:function(e){if(n[e.id]!==void 0)return n[e.id];let t;switch(e.type){case"DirectionalLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Lt};break;case"SpotLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Lt};break;case"PointLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Lt,shadowCameraNear:1,shadowCameraFar:1e3};break}return n[e.id]=t,t}}}function uee(n,e){return(e.castShadow?2:0)-(n.castShadow?2:0)+(e.map?1:0)-(n.map?1:0)}function mee(n){let e=new fee,t=hee(),i={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let c=0;c<9;c++)i.probe.push(new ne);let r=new ne,s=new li,a=new li;function o(c){let f=0,h=0,d=0;for(let y=0;y<9;y++)i.probe[y].set(0,0,0);let u=0,m=0,_=0,p=0,g=0,v=0,x=0,A=0,E=0,T=0,R=0;c.sort(uee);for(let y=0,M=c.length;y0&&(n.has("OES_texture_float_linear")===!0?(i.rectAreaLTC1=_t.LTC_FLOAT_1,i.rectAreaLTC2=_t.LTC_FLOAT_2):(i.rectAreaLTC1=_t.LTC_HALF_1,i.rectAreaLTC2=_t.LTC_HALF_2)),i.ambient[0]=f,i.ambient[1]=h,i.ambient[2]=d;let I=i.hash;(I.directionalLength!==u||I.pointLength!==m||I.spotLength!==_||I.rectAreaLength!==p||I.hemiLength!==g||I.numDirectionalShadows!==v||I.numPointShadows!==x||I.numSpotShadows!==A||I.numSpotMaps!==E||I.numLightProbes!==R)&&(i.directional.length=u,i.spot.length=_,i.rectArea.length=p,i.point.length=m,i.hemi.length=g,i.directionalShadow.length=v,i.directionalShadowMap.length=v,i.pointShadow.length=x,i.pointShadowMap.length=x,i.spotShadow.length=A,i.spotShadowMap.length=A,i.directionalShadowMatrix.length=v,i.pointShadowMatrix.length=x,i.spotLightMatrix.length=A+E-T,i.spotLightMap.length=E,i.numSpotLightShadowsWithMaps=T,i.numLightProbes=R,I.directionalLength=u,I.pointLength=m,I.spotLength=_,I.rectAreaLength=p,I.hemiLength=g,I.numDirectionalShadows=v,I.numPointShadows=x,I.numSpotShadows=A,I.numSpotMaps=E,I.numLightProbes=R,i.version=dee++)}function l(c,f){let h=0,d=0,u=0,m=0,_=0,p=f.matrixWorldInverse;for(let g=0,v=c.length;g=a.length?(o=new mw(n),a.push(o)):o=a[s],o}function i(){e=new WeakMap}return{get:t,dispose:i}}function See(n,e,t){let i=new eu,r=new Lt,s=new Lt,a=new ji,o=new wv,l=new Bv,c={},f=t.maxTextureSize,h={[Os]:fn,[fn]:Os,[aa]:aa},d=new ws({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new Lt},radius:{value:4}},vertexShader:_ee,fragmentShader:gee}),u=d.clone();u.defines.HORIZONTAL_PASS=1;let m=new sr;m.setAttribute("position",new rr(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));let _=new ci(m,d),p=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=kp;let g=this.type;this.render=function(T,R,I){if(p.enabled===!1||p.autoUpdate===!1&&p.needsUpdate===!1||T.length===0)return;this.type===qv&&(Ct("WebGLShadowMap: PCFSoftShadowMap has been deprecated. Using PCFShadowMap instead."),this.type=kp);let y=n.getRenderTarget(),M=n.getActiveCubeFace(),D=n.getActiveMipmapLevel(),O=n.state;O.setBlending(Oo),O.buffers.depth.getReversed()===!0?O.buffers.color.setClear(0,0,0,0):O.buffers.color.setClear(1,1,1,1),O.buffers.depth.setTest(!0),O.setScissorTest(!1);let V=g!==this.type;V&&R.traverse(function(N){N.material&&(Array.isArray(N.material)?N.material.forEach(w=>w.needsUpdate=!0):N.material.needsUpdate=!0)});for(let N=0,w=T.length;Nf||r.y>f)&&(r.x>f&&(s.x=Math.floor(f/J.x),r.x=s.x*J.x,G.mapSize.x=s.x),r.y>f&&(s.y=Math.floor(f/J.y),r.y=s.y*J.y,G.mapSize.y=s.y));let Y=n.state.buffers.depth.getReversed();if(G.camera._reversedDepth=Y,G.map===null||V===!0){if(G.map!==null&&(G.map.depthTexture!==null&&(G.map.depthTexture.dispose(),G.map.depthTexture=null),G.map.dispose()),this.type===su){if(U.isPointLight){Ct("WebGLShadowMap: VSM shadow maps are not supported for PointLights. Use PCF or BasicShadowMap instead.");continue}G.map=new Ns(r.x,r.y,{format:zc,type:No,minFilter:Pr,magFilter:Pr,generateMipmaps:!1}),G.map.texture.name=U.name+".shadowMap",G.map.depthTexture=new Sl(r.x,r.y,Us),G.map.depthTexture.name=U.name+".shadowMapDepth",G.map.depthTexture.format=bo,G.map.depthTexture.compareFunction=null,G.map.depthTexture.minFilter=yr,G.map.depthTexture.magFilter=yr}else U.isPointLight?(G.map=new WE(r.x),G.map.depthTexture=new Nv(r.x,za)):(G.map=new Ns(r.x,r.y),G.map.depthTexture=new Sl(r.x,r.y,za)),G.map.depthTexture.name=U.name+".shadowMap",G.map.depthTexture.format=bo,this.type===kp?(G.map.depthTexture.compareFunction=Y?UE:BE,G.map.depthTexture.minFilter=Pr,G.map.depthTexture.magFilter=Pr):(G.map.depthTexture.compareFunction=null,G.map.depthTexture.minFilter=yr,G.map.depthTexture.magFilter=yr);G.camera.updateProjectionMatrix()}let Q=G.map.isWebGLCubeRenderTarget?6:1;for(let X=0;X0||R.map&&R.alphaTest>0||R.alphaToCoverage===!0){let O=M.uuid,V=R.uuid,N=c[O];N===void 0&&(N={},c[O]=N);let w=N[V];w===void 0&&(w=M.clone(),N[V]=w,R.addEventListener("dispose",E)),M=w}if(M.visible=R.visible,M.wireframe=R.wireframe,y===su?M.side=R.shadowSide!==null?R.shadowSide:R.side:M.side=R.shadowSide!==null?R.shadowSide:h[R.side],M.alphaMap=R.alphaMap,M.alphaTest=R.alphaToCoverage===!0?.5:R.alphaTest,M.map=R.map,M.clipShadows=R.clipShadows,M.clippingPlanes=R.clippingPlanes,M.clipIntersection=R.clipIntersection,M.displacementMap=R.displacementMap,M.displacementScale=R.displacementScale,M.displacementBias=R.displacementBias,M.wireframeLinewidth=R.wireframeLinewidth,M.linewidth=R.linewidth,I.isPointLight===!0&&M.isMeshDistanceMaterial===!0){let O=n.properties.get(M);O.light=I}return M}function A(T,R,I,y,M){if(T.visible===!1)return;if(T.layers.test(R.layers)&&(T.isMesh||T.isLine||T.isPoints)&&(T.castShadow||T.receiveShadow&&M===su)&&(!T.frustumCulled||i.intersectsObject(T))){T.modelViewMatrix.multiplyMatrices(I.matrixWorldInverse,T.matrixWorld);let V=e.update(T),N=T.material;if(Array.isArray(N)){let w=V.groups;for(let U=0,G=w.length;U=1):Y.indexOf("OpenGL ES")!==-1&&(J=parseFloat(/^OpenGL ES (\d)/.exec(Y)[1]),G=J>=2);let Q=null,X={},j=n.getParameter(n.SCISSOR_BOX),me=n.getParameter(n.VIEWPORT),xe=new ji().fromArray(j),Ge=new ji().fromArray(me);function se(ae,$e,ye,pt){let rt=new Uint8Array(4),Ue=n.createTexture();n.bindTexture(ae,Ue),n.texParameteri(ae,n.TEXTURE_MIN_FILTER,n.NEAREST),n.texParameteri(ae,n.TEXTURE_MAG_FILTER,n.NEAREST);for(let Mt=0;Mtue||Be.height>ue)&&(Ce=ue/Math.max(Be.width,Be.height)),Ce<1)if(typeof HTMLImageElement!="undefined"&&z instanceof HTMLImageElement||typeof HTMLCanvasElement!="undefined"&&z instanceof HTMLCanvasElement||typeof ImageBitmap!="undefined"&&z instanceof ImageBitmap||typeof VideoFrame!="undefined"&&z instanceof VideoFrame){let je=Math.floor(Ce*Be.width),st=Math.floor(Ce*Be.height);d===void 0&&(d=_(je,st));let Me=B?_(je,st):d;return Me.width=je,Me.height=st,Me.getContext("2d").drawImage(z,0,0,je,st),Ct("WebGLRenderer: Texture has been resized from ("+Be.width+"x"+Be.height+") to ("+je+"x"+st+")."),Me}else return"data"in z&&Ct("WebGLRenderer: Image in DataTexture is too big ("+Be.width+"x"+Be.height+")."),z;return z}function g(z){return z.generateMipmaps}function v(z){n.generateMipmap(z)}function x(z){return z.isWebGLCubeRenderTarget?n.TEXTURE_CUBE_MAP:z.isWebGL3DRenderTarget?n.TEXTURE_3D:z.isWebGLArrayRenderTarget||z.isCompressedArrayTexture?n.TEXTURE_2D_ARRAY:n.TEXTURE_2D}function A(z,B,ue,Ce,Be,je=!1){if(z!==null){if(n[z]!==void 0)return n[z];Ct("WebGLRenderer: Attempt to use non-existing WebGL internal format '"+z+"'")}let st;Ce&&(st=e.get("EXT_texture_norm16"),st||Ct("WebGLRenderer: Unable to use normalized textures without EXT_texture_norm16 extension"));let Me=B;if(B===n.RED&&(ue===n.FLOAT&&(Me=n.R32F),ue===n.HALF_FLOAT&&(Me=n.R16F),ue===n.UNSIGNED_BYTE&&(Me=n.R8),ue===n.UNSIGNED_SHORT&&st&&(Me=st.R16_EXT),ue===n.SHORT&&st&&(Me=st.R16_SNORM_EXT)),B===n.RED_INTEGER&&(ue===n.UNSIGNED_BYTE&&(Me=n.R8UI),ue===n.UNSIGNED_SHORT&&(Me=n.R16UI),ue===n.UNSIGNED_INT&&(Me=n.R32UI),ue===n.BYTE&&(Me=n.R8I),ue===n.SHORT&&(Me=n.R16I),ue===n.INT&&(Me=n.R32I)),B===n.RG&&(ue===n.FLOAT&&(Me=n.RG32F),ue===n.HALF_FLOAT&&(Me=n.RG16F),ue===n.UNSIGNED_BYTE&&(Me=n.RG8),ue===n.UNSIGNED_SHORT&&st&&(Me=st.RG16_EXT),ue===n.SHORT&&st&&(Me=st.RG16_SNORM_EXT)),B===n.RG_INTEGER&&(ue===n.UNSIGNED_BYTE&&(Me=n.RG8UI),ue===n.UNSIGNED_SHORT&&(Me=n.RG16UI),ue===n.UNSIGNED_INT&&(Me=n.RG32UI),ue===n.BYTE&&(Me=n.RG8I),ue===n.SHORT&&(Me=n.RG16I),ue===n.INT&&(Me=n.RG32I)),B===n.RGB_INTEGER&&(ue===n.UNSIGNED_BYTE&&(Me=n.RGB8UI),ue===n.UNSIGNED_SHORT&&(Me=n.RGB16UI),ue===n.UNSIGNED_INT&&(Me=n.RGB32UI),ue===n.BYTE&&(Me=n.RGB8I),ue===n.SHORT&&(Me=n.RGB16I),ue===n.INT&&(Me=n.RGB32I)),B===n.RGBA_INTEGER&&(ue===n.UNSIGNED_BYTE&&(Me=n.RGBA8UI),ue===n.UNSIGNED_SHORT&&(Me=n.RGBA16UI),ue===n.UNSIGNED_INT&&(Me=n.RGBA32UI),ue===n.BYTE&&(Me=n.RGBA8I),ue===n.SHORT&&(Me=n.RGBA16I),ue===n.INT&&(Me=n.RGBA32I)),B===n.RGB&&(ue===n.UNSIGNED_SHORT&&st&&(Me=st.RGB16_EXT),ue===n.SHORT&&st&&(Me=st.RGB16_SNORM_EXT),ue===n.UNSIGNED_INT_5_9_9_9_REV&&(Me=n.RGB9_E5),ue===n.UNSIGNED_INT_10F_11F_11F_REV&&(Me=n.R11F_G11F_B10F)),B===n.RGBA){let De=je?Tp:ai.getTransfer(Be);ue===n.FLOAT&&(Me=n.RGBA32F),ue===n.HALF_FLOAT&&(Me=n.RGBA16F),ue===n.UNSIGNED_BYTE&&(Me=De===ki?n.SRGB8_ALPHA8:n.RGBA8),ue===n.UNSIGNED_SHORT&&st&&(Me=st.RGBA16_EXT),ue===n.SHORT&&st&&(Me=st.RGBA16_SNORM_EXT),ue===n.UNSIGNED_SHORT_4_4_4_4&&(Me=n.RGBA4),ue===n.UNSIGNED_SHORT_5_5_5_1&&(Me=n.RGB5_A1)}return(Me===n.R16F||Me===n.R32F||Me===n.RG16F||Me===n.RG32F||Me===n.RGBA16F||Me===n.RGBA32F)&&e.get("EXT_color_buffer_float"),Me}function E(z,B){let ue;return z?B===null||B===za||B===lu?ue=n.DEPTH24_STENCIL8:B===Us?ue=n.DEPTH32F_STENCIL8:B===ou&&(ue=n.DEPTH24_STENCIL8,Ct("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):B===null||B===za||B===lu?ue=n.DEPTH_COMPONENT24:B===Us?ue=n.DEPTH_COMPONENT32F:B===ou&&(ue=n.DEPTH_COMPONENT16),ue}function T(z,B){return g(z)===!0||z.isFramebufferTexture&&z.minFilter!==yr&&z.minFilter!==Pr?Math.log2(Math.max(B.width,B.height))+1:z.mipmaps!==void 0&&z.mipmaps.length>0?z.mipmaps.length:z.isCompressedTexture&&Array.isArray(z.image)?B.mipmaps.length:1}function R(z){let B=z.target;B.removeEventListener("dispose",R),y(B),B.isVideoTexture&&f.delete(B),B.isHTMLTexture&&h.delete(B)}function I(z){let B=z.target;B.removeEventListener("dispose",I),D(B)}function y(z){let B=i.get(z);if(B.__webglInit===void 0)return;let ue=z.source,Ce=u.get(ue);if(Ce){let Be=Ce[B.__cacheKey];Be.usedTimes--,Be.usedTimes===0&&M(z),Object.keys(Ce).length===0&&u.delete(ue)}i.remove(z)}function M(z){let B=i.get(z);n.deleteTexture(B.__webglTexture);let ue=z.source,Ce=u.get(ue);delete Ce[B.__cacheKey],a.memory.textures--}function D(z){let B=i.get(z);if(z.depthTexture&&(z.depthTexture.dispose(),i.remove(z.depthTexture)),z.isWebGLCubeRenderTarget)for(let Ce=0;Ce<6;Ce++){if(Array.isArray(B.__webglFramebuffer[Ce]))for(let Be=0;Be=r.maxTextures&&Ct("WebGLTextures: Trying to use "+z+" texture units while this GPU supports only "+r.maxTextures),O+=1,z}function G(z){let B=[];return B.push(z.wrapS),B.push(z.wrapT),B.push(z.wrapR||0),B.push(z.magFilter),B.push(z.minFilter),B.push(z.anisotropy),B.push(z.internalFormat),B.push(z.format),B.push(z.type),B.push(z.generateMipmaps),B.push(z.premultiplyAlpha),B.push(z.flipY),B.push(z.unpackAlignment),B.push(z.colorSpace),B.join()}function J(z,B){let ue=i.get(z);if(z.isVideoTexture&&bi(z),z.isRenderTargetTexture===!1&&z.isExternalTexture!==!0&&z.version>0&&ue.__version!==z.version){let Ce=z.image;if(Ce===null)Ct("WebGLRenderer: Texture marked for update but no image data found.");else if(Ce.complete===!1)Ct("WebGLRenderer: Texture marked for update but image is incomplete");else{_e(ue,z,B);return}}else z.isExternalTexture&&(ue.__webglTexture=z.sourceTexture?z.sourceTexture:null);t.bindTexture(n.TEXTURE_2D,ue.__webglTexture,n.TEXTURE0+B)}function Y(z,B){let ue=i.get(z);if(z.isRenderTargetTexture===!1&&z.version>0&&ue.__version!==z.version){_e(ue,z,B);return}else z.isExternalTexture&&(ue.__webglTexture=z.sourceTexture?z.sourceTexture:null);t.bindTexture(n.TEXTURE_2D_ARRAY,ue.__webglTexture,n.TEXTURE0+B)}function Q(z,B){let ue=i.get(z);if(z.isRenderTargetTexture===!1&&z.version>0&&ue.__version!==z.version){_e(ue,z,B);return}t.bindTexture(n.TEXTURE_3D,ue.__webglTexture,n.TEXTURE0+B)}function X(z,B){let ue=i.get(z);if(z.isCubeDepthTexture!==!0&&z.version>0&&ue.__version!==z.version){Pe(ue,z,B);return}t.bindTexture(n.TEXTURE_CUBE_MAP,ue.__webglTexture,n.TEXTURE0+B)}let j={[Ro]:n.REPEAT,[ra]:n.CLAMP_TO_EDGE,[Hd]:n.MIRRORED_REPEAT},me={[yr]:n.NEAREST,[Jv]:n.NEAREST_MIPMAP_NEAREST,[ph]:n.NEAREST_MIPMAP_LINEAR,[Pr]:n.LINEAR,[au]:n.LINEAR_MIPMAP_NEAREST,[Ha]:n.LINEAR_MIPMAP_LINEAR},xe={[FF]:n.NEVER,[GF]:n.ALWAYS,[wF]:n.LESS,[BE]:n.LEQUAL,[BF]:n.EQUAL,[UE]:n.GEQUAL,[UF]:n.GREATER,[VF]:n.NOTEQUAL};function Ge(z,B){if(B.type===Us&&e.has("OES_texture_float_linear")===!1&&(B.magFilter===Pr||B.magFilter===au||B.magFilter===ph||B.magFilter===Ha||B.minFilter===Pr||B.minFilter===au||B.minFilter===ph||B.minFilter===Ha)&&Ct("WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),n.texParameteri(z,n.TEXTURE_WRAP_S,j[B.wrapS]),n.texParameteri(z,n.TEXTURE_WRAP_T,j[B.wrapT]),(z===n.TEXTURE_3D||z===n.TEXTURE_2D_ARRAY)&&n.texParameteri(z,n.TEXTURE_WRAP_R,j[B.wrapR]),n.texParameteri(z,n.TEXTURE_MAG_FILTER,me[B.magFilter]),n.texParameteri(z,n.TEXTURE_MIN_FILTER,me[B.minFilter]),B.compareFunction&&(n.texParameteri(z,n.TEXTURE_COMPARE_MODE,n.COMPARE_REF_TO_TEXTURE),n.texParameteri(z,n.TEXTURE_COMPARE_FUNC,xe[B.compareFunction])),e.has("EXT_texture_filter_anisotropic")===!0){if(B.magFilter===yr||B.minFilter!==ph&&B.minFilter!==Ha||B.type===Us&&e.has("OES_texture_float_linear")===!1)return;if(B.anisotropy>1||i.get(B).__currentAnisotropy){let ue=e.get("EXT_texture_filter_anisotropic");n.texParameterf(z,ue.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(B.anisotropy,r.getMaxAnisotropy())),i.get(B).__currentAnisotropy=B.anisotropy}}}function se(z,B){let ue=!1;z.__webglInit===void 0&&(z.__webglInit=!0,B.addEventListener("dispose",R));let Ce=B.source,Be=u.get(Ce);Be===void 0&&(Be={},u.set(Ce,Be));let je=G(B);if(je!==z.__cacheKey){Be[je]===void 0&&(Be[je]={texture:n.createTexture(),usedTimes:0},a.memory.textures++,ue=!0),Be[je].usedTimes++;let st=Be[z.__cacheKey];st!==void 0&&(Be[z.__cacheKey].usedTimes--,st.usedTimes===0&&M(B)),z.__cacheKey=je,z.__webglTexture=Be[je].texture}return ue}function pe(z,B,ue){return Math.floor(Math.floor(z/ue)/B)}function ie(z,B,ue,Ce){let je=z.updateRanges;if(je.length===0)t.texSubImage2D(n.TEXTURE_2D,0,0,0,B.width,B.height,ue,Ce,B.data);else{je.sort((At,at)=>At.start-at.start);let st=0;for(let At=1;At0){ti&&Ii&&t.texStorage2D(n.TEXTURE_2D,$e,at,jt[0].width,jt[0].height);for(let ye=0,pt=jt.length;ye0){let rt=oI(Je.width,Je.height,B.format,B.type);for(let Ue of B.layerUpdates){let Mt=Je.data.subarray(Ue*rt/Je.data.BYTES_PER_ELEMENT,(Ue+1)*rt/Je.data.BYTES_PER_ELEMENT);t.compressedTexSubImage3D(n.TEXTURE_2D_ARRAY,ye,0,0,Ue,Je.width,Je.height,1,mt,Mt)}B.clearLayerUpdates()}else t.compressedTexSubImage3D(n.TEXTURE_2D_ARRAY,ye,0,0,0,Je.width,Je.height,De.depth,mt,Je.data)}else t.compressedTexImage3D(n.TEXTURE_2D_ARRAY,ye,at,Je.width,Je.height,De.depth,0,Je.data,0,0);else Ct("WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else ti?ae&&t.texSubImage3D(n.TEXTURE_2D_ARRAY,ye,0,0,0,Je.width,Je.height,De.depth,mt,At,Je.data):t.texImage3D(n.TEXTURE_2D_ARRAY,ye,at,Je.width,Je.height,De.depth,0,mt,At,Je.data)}else{ti&&Ii&&t.texStorage2D(n.TEXTURE_2D,$e,at,jt[0].width,jt[0].height);for(let ye=0,pt=jt.length;ye0){let ye=oI(De.width,De.height,B.format,B.type);for(let pt of B.layerUpdates){let rt=De.data.subarray(pt*ye/De.data.BYTES_PER_ELEMENT,(pt+1)*ye/De.data.BYTES_PER_ELEMENT);t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,pt,De.width,De.height,1,mt,At,rt)}B.clearLayerUpdates()}else t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,0,De.width,De.height,De.depth,mt,At,De.data)}else t.texImage3D(n.TEXTURE_2D_ARRAY,0,at,De.width,De.height,De.depth,0,mt,At,De.data);else if(B.isData3DTexture)ti?(Ii&&t.texStorage3D(n.TEXTURE_3D,$e,at,De.width,De.height,De.depth),ae&&t.texSubImage3D(n.TEXTURE_3D,0,0,0,0,De.width,De.height,De.depth,mt,At,De.data)):t.texImage3D(n.TEXTURE_3D,0,at,De.width,De.height,De.depth,0,mt,At,De.data);else if(B.isFramebufferTexture){if(Ii)if(ti)t.texStorage2D(n.TEXTURE_2D,$e,at,De.width,De.height);else{let ye=De.width,pt=De.height;for(let rt=0;rt<$e;rt++)t.texImage2D(n.TEXTURE_2D,rt,at,ye,pt,0,mt,At,null),ye>>=1,pt>>=1}}else if(B.isHTMLTexture){if("texElementImage2D"in n){let ye=n.canvas;if(ye.hasAttribute("layoutsubtree")||ye.setAttribute("layoutsubtree","true"),De.parentNode!==ye){ye.appendChild(De),h.add(B),ye.onpaint=ei=>{let pr=ei.changedElements;for(let xi of h)pr.includes(xi.image)&&(xi.needsUpdate=!0)},ye.requestPaint();return}let pt=0,rt=n.RGBA,Ue=n.RGBA,Mt=n.UNSIGNED_BYTE;n.texElementImage2D(n.TEXTURE_2D,pt,rt,Ue,Mt,De),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.LINEAR),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE)}}else if(jt.length>0){if(ti&&Ii){let ye=Xi(jt[0]);t.texStorage2D(n.TEXTURE_2D,$e,at,ye.width,ye.height)}for(let ye=0,pt=jt.length;ye0&&pt++;let Ue=Xi(at[0]);t.texStorage2D(n.TEXTURE_CUBE_MAP,pt,Ii,Ue.width,Ue.height)}for(let Ue=0;Ue<6;Ue++)if(At){ae?ye&&t.texSubImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+Ue,0,0,0,at[Ue].width,at[Ue].height,jt,ti,at[Ue].data):t.texImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+Ue,0,Ii,at[Ue].width,at[Ue].height,0,jt,ti,at[Ue].data);for(let Mt=0;Mt>je),Je=Math.max(1,B.height>>je);Be===n.TEXTURE_3D||Be===n.TEXTURE_2D_ARRAY?t.texImage3D(Be,je,De,at,Je,B.depth,0,st,Me,null):t.texImage2D(Be,je,De,at,Je,0,st,Me,null)}t.bindFramebuffer(n.FRAMEBUFFER,z),zt(B)?o.framebufferTexture2DMultisampleEXT(n.FRAMEBUFFER,Ce,Be,At.__webglTexture,0,di(B)):(Be===n.TEXTURE_2D||Be>=n.TEXTURE_CUBE_MAP_POSITIVE_X&&Be<=n.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&n.framebufferTexture2D(n.FRAMEBUFFER,Ce,Be,At.__webglTexture,je),t.bindFramebuffer(n.FRAMEBUFFER,null)}function be(z,B,ue){if(n.bindRenderbuffer(n.RENDERBUFFER,z),B.depthBuffer){let Ce=B.depthTexture,Be=Ce&&Ce.isDepthTexture?Ce.type:null,je=E(B.stencilBuffer,Be),st=B.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT;zt(B)?o.renderbufferStorageMultisampleEXT(n.RENDERBUFFER,di(B),je,B.width,B.height):ue?n.renderbufferStorageMultisample(n.RENDERBUFFER,di(B),je,B.width,B.height):n.renderbufferStorage(n.RENDERBUFFER,je,B.width,B.height),n.framebufferRenderbuffer(n.FRAMEBUFFER,st,n.RENDERBUFFER,z)}else{let Ce=B.textures;for(let Be=0;Be{delete B.__boundDepthTexture,delete B.__depthDisposeCallback,Ce.removeEventListener("dispose",Be)};Ce.addEventListener("dispose",Be),B.__depthDisposeCallback=Be}B.__boundDepthTexture=Ce}if(z.depthTexture&&!B.__autoAllocateDepthBuffer)if(ue)for(let Ce=0;Ce<6;Ce++)Ze(B.__webglFramebuffer[Ce],z,Ce);else{let Ce=z.texture.mipmaps;Ce&&Ce.length>0?Ze(B.__webglFramebuffer[0],z,0):Ze(B.__webglFramebuffer,z,0)}else if(ue){B.__webglDepthbuffer=[];for(let Ce=0;Ce<6;Ce++)if(t.bindFramebuffer(n.FRAMEBUFFER,B.__webglFramebuffer[Ce]),B.__webglDepthbuffer[Ce]===void 0)B.__webglDepthbuffer[Ce]=n.createRenderbuffer(),be(B.__webglDepthbuffer[Ce],z,!1);else{let Be=z.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,je=B.__webglDepthbuffer[Ce];n.bindRenderbuffer(n.RENDERBUFFER,je),n.framebufferRenderbuffer(n.FRAMEBUFFER,Be,n.RENDERBUFFER,je)}}else{let Ce=z.texture.mipmaps;if(Ce&&Ce.length>0?t.bindFramebuffer(n.FRAMEBUFFER,B.__webglFramebuffer[0]):t.bindFramebuffer(n.FRAMEBUFFER,B.__webglFramebuffer),B.__webglDepthbuffer===void 0)B.__webglDepthbuffer=n.createRenderbuffer(),be(B.__webglDepthbuffer,z,!1);else{let Be=z.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,je=B.__webglDepthbuffer;n.bindRenderbuffer(n.RENDERBUFFER,je),n.framebufferRenderbuffer(n.FRAMEBUFFER,Be,n.RENDERBUFFER,je)}}t.bindFramebuffer(n.FRAMEBUFFER,null)}function Ye(z,B,ue){let Ce=i.get(z);B!==void 0&&de(Ce.__webglFramebuffer,z,z.texture,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,0),ue!==void 0&&Tt(z)}function Ke(z){let B=z.texture,ue=i.get(z),Ce=i.get(B);z.addEventListener("dispose",I);let Be=z.textures,je=z.isWebGLCubeRenderTarget===!0,st=Be.length>1;if(st||(Ce.__webglTexture===void 0&&(Ce.__webglTexture=n.createTexture()),Ce.__version=B.version,a.memory.textures++),je){ue.__webglFramebuffer=[];for(let Me=0;Me<6;Me++)if(B.mipmaps&&B.mipmaps.length>0){ue.__webglFramebuffer[Me]=[];for(let De=0;De0){ue.__webglFramebuffer=[];for(let Me=0;Me0&&zt(z)===!1){ue.__webglMultisampledFramebuffer=n.createFramebuffer(),ue.__webglColorRenderbuffer=[],t.bindFramebuffer(n.FRAMEBUFFER,ue.__webglMultisampledFramebuffer);for(let Me=0;Me0)for(let De=0;De0)for(let De=0;De0){if(zt(z)===!1){let B=z.textures,ue=z.width,Ce=z.height,Be=n.COLOR_BUFFER_BIT,je=z.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,st=i.get(z),Me=B.length>1;if(Me)for(let mt=0;mt0?t.bindFramebuffer(n.DRAW_FRAMEBUFFER,st.__webglFramebuffer[0]):t.bindFramebuffer(n.DRAW_FRAMEBUFFER,st.__webglFramebuffer);for(let mt=0;mt0&&e.has("WEBGL_multisampled_render_to_texture")===!0&&B.__useRenderToTexture!==!1}function bi(z){let B=a.render.frame;f.get(z)!==B&&(f.set(z,B),z.update())}function ot(z,B){let ue=z.colorSpace,Ce=z.format,Be=z.type;return z.isCompressedTexture===!0||z.isVideoTexture===!0||ue!==Vn&&ue!==bl&&(ai.getTransfer(ue)===ki?(Ce!==Vs||Be!==os)&&Ct("WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):Gt("WebGLTextures: Unsupported texture color space:",ue)),B}function Xi(z){return typeof HTMLImageElement!="undefined"&&z instanceof HTMLImageElement?(c.width=z.naturalWidth||z.width,c.height=z.naturalHeight||z.height):typeof VideoFrame!="undefined"&&z instanceof VideoFrame?(c.width=z.displayWidth,c.height=z.displayHeight):(c.width=z.width,c.height=z.height),c}this.allocateTextureUnit=U,this.resetTextureUnits=V,this.getTextureUnits=N,this.setTextureUnits=w,this.setTexture2D=J,this.setTexture2DArray=Y,this.setTexture3D=Q,this.setTextureCube=X,this.rebindTextures=Ye,this.setupRenderTarget=Ke,this.updateRenderTargetMipmap=fe,this.updateMultisampleRenderTarget=re,this.setupDepthRenderbuffer=Tt,this.setupFrameBufferTexture=de,this.useMultisampledRTT=zt,this.isReversedDepthBuffer=function(){return t.buffers.depth.getReversed()}}function xee(n,e){function t(i,r=bl){let s,a=ai.getTransfer(r);if(i===os)return n.UNSIGNED_BYTE;if(i===eE)return n.UNSIGNED_SHORT_4_4_4_4;if(i===tE)return n.UNSIGNED_SHORT_5_5_5_1;if(i===Qb)return n.UNSIGNED_INT_5_9_9_9_REV;if(i===Jb)return n.UNSIGNED_INT_10F_11F_11F_REV;if(i===qb)return n.BYTE;if(i===Zb)return n.SHORT;if(i===ou)return n.UNSIGNED_SHORT;if(i===$v)return n.INT;if(i===za)return n.UNSIGNED_INT;if(i===Us)return n.FLOAT;if(i===No)return n.HALF_FLOAT;if(i===$b)return n.ALPHA;if(i===eI)return n.RGB;if(i===Vs)return n.RGBA;if(i===bo)return n.DEPTH_COMPONENT;if(i===Hc)return n.DEPTH_STENCIL;if(i===iE)return n.RED;if(i===rE)return n.RED_INTEGER;if(i===zc)return n.RG;if(i===nE)return n.RG_INTEGER;if(i===sE)return n.RGBA_INTEGER;if(i===zp||i===Xp||i===Yp||i===Kp)if(a===ki)if(s=e.get("WEBGL_compressed_texture_s3tc_srgb"),s!==null){if(i===zp)return s.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(i===Xp)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(i===Yp)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(i===Kp)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(s=e.get("WEBGL_compressed_texture_s3tc"),s!==null){if(i===zp)return s.COMPRESSED_RGB_S3TC_DXT1_EXT;if(i===Xp)return s.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(i===Yp)return s.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(i===Kp)return s.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(i===aE||i===oE||i===lE||i===cE)if(s=e.get("WEBGL_compressed_texture_pvrtc"),s!==null){if(i===aE)return s.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(i===oE)return s.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(i===lE)return s.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(i===cE)return s.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(i===fE||i===hE||i===dE||i===uE||i===mE||i===jp||i===pE)if(s=e.get("WEBGL_compressed_texture_etc"),s!==null){if(i===fE||i===hE)return a===ki?s.COMPRESSED_SRGB8_ETC2:s.COMPRESSED_RGB8_ETC2;if(i===dE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:s.COMPRESSED_RGBA8_ETC2_EAC;if(i===uE)return s.COMPRESSED_R11_EAC;if(i===mE)return s.COMPRESSED_SIGNED_R11_EAC;if(i===jp)return s.COMPRESSED_RG11_EAC;if(i===pE)return s.COMPRESSED_SIGNED_RG11_EAC}else return null;if(i===_E||i===gE||i===vE||i===EE||i===SE||i===TE||i===AE||i===xE||i===RE||i===bE||i===IE||i===ME||i===CE||i===yE)if(s=e.get("WEBGL_compressed_texture_astc"),s!==null){if(i===_E)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:s.COMPRESSED_RGBA_ASTC_4x4_KHR;if(i===gE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:s.COMPRESSED_RGBA_ASTC_5x4_KHR;if(i===vE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:s.COMPRESSED_RGBA_ASTC_5x5_KHR;if(i===EE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:s.COMPRESSED_RGBA_ASTC_6x5_KHR;if(i===SE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:s.COMPRESSED_RGBA_ASTC_6x6_KHR;if(i===TE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:s.COMPRESSED_RGBA_ASTC_8x5_KHR;if(i===AE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:s.COMPRESSED_RGBA_ASTC_8x6_KHR;if(i===xE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:s.COMPRESSED_RGBA_ASTC_8x8_KHR;if(i===RE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:s.COMPRESSED_RGBA_ASTC_10x5_KHR;if(i===bE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:s.COMPRESSED_RGBA_ASTC_10x6_KHR;if(i===IE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:s.COMPRESSED_RGBA_ASTC_10x8_KHR;if(i===ME)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:s.COMPRESSED_RGBA_ASTC_10x10_KHR;if(i===CE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:s.COMPRESSED_RGBA_ASTC_12x10_KHR;if(i===yE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:s.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(i===PE||i===DE||i===LE)if(s=e.get("EXT_texture_compression_bptc"),s!==null){if(i===PE)return a===ki?s.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:s.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(i===DE)return s.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(i===LE)return s.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(i===OE||i===NE||i===qp||i===FE)if(s=e.get("EXT_texture_compression_rgtc"),s!==null){if(i===OE)return s.COMPRESSED_RED_RGTC1_EXT;if(i===NE)return s.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(i===qp)return s.COMPRESSED_RED_GREEN_RGTC2_EXT;if(i===FE)return s.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return i===lu?n.UNSIGNED_INT_24_8:n[i]!==void 0?n[i]:null}return{convert:t}}function Mee(n,e){function t(p,g){p.matrixAutoUpdate===!0&&p.updateMatrix(),g.value.copy(p.matrix)}function i(p,g){g.color.getRGB(p.fogColor.value,nI(n)),g.isFog?(p.fogNear.value=g.near,p.fogFar.value=g.far):g.isFogExp2&&(p.fogDensity.value=g.density)}function r(p,g,v,x,A){g.isNodeMaterial?g.uniformsNeedUpdate=!1:g.isMeshBasicMaterial?s(p,g):g.isMeshLambertMaterial?(s(p,g),g.envMap&&(p.envMapIntensity.value=g.envMapIntensity)):g.isMeshToonMaterial?(s(p,g),h(p,g)):g.isMeshPhongMaterial?(s(p,g),f(p,g),g.envMap&&(p.envMapIntensity.value=g.envMapIntensity)):g.isMeshStandardMaterial?(s(p,g),d(p,g),g.isMeshPhysicalMaterial&&u(p,g,A)):g.isMeshMatcapMaterial?(s(p,g),m(p,g)):g.isMeshDepthMaterial?s(p,g):g.isMeshDistanceMaterial?(s(p,g),_(p,g)):g.isMeshNormalMaterial?s(p,g):g.isLineBasicMaterial?(a(p,g),g.isLineDashedMaterial&&o(p,g)):g.isPointsMaterial?l(p,g,v,x):g.isSpriteMaterial?c(p,g):g.isShadowMaterial?(p.color.value.copy(g.color),p.opacity.value=g.opacity):g.isShaderMaterial&&(g.uniformsNeedUpdate=!1)}function s(p,g){p.opacity.value=g.opacity,g.color&&p.diffuse.value.copy(g.color),g.emissive&&p.emissive.value.copy(g.emissive).multiplyScalar(g.emissiveIntensity),g.map&&(p.map.value=g.map,t(g.map,p.mapTransform)),g.alphaMap&&(p.alphaMap.value=g.alphaMap,t(g.alphaMap,p.alphaMapTransform)),g.bumpMap&&(p.bumpMap.value=g.bumpMap,t(g.bumpMap,p.bumpMapTransform),p.bumpScale.value=g.bumpScale,g.side===fn&&(p.bumpScale.value*=-1)),g.normalMap&&(p.normalMap.value=g.normalMap,t(g.normalMap,p.normalMapTransform),p.normalScale.value.copy(g.normalScale),g.side===fn&&p.normalScale.value.negate()),g.displacementMap&&(p.displacementMap.value=g.displacementMap,t(g.displacementMap,p.displacementMapTransform),p.displacementScale.value=g.displacementScale,p.displacementBias.value=g.displacementBias),g.emissiveMap&&(p.emissiveMap.value=g.emissiveMap,t(g.emissiveMap,p.emissiveMapTransform)),g.specularMap&&(p.specularMap.value=g.specularMap,t(g.specularMap,p.specularMapTransform)),g.alphaTest>0&&(p.alphaTest.value=g.alphaTest);let v=e.get(g),x=v.envMap,A=v.envMapRotation;x&&(p.envMap.value=x,p.envMapRotation.value.setFromMatrix4(Iee.makeRotationFromEuler(A)).transpose(),x.isCubeTexture&&x.isRenderTargetTexture===!1&&p.envMapRotation.value.premultiply(Aw),p.reflectivity.value=g.reflectivity,p.ior.value=g.ior,p.refractionRatio.value=g.refractionRatio),g.lightMap&&(p.lightMap.value=g.lightMap,p.lightMapIntensity.value=g.lightMapIntensity,t(g.lightMap,p.lightMapTransform)),g.aoMap&&(p.aoMap.value=g.aoMap,p.aoMapIntensity.value=g.aoMapIntensity,t(g.aoMap,p.aoMapTransform))}function a(p,g){p.diffuse.value.copy(g.color),p.opacity.value=g.opacity,g.map&&(p.map.value=g.map,t(g.map,p.mapTransform))}function o(p,g){p.dashSize.value=g.dashSize,p.totalSize.value=g.dashSize+g.gapSize,p.scale.value=g.scale}function l(p,g,v,x){p.diffuse.value.copy(g.color),p.opacity.value=g.opacity,p.size.value=g.size*v,p.scale.value=x*.5,g.map&&(p.map.value=g.map,t(g.map,p.uvTransform)),g.alphaMap&&(p.alphaMap.value=g.alphaMap,t(g.alphaMap,p.alphaMapTransform)),g.alphaTest>0&&(p.alphaTest.value=g.alphaTest)}function c(p,g){p.diffuse.value.copy(g.color),p.opacity.value=g.opacity,p.rotation.value=g.rotation,g.map&&(p.map.value=g.map,t(g.map,p.mapTransform)),g.alphaMap&&(p.alphaMap.value=g.alphaMap,t(g.alphaMap,p.alphaMapTransform)),g.alphaTest>0&&(p.alphaTest.value=g.alphaTest)}function f(p,g){p.specular.value.copy(g.specular),p.shininess.value=Math.max(g.shininess,1e-4)}function h(p,g){g.gradientMap&&(p.gradientMap.value=g.gradientMap)}function d(p,g){p.metalness.value=g.metalness,g.metalnessMap&&(p.metalnessMap.value=g.metalnessMap,t(g.metalnessMap,p.metalnessMapTransform)),p.roughness.value=g.roughness,g.roughnessMap&&(p.roughnessMap.value=g.roughnessMap,t(g.roughnessMap,p.roughnessMapTransform)),g.envMap&&(p.envMapIntensity.value=g.envMapIntensity)}function u(p,g,v){p.ior.value=g.ior,g.sheen>0&&(p.sheenColor.value.copy(g.sheenColor).multiplyScalar(g.sheen),p.sheenRoughness.value=g.sheenRoughness,g.sheenColorMap&&(p.sheenColorMap.value=g.sheenColorMap,t(g.sheenColorMap,p.sheenColorMapTransform)),g.sheenRoughnessMap&&(p.sheenRoughnessMap.value=g.sheenRoughnessMap,t(g.sheenRoughnessMap,p.sheenRoughnessMapTransform))),g.clearcoat>0&&(p.clearcoat.value=g.clearcoat,p.clearcoatRoughness.value=g.clearcoatRoughness,g.clearcoatMap&&(p.clearcoatMap.value=g.clearcoatMap,t(g.clearcoatMap,p.clearcoatMapTransform)),g.clearcoatRoughnessMap&&(p.clearcoatRoughnessMap.value=g.clearcoatRoughnessMap,t(g.clearcoatRoughnessMap,p.clearcoatRoughnessMapTransform)),g.clearcoatNormalMap&&(p.clearcoatNormalMap.value=g.clearcoatNormalMap,t(g.clearcoatNormalMap,p.clearcoatNormalMapTransform),p.clearcoatNormalScale.value.copy(g.clearcoatNormalScale),g.side===fn&&p.clearcoatNormalScale.value.negate())),g.dispersion>0&&(p.dispersion.value=g.dispersion),g.iridescence>0&&(p.iridescence.value=g.iridescence,p.iridescenceIOR.value=g.iridescenceIOR,p.iridescenceThicknessMinimum.value=g.iridescenceThicknessRange[0],p.iridescenceThicknessMaximum.value=g.iridescenceThicknessRange[1],g.iridescenceMap&&(p.iridescenceMap.value=g.iridescenceMap,t(g.iridescenceMap,p.iridescenceMapTransform)),g.iridescenceThicknessMap&&(p.iridescenceThicknessMap.value=g.iridescenceThicknessMap,t(g.iridescenceThicknessMap,p.iridescenceThicknessMapTransform))),g.transmission>0&&(p.transmission.value=g.transmission,p.transmissionSamplerMap.value=v.texture,p.transmissionSamplerSize.value.set(v.width,v.height),g.transmissionMap&&(p.transmissionMap.value=g.transmissionMap,t(g.transmissionMap,p.transmissionMapTransform)),p.thickness.value=g.thickness,g.thicknessMap&&(p.thicknessMap.value=g.thicknessMap,t(g.thicknessMap,p.thicknessMapTransform)),p.attenuationDistance.value=g.attenuationDistance,p.attenuationColor.value.copy(g.attenuationColor)),g.anisotropy>0&&(p.anisotropyVector.value.set(g.anisotropy*Math.cos(g.anisotropyRotation),g.anisotropy*Math.sin(g.anisotropyRotation)),g.anisotropyMap&&(p.anisotropyMap.value=g.anisotropyMap,t(g.anisotropyMap,p.anisotropyMapTransform))),p.specularIntensity.value=g.specularIntensity,p.specularColor.value.copy(g.specularColor),g.specularColorMap&&(p.specularColorMap.value=g.specularColorMap,t(g.specularColorMap,p.specularColorMapTransform)),g.specularIntensityMap&&(p.specularIntensityMap.value=g.specularIntensityMap,t(g.specularIntensityMap,p.specularIntensityMapTransform))}function m(p,g){g.matcap&&(p.matcap.value=g.matcap)}function _(p,g){let v=e.get(g).light;p.referencePosition.value.setFromMatrixPosition(v.matrixWorld),p.nearDistance.value=v.shadow.camera.near,p.farDistance.value=v.shadow.camera.far}return{refreshFogUniforms:i,refreshMaterialUniforms:r}}function Cee(n,e,t,i){let r={},s={},a=[],o=n.getParameter(n.MAX_UNIFORM_BUFFER_BINDINGS);function l(v,x){let A=x.program;i.uniformBlockBinding(v,A)}function c(v,x){let A=r[v.id];A===void 0&&(m(v),A=f(v),r[v.id]=A,v.addEventListener("dispose",p));let E=x.program;i.updateUBOMapping(v,E);let T=e.render.frame;s[v.id]!==T&&(d(v),s[v.id]=T)}function f(v){let x=h();v.__bindingPointIndex=x;let A=n.createBuffer(),E=v.__size,T=v.usage;return n.bindBuffer(n.UNIFORM_BUFFER,A),n.bufferData(n.UNIFORM_BUFFER,E,T),n.bindBuffer(n.UNIFORM_BUFFER,null),n.bindBufferBase(n.UNIFORM_BUFFER,x,A),A}function h(){for(let v=0;v0&&(A+=E-T),v.__size=A,v.__cache={},this}function _(v){let x={boundary:0,storage:0};return typeof v=="number"||typeof v=="boolean"?(x.boundary=4,x.storage=4):v.isVector2?(x.boundary=8,x.storage=8):v.isVector3||v.isColor?(x.boundary=16,x.storage=12):v.isVector4?(x.boundary=16,x.storage=16):v.isMatrix3?(x.boundary=48,x.storage=48):v.isMatrix4?(x.boundary=64,x.storage=64):v.isTexture?Ct("WebGLRenderer: Texture samplers can not be part of an uniforms group."):ArrayBuffer.isView(v)?(x.boundary=16,x.storage=v.byteLength):Ct("WebGLRenderer: Unsupported uniform value type.",v),x}function p(v){let x=v.target;x.removeEventListener("dispose",p);let A=a.indexOf(x.__bindingPointIndex);a.splice(A,1),n.deleteBuffer(r[x.id]),delete r[x.id],delete s[x.id]}function g(){for(let v in r)n.deleteBuffer(r[v]);a=[],r={},s={}}return{bind:l,update:c,dispose:g}}function Pee(){return Fo===null&&(Fo=new $d(yee,16,16,zc,No),Fo.name="DFG_LUT",Fo.minFilter=Pr,Fo.magFilter=Pr,Fo.wrapS=ra,Fo.wrapT=ra,Fo.generateMipmaps=!1,Fo.needsUpdate=!0),Fo}var Xq,Yq,Kq,jq,qq,Zq,Qq,Jq,$q,eZ,tZ,iZ,rZ,nZ,sZ,aZ,oZ,lZ,cZ,fZ,hZ,dZ,uZ,mZ,pZ,_Z,gZ,vZ,EZ,SZ,TZ,AZ,xZ,RZ,bZ,IZ,MZ,CZ,yZ,PZ,DZ,LZ,OZ,NZ,FZ,wZ,BZ,UZ,VZ,GZ,kZ,WZ,HZ,zZ,XZ,YZ,KZ,jZ,qZ,ZZ,QZ,JZ,$Z,eQ,tQ,iQ,rQ,nQ,sQ,aQ,oQ,lQ,cQ,fQ,hQ,dQ,uQ,mQ,pQ,_Q,gQ,vQ,EQ,SQ,TQ,AQ,xQ,RQ,bQ,IQ,MQ,CQ,yQ,PQ,DQ,LQ,OQ,NQ,FQ,wQ,BQ,UQ,VQ,GQ,kQ,WQ,HQ,zQ,XQ,YQ,KQ,jQ,qQ,ZQ,QQ,JQ,$Q,eJ,tJ,iJ,rJ,nJ,sJ,aJ,oJ,lJ,cJ,fJ,hJ,dJ,uJ,mJ,pJ,_J,gJ,vJ,EJ,SJ,TJ,AJ,xJ,RJ,fi,_t,wo,GE,bJ,gw,Xc,jF,gh,DJ,Jp,qF,mI,pI,_I,gI,LJ,uu,WE,HJ,vw,SI,Ew,Sw,Tw,$F,ew,tw,iw,rw,TI,AI,xI,vI,du,L$,O$,aw,B$,kE,H$,z$,Y$,j$,Z$,J$,eee,nee,bI,II,dee,_ee,gee,vee,Eee,pw,$p,EI,Ree,bee,MI,CI,Iee,Aw,yee,Fo,HE,Gs=C(()=>{uI();uI();Xq=`#ifdef USE_ALPHAHASH +Program Info Log: `+F+` +`+Z+` +`+X)}else F!==""?Ct("WebGLProgram: Program Info Log:",F):(U===""||W==="")&&(q=!1);q&&(D.diagnostics={runnable:$,programLog:F,vertexShader:{log:U,prefix:p},fragmentShader:{log:W,prefix:g}})}r.deleteShader(S),r.deleteShader(E),I=new pu(r,_),y=fee(r,_)}let I;this.getUniforms=function(){return I===void 0&&R(this),I};let y;this.getAttributes=function(){return y===void 0&&R(this),y};let M=t.rendererExtensionParallelShaderCompile===!1;return this.isReady=function(){return M===!1&&(M=r.getProgramParameter(_,eee)),M},this.destroy=function(){i.releaseStatesOfProgram(this),r.deleteProgram(_),this.program=void 0},this.type=t.shaderType,this.name=t.shaderName,this.id=tee++,this.cacheKey=e,this.usedTimes=1,this.program=_,this.vertexShader=S,this.fragmentShader=E,this}function Mee(n){return n===Kc||n===t_||n===i_}function Cee(n,e,t,i,r,s){let a=new Qd,o=new U0,l=new Set,c=[],f=new Map,h=i.logarithmicDepthBuffer,d=i.precision,u={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distance",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"};function m(I){return l.add(I),I===0?"uv":`uv${I}`}function _(I,y,M,D,O,V){let N=D.fog,F=O.geometry,U=I.isMeshStandardMaterial||I.isMeshLambertMaterial||I.isMeshPhongMaterial?D.environment:null,W=I.isMeshStandardMaterial||I.isMeshLambertMaterial&&!I.envMap||I.isMeshPhongMaterial&&!I.envMap,$=e.get(I.envMap||U,W),q=$&&$.mapping===Zp?$.image.height:null,Z=u[I.type];I.precision!==null&&(d=i.getMaxPrecision(I.precision),d!==I.precision&&Ct("WebGLProgram.getParameters:",I.precision,"not supported, using",d,"instead."));let X=F.morphAttributes.position||F.morphAttributes.normal||F.morphAttributes.color,Y=X!==void 0?X.length:0,fe=0;F.morphAttributes.position!==void 0&&(fe=1),F.morphAttributes.normal!==void 0&&(fe=2),F.morphAttributes.color!==void 0&&(fe=3);let xe,Fe,se,pe;if(Z){let ei=Uo[Z];xe=ei.vertexShader,Fe=ei.fragmentShader}else xe=I.vertexShader,Fe=I.fragmentShader,o.update(I),se=o.getVertexShaderID(I),pe=o.getFragmentShaderID(I);let ie=n.getRenderTarget(),_e=n.state.buffers.depth.getReversed(),Pe=O.isInstancedMesh===!0,ue=O.isBatchedMesh===!0,be=!!I.map,Ze=!!I.matcap,Tt=!!$,Ye=!!I.aoMap,Ke=!!I.lightMap,he=!!I.bumpMap,we=!!I.normalMap,Vt=!!I.displacementMap,re=!!I.emissiveMap,di=!!I.metalnessMap,Xt=!!I.roughnessMap,bi=I.anisotropy>0,ot=I.clearcoat>0,Xi=I.dispersion>0,z=I.iridescence>0,B=I.sheen>0,me=I.transmission>0,Ce=bi&&!!I.anisotropyMap,Ue=ot&&!!I.clearcoatMap,je=ot&&!!I.clearcoatNormalMap,st=ot&&!!I.clearcoatRoughnessMap,Me=z&&!!I.iridescenceMap,De=z&&!!I.iridescenceThicknessMap,mt=B&&!!I.sheenColorMap,At=B&&!!I.sheenRoughnessMap,at=!!I.specularMap,Je=!!I.specularColorMap,qt=!!I.specularIntensityMap,ti=me&&!!I.transmissionMap,Ii=me&&!!I.thicknessMap,ae=!!I.gradientMap,et=!!I.alphaMap,ye=I.alphaTest>0,pt=!!I.alphaHash,rt=!!I.extensions,Ve=Bs;I.toneMapped&&(ie===null||ie.isXRRenderTarget===!0)&&(Ve=n.toneMapping);let Mt={shaderID:Z,shaderType:I.type,shaderName:I.name,vertexShader:xe,fragmentShader:Fe,defines:I.defines,customVertexShaderID:se,customFragmentShaderID:pe,isRawShaderMaterial:I.isRawShaderMaterial===!0,glslVersion:I.glslVersion,precision:d,batching:ue,batchingColor:ue&&O._colorsTexture!==null,instancing:Pe,instancingColor:Pe&&O.instanceColor!==null,instancingMorph:Pe&&O.morphTexture!==null,outputColorSpace:ie===null?n.outputColorSpace:ie.isXRRenderTarget===!0?ie.texture.colorSpace:ai.workingColorSpace,alphaToCoverage:!!I.alphaToCoverage,map:be,matcap:Ze,envMap:Tt,envMapMode:Tt&&$.mapping,envMapCubeUVHeight:q,aoMap:Ye,lightMap:Ke,bumpMap:he,normalMap:we,displacementMap:Vt,emissiveMap:re,normalMapObjectSpace:we&&I.normalMapType===Xw,normalMapTangentSpace:we&&I.normalMapType===uu,packedNormalMap:we&&I.normalMapType===uu&&Mee(I.normalMap.format),metalnessMap:di,roughnessMap:Xt,anisotropy:bi,anisotropyMap:Ce,clearcoat:ot,clearcoatMap:Ue,clearcoatNormalMap:je,clearcoatRoughnessMap:st,dispersion:Xi,iridescence:z,iridescenceMap:Me,iridescenceThicknessMap:De,sheen:B,sheenColorMap:mt,sheenRoughnessMap:At,specularMap:at,specularColorMap:Je,specularIntensityMap:qt,transmission:me,transmissionMap:ti,thicknessMap:Ii,gradientMap:ae,opaque:I.transparent===!1&&I.blending===ih&&I.alphaToCoverage===!1,alphaMap:et,alphaTest:ye,alphaHash:pt,combine:I.combine,mapUv:be&&m(I.map.channel),aoMapUv:Ye&&m(I.aoMap.channel),lightMapUv:Ke&&m(I.lightMap.channel),bumpMapUv:he&&m(I.bumpMap.channel),normalMapUv:we&&m(I.normalMap.channel),displacementMapUv:Vt&&m(I.displacementMap.channel),emissiveMapUv:re&&m(I.emissiveMap.channel),metalnessMapUv:di&&m(I.metalnessMap.channel),roughnessMapUv:Xt&&m(I.roughnessMap.channel),anisotropyMapUv:Ce&&m(I.anisotropyMap.channel),clearcoatMapUv:Ue&&m(I.clearcoatMap.channel),clearcoatNormalMapUv:je&&m(I.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:st&&m(I.clearcoatRoughnessMap.channel),iridescenceMapUv:Me&&m(I.iridescenceMap.channel),iridescenceThicknessMapUv:De&&m(I.iridescenceThicknessMap.channel),sheenColorMapUv:mt&&m(I.sheenColorMap.channel),sheenRoughnessMapUv:At&&m(I.sheenRoughnessMap.channel),specularMapUv:at&&m(I.specularMap.channel),specularColorMapUv:Je&&m(I.specularColorMap.channel),specularIntensityMapUv:qt&&m(I.specularIntensityMap.channel),transmissionMapUv:ti&&m(I.transmissionMap.channel),thicknessMapUv:Ii&&m(I.thicknessMap.channel),alphaMapUv:et&&m(I.alphaMap.channel),vertexTangents:!!F.attributes.tangent&&(we||bi),vertexNormals:!!F.attributes.normal,vertexColors:I.vertexColors,vertexAlphas:I.vertexColors===!0&&!!F.attributes.color&&F.attributes.color.itemSize===4,pointsUvs:O.isPoints===!0&&!!F.attributes.uv&&(be||et),fog:!!N,useFog:I.fog===!0,fogExp2:!!N&&N.isFogExp2,flatShading:I.wireframe===!1&&(I.flatShading===!0||F.attributes.normal===void 0&&we===!1&&(I.isMeshLambertMaterial||I.isMeshPhongMaterial||I.isMeshStandardMaterial||I.isMeshPhysicalMaterial)),sizeAttenuation:I.sizeAttenuation===!0,logarithmicDepthBuffer:h,reversedDepthBuffer:_e,skinning:O.isSkinnedMesh===!0,morphTargets:F.morphAttributes.position!==void 0,morphNormals:F.morphAttributes.normal!==void 0,morphColors:F.morphAttributes.color!==void 0,morphTargetsCount:Y,morphTextureStride:fe,numDirLights:y.directional.length,numPointLights:y.point.length,numSpotLights:y.spot.length,numSpotLightMaps:y.spotLightMap.length,numRectAreaLights:y.rectArea.length,numHemiLights:y.hemi.length,numDirLightShadows:y.directionalShadowMap.length,numPointLightShadows:y.pointShadowMap.length,numSpotLightShadows:y.spotShadowMap.length,numSpotLightShadowsWithMaps:y.numSpotLightShadowsWithMaps,numLightProbes:y.numLightProbes,numLightProbeGrids:V.length,numClippingPlanes:s.numPlanes,numClipIntersection:s.numIntersection,dithering:I.dithering,shadowMapEnabled:n.shadowMap.enabled&&M.length>0,shadowMapType:n.shadowMap.type,toneMapping:Ve,decodeVideoTexture:be&&I.map.isVideoTexture===!0&&ai.getTransfer(I.map.colorSpace)===ki,decodeVideoTextureEmissive:re&&I.emissiveMap.isVideoTexture===!0&&ai.getTransfer(I.emissiveMap.colorSpace)===ki,premultipliedAlpha:I.premultipliedAlpha,doubleSided:I.side===fa,flipSided:I.side===dn,useDepthPacking:I.depthPacking>=0,depthPacking:I.depthPacking||0,index0AttributeName:I.index0AttributeName,extensionClipCullDistance:rt&&I.extensions.clipCullDistance===!0&&t.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(rt&&I.extensions.multiDraw===!0||ue)&&t.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:t.has("KHR_parallel_shader_compile"),customProgramCacheKey:I.customProgramCacheKey()};return Mt.vertexUv1s=l.has(1),Mt.vertexUv2s=l.has(2),Mt.vertexUv3s=l.has(3),l.clear(),Mt}function p(I){let y=[];if(I.shaderID?y.push(I.shaderID):(y.push(I.customVertexShaderID),y.push(I.customFragmentShaderID)),I.defines!==void 0)for(let M in I.defines)y.push(M),y.push(I.defines[M]);return I.isRawShaderMaterial===!1&&(g(y,I),v(y,I),y.push(n.outputColorSpace)),y.push(I.customProgramCacheKey),y.join()}function g(I,y){I.push(y.precision),I.push(y.outputColorSpace),I.push(y.envMapMode),I.push(y.envMapCubeUVHeight),I.push(y.mapUv),I.push(y.alphaMapUv),I.push(y.lightMapUv),I.push(y.aoMapUv),I.push(y.bumpMapUv),I.push(y.normalMapUv),I.push(y.displacementMapUv),I.push(y.emissiveMapUv),I.push(y.metalnessMapUv),I.push(y.roughnessMapUv),I.push(y.anisotropyMapUv),I.push(y.clearcoatMapUv),I.push(y.clearcoatNormalMapUv),I.push(y.clearcoatRoughnessMapUv),I.push(y.iridescenceMapUv),I.push(y.iridescenceThicknessMapUv),I.push(y.sheenColorMapUv),I.push(y.sheenRoughnessMapUv),I.push(y.specularMapUv),I.push(y.specularColorMapUv),I.push(y.specularIntensityMapUv),I.push(y.transmissionMapUv),I.push(y.thicknessMapUv),I.push(y.combine),I.push(y.fogExp2),I.push(y.sizeAttenuation),I.push(y.morphTargetsCount),I.push(y.morphAttributeCount),I.push(y.numDirLights),I.push(y.numPointLights),I.push(y.numSpotLights),I.push(y.numSpotLightMaps),I.push(y.numHemiLights),I.push(y.numRectAreaLights),I.push(y.numDirLightShadows),I.push(y.numPointLightShadows),I.push(y.numSpotLightShadows),I.push(y.numSpotLightShadowsWithMaps),I.push(y.numLightProbes),I.push(y.shadowMapType),I.push(y.toneMapping),I.push(y.numClippingPlanes),I.push(y.numClipIntersection),I.push(y.depthPacking)}function v(I,y){a.disableAll(),y.instancing&&a.enable(0),y.instancingColor&&a.enable(1),y.instancingMorph&&a.enable(2),y.matcap&&a.enable(3),y.envMap&&a.enable(4),y.normalMapObjectSpace&&a.enable(5),y.normalMapTangentSpace&&a.enable(6),y.clearcoat&&a.enable(7),y.iridescence&&a.enable(8),y.alphaTest&&a.enable(9),y.vertexColors&&a.enable(10),y.vertexAlphas&&a.enable(11),y.vertexUv1s&&a.enable(12),y.vertexUv2s&&a.enable(13),y.vertexUv3s&&a.enable(14),y.vertexTangents&&a.enable(15),y.anisotropy&&a.enable(16),y.alphaHash&&a.enable(17),y.batching&&a.enable(18),y.dispersion&&a.enable(19),y.batchingColor&&a.enable(20),y.gradientMap&&a.enable(21),y.packedNormalMap&&a.enable(22),y.vertexNormals&&a.enable(23),I.push(a.mask),a.disableAll(),y.fog&&a.enable(0),y.useFog&&a.enable(1),y.flatShading&&a.enable(2),y.logarithmicDepthBuffer&&a.enable(3),y.reversedDepthBuffer&&a.enable(4),y.skinning&&a.enable(5),y.morphTargets&&a.enable(6),y.morphNormals&&a.enable(7),y.morphColors&&a.enable(8),y.premultipliedAlpha&&a.enable(9),y.shadowMapEnabled&&a.enable(10),y.doubleSided&&a.enable(11),y.flipSided&&a.enable(12),y.useDepthPacking&&a.enable(13),y.dithering&&a.enable(14),y.transmission&&a.enable(15),y.sheen&&a.enable(16),y.opaque&&a.enable(17),y.pointsUvs&&a.enable(18),y.decodeVideoTexture&&a.enable(19),y.decodeVideoTextureEmissive&&a.enable(20),y.alphaToCoverage&&a.enable(21),y.numLightProbeGrids>0&&a.enable(22),I.push(a.mask)}function x(I){let y=u[I.type],M;if(y){let D=Uo[y];M=rF.clone(D.uniforms)}else M=I.uniforms;return M}function A(I,y){let M=f.get(y);return M!==void 0?++M.usedTimes:(M=new bee(n,y,I,r),c.push(M),f.set(y,M)),M}function S(I){if(--I.usedTimes===0){let y=c.indexOf(I);c[y]=c[c.length-1],c.pop(),f.delete(I.cacheKey),I.destroy()}}function E(I){o.remove(I)}function R(){o.dispose()}return{getParameters:_,getProgramCacheKey:p,getUniforms:x,acquireProgram:A,releaseProgram:S,releaseShaderCache:E,programs:c,dispose:R}}function yee(){let n=new WeakMap;function e(a){return n.has(a)}function t(a){let o=n.get(a);return o===void 0&&(o={},n.set(a,o)),o}function i(a){n.delete(a)}function r(a,o,l){n.get(a)[o]=l}function s(){n=new WeakMap}return{has:e,get:t,remove:i,update:r,dispose:s}}function Pee(n,e){return n.groupOrder!==e.groupOrder?n.groupOrder-e.groupOrder:n.renderOrder!==e.renderOrder?n.renderOrder-e.renderOrder:n.material.id!==e.material.id?n.material.id-e.material.id:n.materialVariant!==e.materialVariant?n.materialVariant-e.materialVariant:n.z!==e.z?n.z-e.z:n.id-e.id}function xF(n,e){return n.groupOrder!==e.groupOrder?n.groupOrder-e.groupOrder:n.renderOrder!==e.renderOrder?n.renderOrder-e.renderOrder:n.z!==e.z?e.z-n.z:n.id-e.id}function RF(){let n=[],e=0,t=[],i=[],r=[];function s(){e=0,t.length=0,i.length=0,r.length=0}function a(d){let u=0;return d.isInstancedMesh&&(u+=2),d.isSkinnedMesh&&(u+=1),u}function o(d,u,m,_,p,g){let v=n[e];return v===void 0?(v={id:d.id,object:d,geometry:u,material:m,materialVariant:a(d),groupOrder:_,renderOrder:d.renderOrder,z:p,group:g},n[e]=v):(v.id=d.id,v.object=d,v.geometry=u,v.material=m,v.materialVariant=a(d),v.groupOrder=_,v.renderOrder=d.renderOrder,v.z=p,v.group=g),e++,v}function l(d,u,m,_,p,g){let v=o(d,u,m,_,p,g);m.transmission>0?i.push(v):m.transparent===!0?r.push(v):t.push(v)}function c(d,u,m,_,p,g){let v=o(d,u,m,_,p,g);m.transmission>0?i.unshift(v):m.transparent===!0?r.unshift(v):t.unshift(v)}function f(d,u){t.length>1&&t.sort(d||Pee),i.length>1&&i.sort(u||xF),r.length>1&&r.sort(u||xF)}function h(){for(let d=e,u=n.length;d=s.length?(a=new RF,s.push(a)):a=s[r],a}function t(){n=new WeakMap}return{get:e,dispose:t}}function Lee(){let n={};return{get:function(e){if(n[e.id]!==void 0)return n[e.id];let t;switch(e.type){case"DirectionalLight":t={direction:new ne,color:new ct};break;case"SpotLight":t={position:new ne,direction:new ne,color:new ct,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":t={position:new ne,color:new ct,distance:0,decay:0};break;case"HemisphereLight":t={direction:new ne,skyColor:new ct,groundColor:new ct};break;case"RectAreaLight":t={color:new ct,position:new ne,halfWidth:new ne,halfHeight:new ne};break}return n[e.id]=t,t}}}function Oee(){let n={};return{get:function(e){if(n[e.id]!==void 0)return n[e.id];let t;switch(e.type){case"DirectionalLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Lt};break;case"SpotLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Lt};break;case"PointLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Lt,shadowCameraNear:1,shadowCameraFar:1e3};break}return n[e.id]=t,t}}}function wee(n,e){return(e.castShadow?2:0)-(n.castShadow?2:0)+(e.map?1:0)-(n.map?1:0)}function Fee(n){let e=new Lee,t=Oee(),i={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let c=0;c<9;c++)i.probe.push(new ne);let r=new ne,s=new li,a=new li;function o(c){let f=0,h=0,d=0;for(let y=0;y<9;y++)i.probe[y].set(0,0,0);let u=0,m=0,_=0,p=0,g=0,v=0,x=0,A=0,S=0,E=0,R=0;c.sort(wee);for(let y=0,M=c.length;y0&&(n.has("OES_texture_float_linear")===!0?(i.rectAreaLTC1=_t.LTC_FLOAT_1,i.rectAreaLTC2=_t.LTC_FLOAT_2):(i.rectAreaLTC1=_t.LTC_HALF_1,i.rectAreaLTC2=_t.LTC_HALF_2)),i.ambient[0]=f,i.ambient[1]=h,i.ambient[2]=d;let I=i.hash;(I.directionalLength!==u||I.pointLength!==m||I.spotLength!==_||I.rectAreaLength!==p||I.hemiLength!==g||I.numDirectionalShadows!==v||I.numPointShadows!==x||I.numSpotShadows!==A||I.numSpotMaps!==S||I.numLightProbes!==R)&&(i.directional.length=u,i.spot.length=_,i.rectArea.length=p,i.point.length=m,i.hemi.length=g,i.directionalShadow.length=v,i.directionalShadowMap.length=v,i.pointShadow.length=x,i.pointShadowMap.length=x,i.spotShadow.length=A,i.spotShadowMap.length=A,i.directionalShadowMatrix.length=v,i.pointShadowMatrix.length=x,i.spotLightMatrix.length=A+S-E,i.spotLightMap.length=S,i.numSpotLightShadowsWithMaps=E,i.numLightProbes=R,I.directionalLength=u,I.pointLength=m,I.spotLength=_,I.rectAreaLength=p,I.hemiLength=g,I.numDirectionalShadows=v,I.numPointShadows=x,I.numSpotShadows=A,I.numSpotMaps=S,I.numLightProbes=R,i.version=Nee++)}function l(c,f){let h=0,d=0,u=0,m=0,_=0,p=f.matrixWorldInverse;for(let g=0,v=c.length;g=a.length?(o=new bF(n),a.push(o)):o=a[s],o}function i(){e=new WeakMap}return{get:t,dispose:i}}function Wee(n,e,t){let i=new ru,r=new Lt,s=new Lt,a=new ji,o=new Xv,l=new Yv,c={},f=t.maxTextureSize,h={[Os]:dn,[dn]:Os,[fa]:fa},d=new Fs({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new Lt},radius:{value:4}},vertexShader:Uee,fragmentShader:Vee}),u=d.clone();u.defines.HORIZONTAL_PASS=1;let m=new sr;m.setAttribute("position",new rr(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));let _=new ci(m,d),p=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=jp;let g=this.type;this.render=function(E,R,I){if(p.enabled===!1||p.autoUpdate===!1&&p.needsUpdate===!1||E.length===0)return;this.type===nE&&(Ct("WebGLShadowMap: PCFSoftShadowMap has been deprecated. Using PCFShadowMap instead."),this.type=jp);let y=n.getRenderTarget(),M=n.getActiveCubeFace(),D=n.getActiveMipmapLevel(),O=n.state;O.setBlending(wo),O.buffers.depth.getReversed()===!0?O.buffers.color.setClear(0,0,0,0):O.buffers.color.setClear(1,1,1,1),O.buffers.depth.setTest(!0),O.setScissorTest(!1);let V=g!==this.type;V&&R.traverse(function(N){N.material&&(Array.isArray(N.material)?N.material.forEach(F=>F.needsUpdate=!0):N.material.needsUpdate=!0)});for(let N=0,F=E.length;Nf||r.y>f)&&(r.x>f&&(s.x=Math.floor(f/$.x),r.x=s.x*$.x,W.mapSize.x=s.x),r.y>f&&(s.y=Math.floor(f/$.y),r.y=s.y*$.y,W.mapSize.y=s.y));let q=n.state.buffers.depth.getReversed();if(W.camera._reversedDepth=q,W.map===null||V===!0){if(W.map!==null&&(W.map.depthTexture!==null&&(W.map.depthTexture.dispose(),W.map.depthTexture=null),W.map.dispose()),this.type===lu){if(U.isPointLight){Ct("WebGLShadowMap: VSM shadow maps are not supported for PointLights. Use PCF or BasicShadowMap instead.");continue}W.map=new Ns(r.x,r.y,{format:Kc,type:Fo,minFilter:Pr,magFilter:Pr,generateMipmaps:!1}),W.map.texture.name=U.name+".shadowMap",W.map.depthTexture=new Al(r.x,r.y,Us),W.map.depthTexture.name=U.name+".shadowMapDepth",W.map.depthTexture.format=Mo,W.map.depthTexture.compareFunction=null,W.map.depthTexture.minFilter=yr,W.map.depthTexture.magFilter=yr}else U.isPointLight?(W.map=new QE(r.x),W.map.depthTexture=new Hv(r.x,Ka)):(W.map=new Ns(r.x,r.y),W.map.depthTexture=new Al(r.x,r.y,Ka)),W.map.depthTexture.name=U.name+".shadowMap",W.map.depthTexture.format=Mo,this.type===jp?(W.map.depthTexture.compareFunction=q?KE:YE,W.map.depthTexture.minFilter=Pr,W.map.depthTexture.magFilter=Pr):(W.map.depthTexture.compareFunction=null,W.map.depthTexture.minFilter=yr,W.map.depthTexture.magFilter=yr);W.camera.updateProjectionMatrix()}let Z=W.map.isWebGLCubeRenderTarget?6:1;for(let X=0;X0||R.map&&R.alphaTest>0||R.alphaToCoverage===!0){let O=M.uuid,V=R.uuid,N=c[O];N===void 0&&(N={},c[O]=N);let F=N[V];F===void 0&&(F=M.clone(),N[V]=F,R.addEventListener("dispose",S)),M=F}if(M.visible=R.visible,M.wireframe=R.wireframe,y===lu?M.side=R.shadowSide!==null?R.shadowSide:R.side:M.side=R.shadowSide!==null?R.shadowSide:h[R.side],M.alphaMap=R.alphaMap,M.alphaTest=R.alphaToCoverage===!0?.5:R.alphaTest,M.map=R.map,M.clipShadows=R.clipShadows,M.clippingPlanes=R.clippingPlanes,M.clipIntersection=R.clipIntersection,M.displacementMap=R.displacementMap,M.displacementScale=R.displacementScale,M.displacementBias=R.displacementBias,M.wireframeLinewidth=R.wireframeLinewidth,M.linewidth=R.linewidth,I.isPointLight===!0&&M.isMeshDistanceMaterial===!0){let O=n.properties.get(M);O.light=I}return M}function A(E,R,I,y,M){if(E.visible===!1)return;if(E.layers.test(R.layers)&&(E.isMesh||E.isLine||E.isPoints)&&(E.castShadow||E.receiveShadow&&M===lu)&&(!E.frustumCulled||i.intersectsObject(E))){E.modelViewMatrix.multiplyMatrices(I.matrixWorldInverse,E.matrixWorld);let V=e.update(E),N=E.material;if(Array.isArray(N)){let F=V.groups;for(let U=0,W=F.length;U=1):q.indexOf("OpenGL ES")!==-1&&($=parseFloat(/^OpenGL ES (\d)/.exec(q)[1]),W=$>=2);let Z=null,X={},Y=n.getParameter(n.SCISSOR_BOX),fe=n.getParameter(n.VIEWPORT),xe=new ji().fromArray(Y),Fe=new ji().fromArray(fe);function se(ae,et,ye,pt){let rt=new Uint8Array(4),Ve=n.createTexture();n.bindTexture(ae,Ve),n.texParameteri(ae,n.TEXTURE_MIN_FILTER,n.NEAREST),n.texParameteri(ae,n.TEXTURE_MAG_FILTER,n.NEAREST);for(let Mt=0;Mtme||Ue.height>me)&&(Ce=me/Math.max(Ue.width,Ue.height)),Ce<1)if(typeof HTMLImageElement!="undefined"&&z instanceof HTMLImageElement||typeof HTMLCanvasElement!="undefined"&&z instanceof HTMLCanvasElement||typeof ImageBitmap!="undefined"&&z instanceof ImageBitmap||typeof VideoFrame!="undefined"&&z instanceof VideoFrame){let je=Math.floor(Ce*Ue.width),st=Math.floor(Ce*Ue.height);d===void 0&&(d=_(je,st));let Me=B?_(je,st):d;return Me.width=je,Me.height=st,Me.getContext("2d").drawImage(z,0,0,je,st),Ct("WebGLRenderer: Texture has been resized from ("+Ue.width+"x"+Ue.height+") to ("+je+"x"+st+")."),Me}else return"data"in z&&Ct("WebGLRenderer: Image in DataTexture is too big ("+Ue.width+"x"+Ue.height+")."),z;return z}function g(z){return z.generateMipmaps}function v(z){n.generateMipmap(z)}function x(z){return z.isWebGLCubeRenderTarget?n.TEXTURE_CUBE_MAP:z.isWebGL3DRenderTarget?n.TEXTURE_3D:z.isWebGLArrayRenderTarget||z.isCompressedArrayTexture?n.TEXTURE_2D_ARRAY:n.TEXTURE_2D}function A(z,B,me,Ce,Ue,je=!1){if(z!==null){if(n[z]!==void 0)return n[z];Ct("WebGLRenderer: Attempt to use non-existing WebGL internal format '"+z+"'")}let st;Ce&&(st=e.get("EXT_texture_norm16"),st||Ct("WebGLRenderer: Unable to use normalized textures without EXT_texture_norm16 extension"));let Me=B;if(B===n.RED&&(me===n.FLOAT&&(Me=n.R32F),me===n.HALF_FLOAT&&(Me=n.R16F),me===n.UNSIGNED_BYTE&&(Me=n.R8),me===n.UNSIGNED_SHORT&&st&&(Me=st.R16_EXT),me===n.SHORT&&st&&(Me=st.R16_SNORM_EXT)),B===n.RED_INTEGER&&(me===n.UNSIGNED_BYTE&&(Me=n.R8UI),me===n.UNSIGNED_SHORT&&(Me=n.R16UI),me===n.UNSIGNED_INT&&(Me=n.R32UI),me===n.BYTE&&(Me=n.R8I),me===n.SHORT&&(Me=n.R16I),me===n.INT&&(Me=n.R32I)),B===n.RG&&(me===n.FLOAT&&(Me=n.RG32F),me===n.HALF_FLOAT&&(Me=n.RG16F),me===n.UNSIGNED_BYTE&&(Me=n.RG8),me===n.UNSIGNED_SHORT&&st&&(Me=st.RG16_EXT),me===n.SHORT&&st&&(Me=st.RG16_SNORM_EXT)),B===n.RG_INTEGER&&(me===n.UNSIGNED_BYTE&&(Me=n.RG8UI),me===n.UNSIGNED_SHORT&&(Me=n.RG16UI),me===n.UNSIGNED_INT&&(Me=n.RG32UI),me===n.BYTE&&(Me=n.RG8I),me===n.SHORT&&(Me=n.RG16I),me===n.INT&&(Me=n.RG32I)),B===n.RGB_INTEGER&&(me===n.UNSIGNED_BYTE&&(Me=n.RGB8UI),me===n.UNSIGNED_SHORT&&(Me=n.RGB16UI),me===n.UNSIGNED_INT&&(Me=n.RGB32UI),me===n.BYTE&&(Me=n.RGB8I),me===n.SHORT&&(Me=n.RGB16I),me===n.INT&&(Me=n.RGB32I)),B===n.RGBA_INTEGER&&(me===n.UNSIGNED_BYTE&&(Me=n.RGBA8UI),me===n.UNSIGNED_SHORT&&(Me=n.RGBA16UI),me===n.UNSIGNED_INT&&(Me=n.RGBA32UI),me===n.BYTE&&(Me=n.RGBA8I),me===n.SHORT&&(Me=n.RGBA16I),me===n.INT&&(Me=n.RGBA32I)),B===n.RGB&&(me===n.UNSIGNED_SHORT&&st&&(Me=st.RGB16_EXT),me===n.SHORT&&st&&(Me=st.RGB16_SNORM_EXT),me===n.UNSIGNED_INT_5_9_9_9_REV&&(Me=n.RGB9_E5),me===n.UNSIGNED_INT_10F_11F_11F_REV&&(Me=n.R11F_G11F_B10F)),B===n.RGBA){let De=je?Cp:ai.getTransfer(Ue);me===n.FLOAT&&(Me=n.RGBA32F),me===n.HALF_FLOAT&&(Me=n.RGBA16F),me===n.UNSIGNED_BYTE&&(Me=De===ki?n.SRGB8_ALPHA8:n.RGBA8),me===n.UNSIGNED_SHORT&&st&&(Me=st.RGBA16_EXT),me===n.SHORT&&st&&(Me=st.RGBA16_SNORM_EXT),me===n.UNSIGNED_SHORT_4_4_4_4&&(Me=n.RGBA4),me===n.UNSIGNED_SHORT_5_5_5_1&&(Me=n.RGB5_A1)}return(Me===n.R16F||Me===n.R32F||Me===n.RG16F||Me===n.RG32F||Me===n.RGBA16F||Me===n.RGBA32F)&&e.get("EXT_color_buffer_float"),Me}function S(z,B){let me;return z?B===null||B===Ka||B===hu?me=n.DEPTH24_STENCIL8:B===Us?me=n.DEPTH32F_STENCIL8:B===fu&&(me=n.DEPTH24_STENCIL8,Ct("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):B===null||B===Ka||B===hu?me=n.DEPTH_COMPONENT24:B===Us?me=n.DEPTH_COMPONENT32F:B===fu&&(me=n.DEPTH_COMPONENT16),me}function E(z,B){return g(z)===!0||z.isFramebufferTexture&&z.minFilter!==yr&&z.minFilter!==Pr?Math.log2(Math.max(B.width,B.height))+1:z.mipmaps!==void 0&&z.mipmaps.length>0?z.mipmaps.length:z.isCompressedTexture&&Array.isArray(z.image)?B.mipmaps.length:1}function R(z){let B=z.target;B.removeEventListener("dispose",R),y(B),B.isVideoTexture&&f.delete(B),B.isHTMLTexture&&h.delete(B)}function I(z){let B=z.target;B.removeEventListener("dispose",I),D(B)}function y(z){let B=i.get(z);if(B.__webglInit===void 0)return;let me=z.source,Ce=u.get(me);if(Ce){let Ue=Ce[B.__cacheKey];Ue.usedTimes--,Ue.usedTimes===0&&M(z),Object.keys(Ce).length===0&&u.delete(me)}i.remove(z)}function M(z){let B=i.get(z);n.deleteTexture(B.__webglTexture);let me=z.source,Ce=u.get(me);delete Ce[B.__cacheKey],a.memory.textures--}function D(z){let B=i.get(z);if(z.depthTexture&&(z.depthTexture.dispose(),i.remove(z.depthTexture)),z.isWebGLCubeRenderTarget)for(let Ce=0;Ce<6;Ce++){if(Array.isArray(B.__webglFramebuffer[Ce]))for(let Ue=0;Ue=r.maxTextures&&Ct("WebGLTextures: Trying to use "+z+" texture units while this GPU supports only "+r.maxTextures),O+=1,z}function W(z){let B=[];return B.push(z.wrapS),B.push(z.wrapT),B.push(z.wrapR||0),B.push(z.magFilter),B.push(z.minFilter),B.push(z.anisotropy),B.push(z.internalFormat),B.push(z.format),B.push(z.type),B.push(z.generateMipmaps),B.push(z.premultiplyAlpha),B.push(z.flipY),B.push(z.unpackAlignment),B.push(z.colorSpace),B.join()}function $(z,B){let me=i.get(z);if(z.isVideoTexture&&bi(z),z.isRenderTargetTexture===!1&&z.isExternalTexture!==!0&&z.version>0&&me.__version!==z.version){let Ce=z.image;if(Ce===null)Ct("WebGLRenderer: Texture marked for update but no image data found.");else if(Ce.complete===!1)Ct("WebGLRenderer: Texture marked for update but image is incomplete");else{_e(me,z,B);return}}else z.isExternalTexture&&(me.__webglTexture=z.sourceTexture?z.sourceTexture:null);t.bindTexture(n.TEXTURE_2D,me.__webglTexture,n.TEXTURE0+B)}function q(z,B){let me=i.get(z);if(z.isRenderTargetTexture===!1&&z.version>0&&me.__version!==z.version){_e(me,z,B);return}else z.isExternalTexture&&(me.__webglTexture=z.sourceTexture?z.sourceTexture:null);t.bindTexture(n.TEXTURE_2D_ARRAY,me.__webglTexture,n.TEXTURE0+B)}function Z(z,B){let me=i.get(z);if(z.isRenderTargetTexture===!1&&z.version>0&&me.__version!==z.version){_e(me,z,B);return}t.bindTexture(n.TEXTURE_3D,me.__webglTexture,n.TEXTURE0+B)}function X(z,B){let me=i.get(z);if(z.isCubeDepthTexture!==!0&&z.version>0&&me.__version!==z.version){Pe(me,z,B);return}t.bindTexture(n.TEXTURE_CUBE_MAP,me.__webglTexture,n.TEXTURE0+B)}let Y={[Io]:n.REPEAT,[oa]:n.CLAMP_TO_EDGE,[Yd]:n.MIRRORED_REPEAT},fe={[yr]:n.NEAREST,[oE]:n.NEAREST_MIPMAP_NEAREST,[ph]:n.NEAREST_MIPMAP_LINEAR,[Pr]:n.LINEAR,[cu]:n.LINEAR_MIPMAP_NEAREST,[Ya]:n.LINEAR_MIPMAP_LINEAR},xe={[Yw]:n.NEVER,[Qw]:n.ALWAYS,[Kw]:n.LESS,[YE]:n.LEQUAL,[jw]:n.EQUAL,[KE]:n.GEQUAL,[qw]:n.GREATER,[Zw]:n.NOTEQUAL};function Fe(z,B){if(B.type===Us&&e.has("OES_texture_float_linear")===!1&&(B.magFilter===Pr||B.magFilter===cu||B.magFilter===ph||B.magFilter===Ya||B.minFilter===Pr||B.minFilter===cu||B.minFilter===ph||B.minFilter===Ya)&&Ct("WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),n.texParameteri(z,n.TEXTURE_WRAP_S,Y[B.wrapS]),n.texParameteri(z,n.TEXTURE_WRAP_T,Y[B.wrapT]),(z===n.TEXTURE_3D||z===n.TEXTURE_2D_ARRAY)&&n.texParameteri(z,n.TEXTURE_WRAP_R,Y[B.wrapR]),n.texParameteri(z,n.TEXTURE_MAG_FILTER,fe[B.magFilter]),n.texParameteri(z,n.TEXTURE_MIN_FILTER,fe[B.minFilter]),B.compareFunction&&(n.texParameteri(z,n.TEXTURE_COMPARE_MODE,n.COMPARE_REF_TO_TEXTURE),n.texParameteri(z,n.TEXTURE_COMPARE_FUNC,xe[B.compareFunction])),e.has("EXT_texture_filter_anisotropic")===!0){if(B.magFilter===yr||B.minFilter!==ph&&B.minFilter!==Ya||B.type===Us&&e.has("OES_texture_float_linear")===!1)return;if(B.anisotropy>1||i.get(B).__currentAnisotropy){let me=e.get("EXT_texture_filter_anisotropic");n.texParameterf(z,me.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(B.anisotropy,r.getMaxAnisotropy())),i.get(B).__currentAnisotropy=B.anisotropy}}}function se(z,B){let me=!1;z.__webglInit===void 0&&(z.__webglInit=!0,B.addEventListener("dispose",R));let Ce=B.source,Ue=u.get(Ce);Ue===void 0&&(Ue={},u.set(Ce,Ue));let je=W(B);if(je!==z.__cacheKey){Ue[je]===void 0&&(Ue[je]={texture:n.createTexture(),usedTimes:0},a.memory.textures++,me=!0),Ue[je].usedTimes++;let st=Ue[z.__cacheKey];st!==void 0&&(Ue[z.__cacheKey].usedTimes--,st.usedTimes===0&&M(B)),z.__cacheKey=je,z.__webglTexture=Ue[je].texture}return me}function pe(z,B,me){return Math.floor(Math.floor(z/me)/B)}function ie(z,B,me,Ce){let je=z.updateRanges;if(je.length===0)t.texSubImage2D(n.TEXTURE_2D,0,0,0,B.width,B.height,me,Ce,B.data);else{je.sort((At,at)=>At.start-at.start);let st=0;for(let At=1;At0){ti&&Ii&&t.texStorage2D(n.TEXTURE_2D,et,at,qt[0].width,qt[0].height);for(let ye=0,pt=qt.length;ye0){let rt=S0(Je.width,Je.height,B.format,B.type);for(let Ve of B.layerUpdates){let Mt=Je.data.subarray(Ve*rt/Je.data.BYTES_PER_ELEMENT,(Ve+1)*rt/Je.data.BYTES_PER_ELEMENT);t.compressedTexSubImage3D(n.TEXTURE_2D_ARRAY,ye,0,0,Ve,Je.width,Je.height,1,mt,Mt)}B.clearLayerUpdates()}else t.compressedTexSubImage3D(n.TEXTURE_2D_ARRAY,ye,0,0,0,Je.width,Je.height,De.depth,mt,Je.data)}else t.compressedTexImage3D(n.TEXTURE_2D_ARRAY,ye,at,Je.width,Je.height,De.depth,0,Je.data,0,0);else Ct("WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else ti?ae&&t.texSubImage3D(n.TEXTURE_2D_ARRAY,ye,0,0,0,Je.width,Je.height,De.depth,mt,At,Je.data):t.texImage3D(n.TEXTURE_2D_ARRAY,ye,at,Je.width,Je.height,De.depth,0,mt,At,Je.data)}else{ti&&Ii&&t.texStorage2D(n.TEXTURE_2D,et,at,qt[0].width,qt[0].height);for(let ye=0,pt=qt.length;ye0){let ye=S0(De.width,De.height,B.format,B.type);for(let pt of B.layerUpdates){let rt=De.data.subarray(pt*ye/De.data.BYTES_PER_ELEMENT,(pt+1)*ye/De.data.BYTES_PER_ELEMENT);t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,pt,De.width,De.height,1,mt,At,rt)}B.clearLayerUpdates()}else t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,0,De.width,De.height,De.depth,mt,At,De.data)}else t.texImage3D(n.TEXTURE_2D_ARRAY,0,at,De.width,De.height,De.depth,0,mt,At,De.data);else if(B.isData3DTexture)ti?(Ii&&t.texStorage3D(n.TEXTURE_3D,et,at,De.width,De.height,De.depth),ae&&t.texSubImage3D(n.TEXTURE_3D,0,0,0,0,De.width,De.height,De.depth,mt,At,De.data)):t.texImage3D(n.TEXTURE_3D,0,at,De.width,De.height,De.depth,0,mt,At,De.data);else if(B.isFramebufferTexture){if(Ii)if(ti)t.texStorage2D(n.TEXTURE_2D,et,at,De.width,De.height);else{let ye=De.width,pt=De.height;for(let rt=0;rt>=1,pt>>=1}}else if(B.isHTMLTexture){if("texElementImage2D"in n){let ye=n.canvas;if(ye.hasAttribute("layoutsubtree")||ye.setAttribute("layoutsubtree","true"),De.parentNode!==ye){ye.appendChild(De),h.add(B),ye.onpaint=ei=>{let gr=ei.changedElements;for(let xi of h)gr.includes(xi.image)&&(xi.needsUpdate=!0)},ye.requestPaint();return}let pt=0,rt=n.RGBA,Ve=n.RGBA,Mt=n.UNSIGNED_BYTE;n.texElementImage2D(n.TEXTURE_2D,pt,rt,Ve,Mt,De),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.LINEAR),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE)}}else if(qt.length>0){if(ti&&Ii){let ye=Xi(qt[0]);t.texStorage2D(n.TEXTURE_2D,et,at,ye.width,ye.height)}for(let ye=0,pt=qt.length;ye0&&pt++;let Ve=Xi(at[0]);t.texStorage2D(n.TEXTURE_CUBE_MAP,pt,Ii,Ve.width,Ve.height)}for(let Ve=0;Ve<6;Ve++)if(At){ae?ye&&t.texSubImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+Ve,0,0,0,at[Ve].width,at[Ve].height,qt,ti,at[Ve].data):t.texImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+Ve,0,Ii,at[Ve].width,at[Ve].height,0,qt,ti,at[Ve].data);for(let Mt=0;Mt>je),Je=Math.max(1,B.height>>je);Ue===n.TEXTURE_3D||Ue===n.TEXTURE_2D_ARRAY?t.texImage3D(Ue,je,De,at,Je,B.depth,0,st,Me,null):t.texImage2D(Ue,je,De,at,Je,0,st,Me,null)}t.bindFramebuffer(n.FRAMEBUFFER,z),Xt(B)?o.framebufferTexture2DMultisampleEXT(n.FRAMEBUFFER,Ce,Ue,At.__webglTexture,0,di(B)):(Ue===n.TEXTURE_2D||Ue>=n.TEXTURE_CUBE_MAP_POSITIVE_X&&Ue<=n.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&n.framebufferTexture2D(n.FRAMEBUFFER,Ce,Ue,At.__webglTexture,je),t.bindFramebuffer(n.FRAMEBUFFER,null)}function be(z,B,me){if(n.bindRenderbuffer(n.RENDERBUFFER,z),B.depthBuffer){let Ce=B.depthTexture,Ue=Ce&&Ce.isDepthTexture?Ce.type:null,je=S(B.stencilBuffer,Ue),st=B.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT;Xt(B)?o.renderbufferStorageMultisampleEXT(n.RENDERBUFFER,di(B),je,B.width,B.height):me?n.renderbufferStorageMultisample(n.RENDERBUFFER,di(B),je,B.width,B.height):n.renderbufferStorage(n.RENDERBUFFER,je,B.width,B.height),n.framebufferRenderbuffer(n.FRAMEBUFFER,st,n.RENDERBUFFER,z)}else{let Ce=B.textures;for(let Ue=0;Ue{delete B.__boundDepthTexture,delete B.__depthDisposeCallback,Ce.removeEventListener("dispose",Ue)};Ce.addEventListener("dispose",Ue),B.__depthDisposeCallback=Ue}B.__boundDepthTexture=Ce}if(z.depthTexture&&!B.__autoAllocateDepthBuffer)if(me)for(let Ce=0;Ce<6;Ce++)Ze(B.__webglFramebuffer[Ce],z,Ce);else{let Ce=z.texture.mipmaps;Ce&&Ce.length>0?Ze(B.__webglFramebuffer[0],z,0):Ze(B.__webglFramebuffer,z,0)}else if(me){B.__webglDepthbuffer=[];for(let Ce=0;Ce<6;Ce++)if(t.bindFramebuffer(n.FRAMEBUFFER,B.__webglFramebuffer[Ce]),B.__webglDepthbuffer[Ce]===void 0)B.__webglDepthbuffer[Ce]=n.createRenderbuffer(),be(B.__webglDepthbuffer[Ce],z,!1);else{let Ue=z.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,je=B.__webglDepthbuffer[Ce];n.bindRenderbuffer(n.RENDERBUFFER,je),n.framebufferRenderbuffer(n.FRAMEBUFFER,Ue,n.RENDERBUFFER,je)}}else{let Ce=z.texture.mipmaps;if(Ce&&Ce.length>0?t.bindFramebuffer(n.FRAMEBUFFER,B.__webglFramebuffer[0]):t.bindFramebuffer(n.FRAMEBUFFER,B.__webglFramebuffer),B.__webglDepthbuffer===void 0)B.__webglDepthbuffer=n.createRenderbuffer(),be(B.__webglDepthbuffer,z,!1);else{let Ue=z.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,je=B.__webglDepthbuffer;n.bindRenderbuffer(n.RENDERBUFFER,je),n.framebufferRenderbuffer(n.FRAMEBUFFER,Ue,n.RENDERBUFFER,je)}}t.bindFramebuffer(n.FRAMEBUFFER,null)}function Ye(z,B,me){let Ce=i.get(z);B!==void 0&&ue(Ce.__webglFramebuffer,z,z.texture,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,0),me!==void 0&&Tt(z)}function Ke(z){let B=z.texture,me=i.get(z),Ce=i.get(B);z.addEventListener("dispose",I);let Ue=z.textures,je=z.isWebGLCubeRenderTarget===!0,st=Ue.length>1;if(st||(Ce.__webglTexture===void 0&&(Ce.__webglTexture=n.createTexture()),Ce.__version=B.version,a.memory.textures++),je){me.__webglFramebuffer=[];for(let Me=0;Me<6;Me++)if(B.mipmaps&&B.mipmaps.length>0){me.__webglFramebuffer[Me]=[];for(let De=0;De0){me.__webglFramebuffer=[];for(let Me=0;Me0&&Xt(z)===!1){me.__webglMultisampledFramebuffer=n.createFramebuffer(),me.__webglColorRenderbuffer=[],t.bindFramebuffer(n.FRAMEBUFFER,me.__webglMultisampledFramebuffer);for(let Me=0;Me0)for(let De=0;De0)for(let De=0;De0){if(Xt(z)===!1){let B=z.textures,me=z.width,Ce=z.height,Ue=n.COLOR_BUFFER_BIT,je=z.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,st=i.get(z),Me=B.length>1;if(Me)for(let mt=0;mt0?t.bindFramebuffer(n.DRAW_FRAMEBUFFER,st.__webglFramebuffer[0]):t.bindFramebuffer(n.DRAW_FRAMEBUFFER,st.__webglFramebuffer);for(let mt=0;mt0&&e.has("WEBGL_multisampled_render_to_texture")===!0&&B.__useRenderToTexture!==!1}function bi(z){let B=a.render.frame;f.get(z)!==B&&(f.set(z,B),z.update())}function ot(z,B){let me=z.colorSpace,Ce=z.format,Ue=z.type;return z.isCompressedTexture===!0||z.isVideoTexture===!0||me!==Vn&&me!==Ml&&(ai.getTransfer(me)===ki?(Ce!==Vs||Ue!==os)&&Ct("WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):Gt("WebGLTextures: Unsupported texture color space:",me)),B}function Xi(z){return typeof HTMLImageElement!="undefined"&&z instanceof HTMLImageElement?(c.width=z.naturalWidth||z.width,c.height=z.naturalHeight||z.height):typeof VideoFrame!="undefined"&&z instanceof VideoFrame?(c.width=z.displayWidth,c.height=z.displayHeight):(c.width=z.width,c.height=z.height),c}this.allocateTextureUnit=U,this.resetTextureUnits=V,this.getTextureUnits=N,this.setTextureUnits=F,this.setTexture2D=$,this.setTexture2DArray=q,this.setTexture3D=Z,this.setTextureCube=X,this.rebindTextures=Ye,this.setupRenderTarget=Ke,this.updateRenderTargetMipmap=he,this.updateMultisampleRenderTarget=re,this.setupDepthRenderbuffer=Tt,this.setupFrameBufferTexture=ue,this.useMultisampledRTT=Xt,this.isReversedDepthBuffer=function(){return t.buffers.depth.getReversed()}}function Xee(n,e){function t(i,r=Ml){let s,a=ai.getTransfer(r);if(i===os)return n.UNSIGNED_BYTE;if(i===cE)return n.UNSIGNED_SHORT_4_4_4_4;if(i===fE)return n.UNSIGNED_SHORT_5_5_5_1;if(i===f0)return n.UNSIGNED_INT_5_9_9_9_REV;if(i===h0)return n.UNSIGNED_INT_10F_11F_11F_REV;if(i===l0)return n.BYTE;if(i===c0)return n.SHORT;if(i===fu)return n.UNSIGNED_SHORT;if(i===lE)return n.INT;if(i===Ka)return n.UNSIGNED_INT;if(i===Us)return n.FLOAT;if(i===Fo)return n.HALF_FLOAT;if(i===d0)return n.ALPHA;if(i===u0)return n.RGB;if(i===Vs)return n.RGBA;if(i===Mo)return n.DEPTH_COMPONENT;if(i===Yc)return n.DEPTH_STENCIL;if(i===hE)return n.RED;if(i===dE)return n.RED_INTEGER;if(i===Kc)return n.RG;if(i===uE)return n.RG_INTEGER;if(i===mE)return n.RGBA_INTEGER;if(i===Qp||i===$p||i===Jp||i===e_)if(a===ki)if(s=e.get("WEBGL_compressed_texture_s3tc_srgb"),s!==null){if(i===Qp)return s.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(i===$p)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(i===Jp)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(i===e_)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(s=e.get("WEBGL_compressed_texture_s3tc"),s!==null){if(i===Qp)return s.COMPRESSED_RGB_S3TC_DXT1_EXT;if(i===$p)return s.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(i===Jp)return s.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(i===e_)return s.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(i===pE||i===_E||i===gE||i===vE)if(s=e.get("WEBGL_compressed_texture_pvrtc"),s!==null){if(i===pE)return s.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(i===_E)return s.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(i===gE)return s.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(i===vE)return s.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(i===EE||i===SE||i===TE||i===AE||i===xE||i===t_||i===RE)if(s=e.get("WEBGL_compressed_texture_etc"),s!==null){if(i===EE||i===SE)return a===ki?s.COMPRESSED_SRGB8_ETC2:s.COMPRESSED_RGB8_ETC2;if(i===TE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:s.COMPRESSED_RGBA8_ETC2_EAC;if(i===AE)return s.COMPRESSED_R11_EAC;if(i===xE)return s.COMPRESSED_SIGNED_R11_EAC;if(i===t_)return s.COMPRESSED_RG11_EAC;if(i===RE)return s.COMPRESSED_SIGNED_RG11_EAC}else return null;if(i===bE||i===IE||i===ME||i===CE||i===yE||i===PE||i===DE||i===LE||i===OE||i===NE||i===wE||i===FE||i===BE||i===UE)if(s=e.get("WEBGL_compressed_texture_astc"),s!==null){if(i===bE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:s.COMPRESSED_RGBA_ASTC_4x4_KHR;if(i===IE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:s.COMPRESSED_RGBA_ASTC_5x4_KHR;if(i===ME)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:s.COMPRESSED_RGBA_ASTC_5x5_KHR;if(i===CE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:s.COMPRESSED_RGBA_ASTC_6x5_KHR;if(i===yE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:s.COMPRESSED_RGBA_ASTC_6x6_KHR;if(i===PE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:s.COMPRESSED_RGBA_ASTC_8x5_KHR;if(i===DE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:s.COMPRESSED_RGBA_ASTC_8x6_KHR;if(i===LE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:s.COMPRESSED_RGBA_ASTC_8x8_KHR;if(i===OE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:s.COMPRESSED_RGBA_ASTC_10x5_KHR;if(i===NE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:s.COMPRESSED_RGBA_ASTC_10x6_KHR;if(i===wE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:s.COMPRESSED_RGBA_ASTC_10x8_KHR;if(i===FE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:s.COMPRESSED_RGBA_ASTC_10x10_KHR;if(i===BE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:s.COMPRESSED_RGBA_ASTC_12x10_KHR;if(i===UE)return a===ki?s.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:s.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(i===VE||i===GE||i===kE)if(s=e.get("EXT_texture_compression_bptc"),s!==null){if(i===VE)return a===ki?s.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:s.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(i===GE)return s.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(i===kE)return s.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(i===WE||i===HE||i===i_||i===zE)if(s=e.get("EXT_texture_compression_rgtc"),s!==null){if(i===WE)return s.COMPRESSED_RED_RGTC1_EXT;if(i===HE)return s.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(i===i_)return s.COMPRESSED_RED_GREEN_RGTC2_EXT;if(i===zE)return s.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return i===hu?n.UNSIGNED_INT_24_8:n[i]!==void 0?n[i]:null}return{convert:t}}function qee(n,e){function t(p,g){p.matrixAutoUpdate===!0&&p.updateMatrix(),g.value.copy(p.matrix)}function i(p,g){g.color.getRGB(p.fogColor.value,g0(n)),g.isFog?(p.fogNear.value=g.near,p.fogFar.value=g.far):g.isFogExp2&&(p.fogDensity.value=g.density)}function r(p,g,v,x,A){g.isNodeMaterial?g.uniformsNeedUpdate=!1:g.isMeshBasicMaterial?s(p,g):g.isMeshLambertMaterial?(s(p,g),g.envMap&&(p.envMapIntensity.value=g.envMapIntensity)):g.isMeshToonMaterial?(s(p,g),h(p,g)):g.isMeshPhongMaterial?(s(p,g),f(p,g),g.envMap&&(p.envMapIntensity.value=g.envMapIntensity)):g.isMeshStandardMaterial?(s(p,g),d(p,g),g.isMeshPhysicalMaterial&&u(p,g,A)):g.isMeshMatcapMaterial?(s(p,g),m(p,g)):g.isMeshDepthMaterial?s(p,g):g.isMeshDistanceMaterial?(s(p,g),_(p,g)):g.isMeshNormalMaterial?s(p,g):g.isLineBasicMaterial?(a(p,g),g.isLineDashedMaterial&&o(p,g)):g.isPointsMaterial?l(p,g,v,x):g.isSpriteMaterial?c(p,g):g.isShadowMaterial?(p.color.value.copy(g.color),p.opacity.value=g.opacity):g.isShaderMaterial&&(g.uniformsNeedUpdate=!1)}function s(p,g){p.opacity.value=g.opacity,g.color&&p.diffuse.value.copy(g.color),g.emissive&&p.emissive.value.copy(g.emissive).multiplyScalar(g.emissiveIntensity),g.map&&(p.map.value=g.map,t(g.map,p.mapTransform)),g.alphaMap&&(p.alphaMap.value=g.alphaMap,t(g.alphaMap,p.alphaMapTransform)),g.bumpMap&&(p.bumpMap.value=g.bumpMap,t(g.bumpMap,p.bumpMapTransform),p.bumpScale.value=g.bumpScale,g.side===dn&&(p.bumpScale.value*=-1)),g.normalMap&&(p.normalMap.value=g.normalMap,t(g.normalMap,p.normalMapTransform),p.normalScale.value.copy(g.normalScale),g.side===dn&&p.normalScale.value.negate()),g.displacementMap&&(p.displacementMap.value=g.displacementMap,t(g.displacementMap,p.displacementMapTransform),p.displacementScale.value=g.displacementScale,p.displacementBias.value=g.displacementBias),g.emissiveMap&&(p.emissiveMap.value=g.emissiveMap,t(g.emissiveMap,p.emissiveMapTransform)),g.specularMap&&(p.specularMap.value=g.specularMap,t(g.specularMap,p.specularMapTransform)),g.alphaTest>0&&(p.alphaTest.value=g.alphaTest);let v=e.get(g),x=v.envMap,A=v.envMapRotation;x&&(p.envMap.value=x,p.envMapRotation.value.setFromMatrix4(jee.makeRotationFromEuler(A)).transpose(),x.isCubeTexture&&x.isRenderTargetTexture===!1&&p.envMapRotation.value.premultiply(OF),p.reflectivity.value=g.reflectivity,p.ior.value=g.ior,p.refractionRatio.value=g.refractionRatio),g.lightMap&&(p.lightMap.value=g.lightMap,p.lightMapIntensity.value=g.lightMapIntensity,t(g.lightMap,p.lightMapTransform)),g.aoMap&&(p.aoMap.value=g.aoMap,p.aoMapIntensity.value=g.aoMapIntensity,t(g.aoMap,p.aoMapTransform))}function a(p,g){p.diffuse.value.copy(g.color),p.opacity.value=g.opacity,g.map&&(p.map.value=g.map,t(g.map,p.mapTransform))}function o(p,g){p.dashSize.value=g.dashSize,p.totalSize.value=g.dashSize+g.gapSize,p.scale.value=g.scale}function l(p,g,v,x){p.diffuse.value.copy(g.color),p.opacity.value=g.opacity,p.size.value=g.size*v,p.scale.value=x*.5,g.map&&(p.map.value=g.map,t(g.map,p.uvTransform)),g.alphaMap&&(p.alphaMap.value=g.alphaMap,t(g.alphaMap,p.alphaMapTransform)),g.alphaTest>0&&(p.alphaTest.value=g.alphaTest)}function c(p,g){p.diffuse.value.copy(g.color),p.opacity.value=g.opacity,p.rotation.value=g.rotation,g.map&&(p.map.value=g.map,t(g.map,p.mapTransform)),g.alphaMap&&(p.alphaMap.value=g.alphaMap,t(g.alphaMap,p.alphaMapTransform)),g.alphaTest>0&&(p.alphaTest.value=g.alphaTest)}function f(p,g){p.specular.value.copy(g.specular),p.shininess.value=Math.max(g.shininess,1e-4)}function h(p,g){g.gradientMap&&(p.gradientMap.value=g.gradientMap)}function d(p,g){p.metalness.value=g.metalness,g.metalnessMap&&(p.metalnessMap.value=g.metalnessMap,t(g.metalnessMap,p.metalnessMapTransform)),p.roughness.value=g.roughness,g.roughnessMap&&(p.roughnessMap.value=g.roughnessMap,t(g.roughnessMap,p.roughnessMapTransform)),g.envMap&&(p.envMapIntensity.value=g.envMapIntensity)}function u(p,g,v){p.ior.value=g.ior,g.sheen>0&&(p.sheenColor.value.copy(g.sheenColor).multiplyScalar(g.sheen),p.sheenRoughness.value=g.sheenRoughness,g.sheenColorMap&&(p.sheenColorMap.value=g.sheenColorMap,t(g.sheenColorMap,p.sheenColorMapTransform)),g.sheenRoughnessMap&&(p.sheenRoughnessMap.value=g.sheenRoughnessMap,t(g.sheenRoughnessMap,p.sheenRoughnessMapTransform))),g.clearcoat>0&&(p.clearcoat.value=g.clearcoat,p.clearcoatRoughness.value=g.clearcoatRoughness,g.clearcoatMap&&(p.clearcoatMap.value=g.clearcoatMap,t(g.clearcoatMap,p.clearcoatMapTransform)),g.clearcoatRoughnessMap&&(p.clearcoatRoughnessMap.value=g.clearcoatRoughnessMap,t(g.clearcoatRoughnessMap,p.clearcoatRoughnessMapTransform)),g.clearcoatNormalMap&&(p.clearcoatNormalMap.value=g.clearcoatNormalMap,t(g.clearcoatNormalMap,p.clearcoatNormalMapTransform),p.clearcoatNormalScale.value.copy(g.clearcoatNormalScale),g.side===dn&&p.clearcoatNormalScale.value.negate())),g.dispersion>0&&(p.dispersion.value=g.dispersion),g.iridescence>0&&(p.iridescence.value=g.iridescence,p.iridescenceIOR.value=g.iridescenceIOR,p.iridescenceThicknessMinimum.value=g.iridescenceThicknessRange[0],p.iridescenceThicknessMaximum.value=g.iridescenceThicknessRange[1],g.iridescenceMap&&(p.iridescenceMap.value=g.iridescenceMap,t(g.iridescenceMap,p.iridescenceMapTransform)),g.iridescenceThicknessMap&&(p.iridescenceThicknessMap.value=g.iridescenceThicknessMap,t(g.iridescenceThicknessMap,p.iridescenceThicknessMapTransform))),g.transmission>0&&(p.transmission.value=g.transmission,p.transmissionSamplerMap.value=v.texture,p.transmissionSamplerSize.value.set(v.width,v.height),g.transmissionMap&&(p.transmissionMap.value=g.transmissionMap,t(g.transmissionMap,p.transmissionMapTransform)),p.thickness.value=g.thickness,g.thicknessMap&&(p.thicknessMap.value=g.thicknessMap,t(g.thicknessMap,p.thicknessMapTransform)),p.attenuationDistance.value=g.attenuationDistance,p.attenuationColor.value.copy(g.attenuationColor)),g.anisotropy>0&&(p.anisotropyVector.value.set(g.anisotropy*Math.cos(g.anisotropyRotation),g.anisotropy*Math.sin(g.anisotropyRotation)),g.anisotropyMap&&(p.anisotropyMap.value=g.anisotropyMap,t(g.anisotropyMap,p.anisotropyMapTransform))),p.specularIntensity.value=g.specularIntensity,p.specularColor.value.copy(g.specularColor),g.specularColorMap&&(p.specularColorMap.value=g.specularColorMap,t(g.specularColorMap,p.specularColorMapTransform)),g.specularIntensityMap&&(p.specularIntensityMap.value=g.specularIntensityMap,t(g.specularIntensityMap,p.specularIntensityMapTransform))}function m(p,g){g.matcap&&(p.matcap.value=g.matcap)}function _(p,g){let v=e.get(g).light;p.referencePosition.value.setFromMatrixPosition(v.matrixWorld),p.nearDistance.value=v.shadow.camera.near,p.farDistance.value=v.shadow.camera.far}return{refreshFogUniforms:i,refreshMaterialUniforms:r}}function Zee(n,e,t,i){let r={},s={},a=[],o=n.getParameter(n.MAX_UNIFORM_BUFFER_BINDINGS);function l(v,x){let A=x.program;i.uniformBlockBinding(v,A)}function c(v,x){let A=r[v.id];A===void 0&&(m(v),A=f(v),r[v.id]=A,v.addEventListener("dispose",p));let S=x.program;i.updateUBOMapping(v,S);let E=e.render.frame;s[v.id]!==E&&(d(v),s[v.id]=E)}function f(v){let x=h();v.__bindingPointIndex=x;let A=n.createBuffer(),S=v.__size,E=v.usage;return n.bindBuffer(n.UNIFORM_BUFFER,A),n.bufferData(n.UNIFORM_BUFFER,S,E),n.bindBuffer(n.UNIFORM_BUFFER,null),n.bindBufferBase(n.UNIFORM_BUFFER,x,A),A}function h(){for(let v=0;v0&&(A+=S-E),v.__size=A,v.__cache={},this}function _(v){let x={boundary:0,storage:0};return typeof v=="number"||typeof v=="boolean"?(x.boundary=4,x.storage=4):v.isVector2?(x.boundary=8,x.storage=8):v.isVector3||v.isColor?(x.boundary=16,x.storage=12):v.isVector4?(x.boundary=16,x.storage=16):v.isMatrix3?(x.boundary=48,x.storage=48):v.isMatrix4?(x.boundary=64,x.storage=64):v.isTexture?Ct("WebGLRenderer: Texture samplers can not be part of an uniforms group."):ArrayBuffer.isView(v)?(x.boundary=16,x.storage=v.byteLength):Ct("WebGLRenderer: Unsupported uniform value type.",v),x}function p(v){let x=v.target;x.removeEventListener("dispose",p);let A=a.indexOf(x.__bindingPointIndex);a.splice(A,1),n.deleteBuffer(r[x.id]),delete r[x.id],delete s[x.id]}function g(){for(let v in r)n.deleteBuffer(r[v]);a=[],r={},s={}}return{bind:l,update:c,dispose:g}}function $ee(){return Bo===null&&(Bo=new iu(Qee,16,16,Kc,Fo),Bo.name="DFG_LUT",Bo.minFilter=Pr,Bo.magFilter=Pr,Bo.wrapS=oa,Bo.wrapT=oa,Bo.generateMipmaps=!1,Bo.needsUpdate=!0),Bo}var uZ,mZ,pZ,_Z,gZ,vZ,EZ,SZ,TZ,AZ,xZ,RZ,bZ,IZ,MZ,CZ,yZ,PZ,DZ,LZ,OZ,NZ,wZ,FZ,BZ,UZ,VZ,GZ,kZ,WZ,HZ,zZ,XZ,YZ,KZ,jZ,qZ,ZZ,QZ,$Z,JZ,eQ,tQ,iQ,rQ,nQ,sQ,aQ,oQ,lQ,cQ,fQ,hQ,dQ,uQ,mQ,pQ,_Q,gQ,vQ,EQ,SQ,TQ,AQ,xQ,RQ,bQ,IQ,MQ,CQ,yQ,PQ,DQ,LQ,OQ,NQ,wQ,FQ,BQ,UQ,VQ,GQ,kQ,WQ,HQ,zQ,XQ,YQ,KQ,jQ,qQ,ZQ,QQ,$Q,JQ,e$,t$,i$,r$,n$,s$,a$,o$,l$,c$,f$,h$,d$,u$,m$,p$,_$,g$,v$,E$,S$,T$,A$,x$,R$,b$,I$,M$,C$,y$,P$,D$,L$,O$,N$,w$,F$,B$,U$,V$,G$,k$,W$,H$,z$,X$,Y$,fi,_t,Uo,qE,K$,CF,jc,sF,gh,J$,s_,aF,M0,C0,y0,P0,eJ,_u,QE,hJ,yF,O0,PF,DF,LF,fF,hF,dF,uF,mF,N0,w0,F0,D0,pu,eee,tee,gF,see,ZE,hee,dee,mee,_ee,vee,See,Aee,Iee,U0,V0,Nee,Uee,Vee,Gee,kee,IF,a_,L0,Yee,Kee,G0,k0,jee,OF,Qee,Bo,$E,Gs=C(()=>{I0();I0();uZ=`#ifdef USE_ALPHAHASH if ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard; -#endif`,Yq=`#ifdef USE_ALPHAHASH +#endif`,mZ=`#ifdef USE_ALPHAHASH const float ALPHA_HASH_SCALE = 0.05; float hash2D( vec2 value ) { return fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) ); @@ -392,20 +392,20 @@ Program Info Log: `+w+` : cases.z; return clamp( threshold , 1.0e-6, 1.0 ); } -#endif`,Kq=`#ifdef USE_ALPHAMAP +#endif`,pZ=`#ifdef USE_ALPHAMAP diffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g; -#endif`,jq=`#ifdef USE_ALPHAMAP +#endif`,_Z=`#ifdef USE_ALPHAMAP uniform sampler2D alphaMap; -#endif`,qq=`#ifdef USE_ALPHATEST +#endif`,gZ=`#ifdef USE_ALPHATEST #ifdef ALPHA_TO_COVERAGE diffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a ); if ( diffuseColor.a == 0.0 ) discard; #else if ( diffuseColor.a < alphaTest ) discard; #endif -#endif`,Zq=`#ifdef USE_ALPHATEST +#endif`,vZ=`#ifdef USE_ALPHATEST uniform float alphaTest; -#endif`,Qq=`#ifdef USE_AOMAP +#endif`,EZ=`#ifdef USE_AOMAP float ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0; reflectedLight.indirectDiffuse *= ambientOcclusion; #if defined( USE_CLEARCOAT ) @@ -418,10 +418,10 @@ Program Info Log: `+w+` float dotNV = saturate( dot( geometryNormal, geometryViewDir ) ); reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness ); #endif -#endif`,Jq=`#ifdef USE_AOMAP +#endif`,SZ=`#ifdef USE_AOMAP uniform sampler2D aoMap; uniform float aoMapIntensity; -#endif`,$q=`#ifdef USE_BATCHING +#endif`,TZ=`#ifdef USE_BATCHING #if ! defined( GL_ANGLE_multi_draw ) #define gl_DrawID _gl_DrawID uniform int _gl_DrawID; @@ -455,15 +455,15 @@ Program Info Log: `+w+` int y = j / size; return texelFetch( batchingColorTexture, ivec2( x, y ), 0 ); } -#endif`,eZ=`#ifdef USE_BATCHING +#endif`,AZ=`#ifdef USE_BATCHING mat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) ); -#endif`,tZ=`vec3 transformed = vec3( position ); +#endif`,xZ=`vec3 transformed = vec3( position ); #ifdef USE_ALPHAHASH vPosition = vec3( position ); -#endif`,iZ=`vec3 objectNormal = vec3( normal ); +#endif`,RZ=`vec3 objectNormal = vec3( normal ); #ifdef USE_TANGENT vec3 objectTangent = vec3( tangent.xyz ); -#endif`,rZ=`float G_BlinnPhong_Implicit( ) { +#endif`,bZ=`float G_BlinnPhong_Implicit( ) { return 0.25; } float D_BlinnPhong( const in float shininess, const in float dotNH ) { @@ -477,7 +477,7 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve float G = G_BlinnPhong_Implicit( ); float D = D_BlinnPhong( shininess, dotNH ); return F * ( G * D ); -} // validated`,nZ=`#ifdef USE_IRIDESCENCE +} // validated`,IZ=`#ifdef USE_IRIDESCENCE const mat3 XYZ_TO_REC709 = mat3( 3.2404542, -0.9692660, 0.0556434, -1.5371385, 1.8760108, -0.2040259, @@ -540,7 +540,7 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve } return max( I, vec3( 0.0 ) ); } -#endif`,sZ=`#ifdef USE_BUMPMAP +#endif`,MZ=`#ifdef USE_BUMPMAP uniform sampler2D bumpMap; uniform float bumpScale; vec2 dHdxy_fwd() { @@ -561,7 +561,7 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 ); return normalize( abs( fDet ) * surf_norm - vGrad ); } -#endif`,aZ=`#if NUM_CLIPPING_PLANES > 0 +#endif`,CZ=`#if NUM_CLIPPING_PLANES > 0 vec4 plane; #ifdef ALPHA_TO_COVERAGE float distanceToPlane, distanceGradient; @@ -607,20 +607,20 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve if ( clipped ) discard; #endif #endif -#endif`,oZ=`#if NUM_CLIPPING_PLANES > 0 +#endif`,yZ=`#if NUM_CLIPPING_PLANES > 0 varying vec3 vClipPosition; uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ]; -#endif`,lZ=`#if NUM_CLIPPING_PLANES > 0 +#endif`,PZ=`#if NUM_CLIPPING_PLANES > 0 varying vec3 vClipPosition; -#endif`,cZ=`#if NUM_CLIPPING_PLANES > 0 +#endif`,DZ=`#if NUM_CLIPPING_PLANES > 0 vClipPosition = - mvPosition.xyz; -#endif`,fZ=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) +#endif`,LZ=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) diffuseColor *= vColor; -#endif`,hZ=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) +#endif`,OZ=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) varying vec4 vColor; -#endif`,dZ=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) +#endif`,NZ=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) varying vec4 vColor; -#endif`,uZ=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) +#endif`,wZ=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) vColor = vec4( 1.0 ); #endif #ifdef USE_COLOR_ALPHA @@ -633,7 +633,7 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve #endif #ifdef USE_BATCHING_COLOR vColor *= getBatchingColor( getIndirectIndex( gl_DrawID ) ); -#endif`,mZ=`#define PI 3.141592653589793 +#endif`,FZ=`#define PI 3.141592653589793 #define PI2 6.283185307179586 #define PI_HALF 1.5707963267948966 #define RECIPROCAL_PI 0.3183098861837907 @@ -700,7 +700,7 @@ vec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) { float F_Schlick( const in float f0, const in float f90, const in float dotVH ) { float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel ); -} // validated`,pZ=`#ifdef ENVMAP_TYPE_CUBE_UV +} // validated`,BZ=`#ifdef ENVMAP_TYPE_CUBE_UV #define cubeUV_minMipLevel 4.0 #define cubeUV_minTileSize 16.0 float getFace( vec3 direction ) { @@ -793,7 +793,7 @@ float F_Schlick( const in float f0, const in float f90, const in float dotVH ) { return vec4( mix( color0, color1, mipF ), 1.0 ); } } -#endif`,_Z=`vec3 transformedNormal = objectNormal; +#endif`,UZ=`vec3 transformedNormal = objectNormal; #ifdef USE_TANGENT vec3 transformedTangent = objectTangent; #endif @@ -822,21 +822,21 @@ transformedNormal = normalMatrix * transformedNormal; #ifdef FLIP_SIDED transformedTangent = - transformedTangent; #endif -#endif`,gZ=`#ifdef USE_DISPLACEMENTMAP +#endif`,VZ=`#ifdef USE_DISPLACEMENTMAP uniform sampler2D displacementMap; uniform float displacementScale; uniform float displacementBias; -#endif`,vZ=`#ifdef USE_DISPLACEMENTMAP +#endif`,GZ=`#ifdef USE_DISPLACEMENTMAP transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias ); -#endif`,EZ=`#ifdef USE_EMISSIVEMAP +#endif`,kZ=`#ifdef USE_EMISSIVEMAP vec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv ); #ifdef DECODE_VIDEO_TEXTURE_EMISSIVE emissiveColor = sRGBTransferEOTF( emissiveColor ); #endif totalEmissiveRadiance *= emissiveColor.rgb; -#endif`,SZ=`#ifdef USE_EMISSIVEMAP +#endif`,WZ=`#ifdef USE_EMISSIVEMAP uniform sampler2D emissiveMap; -#endif`,TZ="gl_FragColor = linearToOutputTexel( gl_FragColor );",AZ=`vec4 LinearTransferOETF( in vec4 value ) { +#endif`,HZ="gl_FragColor = linearToOutputTexel( gl_FragColor );",zZ=`vec4 LinearTransferOETF( in vec4 value ) { return value; } vec4 sRGBTransferEOTF( in vec4 value ) { @@ -844,7 +844,7 @@ vec4 sRGBTransferEOTF( in vec4 value ) { } vec4 sRGBTransferOETF( in vec4 value ) { return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a ); -}`,xZ=`#ifdef USE_ENVMAP +}`,XZ=`#ifdef USE_ENVMAP #ifdef ENV_WORLDPOS vec3 cameraToFrag; if ( isOrthographic ) { @@ -871,7 +871,7 @@ vec4 sRGBTransferOETF( in vec4 value ) { outgoingLight += envColor.xyz * specularStrength * reflectivity; #endif #endif -#endif`,RZ=`#ifdef USE_ENVMAP +#endif`,YZ=`#ifdef USE_ENVMAP uniform float envMapIntensity; uniform mat3 envMapRotation; #ifdef ENVMAP_TYPE_CUBE @@ -879,7 +879,7 @@ vec4 sRGBTransferOETF( in vec4 value ) { #else uniform sampler2D envMap; #endif -#endif`,bZ=`#ifdef USE_ENVMAP +#endif`,KZ=`#ifdef USE_ENVMAP uniform float reflectivity; #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) #define ENV_WORLDPOS @@ -890,7 +890,7 @@ vec4 sRGBTransferOETF( in vec4 value ) { #else varying vec3 vReflect; #endif -#endif`,IZ=`#ifdef USE_ENVMAP +#endif`,jZ=`#ifdef USE_ENVMAP #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) #define ENV_WORLDPOS #endif @@ -901,7 +901,7 @@ vec4 sRGBTransferOETF( in vec4 value ) { varying vec3 vReflect; uniform float refractionRatio; #endif -#endif`,MZ=`#ifdef USE_ENVMAP +#endif`,qZ=`#ifdef USE_ENVMAP #ifdef ENV_WORLDPOS vWorldPosition = worldPosition.xyz; #else @@ -918,18 +918,18 @@ vec4 sRGBTransferOETF( in vec4 value ) { vReflect = refract( cameraToVertex, worldNormal, refractionRatio ); #endif #endif -#endif`,CZ=`#ifdef USE_FOG +#endif`,ZZ=`#ifdef USE_FOG vFogDepth = - mvPosition.z; -#endif`,yZ=`#ifdef USE_FOG +#endif`,QZ=`#ifdef USE_FOG varying float vFogDepth; -#endif`,PZ=`#ifdef USE_FOG +#endif`,$Z=`#ifdef USE_FOG #ifdef FOG_EXP2 float fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth ); #else float fogFactor = smoothstep( fogNear, fogFar, vFogDepth ); #endif gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor ); -#endif`,DZ=`#ifdef USE_FOG +#endif`,JZ=`#ifdef USE_FOG uniform vec3 fogColor; varying float vFogDepth; #ifdef FOG_EXP2 @@ -938,7 +938,7 @@ vec4 sRGBTransferOETF( in vec4 value ) { uniform float fogNear; uniform float fogFar; #endif -#endif`,LZ=`#ifdef USE_GRADIENTMAP +#endif`,eQ=`#ifdef USE_GRADIENTMAP uniform sampler2D gradientMap; #endif vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) { @@ -950,12 +950,12 @@ vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) { vec2 fw = fwidth( coord ) * 0.5; return mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) ); #endif -}`,OZ=`#ifdef USE_LIGHTMAP +}`,tQ=`#ifdef USE_LIGHTMAP uniform sampler2D lightMap; uniform float lightMapIntensity; -#endif`,NZ=`LambertMaterial material; +#endif`,iQ=`LambertMaterial material; material.diffuseColor = diffuseColor.rgb; -material.specularStrength = specularStrength;`,FZ=`varying vec3 vViewPosition; +material.specularStrength = specularStrength;`,rQ=`varying vec3 vViewPosition; struct LambertMaterial { vec3 diffuseColor; float specularStrength; @@ -969,7 +969,7 @@ void RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometr reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); } #define RE_Direct RE_Direct_Lambert -#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,wZ=`uniform bool receiveShadow; +#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,nQ=`uniform bool receiveShadow; uniform vec3 ambientLightColor; #if defined( USE_LIGHT_PROBES ) uniform vec3 lightProbe[ 9 ]; @@ -1086,7 +1086,7 @@ float getSpotAttenuation( const in float coneCosine, const in float penumbraCosi return irradiance; } #endif -#include `,BZ=`#ifdef USE_ENVMAP +#include `,sQ=`#ifdef USE_ENVMAP vec3 getIBLIrradiance( const in vec3 normal ) { #ifdef ENVMAP_TYPE_CUBE_UV vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); @@ -1119,8 +1119,8 @@ float getSpotAttenuation( const in float coneCosine, const in float penumbraCosi #endif } #endif -#endif`,UZ=`ToonMaterial material; -material.diffuseColor = diffuseColor.rgb;`,VZ=`varying vec3 vViewPosition; +#endif`,aQ=`ToonMaterial material; +material.diffuseColor = diffuseColor.rgb;`,oQ=`varying vec3 vViewPosition; struct ToonMaterial { vec3 diffuseColor; }; @@ -1132,11 +1132,11 @@ void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPo reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); } #define RE_Direct RE_Direct_Toon -#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,GZ=`BlinnPhongMaterial material; +#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,lQ=`BlinnPhongMaterial material; material.diffuseColor = diffuseColor.rgb; material.specularColor = specular; material.specularShininess = shininess; -material.specularStrength = specularStrength;`,kZ=`varying vec3 vViewPosition; +material.specularStrength = specularStrength;`,cQ=`varying vec3 vViewPosition; struct BlinnPhongMaterial { vec3 diffuseColor; vec3 specularColor; @@ -1153,7 +1153,7 @@ void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geom reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); } #define RE_Direct RE_Direct_BlinnPhong -#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,WZ=`PhysicalMaterial material; +#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,fQ=`PhysicalMaterial material; material.diffuseColor = diffuseColor.rgb; material.diffuseContribution = diffuseColor.rgb * ( 1.0 - metalnessFactor ); material.metalness = metalnessFactor; @@ -1243,7 +1243,7 @@ material.roughness = min( material.roughness, 1.0 ); material.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) ); material.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y; material.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y; -#endif`,HZ=`uniform sampler2D dfgLUT; +#endif`,hQ=`uniform sampler2D dfgLUT; struct PhysicalMaterial { vec3 diffuseColor; vec3 diffuseContribution; @@ -1603,7 +1603,7 @@ void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradia #define RE_IndirectSpecular RE_IndirectSpecular_Physical float computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) { return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion ); -}`,zZ=` +}`,dQ=` vec3 geometryPosition = - vViewPosition; vec3 geometryNormal = normal; vec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition ); @@ -1725,7 +1725,7 @@ IncidentLight directLight; #if defined( RE_IndirectSpecular ) vec3 radiance = vec3( 0.0 ); vec3 clearcoatRadiance = vec3( 0.0 ); -#endif`,XZ=`#if defined( RE_IndirectDiffuse ) +#endif`,uQ=`#if defined( RE_IndirectDiffuse ) #ifdef USE_LIGHTMAP vec4 lightMapTexel = texture2D( lightMap, vLightMapUv ); vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity; @@ -1746,7 +1746,7 @@ IncidentLight directLight; #ifdef USE_CLEARCOAT clearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness ); #endif -#endif`,YZ=`#if defined( RE_IndirectDiffuse ) +#endif`,mQ=`#if defined( RE_IndirectDiffuse ) #if defined( LAMBERT ) || defined( PHONG ) irradiance += iblIrradiance; #endif @@ -1754,7 +1754,7 @@ IncidentLight directLight; #endif #if defined( RE_IndirectSpecular ) RE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); -#endif`,KZ=`#ifdef USE_LIGHT_PROBES_GRID +#endif`,pQ=`#ifdef USE_LIGHT_PROBES_GRID uniform highp sampler3D probesSH; uniform vec3 probesMin; uniform vec3 probesMax; @@ -1799,27 +1799,27 @@ vec3 getLightProbeGridIrradiance( vec3 worldPos, vec3 worldNormal ) { result += c8 * 0.429043 * ( x * x - y * y ); return max( result, vec3( 0.0 ) ); } -#endif`,jZ=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) +#endif`,_Q=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) gl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5; -#endif`,qZ=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) +#endif`,gQ=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) uniform float logDepthBufFC; varying float vFragDepth; varying float vIsPerspective; -#endif`,ZZ=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER +#endif`,vQ=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER varying float vFragDepth; varying float vIsPerspective; -#endif`,QZ=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER +#endif`,EQ=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER vFragDepth = 1.0 + gl_Position.w; vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) ); -#endif`,JZ=`#ifdef USE_MAP +#endif`,SQ=`#ifdef USE_MAP vec4 sampledDiffuseColor = texture2D( map, vMapUv ); #ifdef DECODE_VIDEO_TEXTURE sampledDiffuseColor = sRGBTransferEOTF( sampledDiffuseColor ); #endif diffuseColor *= sampledDiffuseColor; -#endif`,$Z=`#ifdef USE_MAP +#endif`,TQ=`#ifdef USE_MAP uniform sampler2D map; -#endif`,eQ=`#if defined( USE_MAP ) || defined( USE_ALPHAMAP ) +#endif`,AQ=`#if defined( USE_MAP ) || defined( USE_ALPHAMAP ) #if defined( USE_POINTS_UV ) vec2 uv = vUv; #else @@ -1831,7 +1831,7 @@ vec3 getLightProbeGridIrradiance( vec3 worldPos, vec3 worldNormal ) { #endif #ifdef USE_ALPHAMAP diffuseColor.a *= texture2D( alphaMap, uv ).g; -#endif`,tQ=`#if defined( USE_POINTS_UV ) +#endif`,xQ=`#if defined( USE_POINTS_UV ) varying vec2 vUv; #else #if defined( USE_MAP ) || defined( USE_ALPHAMAP ) @@ -1843,19 +1843,19 @@ vec3 getLightProbeGridIrradiance( vec3 worldPos, vec3 worldNormal ) { #endif #ifdef USE_ALPHAMAP uniform sampler2D alphaMap; -#endif`,iQ=`float metalnessFactor = metalness; +#endif`,RQ=`float metalnessFactor = metalness; #ifdef USE_METALNESSMAP vec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv ); metalnessFactor *= texelMetalness.b; -#endif`,rQ=`#ifdef USE_METALNESSMAP +#endif`,bQ=`#ifdef USE_METALNESSMAP uniform sampler2D metalnessMap; -#endif`,nQ=`#ifdef USE_INSTANCING_MORPH +#endif`,IQ=`#ifdef USE_INSTANCING_MORPH float morphTargetInfluences[ MORPHTARGETS_COUNT ]; float morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r; for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { morphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r; } -#endif`,sQ=`#if defined( USE_MORPHCOLORS ) +#endif`,MQ=`#if defined( USE_MORPHCOLORS ) vColor *= morphTargetBaseInfluence; for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { #if defined( USE_COLOR_ALPHA ) @@ -1864,12 +1864,12 @@ vec3 getLightProbeGridIrradiance( vec3 worldPos, vec3 worldNormal ) { if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ]; #endif } -#endif`,aQ=`#ifdef USE_MORPHNORMALS +#endif`,CQ=`#ifdef USE_MORPHNORMALS objectNormal *= morphTargetBaseInfluence; for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ]; } -#endif`,oQ=`#ifdef USE_MORPHTARGETS +#endif`,yQ=`#ifdef USE_MORPHTARGETS #ifndef USE_INSTANCING_MORPH uniform float morphTargetBaseInfluence; uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ]; @@ -1883,12 +1883,12 @@ vec3 getLightProbeGridIrradiance( vec3 worldPos, vec3 worldNormal ) { ivec3 morphUV = ivec3( x, y, morphTargetIndex ); return texelFetch( morphTargetsTexture, morphUV, 0 ); } -#endif`,lQ=`#ifdef USE_MORPHTARGETS +#endif`,PQ=`#ifdef USE_MORPHTARGETS transformed *= morphTargetBaseInfluence; for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ]; } -#endif`,cQ=`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0; +#endif`,DQ=`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0; #ifdef FLAT_SHADED vec3 fdx = dFdx( vViewPosition ); vec3 fdy = dFdy( vViewPosition ); @@ -1929,7 +1929,7 @@ vec3 getLightProbeGridIrradiance( vec3 worldPos, vec3 worldNormal ) { tbn2[1] *= faceDirection; #endif #endif -vec3 nonPerturbedNormal = normal;`,fQ=`#ifdef USE_NORMALMAP_OBJECTSPACE +vec3 nonPerturbedNormal = normal;`,LQ=`#ifdef USE_NORMALMAP_OBJECTSPACE normal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0; #ifdef FLIP_SIDED normal = - normal; @@ -1947,25 +1947,25 @@ vec3 nonPerturbedNormal = normal;`,fQ=`#ifdef USE_NORMALMAP_OBJECTSPACE normal = normalize( tbn * mapN ); #elif defined( USE_BUMPMAP ) normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection ); -#endif`,hQ=`#ifndef FLAT_SHADED +#endif`,OQ=`#ifndef FLAT_SHADED varying vec3 vNormal; #ifdef USE_TANGENT varying vec3 vTangent; varying vec3 vBitangent; #endif -#endif`,dQ=`#ifndef FLAT_SHADED +#endif`,NQ=`#ifndef FLAT_SHADED varying vec3 vNormal; #ifdef USE_TANGENT varying vec3 vTangent; varying vec3 vBitangent; #endif -#endif`,uQ=`#ifndef FLAT_SHADED +#endif`,wQ=`#ifndef FLAT_SHADED vNormal = normalize( transformedNormal ); #ifdef USE_TANGENT vTangent = normalize( transformedTangent ); vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w ); #endif -#endif`,mQ=`#ifdef USE_NORMALMAP +#endif`,FQ=`#ifdef USE_NORMALMAP uniform sampler2D normalMap; uniform vec2 normalScale; #endif @@ -1987,13 +1987,13 @@ vec3 nonPerturbedNormal = normal;`,fQ=`#ifdef USE_NORMALMAP_OBJECTSPACE float scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det ); return mat3( T * scale, B * scale, N ); } -#endif`,pQ=`#ifdef USE_CLEARCOAT +#endif`,BQ=`#ifdef USE_CLEARCOAT vec3 clearcoatNormal = nonPerturbedNormal; -#endif`,_Q=`#ifdef USE_CLEARCOAT_NORMALMAP +#endif`,UQ=`#ifdef USE_CLEARCOAT_NORMALMAP vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0; clearcoatMapN.xy *= clearcoatNormalScale; clearcoatNormal = normalize( tbn2 * clearcoatMapN ); -#endif`,gQ=`#ifdef USE_CLEARCOATMAP +#endif`,VQ=`#ifdef USE_CLEARCOATMAP uniform sampler2D clearcoatMap; #endif #ifdef USE_CLEARCOAT_NORMALMAP @@ -2002,18 +2002,18 @@ vec3 nonPerturbedNormal = normal;`,fQ=`#ifdef USE_NORMALMAP_OBJECTSPACE #endif #ifdef USE_CLEARCOAT_ROUGHNESSMAP uniform sampler2D clearcoatRoughnessMap; -#endif`,vQ=`#ifdef USE_IRIDESCENCEMAP +#endif`,GQ=`#ifdef USE_IRIDESCENCEMAP uniform sampler2D iridescenceMap; #endif #ifdef USE_IRIDESCENCE_THICKNESSMAP uniform sampler2D iridescenceThicknessMap; -#endif`,EQ=`#ifdef OPAQUE +#endif`,kQ=`#ifdef OPAQUE diffuseColor.a = 1.0; #endif #ifdef USE_TRANSMISSION diffuseColor.a *= material.transmissionAlpha; #endif -gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,SQ=`vec3 packNormalToRGB( const in vec3 normal ) { +gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,WQ=`vec3 packNormalToRGB( const in vec3 normal ) { return normalize( normal ) * 0.5 + 0.5; } vec3 unpackRGBToNormal( const in vec3 rgb ) { @@ -2092,9 +2092,9 @@ float perspectiveDepthToViewZ( const in float depth, const in float near, const #else return ( near * far ) / ( ( far - near ) * depth - far ); #endif -}`,TQ=`#ifdef PREMULTIPLIED_ALPHA +}`,HQ=`#ifdef PREMULTIPLIED_ALPHA gl_FragColor.rgb *= gl_FragColor.a; -#endif`,AQ=`vec4 mvPosition = vec4( transformed, 1.0 ); +#endif`,zQ=`vec4 mvPosition = vec4( transformed, 1.0 ); #ifdef USE_BATCHING mvPosition = batchingMatrix * mvPosition; #endif @@ -2102,22 +2102,22 @@ float perspectiveDepthToViewZ( const in float depth, const in float near, const mvPosition = instanceMatrix * mvPosition; #endif mvPosition = modelViewMatrix * mvPosition; -gl_Position = projectionMatrix * mvPosition;`,xQ=`#ifdef DITHERING +gl_Position = projectionMatrix * mvPosition;`,XQ=`#ifdef DITHERING gl_FragColor.rgb = dithering( gl_FragColor.rgb ); -#endif`,RQ=`#ifdef DITHERING +#endif`,YQ=`#ifdef DITHERING vec3 dithering( vec3 color ) { float grid_position = rand( gl_FragCoord.xy ); vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 ); dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position ); return color + dither_shift_RGB; } -#endif`,bQ=`float roughnessFactor = roughness; +#endif`,KQ=`float roughnessFactor = roughness; #ifdef USE_ROUGHNESSMAP vec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv ); roughnessFactor *= texelRoughness.g; -#endif`,IQ=`#ifdef USE_ROUGHNESSMAP +#endif`,jQ=`#ifdef USE_ROUGHNESSMAP uniform sampler2D roughnessMap; -#endif`,MQ=`#if NUM_SPOT_LIGHT_COORDS > 0 +#endif`,qQ=`#if NUM_SPOT_LIGHT_COORDS > 0 varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; #endif #if NUM_SPOT_LIGHT_MAPS > 0 @@ -2317,7 +2317,7 @@ gl_Position = projectionMatrix * mvPosition;`,xQ=`#ifdef DITHERING } #endif #endif -#endif`,CQ=`#if NUM_SPOT_LIGHT_COORDS > 0 +#endif`,ZQ=`#if NUM_SPOT_LIGHT_COORDS > 0 uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ]; varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; #endif @@ -2358,7 +2358,7 @@ gl_Position = projectionMatrix * mvPosition;`,xQ=`#ifdef DITHERING }; uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; #endif -#endif`,yQ=`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 ) +#endif`,QQ=`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 ) #ifdef HAS_NORMAL vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix ); #else @@ -2394,7 +2394,7 @@ gl_Position = projectionMatrix * mvPosition;`,xQ=`#ifdef DITHERING vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition; } #pragma unroll_loop_end -#endif`,PQ=`float getShadowMask() { +#endif`,$Q=`float getShadowMask() { float shadow = 1.0; #ifdef USE_SHADOWMAP #if NUM_DIR_LIGHT_SHADOWS > 0 @@ -2426,12 +2426,12 @@ gl_Position = projectionMatrix * mvPosition;`,xQ=`#ifdef DITHERING #endif #endif return shadow; -}`,DQ=`#ifdef USE_SKINNING +}`,JQ=`#ifdef USE_SKINNING mat4 boneMatX = getBoneMatrix( skinIndex.x ); mat4 boneMatY = getBoneMatrix( skinIndex.y ); mat4 boneMatZ = getBoneMatrix( skinIndex.z ); mat4 boneMatW = getBoneMatrix( skinIndex.w ); -#endif`,LQ=`#ifdef USE_SKINNING +#endif`,e$=`#ifdef USE_SKINNING uniform mat4 bindMatrix; uniform mat4 bindMatrixInverse; uniform highp sampler2D boneTexture; @@ -2446,7 +2446,7 @@ gl_Position = projectionMatrix * mvPosition;`,xQ=`#ifdef DITHERING vec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 ); return mat4( v1, v2, v3, v4 ); } -#endif`,OQ=`#ifdef USE_SKINNING +#endif`,t$=`#ifdef USE_SKINNING vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 ); vec4 skinned = vec4( 0.0 ); skinned += boneMatX * skinVertex * skinWeight.x; @@ -2454,7 +2454,7 @@ gl_Position = projectionMatrix * mvPosition;`,xQ=`#ifdef DITHERING skinned += boneMatZ * skinVertex * skinWeight.z; skinned += boneMatW * skinVertex * skinWeight.w; transformed = ( bindMatrixInverse * skinned ).xyz; -#endif`,NQ=`#ifdef USE_SKINNING +#endif`,i$=`#ifdef USE_SKINNING mat4 skinMatrix = mat4( 0.0 ); skinMatrix += skinWeight.x * boneMatX; skinMatrix += skinWeight.y * boneMatY; @@ -2465,17 +2465,17 @@ gl_Position = projectionMatrix * mvPosition;`,xQ=`#ifdef DITHERING #ifdef USE_TANGENT objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz; #endif -#endif`,FQ=`float specularStrength; +#endif`,r$=`float specularStrength; #ifdef USE_SPECULARMAP vec4 texelSpecular = texture2D( specularMap, vSpecularMapUv ); specularStrength = texelSpecular.r; #else specularStrength = 1.0; -#endif`,wQ=`#ifdef USE_SPECULARMAP +#endif`,n$=`#ifdef USE_SPECULARMAP uniform sampler2D specularMap; -#endif`,BQ=`#if defined( TONE_MAPPING ) +#endif`,s$=`#if defined( TONE_MAPPING ) gl_FragColor.rgb = toneMapping( gl_FragColor.rgb ); -#endif`,UQ=`#ifndef saturate +#endif`,a$=`#ifndef saturate #define saturate( a ) clamp( a, 0.0, 1.0 ) #endif uniform float toneMappingExposure; @@ -2572,7 +2572,7 @@ vec3 NeutralToneMapping( vec3 color ) { float g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. ); return mix( color, vec3( newPeak ), g ); } -vec3 CustomToneMapping( vec3 color ) { return color; }`,VQ=`#ifdef USE_TRANSMISSION +vec3 CustomToneMapping( vec3 color ) { return color; }`,o$=`#ifdef USE_TRANSMISSION material.transmission = transmission; material.transmissionAlpha = 1.0; material.thickness = thickness; @@ -2593,7 +2593,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,VQ=`#ifdef USE_TRANSMISS material.attenuationColor, material.attenuationDistance ); material.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission ); totalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission ); -#endif`,GQ=`#ifdef USE_TRANSMISSION +#endif`,l$=`#ifdef USE_TRANSMISSION uniform float transmission; uniform float thickness; uniform float attenuationDistance; @@ -2719,7 +2719,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,VQ=`#ifdef USE_TRANSMISS float transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0; return vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor ); } -#endif`,kQ=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) +#endif`,c$=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) varying vec2 vUv; #endif #ifdef USE_MAP @@ -2789,7 +2789,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,VQ=`#ifdef USE_TRANSMISS #ifdef USE_THICKNESSMAP uniform mat3 thicknessMapTransform; varying vec2 vThicknessMapUv; -#endif`,WQ=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) +#endif`,f$=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) varying vec2 vUv; #endif #ifdef USE_MAP @@ -2883,7 +2883,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,VQ=`#ifdef USE_TRANSMISS #ifdef USE_THICKNESSMAP uniform mat3 thicknessMapTransform; varying vec2 vThicknessMapUv; -#endif`,HQ=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) +#endif`,h$=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) vUv = vec3( uv, 1 ).xy; #endif #ifdef USE_MAP @@ -2954,7 +2954,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,VQ=`#ifdef USE_TRANSMISS #endif #ifdef USE_THICKNESSMAP vThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy; -#endif`,zQ=`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0 +#endif`,d$=`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0 vec4 worldPosition = vec4( transformed, 1.0 ); #ifdef USE_BATCHING worldPosition = batchingMatrix * worldPosition; @@ -2963,12 +2963,12 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,VQ=`#ifdef USE_TRANSMISS worldPosition = instanceMatrix * worldPosition; #endif worldPosition = modelMatrix * worldPosition; -#endif`,XQ=`varying vec2 vUv; +#endif`,u$=`varying vec2 vUv; uniform mat3 uvTransform; void main() { vUv = ( uvTransform * vec3( uv, 1 ) ).xy; gl_Position = vec4( position.xy, 1.0, 1.0 ); -}`,YQ=`uniform sampler2D t2D; +}`,m$=`uniform sampler2D t2D; uniform float backgroundIntensity; varying vec2 vUv; void main() { @@ -2980,14 +2980,14 @@ void main() { gl_FragColor = texColor; #include #include -}`,KQ=`varying vec3 vWorldDirection; +}`,p$=`varying vec3 vWorldDirection; #include void main() { vWorldDirection = transformDirection( position, modelMatrix ); #include #include gl_Position.z = gl_Position.w; -}`,jQ=`#ifdef ENVMAP_TYPE_CUBE +}`,_$=`#ifdef ENVMAP_TYPE_CUBE uniform samplerCube envMap; #elif defined( ENVMAP_TYPE_CUBE_UV ) uniform sampler2D envMap; @@ -3009,14 +3009,14 @@ void main() { gl_FragColor = texColor; #include #include -}`,qQ=`varying vec3 vWorldDirection; +}`,g$=`varying vec3 vWorldDirection; #include void main() { vWorldDirection = transformDirection( position, modelMatrix ); #include #include gl_Position.z = gl_Position.w; -}`,ZQ=`uniform samplerCube tCube; +}`,v$=`uniform samplerCube tCube; uniform float tFlip; uniform float opacity; varying vec3 vWorldDirection; @@ -3026,7 +3026,7 @@ void main() { gl_FragColor.a *= opacity; #include #include -}`,QQ=`#include +}`,E$=`#include #include #include #include @@ -3053,7 +3053,7 @@ void main() { #include #include vHighPrecisionZW = gl_Position.zw; -}`,JQ=`#if DEPTH_PACKING == 3200 +}`,S$=`#if DEPTH_PACKING == 3200 uniform float opacity; #endif #include @@ -3091,7 +3091,7 @@ void main() { #elif DEPTH_PACKING == 3203 gl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 ); #endif -}`,$Q=`#define DISTANCE +}`,T$=`#define DISTANCE varying vec3 vWorldPosition; #include #include @@ -3118,7 +3118,7 @@ void main() { #include #include vWorldPosition = worldPosition.xyz; -}`,eJ=`#define DISTANCE +}`,A$=`#define DISTANCE uniform vec3 referencePosition; uniform float nearDistance; uniform float farDistance; @@ -3141,13 +3141,13 @@ void main () { dist = ( dist - nearDistance ) / ( farDistance - nearDistance ); dist = saturate( dist ); gl_FragColor = vec4( dist, 0.0, 0.0, 1.0 ); -}`,tJ=`varying vec3 vWorldDirection; +}`,x$=`varying vec3 vWorldDirection; #include void main() { vWorldDirection = transformDirection( position, modelMatrix ); #include #include -}`,iJ=`uniform sampler2D tEquirect; +}`,R$=`uniform sampler2D tEquirect; varying vec3 vWorldDirection; #include void main() { @@ -3156,7 +3156,7 @@ void main() { gl_FragColor = texture2D( tEquirect, sampleUV ); #include #include -}`,rJ=`uniform float scale; +}`,b$=`uniform float scale; attribute float lineDistance; varying float vLineDistance; #include @@ -3178,7 +3178,7 @@ void main() { #include #include #include -}`,nJ=`uniform vec3 diffuse; +}`,I$=`uniform vec3 diffuse; uniform float opacity; uniform float dashSize; uniform float totalSize; @@ -3206,7 +3206,7 @@ void main() { #include #include #include -}`,sJ=`#include +}`,M$=`#include #include #include #include @@ -3238,7 +3238,7 @@ void main() { #include #include #include -}`,aJ=`uniform vec3 diffuse; +}`,C$=`uniform vec3 diffuse; uniform float opacity; #ifndef FLAT_SHADED varying vec3 vNormal; @@ -3286,7 +3286,7 @@ void main() { #include #include #include -}`,oJ=`#define LAMBERT +}`,y$=`#define LAMBERT varying vec3 vViewPosition; #include #include @@ -3325,7 +3325,7 @@ void main() { #include #include #include -}`,lJ=`#define LAMBERT +}`,P$=`#define LAMBERT uniform vec3 diffuse; uniform vec3 emissive; uniform float opacity; @@ -3383,7 +3383,7 @@ void main() { #include #include #include -}`,cJ=`#define MATCAP +}`,D$=`#define MATCAP varying vec3 vViewPosition; #include #include @@ -3417,7 +3417,7 @@ void main() { #include #include vViewPosition = - mvPosition.xyz; -}`,fJ=`#define MATCAP +}`,L$=`#define MATCAP uniform vec3 diffuse; uniform float opacity; uniform sampler2D matcap; @@ -3463,7 +3463,7 @@ void main() { #include #include #include -}`,hJ=`#define NORMAL +}`,O$=`#define NORMAL #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) varying vec3 vViewPosition; #endif @@ -3496,7 +3496,7 @@ void main() { #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) vViewPosition = - mvPosition.xyz; #endif -}`,dJ=`#define NORMAL +}`,N$=`#define NORMAL uniform float opacity; #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) varying vec3 vViewPosition; @@ -3517,7 +3517,7 @@ void main() { #ifdef OPAQUE gl_FragColor.a = 1.0; #endif -}`,uJ=`#define PHONG +}`,w$=`#define PHONG varying vec3 vViewPosition; #include #include @@ -3556,7 +3556,7 @@ void main() { #include #include #include -}`,mJ=`#define PHONG +}`,F$=`#define PHONG uniform vec3 diffuse; uniform vec3 emissive; uniform vec3 specular; @@ -3616,7 +3616,7 @@ void main() { #include #include #include -}`,pJ=`#define STANDARD +}`,B$=`#define STANDARD varying vec3 vViewPosition; #ifdef USE_TRANSMISSION varying vec3 vWorldPosition; @@ -3659,7 +3659,7 @@ void main() { #ifdef USE_TRANSMISSION vWorldPosition = worldPosition.xyz; #endif -}`,_J=`#define STANDARD +}`,U$=`#define STANDARD #ifdef PHYSICAL #define IOR #define USE_SPECULAR @@ -3784,7 +3784,7 @@ void main() { #include #include #include -}`,gJ=`#define TOON +}`,V$=`#define TOON varying vec3 vViewPosition; #include #include @@ -3821,7 +3821,7 @@ void main() { #include #include #include -}`,vJ=`#define TOON +}`,G$=`#define TOON uniform vec3 diffuse; uniform vec3 emissive; uniform float opacity; @@ -3873,7 +3873,7 @@ void main() { #include #include #include -}`,EJ=`uniform float size; +}`,k$=`uniform float size; uniform float scale; #include #include @@ -3904,7 +3904,7 @@ void main() { #include #include #include -}`,SJ=`uniform vec3 diffuse; +}`,W$=`uniform vec3 diffuse; uniform float opacity; #include #include @@ -3929,7 +3929,7 @@ void main() { #include #include #include -}`,TJ=`#include +}`,H$=`#include #include #include #include @@ -3952,7 +3952,7 @@ void main() { #include #include #include -}`,AJ=`uniform vec3 color; +}`,z$=`uniform vec3 color; uniform float opacity; #include #include @@ -3968,7 +3968,7 @@ void main() { #include #include #include -}`,xJ=`uniform float rotation; +}`,X$=`uniform float rotation; uniform vec2 center; #include #include @@ -3992,7 +3992,7 @@ void main() { #include #include #include -}`,RJ=`uniform vec3 diffuse; +}`,Y$=`uniform vec3 diffuse; uniform float opacity; #include #include @@ -4017,7 +4017,7 @@ void main() { #include #include #include -}`,fi={alphahash_fragment:Xq,alphahash_pars_fragment:Yq,alphamap_fragment:Kq,alphamap_pars_fragment:jq,alphatest_fragment:qq,alphatest_pars_fragment:Zq,aomap_fragment:Qq,aomap_pars_fragment:Jq,batching_pars_vertex:$q,batching_vertex:eZ,begin_vertex:tZ,beginnormal_vertex:iZ,bsdfs:rZ,iridescence_fragment:nZ,bumpmap_pars_fragment:sZ,clipping_planes_fragment:aZ,clipping_planes_pars_fragment:oZ,clipping_planes_pars_vertex:lZ,clipping_planes_vertex:cZ,color_fragment:fZ,color_pars_fragment:hZ,color_pars_vertex:dZ,color_vertex:uZ,common:mZ,cube_uv_reflection_fragment:pZ,defaultnormal_vertex:_Z,displacementmap_pars_vertex:gZ,displacementmap_vertex:vZ,emissivemap_fragment:EZ,emissivemap_pars_fragment:SZ,colorspace_fragment:TZ,colorspace_pars_fragment:AZ,envmap_fragment:xZ,envmap_common_pars_fragment:RZ,envmap_pars_fragment:bZ,envmap_pars_vertex:IZ,envmap_physical_pars_fragment:BZ,envmap_vertex:MZ,fog_vertex:CZ,fog_pars_vertex:yZ,fog_fragment:PZ,fog_pars_fragment:DZ,gradientmap_pars_fragment:LZ,lightmap_pars_fragment:OZ,lights_lambert_fragment:NZ,lights_lambert_pars_fragment:FZ,lights_pars_begin:wZ,lights_toon_fragment:UZ,lights_toon_pars_fragment:VZ,lights_phong_fragment:GZ,lights_phong_pars_fragment:kZ,lights_physical_fragment:WZ,lights_physical_pars_fragment:HZ,lights_fragment_begin:zZ,lights_fragment_maps:XZ,lights_fragment_end:YZ,lightprobes_pars_fragment:KZ,logdepthbuf_fragment:jZ,logdepthbuf_pars_fragment:qZ,logdepthbuf_pars_vertex:ZZ,logdepthbuf_vertex:QZ,map_fragment:JZ,map_pars_fragment:$Z,map_particle_fragment:eQ,map_particle_pars_fragment:tQ,metalnessmap_fragment:iQ,metalnessmap_pars_fragment:rQ,morphinstance_vertex:nQ,morphcolor_vertex:sQ,morphnormal_vertex:aQ,morphtarget_pars_vertex:oQ,morphtarget_vertex:lQ,normal_fragment_begin:cQ,normal_fragment_maps:fQ,normal_pars_fragment:hQ,normal_pars_vertex:dQ,normal_vertex:uQ,normalmap_pars_fragment:mQ,clearcoat_normal_fragment_begin:pQ,clearcoat_normal_fragment_maps:_Q,clearcoat_pars_fragment:gQ,iridescence_pars_fragment:vQ,opaque_fragment:EQ,packing:SQ,premultiplied_alpha_fragment:TQ,project_vertex:AQ,dithering_fragment:xQ,dithering_pars_fragment:RQ,roughnessmap_fragment:bQ,roughnessmap_pars_fragment:IQ,shadowmap_pars_fragment:MQ,shadowmap_pars_vertex:CQ,shadowmap_vertex:yQ,shadowmask_pars_fragment:PQ,skinbase_vertex:DQ,skinning_pars_vertex:LQ,skinning_vertex:OQ,skinnormal_vertex:NQ,specularmap_fragment:FQ,specularmap_pars_fragment:wQ,tonemapping_fragment:BQ,tonemapping_pars_fragment:UQ,transmission_fragment:VQ,transmission_pars_fragment:GQ,uv_pars_fragment:kQ,uv_pars_vertex:WQ,uv_vertex:HQ,worldpos_vertex:zQ,background_vert:XQ,background_frag:YQ,backgroundCube_vert:KQ,backgroundCube_frag:jQ,cube_vert:qQ,cube_frag:ZQ,depth_vert:QQ,depth_frag:JQ,distance_vert:$Q,distance_frag:eJ,equirect_vert:tJ,equirect_frag:iJ,linedashed_vert:rJ,linedashed_frag:nJ,meshbasic_vert:sJ,meshbasic_frag:aJ,meshlambert_vert:oJ,meshlambert_frag:lJ,meshmatcap_vert:cJ,meshmatcap_frag:fJ,meshnormal_vert:hJ,meshnormal_frag:dJ,meshphong_vert:uJ,meshphong_frag:mJ,meshphysical_vert:pJ,meshphysical_frag:_J,meshtoon_vert:gJ,meshtoon_frag:vJ,points_vert:EJ,points_frag:SJ,shadow_vert:TJ,shadow_frag:AJ,sprite_vert:xJ,sprite_frag:RJ},_t={common:{diffuse:{value:new ct(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new ii},alphaMap:{value:null},alphaMapTransform:{value:new ii},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new ii}},envmap:{envMap:{value:null},envMapRotation:{value:new ii},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98},dfgLUT:{value:null}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new ii}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new ii}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new ii},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new ii},normalScale:{value:new Lt(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new ii},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new ii}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new ii}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new ii}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new ct(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null},probesSH:{value:null},probesMin:{value:new ne},probesMax:{value:new ne},probesResolution:{value:new ne}},points:{diffuse:{value:new ct(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new ii},alphaTest:{value:0},uvTransform:{value:new ii}},sprite:{diffuse:{value:new ct(16777215)},opacity:{value:1},center:{value:new Lt(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new ii},alphaMap:{value:null},alphaMapTransform:{value:new ii},alphaTest:{value:0}}},wo={basic:{uniforms:vn([_t.common,_t.specularmap,_t.envmap,_t.aomap,_t.lightmap,_t.fog]),vertexShader:fi.meshbasic_vert,fragmentShader:fi.meshbasic_frag},lambert:{uniforms:vn([_t.common,_t.specularmap,_t.envmap,_t.aomap,_t.lightmap,_t.emissivemap,_t.bumpmap,_t.normalmap,_t.displacementmap,_t.fog,_t.lights,{emissive:{value:new ct(0)},envMapIntensity:{value:1}}]),vertexShader:fi.meshlambert_vert,fragmentShader:fi.meshlambert_frag},phong:{uniforms:vn([_t.common,_t.specularmap,_t.envmap,_t.aomap,_t.lightmap,_t.emissivemap,_t.bumpmap,_t.normalmap,_t.displacementmap,_t.fog,_t.lights,{emissive:{value:new ct(0)},specular:{value:new ct(1118481)},shininess:{value:30},envMapIntensity:{value:1}}]),vertexShader:fi.meshphong_vert,fragmentShader:fi.meshphong_frag},standard:{uniforms:vn([_t.common,_t.envmap,_t.aomap,_t.lightmap,_t.emissivemap,_t.bumpmap,_t.normalmap,_t.displacementmap,_t.roughnessmap,_t.metalnessmap,_t.fog,_t.lights,{emissive:{value:new ct(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:fi.meshphysical_vert,fragmentShader:fi.meshphysical_frag},toon:{uniforms:vn([_t.common,_t.aomap,_t.lightmap,_t.emissivemap,_t.bumpmap,_t.normalmap,_t.displacementmap,_t.gradientmap,_t.fog,_t.lights,{emissive:{value:new ct(0)}}]),vertexShader:fi.meshtoon_vert,fragmentShader:fi.meshtoon_frag},matcap:{uniforms:vn([_t.common,_t.bumpmap,_t.normalmap,_t.displacementmap,_t.fog,{matcap:{value:null}}]),vertexShader:fi.meshmatcap_vert,fragmentShader:fi.meshmatcap_frag},points:{uniforms:vn([_t.points,_t.fog]),vertexShader:fi.points_vert,fragmentShader:fi.points_frag},dashed:{uniforms:vn([_t.common,_t.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:fi.linedashed_vert,fragmentShader:fi.linedashed_frag},depth:{uniforms:vn([_t.common,_t.displacementmap]),vertexShader:fi.depth_vert,fragmentShader:fi.depth_frag},normal:{uniforms:vn([_t.common,_t.bumpmap,_t.normalmap,_t.displacementmap,{opacity:{value:1}}]),vertexShader:fi.meshnormal_vert,fragmentShader:fi.meshnormal_frag},sprite:{uniforms:vn([_t.sprite,_t.fog]),vertexShader:fi.sprite_vert,fragmentShader:fi.sprite_frag},background:{uniforms:{uvTransform:{value:new ii},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:fi.background_vert,fragmentShader:fi.background_frag},backgroundCube:{uniforms:{envMap:{value:null},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new ii}},vertexShader:fi.backgroundCube_vert,fragmentShader:fi.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:fi.cube_vert,fragmentShader:fi.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:fi.equirect_vert,fragmentShader:fi.equirect_frag},distance:{uniforms:vn([_t.common,_t.displacementmap,{referencePosition:{value:new ne},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:fi.distance_vert,fragmentShader:fi.distance_frag},shadow:{uniforms:vn([_t.lights,_t.fog,{color:{value:new ct(0)},opacity:{value:1}}]),vertexShader:fi.shadow_vert,fragmentShader:fi.shadow_frag}};wo.physical={uniforms:vn([wo.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new ii},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new ii},clearcoatNormalScale:{value:new Lt(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new ii},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new ii},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new ii},sheen:{value:0},sheenColor:{value:new ct(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new ii},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new ii},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new ii},transmissionSamplerSize:{value:new Lt},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new ii},attenuationDistance:{value:0},attenuationColor:{value:new ct(0)},specularColor:{value:new ct(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new ii},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new ii},anisotropyVector:{value:new Lt},anisotropyMap:{value:null},anisotropyMapTransform:{value:new ii}}]),vertexShader:fi.meshphysical_vert,fragmentShader:fi.meshphysical_frag};GE={r:0,b:0,g:0},bJ=new li,gw=new ii;gw.set(-1,0,0,0,1,0,0,0,1);Xc=4,jF=[.125,.215,.35,.446,.526,.582],gh=20,DJ=256,Jp=new Do,qF=new ct,mI=null,pI=0,_I=0,gI=!1,LJ=new ne,uu=class{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._sizeLods=[],this._sigmas=[],this._lodMeshes=[],this._backgroundBox=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._blurMaterial=null,this._ggxMaterial=null}fromScene(e,t=0,i=.1,r=100,s={}){let{size:a=256,position:o=LJ}=s;mI=this._renderer.getRenderTarget(),pI=this._renderer.getActiveCubeFace(),_I=this._renderer.getActiveMipmapLevel(),gI=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(a);let l=this._allocateTargets();return l.depthBuffer=!0,this._sceneToCubeUV(e,i,r,l,o),t>0&&this._blur(l,0,0,t),this._applyPMREM(l),this._cleanup(l),l}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){this._cubemapMaterial===null&&(this._cubemapMaterial=JF(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=QF(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose(),this._backgroundBox!==null&&(this._backgroundBox.geometry.dispose(),this._backgroundBox.material.dispose())}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._ggxMaterial!==null&&this._ggxMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let e=0;e2?E:0,E,E),h.setRenderTarget(r),g&&h.render(_,l),h.render(e,l)}h.toneMapping=u,h.autoClear=d,e.background=v}_textureToCubeUV(e,t){let i=this._renderer,r=e.mapping===Wc||e.mapping===mh;r?(this._cubemapMaterial===null&&(this._cubemapMaterial=JF()),this._cubemapMaterial.uniforms.flipEnvMap.value=e.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=QF());let s=r?this._cubemapMaterial:this._equirectMaterial,a=this._lodMeshes[0];a.material=s;let o=s.uniforms;o.envMap.value=e;let l=this._cubeSize;hu(t,0,0,3*l,2*l),i.setRenderTarget(t),i.render(a,Jp)}_applyPMREM(e){let t=this._renderer,i=t.autoClear;t.autoClear=!1;let r=this._lodMeshes.length;for(let s=1;sm-Xc?i-m+Xc:0),g=4*(this._cubeSize-_);l.envMap.value=e.texture,l.roughness.value=u,l.mipInt.value=m-t,hu(s,p,g,3*_,2*_),r.setRenderTarget(s),r.render(o,Jp),l.envMap.value=s.texture,l.roughness.value=0,l.mipInt.value=m-i,hu(e,p,g,3*_,2*_),r.setRenderTarget(e),r.render(o,Jp)}_blur(e,t,i,r,s){let a=this._pingPongRenderTarget;this._halfBlur(e,a,t,i,r,"latitudinal",s),this._halfBlur(a,e,i,i,r,"longitudinal",s)}_halfBlur(e,t,i,r,s,a,o){let l=this._renderer,c=this._blurMaterial;a!=="latitudinal"&&a!=="longitudinal"&&Gt("blur direction must be either latitudinal or longitudinal!");let f=3,h=this._lodMeshes[r];h.material=c;let d=c.uniforms,u=this._sizeLods[i]-1,m=isFinite(s)?Math.PI/(2*u):2*Math.PI/(2*gh-1),_=s/m,p=isFinite(s)?1+Math.floor(f*_):gh;p>gh&&Ct(`sigmaRadians, ${s}, is too large and will clip, as it requested ${p} samples when the maximum is set to ${gh}`);let g=[],v=0;for(let R=0;Rx-Xc?r-x+Xc:0),T=4*(this._cubeSize-A);hu(t,E,T,3*A,2*A),l.setRenderTarget(t),l.render(h,Jp)}};WE=class extends Ns{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;let i={width:e,height:e,depth:1},r=[i,i,i,i,i,i];this.texture=new yp(r),this._setTextureOptions(t),this.texture.isRenderTargetTexture=!0}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.colorSpace=t.colorSpace,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;let i={uniforms:{tEquirect:{value:null}},vertexShader:` +}`,fi={alphahash_fragment:uZ,alphahash_pars_fragment:mZ,alphamap_fragment:pZ,alphamap_pars_fragment:_Z,alphatest_fragment:gZ,alphatest_pars_fragment:vZ,aomap_fragment:EZ,aomap_pars_fragment:SZ,batching_pars_vertex:TZ,batching_vertex:AZ,begin_vertex:xZ,beginnormal_vertex:RZ,bsdfs:bZ,iridescence_fragment:IZ,bumpmap_pars_fragment:MZ,clipping_planes_fragment:CZ,clipping_planes_pars_fragment:yZ,clipping_planes_pars_vertex:PZ,clipping_planes_vertex:DZ,color_fragment:LZ,color_pars_fragment:OZ,color_pars_vertex:NZ,color_vertex:wZ,common:FZ,cube_uv_reflection_fragment:BZ,defaultnormal_vertex:UZ,displacementmap_pars_vertex:VZ,displacementmap_vertex:GZ,emissivemap_fragment:kZ,emissivemap_pars_fragment:WZ,colorspace_fragment:HZ,colorspace_pars_fragment:zZ,envmap_fragment:XZ,envmap_common_pars_fragment:YZ,envmap_pars_fragment:KZ,envmap_pars_vertex:jZ,envmap_physical_pars_fragment:sQ,envmap_vertex:qZ,fog_vertex:ZZ,fog_pars_vertex:QZ,fog_fragment:$Z,fog_pars_fragment:JZ,gradientmap_pars_fragment:eQ,lightmap_pars_fragment:tQ,lights_lambert_fragment:iQ,lights_lambert_pars_fragment:rQ,lights_pars_begin:nQ,lights_toon_fragment:aQ,lights_toon_pars_fragment:oQ,lights_phong_fragment:lQ,lights_phong_pars_fragment:cQ,lights_physical_fragment:fQ,lights_physical_pars_fragment:hQ,lights_fragment_begin:dQ,lights_fragment_maps:uQ,lights_fragment_end:mQ,lightprobes_pars_fragment:pQ,logdepthbuf_fragment:_Q,logdepthbuf_pars_fragment:gQ,logdepthbuf_pars_vertex:vQ,logdepthbuf_vertex:EQ,map_fragment:SQ,map_pars_fragment:TQ,map_particle_fragment:AQ,map_particle_pars_fragment:xQ,metalnessmap_fragment:RQ,metalnessmap_pars_fragment:bQ,morphinstance_vertex:IQ,morphcolor_vertex:MQ,morphnormal_vertex:CQ,morphtarget_pars_vertex:yQ,morphtarget_vertex:PQ,normal_fragment_begin:DQ,normal_fragment_maps:LQ,normal_pars_fragment:OQ,normal_pars_vertex:NQ,normal_vertex:wQ,normalmap_pars_fragment:FQ,clearcoat_normal_fragment_begin:BQ,clearcoat_normal_fragment_maps:UQ,clearcoat_pars_fragment:VQ,iridescence_pars_fragment:GQ,opaque_fragment:kQ,packing:WQ,premultiplied_alpha_fragment:HQ,project_vertex:zQ,dithering_fragment:XQ,dithering_pars_fragment:YQ,roughnessmap_fragment:KQ,roughnessmap_pars_fragment:jQ,shadowmap_pars_fragment:qQ,shadowmap_pars_vertex:ZQ,shadowmap_vertex:QQ,shadowmask_pars_fragment:$Q,skinbase_vertex:JQ,skinning_pars_vertex:e$,skinning_vertex:t$,skinnormal_vertex:i$,specularmap_fragment:r$,specularmap_pars_fragment:n$,tonemapping_fragment:s$,tonemapping_pars_fragment:a$,transmission_fragment:o$,transmission_pars_fragment:l$,uv_pars_fragment:c$,uv_pars_vertex:f$,uv_vertex:h$,worldpos_vertex:d$,background_vert:u$,background_frag:m$,backgroundCube_vert:p$,backgroundCube_frag:_$,cube_vert:g$,cube_frag:v$,depth_vert:E$,depth_frag:S$,distance_vert:T$,distance_frag:A$,equirect_vert:x$,equirect_frag:R$,linedashed_vert:b$,linedashed_frag:I$,meshbasic_vert:M$,meshbasic_frag:C$,meshlambert_vert:y$,meshlambert_frag:P$,meshmatcap_vert:D$,meshmatcap_frag:L$,meshnormal_vert:O$,meshnormal_frag:N$,meshphong_vert:w$,meshphong_frag:F$,meshphysical_vert:B$,meshphysical_frag:U$,meshtoon_vert:V$,meshtoon_frag:G$,points_vert:k$,points_frag:W$,shadow_vert:H$,shadow_frag:z$,sprite_vert:X$,sprite_frag:Y$},_t={common:{diffuse:{value:new ct(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new ii},alphaMap:{value:null},alphaMapTransform:{value:new ii},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new ii}},envmap:{envMap:{value:null},envMapRotation:{value:new ii},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98},dfgLUT:{value:null}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new ii}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new ii}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new ii},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new ii},normalScale:{value:new Lt(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new ii},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new ii}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new ii}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new ii}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new ct(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null},probesSH:{value:null},probesMin:{value:new ne},probesMax:{value:new ne},probesResolution:{value:new ne}},points:{diffuse:{value:new ct(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new ii},alphaTest:{value:0},uvTransform:{value:new ii}},sprite:{diffuse:{value:new ct(16777215)},opacity:{value:1},center:{value:new Lt(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new ii},alphaMap:{value:null},alphaMapTransform:{value:new ii},alphaTest:{value:0}}},Uo={basic:{uniforms:Sn([_t.common,_t.specularmap,_t.envmap,_t.aomap,_t.lightmap,_t.fog]),vertexShader:fi.meshbasic_vert,fragmentShader:fi.meshbasic_frag},lambert:{uniforms:Sn([_t.common,_t.specularmap,_t.envmap,_t.aomap,_t.lightmap,_t.emissivemap,_t.bumpmap,_t.normalmap,_t.displacementmap,_t.fog,_t.lights,{emissive:{value:new ct(0)},envMapIntensity:{value:1}}]),vertexShader:fi.meshlambert_vert,fragmentShader:fi.meshlambert_frag},phong:{uniforms:Sn([_t.common,_t.specularmap,_t.envmap,_t.aomap,_t.lightmap,_t.emissivemap,_t.bumpmap,_t.normalmap,_t.displacementmap,_t.fog,_t.lights,{emissive:{value:new ct(0)},specular:{value:new ct(1118481)},shininess:{value:30},envMapIntensity:{value:1}}]),vertexShader:fi.meshphong_vert,fragmentShader:fi.meshphong_frag},standard:{uniforms:Sn([_t.common,_t.envmap,_t.aomap,_t.lightmap,_t.emissivemap,_t.bumpmap,_t.normalmap,_t.displacementmap,_t.roughnessmap,_t.metalnessmap,_t.fog,_t.lights,{emissive:{value:new ct(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:fi.meshphysical_vert,fragmentShader:fi.meshphysical_frag},toon:{uniforms:Sn([_t.common,_t.aomap,_t.lightmap,_t.emissivemap,_t.bumpmap,_t.normalmap,_t.displacementmap,_t.gradientmap,_t.fog,_t.lights,{emissive:{value:new ct(0)}}]),vertexShader:fi.meshtoon_vert,fragmentShader:fi.meshtoon_frag},matcap:{uniforms:Sn([_t.common,_t.bumpmap,_t.normalmap,_t.displacementmap,_t.fog,{matcap:{value:null}}]),vertexShader:fi.meshmatcap_vert,fragmentShader:fi.meshmatcap_frag},points:{uniforms:Sn([_t.points,_t.fog]),vertexShader:fi.points_vert,fragmentShader:fi.points_frag},dashed:{uniforms:Sn([_t.common,_t.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:fi.linedashed_vert,fragmentShader:fi.linedashed_frag},depth:{uniforms:Sn([_t.common,_t.displacementmap]),vertexShader:fi.depth_vert,fragmentShader:fi.depth_frag},normal:{uniforms:Sn([_t.common,_t.bumpmap,_t.normalmap,_t.displacementmap,{opacity:{value:1}}]),vertexShader:fi.meshnormal_vert,fragmentShader:fi.meshnormal_frag},sprite:{uniforms:Sn([_t.sprite,_t.fog]),vertexShader:fi.sprite_vert,fragmentShader:fi.sprite_frag},background:{uniforms:{uvTransform:{value:new ii},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:fi.background_vert,fragmentShader:fi.background_frag},backgroundCube:{uniforms:{envMap:{value:null},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new ii}},vertexShader:fi.backgroundCube_vert,fragmentShader:fi.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:fi.cube_vert,fragmentShader:fi.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:fi.equirect_vert,fragmentShader:fi.equirect_frag},distance:{uniforms:Sn([_t.common,_t.displacementmap,{referencePosition:{value:new ne},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:fi.distance_vert,fragmentShader:fi.distance_frag},shadow:{uniforms:Sn([_t.lights,_t.fog,{color:{value:new ct(0)},opacity:{value:1}}]),vertexShader:fi.shadow_vert,fragmentShader:fi.shadow_frag}};Uo.physical={uniforms:Sn([Uo.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new ii},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new ii},clearcoatNormalScale:{value:new Lt(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new ii},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new ii},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new ii},sheen:{value:0},sheenColor:{value:new ct(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new ii},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new ii},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new ii},transmissionSamplerSize:{value:new Lt},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new ii},attenuationDistance:{value:0},attenuationColor:{value:new ct(0)},specularColor:{value:new ct(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new ii},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new ii},anisotropyVector:{value:new Lt},anisotropyMap:{value:null},anisotropyMapTransform:{value:new ii}}]),vertexShader:fi.meshphysical_vert,fragmentShader:fi.meshphysical_frag};qE={r:0,b:0,g:0},K$=new li,CF=new ii;CF.set(-1,0,0,0,1,0,0,0,1);jc=4,sF=[.125,.215,.35,.446,.526,.582],gh=20,J$=256,s_=new Oo,aF=new ct,M0=null,C0=0,y0=0,P0=!1,eJ=new ne,_u=class{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._sizeLods=[],this._sigmas=[],this._lodMeshes=[],this._backgroundBox=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._blurMaterial=null,this._ggxMaterial=null}fromScene(e,t=0,i=.1,r=100,s={}){let{size:a=256,position:o=eJ}=s;M0=this._renderer.getRenderTarget(),C0=this._renderer.getActiveCubeFace(),y0=this._renderer.getActiveMipmapLevel(),P0=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(a);let l=this._allocateTargets();return l.depthBuffer=!0,this._sceneToCubeUV(e,i,r,l,o),t>0&&this._blur(l,0,0,t),this._applyPMREM(l),this._cleanup(l),l}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){this._cubemapMaterial===null&&(this._cubemapMaterial=cF(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=lF(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose(),this._backgroundBox!==null&&(this._backgroundBox.geometry.dispose(),this._backgroundBox.material.dispose())}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._ggxMaterial!==null&&this._ggxMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let e=0;e2?S:0,S,S),h.setRenderTarget(r),g&&h.render(_,l),h.render(e,l)}h.toneMapping=u,h.autoClear=d,e.background=v}_textureToCubeUV(e,t){let i=this._renderer,r=e.mapping===Xc||e.mapping===mh;r?(this._cubemapMaterial===null&&(this._cubemapMaterial=cF()),this._cubemapMaterial.uniforms.flipEnvMap.value=e.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=lF());let s=r?this._cubemapMaterial:this._equirectMaterial,a=this._lodMeshes[0];a.material=s;let o=s.uniforms;o.envMap.value=e;let l=this._cubeSize;mu(t,0,0,3*l,2*l),i.setRenderTarget(t),i.render(a,s_)}_applyPMREM(e){let t=this._renderer,i=t.autoClear;t.autoClear=!1;let r=this._lodMeshes.length;for(let s=1;sm-jc?i-m+jc:0),g=4*(this._cubeSize-_);l.envMap.value=e.texture,l.roughness.value=u,l.mipInt.value=m-t,mu(s,p,g,3*_,2*_),r.setRenderTarget(s),r.render(o,s_),l.envMap.value=s.texture,l.roughness.value=0,l.mipInt.value=m-i,mu(e,p,g,3*_,2*_),r.setRenderTarget(e),r.render(o,s_)}_blur(e,t,i,r,s){let a=this._pingPongRenderTarget;this._halfBlur(e,a,t,i,r,"latitudinal",s),this._halfBlur(a,e,i,i,r,"longitudinal",s)}_halfBlur(e,t,i,r,s,a,o){let l=this._renderer,c=this._blurMaterial;a!=="latitudinal"&&a!=="longitudinal"&&Gt("blur direction must be either latitudinal or longitudinal!");let f=3,h=this._lodMeshes[r];h.material=c;let d=c.uniforms,u=this._sizeLods[i]-1,m=isFinite(s)?Math.PI/(2*u):2*Math.PI/(2*gh-1),_=s/m,p=isFinite(s)?1+Math.floor(f*_):gh;p>gh&&Ct(`sigmaRadians, ${s}, is too large and will clip, as it requested ${p} samples when the maximum is set to ${gh}`);let g=[],v=0;for(let R=0;Rx-jc?r-x+jc:0),E=4*(this._cubeSize-A);mu(t,S,E,3*A,2*A),l.setRenderTarget(t),l.render(h,s_)}};QE=class extends Ns{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;let i={width:e,height:e,depth:1},r=[i,i,i,i,i,i];this.texture=new Fp(r),this._setTextureOptions(t),this.texture.isRenderTargetTexture=!0}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.colorSpace=t.colorSpace,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;let i={uniforms:{tEquirect:{value:null}},vertexShader:` varying vec3 vWorldDirection; @@ -4052,9 +4052,9 @@ void main() { gl_FragColor = texture2D( tEquirect, sampleUV ); } - `},r=new Bc(5,5,5),s=new ws({name:"CubemapFromEquirect",uniforms:_h(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader,side:fn,blending:Oo});s.uniforms.tEquirect.value=t;let a=new ci(r,s),o=t.minFilter;return t.minFilter===Ha&&(t.minFilter=Pr),new zv(1,10,this).update(e,a),t.minFilter=o,a.geometry.dispose(),a.material.dispose(),this}clear(e,t=!0,i=!0,r=!0){let s=e.getRenderTarget();for(let a=0;a<6;a++)e.setRenderTarget(this,a),e.clear(t,i,r);e.setRenderTarget(s)}};HJ={[kb]:"LINEAR_TONE_MAPPING",[Wb]:"REINHARD_TONE_MAPPING",[Hb]:"CINEON_TONE_MAPPING",[zb]:"ACES_FILMIC_TONE_MAPPING",[Yb]:"AGX_TONE_MAPPING",[Kb]:"NEUTRAL_TONE_MAPPING",[Xb]:"CUSTOM_TONE_MAPPING"};vw=new Ar,SI=new Sl(1,1),Ew=new xp,Sw=new Dv,Tw=new yp,$F=[],ew=[],tw=new Float32Array(16),iw=new Float32Array(9),rw=new Float32Array(4);TI=class{constructor(e,t,i){this.id=e,this.addr=i,this.cache=[],this.type=t.type,this.setValue=f$(t.type)}},AI=class{constructor(e,t,i){this.id=e,this.addr=i,this.cache=[],this.type=t.type,this.size=t.size,this.setValue=P$(t.type)}},xI=class{constructor(e){this.id=e,this.seq=[],this.map={}}setValue(e,t,i){let r=this.seq;for(let s=0,a=r.length;s!==a;++s){let o=r[s];o.setValue(e,t[o.id],i)}}},vI=/(\w+)(\])?(\[|\.)?/g;du=class{constructor(e,t){this.seq=[],this.map={};let i=e.getProgramParameter(t,e.ACTIVE_UNIFORMS);for(let a=0;a0&&(this.seq=r.concat(s))}setValue(e,t,i,r){let s=this.map[t];s!==void 0&&s.setValue(e,i,r)}setOptional(e,t,i){let r=t[i];r!==void 0&&this.setValue(e,i,r)}static upload(e,t,i,r){for(let s=0,a=t.length;s!==a;++s){let o=t[s],l=i[o.id];l.needsUpdate!==!1&&o.setValue(e,l.value,r)}}static seqWithValue(e,t){let i=[];for(let r=0,s=e.length;r!==s;++r){let a=e[r];a.id in t&&i.push(a)}return i}};L$=37297,O$=0;aw=new ii;B$={[kb]:"Linear",[Wb]:"Reinhard",[Hb]:"Cineon",[zb]:"ACESFilmic",[Yb]:"AgX",[Kb]:"Neutral",[Xb]:"Custom"};kE=new ne;H$=/^[ \t]*#include +<([\w\d./]+)>/gm;z$=new Map;Y$=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;j$={[kp]:"SHADOWMAP_TYPE_PCF",[su]:"SHADOWMAP_TYPE_VSM"};Z$={[Wc]:"ENVMAP_TYPE_CUBE",[mh]:"ENVMAP_TYPE_CUBE",[Hp]:"ENVMAP_TYPE_CUBE_UV"};J$={[mh]:"ENVMAP_MODE_REFRACTION"};eee={[Wp]:"ENVMAP_BLENDING_MULTIPLY",[IF]:"ENVMAP_BLENDING_MIX",[MF]:"ENVMAP_BLENDING_ADD"};nee=0,bI=class{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(e){let t=e.vertexShader,i=e.fragmentShader,r=this._getShaderStage(t),s=this._getShaderStage(i),a=this._getShaderCacheForMaterial(e);return a.has(r)===!1&&(a.add(r),r.usedTimes++),a.has(s)===!1&&(a.add(s),s.usedTimes++),this}remove(e){let t=this.materialCache.get(e);for(let i of t)i.usedTimes--,i.usedTimes===0&&this.shaderCache.delete(i.code);return this.materialCache.delete(e),this}getVertexShaderID(e){return this._getShaderStage(e.vertexShader).id}getFragmentShaderID(e){return this._getShaderStage(e.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(e){let t=this.materialCache,i=t.get(e);return i===void 0&&(i=new Set,t.set(e,i)),i}_getShaderStage(e){let t=this.shaderCache,i=t.get(e);return i===void 0&&(i=new II(e),t.set(e,i)),i}},II=class{constructor(e){this.id=nee++,this.code=e,this.usedTimes=0}};dee=0;_ee=`void main() { + `},r=new Gc(5,5,5),s=new Fs({name:"CubemapFromEquirect",uniforms:_h(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader,side:dn,blending:wo});s.uniforms.tEquirect.value=t;let a=new ci(r,s),o=t.minFilter;return t.minFilter===Ya&&(t.minFilter=Pr),new Jv(1,10,this).update(e,a),t.minFilter=o,a.geometry.dispose(),a.material.dispose(),this}clear(e,t=!0,i=!0,r=!0){let s=e.getRenderTarget();for(let a=0;a<6;a++)e.setRenderTarget(this,a),e.clear(t,i,r);e.setRenderTarget(s)}};hJ={[e0]:"LINEAR_TONE_MAPPING",[t0]:"REINHARD_TONE_MAPPING",[i0]:"CINEON_TONE_MAPPING",[r0]:"ACES_FILMIC_TONE_MAPPING",[s0]:"AGX_TONE_MAPPING",[a0]:"NEUTRAL_TONE_MAPPING",[n0]:"CUSTOM_TONE_MAPPING"};yF=new Rr,O0=new Al(1,1),PF=new Pp,DF=new Gv,LF=new Fp,fF=[],hF=[],dF=new Float32Array(16),uF=new Float32Array(9),mF=new Float32Array(4);N0=class{constructor(e,t,i){this.id=e,this.addr=i,this.cache=[],this.type=t.type,this.setValue=LJ(t.type)}},w0=class{constructor(e,t,i){this.id=e,this.addr=i,this.cache=[],this.type=t.type,this.size=t.size,this.setValue=$J(t.type)}},F0=class{constructor(e){this.id=e,this.seq=[],this.map={}}setValue(e,t,i){let r=this.seq;for(let s=0,a=r.length;s!==a;++s){let o=r[s];o.setValue(e,t[o.id],i)}}},D0=/(\w+)(\])?(\[|\.)?/g;pu=class{constructor(e,t){this.seq=[],this.map={};let i=e.getProgramParameter(t,e.ACTIVE_UNIFORMS);for(let a=0;a0&&(this.seq=r.concat(s))}setValue(e,t,i,r){let s=this.map[t];s!==void 0&&s.setValue(e,i,r)}setOptional(e,t,i){let r=t[i];r!==void 0&&this.setValue(e,i,r)}static upload(e,t,i,r){for(let s=0,a=t.length;s!==a;++s){let o=t[s],l=i[o.id];l.needsUpdate!==!1&&o.setValue(e,l.value,r)}}static seqWithValue(e,t){let i=[];for(let r=0,s=e.length;r!==s;++r){let a=e[r];a.id in t&&i.push(a)}return i}};eee=37297,tee=0;gF=new ii;see={[e0]:"Linear",[t0]:"Reinhard",[i0]:"Cineon",[r0]:"ACESFilmic",[s0]:"AgX",[a0]:"Neutral",[n0]:"Custom"};ZE=new ne;hee=/^[ \t]*#include +<([\w\d./]+)>/gm;dee=new Map;mee=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;_ee={[jp]:"SHADOWMAP_TYPE_PCF",[lu]:"SHADOWMAP_TYPE_VSM"};vee={[Xc]:"ENVMAP_TYPE_CUBE",[mh]:"ENVMAP_TYPE_CUBE",[Zp]:"ENVMAP_TYPE_CUBE_UV"};See={[mh]:"ENVMAP_MODE_REFRACTION"};Aee={[qp]:"ENVMAP_BLENDING_MULTIPLY",[Bw]:"ENVMAP_BLENDING_MIX",[Uw]:"ENVMAP_BLENDING_ADD"};Iee=0,U0=class{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(e){let t=e.vertexShader,i=e.fragmentShader,r=this._getShaderStage(t),s=this._getShaderStage(i),a=this._getShaderCacheForMaterial(e);return a.has(r)===!1&&(a.add(r),r.usedTimes++),a.has(s)===!1&&(a.add(s),s.usedTimes++),this}remove(e){let t=this.materialCache.get(e);for(let i of t)i.usedTimes--,i.usedTimes===0&&this.shaderCache.delete(i.code);return this.materialCache.delete(e),this}getVertexShaderID(e){return this._getShaderStage(e.vertexShader).id}getFragmentShaderID(e){return this._getShaderStage(e.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(e){let t=this.materialCache,i=t.get(e);return i===void 0&&(i=new Set,t.set(e,i)),i}_getShaderStage(e){let t=this.shaderCache,i=t.get(e);return i===void 0&&(i=new V0(e),t.set(e,i)),i}},V0=class{constructor(e){this.id=Iee++,this.code=e,this.usedTimes=0}};Nee=0;Uee=`void main() { gl_Position = vec4( position, 1.0 ); -}`,gee=`uniform sampler2D shadow_pass; +}`,Vee=`uniform sampler2D shadow_pass; uniform vec2 resolution; uniform float radius; void main() { @@ -4079,12 +4079,12 @@ void main() { squared_mean = squared_mean / samples; float std_dev = sqrt( max( 0.0, squared_mean - mean * mean ) ); gl_FragColor = vec4( mean, std_dev, 0.0, 1.0 ); -}`,vee=[new ne(1,0,0),new ne(-1,0,0),new ne(0,1,0),new ne(0,-1,0),new ne(0,0,1),new ne(0,0,-1)],Eee=[new ne(0,-1,0),new ne(0,-1,0),new ne(0,0,1),new ne(0,0,-1),new ne(0,-1,0),new ne(0,-1,0)],pw=new li,$p=new ne,EI=new ne;Ree=` +}`,Gee=[new ne(1,0,0),new ne(-1,0,0),new ne(0,1,0),new ne(0,-1,0),new ne(0,0,1),new ne(0,0,-1)],kee=[new ne(0,-1,0),new ne(0,-1,0),new ne(0,0,1),new ne(0,0,-1),new ne(0,-1,0),new ne(0,-1,0)],IF=new li,a_=new ne,L0=new ne;Yee=` void main() { gl_Position = vec4( position, 1.0 ); -}`,bee=` +}`,Kee=` uniform sampler2DArray depthColor; uniform float depthWidth; uniform float depthHeight; @@ -4103,51 +4103,51 @@ void main() { } -}`,MI=class{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(e,t){if(this.texture===null){let i=new Pp(e.texture);(e.depthNear!==t.depthNear||e.depthFar!==t.depthFar)&&(this.depthNear=e.depthNear,this.depthFar=e.depthFar),this.texture=i}}getMesh(e){if(this.texture!==null&&this.mesh===null){let t=e.cameras[0].viewport,i=new ws({vertexShader:Ree,fragmentShader:bee,uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new ci(new fh(20,20),i)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}},CI=class extends na{constructor(e,t){super();let i=this,r=null,s=1,a=null,o="local-floor",l=1,c=null,f=null,h=null,d=null,u=null,m=null,_=typeof XRWebGLBinding!="undefined",p=new MI,g={},v=t.getContextAttributes(),x=null,A=null,E=[],T=[],R=new Lt,I=null,y=new Br;y.viewport=new ji;let M=new Br;M.viewport=new ji;let D=[y,M],O=new Xv,V=null,N=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(se){let pe=E[se];return pe===void 0&&(pe=new qd,E[se]=pe),pe.getTargetRaySpace()},this.getControllerGrip=function(se){let pe=E[se];return pe===void 0&&(pe=new qd,E[se]=pe),pe.getGripSpace()},this.getHand=function(se){let pe=E[se];return pe===void 0&&(pe=new qd,E[se]=pe),pe.getHandSpace()};function w(se){let pe=T.indexOf(se.inputSource);if(pe===-1)return;let ie=E[pe];ie!==void 0&&(ie.update(se.inputSource,se.frame,c||a),ie.dispatchEvent({type:se.type,data:se.inputSource}))}function U(){r.removeEventListener("select",w),r.removeEventListener("selectstart",w),r.removeEventListener("selectend",w),r.removeEventListener("squeeze",w),r.removeEventListener("squeezestart",w),r.removeEventListener("squeezeend",w),r.removeEventListener("end",U),r.removeEventListener("inputsourceschange",G);for(let se=0;se=0&&(T[_e]=null,E[_e].disconnect(ie))}for(let pe=0;pe=T.length){T.push(ie),_e=de;break}else if(T[de]===null){T[de]=ie,_e=de;break}if(_e===-1)break}let Pe=E[_e];Pe&&Pe.connect(ie)}}let J=new ne,Y=new ne;function Q(se,pe,ie){J.setFromMatrixPosition(pe.matrixWorld),Y.setFromMatrixPosition(ie.matrixWorld);let _e=J.distanceTo(Y),Pe=pe.projectionMatrix.elements,de=ie.projectionMatrix.elements,be=Pe[14]/(Pe[10]-1),Ze=Pe[14]/(Pe[10]+1),Tt=(Pe[9]+1)/Pe[5],Ye=(Pe[9]-1)/Pe[5],Ke=(Pe[8]-1)/Pe[0],fe=(de[8]+1)/de[0],Fe=be*Ke,Vt=be*fe,re=_e/(-Ke+fe),di=re*-Ke;if(pe.matrixWorld.decompose(se.position,se.quaternion,se.scale),se.translateX(di),se.translateZ(re),se.matrixWorld.compose(se.position,se.quaternion,se.scale),se.matrixWorldInverse.copy(se.matrixWorld).invert(),Pe[10]===-1)se.projectionMatrix.copy(pe.projectionMatrix),se.projectionMatrixInverse.copy(pe.projectionMatrixInverse);else{let zt=be+re,bi=Ze+re,ot=Fe-di,Xi=Vt+(_e-di),z=Tt*Ze/bi*zt,B=Ye*Ze/bi*zt;se.projectionMatrix.makePerspective(ot,Xi,z,B,zt,bi),se.projectionMatrixInverse.copy(se.projectionMatrix).invert()}}function X(se,pe){pe===null?se.matrixWorld.copy(se.matrix):se.matrixWorld.multiplyMatrices(pe.matrixWorld,se.matrix),se.matrixWorldInverse.copy(se.matrixWorld).invert()}this.updateCamera=function(se){if(r===null)return;let pe=se.near,ie=se.far;p.texture!==null&&(p.depthNear>0&&(pe=p.depthNear),p.depthFar>0&&(ie=p.depthFar)),O.near=M.near=y.near=pe,O.far=M.far=y.far=ie,(V!==O.near||N!==O.far)&&(r.updateRenderState({depthNear:O.near,depthFar:O.far}),V=O.near,N=O.far),O.layers.mask=se.layers.mask|6,y.layers.mask=O.layers.mask&-5,M.layers.mask=O.layers.mask&-3;let _e=se.parent,Pe=O.cameras;X(O,_e);for(let de=0;de{function St(){if(Ee.forEach(function(Rt){z.get(Rt).currentProgram.isReady()&&Ee.delete(Rt)}),Ee.size===0){Se(H);return}setTimeout(St,10)}zt.get("KHR_parallel_shader_compile")!==null?St():setTimeout(St,10)})};let cl=null;function aj(H){cl&&cl(H)}function kO(){Xf.stop()}function WO(){Xf.start()}let Xf=new _w;Xf.setAnimationLoop(aj),typeof self!="undefined"&&Xf.setContext(self),this.setAnimationLoop=function(H){cl=H,rt.setAnimationLoop(H),H===null?Xf.stop():Xf.start()},rt.addEventListener("sessionstart",kO),rt.addEventListener("sessionend",WO),this.render=function(H,ce){if(ce!==void 0&&ce.isCamera!==!0){Gt("WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(D===!0)return;O!==null&&O.renderStart(H,ce);let Ae=rt.enabled===!0&&rt.isPresenting===!0,Ee=y!==null&&(w===null||Ae)&&y.begin(M,w);if(H.matrixWorldAutoUpdate===!0&&H.updateMatrixWorld(),ce.parent===null&&ce.matrixWorldAutoUpdate===!0&&ce.updateMatrixWorld(),rt.enabled===!0&&rt.isPresenting===!0&&(y===null||y.isCompositing()===!1)&&(rt.cameraAutoUpdate===!0&&rt.updateCamera(ce),ce=rt.getCamera()),H.isScene===!0&&H.onBeforeRender(M,H,ce,w),T=mt.get(H,I.length),T.init(ce),T.state.textureUnits=B.getTextureUnits(),I.push(T),Tt.multiplyMatrices(ce.projectionMatrix,ce.matrixWorldInverse),de.setFromProjectionMatrix(Tt,wa,ce.reversedDepth),Ze=this.localClippingEnabled,be=At.init(this.clippingPlanes,Ze),E=De.get(H,R.length),E.init(),R.push(E),rt.enabled===!0&&rt.isPresenting===!0){let Rt=M.xr.getDepthSensingMesh();Rt!==null&&HR(Rt,ce,-1/0,M.sortObjects)}HR(H,ce,0,M.sortObjects),E.finish(),M.sortObjects===!0&&E.sort(se,pe),Fe=rt.enabled===!1||rt.isPresenting===!1||rt.hasDepthSensing()===!1,Fe&&Je.addToRenderList(E,H),this.info.render.frame++,be===!0&&At.beginShadows();let Se=T.state.shadowsArray;if(at.render(Se,H,ce),be===!0&&At.endShadows(),this.info.autoReset===!0&&this.info.reset(),(Ee&&y.hasRenderPass())===!1){let Rt=E.opaque,gt=E.transmissive;if(T.setupLights(),ce.isArrayCamera){let yt=ce.cameras;if(gt.length>0)for(let Dt=0,oi=yt.length;Dt0&&zO(Rt,gt,H,ce),Fe&&Je.render(H),HO(E,H,ce)}w!==null&&N===0&&(B.updateMultisampleRenderTarget(w),B.updateRenderTargetMipmap(w)),Ee&&y.end(M),H.isScene===!0&&H.onAfterRender(M,H,ce),$e.resetDefaultState(),U=-1,G=null,I.pop(),I.length>0?(T=I[I.length-1],B.setTextureUnits(T.state.textureUnits),be===!0&&At.setGlobalState(M.clippingPlanes,T.state.camera)):T=null,R.pop(),R.length>0?E=R[R.length-1]:E=null,O!==null&&O.renderEnd()};function HR(H,ce,Ae,Ee){if(H.visible===!1)return;if(H.layers.test(ce.layers)){if(H.isGroup)Ae=H.renderOrder;else if(H.isLOD)H.autoUpdate===!0&&H.update(ce);else if(H.isLightProbeGrid)T.pushLightProbeGrid(H);else if(H.isLight)T.pushLight(H),H.castShadow&&T.pushShadow(H);else if(H.isSprite){if(!H.frustumCulled||de.intersectsSprite(H)){Ee&&Ke.setFromMatrixPosition(H.matrixWorld).applyMatrix4(Tt);let Rt=je.update(H),gt=H.material;gt.visible&&E.push(H,Rt,gt,Ae,Ke.z,null)}}else if((H.isMesh||H.isLine||H.isPoints)&&(!H.frustumCulled||de.intersectsObject(H))){let Rt=je.update(H),gt=H.material;if(Ee&&(H.boundingSphere!==void 0?(H.boundingSphere===null&&H.computeBoundingSphere(),Ke.copy(H.boundingSphere.center)):(Rt.boundingSphere===null&&Rt.computeBoundingSphere(),Ke.copy(Rt.boundingSphere.center)),Ke.applyMatrix4(H.matrixWorld).applyMatrix4(Tt)),Array.isArray(gt)){let yt=Rt.groups;for(let Dt=0,oi=yt.length;Dt0&&Ng(Se,ce,Ae),St.length>0&&Ng(St,ce,Ae),Rt.length>0&&Ng(Rt,ce,Ae),ot.buffers.depth.setTest(!0),ot.buffers.depth.setMask(!0),ot.buffers.color.setMask(!0),ot.setPolygonOffset(!1)}function zO(H,ce,Ae,Ee){if((Ae.isScene===!0?Ae.overrideMaterial:null)!==null)return;if(T.state.transmissionRenderTarget[Ee.id]===void 0){let Ot=zt.has("EXT_color_buffer_half_float")||zt.has("EXT_color_buffer_float");T.state.transmissionRenderTarget[Ee.id]=new Ns(1,1,{generateMipmaps:!0,type:Ot?No:os,minFilter:Ha,samples:Math.max(4,bi.samples),stencilBuffer:s,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:ai.workingColorSpace})}let St=T.state.transmissionRenderTarget[Ee.id],Rt=Ee.viewport||J;St.setSize(Rt.z*M.transmissionResolutionScale,Rt.w*M.transmissionResolutionScale);let gt=M.getRenderTarget(),yt=M.getActiveCubeFace(),Dt=M.getActiveMipmapLevel();M.setRenderTarget(St),M.getClearColor(X),j=M.getClearAlpha(),j<1&&M.setClearColor(16777215,.5),M.clear(),Fe&&Je.render(Ae);let oi=M.toneMapping;M.toneMapping=Bs;let ui=Ee.viewport;if(Ee.viewport!==void 0&&(Ee.viewport=void 0),T.setupLightsView(Ee),be===!0&&At.setGlobalState(M.clippingPlanes,Ee),Ng(H,Ae,Ee),B.updateMultisampleRenderTarget(St),B.updateRenderTargetMipmap(St),zt.has("WEBGL_multisampled_render_to_texture")===!1){let Ot=!1;for(let Yi=0,Ir=ce.length;Yi0,Ee.currentProgram=ui,Ee.uniformsList=null,ui}function YO(H){if(H.uniformsList===null){let ce=H.currentProgram.getUniforms();H.uniformsList=du.seqWithValue(ce.seq,H.uniforms)}return H.uniformsList}function KO(H,ce){let Ae=z.get(H);Ae.outputColorSpace=ce.outputColorSpace,Ae.batching=ce.batching,Ae.batchingColor=ce.batchingColor,Ae.instancing=ce.instancing,Ae.instancingColor=ce.instancingColor,Ae.instancingMorph=ce.instancingMorph,Ae.skinning=ce.skinning,Ae.morphTargets=ce.morphTargets,Ae.morphNormals=ce.morphNormals,Ae.morphColors=ce.morphColors,Ae.morphTargetsCount=ce.morphTargetsCount,Ae.numClippingPlanes=ce.numClippingPlanes,Ae.numIntersection=ce.numClipIntersection,Ae.vertexAlphas=ce.vertexAlphas,Ae.vertexTangents=ce.vertexTangents,Ae.toneMapping=ce.toneMapping}function oj(H,ce){if(H.length===0)return null;if(H.length===1)return H[0].texture!==null?H[0]:null;A.setFromMatrixPosition(ce.matrixWorld);for(let Ae=0,Ee=H.length;Ae0),Ot=!!Ae.morphAttributes.position,Yi=!!Ae.morphAttributes.normal,Ir=!!Ae.morphAttributes.color,Tr=Bs;Ee.toneMapped&&(w===null||w.isXRRenderTarget===!0)&&(Tr=M.toneMapping);let Zi=Ae.morphAttributes.position||Ae.morphAttributes.normal||Ae.morphAttributes.color,pn=Zi!==void 0?Zi.length:0,xt=z.get(Ee),Is=T.state.lights;if(be===!0&&(Ze===!0||H!==G)){let tr=H===G&&Ee.id===U;At.setState(Ee,H,tr)}let Oi=!1;Ee.version===xt.__version?(xt.needsLights&&xt.lightsStateVersion!==Is.state.version||xt.outputColorSpace!==gt||Se.isBatchedMesh&&xt.batching===!1||!Se.isBatchedMesh&&xt.batching===!0||Se.isBatchedMesh&&xt.batchingColor===!0&&Se.colorTexture===null||Se.isBatchedMesh&&xt.batchingColor===!1&&Se.colorTexture!==null||Se.isInstancedMesh&&xt.instancing===!1||!Se.isInstancedMesh&&xt.instancing===!0||Se.isSkinnedMesh&&xt.skinning===!1||!Se.isSkinnedMesh&&xt.skinning===!0||Se.isInstancedMesh&&xt.instancingColor===!0&&Se.instanceColor===null||Se.isInstancedMesh&&xt.instancingColor===!1&&Se.instanceColor!==null||Se.isInstancedMesh&&xt.instancingMorph===!0&&Se.morphTexture===null||Se.isInstancedMesh&&xt.instancingMorph===!1&&Se.morphTexture!==null||xt.envMap!==Dt||Ee.fog===!0&&xt.fog!==St||xt.numClippingPlanes!==void 0&&(xt.numClippingPlanes!==At.numPlanes||xt.numIntersection!==At.numIntersection)||xt.vertexAlphas!==oi||xt.vertexTangents!==ui||xt.morphTargets!==Ot||xt.morphNormals!==Yi||xt.morphColors!==Ir||xt.toneMapping!==Tr||xt.morphTargetsCount!==pn||!!xt.lightProbeGrid!=T.state.lightProbeGridArray.length>0)&&(Oi=!0):(Oi=!0,xt.__version=Ee.version);let qs=xt.currentProgram;Oi===!0&&(qs=Fg(Ee,ce,Se),O&&Ee.isNodeMaterial&&O.onUpdateProgram(Ee,qs,xt));let Eo=!1,Tc=!1,md=!1,Qi=qs.getUniforms(),Mr=xt.uniforms;if(ot.useProgram(qs.program)&&(Eo=!0,Tc=!0,md=!0),Ee.id!==U&&(U=Ee.id,Tc=!0),xt.needsLights){let tr=oj(T.state.lightProbeGridArray,Se);xt.lightProbeGrid!==tr&&(xt.lightProbeGrid=tr,Tc=!0)}if(Eo||G!==H){ot.buffers.depth.getReversed()&&H.reversedDepth!==!0&&(H._reversedDepth=!0,H.updateProjectionMatrix()),Qi.setValue(re,"projectionMatrix",H.projectionMatrix),Qi.setValue(re,"viewMatrix",H.matrixWorldInverse);let xc=Qi.map.cameraPosition;xc!==void 0&&xc.setValue(re,Ye.setFromMatrixPosition(H.matrixWorld)),bi.logarithmicDepthBuffer&&Qi.setValue(re,"logDepthBufFC",2/(Math.log(H.far+1)/Math.LN2)),(Ee.isMeshPhongMaterial||Ee.isMeshToonMaterial||Ee.isMeshLambertMaterial||Ee.isMeshBasicMaterial||Ee.isMeshStandardMaterial||Ee.isShaderMaterial)&&Qi.setValue(re,"isOrthographic",H.isOrthographicCamera===!0),G!==H&&(G=H,Tc=!0,md=!0)}if(xt.needsLights&&(Is.state.directionalShadowMap.length>0&&Qi.setValue(re,"directionalShadowMap",Is.state.directionalShadowMap,B),Is.state.spotShadowMap.length>0&&Qi.setValue(re,"spotShadowMap",Is.state.spotShadowMap,B),Is.state.pointShadowMap.length>0&&Qi.setValue(re,"pointShadowMap",Is.state.pointShadowMap,B)),Se.isSkinnedMesh){Qi.setOptional(re,Se,"bindMatrix"),Qi.setOptional(re,Se,"bindMatrixInverse");let tr=Se.skeleton;tr&&(tr.boneTexture===null&&tr.computeBoneTexture(),Qi.setValue(re,"boneTexture",tr.boneTexture,B))}Se.isBatchedMesh&&(Qi.setOptional(re,Se,"batchingTexture"),Qi.setValue(re,"batchingTexture",Se._matricesTexture,B),Qi.setOptional(re,Se,"batchingIdTexture"),Qi.setValue(re,"batchingIdTexture",Se._indirectTexture,B),Qi.setOptional(re,Se,"batchingColorTexture"),Se._colorsTexture!==null&&Qi.setValue(re,"batchingColorTexture",Se._colorsTexture,B));let Ac=Ae.morphAttributes;if((Ac.position!==void 0||Ac.normal!==void 0||Ac.color!==void 0)&&jt.update(Se,Ae,qs),(Tc||xt.receiveShadow!==Se.receiveShadow)&&(xt.receiveShadow=Se.receiveShadow,Qi.setValue(re,"receiveShadow",Se.receiveShadow)),(Ee.isMeshStandardMaterial||Ee.isMeshLambertMaterial||Ee.isMeshPhongMaterial)&&Ee.envMap===null&&ce.environment!==null&&(Mr.envMapIntensity.value=ce.environmentIntensity),Mr.dfgLUT!==void 0&&(Mr.dfgLUT.value=Pee()),Tc){if(Qi.setValue(re,"toneMappingExposure",M.toneMappingExposure),xt.needsLights&&cj(Mr,md),St&&Ee.fog===!0&&Me.refreshFogUniforms(Mr,St),Me.refreshMaterialUniforms(Mr,Ee,Ge,xe,T.state.transmissionRenderTarget[H.id]),xt.needsLights&&xt.lightProbeGrid){let tr=xt.lightProbeGrid;Mr.probesSH.value=tr.texture,Mr.probesMin.value.copy(tr.boundingBox.min),Mr.probesMax.value.copy(tr.boundingBox.max),Mr.probesResolution.value.copy(tr.resolution)}du.upload(re,YO(xt),Mr,B)}if(Ee.isShaderMaterial&&Ee.uniformsNeedUpdate===!0&&(du.upload(re,YO(xt),Mr,B),Ee.uniformsNeedUpdate=!1),Ee.isSpriteMaterial&&Qi.setValue(re,"center",Se.center),Qi.setValue(re,"modelViewMatrix",Se.modelViewMatrix),Qi.setValue(re,"normalMatrix",Se.normalMatrix),Qi.setValue(re,"modelMatrix",Se.matrixWorld),Ee.uniformsGroups!==void 0){let tr=Ee.uniformsGroups;for(let xc=0,pd=tr.length;xc0&&B.useMultisampledRTT(H)===!1?Ee=z.get(H).__webglMultisampledFramebuffer:Array.isArray(Dt)?Ee=Dt[Ae]:Ee=Dt,J.copy(H.viewport),Y.copy(H.scissor),Q=H.scissorTest}else J.copy(ie).multiplyScalar(Ge).floor(),Y.copy(_e).multiplyScalar(Ge).floor(),Q=Pe;if(Ae!==0&&(Ee=hj),ot.bindFramebuffer(re.FRAMEBUFFER,Ee)&&ot.drawBuffers(H,Ee),ot.viewport(J),ot.scissor(Y),ot.setScissorTest(Q),Se){let gt=z.get(H.texture);re.framebufferTexture2D(re.FRAMEBUFFER,re.COLOR_ATTACHMENT0,re.TEXTURE_CUBE_MAP_POSITIVE_X+ce,gt.__webglTexture,Ae)}else if(St){let gt=ce;for(let yt=0;yt1&&re.readBuffer(re.COLOR_ATTACHMENT0+gt),!bi.textureFormatReadable(oi)){Gt("WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}if(!bi.textureTypeReadable(ui)){Gt("WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}ce>=0&&ce<=H.width-Ee&&Ae>=0&&Ae<=H.height-Se&&re.readPixels(ce,Ae,Ee,Se,ae.convert(oi),ae.convert(ui),St)}finally{let Dt=w!==null?z.get(w).__webglFramebuffer:null;ot.bindFramebuffer(re.FRAMEBUFFER,Dt)}}},this.readRenderTargetPixelsAsync=async function(H,ce,Ae,Ee,Se,St,Rt,gt=0){if(!(H&&H.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let yt=z.get(H).__webglFramebuffer;if(H.isWebGLCubeRenderTarget&&Rt!==void 0&&(yt=yt[Rt]),yt)if(ce>=0&&ce<=H.width-Ee&&Ae>=0&&Ae<=H.height-Se){ot.bindFramebuffer(re.FRAMEBUFFER,yt);let Dt=H.textures[gt],oi=Dt.format,ui=Dt.type;if(H.textures.length>1&&re.readBuffer(re.COLOR_ATTACHMENT0+gt),!bi.textureFormatReadable(oi))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!bi.textureTypeReadable(ui))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");let Ot=re.createBuffer();re.bindBuffer(re.PIXEL_PACK_BUFFER,Ot),re.bufferData(re.PIXEL_PACK_BUFFER,St.byteLength,re.STREAM_READ),re.readPixels(ce,Ae,Ee,Se,ae.convert(oi),ae.convert(ui),0);let Yi=w!==null?z.get(w).__webglFramebuffer:null;ot.bindFramebuffer(re.FRAMEBUFFER,Yi);let Ir=re.fenceSync(re.SYNC_GPU_COMMANDS_COMPLETE,0);return re.flush(),await HF(re,Ir,4),re.bindBuffer(re.PIXEL_PACK_BUFFER,Ot),re.getBufferSubData(re.PIXEL_PACK_BUFFER,0,St),re.deleteBuffer(Ot),re.deleteSync(Ir),St}else throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")},this.copyFramebufferToTexture=function(H,ce=null,Ae=0){let Ee=Math.pow(2,-Ae),Se=Math.floor(H.image.width*Ee),St=Math.floor(H.image.height*Ee),Rt=ce!==null?ce.x:0,gt=ce!==null?ce.y:0;B.setTexture2D(H,0),re.copyTexSubImage2D(re.TEXTURE_2D,Ae,0,0,Rt,gt,Se,St),ot.unbindTexture()};let dj=re.createFramebuffer(),uj=re.createFramebuffer();this.copyTextureToTexture=function(H,ce,Ae=null,Ee=null,Se=0,St=0){let Rt,gt,yt,Dt,oi,ui,Ot,Yi,Ir,Tr=H.isCompressedTexture?H.mipmaps[St]:H.image;if(Ae!==null)Rt=Ae.max.x-Ae.min.x,gt=Ae.max.y-Ae.min.y,yt=Ae.isBox3?Ae.max.z-Ae.min.z:1,Dt=Ae.min.x,oi=Ae.min.y,ui=Ae.isBox3?Ae.min.z:0;else{let Mr=Math.pow(2,-Se);Rt=Math.floor(Tr.width*Mr),gt=Math.floor(Tr.height*Mr),H.isDataArrayTexture?yt=Tr.depth:H.isData3DTexture?yt=Math.floor(Tr.depth*Mr):yt=1,Dt=0,oi=0,ui=0}Ee!==null?(Ot=Ee.x,Yi=Ee.y,Ir=Ee.z):(Ot=0,Yi=0,Ir=0);let Zi=ae.convert(ce.format),pn=ae.convert(ce.type),xt;ce.isData3DTexture?(B.setTexture3D(ce,0),xt=re.TEXTURE_3D):ce.isDataArrayTexture||ce.isCompressedArrayTexture?(B.setTexture2DArray(ce,0),xt=re.TEXTURE_2D_ARRAY):(B.setTexture2D(ce,0),xt=re.TEXTURE_2D),ot.activeTexture(re.TEXTURE0),ot.pixelStorei(re.UNPACK_FLIP_Y_WEBGL,ce.flipY),ot.pixelStorei(re.UNPACK_PREMULTIPLY_ALPHA_WEBGL,ce.premultiplyAlpha),ot.pixelStorei(re.UNPACK_ALIGNMENT,ce.unpackAlignment);let Is=ot.getParameter(re.UNPACK_ROW_LENGTH),Oi=ot.getParameter(re.UNPACK_IMAGE_HEIGHT),qs=ot.getParameter(re.UNPACK_SKIP_PIXELS),Eo=ot.getParameter(re.UNPACK_SKIP_ROWS),Tc=ot.getParameter(re.UNPACK_SKIP_IMAGES);ot.pixelStorei(re.UNPACK_ROW_LENGTH,Tr.width),ot.pixelStorei(re.UNPACK_IMAGE_HEIGHT,Tr.height),ot.pixelStorei(re.UNPACK_SKIP_PIXELS,Dt),ot.pixelStorei(re.UNPACK_SKIP_ROWS,oi),ot.pixelStorei(re.UNPACK_SKIP_IMAGES,ui);let md=H.isDataArrayTexture||H.isData3DTexture,Qi=ce.isDataArrayTexture||ce.isData3DTexture;if(H.isDepthTexture){let Mr=z.get(H),Ac=z.get(ce),tr=z.get(Mr.__renderTarget),xc=z.get(Ac.__renderTarget);ot.bindFramebuffer(re.READ_FRAMEBUFFER,tr.__webglFramebuffer),ot.bindFramebuffer(re.DRAW_FRAMEBUFFER,xc.__webglFramebuffer);for(let pd=0;pd{Gs();xw={type:"change"},PI={type:"start"},bw={type:"end"},YE=new Io,Rw=new ia,Dee=Math.cos(70*Qp.DEG2RAD),Zr=new ne,ls=2*Math.PI,qi={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},yI=1e-6,KE=class extends Gp{constructor(e,t=null){super(e,t),this.state=qi.NONE,this.target=new ne,this.cursor=new ne,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minTargetRadius=0,this.maxTargetRadius=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.keyRotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.zoomToCursor=!1,this.autoRotate=!1,this.autoRotateSpeed=2,this.keys={LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"},this.mouseButtons={LEFT:Gc.ROTATE,MIDDLE:Gc.DOLLY,RIGHT:Gc.PAN},this.touches={ONE:kc.ROTATE,TWO:kc.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._cursorStyle="auto",this._domElementKeyEvents=null,this._lastPosition=new ne,this._lastQuaternion=new Kr,this._lastTargetPosition=new ne,this._quat=new Kr().setFromUnitVectors(e.up,new ne(0,1,0)),this._quatInverse=this._quat.clone().invert(),this._spherical=new ru,this._sphericalDelta=new ru,this._scale=1,this._panOffset=new ne,this._rotateStart=new Lt,this._rotateEnd=new Lt,this._rotateDelta=new Lt,this._panStart=new Lt,this._panEnd=new Lt,this._panDelta=new Lt,this._dollyStart=new Lt,this._dollyEnd=new Lt,this._dollyDelta=new Lt,this._dollyDirection=new ne,this._mouse=new Lt,this._performCursorZoom=!1,this._pointers=[],this._pointerPositions={},this._controlActive=!1,this._onPointerMove=Oee.bind(this),this._onPointerDown=Lee.bind(this),this._onPointerUp=Nee.bind(this),this._onContextMenu=kee.bind(this),this._onMouseWheel=Bee.bind(this),this._onKeyDown=Uee.bind(this),this._onTouchStart=Vee.bind(this),this._onTouchMove=Gee.bind(this),this._onMouseDown=Fee.bind(this),this._onMouseMove=wee.bind(this),this._interceptControlDown=Wee.bind(this),this._interceptControlUp=Hee.bind(this),this.domElement!==null&&this.connect(this.domElement),this.update()}set cursorStyle(e){this._cursorStyle=e,e==="grab"?this.domElement.style.cursor="grab":this.domElement.style.cursor="auto"}get cursorStyle(){return this._cursorStyle}connect(e){super.connect(e),this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointercancel",this._onPointerUp),this.domElement.addEventListener("contextmenu",this._onContextMenu),this.domElement.addEventListener("wheel",this._onMouseWheel,{passive:!1}),this.domElement.getRootNode().addEventListener("keydown",this._interceptControlDown,{passive:!0,capture:!0}),this.domElement.style.touchAction="none"}disconnect(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.ownerDocument.removeEventListener("pointermove",this._onPointerMove),this.domElement.ownerDocument.removeEventListener("pointerup",this._onPointerUp),this.domElement.removeEventListener("pointercancel",this._onPointerUp),this.domElement.removeEventListener("wheel",this._onMouseWheel),this.domElement.removeEventListener("contextmenu",this._onContextMenu),this.stopListenToKeyEvents(),this.domElement.getRootNode().removeEventListener("keydown",this._interceptControlDown,{capture:!0}),this.domElement.style.touchAction=""}dispose(){this.disconnect()}getPolarAngle(){return this._spherical.phi}getAzimuthalAngle(){return this._spherical.theta}getDistance(){return this.object.position.distanceTo(this.target)}listenToKeyEvents(e){e.addEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=e}stopListenToKeyEvents(){this._domElementKeyEvents!==null&&(this._domElementKeyEvents.removeEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=null)}saveState(){this.target0.copy(this.target),this.position0.copy(this.object.position),this.zoom0=this.object.zoom}reset(){this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.updateProjectionMatrix(),this.dispatchEvent(xw),this.update(),this.state=qi.NONE}pan(e,t){this._pan(e,t),this.update()}dollyIn(e){this._dollyIn(e),this.update()}dollyOut(e){this._dollyOut(e),this.update()}rotateLeft(e){this._rotateLeft(e),this.update()}rotateUp(e){this._rotateUp(e),this.update()}update(e=null){let t=this.object.position;Zr.copy(t).sub(this.target),Zr.applyQuaternion(this._quat),this._spherical.setFromVector3(Zr),this.autoRotate&&this.state===qi.NONE&&this._rotateLeft(this._getAutoRotationAngle(e)),this.enableDamping?(this._spherical.theta+=this._sphericalDelta.theta*this.dampingFactor,this._spherical.phi+=this._sphericalDelta.phi*this.dampingFactor):(this._spherical.theta+=this._sphericalDelta.theta,this._spherical.phi+=this._sphericalDelta.phi);let i=this.minAzimuthAngle,r=this.maxAzimuthAngle;isFinite(i)&&isFinite(r)&&(i<-Math.PI?i+=ls:i>Math.PI&&(i-=ls),r<-Math.PI?r+=ls:r>Math.PI&&(r-=ls),i<=r?this._spherical.theta=Math.max(i,Math.min(r,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(i+r)/2?Math.max(i,this._spherical.theta):Math.min(r,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let s=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{let a=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),s=a!=this._spherical.radius}if(Zr.setFromSpherical(this._spherical),Zr.applyQuaternion(this._quatInverse),t.copy(this.target).add(Zr),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let a=null;if(this.object.isPerspectiveCamera){let o=Zr.length();a=this._clampDistance(o*this._scale);let l=o-a;this.object.position.addScaledVector(this._dollyDirection,l),this.object.updateMatrixWorld(),s=!!l}else if(this.object.isOrthographicCamera){let o=new ne(this._mouse.x,this._mouse.y,0);o.unproject(this.object);let l=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),s=l!==this.object.zoom;let c=new ne(this._mouse.x,this._mouse.y,0);c.unproject(this.object),this.object.position.sub(c).add(o),this.object.updateMatrixWorld(),a=Zr.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),this.zoomToCursor=!1;a!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(a).add(this.object.position):(YE.origin.copy(this.object.position),YE.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(YE.direction))yI||8*(1-this._lastQuaternion.dot(this.object.quaternion))>yI||this._lastTargetPosition.distanceToSquared(this.target)>yI?(this.dispatchEvent(xw),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e!==null?ls/60*this.autoRotateSpeed*e:ls/60/60*this.autoRotateSpeed}_getZoomScale(e){let t=Math.abs(e*.01);return Math.pow(.95,this.zoomSpeed*t)}_rotateLeft(e){this._sphericalDelta.theta-=e}_rotateUp(e){this._sphericalDelta.phi-=e}_panLeft(e,t){Zr.setFromMatrixColumn(t,0),Zr.multiplyScalar(-e),this._panOffset.add(Zr)}_panUp(e,t){this.screenSpacePanning===!0?Zr.setFromMatrixColumn(t,1):(Zr.setFromMatrixColumn(t,0),Zr.crossVectors(this.object.up,Zr)),Zr.multiplyScalar(e),this._panOffset.add(Zr)}_pan(e,t){let i=this.domElement;if(this.object.isPerspectiveCamera){let r=this.object.position;Zr.copy(r).sub(this.target);let s=Zr.length();s*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*e*s/i.clientHeight,this.object.matrix),this._panUp(2*t*s/i.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(e*(this.object.right-this.object.left)/this.object.zoom/i.clientWidth,this.object.matrix),this._panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/i.clientHeight,this.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),this.enablePan=!1)}_dollyOut(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_dollyIn(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_updateZoomParameters(e,t){if(!this.zoomToCursor)return;this._performCursorZoom=!0;let i=this.domElement.getBoundingClientRect(),r=e-i.left,s=t-i.top,a=i.width,o=i.height;this._mouse.x=r/a*2-1,this._mouse.y=-(s/o)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(e){return Math.max(this.minDistance,Math.min(this.maxDistance,e))}_handleMouseDownRotate(e){this._rotateStart.set(e.clientX,e.clientY)}_handleMouseDownDolly(e){this._updateZoomParameters(e.clientX,e.clientX),this._dollyStart.set(e.clientX,e.clientY)}_handleMouseDownPan(e){this._panStart.set(e.clientX,e.clientY)}_handleMouseMoveRotate(e){this._rotateEnd.set(e.clientX,e.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;this._rotateLeft(ls*this._rotateDelta.x/t.clientHeight),this._rotateUp(ls*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(e){this._dollyEnd.set(e.clientX,e.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(e){this._panEnd.set(e.clientX,e.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(e){this._updateZoomParameters(e.clientX,e.clientY),e.deltaY<0?this._dollyIn(this._getZoomScale(e.deltaY)):e.deltaY>0&&this._dollyOut(this._getZoomScale(e.deltaY)),this.update()}_handleKeyDown(e){let t=!1;switch(e.code){case this.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(ls*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),t=!0;break;case this.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(-ls*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),t=!0;break;case this.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(ls*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),t=!0;break;case this.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(-ls*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),t=!0;break}t&&(e.preventDefault(),this.update())}_handleTouchStartRotate(e){if(this._pointers.length===1)this._rotateStart.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._rotateStart.set(i,r)}}_handleTouchStartPan(e){if(this._pointers.length===1)this._panStart.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._panStart.set(i,r)}}_handleTouchStartDolly(e){let t=this._getSecondPointerPosition(e),i=e.pageX-t.x,r=e.pageY-t.y,s=Math.sqrt(i*i+r*r);this._dollyStart.set(0,s)}_handleTouchStartDollyPan(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enablePan&&this._handleTouchStartPan(e)}_handleTouchStartDollyRotate(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enableRotate&&this._handleTouchStartRotate(e)}_handleTouchMoveRotate(e){if(this._pointers.length==1)this._rotateEnd.set(e.pageX,e.pageY);else{let i=this._getSecondPointerPosition(e),r=.5*(e.pageX+i.x),s=.5*(e.pageY+i.y);this._rotateEnd.set(r,s)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;this._rotateLeft(ls*this._rotateDelta.x/t.clientHeight),this._rotateUp(ls*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(e){if(this._pointers.length===1)this._panEnd.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._panEnd.set(i,r)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(e){let t=this._getSecondPointerPosition(e),i=e.pageX-t.x,r=e.pageY-t.y,s=Math.sqrt(i*i+r*r);this._dollyEnd.set(0,s),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);let a=(e.pageX+t.x)*.5,o=(e.pageY+t.y)*.5;this._updateZoomParameters(a,o)}_handleTouchMoveDollyPan(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enablePan&&this._handleTouchMovePan(e)}_handleTouchMoveDollyRotate(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enableRotate&&this._handleTouchMoveRotate(e)}_addPointer(e){this._pointers.push(e.pointerId)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let t=0;t{Gs();jE=class extends oh{constructor(){super(),this.name="RoomEnvironment",this.position.y=-3.5;let e=new Bc;e.deleteAttribute("uv");let t=new rs({side:fn}),i=new rs,r=new ka(16777215,900,28,2);r.position.set(.418,16.199,.3),this.add(r);let s=new ci(e,t);s.position.set(-.757,13.219,.717),s.scale.set(31.713,28.305,28.591),this.add(s);let a=new lh(e,i,6),o=new nr;o.position.set(-10.906,2.009,1.846),o.rotation.set(0,-.195,0),o.scale.set(2.328,7.905,4.651),o.updateMatrix(),a.setMatrixAt(0,o.matrix),o.position.set(-5.607,-.754,-.758),o.rotation.set(0,.994,0),o.scale.set(1.97,1.534,3.955),o.updateMatrix(),a.setMatrixAt(1,o.matrix),o.position.set(6.167,.857,7.803),o.rotation.set(0,.561,0),o.scale.set(3.927,6.285,3.687),o.updateMatrix(),a.setMatrixAt(2,o.matrix),o.position.set(-2.017,.018,6.124),o.rotation.set(0,.333,0),o.scale.set(2.002,4.566,2.064),o.updateMatrix(),a.setMatrixAt(3,o.matrix),o.position.set(2.291,-.756,-2.621),o.rotation.set(0,-.286,0),o.scale.set(1.546,1.552,1.496),o.updateMatrix(),a.setMatrixAt(4,o.matrix),o.position.set(-2.193,-.369,-5.547),o.rotation.set(0,.516,0),o.scale.set(3.875,3.487,2.986),o.updateMatrix(),a.setMatrixAt(5,o.matrix),this.add(a);let l=new ci(e,pu(50));l.position.set(-16.116,14.37,8.208),l.scale.set(.1,2.428,2.739),this.add(l);let c=new ci(e,pu(50));c.position.set(-16.109,18.021,-8.207),c.scale.set(.1,2.425,2.751),this.add(c);let f=new ci(e,pu(17));f.position.set(14.904,12.198,-1.832),f.scale.set(.15,4.265,6.331),this.add(f);let h=new ci(e,pu(43));h.position.set(-.462,8.89,14.52),h.scale.set(4.38,5.441,.088),this.add(h);let d=new ci(e,pu(20));d.position.set(3.235,11.486,-12.541),d.scale.set(2.5,2,.1),this.add(d);let u=new ci(e,pu(100));u.position.set(0,20,0),u.scale.set(1,.1,1),this.add(u)}dispose(){let e=new Set;this.traverse(t=>{t.isMesh&&(e.add(t.geometry),e.add(t.material))});for(let t of e)t.dispose()}}});var qE,DI,Cw=C(()=>{Gs();qE=class extends sn{constructor(e){super(e)}load(e,t,i,r){let s=this,a=this.path===""?Wa.extractUrlBase(e):this.path,o=new as(this.manager);o.setPath(this.path),o.setRequestHeader(this.requestHeader),o.setWithCredentials(this.withCredentials),o.load(e,function(l){try{t(s.parse(l,a))}catch(c){r?r(c):console.error(c),s.manager.itemError(e)}},i,r)}setMaterialOptions(e){return this.materialOptions=e,this}parse(e,t){let i=e.split(` -`),r={},s=/\s+/,a={};for(let l=0;l=0?c.substring(0,f):c;h=h.toLowerCase();let d=f>=0?c.substring(f+1):"";if(d=d.trim(),h==="newmtl")r={name:d},a[d]=r;else if(h==="ka"||h==="kd"||h==="ks"||h==="ke"){let u=d.split(s,3);r[h]=[parseFloat(u[0]),parseFloat(u[1]),parseFloat(u[2])]}else r[h]=d}let o=new DI(this.resourcePath||t,this.materialOptions);return o.setCrossOrigin(this.crossOrigin),o.setManager(this.manager),o.setMaterials(a),o}},DI=class{constructor(e="",t={}){this.baseUrl=e,this.options=t,this.materialsInfo={},this.materials={},this.materialsArray=[],this.nameLookup={},this.crossOrigin="anonymous",this.side=this.options.side!==void 0?this.options.side:Os,this.wrap=this.options.wrap!==void 0?this.options.wrap:Ro}setCrossOrigin(e){return this.crossOrigin=e,this}setManager(e){this.manager=e}setMaterials(e){this.materialsInfo=this.convert(e),this.materials={},this.materialsArray=[],this.nameLookup={}}convert(e){if(!this.options)return e;let t={};for(let i in e){let r=e[i],s={};t[i]=s;for(let a in r){let o=!0,l=r[a],c=a.toLowerCase();switch(c){case"kd":case"ka":case"ks":this.options&&this.options.normalizeRGB&&(l=[l[0]/255,l[1]/255,l[2]/255]),this.options&&this.options.ignoreZeroRGBs&&l[0]===0&&l[1]===0&&l[2]===0&&(o=!1);break;default:break}o&&(s[c]=l)}}return t}preload(){for(let e in this.materialsInfo)this.create(e)}getIndex(e){return this.nameLookup[e]}getAsArray(){let e=0;for(let t in this.materialsInfo)this.materialsArray[e]=this.create(t),this.nameLookup[t]=e,e++;return this.materialsArray}create(e){return this.materials[e]===void 0&&this.createMaterial_(e),this.materials[e]}createMaterial_(e){let t=this,i=this.materialsInfo[e],r={name:e,side:this.side};function s(o,l){return typeof l!="string"||l===""?"":/^https?:\/\//i.test(l)?l:o+l}function a(o,l){if(r[o])return;let c=t.getTextureParams(l,r),f=t.loadTexture(s(t.baseUrl,c.url));f.repeat.copy(c.scale),f.offset.copy(c.offset),f.wrapS=t.wrap,f.wrapT=t.wrap,(o==="map"||o==="emissiveMap")&&(f.colorSpace=Ni),r[o]=f}for(let o in i){let l=i[o],c;if(l!=="")switch(o.toLowerCase()){case"kd":r.color=ai.colorSpaceToWorking(new ct().fromArray(l),Ni);break;case"ks":r.specular=ai.colorSpaceToWorking(new ct().fromArray(l),Ni);break;case"ke":r.emissive=ai.colorSpaceToWorking(new ct().fromArray(l),Ni);break;case"map_kd":a("map",l);break;case"map_ks":a("specularMap",l);break;case"map_ke":a("emissiveMap",l);break;case"norm":a("normalMap",l);break;case"map_bump":case"bump":a("bumpMap",l);break;case"disp":a("displacementMap",l);break;case"map_d":a("alphaMap",l),r.transparent=!0;break;case"ns":r.shininess=parseFloat(l);break;case"d":c=parseFloat(l),c<1&&(r.opacity=c,r.transparent=!0);break;case"tr":c=parseFloat(l),this.options&&this.options.invertTrProperty&&(c=1-c),c>0&&(r.opacity=1-c,r.transparent=!0);break;default:break}}return this.materials[e]=new hh(r),this.materials[e]}getTextureParams(e,t){let i={scale:new Lt(1,1),offset:new Lt(0,0)},r=e.split(/\s+/),s;return s=r.indexOf("-bm"),s>=0&&(t.bumpScale=parseFloat(r[s+1]),r.splice(s,2)),s=r.indexOf("-mm"),s>=0&&(t.displacementBias=parseFloat(r[s+1]),t.displacementScale=parseFloat(r[s+2]),r.splice(s,3)),s=r.indexOf("-s"),s>=0&&(i.scale.set(parseFloat(r[s+1]),parseFloat(r[s+2])),r.splice(s,4)),s=r.indexOf("-o"),s>=0&&(i.offset.set(parseFloat(r[s+1]),parseFloat(r[s+2])),r.splice(s,4)),i.url=r.join(" ").trim(),i}loadTexture(e,t,i,r,s){let a=this.manager!==void 0?this.manager:VE,o=a.getHandler(e);o===null&&(o=new uh(a)),o.setCrossOrigin&&o.setCrossOrigin(this.crossOrigin);let l=o.load(e,i,r,s);return t!==void 0&&(l.mapping=t),l}}});function jee(){let n={objects:[],object:{},vertices:[],normals:[],colors:[],uvs:[],materials:{},materialLibraries:[],startObject:function(e,t){if(this.object&&this.object.fromDeclaration===!1){this.object.name=e,this.object.fromDeclaration=t!==!1;return}let i=this.object&&typeof this.object.currentMaterial=="function"?this.object.currentMaterial():void 0;if(this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0),this.object={name:e||"",fromDeclaration:t!==!1,geometry:{vertices:[],normals:[],colors:[],uvs:[],hasUVIndices:!1},materials:[],smooth:!0,startMaterial:function(r,s){let a=this._finalize(!1);a&&(a.inherited||a.groupCount<=0)&&this.materials.splice(a.index,1);let o={index:this.materials.length,name:r||"",mtllib:Array.isArray(s)&&s.length>0?s[s.length-1]:"",smooth:a!==void 0?a.smooth:this.smooth,groupStart:a!==void 0?a.groupEnd:0,groupEnd:-1,groupCount:-1,inherited:!1,clone:function(l){let c={index:typeof l=="number"?l:this.index,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0,groupEnd:-1,groupCount:-1,inherited:!1};return c.clone=this.clone.bind(c),c}};return this.materials.push(o),o},currentMaterial:function(){if(this.materials.length>0)return this.materials[this.materials.length-1]},_finalize:function(r){let s=this.currentMaterial();if(s&&s.groupEnd===-1&&(s.groupEnd=this.geometry.vertices.length/3,s.groupCount=s.groupEnd-s.groupStart,s.inherited=!1),r&&this.materials.length>1)for(let a=this.materials.length-1;a>=0;a--)this.materials[a].groupCount<=0&&this.materials.splice(a,1);return r&&this.materials.length===0&&this.materials.push({name:"",smooth:this.smooth}),s}},i&&i.name&&typeof i.clone=="function"){let r=i.clone(0);r.inherited=!0,this.object.materials.push(r)}this.objects.push(this.object)},finalize:function(){this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0)},parseVertexIndex:function(e,t){let i=parseInt(e,10);return(i>=0?i-1:i+t/3)*3},parseNormalIndex:function(e,t){let i=parseInt(e,10);return(i>=0?i-1:i+t/3)*3},parseUVIndex:function(e,t){let i=parseInt(e,10);return(i>=0?i-1:i+t/2)*2},addVertex:function(e,t,i){let r=this.vertices,s=this.object.geometry.vertices;s.push(r[e+0],r[e+1],r[e+2]),s.push(r[t+0],r[t+1],r[t+2]),s.push(r[i+0],r[i+1],r[i+2])},addVertexPoint:function(e){let t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addVertexLine:function(e){let t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addNormal:function(e,t,i){let r=this.normals,s=this.object.geometry.normals;s.push(r[e+0],r[e+1],r[e+2]),s.push(r[t+0],r[t+1],r[t+2]),s.push(r[i+0],r[i+1],r[i+2])},addFaceNormal:function(e,t,i){let r=this.vertices,s=this.object.geometry.normals;Pw.fromArray(r,e),LI.fromArray(r,t),Dw.fromArray(r,i),oa.subVectors(Dw,LI),Lw.subVectors(Pw,LI),oa.cross(Lw),oa.normalize(),s.push(oa.x,oa.y,oa.z),s.push(oa.x,oa.y,oa.z),s.push(oa.x,oa.y,oa.z)},addColor:function(e,t,i){let r=this.colors,s=this.object.geometry.colors;r[e]!==void 0&&s.push(r[e+0],r[e+1],r[e+2]),r[t]!==void 0&&s.push(r[t+0],r[t+1],r[t+2]),r[i]!==void 0&&s.push(r[i+0],r[i+1],r[i+2])},addUV:function(e,t,i){let r=this.uvs,s=this.object.geometry.uvs;s.push(r[e+0],r[e+1]),s.push(r[t+0],r[t+1]),s.push(r[i+0],r[i+1])},addDefaultUV:function(){let e=this.object.geometry.uvs;e.push(0,0),e.push(0,0),e.push(0,0)},addUVLine:function(e){let t=this.uvs;this.object.geometry.uvs.push(t[e+0],t[e+1])},addFace:function(e,t,i,r,s,a,o,l,c){let f=this.vertices.length,h=this.parseVertexIndex(e,f),d=this.parseVertexIndex(t,f),u=this.parseVertexIndex(i,f);if(this.addVertex(h,d,u),this.addColor(h,d,u),o!==void 0&&o!==""){let m=this.normals.length;h=this.parseNormalIndex(o,m),d=this.parseNormalIndex(l,m),u=this.parseNormalIndex(c,m),this.addNormal(h,d,u)}else this.addFaceNormal(h,d,u);if(r!==void 0&&r!==""){let m=this.uvs.length;h=this.parseUVIndex(r,m),d=this.parseUVIndex(s,m),u=this.parseUVIndex(a,m),this.addUV(h,d,u),this.object.geometry.hasUVIndices=!0}else this.addDefaultUV()},addPointGeometry:function(e){this.object.geometry.type="Points";let t=this.vertices.length;for(let i=0,r=e.length;i{Gs();zee=/^[og]\s*(.+)?/,Xee=/^mtllib /,Yee=/^usemtl /,Kee=/^usemap /,yw=/\s+/,Pw=new ne,LI=new ne,Dw=new ne,Lw=new ne,oa=new ne,ZE=new ct;QE=class extends sn{constructor(e){super(e),this.materials=null}load(e,t,i,r){let s=this,a=new as(this.manager);a.setPath(this.path),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,function(o){try{t(s.parse(o))}catch(l){r?r(l):console.error(l),s.manager.itemError(e)}},i,r)}setMaterials(e){return this.materials=e,this}parse(e){let t=new jee;e.indexOf(`\r +}`,G0=class{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(e,t){if(this.texture===null){let i=new Bp(e.texture);(e.depthNear!==t.depthNear||e.depthFar!==t.depthFar)&&(this.depthNear=e.depthNear,this.depthFar=e.depthFar),this.texture=i}}getMesh(e){if(this.texture!==null&&this.mesh===null){let t=e.cameras[0].viewport,i=new Fs({vertexShader:Yee,fragmentShader:Kee,uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new ci(new fh(20,20),i)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}},k0=class extends la{constructor(e,t){super();let i=this,r=null,s=1,a=null,o="local-floor",l=1,c=null,f=null,h=null,d=null,u=null,m=null,_=typeof XRWebGLBinding!="undefined",p=new G0,g={},v=t.getContextAttributes(),x=null,A=null,S=[],E=[],R=new Lt,I=null,y=new Br;y.viewport=new ji;let M=new Br;M.viewport=new ji;let D=[y,M],O=new eE,V=null,N=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(se){let pe=S[se];return pe===void 0&&(pe=new $d,S[se]=pe),pe.getTargetRaySpace()},this.getControllerGrip=function(se){let pe=S[se];return pe===void 0&&(pe=new $d,S[se]=pe),pe.getGripSpace()},this.getHand=function(se){let pe=S[se];return pe===void 0&&(pe=new $d,S[se]=pe),pe.getHandSpace()};function F(se){let pe=E.indexOf(se.inputSource);if(pe===-1)return;let ie=S[pe];ie!==void 0&&(ie.update(se.inputSource,se.frame,c||a),ie.dispatchEvent({type:se.type,data:se.inputSource}))}function U(){r.removeEventListener("select",F),r.removeEventListener("selectstart",F),r.removeEventListener("selectend",F),r.removeEventListener("squeeze",F),r.removeEventListener("squeezestart",F),r.removeEventListener("squeezeend",F),r.removeEventListener("end",U),r.removeEventListener("inputsourceschange",W);for(let se=0;se=0&&(E[_e]=null,S[_e].disconnect(ie))}for(let pe=0;pe=E.length){E.push(ie),_e=ue;break}else if(E[ue]===null){E[ue]=ie,_e=ue;break}if(_e===-1)break}let Pe=S[_e];Pe&&Pe.connect(ie)}}let $=new ne,q=new ne;function Z(se,pe,ie){$.setFromMatrixPosition(pe.matrixWorld),q.setFromMatrixPosition(ie.matrixWorld);let _e=$.distanceTo(q),Pe=pe.projectionMatrix.elements,ue=ie.projectionMatrix.elements,be=Pe[14]/(Pe[10]-1),Ze=Pe[14]/(Pe[10]+1),Tt=(Pe[9]+1)/Pe[5],Ye=(Pe[9]-1)/Pe[5],Ke=(Pe[8]-1)/Pe[0],he=(ue[8]+1)/ue[0],we=be*Ke,Vt=be*he,re=_e/(-Ke+he),di=re*-Ke;if(pe.matrixWorld.decompose(se.position,se.quaternion,se.scale),se.translateX(di),se.translateZ(re),se.matrixWorld.compose(se.position,se.quaternion,se.scale),se.matrixWorldInverse.copy(se.matrixWorld).invert(),Pe[10]===-1)se.projectionMatrix.copy(pe.projectionMatrix),se.projectionMatrixInverse.copy(pe.projectionMatrixInverse);else{let Xt=be+re,bi=Ze+re,ot=we-di,Xi=Vt+(_e-di),z=Tt*Ze/bi*Xt,B=Ye*Ze/bi*Xt;se.projectionMatrix.makePerspective(ot,Xi,z,B,Xt,bi),se.projectionMatrixInverse.copy(se.projectionMatrix).invert()}}function X(se,pe){pe===null?se.matrixWorld.copy(se.matrix):se.matrixWorld.multiplyMatrices(pe.matrixWorld,se.matrix),se.matrixWorldInverse.copy(se.matrixWorld).invert()}this.updateCamera=function(se){if(r===null)return;let pe=se.near,ie=se.far;p.texture!==null&&(p.depthNear>0&&(pe=p.depthNear),p.depthFar>0&&(ie=p.depthFar)),O.near=M.near=y.near=pe,O.far=M.far=y.far=ie,(V!==O.near||N!==O.far)&&(r.updateRenderState({depthNear:O.near,depthFar:O.far}),V=O.near,N=O.far),O.layers.mask=se.layers.mask|6,y.layers.mask=O.layers.mask&-5,M.layers.mask=O.layers.mask&-3;let _e=se.parent,Pe=O.cameras;X(O,_e);for(let ue=0;ue{function St(){if(Ee.forEach(function(Rt){z.get(Rt).currentProgram.isReady()&&Ee.delete(Rt)}),Ee.size===0){Se(H);return}setTimeout(St,10)}Xt.get("KHR_parallel_shader_compile")!==null?St():setTimeout(St,10)})};let hl=null;function Ij(H){hl&&hl(H)}function QO(){Yf.stop()}function $O(){Yf.start()}let Yf=new MF;Yf.setAnimationLoop(Ij),typeof self!="undefined"&&Yf.setContext(self),this.setAnimationLoop=function(H){hl=H,rt.setAnimationLoop(H),H===null?Yf.stop():Yf.start()},rt.addEventListener("sessionstart",QO),rt.addEventListener("sessionend",$O),this.render=function(H,ce){if(ce!==void 0&&ce.isCamera!==!0){Gt("WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(D===!0)return;O!==null&&O.renderStart(H,ce);let Ae=rt.enabled===!0&&rt.isPresenting===!0,Ee=y!==null&&(F===null||Ae)&&y.begin(M,F);if(H.matrixWorldAutoUpdate===!0&&H.updateMatrixWorld(),ce.parent===null&&ce.matrixWorldAutoUpdate===!0&&ce.updateMatrixWorld(),rt.enabled===!0&&rt.isPresenting===!0&&(y===null||y.isCompositing()===!1)&&(rt.cameraAutoUpdate===!0&&rt.updateCamera(ce),ce=rt.getCamera()),H.isScene===!0&&H.onBeforeRender(M,H,ce,F),E=mt.get(H,I.length),E.init(ce),E.state.textureUnits=B.getTextureUnits(),I.push(E),Tt.multiplyMatrices(ce.projectionMatrix,ce.matrixWorldInverse),ue.setFromProjectionMatrix(Tt,Va,ce.reversedDepth),Ze=this.localClippingEnabled,be=At.init(this.clippingPlanes,Ze),S=De.get(H,R.length),S.init(),R.push(S),rt.enabled===!0&&rt.isPresenting===!0){let Rt=M.xr.getDepthSensingMesh();Rt!==null&&rb(Rt,ce,-1/0,M.sortObjects)}rb(H,ce,0,M.sortObjects),S.finish(),M.sortObjects===!0&&S.sort(se,pe),we=rt.enabled===!1||rt.isPresenting===!1||rt.hasDepthSensing()===!1,we&&Je.addToRenderList(S,H),this.info.render.frame++,be===!0&&At.beginShadows();let Se=E.state.shadowsArray;if(at.render(Se,H,ce),be===!0&&At.endShadows(),this.info.autoReset===!0&&this.info.reset(),(Ee&&y.hasRenderPass())===!1){let Rt=S.opaque,gt=S.transmissive;if(E.setupLights(),ce.isArrayCamera){let yt=ce.cameras;if(gt.length>0)for(let Dt=0,oi=yt.length;Dt0&&eN(Rt,gt,H,ce),we&&Je.render(H),JO(S,H,ce)}F!==null&&N===0&&(B.updateMultisampleRenderTarget(F),B.updateRenderTargetMipmap(F)),Ee&&y.end(M),H.isScene===!0&&H.onAfterRender(M,H,ce),et.resetDefaultState(),U=-1,W=null,I.pop(),I.length>0?(E=I[I.length-1],B.setTextureUnits(E.state.textureUnits),be===!0&&At.setGlobalState(M.clippingPlanes,E.state.camera)):E=null,R.pop(),R.length>0?S=R[R.length-1]:S=null,O!==null&&O.renderEnd()};function rb(H,ce,Ae,Ee){if(H.visible===!1)return;if(H.layers.test(ce.layers)){if(H.isGroup)Ae=H.renderOrder;else if(H.isLOD)H.autoUpdate===!0&&H.update(ce);else if(H.isLightProbeGrid)E.pushLightProbeGrid(H);else if(H.isLight)E.pushLight(H),H.castShadow&&E.pushShadow(H);else if(H.isSprite){if(!H.frustumCulled||ue.intersectsSprite(H)){Ee&&Ke.setFromMatrixPosition(H.matrixWorld).applyMatrix4(Tt);let Rt=je.update(H),gt=H.material;gt.visible&&S.push(H,Rt,gt,Ae,Ke.z,null)}}else if((H.isMesh||H.isLine||H.isPoints)&&(!H.frustumCulled||ue.intersectsObject(H))){let Rt=je.update(H),gt=H.material;if(Ee&&(H.boundingSphere!==void 0?(H.boundingSphere===null&&H.computeBoundingSphere(),Ke.copy(H.boundingSphere.center)):(Rt.boundingSphere===null&&Rt.computeBoundingSphere(),Ke.copy(Rt.boundingSphere.center)),Ke.applyMatrix4(H.matrixWorld).applyMatrix4(Tt)),Array.isArray(gt)){let yt=Rt.groups;for(let Dt=0,oi=yt.length;Dt0&&Hg(Se,ce,Ae),St.length>0&&Hg(St,ce,Ae),Rt.length>0&&Hg(Rt,ce,Ae),ot.buffers.depth.setTest(!0),ot.buffers.depth.setMask(!0),ot.buffers.color.setMask(!0),ot.setPolygonOffset(!1)}function eN(H,ce,Ae,Ee){if((Ae.isScene===!0?Ae.overrideMaterial:null)!==null)return;if(E.state.transmissionRenderTarget[Ee.id]===void 0){let Ot=Xt.has("EXT_color_buffer_half_float")||Xt.has("EXT_color_buffer_float");E.state.transmissionRenderTarget[Ee.id]=new Ns(1,1,{generateMipmaps:!0,type:Ot?Fo:os,minFilter:Ya,samples:Math.max(4,bi.samples),stencilBuffer:s,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:ai.workingColorSpace})}let St=E.state.transmissionRenderTarget[Ee.id],Rt=Ee.viewport||$;St.setSize(Rt.z*M.transmissionResolutionScale,Rt.w*M.transmissionResolutionScale);let gt=M.getRenderTarget(),yt=M.getActiveCubeFace(),Dt=M.getActiveMipmapLevel();M.setRenderTarget(St),M.getClearColor(X),Y=M.getClearAlpha(),Y<1&&M.setClearColor(16777215,.5),M.clear(),we&&Je.render(Ae);let oi=M.toneMapping;M.toneMapping=Bs;let ui=Ee.viewport;if(Ee.viewport!==void 0&&(Ee.viewport=void 0),E.setupLightsView(Ee),be===!0&&At.setGlobalState(M.clippingPlanes,Ee),Hg(H,Ae,Ee),B.updateMultisampleRenderTarget(St),B.updateRenderTargetMipmap(St),Xt.has("WEBGL_multisampled_render_to_texture")===!1){let Ot=!1;for(let Yi=0,Mr=ce.length;Yi0,Ee.currentProgram=ui,Ee.uniformsList=null,ui}function iN(H){if(H.uniformsList===null){let ce=H.currentProgram.getUniforms();H.uniformsList=pu.seqWithValue(ce.seq,H.uniforms)}return H.uniformsList}function rN(H,ce){let Ae=z.get(H);Ae.outputColorSpace=ce.outputColorSpace,Ae.batching=ce.batching,Ae.batchingColor=ce.batchingColor,Ae.instancing=ce.instancing,Ae.instancingColor=ce.instancingColor,Ae.instancingMorph=ce.instancingMorph,Ae.skinning=ce.skinning,Ae.morphTargets=ce.morphTargets,Ae.morphNormals=ce.morphNormals,Ae.morphColors=ce.morphColors,Ae.morphTargetsCount=ce.morphTargetsCount,Ae.numClippingPlanes=ce.numClippingPlanes,Ae.numIntersection=ce.numClipIntersection,Ae.vertexAlphas=ce.vertexAlphas,Ae.vertexTangents=ce.vertexTangents,Ae.toneMapping=ce.toneMapping}function Mj(H,ce){if(H.length===0)return null;if(H.length===1)return H[0].texture!==null?H[0]:null;A.setFromMatrixPosition(ce.matrixWorld);for(let Ae=0,Ee=H.length;Ae0),Ot=!!Ae.morphAttributes.position,Yi=!!Ae.morphAttributes.normal,Mr=!!Ae.morphAttributes.color,xr=Bs;Ee.toneMapped&&(F===null||F.isXRRenderTarget===!0)&&(xr=M.toneMapping);let Zi=Ae.morphAttributes.position||Ae.morphAttributes.normal||Ae.morphAttributes.color,gn=Zi!==void 0?Zi.length:0,xt=z.get(Ee),Is=E.state.lights;if(be===!0&&(Ze===!0||H!==W)){let tr=H===W&&Ee.id===U;At.setState(Ee,H,tr)}let Oi=!1;Ee.version===xt.__version?(xt.needsLights&&xt.lightsStateVersion!==Is.state.version||xt.outputColorSpace!==gt||Se.isBatchedMesh&&xt.batching===!1||!Se.isBatchedMesh&&xt.batching===!0||Se.isBatchedMesh&&xt.batchingColor===!0&&Se.colorTexture===null||Se.isBatchedMesh&&xt.batchingColor===!1&&Se.colorTexture!==null||Se.isInstancedMesh&&xt.instancing===!1||!Se.isInstancedMesh&&xt.instancing===!0||Se.isSkinnedMesh&&xt.skinning===!1||!Se.isSkinnedMesh&&xt.skinning===!0||Se.isInstancedMesh&&xt.instancingColor===!0&&Se.instanceColor===null||Se.isInstancedMesh&&xt.instancingColor===!1&&Se.instanceColor!==null||Se.isInstancedMesh&&xt.instancingMorph===!0&&Se.morphTexture===null||Se.isInstancedMesh&&xt.instancingMorph===!1&&Se.morphTexture!==null||xt.envMap!==Dt||Ee.fog===!0&&xt.fog!==St||xt.numClippingPlanes!==void 0&&(xt.numClippingPlanes!==At.numPlanes||xt.numIntersection!==At.numIntersection)||xt.vertexAlphas!==oi||xt.vertexTangents!==ui||xt.morphTargets!==Ot||xt.morphNormals!==Yi||xt.morphColors!==Mr||xt.toneMapping!==xr||xt.morphTargetsCount!==gn||!!xt.lightProbeGrid!=E.state.lightProbeGridArray.length>0)&&(Oi=!0):(Oi=!0,xt.__version=Ee.version);let $s=xt.currentProgram;Oi===!0&&($s=zg(Ee,ce,Se),O&&Ee.isNodeMaterial&&O.onUpdateProgram(Ee,$s,xt));let So=!1,Rc=!1,_d=!1,Qi=$s.getUniforms(),Cr=xt.uniforms;if(ot.useProgram($s.program)&&(So=!0,Rc=!0,_d=!0),Ee.id!==U&&(U=Ee.id,Rc=!0),xt.needsLights){let tr=Mj(E.state.lightProbeGridArray,Se);xt.lightProbeGrid!==tr&&(xt.lightProbeGrid=tr,Rc=!0)}if(So||W!==H){ot.buffers.depth.getReversed()&&H.reversedDepth!==!0&&(H._reversedDepth=!0,H.updateProjectionMatrix()),Qi.setValue(re,"projectionMatrix",H.projectionMatrix),Qi.setValue(re,"viewMatrix",H.matrixWorldInverse);let Ic=Qi.map.cameraPosition;Ic!==void 0&&Ic.setValue(re,Ye.setFromMatrixPosition(H.matrixWorld)),bi.logarithmicDepthBuffer&&Qi.setValue(re,"logDepthBufFC",2/(Math.log(H.far+1)/Math.LN2)),(Ee.isMeshPhongMaterial||Ee.isMeshToonMaterial||Ee.isMeshLambertMaterial||Ee.isMeshBasicMaterial||Ee.isMeshStandardMaterial||Ee.isShaderMaterial)&&Qi.setValue(re,"isOrthographic",H.isOrthographicCamera===!0),W!==H&&(W=H,Rc=!0,_d=!0)}if(xt.needsLights&&(Is.state.directionalShadowMap.length>0&&Qi.setValue(re,"directionalShadowMap",Is.state.directionalShadowMap,B),Is.state.spotShadowMap.length>0&&Qi.setValue(re,"spotShadowMap",Is.state.spotShadowMap,B),Is.state.pointShadowMap.length>0&&Qi.setValue(re,"pointShadowMap",Is.state.pointShadowMap,B)),Se.isSkinnedMesh){Qi.setOptional(re,Se,"bindMatrix"),Qi.setOptional(re,Se,"bindMatrixInverse");let tr=Se.skeleton;tr&&(tr.boneTexture===null&&tr.computeBoneTexture(),Qi.setValue(re,"boneTexture",tr.boneTexture,B))}Se.isBatchedMesh&&(Qi.setOptional(re,Se,"batchingTexture"),Qi.setValue(re,"batchingTexture",Se._matricesTexture,B),Qi.setOptional(re,Se,"batchingIdTexture"),Qi.setValue(re,"batchingIdTexture",Se._indirectTexture,B),Qi.setOptional(re,Se,"batchingColorTexture"),Se._colorsTexture!==null&&Qi.setValue(re,"batchingColorTexture",Se._colorsTexture,B));let bc=Ae.morphAttributes;if((bc.position!==void 0||bc.normal!==void 0||bc.color!==void 0)&&qt.update(Se,Ae,$s),(Rc||xt.receiveShadow!==Se.receiveShadow)&&(xt.receiveShadow=Se.receiveShadow,Qi.setValue(re,"receiveShadow",Se.receiveShadow)),(Ee.isMeshStandardMaterial||Ee.isMeshLambertMaterial||Ee.isMeshPhongMaterial)&&Ee.envMap===null&&ce.environment!==null&&(Cr.envMapIntensity.value=ce.environmentIntensity),Cr.dfgLUT!==void 0&&(Cr.dfgLUT.value=$ee()),Rc){if(Qi.setValue(re,"toneMappingExposure",M.toneMappingExposure),xt.needsLights&&yj(Cr,_d),St&&Ee.fog===!0&&Me.refreshFogUniforms(Cr,St),Me.refreshMaterialUniforms(Cr,Ee,Fe,xe,E.state.transmissionRenderTarget[H.id]),xt.needsLights&&xt.lightProbeGrid){let tr=xt.lightProbeGrid;Cr.probesSH.value=tr.texture,Cr.probesMin.value.copy(tr.boundingBox.min),Cr.probesMax.value.copy(tr.boundingBox.max),Cr.probesResolution.value.copy(tr.resolution)}pu.upload(re,iN(xt),Cr,B)}if(Ee.isShaderMaterial&&Ee.uniformsNeedUpdate===!0&&(pu.upload(re,iN(xt),Cr,B),Ee.uniformsNeedUpdate=!1),Ee.isSpriteMaterial&&Qi.setValue(re,"center",Se.center),Qi.setValue(re,"modelViewMatrix",Se.modelViewMatrix),Qi.setValue(re,"normalMatrix",Se.normalMatrix),Qi.setValue(re,"modelMatrix",Se.matrixWorld),Ee.uniformsGroups!==void 0){let tr=Ee.uniformsGroups;for(let Ic=0,gd=tr.length;Ic0&&B.useMultisampledRTT(H)===!1?Ee=z.get(H).__webglMultisampledFramebuffer:Array.isArray(Dt)?Ee=Dt[Ae]:Ee=Dt,$.copy(H.viewport),q.copy(H.scissor),Z=H.scissorTest}else $.copy(ie).multiplyScalar(Fe).floor(),q.copy(_e).multiplyScalar(Fe).floor(),Z=Pe;if(Ae!==0&&(Ee=Dj),ot.bindFramebuffer(re.FRAMEBUFFER,Ee)&&ot.drawBuffers(H,Ee),ot.viewport($),ot.scissor(q),ot.setScissorTest(Z),Se){let gt=z.get(H.texture);re.framebufferTexture2D(re.FRAMEBUFFER,re.COLOR_ATTACHMENT0,re.TEXTURE_CUBE_MAP_POSITIVE_X+ce,gt.__webglTexture,Ae)}else if(St){let gt=ce;for(let yt=0;yt1&&re.readBuffer(re.COLOR_ATTACHMENT0+gt),!bi.textureFormatReadable(oi)){Gt("WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}if(!bi.textureTypeReadable(ui)){Gt("WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}ce>=0&&ce<=H.width-Ee&&Ae>=0&&Ae<=H.height-Se&&re.readPixels(ce,Ae,Ee,Se,ae.convert(oi),ae.convert(ui),St)}finally{let Dt=F!==null?z.get(F).__webglFramebuffer:null;ot.bindFramebuffer(re.FRAMEBUFFER,Dt)}}},this.readRenderTargetPixelsAsync=async function(H,ce,Ae,Ee,Se,St,Rt,gt=0){if(!(H&&H.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let yt=z.get(H).__webglFramebuffer;if(H.isWebGLCubeRenderTarget&&Rt!==void 0&&(yt=yt[Rt]),yt)if(ce>=0&&ce<=H.width-Ee&&Ae>=0&&Ae<=H.height-Se){ot.bindFramebuffer(re.FRAMEBUFFER,yt);let Dt=H.textures[gt],oi=Dt.format,ui=Dt.type;if(H.textures.length>1&&re.readBuffer(re.COLOR_ATTACHMENT0+gt),!bi.textureFormatReadable(oi))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!bi.textureTypeReadable(ui))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");let Ot=re.createBuffer();re.bindBuffer(re.PIXEL_PACK_BUFFER,Ot),re.bufferData(re.PIXEL_PACK_BUFFER,St.byteLength,re.STREAM_READ),re.readPixels(ce,Ae,Ee,Se,ae.convert(oi),ae.convert(ui),0);let Yi=F!==null?z.get(F).__webglFramebuffer:null;ot.bindFramebuffer(re.FRAMEBUFFER,Yi);let Mr=re.fenceSync(re.SYNC_GPU_COMMANDS_COMPLETE,0);return re.flush(),await eF(re,Mr,4),re.bindBuffer(re.PIXEL_PACK_BUFFER,Ot),re.getBufferSubData(re.PIXEL_PACK_BUFFER,0,St),re.deleteBuffer(Ot),re.deleteSync(Mr),St}else throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")},this.copyFramebufferToTexture=function(H,ce=null,Ae=0){let Ee=Math.pow(2,-Ae),Se=Math.floor(H.image.width*Ee),St=Math.floor(H.image.height*Ee),Rt=ce!==null?ce.x:0,gt=ce!==null?ce.y:0;B.setTexture2D(H,0),re.copyTexSubImage2D(re.TEXTURE_2D,Ae,0,0,Rt,gt,Se,St),ot.unbindTexture()};let Lj=re.createFramebuffer(),Oj=re.createFramebuffer();this.copyTextureToTexture=function(H,ce,Ae=null,Ee=null,Se=0,St=0){let Rt,gt,yt,Dt,oi,ui,Ot,Yi,Mr,xr=H.isCompressedTexture?H.mipmaps[St]:H.image;if(Ae!==null)Rt=Ae.max.x-Ae.min.x,gt=Ae.max.y-Ae.min.y,yt=Ae.isBox3?Ae.max.z-Ae.min.z:1,Dt=Ae.min.x,oi=Ae.min.y,ui=Ae.isBox3?Ae.min.z:0;else{let Cr=Math.pow(2,-Se);Rt=Math.floor(xr.width*Cr),gt=Math.floor(xr.height*Cr),H.isDataArrayTexture?yt=xr.depth:H.isData3DTexture?yt=Math.floor(xr.depth*Cr):yt=1,Dt=0,oi=0,ui=0}Ee!==null?(Ot=Ee.x,Yi=Ee.y,Mr=Ee.z):(Ot=0,Yi=0,Mr=0);let Zi=ae.convert(ce.format),gn=ae.convert(ce.type),xt;ce.isData3DTexture?(B.setTexture3D(ce,0),xt=re.TEXTURE_3D):ce.isDataArrayTexture||ce.isCompressedArrayTexture?(B.setTexture2DArray(ce,0),xt=re.TEXTURE_2D_ARRAY):(B.setTexture2D(ce,0),xt=re.TEXTURE_2D),ot.activeTexture(re.TEXTURE0),ot.pixelStorei(re.UNPACK_FLIP_Y_WEBGL,ce.flipY),ot.pixelStorei(re.UNPACK_PREMULTIPLY_ALPHA_WEBGL,ce.premultiplyAlpha),ot.pixelStorei(re.UNPACK_ALIGNMENT,ce.unpackAlignment);let Is=ot.getParameter(re.UNPACK_ROW_LENGTH),Oi=ot.getParameter(re.UNPACK_IMAGE_HEIGHT),$s=ot.getParameter(re.UNPACK_SKIP_PIXELS),So=ot.getParameter(re.UNPACK_SKIP_ROWS),Rc=ot.getParameter(re.UNPACK_SKIP_IMAGES);ot.pixelStorei(re.UNPACK_ROW_LENGTH,xr.width),ot.pixelStorei(re.UNPACK_IMAGE_HEIGHT,xr.height),ot.pixelStorei(re.UNPACK_SKIP_PIXELS,Dt),ot.pixelStorei(re.UNPACK_SKIP_ROWS,oi),ot.pixelStorei(re.UNPACK_SKIP_IMAGES,ui);let _d=H.isDataArrayTexture||H.isData3DTexture,Qi=ce.isDataArrayTexture||ce.isData3DTexture;if(H.isDepthTexture){let Cr=z.get(H),bc=z.get(ce),tr=z.get(Cr.__renderTarget),Ic=z.get(bc.__renderTarget);ot.bindFramebuffer(re.READ_FRAMEBUFFER,tr.__webglFramebuffer),ot.bindFramebuffer(re.DRAW_FRAMEBUFFER,Ic.__webglFramebuffer);for(let gd=0;gd{Gs();NF={type:"change"},H0={type:"start"},FF={type:"end"},tS=new Co,wF=new aa,Jee=Math.cos(70*n_.DEG2RAD),Zr=new ne,ls=2*Math.PI,qi={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},W0=1e-6,iS=class extends Kp{constructor(e,t=null){super(e,t),this.state=qi.NONE,this.target=new ne,this.cursor=new ne,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minTargetRadius=0,this.maxTargetRadius=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.keyRotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.zoomToCursor=!1,this.autoRotate=!1,this.autoRotateSpeed=2,this.keys={LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"},this.mouseButtons={LEFT:Hc.ROTATE,MIDDLE:Hc.DOLLY,RIGHT:Hc.PAN},this.touches={ONE:zc.ROTATE,TWO:zc.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._cursorStyle="auto",this._domElementKeyEvents=null,this._lastPosition=new ne,this._lastQuaternion=new Kr,this._lastTargetPosition=new ne,this._quat=new Kr().setFromUnitVectors(e.up,new ne(0,1,0)),this._quatInverse=this._quat.clone().invert(),this._spherical=new au,this._sphericalDelta=new au,this._scale=1,this._panOffset=new ne,this._rotateStart=new Lt,this._rotateEnd=new Lt,this._rotateDelta=new Lt,this._panStart=new Lt,this._panEnd=new Lt,this._panDelta=new Lt,this._dollyStart=new Lt,this._dollyEnd=new Lt,this._dollyDelta=new Lt,this._dollyDirection=new ne,this._mouse=new Lt,this._performCursorZoom=!1,this._pointers=[],this._pointerPositions={},this._controlActive=!1,this._onPointerMove=tte.bind(this),this._onPointerDown=ete.bind(this),this._onPointerUp=ite.bind(this),this._onContextMenu=cte.bind(this),this._onMouseWheel=ste.bind(this),this._onKeyDown=ate.bind(this),this._onTouchStart=ote.bind(this),this._onTouchMove=lte.bind(this),this._onMouseDown=rte.bind(this),this._onMouseMove=nte.bind(this),this._interceptControlDown=fte.bind(this),this._interceptControlUp=hte.bind(this),this.domElement!==null&&this.connect(this.domElement),this.update()}set cursorStyle(e){this._cursorStyle=e,e==="grab"?this.domElement.style.cursor="grab":this.domElement.style.cursor="auto"}get cursorStyle(){return this._cursorStyle}connect(e){super.connect(e),this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointercancel",this._onPointerUp),this.domElement.addEventListener("contextmenu",this._onContextMenu),this.domElement.addEventListener("wheel",this._onMouseWheel,{passive:!1}),this.domElement.getRootNode().addEventListener("keydown",this._interceptControlDown,{passive:!0,capture:!0}),this.domElement.style.touchAction="none"}disconnect(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.ownerDocument.removeEventListener("pointermove",this._onPointerMove),this.domElement.ownerDocument.removeEventListener("pointerup",this._onPointerUp),this.domElement.removeEventListener("pointercancel",this._onPointerUp),this.domElement.removeEventListener("wheel",this._onMouseWheel),this.domElement.removeEventListener("contextmenu",this._onContextMenu),this.stopListenToKeyEvents(),this.domElement.getRootNode().removeEventListener("keydown",this._interceptControlDown,{capture:!0}),this.domElement.style.touchAction=""}dispose(){this.disconnect()}getPolarAngle(){return this._spherical.phi}getAzimuthalAngle(){return this._spherical.theta}getDistance(){return this.object.position.distanceTo(this.target)}listenToKeyEvents(e){e.addEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=e}stopListenToKeyEvents(){this._domElementKeyEvents!==null&&(this._domElementKeyEvents.removeEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=null)}saveState(){this.target0.copy(this.target),this.position0.copy(this.object.position),this.zoom0=this.object.zoom}reset(){this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.updateProjectionMatrix(),this.dispatchEvent(NF),this.update(),this.state=qi.NONE}pan(e,t){this._pan(e,t),this.update()}dollyIn(e){this._dollyIn(e),this.update()}dollyOut(e){this._dollyOut(e),this.update()}rotateLeft(e){this._rotateLeft(e),this.update()}rotateUp(e){this._rotateUp(e),this.update()}update(e=null){let t=this.object.position;Zr.copy(t).sub(this.target),Zr.applyQuaternion(this._quat),this._spherical.setFromVector3(Zr),this.autoRotate&&this.state===qi.NONE&&this._rotateLeft(this._getAutoRotationAngle(e)),this.enableDamping?(this._spherical.theta+=this._sphericalDelta.theta*this.dampingFactor,this._spherical.phi+=this._sphericalDelta.phi*this.dampingFactor):(this._spherical.theta+=this._sphericalDelta.theta,this._spherical.phi+=this._sphericalDelta.phi);let i=this.minAzimuthAngle,r=this.maxAzimuthAngle;isFinite(i)&&isFinite(r)&&(i<-Math.PI?i+=ls:i>Math.PI&&(i-=ls),r<-Math.PI?r+=ls:r>Math.PI&&(r-=ls),i<=r?this._spherical.theta=Math.max(i,Math.min(r,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(i+r)/2?Math.max(i,this._spherical.theta):Math.min(r,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let s=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{let a=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),s=a!=this._spherical.radius}if(Zr.setFromSpherical(this._spherical),Zr.applyQuaternion(this._quatInverse),t.copy(this.target).add(Zr),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let a=null;if(this.object.isPerspectiveCamera){let o=Zr.length();a=this._clampDistance(o*this._scale);let l=o-a;this.object.position.addScaledVector(this._dollyDirection,l),this.object.updateMatrixWorld(),s=!!l}else if(this.object.isOrthographicCamera){let o=new ne(this._mouse.x,this._mouse.y,0);o.unproject(this.object);let l=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),s=l!==this.object.zoom;let c=new ne(this._mouse.x,this._mouse.y,0);c.unproject(this.object),this.object.position.sub(c).add(o),this.object.updateMatrixWorld(),a=Zr.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),this.zoomToCursor=!1;a!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(a).add(this.object.position):(tS.origin.copy(this.object.position),tS.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(tS.direction))W0||8*(1-this._lastQuaternion.dot(this.object.quaternion))>W0||this._lastTargetPosition.distanceToSquared(this.target)>W0?(this.dispatchEvent(NF),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e!==null?ls/60*this.autoRotateSpeed*e:ls/60/60*this.autoRotateSpeed}_getZoomScale(e){let t=Math.abs(e*.01);return Math.pow(.95,this.zoomSpeed*t)}_rotateLeft(e){this._sphericalDelta.theta-=e}_rotateUp(e){this._sphericalDelta.phi-=e}_panLeft(e,t){Zr.setFromMatrixColumn(t,0),Zr.multiplyScalar(-e),this._panOffset.add(Zr)}_panUp(e,t){this.screenSpacePanning===!0?Zr.setFromMatrixColumn(t,1):(Zr.setFromMatrixColumn(t,0),Zr.crossVectors(this.object.up,Zr)),Zr.multiplyScalar(e),this._panOffset.add(Zr)}_pan(e,t){let i=this.domElement;if(this.object.isPerspectiveCamera){let r=this.object.position;Zr.copy(r).sub(this.target);let s=Zr.length();s*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*e*s/i.clientHeight,this.object.matrix),this._panUp(2*t*s/i.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(e*(this.object.right-this.object.left)/this.object.zoom/i.clientWidth,this.object.matrix),this._panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/i.clientHeight,this.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),this.enablePan=!1)}_dollyOut(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_dollyIn(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_updateZoomParameters(e,t){if(!this.zoomToCursor)return;this._performCursorZoom=!0;let i=this.domElement.getBoundingClientRect(),r=e-i.left,s=t-i.top,a=i.width,o=i.height;this._mouse.x=r/a*2-1,this._mouse.y=-(s/o)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(e){return Math.max(this.minDistance,Math.min(this.maxDistance,e))}_handleMouseDownRotate(e){this._rotateStart.set(e.clientX,e.clientY)}_handleMouseDownDolly(e){this._updateZoomParameters(e.clientX,e.clientX),this._dollyStart.set(e.clientX,e.clientY)}_handleMouseDownPan(e){this._panStart.set(e.clientX,e.clientY)}_handleMouseMoveRotate(e){this._rotateEnd.set(e.clientX,e.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;this._rotateLeft(ls*this._rotateDelta.x/t.clientHeight),this._rotateUp(ls*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(e){this._dollyEnd.set(e.clientX,e.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(e){this._panEnd.set(e.clientX,e.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(e){this._updateZoomParameters(e.clientX,e.clientY),e.deltaY<0?this._dollyIn(this._getZoomScale(e.deltaY)):e.deltaY>0&&this._dollyOut(this._getZoomScale(e.deltaY)),this.update()}_handleKeyDown(e){let t=!1;switch(e.code){case this.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(ls*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),t=!0;break;case this.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(-ls*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),t=!0;break;case this.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(ls*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),t=!0;break;case this.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(-ls*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),t=!0;break}t&&(e.preventDefault(),this.update())}_handleTouchStartRotate(e){if(this._pointers.length===1)this._rotateStart.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._rotateStart.set(i,r)}}_handleTouchStartPan(e){if(this._pointers.length===1)this._panStart.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._panStart.set(i,r)}}_handleTouchStartDolly(e){let t=this._getSecondPointerPosition(e),i=e.pageX-t.x,r=e.pageY-t.y,s=Math.sqrt(i*i+r*r);this._dollyStart.set(0,s)}_handleTouchStartDollyPan(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enablePan&&this._handleTouchStartPan(e)}_handleTouchStartDollyRotate(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enableRotate&&this._handleTouchStartRotate(e)}_handleTouchMoveRotate(e){if(this._pointers.length==1)this._rotateEnd.set(e.pageX,e.pageY);else{let i=this._getSecondPointerPosition(e),r=.5*(e.pageX+i.x),s=.5*(e.pageY+i.y);this._rotateEnd.set(r,s)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;this._rotateLeft(ls*this._rotateDelta.x/t.clientHeight),this._rotateUp(ls*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(e){if(this._pointers.length===1)this._panEnd.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._panEnd.set(i,r)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(e){let t=this._getSecondPointerPosition(e),i=e.pageX-t.x,r=e.pageY-t.y,s=Math.sqrt(i*i+r*r);this._dollyEnd.set(0,s),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);let a=(e.pageX+t.x)*.5,o=(e.pageY+t.y)*.5;this._updateZoomParameters(a,o)}_handleTouchMoveDollyPan(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enablePan&&this._handleTouchMovePan(e)}_handleTouchMoveDollyRotate(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enableRotate&&this._handleTouchMoveRotate(e)}_addPointer(e){this._pointers.push(e.pointerId)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let t=0;t{Gs();rS=class extends oh{constructor(){super(),this.name="RoomEnvironment",this.position.y=-3.5;let e=new Gc;e.deleteAttribute("uv");let t=new rs({side:dn}),i=new rs,r=new za(16777215,900,28,2);r.position.set(.418,16.199,.3),this.add(r);let s=new ci(e,t);s.position.set(-.757,13.219,.717),s.scale.set(31.713,28.305,28.591),this.add(s);let a=new lh(e,i,6),o=new nr;o.position.set(-10.906,2.009,1.846),o.rotation.set(0,-.195,0),o.scale.set(2.328,7.905,4.651),o.updateMatrix(),a.setMatrixAt(0,o.matrix),o.position.set(-5.607,-.754,-.758),o.rotation.set(0,.994,0),o.scale.set(1.97,1.534,3.955),o.updateMatrix(),a.setMatrixAt(1,o.matrix),o.position.set(6.167,.857,7.803),o.rotation.set(0,.561,0),o.scale.set(3.927,6.285,3.687),o.updateMatrix(),a.setMatrixAt(2,o.matrix),o.position.set(-2.017,.018,6.124),o.rotation.set(0,.333,0),o.scale.set(2.002,4.566,2.064),o.updateMatrix(),a.setMatrixAt(3,o.matrix),o.position.set(2.291,-.756,-2.621),o.rotation.set(0,-.286,0),o.scale.set(1.546,1.552,1.496),o.updateMatrix(),a.setMatrixAt(4,o.matrix),o.position.set(-2.193,-.369,-5.547),o.rotation.set(0,.516,0),o.scale.set(3.875,3.487,2.986),o.updateMatrix(),a.setMatrixAt(5,o.matrix),this.add(a);let l=new ci(e,vu(50));l.position.set(-16.116,14.37,8.208),l.scale.set(.1,2.428,2.739),this.add(l);let c=new ci(e,vu(50));c.position.set(-16.109,18.021,-8.207),c.scale.set(.1,2.425,2.751),this.add(c);let f=new ci(e,vu(17));f.position.set(14.904,12.198,-1.832),f.scale.set(.15,4.265,6.331),this.add(f);let h=new ci(e,vu(43));h.position.set(-.462,8.89,14.52),h.scale.set(4.38,5.441,.088),this.add(h);let d=new ci(e,vu(20));d.position.set(3.235,11.486,-12.541),d.scale.set(2.5,2,.1),this.add(d);let u=new ci(e,vu(100));u.position.set(0,20,0),u.scale.set(1,.1,1),this.add(u)}dispose(){let e=new Set;this.traverse(t=>{t.isMesh&&(e.add(t.geometry),e.add(t.material))});for(let t of e)t.dispose()}}});var nS,z0,VF=C(()=>{Gs();nS=class extends sn{constructor(e){super(e)}load(e,t,i,r){let s=this,a=this.path===""?Xa.extractUrlBase(e):this.path,o=new as(this.manager);o.setPath(this.path),o.setRequestHeader(this.requestHeader),o.setWithCredentials(this.withCredentials),o.load(e,function(l){try{t(s.parse(l,a))}catch(c){r?r(c):console.error(c),s.manager.itemError(e)}},i,r)}setMaterialOptions(e){return this.materialOptions=e,this}parse(e,t){let i=e.split(` +`),r={},s=/\s+/,a={};for(let l=0;l=0?c.substring(0,f):c;h=h.toLowerCase();let d=f>=0?c.substring(f+1):"";if(d=d.trim(),h==="newmtl")r={name:d},a[d]=r;else if(h==="ka"||h==="kd"||h==="ks"||h==="ke"){let u=d.split(s,3);r[h]=[parseFloat(u[0]),parseFloat(u[1]),parseFloat(u[2])]}else r[h]=d}let o=new z0(this.resourcePath||t,this.materialOptions);return o.setCrossOrigin(this.crossOrigin),o.setManager(this.manager),o.setMaterials(a),o}},z0=class{constructor(e="",t={}){this.baseUrl=e,this.options=t,this.materialsInfo={},this.materials={},this.materialsArray=[],this.nameLookup={},this.crossOrigin="anonymous",this.side=this.options.side!==void 0?this.options.side:Os,this.wrap=this.options.wrap!==void 0?this.options.wrap:Io}setCrossOrigin(e){return this.crossOrigin=e,this}setManager(e){this.manager=e}setMaterials(e){this.materialsInfo=this.convert(e),this.materials={},this.materialsArray=[],this.nameLookup={}}convert(e){if(!this.options)return e;let t={};for(let i in e){let r=e[i],s={};t[i]=s;for(let a in r){let o=!0,l=r[a],c=a.toLowerCase();switch(c){case"kd":case"ka":case"ks":this.options&&this.options.normalizeRGB&&(l=[l[0]/255,l[1]/255,l[2]/255]),this.options&&this.options.ignoreZeroRGBs&&l[0]===0&&l[1]===0&&l[2]===0&&(o=!1);break;default:break}o&&(s[c]=l)}}return t}preload(){for(let e in this.materialsInfo)this.create(e)}getIndex(e){return this.nameLookup[e]}getAsArray(){let e=0;for(let t in this.materialsInfo)this.materialsArray[e]=this.create(t),this.nameLookup[t]=e,e++;return this.materialsArray}create(e){return this.materials[e]===void 0&&this.createMaterial_(e),this.materials[e]}createMaterial_(e){let t=this,i=this.materialsInfo[e],r={name:e,side:this.side};function s(o,l){return typeof l!="string"||l===""?"":/^https?:\/\//i.test(l)?l:o+l}function a(o,l){if(r[o])return;let c=t.getTextureParams(l,r),f=t.loadTexture(s(t.baseUrl,c.url));f.repeat.copy(c.scale),f.offset.copy(c.offset),f.wrapS=t.wrap,f.wrapT=t.wrap,(o==="map"||o==="emissiveMap")&&(f.colorSpace=Ni),r[o]=f}for(let o in i){let l=i[o],c;if(l!=="")switch(o.toLowerCase()){case"kd":r.color=ai.colorSpaceToWorking(new ct().fromArray(l),Ni);break;case"ks":r.specular=ai.colorSpaceToWorking(new ct().fromArray(l),Ni);break;case"ke":r.emissive=ai.colorSpaceToWorking(new ct().fromArray(l),Ni);break;case"map_kd":a("map",l);break;case"map_ks":a("specularMap",l);break;case"map_ke":a("emissiveMap",l);break;case"norm":a("normalMap",l);break;case"map_bump":case"bump":a("bumpMap",l);break;case"disp":a("displacementMap",l);break;case"map_d":a("alphaMap",l),r.transparent=!0;break;case"ns":r.shininess=parseFloat(l);break;case"d":c=parseFloat(l),c<1&&(r.opacity=c,r.transparent=!0);break;case"tr":c=parseFloat(l),this.options&&this.options.invertTrProperty&&(c=1-c),c>0&&(r.opacity=1-c,r.transparent=!0);break;default:break}}return this.materials[e]=new hh(r),this.materials[e]}getTextureParams(e,t){let i={scale:new Lt(1,1),offset:new Lt(0,0)},r=e.split(/\s+/),s;return s=r.indexOf("-bm"),s>=0&&(t.bumpScale=parseFloat(r[s+1]),r.splice(s,2)),s=r.indexOf("-mm"),s>=0&&(t.displacementBias=parseFloat(r[s+1]),t.displacementScale=parseFloat(r[s+2]),r.splice(s,3)),s=r.indexOf("-s"),s>=0&&(i.scale.set(parseFloat(r[s+1]),parseFloat(r[s+2])),r.splice(s,4)),s=r.indexOf("-o"),s>=0&&(i.offset.set(parseFloat(r[s+1]),parseFloat(r[s+2])),r.splice(s,4)),i.url=r.join(" ").trim(),i}loadTexture(e,t,i,r,s){let a=this.manager!==void 0?this.manager:jE,o=a.getHandler(e);o===null&&(o=new uh(a)),o.setCrossOrigin&&o.setCrossOrigin(this.crossOrigin);let l=o.load(e,i,r,s);return t!==void 0&&(l.mapping=t),l}}});function _te(){let n={objects:[],object:{},vertices:[],normals:[],colors:[],uvs:[],materials:{},materialLibraries:[],startObject:function(e,t){if(this.object&&this.object.fromDeclaration===!1){this.object.name=e,this.object.fromDeclaration=t!==!1;return}let i=this.object&&typeof this.object.currentMaterial=="function"?this.object.currentMaterial():void 0;if(this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0),this.object={name:e||"",fromDeclaration:t!==!1,geometry:{vertices:[],normals:[],colors:[],uvs:[],hasUVIndices:!1},materials:[],smooth:!0,startMaterial:function(r,s){let a=this._finalize(!1);a&&(a.inherited||a.groupCount<=0)&&this.materials.splice(a.index,1);let o={index:this.materials.length,name:r||"",mtllib:Array.isArray(s)&&s.length>0?s[s.length-1]:"",smooth:a!==void 0?a.smooth:this.smooth,groupStart:a!==void 0?a.groupEnd:0,groupEnd:-1,groupCount:-1,inherited:!1,clone:function(l){let c={index:typeof l=="number"?l:this.index,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0,groupEnd:-1,groupCount:-1,inherited:!1};return c.clone=this.clone.bind(c),c}};return this.materials.push(o),o},currentMaterial:function(){if(this.materials.length>0)return this.materials[this.materials.length-1]},_finalize:function(r){let s=this.currentMaterial();if(s&&s.groupEnd===-1&&(s.groupEnd=this.geometry.vertices.length/3,s.groupCount=s.groupEnd-s.groupStart,s.inherited=!1),r&&this.materials.length>1)for(let a=this.materials.length-1;a>=0;a--)this.materials[a].groupCount<=0&&this.materials.splice(a,1);return r&&this.materials.length===0&&this.materials.push({name:"",smooth:this.smooth}),s}},i&&i.name&&typeof i.clone=="function"){let r=i.clone(0);r.inherited=!0,this.object.materials.push(r)}this.objects.push(this.object)},finalize:function(){this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0)},parseVertexIndex:function(e,t){let i=parseInt(e,10);return(i>=0?i-1:i+t/3)*3},parseNormalIndex:function(e,t){let i=parseInt(e,10);return(i>=0?i-1:i+t/3)*3},parseUVIndex:function(e,t){let i=parseInt(e,10);return(i>=0?i-1:i+t/2)*2},addVertex:function(e,t,i){let r=this.vertices,s=this.object.geometry.vertices;s.push(r[e+0],r[e+1],r[e+2]),s.push(r[t+0],r[t+1],r[t+2]),s.push(r[i+0],r[i+1],r[i+2])},addVertexPoint:function(e){let t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addVertexLine:function(e){let t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addNormal:function(e,t,i){let r=this.normals,s=this.object.geometry.normals;s.push(r[e+0],r[e+1],r[e+2]),s.push(r[t+0],r[t+1],r[t+2]),s.push(r[i+0],r[i+1],r[i+2])},addFaceNormal:function(e,t,i){let r=this.vertices,s=this.object.geometry.normals;kF.fromArray(r,e),X0.fromArray(r,t),WF.fromArray(r,i),ha.subVectors(WF,X0),HF.subVectors(kF,X0),ha.cross(HF),ha.normalize(),s.push(ha.x,ha.y,ha.z),s.push(ha.x,ha.y,ha.z),s.push(ha.x,ha.y,ha.z)},addColor:function(e,t,i){let r=this.colors,s=this.object.geometry.colors;r[e]!==void 0&&s.push(r[e+0],r[e+1],r[e+2]),r[t]!==void 0&&s.push(r[t+0],r[t+1],r[t+2]),r[i]!==void 0&&s.push(r[i+0],r[i+1],r[i+2])},addUV:function(e,t,i){let r=this.uvs,s=this.object.geometry.uvs;s.push(r[e+0],r[e+1]),s.push(r[t+0],r[t+1]),s.push(r[i+0],r[i+1])},addDefaultUV:function(){let e=this.object.geometry.uvs;e.push(0,0),e.push(0,0),e.push(0,0)},addUVLine:function(e){let t=this.uvs;this.object.geometry.uvs.push(t[e+0],t[e+1])},addFace:function(e,t,i,r,s,a,o,l,c){let f=this.vertices.length,h=this.parseVertexIndex(e,f),d=this.parseVertexIndex(t,f),u=this.parseVertexIndex(i,f);if(this.addVertex(h,d,u),this.addColor(h,d,u),o!==void 0&&o!==""){let m=this.normals.length;h=this.parseNormalIndex(o,m),d=this.parseNormalIndex(l,m),u=this.parseNormalIndex(c,m),this.addNormal(h,d,u)}else this.addFaceNormal(h,d,u);if(r!==void 0&&r!==""){let m=this.uvs.length;h=this.parseUVIndex(r,m),d=this.parseUVIndex(s,m),u=this.parseUVIndex(a,m),this.addUV(h,d,u),this.object.geometry.hasUVIndices=!0}else this.addDefaultUV()},addPointGeometry:function(e){this.object.geometry.type="Points";let t=this.vertices.length;for(let i=0,r=e.length;i{Gs();dte=/^[og]\s*(.+)?/,ute=/^mtllib /,mte=/^usemtl /,pte=/^usemap /,GF=/\s+/,kF=new ne,X0=new ne,WF=new ne,HF=new ne,ha=new ne,sS=new ct;aS=class extends sn{constructor(e){super(e),this.materials=null}load(e,t,i,r){let s=this,a=new as(this.manager);a.setPath(this.path),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,function(o){try{t(s.parse(o))}catch(l){r?r(l):console.error(l),s.manager.itemError(e)}},i,r)}setMaterials(e){return this.materials=e,this}parse(e){let t=new _te;e.indexOf(`\r `)!==-1&&(e=e.replace(/\r\n/g,` `)),e.indexOf(`\\ `)!==-1&&(e=e.replace(/\\\n/g,""));let i=e.split(` -`),r=[];for(let o=0,l=i.length;o=7?(ZE.setRGB(parseFloat(h[4]),parseFloat(h[5]),parseFloat(h[6]),Ni),t.colors.push(ZE.r,ZE.g,ZE.b)):t.colors.push(void 0,void 0,void 0);break;case"vn":t.normals.push(parseFloat(h[1]),parseFloat(h[2]),parseFloat(h[3]));break;case"vt":t.uvs.push(parseFloat(h[1]),parseFloat(h[2]));break}}else if(f==="f"){let d=c.slice(1).trim().split(yw),u=[];for(let _=0,p=d.length;_0){let v=g.split("/");u.push(v)}}let m=u[0];for(let _=1,p=u.length-1;_1){let d=r[1].trim().toLowerCase();t.object.smooth=d!=="0"&&d!=="off"}else t.object.smooth=!0;let h=t.object.currentMaterial();h&&(h.smooth=t.object.smooth)}else{if(c==="\0")continue;console.warn('THREE.OBJLoader: Unexpected line: "'+c+'"')}}t.finalize();let s=new Ls;if(s.materialLibraries=[].concat(t.materialLibraries),!(t.objects.length===1&&t.objects[0].geometry.vertices.length===0)===!0)for(let o=0,l=t.objects.length;o0&&_.setAttribute("normal",new Si(f.normals,3)),f.colors.length>0&&(m=!0,_.setAttribute("color",new Si(f.colors,3))),f.hasUVIndices===!0&&_.setAttribute("uv",new Si(f.uvs,2));let p=[];for(let v=0,x=h.length;v1){for(let v=0,x=h.length;v0){let o=new is({size:1,sizeAttenuation:!1}),l=new sr;l.setAttribute("position",new Si(t.vertices,3)),t.colors.length>0&&t.colors[0]!==void 0&&(l.setAttribute("color",new Si(t.colors,3)),o.vertexColors=!0);let c=new sa(l,o);s.add(c)}return s}}});var cs,JE,OI,Nw=C(()=>{Gs();cs=new ct,JE=class extends sn{constructor(e){super(e),this.propertyNameMapping={},this.customPropertyMapping={}}load(e,t,i,r){let s=this,a=new as(this.manager);a.setPath(this.path),a.setResponseType("arraybuffer"),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,function(o){try{t(s.parse(o))}catch(l){r?r(l):console.error(l),s.manager.itemError(e)}},i,r)}setPropertyNameMapping(e){this.propertyNameMapping=e}setCustomPropertyNameMapping(e){this.customPropertyMapping=e}parse(e){function t(p,g=0){let v=/^ply([\s\S]*)end_header(\r\n|\r|\n)/,x="",A=v.exec(p);A!==null&&(x=A[1]);let E={comments:[],elements:[],headerLength:g,objInfo:""},T=x.split(/\r\n|\r|\n/),R;function I(y,M){let D={type:y[0]};return D.type==="list"?(D.name=y[3],D.countType=y[1],D.itemType=y[2]):D.name=y[1],D.name in M&&(D.name=M[D.name]),D}for(let y=0;yx.name);function v(x){for(let A=0,E=x.length;A0&&g.setIndex(p.indices),g.setAttribute("position",new Si(p.vertices,3)),p.normals.length>0&&g.setAttribute("normal",new Si(p.normals,3)),p.uvs.length>0&&g.setAttribute("uv",new Si(p.uvs,2)),p.colors.length>0&&g.setAttribute("color",new Si(p.colors,3)),(p.faceVertexUvs.length>0||p.faceVertexColors.length>0)&&(g=g.toNonIndexed(),p.faceVertexUvs.length>0&&g.setAttribute("uv",new Si(p.faceVertexUvs,2)),p.faceVertexColors.length>0&&g.setAttribute("color",new Si(p.faceVertexColors,3)));for(let v of Object.keys(_.customPropertyMapping))p[v].length>0&&g.setAttribute(v,new Si(p[v],_.customPropertyMapping[v].length));return g.computeBoundingSphere(),g}function c(p,g,v,x){if(g==="vertex"){p.vertices.push(v[x.attrX],v[x.attrY],v[x.attrZ]),x.attrNX!==null&&x.attrNY!==null&&x.attrNZ!==null&&p.normals.push(v[x.attrNX],v[x.attrNY],v[x.attrNZ]),x.attrS!==null&&x.attrT!==null&&p.uvs.push(v[x.attrS],v[x.attrT]),x.attrR!==null&&x.attrG!==null&&x.attrB!==null&&(cs.setRGB(v[x.attrR]/255,v[x.attrG]/255,v[x.attrB]/255,Ni),p.colors.push(cs.r,cs.g,cs.b));for(let A of Object.keys(_.customPropertyMapping))for(let E of _.customPropertyMapping[A])p[A].push(v[E])}else if(g==="face"){let A=v.vertex_indices||v.vertex_index,E=v.texcoord;A.length===3?(p.indices.push(A[0],A[1],A[2]),E&&E.length===6&&(p.faceVertexUvs.push(E[0],E[1]),p.faceVertexUvs.push(E[2],E[3]),p.faceVertexUvs.push(E[4],E[5]))):A.length===4&&(p.indices.push(A[0],A[1],A[3]),p.indices.push(A[1],A[2],A[3])),x.attrR!==null&&x.attrG!==null&&x.attrB!==null&&(cs.setRGB(v[x.attrR]/255,v[x.attrG]/255,v[x.attrB]/255,Ni),p.faceVertexColors.push(cs.r,cs.g,cs.b),p.faceVertexColors.push(cs.r,cs.g,cs.b),p.faceVertexColors.push(cs.r,cs.g,cs.b))}}function f(p,g){let v={},x=0;for(let A=0;AA.getInt8(R),size:1};case"uint8":case"uchar":return{read:R=>A.getUint8(R),size:1};case"int16":case"short":return{read:R=>A.getInt16(R,T),size:2};case"uint16":case"ushort":return{read:R=>A.getUint16(R,T),size:2};case"int32":case"int":return{read:R=>A.getInt32(R,T),size:4};case"uint32":case"uint":return{read:R=>A.getUint32(R,T),size:4};case"float32":case"float":return{read:R=>A.getFloat32(R,T),size:4};case"float64":case"double":return{read:R=>A.getFloat64(R,T),size:8}}}for(let A=0,E=p.length;A=this.arr.length}next(){return this.arr[this.i++]}}});var $E,Fw=C(()=>{Gs();$E=class extends sn{constructor(e){super(e)}load(e,t,i,r){let s=this,a=new as(this.manager);a.setPath(this.path),a.setResponseType("arraybuffer"),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,function(o){try{t(s.parse(o))}catch(l){r?r(l):console.error(l),s.manager.itemError(e)}},i,r)}parse(e){function t(c){let f=new DataView(c),h=32/8*3+32/8*3*3+16/8,d=f.getUint32(80,!0);if(80+32/8+d*h===f.byteLength)return!0;let m=[115,111,108,105,100];for(let _=0;_<5;_++)if(i(m,f,_))return!1;return!0}function i(c,f,h){for(let d=0,u=c.length;d>5&31)/31,m=(U>>10&31)/31):(d=g,u=v,m=x)}for(let U=1;U<=3;U++){let G=O+U*12,J=D*3*3+(U-1)*3;I[J]=f.getFloat32(G,!0),I[J+1]=f.getFloat32(G+4,!0),I[J+2]=f.getFloat32(G+8,!0),y[J]=V,y[J+1]=N,y[J+2]=w,_&&(M.setRGB(d,u,m,Ni),p[J]=M.r,p[J+1]=M.g,p[J+2]=M.b)}}return R.setAttribute("position",new rr(I,3)),R.setAttribute("normal",new rr(y,3)),_&&(R.setAttribute("color",new rr(p,3)),R.hasColors=!0,R.alpha=A),R}function s(c){let f=new sr,h=/solid([\s\S]*?)endsolid/g,d=/facet([\s\S]*?)endfacet/g,u=/solid\s(.+)/,m=0,_=/[\s]+([+-]?(?:\d*)(?:\.\d*)?(?:[eE][+-]?\d+)?)/.source,p=new RegExp("vertex"+_+_+_,"g"),g=new RegExp("normal"+_+_+_,"g"),v=[],x=[],A=[],E=new ne,T,R=0,I=0,y=0;for(;(T=h.exec(c))!==null;){I=y;let M=T[0],D=(T=u.exec(M))!==null?T[1]:"";for(A.push(D);(T=d.exec(M))!==null;){let N=0,w=0,U=T[0];for(;(T=g.exec(U))!==null;)E.x=parseFloat(T[1]),E.y=parseFloat(T[2]),E.z=parseFloat(T[3]),w++;for(;(T=p.exec(U))!==null;)v.push(parseFloat(T[1]),parseFloat(T[2]),parseFloat(T[3])),x.push(E.x,E.y,E.z),N++,y++;w!==1&&console.error("THREE.STLLoader: Something isn't right with the normal of face number "+m),N!==3&&console.error("THREE.STLLoader: Something isn't right with the vertices of face number "+m),m++}let O=I,V=y-I;f.userData.groupNames=A,f.addGroup(O,V,R),R++}return f.setAttribute("position",new Si(v,3)),f.setAttribute("normal",new Si(x,3)),f}function a(c){return typeof c!="string"?new TextDecoder().decode(c):c}function o(c){if(typeof c=="string"){let f=new Uint8Array(c.length);for(let h=0;h{Gs()});function Bw(n){let e=new Map,t=new Map,i=n.clone();return Uw(n,i,function(r,s){e.set(s,r),t.set(r,s)}),i.traverse(function(r){if(!r.isSkinnedMesh)return;let s=r,a=e.get(r),o=a.skeleton.bones;s.skeleton=a.skeleton.clone(),s.bindMatrix.copy(a.bindMatrix),s.skeleton.bones=o.map(function(l){return t.get(l)}),s.bind(s.skeleton,s.bindMatrix)}),i}function Uw(n,e,t){t(n,e);for(let i=0;i{});function qee(){let n={};return{get:function(e){return n[e]},add:function(e,t){n[e]=t},remove:function(e){delete n[e]},removeAll:function(){n={}}}}function Dr(n,e,t){let i=n.json.materials[e];return i.extensions&&i.extensions[t]?i.extensions[t]:null}function Jee(n){return n.DefaultMaterial===void 0&&(n.DefaultMaterial=new rs({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:Os})),n.DefaultMaterial}function vh(n,e,t){for(let i in t.extensions)n[i]===void 0&&(e.userData.gltfExtensions=e.userData.gltfExtensions||{},e.userData.gltfExtensions[i]=t.extensions[i])}function Bo(n,e){e.extras!==void 0&&(typeof e.extras=="object"?Object.assign(n.userData,e.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+e.extras))}function $ee(n,e,t){let i=!1,r=!1,s=!1;for(let c=0,f=e.length;c0||n.search(/^data\:image\/jpeg/)===0?"image/jpeg":n.search(/\.webp($|\?)/i)>0||n.search(/^data\:image\/webp/)===0?"image/webp":n.search(/\.ktx2($|\?)/i)>0||n.search(/^data\:image\/ktx2/)===0?"image/ktx2":"image/png"}function nte(n,e,t){let i=e.attributes,r=new xr;if(i.POSITION!==void 0){let o=t.json.accessors[i.POSITION],l=o.min,c=o.max;if(l!==void 0&&c!==void 0){if(r.set(new ne(l[0],l[1],l[2]),new ne(c[0],c[1],c[2])),o.normalized){let f=o0(_u[o.componentType]);r.min.multiplyScalar(f),r.max.multiplyScalar(f)}}else{console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");return}}else return;let s=e.targets;if(s!==void 0){let o=new ne,l=new ne;for(let c=0,f=s.length;c{Gs();ww();Vw();eS=class extends sn{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(t){return new kI(t)}),this.register(function(t){return new WI(t)}),this.register(function(t){return new QI(t)}),this.register(function(t){return new JI(t)}),this.register(function(t){return new $I(t)}),this.register(function(t){return new zI(t)}),this.register(function(t){return new XI(t)}),this.register(function(t){return new YI(t)}),this.register(function(t){return new KI(t)}),this.register(function(t){return new GI(t)}),this.register(function(t){return new jI(t)}),this.register(function(t){return new HI(t)}),this.register(function(t){return new ZI(t)}),this.register(function(t){return new qI(t)}),this.register(function(t){return new UI(t)}),this.register(function(t){return new tS(t,vi.EXT_MESHOPT_COMPRESSION)}),this.register(function(t){return new tS(t,vi.KHR_MESHOPT_COMPRESSION)}),this.register(function(t){return new e0(t)})}load(e,t,i,r){let s=this,a;if(this.resourcePath!=="")a=this.resourcePath;else if(this.path!==""){let c=Wa.extractUrlBase(e);a=Wa.resolveURL(c,this.path)}else a=Wa.extractUrlBase(e);this.manager.itemStart(e);let o=function(c){r?r(c):console.error(c),s.manager.itemError(e),s.manager.itemEnd(e)},l=new as(this.manager);l.setPath(this.path),l.setResponseType("arraybuffer"),l.setRequestHeader(this.requestHeader),l.setWithCredentials(this.withCredentials),l.load(e,function(c){try{s.parse(c,a,function(f){t(f),s.manager.itemEnd(e)},o)}catch(f){o(f)}},i,o)}setDRACOLoader(e){return this.dracoLoader=e,this}setKTX2Loader(e){return this.ktx2Loader=e,this}setMeshoptDecoder(e){return this.meshoptDecoder=e,this}register(e){return this.pluginCallbacks.indexOf(e)===-1&&this.pluginCallbacks.push(e),this}unregister(e){return this.pluginCallbacks.indexOf(e)!==-1&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}parse(e,t,i,r){let s,a={},o={},l=new TextDecoder;if(typeof e=="string")s=JSON.parse(e);else if(e instanceof ArrayBuffer)if(l.decode(new Uint8Array(e,0,4))===zw){try{a[vi.KHR_BINARY_GLTF]=new t0(e)}catch(h){r&&r(h);return}s=JSON.parse(a[vi.KHR_BINARY_GLTF].content)}else s=JSON.parse(l.decode(e));else s=e;if(s.asset===void 0||s.asset.version[0]<2){r&&r(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));return}let c=new l0(s,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});c.fileLoader.setRequestHeader(this.requestHeader);for(let f=0;f=0&&o[h]===void 0&&console.warn('THREE.GLTFLoader: Unknown extension "'+h+'".')}}c.setExtensions(a),c.setPlugins(o),c.parse(i,r)}parseAsync(e,t){let i=this;return new Promise(function(r,s){i.parse(e,t,r,s)})}};vi={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_DISPERSION:"KHR_materials_dispersion",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_MATERIALS_BUMP:"EXT_materials_bump",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",KHR_MESHOPT_COMPRESSION:"KHR_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"},UI=class{constructor(e){this.parser=e,this.name=vi.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){let e=this.parser,t=this.parser.json.nodes||[];for(let i=0,r=t.length;i=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return t.loadTextureImage(e,s.source,a)}},JI=class{constructor(e){this.parser=e,this.name=vi.EXT_TEXTURE_WEBP}loadTexture(e){let t=this.name,i=this.parser,r=i.json,s=r.textures[e];if(!s.extensions||!s.extensions[t])return null;let a=s.extensions[t],o=r.images[a.source],l=i.textureLoader;if(o.uri){let c=i.options.manager.getHandler(o.uri);c!==null&&(l=c)}return i.loadTextureImage(e,a.source,l)}},$I=class{constructor(e){this.parser=e,this.name=vi.EXT_TEXTURE_AVIF}loadTexture(e){let t=this.name,i=this.parser,r=i.json,s=r.textures[e];if(!s.extensions||!s.extensions[t])return null;let a=s.extensions[t],o=r.images[a.source],l=i.textureLoader;if(o.uri){let c=i.options.manager.getHandler(o.uri);c!==null&&(l=c)}return i.loadTextureImage(e,a.source,l)}},tS=class{constructor(e,t){this.name=t,this.parser=e}loadBufferView(e){let t=this.parser.json,i=t.bufferViews[e];if(i.extensions&&i.extensions[this.name]){let r=i.extensions[this.name],s=this.parser.getDependency("buffer",r.buffer),a=this.parser.options.meshoptDecoder;if(!a||!a.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return s.then(function(o){let l=r.byteOffset||0,c=r.byteLength||0,f=r.count,h=r.byteStride,d=new Uint8Array(o,l,c);return a.decodeGltfBufferAsync?a.decodeGltfBufferAsync(f,h,d,r.mode,r.filter).then(function(u){return u.buffer}):a.ready.then(function(){let u=new ArrayBuffer(f*h);return a.decodeGltfBuffer(new Uint8Array(u),f,h,d,r.mode,r.filter),u})})}else return null}},e0=class{constructor(e){this.name=vi.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){let t=this.parser.json,i=t.nodes[e];if(!i.extensions||!i.extensions[this.name]||i.mesh===void 0)return null;let r=t.meshes[i.mesh];for(let c of r.primitives)if(c.mode!==la.TRIANGLES&&c.mode!==la.TRIANGLE_STRIP&&c.mode!==la.TRIANGLE_FAN&&c.mode!==void 0)return null;let a=i.extensions[this.name].attributes,o=[],l={};for(let c in a)o.push(this.parser.getDependency("accessor",a[c]).then(f=>(l[c]=f,l[c])));return o.length<1?null:(o.push(this.parser.createNodeMesh(e)),Promise.all(o).then(c=>{let f=c.pop(),h=f.isGroup?f.children:[f],d=c[0].count,u=[];for(let m of h){let _=new li,p=new ne,g=new Kr,v=new ne(1,1,1),x=new lh(m.geometry,m.material,d);for(let A=0;A-1,a=s?o.match(/Firefox\/([0-9]+)\./)[1]:-1}typeof createImageBitmap=="undefined"||i&&r<17||s&&a<98?this.textureLoader=new uh(this.options.manager):this.textureLoader=new Bp(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new as(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),this.options.crossOrigin==="use-credentials"&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){let i=this,r=this.json,s=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(a){return a._markDefs&&a._markDefs()}),Promise.all(this._invokeAll(function(a){return a.beforeRoot&&a.beforeRoot()})).then(function(){return Promise.all([i.getDependencies("scene"),i.getDependencies("animation"),i.getDependencies("camera")])}).then(function(a){let o={scene:a[0][r.scene||0],scenes:a[0],animations:a[1],cameras:a[2],asset:r.asset,parser:i,userData:{}};return vh(s,o,r),Bo(o,r),Promise.all(i._invokeAll(function(l){return l.afterRoot&&l.afterRoot(o)})).then(function(){for(let l of o.scenes)l.updateMatrixWorld();e(o)})}).catch(t)}_markDefs(){let e=this.json.nodes||[],t=this.json.skins||[],i=this.json.meshes||[];for(let r=0,s=t.length;r{let l=this.associations.get(a);l!=null&&this.associations.set(o,l);for(let[c,f]of a.children.entries())s(f,o.children[c])};return s(i,r),r.name+="_instance_"+e.uses[t]++,r}_invokeOne(e){let t=Object.values(this.plugins);t.push(this);for(let i=0;i=2&&p.setY(y,T[R*l+1]),l>=3&&p.setZ(y,T[R*l+2]),l>=4&&p.setW(y,T[R*l+3]),l>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}p.normalized=m}return p})}loadTexture(e){let t=this.json,i=this.options,s=t.textures[e].source,a=t.images[s],o=this.textureLoader;if(a.uri){let l=i.manager.getHandler(a.uri);l!==null&&(o=l)}return this.loadTextureImage(e,s,o)}loadTextureImage(e,t,i){let r=this,s=this.json,a=s.textures[e],o=s.images[t],l=(o.uri||o.bufferView)+":"+a.sampler;if(this.textureCache[l])return this.textureCache[l];let c=this.loadImageSource(t,i).then(function(f){f.flipY=!1,f.name=a.name||o.name||"",f.name===""&&typeof o.uri=="string"&&o.uri.startsWith("data:image/")===!1&&(f.name=o.uri);let d=(s.samplers||{})[a.sampler]||{};return f.magFilter=kw[d.magFilter]||Pr,f.minFilter=kw[d.minFilter]||Ha,f.wrapS=Ww[d.wrapS]||Ro,f.wrapT=Ww[d.wrapT]||Ro,f.generateMipmaps=!f.isCompressedTexture&&f.minFilter!==yr&&f.minFilter!==Pr,r.associations.set(f,{textures:e}),f}).catch(function(){return null});return this.textureCache[l]=c,c}loadImageSource(e,t){let i=this,r=this.json,s=this.options;if(this.sourceCache[e]!==void 0)return this.sourceCache[e].then(h=>h.clone());let a=r.images[e],o=self.URL||self.webkitURL,l=a.uri||"",c=!1;if(a.bufferView!==void 0)l=i.getDependency("bufferView",a.bufferView).then(function(h){c=!0;let d=new Blob([h],{type:a.mimeType});return l=o.createObjectURL(d),l});else if(a.uri===void 0)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");let f=Promise.resolve(l).then(function(h){return new Promise(function(d,u){let m=d;t.isImageBitmapLoader===!0&&(m=function(_){let p=new Ar(_);p.needsUpdate=!0,d(p)}),t.load(Wa.resolveURL(h,s.path),m,void 0,u)})}).then(function(h){return c===!0&&o.revokeObjectURL(l),Bo(h,a),h.userData.mimeType=a.mimeType||ite(a.uri),h}).catch(function(h){throw console.error("THREE.GLTFLoader: Couldn't load texture",l),h});return this.sourceCache[e]=f,f}assignTexture(e,t,i,r){let s=this;return this.getDependency("texture",i.index).then(function(a){if(!a)return null;if(i.texCoord!==void 0&&i.texCoord>0&&(a=a.clone(),a.channel=i.texCoord),s.extensions[vi.KHR_TEXTURE_TRANSFORM]){let o=i.extensions!==void 0?i.extensions[vi.KHR_TEXTURE_TRANSFORM]:void 0;if(o){let l=s.associations.get(a);a=s.extensions[vi.KHR_TEXTURE_TRANSFORM].extendTexture(a,o),s.associations.set(a,l)}}return r!==void 0&&(a.colorSpace=r),e[t]=a,a})}assignFinalMaterial(e){let t=e.geometry,i=e.material,r=t.attributes.tangent===void 0,s=t.attributes.color!==void 0,a=t.attributes.normal===void 0;if(e.isPoints){let o="PointsMaterial:"+i.uuid,l=this.cache.get(o);l||(l=new is,Ur.prototype.copy.call(l,i),l.color.copy(i.color),l.map=i.map,l.sizeAttenuation=!1,this.cache.add(o,l)),i=l}else if(e.isLine){let o="LineBasicMaterial:"+i.uuid,l=this.cache.get(o);l||(l=new Fs,Ur.prototype.copy.call(l,i),l.color.copy(i.color),l.map=i.map,this.cache.add(o,l)),i=l}if(r||s||a){let o="ClonedMaterial:"+i.uuid+":";r&&(o+="derivative-tangents:"),s&&(o+="vertex-colors:"),a&&(o+="flat-shading:");let l=this.cache.get(o);l||(l=i.clone(),s&&(l.vertexColors=!0),a&&(l.flatShading=!0),r&&(l.normalScale&&(l.normalScale.y*=-1),l.clearcoatNormalScale&&(l.clearcoatNormalScale.y*=-1)),this.cache.add(o,l),this.associations.set(l,this.associations.get(i))),i=l}e.material=i}getMaterialType(){return rs}loadMaterial(e){let t=this,i=this.json,r=this.extensions,s=i.materials[e],a,o={},l=s.extensions||{},c=[];if(l[vi.KHR_MATERIALS_UNLIT]){let h=r[vi.KHR_MATERIALS_UNLIT];a=h.getMaterialType(),c.push(h.extendParams(o,s,t))}else{let h=s.pbrMetallicRoughness||{};if(o.color=new ct(1,1,1),o.opacity=1,Array.isArray(h.baseColorFactor)){let d=h.baseColorFactor;o.color.setRGB(d[0],d[1],d[2],Vn),o.opacity=d[3]}h.baseColorTexture!==void 0&&c.push(t.assignTexture(o,"map",h.baseColorTexture,Ni)),o.metalness=h.metallicFactor!==void 0?h.metallicFactor:1,o.roughness=h.roughnessFactor!==void 0?h.roughnessFactor:1,h.metallicRoughnessTexture!==void 0&&(c.push(t.assignTexture(o,"metalnessMap",h.metallicRoughnessTexture)),c.push(t.assignTexture(o,"roughnessMap",h.metallicRoughnessTexture))),a=this._invokeOne(function(d){return d.getMaterialType&&d.getMaterialType(e)}),c.push(Promise.all(this._invokeAll(function(d){return d.extendMaterialParams&&d.extendMaterialParams(e,o)})))}s.doubleSided===!0&&(o.side=aa);let f=s.alphaMode||wI.OPAQUE;if(f===wI.BLEND?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,f===wI.MASK&&(o.alphaTest=s.alphaCutoff!==void 0?s.alphaCutoff:.5)),s.normalTexture!==void 0&&a!==Va&&(c.push(t.assignTexture(o,"normalMap",s.normalTexture)),o.normalScale=new Lt(1,1),s.normalTexture.scale!==void 0)){let h=s.normalTexture.scale;o.normalScale.set(h,h)}if(s.occlusionTexture!==void 0&&a!==Va&&(c.push(t.assignTexture(o,"aoMap",s.occlusionTexture)),s.occlusionTexture.strength!==void 0&&(o.aoMapIntensity=s.occlusionTexture.strength)),s.emissiveFactor!==void 0&&a!==Va){let h=s.emissiveFactor;o.emissive=new ct().setRGB(h[0],h[1],h[2],Vn)}return s.emissiveTexture!==void 0&&a!==Va&&c.push(t.assignTexture(o,"emissiveMap",s.emissiveTexture,Ni)),Promise.all(c).then(function(){let h=new a(o);return s.name&&(h.name=s.name),Bo(h,s),t.associations.set(h,{materials:e}),s.extensions&&vh(r,h,s),h})}createUniqueName(e){let t=Ki.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){let t=this,i=this.extensions,r=this.primitiveCache;function s(o){return i[vi.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(o,t).then(function(l){return Hw(l,o,t)})}let a=[];for(let o=0,l=e.length;o0&&ete(g,s),g.name=t.createUniqueName(s.name||"mesh_"+e),Bo(g,s),p.extensions&&vh(r,g,p),t.assignFinalMaterial(g),h.push(g)}for(let u=0,m=h.length;u0){let u=f.userData.pivot,m=h[0];f.pivot=new ne().fromArray(u),f.position.x-=u[0],f.position.y-=u[1],f.position.z-=u[2],m.position.set(0,0,0),delete f.userData.pivot}return f})}_loadNodeShallow(e){let t=this.json,i=this.extensions,r=this;if(this.nodeCache[e]!==void 0)return this.nodeCache[e];let s=t.nodes[e],a=s.name?r.createUniqueName(s.name):"",o=[],l=r._invokeOne(function(c){return c.createNodeMesh&&c.createNodeMesh(e)});return l&&o.push(l),s.camera!==void 0&&o.push(r.getDependency("camera",s.camera).then(function(c){return r._getNodeRef(r.cameraCache,s.camera,c)})),r._invokeAll(function(c){return c.createNodeAttachment&&c.createNodeAttachment(e)}).forEach(function(c){o.push(c)}),this.nodeCache[e]=Promise.all(o).then(function(c){let f;if(s.isBone===!0?f=new Jd:c.length>1?f=new Ls:c.length===1?f=c[0]:f=new nr,f!==c[0])for(let h=0,d=c.length;h1){let h=r.associations.get(f);r.associations.set(f,{...h})}return r.associations.get(f).nodes=e,f}),this.nodeCache[e]}loadScene(e){let t=this.extensions,i=this.json.scenes[e],r=this,s=new Ls;i.name&&(s.name=r.createUniqueName(i.name)),Bo(s,i),i.extensions&&vh(t,s,i);let a=i.nodes||[],o=[];for(let l=0,c=a.length;l{let h=new Map;for(let[d,u]of r.associations)(d instanceof Ur||d instanceof Ar)&&h.set(d,u);return f.traverse(d=>{let u=r.associations.get(d);u!=null&&h.set(d,u)}),h};return r.associations=c(s),s})}_createAnimationTracks(e,t,i,r,s){let a=[],o=e.name?e.name:e.uuid,l=[];function c(u){u.morphTargetInfluences&&l.push(u.name?u.name:u.uuid)}Yc[s.path]===Yc.weights?(c(e),e.isGroup&&e.children.forEach(c)):l.push(o);let f;switch(Yc[s.path]){case Yc.weights:f=Co;break;case Yc.rotation:f=yo;break;case Yc.translation:case Yc.scale:f=Po;break;default:switch(i.itemSize){case 1:f=Co;break;case 2:case 3:default:f=Po;break}break}let h=r.interpolation!==void 0?Qee[r.interpolation]:sh,d=this._getArrayFromAccessor(i);for(let u=0,m=l.length;u{"use strict"});function jw(n){var t,i,r;let e=(i=(t=n.split(".").pop())==null?void 0:t.toLowerCase())!=null?i:"png";return(r=ste[e])!=null?r:`image/${e}`}function ote(n){let e=n.replace(/\s+#.*$/,"").trim();if(e.startsWith('"')){let t=e.indexOf('"',1);if(t>1)return e.slice(1,t)}return e}function lte(n){let e=n.trim().split(/\s+/),t=e.findIndex(i=>!i.startsWith("-")&&!/^[-+]?\d*\.?\d+$/.test(i));return e.slice(Math.max(0,t)).join(" ").replace(/^"|"$/g,"")}async function Kw(n,e,t){let i=Cs(e,t);try{return{data:await n(i),path:i}}catch(r){throw new Error(`Missing external model resource: ${i}`)}}function cte(n,e,t){let i=$s(e),r=i.replace(/\.[^.]+$/,""),s=Xr(t),a=[Cs(n,e),Cs(n,i)];if(s)for(let o of Yw)a.push(Cs(n,`${s}.${o}`));for(let o of Yw){let l=`${r}.${o}`;l!==i&&a.push(Cs(n,l))}return a}async function qw(n,e,t,i){var l,c;let r=new eS,s=[];if(e==="gltf"&&t&&i){let f=new TextDecoder().decode(new Uint8Array(n)),h=JSON.parse(f),d=op(i);if(h.buffers){for(let g of h.buffers)if(g.uri&&!g.uri.startsWith("data:")){let v=await Kw(t,d,g.uri);g.uri=`data:application/octet-stream;base64,${Il(v.data)}`}}if(h.images){for(let g of h.images)if(g.uri&&!g.uri.startsWith("data:")){let v=await Kw(t,d,g.uri);g.uri=`data:${jw(v.path)};base64,${Il(v.data)}`}}let u=JSON.stringify(h),m=new TextEncoder().encode(u),_=await r.parseAsync(m.buffer,d?`${d}/`:""),p=_.scene||((l=_.scenes)==null?void 0:l[0]);if(!p)throw new Error("GLTF did not contain a scene");return{scene:p,animations:_.animations,warnings:s}}let a=await r.parseAsync(n.slice(0),""),o=a.scene||((c=a.scenes)==null?void 0:c[0]);if(!o)throw new Error("GLB did not contain a scene");return{scene:o,animations:a.animations,warnings:s}}async function Zw(n){let t=new $E().parse(n),i=new rs({color:13421772}),r=new ci(t,i);return r.name=$s("")||"stl-model",r}async function Qw(n){let t=new JE().parse(n);if(t.hasAttribute("color")){if(t.index){let s=new rs({vertexColors:!0});return new ci(t,s)}let r=new is({size:.02,vertexColors:!0});return new sa(t,r)}if(t.index){let r=new rs({color:13421772});return new ci(t,r)}let i=new is({size:.02,color:13421772});return new sa(t,i)}async function Jw(n,e,t){let i=new TextDecoder().decode(new Uint8Array(n)),r=[],s=null,a=i.match(/mtllib\s+(.+)/);if(a&&e&&t){let l=ote(a[1]),c=op(t),f=Cs(c,l);try{let h=await e(f),u=new TextDecoder().decode(new Uint8Array(h)).split(` -`),m=new Map;for(let x=0;xx!=="");if(!_.some(x=>/^\s*Kd\s+/i.test(x))){let x=_.findIndex(A=>/^\s*newmtl\s+/i.test(A));_.splice(x>=0?x+1:0,0,"Kd 0.80 0.80 0.80")}let v=new qE().parse(_.join(` -`),c?`${c}/`:"");v.preload(),s=v}catch(h){r.push(`OBJ material library not found: ${f}`)}}else a&&(!e||!t)&&r.push("OBJ material library could not be resolved without a model path.");let o=new QE;return s&&o.setMaterials(s),{object:o.parse(i),warnings:r}}var ste,Yw,ate,$w=C(()=>{"use strict";Cw();Ow();Nw();Fw();Xw();Gs();ea();rS();ste={jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",tga:"image/x-tga",webp:"image/webp",tif:"image/tiff",tiff:"image/tiff"},Yw=["jpg","jpeg","png","bmp","tga","webp","tif","tiff"],ate=/^\s*(map_Kd|map_Ka|map_Ks|map_Ns|map_d|map_bump|bump|disp|decal)\s+(.+)/i});function gr(){return e1.Platform.isMobile}var e1,ca=C(()=>{"use strict";e1=require("obsidian")});function i_(n,e){return{min:Yr(n),max:Yr(e)}}function t1(n,e){return n?{min:{x:Math.min(n.min.x,e.min.x),y:Math.min(n.min.y,e.min.y),z:Math.min(n.min.z,e.min.z)},max:{x:Math.max(n.max.x,e.max.x),y:Math.max(n.max.y,e.max.y),z:Math.max(n.max.z,e.max.z)}}:i_(e.min,e.max)}function En(n){return Rd(n.max,n.min)}function Sn(n){return jf(n.min,lp(En(n),.5))}function i1(n){return uN(n.min,n.max)}function r_(n){return i1(n)/2}function r1(n){let e=En(n);return Math.max(e.x,e.y,e.z)}function c0(n){let e=En(n),t=i1(n);return{center:jf(n.min,lp(e,.5)),size:e,diagonalLength:t,radius:t/2,maxSpan:Math.max(e.x,e.y,e.z)}}var Kc=C(()=>{"use strict";ys()});function f0(n,e,t={}){var s,a,o,l,c;let i=Math.max(e,Number.EPSILON),r=(s=t.radiusMultiplier)!=null?s:2.5;return{target:Yr(n),radius:i*r,lowerRadiusLimit:i*((a=t.lowerRadiusFactor)!=null?a:.05),upperRadiusLimit:i*((o=t.upperRadiusFactor)!=null?o:10),near:i*((l=t.nearFactor)!=null?l:.001),far:i*((c=t.farFactor)!=null?c:20)}}function nS(n,e={}){let t=c0(n);return f0(t.center,t.radius,e)}function n1(n,e={}){var r,s,a,o,l,c;let t=c0(n),i=Math.max(t.maxSpan,1)*((r=e.distanceMultiplier)!=null?r:1.8);return{target:Yr(t.center),position:jf(t.center,{x:i,y:i*((s=e.elevationFactor)!=null?s:.65),z:i}),near:Math.max((a=e.minNear)!=null?a:.01,t.maxSpan/((o=e.nearDivisor)!=null?o:100)),far:Math.max((l=e.minFar)!=null?l:100,t.maxSpan*((c=e.farMultiplier)!=null?c:20))}}var sS=C(()=>{"use strict";Kc();ys()});function aS(n){var s;let e=new Set,t=0,i=0;for(let a of n.meshes){t+=a.triangleCount,i+=a.vertexCount;for(let o of(s=a.materialKeys)!=null?s:[])o!=null&&e.add(o)}let r=fte({triangleCount:t,splatCount:n.splatCount,meshCount:n.meshes.length,materialCount:e.size});return{meshCount:n.meshes.length,triangleCount:t,splatCount:n.splatCount,vertexCount:i,materialCount:e.size,performanceTier:r,performanceHint:hte(r,{triangleCount:t,splatCount:n.splatCount,materialCount:e.size}),resourceWarnings:n.resourceWarnings?[...n.resourceWarnings]:void 0,boundingSize:Yr(n.boundingSize),rootName:n.rootName}}function fte(n){var e,t,i;return((e=n.splatCount)!=null?e:0)>=15e5||n.triangleCount>=12e5||n.materialCount>=96||n.meshCount>=240?"extreme":((t=n.splatCount)!=null?t:0)>=65e4||n.triangleCount>=45e4||n.materialCount>=48||n.meshCount>=120?"heavy":((i=n.splatCount)!=null?i:0)>=18e4||n.triangleCount>=12e4||n.materialCount>=18||n.meshCount>=48?"medium":"light"}function hte(n,e){var r;let t=((r=e.splatCount)!=null?r:e.triangleCount).toLocaleString(),i=e.splatCount!==void 0?"splats":"triangles";return n==="extreme"?`${t} ${i}, ${e.materialCount.toLocaleString()} materials. Expect automatic quality throttling while interacting.`:n==="heavy"?`${t} ${i}, ${e.materialCount.toLocaleString()} materials. Interaction may lower shadows and resolution temporarily.`:n==="medium"?`${t} ${i}, ${e.materialCount.toLocaleString()} materials. Performance should be steady on most desktop GPUs.`:`${t} ${i}, ${e.materialCount.toLocaleString()} materials. Performance tier: light.`}function oS(n){var e;return{name:n.name,triangleCount:n.triangleCount,vertexCount:n.vertexCount,materialName:(e=n.materialName)!=null?e:null,boundingSize:Yr(n.boundingSize),center:Yr(n.center)}}function s1(n){return n.splatCount!==void 0?"Splats":"Triangles"}function a1(n){var e;return(e=n.splatCount)!=null?e:n.triangleCount}var lS=C(()=>{"use strict";ys()});function gu(n,e="-"){if(typeof n!="string")return e;let t=n.trim();return t.length>0?t:e}function o1(n,e={}){var r,s;let t=(r=e.countLabel)!=null?r:s1(n),i=(s=e.decimals)!=null?s:3;return[`| Meshes | ${n.meshCount} |`,`| ${t} | ${a1(n).toLocaleString()} |`,`| Vertices | ${n.vertexCount.toLocaleString()} |`,`| Materials | ${n.materialCount} |`,...n.performanceTier?[`| Performance Tier | ${n.performanceTier} |`]:[],`| Bounding Size | ${h0(n.boundingSize,{decimals:i})} |`]}function cS(n){return n.replace(/\|/g,"\\|").replace(/\r?\n/g," ")}function h0(n,e={}){var r,s;let t=(r=e.decimals)!=null?r:3,i=(s=e.separator)!=null?s:" x ";return`${n.x.toFixed(t)}${i}${n.y.toFixed(t)}${i}${n.z.toFixed(t)}`}function l1(n,e={}){return["| Metric | Value |","|--------|-------|",...o1(n,e)]}function dte(n,e,t={}){return["| Property | Value |","|----------|-------|",`| Format | ${n} |`,...o1(e,t)]}function fS(n){var r,s;let e=[];e.push(`## ${n.title} - Model Info`),e.push(""),e.push(...dte(n.format,n.summary,{countLabel:n.countLabel})),e.push("");let t=(r=n.meshBreakdown)!=null?r:[];t.length>1&&t.length<=50&&(e.push("### Mesh Breakdown"),e.push(""),e.push("| # | Name | Triangles | Vertices | Material |"),e.push("|---|------|-----------|----------|----------|"),t.forEach((a,o)=>{let l=a.triangleCount===null?"-":a.triangleCount.toLocaleString();e.push(`| ${o+1} | ${cS(gu(a.name,`mesh-${o+1}`))} | ${l} | ${a.vertexCount.toLocaleString()} | ${cS(gu(a.materialName))} |`)}),e.push(""));let i=Array.from((s=n.materialNames)!=null?s:[]).map(a=>gu(a,"")).filter(a=>a.length>0);if(i.length>0){let a=Array.from(new Set(i));e.push("### Materials"),e.push("");for(let o of a)e.push(`- ${o}`);e.push("")}return e.join(` -`)}function hS(n,e={}){var r;let t=gu((r=e.title)!=null?r:n.name,"Selected Part"),i=[];return i.push(`## ${t} - Part Info`),i.push(""),i.push("| Property | Value |"),i.push("|----------|-------|"),i.push(`| Mesh | ${cS(gu(n.name))} |`),i.push(`| Triangles | ${n.triangleCount.toLocaleString()} |`),i.push(`| Vertices | ${n.vertexCount.toLocaleString()} |`),i.push(`| Material | ${cS(gu(n.materialName))} |`),i.push(`| Bounding Size | ${h0(n.boundingSize)} |`),i.push(`| Center | ${h0(n.center,{separator:", "})} |`),i.push(""),i.join(` -`)}var dS=C(()=>{"use strict";lS()});function mS(n){return new d0(n)}var uS,d0,u0=C(()=>{"use strict";uS=class uS{constructor(e){this.originals=new Map;this.unsubscribe=null;this.active=!1;this.drag=null;this.pendingDrag=null;this.selected=null;this.activePointerId=null;this.frameCount=0;this.adapter=e;for(let t of e.getParts())this.originals.set(e.getPartId(t),e.captureTransform(t))}isEnabled(){return this.active}setEnabled(e){var t,i,r;return this.active===e?this.active:(this.active=e,this.finishDrag(),this.setSelected(null),this.activePointerId=null,e?this.unsubscribe=this.adapter.subscribe({onPointerDown:(s,a)=>this.handlePointerDown(s,a),onPointerMove:s=>this.handlePointerMove(s),onPointerUp:s=>this.handlePointerUp(s),onRender:()=>this.handleRender()}):((t=this.unsubscribe)==null||t.call(this),this.unsubscribe=null),(r=(i=this.adapter).requestRender)==null||r.call(i),this.active)}toggle(){return this.setEnabled(!this.active)}reset(){var e,t;this.finishDrag(),this.setSelected(null);for(let i of this.adapter.getParts()){if(this.adapter.isDisposed(i))continue;let r=this.originals.get(this.adapter.getPartId(i));r&&this.adapter.restoreTransform(i,r)}this.activePointerId=null,(t=(e=this.adapter).requestRender)==null||t.call(e)}dispose(){this.setEnabled(!1),this.originals.clear()}handlePointerDown(e,t){if(t.button!==0||t.isPrimary===!1)return;let i=this.adapter.resolvePart(e);if(!i){this.drag=null,this.pendingDrag=null,this.activePointerId=null,this.setSelected(null);return}this.activePointerId=t.pointerId,this.setSelected(i),this.pendingDrag={part:i,event:t,x:t.clientX,y:t.clientY}}handlePointerMove(e){if(!(this.activePointerId!==null&&e.pointerId!==this.activePointerId)){if(!this.drag&&this.pendingDrag){if(e.pointerType==="mouse"&&(e.buttons&1)===0){this.pendingDrag=null,this.activePointerId=null;return}if(Math.hypot(e.clientX-this.pendingDrag.x,e.clientY-this.pendingDrag.y){"use strict";Gs();ys();u0();c1=new ct(4890367),ute=new ct(1722990),m0=class{constructor(e,t,i,r,s,a){this.raycaster=new Vc;this.pointer=new Lt;this.tempBox=new xr;this.tempCenter=new ne;this.tempDirection=new ne;this.tempCameraForward=new ne;this.tempCameraRight=new ne;this.tempCameraUp=new ne;this.selectionHelper=null;this.lastOccluded=!1;this.selected=null;this.lastPointerDown=null;this.partPointerActive=!1;this.activePointerId=null;this.scene=e,this.camera=t,this.canvas=i,this.meshes=r,this.controls=s,this.invalidate=a}requestRender(){this.invalidate()}getParts(){return this.meshes}getPartId(e){return e.id}isDisposed(e){return!e.parent&&!this.meshes.includes(e)}captureTransform(e){return{parent:e.parent,position:e.position.clone(),quaternion:e.quaternion.clone(),scale:e.scale.clone()}}restoreTransform(e,t){t.parent&&t.parent.add(e),e.position.copy(t.position),e.quaternion.copy(t.quaternion),e.scale.copy(t.scale),e.updateMatrixWorld(!0),this.requestRender()}subscribe(e){this.canvas.classList.add("ai3d-disassembly-active");let t=s=>{var o,l;if(s.button!==0||s.isPrimary===!1)return;this.lastPointerDown={x:s.clientX,y:s.clientY};let a=this.resolvePickTarget(s);if(this.partPointerActive=!!a,this.partPointerActive){s.preventDefault(),s.stopPropagation(),this.controls.enabled=!1,this.activePointerId=s.pointerId;try{(l=(o=this.canvas).setPointerCapture)==null||l.call(o,s.pointerId)}catch(c){}}e.onPointerDown(a,s)},i=s=>{this.activePointerId!==null&&s.pointerId!==this.activePointerId||(this.partPointerActive&&(s.preventDefault(),s.stopPropagation()),e.onPointerMove(s))},r=s=>{var a,o;if(!(this.activePointerId!==null&&s.pointerId!==this.activePointerId)){if(this.partPointerActive&&(s.preventDefault(),s.stopPropagation()),this.lastPointerDown=null,e.onPointerUp(s),this.partPointerActive=!1,this.activePointerId!==null&&((o=(a=this.canvas).hasPointerCapture)!=null&&o.call(a,this.activePointerId)))try{this.canvas.releasePointerCapture(this.activePointerId)}catch(l){}this.activePointerId=null,this.controls.enabled=!0}};return this.canvas.addEventListener("pointerdown",t),window.addEventListener("pointermove",i),window.addEventListener("pointerup",r),()=>{var s,a;if(this.canvas.removeEventListener("pointerdown",t),window.removeEventListener("pointermove",i),window.removeEventListener("pointerup",r),this.canvas.classList.remove("ai3d-disassembly-active","ai3d-disassembly-dragging"),this.partPointerActive=!1,this.activePointerId!==null&&((a=(s=this.canvas).hasPointerCapture)!=null&&a.call(s,this.activePointerId)))try{this.canvas.releasePointerCapture(this.activePointerId)}catch(o){}this.activePointerId=null,this.controls.enabled=!0}}resolvePart(e){return e&&this.isMeshInSet(e)?e:null}setSelected(e){var t;(t=this.selectionHelper)==null||t.removeFromParent(),this.selectionHelper=null,this.selected=e,this.lastOccluded=!1,e&&!this.isDisposed(e)&&(this.selectionHelper=new Rl(e,c1),this.scene.add(this.selectionHelper)),this.requestRender()}beginDrag(e,t){let i=this.getPointOnDragPlane(e,t);if(!i)return null;t.preventDefault(),t.stopPropagation(),e.removeFromParent(),this.scene.add(e),this.canvas.classList.add("ai3d-disassembly-dragging");let r="move";t.shiftKey&&(r="rotate");let s=this.tempBox.setFromObject(e).getCenter(this.tempCenter).clone(),a=this.tempCameraForward;this.camera.getWorldDirection(a);let o=bd(Zt(i),Zt(a));return o?(this.controls.enabled=!1,this.requestRender(),{mesh:e,mode:r,plane:o,startPoint:i.clone(),startPosition:e.position.clone(),startQuaternion:e.quaternion.clone(),pivot:s,pointerX:t.clientX,pointerY:t.clientY}):null}updateDrag(e,t){if(t.preventDefault(),t.stopPropagation(),e.mode==="rotate"){this.updateRotation(e,t);return}let i=this.getRayPlanePoint(t,e.plane);if(!i)return;let r=i.clone().sub(e.startPoint);e.mesh.position.copy(e.startPosition).add(r),e.mesh.updateMatrixWorld(!0),this.requestRender()}endDrag(e){this.controls.enabled=!0,this.canvas.classList.remove("ai3d-disassembly-dragging"),this.requestRender()}updateSelectionOcclusion(e){let i=this.tempBox.setFromObject(e).getCenter(this.tempCenter),r=this.camera.position,s=Ic(Zt(r),Zt(i));if(!s)return;let a=this.tempDirection.set(s.direction.x,s.direction.y,s.direction.z);this.raycaster.set(r,a),this.raycaster.far=s.distance;let o=this.raycaster.intersectObjects(this.meshes,!1)[0],l=!!o&&bc(o.distance,s.distance,s.epsilon);l!==this.lastOccluded&&(this.lastOccluded=l,this.selectionHelper&&(this.selectionHelper.material.color.set(l?ute:c1),this.requestRender()))}isMeshInSet(e){return this.meshes.includes(e)}updateRotation(e,t){let i=t.clientX-e.pointerX,r=t.clientY-e.pointerY,s=this.tempCameraForward;this.camera.getWorldDirection(s);let a=this.tempCameraUp.copy(this.camera.up).normalize(),o=this.tempCameraRight.crossVectors(a,s).normalize(),l=kg({startPosition:Zt(e.startPosition),pivot:Zt(e.pivot),startRotationQuaternion:Gg(e.startQuaternion),yawAxis:Zt(a),pitchAxis:Zt(o),deltaX:i,deltaY:r,sensitivity:.01});l&&(e.mesh.position.set(l.position.x,l.position.y,l.position.z),e.mesh.quaternion.set(l.rotationQuaternion.x,l.rotationQuaternion.y,l.rotationQuaternion.z,l.rotationQuaternion.w),e.mesh.updateMatrixWorld(!0),this.requestRender())}resolvePickTarget(e){let t=this.canvas.getBoundingClientRect();this.pointer.x=(e.clientX-t.left)/t.width*2-1,this.pointer.y=-((e.clientY-t.top)/t.height)*2+1,this.raycaster.setFromCamera(this.pointer,this.camera);let i=this.raycaster.intersectObjects(this.meshes,!1)[0];return(i==null?void 0:i.object)instanceof ci?i.object:null}getPointOnDragPlane(e,t){var o;let r=this.tempBox.setFromObject(e).getCenter(this.tempCenter),s=this.tempCameraForward;this.camera.getWorldDirection(s);let a=bd(Zt(r),Zt(s));return a&&(o=this.getRayPlanePoint(t,a))!=null?o:r}getRayPlanePoint(e,t){let i=this.canvas.getBoundingClientRect(),r=e.clientX-i.left,s=e.clientY-i.top;this.pointer.set(r/i.width*2-1,-(s/i.height)*2+1),this.raycaster.setFromCamera(this.pointer,this.camera);let a=Vg({origin:Zt(this.raycaster.ray.origin),direction:Zt(this.raycaster.ray.direction)},t);return a?new ne(a.x,a.y,a.z):null}}});function d1(n){return Yr(n)}function mte(n,e){return{originalPosition:d1(n),originalCenter:d1(e)}}function pS(n,e,t){let i=n.getRootCenter();for(let r of n.getParts()){let s=n.getPartState(r);s||(s=mte(n.getPartPosition(r),n.getPartCenter(r)),n.setPartState(r,s));let a=(s.originalCenter[t]-i[t])*e;n.setPartPosition(r,mN(s.originalPosition,t,a))}}function _S(n){for(let e of n.getParts()){let t=n.getPartState(e);t&&n.setPartPosition(e,t.originalPosition)}}var p0=C(()=>{"use strict";ys()});function gS(n){return Yr(n)}function pte(n){return n instanceof ci}function _te(n){let e=[];return n.traverse(t=>{pte(t)&&t.geometry&&e.push(t)}),e}function u1(n,e,t){pS(new vS(n),e,t)}function _0(n){_S(new vS(n))}var vS,m1=C(()=>{"use strict";Gs();ys();Kc();p0();vS=class{constructor(e){this.root=e}getParts(){return _te(this.root)}getRootCenter(){let e=new xr().setFromObject(this.root);return Sn({min:Zt(e.min),max:Zt(e.max)})}getPartPosition(e){return Zt(e.position)}getPartCenter(e){let i=new xr().setFromObject(e).getCenter(new ne);return Zt(i)}setPartPosition(e,t){e.position.set(t.x,t.y,t.z)}getPartState(e){var i;let t=(i=e.userData)!=null?i:{};return t._previewExplodeState?{originalPosition:gS(t._previewExplodeState.originalPosition),originalCenter:gS(t._previewExplodeState.originalCenter)}:null}setPartState(e,t){e.userData._previewExplodeState={originalPosition:gS(t.originalPosition),originalCenter:gS(t.originalCenter)}}}});var g1={};et(g1,{ThreeModelPreview:()=>TS,createThreeModelPreview:()=>Fte});function SS(n){return n instanceof ci}function p1(n){return n instanceof Lo||n instanceof ka||n instanceof xl}function Xa(n){return n?Array.isArray(n)?n:[n]:[]}function g0(n){var r,s,a,o;let e=n.geometry,t=(s=(r=e.getIndex())==null?void 0:r.count)!=null?s:0;if(t>0)return Math.floor(t/3);let i=(o=(a=e.getAttribute("position"))==null?void 0:a.count)!=null?o:0;return Math.floor(i/3)}function v0(n){var e,t;return(t=(e=n.geometry.getAttribute("position"))==null?void 0:e.count)!=null?t:0}function E0(n){return n?n.name||n.type||`material-${n.uuid}`:null}function _1(n){let e=n.clone();return e.transparent=!0,e.opacity=Math.max(0,Math.min(1,n.opacity))*gte,e.depthWrite=!1,e.needsUpdate=!0,e}function Ote(n){return Array.isArray(n)?n.map(_1):_1(n)}function Nte(n){for(let e of Xa(n))e.dispose()}function vu(n){let e=new xr().setFromObject(n);return i_(Zt(e.min),Zt(e.max))}function Fte(n){return new TS(n)}var ES,gte,vte,Ete,Ste,Tte,Ate,n_,xte,Rte,bte,Ite,Mte,Cte,yte,Pte,Dte,Lte,TS,v1=C(()=>{"use strict";Gs();Iw();Mw();$w();ca();Kc();sS();dS();lS();ys();h1();m1();ea();ES=new ct("#20242e"),gte=.242,vte=.28,Ete=2.5,Ste=1.5,Tte=1.15,Ate=180,n_=30,xte=8,Rte=28,bte=18,Ite=2,Mte=28,Cte=.86,yte=1.08,Pte=.62,Dte=.86,Lte=4;TS=class{constructor(e){this.raycaster=new Vc;this.occlusionRaycaster=new Vc;this.renderObservers=new Set;this.pointer=new Lt;this.annotationProjection=new ne;this.annotationDirection=new ne;this.clock={last:performance.now()};this.defaultLights=[];this.configLights=[];this.environmentTarget=null;this.rootObject=null;this.loadedExt="";this.resourceWarnings=[];this.renderHandle=0;this.quality="high";this.renderScale=1;this.interactivePixelRatioActive=!1;this.interactionPixelRatioDeadline=0;this.renderObserverSettleFrames=n_;this.frameBudgetPixelRatioScale=1;this.frameBudgetSlowStreak=0;this.frameBudgetFastStreak=0;this.frameBudgetObserverStride=1;this.frameBudgetObserverCursor=0;this.frameBudgetShadowDeferred=!1;this.lastFrameDurationMs=0;this.viewportVisible=!0;this.viewportObserver=null;this.lastDisposalAudit={reason:"initial",meshCount:0,geometryCount:0,materialCount:0,textureCount:0,objectCount:0,timestamp:performance.now()};this.axesHelper=null;this.bboxHelper=null;this.groundShadowMesh=null;this.gridHelper=null;this.bboxEnabled=!1;this.wireframeEnabled=!1;this.sceneConfig={};this.focusSelectionEnabled=!1;this.focusedMesh=null;this.highlightedMesh=null;this.selectionHelper=null;this.focusHelper=null;this.mixer=null;this.animationPlaying=!1;this.initialTarget=new ne;this.initialPosition=new ne(3,2,3);this.initialFov=45;this.lastPointerDown=null;this.originalMaterials=new Map;this.focusDimMaterials=new Map;this._lastPickResult={mesh:null,pickedPoint:null,screenX:0,screenY:0};this._onPickCallbacks=[];this.disassembly=null;this.disassemblySetup=!1;this.renderDirty=!0;this.cachedMeshes=null;this.cachedMeshRoot=null;this.cameraAnimHandle=0;this.preventCanvasWheelScroll=e=>{e.preventDefault(),e.stopPropagation()};this.handleControlsChange=()=>{let e=performance.now();this.interactionPixelRatioDeadline=e+Ate,this.activateInteractivePixelRatio()&&this.resizeRenderer(),this.markDirty()};this.handleViewportIntersection=e=>{let t=e[e.length-1];if(!t)return;let i=t.isIntersecting&&t.intersectionRatio>0;i!==this.viewportVisible&&(this.viewportVisible=i,i?(this.clock.last=performance.now(),this.markDirty(),this.markShadowDirty(),this.startRenderLoop()):(cancelAnimationFrame(this.renderHandle),this.renderHandle=0))};this.handlePointerDown=e=>{e.button!==0||e.isPrimary===!1||(this.lastPointerDown={x:e.clientX,y:e.clientY})};this.handlePointerUp=e=>{var i;if(e.button!==0||e.isPrimary===!1)return;let t=this.lastPointerDown;this.lastPointerDown=null,t&&(Math.hypot(e.clientX-t.x,e.clientY-t.y)>4||(i=this.disassembly)!=null&&i.isEnabled()||this.dispatchPick(e))};this.renderer=new HE({canvas:e,antialias:!0,alpha:!0,preserveDrawingBuffer:!0,powerPreference:"high-performance"}),this.renderer.outputColorSpace=Ni,this.renderer.toneMapping=Bs,this.renderer.toneMappingExposure=1,this.renderer.shadowMap.enabled=!0,this.renderer.shadowMap.type=qv,this.renderer.shadowMap.autoUpdate=!1,this.renderer.shadowMap.needsUpdate=!0,this.renderer.setClearColor(ES,1),this.scene=new oh,this.installGlobalEnvironment(),this.camera=new Br(this.initialFov,1,.01,2e3),this.camera.position.copy(this.initialPosition),this.camera.lookAt(this.initialTarget),this.scene.add(this.camera),this.controls=new KE(this.camera,e),this.controls.enableDamping=!0,this.controls.dampingFactor=.08,this.controls.zoomSpeed=.85,this.controls.screenSpacePanning=!0,this.controls.target.copy(this.initialTarget),this.controls.addEventListener("change",this.handleControlsChange),this.installDefaultLighting(),this.resizeObs=new ResizeObserver(()=>this.resizeRenderer()),this.resizeObs.observe(e),typeof IntersectionObserver!="undefined"&&(this.viewportObserver=new IntersectionObserver(this.handleViewportIntersection,{root:null,threshold:[0,.01]}),this.viewportObserver.observe(e)),e.addEventListener("wheel",this.preventCanvasWheelScroll,{passive:!1}),e.addEventListener("pointerdown",this.handlePointerDown),e.addEventListener("pointerup",this.handlePointerUp),this.resizeRenderer(),this.startRenderLoop()}async loadModel(e,t,i,r){var l;this.clearLoadedModel("model-switch"),this.loadedExt=t.toLowerCase(),this.resourceWarnings=[];let s,a=[];if(this.loadedExt==="glb"||this.loadedExt==="gltf"){let c=await qw(e,this.loadedExt,i,r);s=c.scene,a=c.animations,this.resourceWarnings=c.warnings}else if(this.loadedExt==="stl")s=await Zw(e);else if(this.loadedExt==="ply")s=await Qw(e);else if(this.loadedExt==="obj"){let c=await Jw(e,i,r);s=c.object,this.resourceWarnings=c.warnings}else throw new Error(`Three preview does not support .${this.loadedExt} format`);if(this.rootObject=s,this.scene.add(s),this.invalidateMeshCache(),this.prepareModelForQuality(s),this.updateShadowFraming(),this.syncSceneHelpers(),this.markDirty(),a.length>0){this.mixer=new Up(s);for(let c of a)this.mixer.clipAction(c).play();this.animationPlaying=!0}let o=this.computeSummary(s);if(this.fitCameraToObject(s),this.axesHelper){let c=Math.max(o.boundingSize.x,o.boundingSize.y,o.boundingSize.z)||1;this.axesHelper.scale.setScalar(Math.max(.5,c*.25))}return this.bboxEnabled&&this.ensureBoundingBoxHelper(),this.disassemblySetup=!1,(l=this.disassembly)==null||l.dispose(),this.disassembly=null,o}applyConfig(e){e.camera&&this.applyCameraConfig(e.camera),e.lights&&this.applyLightConfig(e.lights),e.scene&&this.applySceneConfig(e.scene)}destroy(){var t,i;cancelAnimationFrame(this.renderHandle),cancelAnimationFrame(this.cameraAnimHandle),this._onPickCallbacks=[],this.renderObservers.clear(),(t=this.disassembly)==null||t.dispose(),this.disassembly=null,this.disassemblySetup=!1,this.clearFocusedMesh(),this.clearSelectionHighlight(),this.clearLoadedModel("destroy");for(let r of this.configLights)this.disposeConfiguredLight(r);this.configLights.length=0;for(let r of this.defaultLights)this.disposeConfiguredLight(r);this.defaultLights.length=0,this.disposeGlobalEnvironment(),this.controls.removeEventListener("change",this.handleControlsChange),this.controls.dispose();let e=this.renderer.domElement;e.removeEventListener("wheel",this.preventCanvasWheelScroll),e.removeEventListener("pointerdown",this.handlePointerDown),e.removeEventListener("pointerup",this.handlePointerUp),this.resizeObs.disconnect(),(i=this.viewportObserver)==null||i.disconnect(),this.viewportObserver=null,this.renderer.dispose()}getCanvas(){return this.renderer.domElement}captureSnapshot(){return this.renderNow(0),this.renderer.domElement.toDataURL("image/png")}getAnnotationProvider(){return{canvas:this.renderer.domElement,observeRender:t=>(this.renderObservers.add(t),{remove:()=>this.renderObservers.delete(t)}),getCameraStateKey:()=>this.getAnnotationCameraStateKey(),projectWorldPoint:(t,i)=>this.projectAnnotationWorldPoint(t,i),isWorldPointOccluded:t=>this.isAnnotationWorldPointOccluded(t)}}exportModelInfo(e){if(!this.rootObject)return"";let t=this.computeSummary(this.rootObject),i=this.getRenderableMeshes(this.rootObject),r=e&&$s(e)||t.rootName;return fS({title:r,format:this.loadedExt.toUpperCase(),summary:t,meshBreakdown:i.map(s=>({name:s.name||`mesh-${s.id}`,triangleCount:g0(s),vertexCount:v0(s),materialName:E0(Xa(s.material)[0])}))})}getModelEvidence(){if(!this.rootObject)return null;let e=this.getRenderableMeshes(this.rootObject).map(i=>this.computePartSummary(i)),t=new Set;for(let i of this.getRenderableMeshes(this.rootObject))for(let r of Xa(i.material)){let s=E0(r);s&&t.add(s)}return{summary:this.computeSummary(this.rootObject),parts:e,materialNames:Array.from(t).sort((i,r)=>i.localeCompare(r)),resourceWarnings:[...this.resourceWarnings],capturedAt:new Date().toISOString()}}getSelectedPartInfo(){var t;let e=(t=this.focusedMesh)!=null?t:SS(this._lastPickResult.mesh)?this._lastPickResult.mesh:null;return e?this.computePartSummary(e):null}exportSelectedPartInfo(){let e=this.getSelectedPartInfo();return e?hS(e):""}getPickWorldPoint(e){return e.pickedPoint&&typeof e.pickedPoint=="object"?Zt(e.pickedPoint):e.mesh instanceof ci?Sn(vu(e.mesh)):null}onPick(e){return this._onPickCallbacks.push(e),()=>{this._onPickCallbacks=this._onPickCallbacks.filter(t=>t!==e)}}resetView(){this.rootObject&&_0(this.rootObject),this.resetDisassembly(),this.clearFocusedMesh(),this.clearSelectionHighlight(),this.camera.fov=this.initialFov,this.camera.position.copy(this.initialPosition),this.camera.updateProjectionMatrix(),this.controls.target.copy(this.initialTarget),this.controls.update(),this.markDirty(),this.renderNow(performance.now())}toggleFocusSelection(){var t;let e=!this.focusSelectionEnabled;return e&&((t=this.disassembly)!=null&&t.isEnabled())&&this.disassembly.setEnabled(!1),this.focusSelectionEnabled=e,this.focusSelectionEnabled?(this.clearSelectionHighlight(),this._lastPickResult.mesh instanceof ci&&this.setFocusedMesh(this._lastPickResult.mesh)):this.clearFocusedMesh(),this.markDirty(),this.focusSelectionEnabled}isFocusSelectionEnabled(){return this.focusSelectionEnabled}toggleWireframe(){if(this.wireframeEnabled=!this.wireframeEnabled,!this.rootObject)return this.wireframeEnabled;for(let e of this.getRenderableMeshes(this.rootObject))for(let t of Xa(e.material))"wireframe"in t&&(t.wireframe=this.wireframeEnabled,t.needsUpdate=!0);return this.markDirty(),this.wireframeEnabled}toggleOrientationGizmo(){return this.axesHelper||(this.axesHelper=new nu(1.2),this.axesHelper.visible=!1,this.scene.add(this.axesHelper)),this.axesHelper.visible=!this.axesHelper.visible,this.markDirty(),this.axesHelper.visible}isOrientationGizmoEnabled(){var e;return!!((e=this.axesHelper)!=null&&e.visible)}toggleBoundingBox(){var e;return this.bboxEnabled=!this.bboxEnabled,this.bboxEnabled?(this.ensureBoundingBoxHelper(),this.markDirty(),!!this.bboxHelper):((e=this.bboxHelper)==null||e.removeFromParent(),this.bboxHelper=null,this.markDirty(),!1)}hasAnimations(){return this.mixer!==null}toggleAnimation(){return this.mixer?(this.animationPlaying=!this.animationPlaying,this.mixer.timeScale=this.animationPlaying?1:0,this.markDirty(),this.animationPlaying):!1}setRenderQuality(e,t=this.renderScale){this.quality=e,this.renderScale=t,this.applyShadowQuality(),this.resizeRenderer()}setRenderScale(e){return this.renderScale=Math.min(2,Math.max(.25,e)),this.resizeRenderer(),Number(this.renderScale.toFixed(2))}getPerformanceSnapshot(){return{backend:"three",renderScale:Number(this.renderScale.toFixed(2)),quality:this.quality,pixelRatio:Number(this.renderer.getPixelRatio().toFixed(2)),interactivePixelRatioActive:this.interactivePixelRatioActive,renderDirty:this.renderDirty,renderObserverCount:this.renderObservers.size,renderObserverSettleFrames:this.renderObserverSettleFrames,frameBudgetPixelRatioScale:Number(this.frameBudgetPixelRatioScale.toFixed(2)),frameBudgetObserverStride:this.frameBudgetObserverStride,frameBudgetShadowDeferred:this.frameBudgetShadowDeferred,lastFrameDurationMs:Number(this.lastFrameDurationMs.toFixed(2)),viewportVisible:this.viewportVisible,disposalAudit:{...this.lastDisposalAudit},meshCount:this.rootObject?this.getRenderableMeshes(this.rootObject).length:0}}setExplode(e,t){this.rootObject&&(u1(this.rootObject,e,t),this.markShadowDirty(),this.markDirty())}resetExplode(){this.rootObject&&(_0(this.rootObject),this.markShadowDirty(),this.markDirty())}focusWorldPoint(e){let t=new ne(e.x,e.y,e.z),i=this.camera.position.distanceTo(this.controls.target),r=t.clone().sub(this.camera.position).normalize(),s=t.clone().sub(r.multiplyScalar(i));this.animateCamera(s,t)}toggleDisassembly(){if(this.ensureDisassembly(),!this.disassembly)return!1;let e=!this.disassembly.isEnabled();e&&(this.focusSelectionEnabled=!1,this.clearFocusedMesh(),this.clearSelectionHighlight());let t=this.disassembly.setEnabled(e);return t||this.disassembly.reset(),t}resetDisassembly(){var e;(e=this.disassembly)==null||e.reset()}isDisassemblyEnabled(){var e,t;return(t=(e=this.disassembly)==null?void 0:e.isEnabled())!=null?t:!1}ensureDisassembly(){if(this.disassemblySetup||(this.disassemblySetup=!0,!this.rootObject))return;let e=this.getRenderableMeshes(this.rootObject);e.length!==0&&(this.disassembly=f1(this.scene,this.camera,this.renderer.domElement,e,this.controls,()=>{this.markShadowDirty(),this.markDirty()}))}animateCamera(e,t){cancelAnimationFrame(this.cameraAnimHandle);let i=this.camera.position.clone(),r=this.controls.target.clone(),s=500,a=performance.now(),o=()=>{let l=performance.now()-a,c=Math.min(1,l/s),f=c<.5?4*c*c*c:1-Math.pow(-2*c+2,3)/2;this.camera.position.lerpVectors(i,e,f),this.controls.target.lerpVectors(r,t,f),this.controls.update(),this.markDirty(),c<1&&(this.cameraAnimHandle=requestAnimationFrame(o))};this.cameraAnimHandle=requestAnimationFrame(o)}startRenderLoop(){if(this.renderHandle||!this.viewportVisible)return;let e=()=>{if(!this.viewportVisible){this.renderHandle=0;return}this.renderHandle=requestAnimationFrame(e),this.renderNow(performance.now())};this.renderHandle=requestAnimationFrame(e)}renderNow(e){var o,l,c;let t=this.renderer.domElement;if(!this.viewportVisible||!t.isConnected||t.clientWidth<=0||t.clientHeight<=0)return;let i=Math.max(0,(e-this.clock.last)/1e3);this.clock.last=e;let r=this.controls.update(),s=!!this.mixer&&this.animationPlaying;if(s&&this.mixer&&(this.mixer.update(i),this.markShadowDirty()),this.restoreInteractivePixelRatioIfIdle(e,r),!r&&!s&&!this.renderDirty){this.renderObserverSettleFrames>0&&(this.renderObserverSettleFrames--,this.notifyRenderObservers());return}this.renderDirty=!1,this.renderObserverSettleFrames=n_,(o=this.bboxHelper)==null||o.update(),(l=this.selectionHelper)==null||l.update(),(c=this.focusHelper)==null||c.update();let a=performance.now();this.renderer.render(this.scene,this.camera),this.updateFrameBudget(performance.now()-a),this.notifyRenderObservers()}notifyRenderObservers(){if(!(this.frameBudgetObserverStride>1&&(this.frameBudgetObserverCursor=(this.frameBudgetObserverCursor+1)%this.frameBudgetObserverStride,this.frameBudgetObserverCursor!==0)))for(let e of this.renderObservers)e()}markDirty(){this.renderDirty=!0,this.startRenderLoop()}markShadowDirty(){if(this.shouldDeferShadowRefresh()){this.frameBudgetShadowDeferred=!0;return}this.frameBudgetShadowDeferred=!1,this.renderer.shadowMap.needsUpdate=!0}activateInteractivePixelRatio(){if(this.interactivePixelRatioActive)return!1;let e=this.computePixelRatio(!1);return this.computePixelRatio(!0)>=e?!1:(this.interactivePixelRatioActive=!0,!0)}restoreInteractivePixelRatioIfIdle(e,t){!this.interactivePixelRatioActive||t||e=Rte?(this.frameBudgetSlowStreak++,this.frameBudgetFastStreak=0):e<=bte?(this.frameBudgetFastStreak++,this.frameBudgetSlowStreak=0):(this.frameBudgetSlowStreak=0,this.frameBudgetFastStreak=0),this.frameBudgetSlowStreak>=Ite){this.frameBudgetSlowStreak=0;let t=Math.max(Pte,this.frameBudgetPixelRatioScale*Cte);t=Mte&&this.frameBudgetPixelRatioScale<1&&(this.frameBudgetFastStreak=0,this.frameBudgetPixelRatioScale=Math.min(1,this.frameBudgetPixelRatioScale*yte),this.frameBudgetObserverStride=Math.max(1,this.frameBudgetObserverStride-1),this.renderObserverSettleFrames=n_,this.resizeRenderer())}}resetFrameBudget(){let e=this.frameBudgetPixelRatioScale!==1||this.frameBudgetObserverStride!==1;this.frameBudgetPixelRatioScale=1,this.frameBudgetSlowStreak=0,this.frameBudgetFastStreak=0,this.frameBudgetObserverStride=1,this.frameBudgetObserverCursor=0,this.renderObserverSettleFrames=n_,e&&this.markDirty()}shouldDeferShadowRefresh(){return this.interactivePixelRatioActive&&this.frameBudgetPixelRatioScale<=Dte}resizeRenderer(){let e=this.renderer.domElement,t=Math.max(1,Math.round(e.clientWidth||e.width||1)),i=Math.max(1,Math.round(e.clientHeight||e.height||1));this.renderer.setPixelRatio(this.computePixelRatio()),this.renderer.setSize(t,i,!1),this.camera.aspect=t/i,this.camera.updateProjectionMatrix(),this.markDirty()}applyCameraConfig(e){typeof e.fov=="number"&&Number.isFinite(e.fov)&&(this.camera.fov=e.fov,this.camera.updateProjectionMatrix()),e.position&&this.camera.position.set(...e.position),e.lookAt&&(this.controls.target.set(...e.lookAt),this.camera.lookAt(this.controls.target)),typeof e.near=="number"&&Number.isFinite(e.near)&&(this.camera.near=e.near),typeof e.far=="number"&&Number.isFinite(e.far)&&(this.camera.far=e.far),typeof e.zoom=="number"&&Number.isFinite(e.zoom)&&(this.camera.zoom=e.zoom),this.camera.updateProjectionMatrix(),this.controls.update(),this.markDirty()}applyLightConfig(e){for(let i of this.configLights)this.disposeConfiguredLight(i);this.configLights.length=0;let t=e.length>0;for(let i of this.defaultLights)i.visible=!t;for(let i of e){let r=this.createConfiguredLight(i);r&&(this.configLights.push(r),r.parent!==this.camera&&this.scene.add(r))}this.updateShadowFraming(),this.markShadowDirty(),this.markDirty()}applySceneConfig(e){if(this.sceneConfig={...this.sceneConfig,...e},e.transparent!==void 0||e.background!==void 0)if(this.sceneConfig.transparent)this.scene.background=null,this.renderer.setClearColor(ES,0);else if(this.sceneConfig.background){let t=new ct(this.sceneConfig.background);this.scene.background=t,this.renderer.setClearColor(t,1)}else this.scene.background=ES,this.renderer.setClearColor(ES,1);typeof e.autoRotate=="boolean"&&(this.controls.autoRotate=e.autoRotate),typeof e.autoRotateSpeed=="number"&&(this.controls.autoRotateSpeed=e.autoRotateSpeed),typeof e.axis=="boolean"&&this.syncAxisHelper(e.axis),this.syncSceneHelpers(),this.markDirty()}installDefaultLighting(){let e=new iu(16777215,.96);e.name="default-global-ambient";let t=new tu(16777215,7172736,.34);t.name="default-hemi",this.defaultLights.push(e,t);for(let i of this.defaultLights)this.scene.add(i)}installGlobalEnvironment(){this.disposeGlobalEnvironment();let e=new uu(this.renderer),t=new jE;this.environmentTarget=e.fromScene(t,.04),this.scene.environment=this.environmentTarget.texture,this.scene.environmentIntensity=.48,t.dispose(),e.dispose()}disposeGlobalEnvironment(){var e;this.scene.environment=null,(e=this.environmentTarget)==null||e.dispose(),this.environmentTarget=null}createConfiguredLight(e){var r,s,a,o,l,c,f;let t=e.color?new ct(e.color):new ct(16777215),i=(r=e.intensity)!=null?r:1;switch(e.type){case"ambient":return new iu(t,i);case"hemisphere":{let h=e.groundColor?new ct(e.groundColor):new ct(4473924);return new tu(t,h,i)}case"directional":{let h=new Lo(t,i),d=(s=e.position)!=null?s:[-1,2,1],u=(a=e.target)!=null?a:[0,0,0];return h.position.set(...d),h.target.position.set(...u),this.scene.add(h.target),h.castShadow=!!e.castShadow,h}case"point":{let h=new ka(t,i),d=(o=e.position)!=null?o:[0,5,0];return h.position.set(...d),h.castShadow=!!e.castShadow,typeof e.decay=="number"&&(h.decay=e.decay),h}case"spot":{let h=new xl(t,i),d=(l=e.position)!=null?l:[0,5,0],u=(c=e.target)!=null?c:[0,0,0];return h.position.set(...d),h.target.position.set(...u),this.scene.add(h.target),h.angle=e.angle?e.angle*Math.PI/180:Math.PI/4,h.penumbra=(f=e.penumbra)!=null?f:.5,typeof e.decay=="number"&&(h.decay=e.decay),h.castShadow=!!e.castShadow,h}case"attachToCam":{let h=new ka(t,i);return this.camera.add(h),h}default:return null}}disposeConfiguredLight(e){(e instanceof Lo||e instanceof xl)&&e.target.removeFromParent(),e.removeFromParent(),e.dispose()}prepareModelForQuality(e){let t=this.renderer.capabilities.getMaxAnisotropy();e.traverse(i=>{if(SS(i)){i.castShadow=!0,i.receiveShadow=!0;for(let r of Xa(i.material))this.prepareMaterialForQuality(r,t)}})}prepareMaterialForQuality(e,t){let i=e;for(let r of Object.values(i))r instanceof Ar&&(r.anisotropy=Math.max(r.anisotropy,t),r.needsUpdate=!0);e.needsUpdate=!0}applyShadowQuality(){let e=this.shadowMapSize();for(let t of this.allLights())!p1(t)||!t.castShadow||(t.shadow.mapSize.set(e,e),t.shadow.bias=-12e-5,t.shadow.normalBias=.018,t.shadow.needsUpdate=!0);this.markShadowDirty(),this.markDirty()}updateShadowFraming(){if(!this.rootObject)return;let e=new xr().setFromObject(this.rootObject),t=e.getCenter(new ne),i=e.getSize(new ne),r=Math.max(i.x,i.y,i.z,1)*1.8;for(let s of this.allLights())if(!(!p1(s)||!s.castShadow)){if(s.shadow.mapSize.set(this.shadowMapSize(),this.shadowMapSize()),s.shadow.bias=-12e-5,s.shadow.normalBias=.018,s instanceof Lo){let a=s.position.clone().sub(s.target.position);if(a.lengthSq()<.001&&a.set(4,7,5),s.target.position.copy(t),s.target.parent||this.scene.add(s.target),s.position.copy(t).add(a.normalize().multiplyScalar(r*2.4)),s.shadow.camera instanceof Do){let o=s.shadow.camera;o.left=-r,o.right=r,o.top=r,o.bottom=-r,o.near=.1,o.far=r*5,o.updateProjectionMatrix()}}s.shadow.needsUpdate=!0}this.markShadowDirty()}shadowMapSize(){return this.quality==="low"?512:this.quality==="medium"?1024:2048}allLights(){return[...this.defaultLights,...this.configLights]}syncSceneHelpers(){this.sceneConfig.groundShadow?this.createGroundShadow():this.removeGroundShadow(),this.sceneConfig.grid?this.createGrid():this.removeGrid(),typeof this.sceneConfig.axis=="boolean"&&this.syncAxisHelper(this.sceneConfig.axis)}syncAxisHelper(e){this.axesHelper||(this.axesHelper=new nu(1.2),this.scene.add(this.axesHelper)),this.axesHelper.visible=e}createGroundShadow(){if(!this.rootObject||this.groundShadowMesh)return;let e=vu(this.rootObject),t=Sn(e),i=En(e),r=Math.max(i.x,i.z,1)*3,s=e.min.y-Math.max(r*.002,.002),a=new ci(new fh(r,r),new Dp({color:0,opacity:vte,transparent:!0}));a.name="ai3d-ground-shadow",a.rotation.x=-Math.PI/2,a.position.set(t.x,s,t.z),a.receiveShadow=!0,a.renderOrder=-1,this.scene.add(a),this.groundShadowMesh=a}removeGroundShadow(){if(this.groundShadowMesh){this.groundShadowMesh.removeFromParent(),this.groundShadowMesh.geometry.dispose();for(let e of Xa(this.groundShadowMesh.material))e.dispose();this.groundShadowMesh=null}}createGrid(){if(!this.rootObject||this.gridHelper)return;let e=vu(this.rootObject),t=Sn(e),i=En(e),r=Math.max(i.x,i.z,1)*2,s=new Vp(r,20,7305093,3423046);s.name="ai3d-grid",s.position.set(t.x,e.min.y-Math.max(r*.003,.003),t.z);for(let a of Xa(s.material))a.transparent=!0,a.opacity=.42;this.scene.add(s),this.gridHelper=s}removeGrid(){if(this.gridHelper){this.gridHelper.removeFromParent(),this.gridHelper.geometry.dispose();for(let e of Xa(this.gridHelper.material))e.dispose();this.gridHelper=null}}dispatchPick(e){var a,o,l;if(!this.rootObject||(a=this.disassembly)!=null&&a.isEnabled())return;let t=this.renderer.domElement.getBoundingClientRect();this.pointer.x=(e.clientX-t.left)/t.width*2-1,this.pointer.y=-((e.clientY-t.top)/t.height)*2+1,this.raycaster.setFromCamera(this.pointer,this.camera);let i=this.raycaster.intersectObjects(this.getRenderableMeshes(this.rootObject),!1)[0],r=(i==null?void 0:i.object)instanceof ci?i.object:null,s={mesh:r,pickedPoint:(l=(o=i==null?void 0:i.point)==null?void 0:o.clone())!=null?l:null,screenX:e.clientX,screenY:e.clientY};this._lastPickResult=s,this.focusSelectionEnabled&&r?(this.clearSelectionHighlight(),this.focusedMesh!==r&&this.setFocusedMesh(r)):this.focusSelectionEnabled?this.clearSelectionHighlight():this.updateSelectionHighlight(r),this._onPickCallbacks.forEach(c=>c(s))}clearLoadedModel(e="model-switch"){var t,i;if((t=this.disassembly)==null||t.dispose(),this.disassembly=null,this.disassemblySetup=!1,this.invalidateMeshCache(),this.markDirty(),this.clearFocusedMesh(),this.clearSelectionHighlight(),(i=this.bboxHelper)==null||i.removeFromParent(),this.bboxHelper=null,this.bboxEnabled=!1,this.removeGroundShadow(),this.removeGrid(),this.mixer=null,this.animationPlaying=!1,!this.rootObject){this.lastDisposalAudit={reason:e,meshCount:0,geometryCount:0,materialCount:0,textureCount:0,objectCount:0,timestamp:performance.now()};return}this.scene.remove(this.rootObject),this.lastDisposalAudit=this.disposeObjectGraph(this.rootObject,e),this.rootObject=null,this.markShadowDirty()}disposeObjectGraph(e,t){let i=new Set,r=new Set,s=new Set,a=0,o=0;return e.traverse(l=>{if(o++,!SS(l))return;a++;let c=l.geometry;c&&!i.has(c.uuid)&&(c.dispose(),i.add(c.uuid));for(let f of Xa(l.material))this.disposeMaterialWithTextures(f,r,s)}),{reason:t,meshCount:a,geometryCount:i.size,materialCount:r.size,textureCount:s.size,objectCount:o,timestamp:performance.now()}}disposeMaterialWithTextures(e,t,i){let r=e;for(let s of Object.values(r))if(s instanceof Ar&&!i.has(s.uuid))s.dispose(),i.add(s.uuid);else if(Array.isArray(s))for(let a of s)a instanceof Ar&&!i.has(a.uuid)&&(a.dispose(),i.add(a.uuid));t.has(e.uuid)||(e.dispose(),t.add(e.uuid))}fitCameraToObject(e){let t=vu(e),i=n1(t);this.initialTarget.set(i.target.x,i.target.y,i.target.z),this.initialPosition.set(i.position.x,i.position.y,i.position.z),this.initialFov=45;let r=En(t),s=Math.max(r.x,r.y,r.z,1),a=this.initialPosition.distanceTo(this.initialTarget);this.controls.minDistance=Math.max(i.near*4,s*.02,.001),this.controls.maxDistance=Math.max(a*8,this.controls.minDistance*10),this.resetView(),this.camera.near=i.near,this.camera.far=i.far,this.camera.updateProjectionMatrix(),this.markDirty()}getAnnotationCameraStateKey(){return[this.camera.position.x.toFixed(3),this.camera.position.y.toFixed(3),this.camera.position.z.toFixed(3),this.controls.target.x.toFixed(2),this.controls.target.y.toFixed(2),this.controls.target.z.toFixed(2),this.camera.fov.toFixed(2)].join("_")}projectAnnotationWorldPoint(e,t){let i=this.renderer.domElement;return!i.isConnected||i.clientWidth===0||i.clientHeight===0||(this.scene.updateMatrixWorld(),this.camera.updateMatrixWorld(),this.annotationProjection.set(e.x,e.y,e.z).project(this.camera),!Number.isFinite(this.annotationProjection.x)||!Number.isFinite(this.annotationProjection.y)||!Number.isFinite(this.annotationProjection.z))?!1:(t.screenX=(this.annotationProjection.x+1)/2*i.clientWidth,t.screenY=(1-this.annotationProjection.y)/2*i.clientHeight,t.depth=(this.annotationProjection.z+1)/2,!0)}isAnnotationWorldPointOccluded(e){if(!this.rootObject)return!1;let t=Ic(Zt(this.camera.position),e);if(!t)return!1;this.rootObject.updateWorldMatrix(!0,!0),this.annotationDirection.set(t.direction.x,t.direction.y,t.direction.z),this.occlusionRaycaster.set(this.camera.position,this.annotationDirection),this.occlusionRaycaster.far=t.distance;let i=this.occlusionRaycaster.intersectObjects(this.getRenderableMeshes(this.rootObject),!1)[0];return!!i&&bc(i.distance,t.distance,t.epsilon)}getRenderableMeshes(e){if(this.cachedMeshes&&this.cachedMeshRoot===e)return this.cachedMeshes;let t=[];return e.traverse(i=>{SS(i)&&i.geometry&&t.push(i)}),this.cachedMeshes=t,this.cachedMeshRoot=e,t}invalidateMeshCache(){this.cachedMeshes=null,this.cachedMeshRoot=null}ensureBoundingBoxHelper(){var e;this.rootObject&&((e=this.bboxHelper)==null||e.removeFromParent(),this.bboxHelper=new Rl(this.rootObject,16436245),this.scene.add(this.bboxHelper))}updateSelectionHighlight(e){var t;if(!this.rootObject||!e){this.clearSelectionHighlight();return}this.highlightedMesh===e&&this.selectionHelper||((t=this.selectionHelper)==null||t.removeFromParent(),this.selectionHelper=new Rl(e,4890367),this.scene.add(this.selectionHelper),this.highlightedMesh=e,this.markDirty())}setFocusedMesh(e){var i,r,s;if(!this.rootObject||!e){this.clearFocusedMesh();return}if(this.focusedMesh===e)return;let t=this.getRenderableMeshes(this.rootObject);if(!t.includes(e)){this.clearFocusedMesh();return}this.restoreFocusedMaterials(),this.disposeFocusDimMaterials();for(let a of t){if(this.originalMaterials.has(a.id)||this.originalMaterials.set(a.id,a.material),a===e){a.material=(i=this.originalMaterials.get(a.id))!=null?i:a.material;continue}let o=(r=this.originalMaterials.get(a.id))!=null?r:a.material,l=Ote(o);this.focusDimMaterials.set(a.id,l),a.material=l}(s=this.focusHelper)==null||s.removeFromParent(),this.focusHelper=new Rl(e,3065087),this.scene.add(this.focusHelper),this.focusedMesh=e,this.markDirty()}clearFocusedMesh(){var e;this.restoreFocusedMaterials(),this.disposeFocusDimMaterials(),this.originalMaterials.clear(),(e=this.focusHelper)==null||e.removeFromParent(),this.focusHelper=null,this.focusedMesh=null,this.markDirty()}restoreFocusedMaterials(){if(this.rootObject)for(let e of this.getRenderableMeshes(this.rootObject)){let t=this.originalMaterials.get(e.id);t&&(e.material=t)}}disposeFocusDimMaterials(){for(let e of this.focusDimMaterials.values())Nte(e);this.focusDimMaterials.clear()}clearSelectionHighlight(){var e;(e=this.selectionHelper)==null||e.removeFromParent(),this.selectionHelper=null,this.highlightedMesh=null,this.markDirty()}computePartSummary(e){e.updateWorldMatrix(!0,!1);let t=vu(e);return oS({name:e.name||`mesh-${e.id}`,triangleCount:g0(e),vertexCount:v0(e),materialName:E0(Xa(e.material)[0]),boundingSize:En(t),center:Sn(t)})}computeSummary(e){let t=this.getRenderableMeshes(e);return aS({rootName:e.name||"__root__",boundingSize:En(vu(e)),meshes:t.map(i=>({triangleCount:g0(i),vertexCount:v0(i),materialKeys:Xa(i.material).map(r=>r.uuid)})),resourceWarnings:this.resourceWarnings})}}});var wte,S0,T0,ee,hi=C(()=>{wte=typeof WeakRef!="undefined",S0=class{constructor(e,t=!1,i,r){this.initialize(e,t,i,r)}initialize(e,t=!1,i,r){return this.mask=e,this.skipNextObservers=t,this.target=i,this.currentTarget=r,this}},T0=class{constructor(e,t,i=null){this.callback=e,this.mask=t,this.scope=i,this._willBeUnregistered=!1,this.unregisterOnNextCall=!1,this._remove=null}remove(e=!1){this._remove&&this._remove(e)}},ee=class n{static FromPromise(e,t){let i=new n;return e.then(r=>{i.notifyObservers(r)}).catch(r=>{if(t)t.notifyObservers(r);else throw r}),i}get observers(){return this._observers}constructor(e,t=!1){this.notifyIfTriggered=t,this._observers=new Array,this._numObserversMarkedAsDeleted=0,this._hasNotified=!1,this._eventState=new S0(0),e&&(this._onObserverAdded=e)}add(e,t=-1,i=!1,r=null,s=!1){if(!e)return null;let a=new T0(e,t,r);a.unregisterOnNextCall=s,i?this._observers.unshift(a):this._observers.push(a),this._onObserverAdded&&this._onObserverAdded(a),this._hasNotified&&this.notifyIfTriggered&&this._lastNotifiedValue!==void 0&&this.notifyObserver(a,this._lastNotifiedValue);let o=wte?new WeakRef(this):{deref:()=>this};return a._remove=(l=!1)=>{let c=o.deref();c&&(l?c.remove(a):c._remove(a))},a}addOnce(e){return this.add(e,void 0,void 0,void 0,!0)}remove(e){return e?(e._remove=null,this._observers.indexOf(e)!==-1?(this._deferUnregister(e),!0):!1):!1}removeCallback(e,t){for(let i=0;i{this._remove(e)},0))}_remove(e,t=!0){if(!e)return!1;let i=this._observers.indexOf(e);return i!==-1?(t&&this._numObserversMarkedAsDeleted--,this._observers.splice(i,1),!0):!1}makeObserverTopPriority(e){this._remove(e,!1),this._observers.unshift(e)}makeObserverBottomPriority(e){this._remove(e,!1),this._observers.push(e)}notifyObservers(e,t=-1,i,r,s){if(this.notifyIfTriggered&&(this._hasNotified=!0,this._lastNotifiedValue=e),!this._observers.length)return!0;let a=this._eventState;a.mask=t,a.target=i,a.currentTarget=r,a.skipNextObservers=!1,a.lastReturnValue=e,a.userInfo=s;for(let o of this._observers)if(!o._willBeUnregistered&&(o.mask&t&&(o.unregisterOnNextCall&&this._deferUnregister(o),o.scope?a.lastReturnValue=o.callback.apply(o.scope,[e,a]):a.lastReturnValue=o.callback(e,a)),a.skipNextObservers))return!1;return!0}notifyObserver(e,t,i=-1){if(this.notifyIfTriggered&&(this._hasNotified=!0,this._lastNotifiedValue=t),e._willBeUnregistered)return;let r=this._eventState;r.mask=i,r.skipNextObservers=!1,e.unregisterOnNextCall&&this._deferUnregister(e),e.callback(t,r)}hasObservers(){return this._observers.length-this._numObserversMarkedAsDeleted>0}clear(){for(;this._observers.length;){let e=this._observers.pop();e&&(e._remove=null)}this._onObserverAdded=null,this._numObserversMarkedAsDeleted=0,this.cleanLastNotifiedState()}cleanLastNotifiedState(){this._hasNotified=!1,this._lastNotifiedValue=void 0}clone(){let e=new n;return e._observers=this._observers.slice(0),e}hasSpecificMask(e=-1){for(let t of this._observers)if(t.mask&e||t.mask===e)return!0;return!1}}});var AS,E1=C(()=>{AS=class{get wrapU(){return this._cachedWrapU}set wrapU(e){this._cachedWrapU=e}get wrapV(){return this._cachedWrapV}set wrapV(e){this._cachedWrapV=e}get wrapR(){return this._cachedWrapR}set wrapR(e){this._cachedWrapR=e}get anisotropicFilteringLevel(){return this._cachedAnisotropicFilteringLevel}set anisotropicFilteringLevel(e){this._cachedAnisotropicFilteringLevel=e}get comparisonFunction(){return this._comparisonFunction}set comparisonFunction(e){this._comparisonFunction=e}get useMipMaps(){return this._useMipMaps}set useMipMaps(e){this._useMipMaps=e}constructor(){this.samplingMode=-1,this._useMipMaps=!0,this._cachedWrapU=null,this._cachedWrapV=null,this._cachedWrapR=null,this._cachedAnisotropicFilteringLevel=null,this._comparisonFunction=0}setParameters(e=1,t=1,i=1,r=1,s=2,a=0){return this._cachedWrapU=e,this._cachedWrapV=t,this._cachedWrapR=i,this._cachedAnisotropicFilteringLevel=r,this.samplingMode=s,this._comparisonFunction=a,this}compareSampler(e){return this._cachedWrapU===e._cachedWrapU&&this._cachedWrapV===e._cachedWrapV&&this._cachedWrapR===e._cachedWrapR&&this._cachedAnisotropicFilteringLevel===e._cachedAnisotropicFilteringLevel&&this.samplingMode===e.samplingMode&&this._comparisonFunction===e._comparisonFunction&&this._useMipMaps===e._useMipMaps}}});var S1,wi,ks=C(()=>{hi();E1();(function(n){n[n.Unknown=0]="Unknown",n[n.Url=1]="Url",n[n.Temp=2]="Temp",n[n.Raw=3]="Raw",n[n.Dynamic=4]="Dynamic",n[n.RenderTarget=5]="RenderTarget",n[n.MultiRenderTarget=6]="MultiRenderTarget",n[n.Cube=7]="Cube",n[n.CubeRaw=8]="CubeRaw",n[n.CubePrefiltered=9]="CubePrefiltered",n[n.Raw3D=10]="Raw3D",n[n.Raw2DArray=11]="Raw2DArray",n[n.DepthStencil=12]="DepthStencil",n[n.CubeRawRGBD=13]="CubeRawRGBD",n[n.Depth=14]="Depth"})(S1||(S1={}));wi=class n extends AS{get useMipMaps(){return this._useMipMaps===null?this.generateMipMaps:this._useMipMaps}set useMipMaps(e){this._useMipMaps=e}get uniqueId(){return this._uniqueId}_setUniqueId(e){this._uniqueId=e}getEngine(){return this._engine}get source(){return this._source}constructor(e,t,i=!1){super(),this.isReady=!1,this.isCube=!1,this.is3D=!1,this.is2DArray=!1,this.isMultiview=!1,this.url="",this.generateMipMaps=!1,this._useMipMaps=null,this.mipLevelCount=1,this.samples=0,this.type=-1,this.format=-1,this.onLoadedObservable=new ee,this.onErrorObservable=new ee,this.onRebuildCallback=null,this.width=0,this.height=0,this.depth=0,this.baseWidth=0,this.baseHeight=0,this.baseDepth=0,this.invertY=!1,this._invertVScale=!1,this._associatedChannel=-1,this._source=0,this._buffer=null,this._bufferView=null,this._bufferViewArray=null,this._bufferViewArrayArray=null,this._size=0,this._extension="",this._files=null,this._workingCanvas=null,this._workingContext=null,this._cachedCoordinatesMode=null,this._isDisabled=!1,this._compression=null,this._sphericalPolynomial=null,this._sphericalPolynomialPromise=null,this._sphericalPolynomialComputed=!1,this._lodGenerationScale=0,this._lodGenerationOffset=0,this._useSRGBBuffer=!1,this._creationFlags=0,this._lodTextureHigh=null,this._lodTextureMid=null,this._lodTextureLow=null,this._isRGBD=!1,this._linearSpecularLOD=!1,this._irradianceTexture=null,this._hardwareTexture=null,this._maxLodLevel=null,this._references=1,this._gammaSpace=null,this._premulAlpha=!1,this._dynamicTextureSource=null,this._autoMSAAManagement=!1,this._engine=e,this._source=t,this._uniqueId=n._Counter++,i||(this._hardwareTexture=e._createHardwareTexture())}incrementReferences(){this._references++}updateSize(e,t,i=1){this._engine.updateTextureDimensions(this,e,t,i),this.width=e,this.height=t,this.depth=i,this.baseWidth=e,this.baseHeight=t,this.baseDepth=i,this._size=e*t*i}_rebuild(){var t,i;if(this.isReady=!1,this._cachedCoordinatesMode=null,this._cachedWrapU=null,this._cachedWrapV=null,this._cachedWrapR=null,this._cachedAnisotropicFilteringLevel=null,this.onRebuildCallback){let r=this.onRebuildCallback(this),s=a=>{a._swapAndDie(this,!1),this.isReady=r.isReady};r.isAsync?r.proxy.then(s):s(r.proxy);return}let e;switch(this.source){case 2:break;case 1:e=this._engine.createTexture((t=this._originalUrl)!=null?t:this.url,!this.generateMipMaps,this.invertY,null,this.samplingMode,r=>{r._swapAndDie(this,!1),this.isReady=!0},null,this._buffer,void 0,this.format,this._extension,void 0,void 0,void 0,this._useSRGBBuffer);return;case 3:if(e=this._engine.createRawTexture(this._bufferView,this.baseWidth,this.baseHeight,this.format,this.generateMipMaps,this.invertY,this.samplingMode,this._compression,this.type,this._creationFlags,this._useSRGBBuffer,this.mipLevelCount),e._swapAndDie(this,!1),this._bufferViewArray)for(let r=0;r{e._swapAndDie(this,!1),this.isReady=!0},null,this.format,this._extension,!1,0,0,null,void 0,this._useSRGBBuffer,ArrayBuffer.isView(this._buffer)?this._buffer:null);return;case 8:e=this._engine.createRawCubeTexture(this._bufferViewArray,this.width,(i=this._originalFormat)!=null?i:this.format,this.type,this.generateMipMaps,this.invertY,this.samplingMode,this._compression),e._swapAndDie(this,!1),this.isReady=!0;break;case 13:return;case 9:e=this._engine.createPrefilteredCubeTexture(this.url,null,this._lodGenerationScale,this._lodGenerationOffset,r=>{r&&r._swapAndDie(this,!1),this.isReady=!0},null,this.format,this._extension),e._sphericalPolynomial=this._sphericalPolynomial;return;case 12:case 14:break}}_swapAndDie(e,t=!0){var s;(s=this._hardwareTexture)==null||s.setUsage(e._source,this.generateMipMaps,this.is2DArray,this.isCube,this.is3D,this.width,this.height,this.depth),e._hardwareTexture=this._hardwareTexture,t&&(e._isRGBD=this._isRGBD),this._lodTextureHigh&&(e._lodTextureHigh&&e._lodTextureHigh.dispose(),e._lodTextureHigh=this._lodTextureHigh),this._lodTextureMid&&(e._lodTextureMid&&e._lodTextureMid.dispose(),e._lodTextureMid=this._lodTextureMid),this._lodTextureLow&&(e._lodTextureLow&&e._lodTextureLow.dispose(),e._lodTextureLow=this._lodTextureLow),this._irradianceTexture&&(e._irradianceTexture&&e._irradianceTexture.dispose(),e._irradianceTexture=this._irradianceTexture);let i=this._engine.getLoadedTexturesCache(),r=i.indexOf(this);r!==-1&&i.splice(r,1),r=i.indexOf(e),r===-1&&i.push(e)}dispose(){this._references--,this._references===0&&(this.onLoadedObservable.clear(),this.onErrorObservable.clear(),this._engine._releaseTexture(this),this._hardwareTexture=null,this._dynamicTextureSource=null)}};wi._Counter=0});var Le,Pi=C(()=>{hi();Le=class{static get LastCreatedEngine(){return this.Instances.length===0?null:this.Instances[this.Instances.length-1]}static get LastCreatedScene(){return this._LastCreatedScene}};Le.Instances=[];Le.OnEnginesDisposedObservable=new ee;Le._LastCreatedScene=null;Le.UseFallbackTexture=!0;Le.FallbackTexture=""});var $,Pt=C(()=>{$=class n{static _CheckLimit(e,t){let i=n._LogLimitOutputs[e];return i?i.current++:(i={limit:t,current:1},n._LogLimitOutputs[e]=i),i.current<=i.limit}static _GenerateLimitMessage(e,t=1){var s;let i=n._LogLimitOutputs[e];if(!i||!n.MessageLimitReached)return;let r=this._Levels[t];i.current===i.limit&&n[r.name](n.MessageLimitReached.replace(/%LIMIT%/g,""+i.limit).replace(/%TYPE%/g,(s=r.name)!=null?s:""))}static _AddLogEntry(e){n._LogCache=e+n._LogCache,n.OnNewCacheEntry&&n.OnNewCacheEntry(e)}static _FormatMessage(e){let t=r=>r<10?"0"+r:""+r,i=new Date;return"["+t(i.getHours())+":"+t(i.getMinutes())+":"+t(i.getSeconds())+"]: "+e}static _LogDisabled(e,t){}static _LogEnabled(e=1,t,i){let r=Array.isArray(t)?t[0]:t;if(i!==void 0&&!n._CheckLimit(r,i))return;let s=n._FormatMessage(r),a=this._Levels[e],o=Array.isArray(t)?t.slice(1):[];a.logFunc&&a.logFunc("BJS - "+s,...o);let l=`
${s}

`;n._AddLogEntry(l),n._GenerateLimitMessage(r,e)}static get LogCache(){return n._LogCache}static ClearLogCache(){n._LogCache="",n._LogLimitOutputs={},n.errorsCount=0}static set LogLevels(e){n.Log=n._LogDisabled,n.Warn=n._LogDisabled,n.Error=n._LogDisabled;let t=[n.MessageLogLevel,n.WarningLogLevel,n.ErrorLogLevel];for(let i of t)if((e&i)===i){let r=this._Levels[i];n[r.name]=n._LogEnabled.bind(n,i)}}};$.NoneLogLevel=0;$.MessageLogLevel=1;$.WarningLogLevel=2;$.ErrorLogLevel=4;$.AllLogLevel=7;$.MessageLimitReached="Too many %TYPE%s (%LIMIT%), no more %TYPE%s will be reported for this message.";$._LogCache="";$._LogLimitOutputs={};$._Levels=[{},{color:"white",logFunc:console.log,name:"Log"},{color:"orange",logFunc:console.warn,name:"Warn"},{},{color:"red",logFunc:console.error,name:"Error"}];$.errorsCount=0;$.Log=$._LogEnabled.bind($,$.MessageLogLevel);$.Warn=$._LogEnabled.bind($,$.WarningLogLevel);$.Error=$._LogEnabled.bind($,$.ErrorLogLevel)});var S,k=C(()=>{S=class n{static GetShadersRepository(e=0){return e===0?n.ShadersRepository:n.ShadersRepositoryWGSL}static GetShadersStore(e=0){return e===0?n.ShadersStore:n.ShadersStoreWGSL}static GetIncludesShadersStore(e=0){return e===0?n.IncludesShadersStore:n.IncludesShadersStoreWGSL}};S.ShadersRepository="src/Shaders/";S.ShadersStore={};S.IncludesShadersStore={};S.ShadersRepositoryWGSL="src/ShadersWGSL/";S.ShadersStoreWGSL={};S.IncludesShadersStoreWGSL={}});function ar(){return typeof window!="undefined"}function Ml(){return typeof navigator!="undefined"}function jc(){return typeof document!="undefined"}function xS(n){let e="",t=n.firstChild;for(;t;)t.nodeType===3&&(e+=t.textContent),t=t.nextSibling;return e}var fa=C(()=>{});var RS,T1=C(()=>{RS=class{constructor(){this._valueCache={},this.vertexCompilationError=null,this.fragmentCompilationError=null,this.programLinkError=null,this.programValidationError=null,this._isDisposed=!1}get isAsync(){return this.isParallelCompiled}get isReady(){return this.program?this.isParallelCompiled?this.engine._isRenderingStateCompiled(this):!0:!1}_handlesSpectorRebuildCallback(e){e&&this.program&&e(this.program)}setEngine(e){this.engine=e}_fillEffectInformation(e,t,i,r,s,a,o,l){let c=this.engine;if(c.supportsUniformBuffers)for(let d in t)e.bindUniformBlock(d,t[d]);this.engine.getUniforms(this,i).forEach((d,u)=>{r[i[u]]=d}),this._uniforms=r;let h;for(h=0;h{a[d]=u});for(let d of c.getAttributes(this,o))l.push(d)}dispose(){this._uniforms={},this._isDisposed=!0}_cacheMatrix(e,t){let i=this._valueCache[e],r=t.updateFlag;return i!==void 0&&i===r?!1:(this._valueCache[e]=r,!0)}_cacheFloat2(e,t,i){let r=this._valueCache[e];if(!r||r.length!==2)return r=[t,i],this._valueCache[e]=r,!0;let s=!1;return r[0]!==t&&(r[0]=t,s=!0),r[1]!==i&&(r[1]=i,s=!0),s}_cacheFloat3(e,t,i,r){let s=this._valueCache[e];if(!s||s.length!==3)return s=[t,i,r],this._valueCache[e]=s,!0;let a=!1;return s[0]!==t&&(s[0]=t,a=!0),s[1]!==i&&(s[1]=i,a=!0),s[2]!==r&&(s[2]=r,a=!0),a}_cacheFloat4(e,t,i,r,s){let a=this._valueCache[e];if(!a||a.length!==4)return a=[t,i,r,s],this._valueCache[e]=a,!0;let o=!1;return a[0]!==t&&(a[0]=t,o=!0),a[1]!==i&&(a[1]=i,o=!0),a[2]!==r&&(a[2]=r,o=!0),a[3]!==s&&(a[3]=s,o=!0),o}setInt(e,t){let i=this._valueCache[e];i!==void 0&&i===t||this.engine.setInt(this._uniforms[e],t)&&(this._valueCache[e]=t)}setInt2(e,t,i){this._cacheFloat2(e,t,i)&&(this.engine.setInt2(this._uniforms[e],t,i)||(this._valueCache[e]=null))}setInt3(e,t,i,r){this._cacheFloat3(e,t,i,r)&&(this.engine.setInt3(this._uniforms[e],t,i,r)||(this._valueCache[e]=null))}setInt4(e,t,i,r,s){this._cacheFloat4(e,t,i,r,s)&&(this.engine.setInt4(this._uniforms[e],t,i,r,s)||(this._valueCache[e]=null))}setIntArray(e,t){this._valueCache[e]=null,this.engine.setIntArray(this._uniforms[e],t)}setIntArray2(e,t){this._valueCache[e]=null,this.engine.setIntArray2(this._uniforms[e],t)}setIntArray3(e,t){this._valueCache[e]=null,this.engine.setIntArray3(this._uniforms[e],t)}setIntArray4(e,t){this._valueCache[e]=null,this.engine.setIntArray4(this._uniforms[e],t)}setUInt(e,t){let i=this._valueCache[e];i!==void 0&&i===t||this.engine.setUInt(this._uniforms[e],t)&&(this._valueCache[e]=t)}setUInt2(e,t,i){this._cacheFloat2(e,t,i)&&(this.engine.setUInt2(this._uniforms[e],t,i)||(this._valueCache[e]=null))}setUInt3(e,t,i,r){this._cacheFloat3(e,t,i,r)&&(this.engine.setUInt3(this._uniforms[e],t,i,r)||(this._valueCache[e]=null))}setUInt4(e,t,i,r,s){this._cacheFloat4(e,t,i,r,s)&&(this.engine.setUInt4(this._uniforms[e],t,i,r,s)||(this._valueCache[e]=null))}setUIntArray(e,t){this._valueCache[e]=null,this.engine.setUIntArray(this._uniforms[e],t)}setUIntArray2(e,t){this._valueCache[e]=null,this.engine.setUIntArray2(this._uniforms[e],t)}setUIntArray3(e,t){this._valueCache[e]=null,this.engine.setUIntArray3(this._uniforms[e],t)}setUIntArray4(e,t){this._valueCache[e]=null,this.engine.setUIntArray4(this._uniforms[e],t)}setArray(e,t){this._valueCache[e]=null,this.engine.setArray(this._uniforms[e],t)}setArray2(e,t){this._valueCache[e]=null,this.engine.setArray2(this._uniforms[e],t)}setArray3(e,t){this._valueCache[e]=null,this.engine.setArray3(this._uniforms[e],t)}setArray4(e,t){this._valueCache[e]=null,this.engine.setArray4(this._uniforms[e],t)}setMatrices(e,t){t&&(this._valueCache[e]=null,this.engine.setMatrices(this._uniforms[e],t))}setMatrix(e,t){this._cacheMatrix(e,t)&&(this.engine.setMatrices(this._uniforms[e],t.asArray())||(this._valueCache[e]=null))}setMatrix3x3(e,t){this._valueCache[e]=null,this.engine.setMatrix3x3(this._uniforms[e],t)}setMatrix2x2(e,t){this._valueCache[e]=null,this.engine.setMatrix2x2(this._uniforms[e],t)}setFloat(e,t){let i=this._valueCache[e];i!==void 0&&i===t||this.engine.setFloat(this._uniforms[e],t)&&(this._valueCache[e]=t)}setVector2(e,t){this._cacheFloat2(e,t.x,t.y)&&(this.engine.setFloat2(this._uniforms[e],t.x,t.y)||(this._valueCache[e]=null))}setFloat2(e,t,i){this._cacheFloat2(e,t,i)&&(this.engine.setFloat2(this._uniforms[e],t,i)||(this._valueCache[e]=null))}setVector3(e,t){this._cacheFloat3(e,t.x,t.y,t.z)&&(this.engine.setFloat3(this._uniforms[e],t.x,t.y,t.z)||(this._valueCache[e]=null))}setFloat3(e,t,i,r){this._cacheFloat3(e,t,i,r)&&(this.engine.setFloat3(this._uniforms[e],t,i,r)||(this._valueCache[e]=null))}setVector4(e,t){this._cacheFloat4(e,t.x,t.y,t.z,t.w)&&(this.engine.setFloat4(this._uniforms[e],t.x,t.y,t.z,t.w)||(this._valueCache[e]=null))}setQuaternion(e,t){this._cacheFloat4(e,t.x,t.y,t.z,t.w)&&(this.engine.setFloat4(this._uniforms[e],t.x,t.y,t.z,t.w)||(this._valueCache[e]=null))}setFloat4(e,t,i,r,s){this._cacheFloat4(e,t,i,r,s)&&(this.engine.setFloat4(this._uniforms[e],t,i,r,s)||(this._valueCache[e]=null))}setColor3(e,t){this._cacheFloat3(e,t.r,t.g,t.b)&&(this.engine.setFloat3(this._uniforms[e],t.r,t.g,t.b)||(this._valueCache[e]=null))}setColor4(e,t,i){this._cacheFloat4(e,t.r,t.g,t.b,i)&&(this.engine.setFloat4(this._uniforms[e],t.r,t.g,t.b,i)||(this._valueCache[e]=null))}setDirectColor4(e,t){this._cacheFloat4(e,t.r,t.g,t.b,t.a)&&(this.engine.setFloat4(this._uniforms[e],t.r,t.g,t.b,t.a)||(this._valueCache[e]=null))}_getVertexShaderCode(){return this.vertexShader?this.engine._getShaderSource(this.vertexShader):null}_getFragmentShaderCode(){return this.fragmentShader?this.engine._getShaderSource(this.fragmentShader):null}}});function Xe(n,e=!1){if(!(e&&A1[n]))return A1[n]=!0,`${n} needs to be imported before as it contains a side-effect required by your code.`}var A1,an=C(()=>{A1={}});function bS(n,e,t=""){return t+(e?e+` -`:"")+n}function IS(n,e,t,i,r,s,a){let o=a||Eu.loadFile;if(o)return o(n,e,t,i,r,s);throw Xe("FileTools")}function MS(n,e,t,i){if(n){e?n.IS_NDC_HALF_ZRANGE="":delete n.IS_NDC_HALF_ZRANGE,t?n.USE_REVERSE_DEPTHBUFFER="":delete n.USE_REVERSE_DEPTHBUFFER,i?n.USE_EXACT_SRGB_CONVERSIONS="":delete n.USE_EXACT_SRGB_CONVERSIONS;return}else{let r="";return e&&(r+="#define IS_NDC_HALF_ZRANGE"),t&&(r&&(r+=` +`),r=[];for(let o=0,l=i.length;o=7?(sS.setRGB(parseFloat(h[4]),parseFloat(h[5]),parseFloat(h[6]),Ni),t.colors.push(sS.r,sS.g,sS.b)):t.colors.push(void 0,void 0,void 0);break;case"vn":t.normals.push(parseFloat(h[1]),parseFloat(h[2]),parseFloat(h[3]));break;case"vt":t.uvs.push(parseFloat(h[1]),parseFloat(h[2]));break}}else if(f==="f"){let d=c.slice(1).trim().split(GF),u=[];for(let _=0,p=d.length;_0){let v=g.split("/");u.push(v)}}let m=u[0];for(let _=1,p=u.length-1;_1){let d=r[1].trim().toLowerCase();t.object.smooth=d!=="0"&&d!=="off"}else t.object.smooth=!0;let h=t.object.currentMaterial();h&&(h.smooth=t.object.smooth)}else{if(c==="\0")continue;console.warn('THREE.OBJLoader: Unexpected line: "'+c+'"')}}t.finalize();let s=new Ls;if(s.materialLibraries=[].concat(t.materialLibraries),!(t.objects.length===1&&t.objects[0].geometry.vertices.length===0)===!0)for(let o=0,l=t.objects.length;o0&&_.setAttribute("normal",new Si(f.normals,3)),f.colors.length>0&&(m=!0,_.setAttribute("color",new Si(f.colors,3))),f.hasUVIndices===!0&&_.setAttribute("uv",new Si(f.uvs,2));let p=[];for(let v=0,x=h.length;v1){for(let v=0,x=h.length;v0){let o=new is({size:1,sizeAttenuation:!1}),l=new sr;l.setAttribute("position",new Si(t.vertices,3)),t.colors.length>0&&t.colors[0]!==void 0&&(l.setAttribute("color",new Si(t.colors,3)),o.vertexColors=!0);let c=new ca(l,o);s.add(c)}return s}}});var cs,oS,Y0,XF=C(()=>{Gs();cs=new ct,oS=class extends sn{constructor(e){super(e),this.propertyNameMapping={},this.customPropertyMapping={}}load(e,t,i,r){let s=this,a=new as(this.manager);a.setPath(this.path),a.setResponseType("arraybuffer"),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,function(o){try{t(s.parse(o))}catch(l){r?r(l):console.error(l),s.manager.itemError(e)}},i,r)}setPropertyNameMapping(e){this.propertyNameMapping=e}setCustomPropertyNameMapping(e){this.customPropertyMapping=e}parse(e){function t(p,g=0){let v=/^ply([\s\S]*)end_header(\r\n|\r|\n)/,x="",A=v.exec(p);A!==null&&(x=A[1]);let S={comments:[],elements:[],headerLength:g,objInfo:""},E=x.split(/\r\n|\r|\n/),R;function I(y,M){let D={type:y[0]};return D.type==="list"?(D.name=y[3],D.countType=y[1],D.itemType=y[2]):D.name=y[1],D.name in M&&(D.name=M[D.name]),D}for(let y=0;yx.name);function v(x){for(let A=0,S=x.length;A0&&g.setIndex(p.indices),g.setAttribute("position",new Si(p.vertices,3)),p.normals.length>0&&g.setAttribute("normal",new Si(p.normals,3)),p.uvs.length>0&&g.setAttribute("uv",new Si(p.uvs,2)),p.colors.length>0&&g.setAttribute("color",new Si(p.colors,3)),(p.faceVertexUvs.length>0||p.faceVertexColors.length>0)&&(g=g.toNonIndexed(),p.faceVertexUvs.length>0&&g.setAttribute("uv",new Si(p.faceVertexUvs,2)),p.faceVertexColors.length>0&&g.setAttribute("color",new Si(p.faceVertexColors,3)));for(let v of Object.keys(_.customPropertyMapping))p[v].length>0&&g.setAttribute(v,new Si(p[v],_.customPropertyMapping[v].length));return g.computeBoundingSphere(),g}function c(p,g,v,x){if(g==="vertex"){p.vertices.push(v[x.attrX],v[x.attrY],v[x.attrZ]),x.attrNX!==null&&x.attrNY!==null&&x.attrNZ!==null&&p.normals.push(v[x.attrNX],v[x.attrNY],v[x.attrNZ]),x.attrS!==null&&x.attrT!==null&&p.uvs.push(v[x.attrS],v[x.attrT]),x.attrR!==null&&x.attrG!==null&&x.attrB!==null&&(cs.setRGB(v[x.attrR]/255,v[x.attrG]/255,v[x.attrB]/255,Ni),p.colors.push(cs.r,cs.g,cs.b));for(let A of Object.keys(_.customPropertyMapping))for(let S of _.customPropertyMapping[A])p[A].push(v[S])}else if(g==="face"){let A=v.vertex_indices||v.vertex_index,S=v.texcoord;A.length===3?(p.indices.push(A[0],A[1],A[2]),S&&S.length===6&&(p.faceVertexUvs.push(S[0],S[1]),p.faceVertexUvs.push(S[2],S[3]),p.faceVertexUvs.push(S[4],S[5]))):A.length===4&&(p.indices.push(A[0],A[1],A[3]),p.indices.push(A[1],A[2],A[3])),x.attrR!==null&&x.attrG!==null&&x.attrB!==null&&(cs.setRGB(v[x.attrR]/255,v[x.attrG]/255,v[x.attrB]/255,Ni),p.faceVertexColors.push(cs.r,cs.g,cs.b),p.faceVertexColors.push(cs.r,cs.g,cs.b),p.faceVertexColors.push(cs.r,cs.g,cs.b))}}function f(p,g){let v={},x=0;for(let A=0;AA.getInt8(R),size:1};case"uint8":case"uchar":return{read:R=>A.getUint8(R),size:1};case"int16":case"short":return{read:R=>A.getInt16(R,E),size:2};case"uint16":case"ushort":return{read:R=>A.getUint16(R,E),size:2};case"int32":case"int":return{read:R=>A.getInt32(R,E),size:4};case"uint32":case"uint":return{read:R=>A.getUint32(R,E),size:4};case"float32":case"float":return{read:R=>A.getFloat32(R,E),size:4};case"float64":case"double":return{read:R=>A.getFloat64(R,E),size:8}}}for(let A=0,S=p.length;A=this.arr.length}next(){return this.arr[this.i++]}}});var lS,YF=C(()=>{Gs();lS=class extends sn{constructor(e){super(e)}load(e,t,i,r){let s=this,a=new as(this.manager);a.setPath(this.path),a.setResponseType("arraybuffer"),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,function(o){try{t(s.parse(o))}catch(l){r?r(l):console.error(l),s.manager.itemError(e)}},i,r)}parse(e){function t(c){let f=new DataView(c),h=32/8*3+32/8*3*3+16/8,d=f.getUint32(80,!0);if(80+32/8+d*h===f.byteLength)return!0;let m=[115,111,108,105,100];for(let _=0;_<5;_++)if(i(m,f,_))return!1;return!0}function i(c,f,h){for(let d=0,u=c.length;d>5&31)/31,m=(U>>10&31)/31):(d=g,u=v,m=x)}for(let U=1;U<=3;U++){let W=O+U*12,$=D*3*3+(U-1)*3;I[$]=f.getFloat32(W,!0),I[$+1]=f.getFloat32(W+4,!0),I[$+2]=f.getFloat32(W+8,!0),y[$]=V,y[$+1]=N,y[$+2]=F,_&&(M.setRGB(d,u,m,Ni),p[$]=M.r,p[$+1]=M.g,p[$+2]=M.b)}}return R.setAttribute("position",new rr(I,3)),R.setAttribute("normal",new rr(y,3)),_&&(R.setAttribute("color",new rr(p,3)),R.hasColors=!0,R.alpha=A),R}function s(c){let f=new sr,h=/solid([\s\S]*?)endsolid/g,d=/facet([\s\S]*?)endfacet/g,u=/solid\s(.+)/,m=0,_=/[\s]+([+-]?(?:\d*)(?:\.\d*)?(?:[eE][+-]?\d+)?)/.source,p=new RegExp("vertex"+_+_+_,"g"),g=new RegExp("normal"+_+_+_,"g"),v=[],x=[],A=[],S=new ne,E,R=0,I=0,y=0;for(;(E=h.exec(c))!==null;){I=y;let M=E[0],D=(E=u.exec(M))!==null?E[1]:"";for(A.push(D);(E=d.exec(M))!==null;){let N=0,F=0,U=E[0];for(;(E=g.exec(U))!==null;)S.x=parseFloat(E[1]),S.y=parseFloat(E[2]),S.z=parseFloat(E[3]),F++;for(;(E=p.exec(U))!==null;)v.push(parseFloat(E[1]),parseFloat(E[2]),parseFloat(E[3])),x.push(S.x,S.y,S.z),N++,y++;F!==1&&console.error("THREE.STLLoader: Something isn't right with the normal of face number "+m),N!==3&&console.error("THREE.STLLoader: Something isn't right with the vertices of face number "+m),m++}let O=I,V=y-I;f.userData.groupNames=A,f.addGroup(O,V,R),R++}return f.setAttribute("position",new Si(v,3)),f.setAttribute("normal",new Si(x,3)),f}function a(c){return typeof c!="string"?new TextDecoder().decode(c):c}function o(c){if(typeof c=="string"){let f=new Uint8Array(c.length);for(let h=0;h{Gs()});function jF(n){let e=new Map,t=new Map,i=n.clone();return qF(n,i,function(r,s){e.set(s,r),t.set(r,s)}),i.traverse(function(r){if(!r.isSkinnedMesh)return;let s=r,a=e.get(r),o=a.skeleton.bones;s.skeleton=a.skeleton.clone(),s.bindMatrix.copy(a.bindMatrix),s.skeleton.bones=o.map(function(l){return t.get(l)}),s.bind(s.skeleton,s.bindMatrix)}),i}function qF(n,e,t){t(n,e);for(let i=0;i{});function gte(){let n={};return{get:function(e){return n[e]},add:function(e,t){n[e]=t},remove:function(e){delete n[e]},removeAll:function(){n={}}}}function Dr(n,e,t){let i=n.json.materials[e];return i.extensions&&i.extensions[t]?i.extensions[t]:null}function Ste(n){return n.DefaultMaterial===void 0&&(n.DefaultMaterial=new rs({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:Os})),n.DefaultMaterial}function vh(n,e,t){for(let i in t.extensions)n[i]===void 0&&(e.userData.gltfExtensions=e.userData.gltfExtensions||{},e.userData.gltfExtensions[i]=t.extensions[i])}function Vo(n,e){e.extras!==void 0&&(typeof e.extras=="object"?Object.assign(n.userData,e.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+e.extras))}function Tte(n,e,t){let i=!1,r=!1,s=!1;for(let c=0,f=e.length;c0||n.search(/^data\:image\/jpeg/)===0?"image/jpeg":n.search(/\.webp($|\?)/i)>0||n.search(/^data\:image\/webp/)===0?"image/webp":n.search(/\.ktx2($|\?)/i)>0||n.search(/^data\:image\/ktx2/)===0?"image/ktx2":"image/png"}function Ite(n,e,t){let i=e.attributes,r=new vr;if(i.POSITION!==void 0){let o=t.json.accessors[i.POSITION],l=o.min,c=o.max;if(l!==void 0&&c!==void 0){if(r.set(new ne(l[0],l[1],l[2]),new ne(c[0],c[1],c[2])),o.normalized){let f=SI(Eu[o.componentType]);r.min.multiplyScalar(f),r.max.multiplyScalar(f)}}else{console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");return}}else return;let s=e.targets;if(s!==void 0){let o=new ne,l=new ne;for(let c=0,f=s.length;c{Gs();KF();ZF();cS=class extends sn{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(t){return new eI(t)}),this.register(function(t){return new tI(t)}),this.register(function(t){return new fI(t)}),this.register(function(t){return new hI(t)}),this.register(function(t){return new dI(t)}),this.register(function(t){return new rI(t)}),this.register(function(t){return new nI(t)}),this.register(function(t){return new sI(t)}),this.register(function(t){return new aI(t)}),this.register(function(t){return new J0(t)}),this.register(function(t){return new oI(t)}),this.register(function(t){return new iI(t)}),this.register(function(t){return new cI(t)}),this.register(function(t){return new lI(t)}),this.register(function(t){return new Q0(t)}),this.register(function(t){return new fS(t,vi.EXT_MESHOPT_COMPRESSION)}),this.register(function(t){return new fS(t,vi.KHR_MESHOPT_COMPRESSION)}),this.register(function(t){return new uI(t)})}load(e,t,i,r){let s=this,a;if(this.resourcePath!=="")a=this.resourcePath;else if(this.path!==""){let c=Xa.extractUrlBase(e);a=Xa.resolveURL(c,this.path)}else a=Xa.extractUrlBase(e);this.manager.itemStart(e);let o=function(c){r?r(c):console.error(c),s.manager.itemError(e),s.manager.itemEnd(e)},l=new as(this.manager);l.setPath(this.path),l.setResponseType("arraybuffer"),l.setRequestHeader(this.requestHeader),l.setWithCredentials(this.withCredentials),l.load(e,function(c){try{s.parse(c,a,function(f){t(f),s.manager.itemEnd(e)},o)}catch(f){o(f)}},i,o)}setDRACOLoader(e){return this.dracoLoader=e,this}setKTX2Loader(e){return this.ktx2Loader=e,this}setMeshoptDecoder(e){return this.meshoptDecoder=e,this}register(e){return this.pluginCallbacks.indexOf(e)===-1&&this.pluginCallbacks.push(e),this}unregister(e){return this.pluginCallbacks.indexOf(e)!==-1&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}parse(e,t,i,r){let s,a={},o={},l=new TextDecoder;if(typeof e=="string")s=JSON.parse(e);else if(e instanceof ArrayBuffer)if(l.decode(new Uint8Array(e,0,4))===t1){try{a[vi.KHR_BINARY_GLTF]=new mI(e)}catch(h){r&&r(h);return}s=JSON.parse(a[vi.KHR_BINARY_GLTF].content)}else s=JSON.parse(l.decode(e));else s=e;if(s.asset===void 0||s.asset.version[0]<2){r&&r(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));return}let c=new TI(s,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});c.fileLoader.setRequestHeader(this.requestHeader);for(let f=0;f=0&&o[h]===void 0&&console.warn('THREE.GLTFLoader: Unknown extension "'+h+'".')}}c.setExtensions(a),c.setPlugins(o),c.parse(i,r)}parseAsync(e,t){let i=this;return new Promise(function(r,s){i.parse(e,t,r,s)})}};vi={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_DISPERSION:"KHR_materials_dispersion",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_MATERIALS_BUMP:"EXT_materials_bump",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",KHR_MESHOPT_COMPRESSION:"KHR_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"},Q0=class{constructor(e){this.parser=e,this.name=vi.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){let e=this.parser,t=this.parser.json.nodes||[];for(let i=0,r=t.length;i=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return t.loadTextureImage(e,s.source,a)}},hI=class{constructor(e){this.parser=e,this.name=vi.EXT_TEXTURE_WEBP}loadTexture(e){let t=this.name,i=this.parser,r=i.json,s=r.textures[e];if(!s.extensions||!s.extensions[t])return null;let a=s.extensions[t],o=r.images[a.source],l=i.textureLoader;if(o.uri){let c=i.options.manager.getHandler(o.uri);c!==null&&(l=c)}return i.loadTextureImage(e,a.source,l)}},dI=class{constructor(e){this.parser=e,this.name=vi.EXT_TEXTURE_AVIF}loadTexture(e){let t=this.name,i=this.parser,r=i.json,s=r.textures[e];if(!s.extensions||!s.extensions[t])return null;let a=s.extensions[t],o=r.images[a.source],l=i.textureLoader;if(o.uri){let c=i.options.manager.getHandler(o.uri);c!==null&&(l=c)}return i.loadTextureImage(e,a.source,l)}},fS=class{constructor(e,t){this.name=t,this.parser=e}loadBufferView(e){let t=this.parser.json,i=t.bufferViews[e];if(i.extensions&&i.extensions[this.name]){let r=i.extensions[this.name],s=this.parser.getDependency("buffer",r.buffer),a=this.parser.options.meshoptDecoder;if(!a||!a.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return s.then(function(o){let l=r.byteOffset||0,c=r.byteLength||0,f=r.count,h=r.byteStride,d=new Uint8Array(o,l,c);return a.decodeGltfBufferAsync?a.decodeGltfBufferAsync(f,h,d,r.mode,r.filter).then(function(u){return u.buffer}):a.ready.then(function(){let u=new ArrayBuffer(f*h);return a.decodeGltfBuffer(new Uint8Array(u),f,h,d,r.mode,r.filter),u})})}else return null}},uI=class{constructor(e){this.name=vi.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){let t=this.parser.json,i=t.nodes[e];if(!i.extensions||!i.extensions[this.name]||i.mesh===void 0)return null;let r=t.meshes[i.mesh];for(let c of r.primitives)if(c.mode!==da.TRIANGLES&&c.mode!==da.TRIANGLE_STRIP&&c.mode!==da.TRIANGLE_FAN&&c.mode!==void 0)return null;let a=i.extensions[this.name].attributes,o=[],l={};for(let c in a)o.push(this.parser.getDependency("accessor",a[c]).then(f=>(l[c]=f,l[c])));return o.length<1?null:(o.push(this.parser.createNodeMesh(e)),Promise.all(o).then(c=>{let f=c.pop(),h=f.isGroup?f.children:[f],d=c[0].count,u=[];for(let m of h){let _=new li,p=new ne,g=new Kr,v=new ne(1,1,1),x=new lh(m.geometry,m.material,d);for(let A=0;A-1,a=s?o.match(/Firefox\/([0-9]+)\./)[1]:-1}typeof createImageBitmap=="undefined"||i&&r<17||s&&a<98?this.textureLoader=new uh(this.options.manager):this.textureLoader=new zp(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new as(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),this.options.crossOrigin==="use-credentials"&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){let i=this,r=this.json,s=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(a){return a._markDefs&&a._markDefs()}),Promise.all(this._invokeAll(function(a){return a.beforeRoot&&a.beforeRoot()})).then(function(){return Promise.all([i.getDependencies("scene"),i.getDependencies("animation"),i.getDependencies("camera")])}).then(function(a){let o={scene:a[0][r.scene||0],scenes:a[0],animations:a[1],cameras:a[2],asset:r.asset,parser:i,userData:{}};return vh(s,o,r),Vo(o,r),Promise.all(i._invokeAll(function(l){return l.afterRoot&&l.afterRoot(o)})).then(function(){for(let l of o.scenes)l.updateMatrixWorld();e(o)})}).catch(t)}_markDefs(){let e=this.json.nodes||[],t=this.json.skins||[],i=this.json.meshes||[];for(let r=0,s=t.length;r{let l=this.associations.get(a);l!=null&&this.associations.set(o,l);for(let[c,f]of a.children.entries())s(f,o.children[c])};return s(i,r),r.name+="_instance_"+e.uses[t]++,r}_invokeOne(e){let t=Object.values(this.plugins);t.push(this);for(let i=0;i=2&&p.setY(y,E[R*l+1]),l>=3&&p.setZ(y,E[R*l+2]),l>=4&&p.setW(y,E[R*l+3]),l>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}p.normalized=m}return p})}loadTexture(e){let t=this.json,i=this.options,s=t.textures[e].source,a=t.images[s],o=this.textureLoader;if(a.uri){let l=i.manager.getHandler(a.uri);l!==null&&(o=l)}return this.loadTextureImage(e,s,o)}loadTextureImage(e,t,i){let r=this,s=this.json,a=s.textures[e],o=s.images[t],l=(o.uri||o.bufferView)+":"+a.sampler;if(this.textureCache[l])return this.textureCache[l];let c=this.loadImageSource(t,i).then(function(f){f.flipY=!1,f.name=a.name||o.name||"",f.name===""&&typeof o.uri=="string"&&o.uri.startsWith("data:image/")===!1&&(f.name=o.uri);let d=(s.samplers||{})[a.sampler]||{};return f.magFilter=$F[d.magFilter]||Pr,f.minFilter=$F[d.minFilter]||Ya,f.wrapS=JF[d.wrapS]||Io,f.wrapT=JF[d.wrapT]||Io,f.generateMipmaps=!f.isCompressedTexture&&f.minFilter!==yr&&f.minFilter!==Pr,r.associations.set(f,{textures:e}),f}).catch(function(){return null});return this.textureCache[l]=c,c}loadImageSource(e,t){let i=this,r=this.json,s=this.options;if(this.sourceCache[e]!==void 0)return this.sourceCache[e].then(h=>h.clone());let a=r.images[e],o=self.URL||self.webkitURL,l=a.uri||"",c=!1;if(a.bufferView!==void 0)l=i.getDependency("bufferView",a.bufferView).then(function(h){c=!0;let d=new Blob([h],{type:a.mimeType});return l=o.createObjectURL(d),l});else if(a.uri===void 0)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");let f=Promise.resolve(l).then(function(h){return new Promise(function(d,u){let m=d;t.isImageBitmapLoader===!0&&(m=function(_){let p=new Rr(_);p.needsUpdate=!0,d(p)}),t.load(Xa.resolveURL(h,s.path),m,void 0,u)})}).then(function(h){return c===!0&&o.revokeObjectURL(l),Vo(h,a),h.userData.mimeType=a.mimeType||Rte(a.uri),h}).catch(function(h){throw console.error("THREE.GLTFLoader: Couldn't load texture",l),h});return this.sourceCache[e]=f,f}assignTexture(e,t,i,r){let s=this;return this.getDependency("texture",i.index).then(function(a){if(!a)return null;if(i.texCoord!==void 0&&i.texCoord>0&&(a=a.clone(),a.channel=i.texCoord),s.extensions[vi.KHR_TEXTURE_TRANSFORM]){let o=i.extensions!==void 0?i.extensions[vi.KHR_TEXTURE_TRANSFORM]:void 0;if(o){let l=s.associations.get(a);a=s.extensions[vi.KHR_TEXTURE_TRANSFORM].extendTexture(a,o),s.associations.set(a,l)}}return r!==void 0&&(a.colorSpace=r),e[t]=a,a})}assignFinalMaterial(e){let t=e.geometry,i=e.material,r=t.attributes.tangent===void 0,s=t.attributes.color!==void 0,a=t.attributes.normal===void 0;if(e.isPoints){let o="PointsMaterial:"+i.uuid,l=this.cache.get(o);l||(l=new is,Ur.prototype.copy.call(l,i),l.color.copy(i.color),l.map=i.map,l.sizeAttenuation=!1,this.cache.add(o,l)),i=l}else if(e.isLine){let o="LineBasicMaterial:"+i.uuid,l=this.cache.get(o);l||(l=new ws,Ur.prototype.copy.call(l,i),l.color.copy(i.color),l.map=i.map,this.cache.add(o,l)),i=l}if(r||s||a){let o="ClonedMaterial:"+i.uuid+":";r&&(o+="derivative-tangents:"),s&&(o+="vertex-colors:"),a&&(o+="flat-shading:");let l=this.cache.get(o);l||(l=i.clone(),s&&(l.vertexColors=!0),a&&(l.flatShading=!0),r&&(l.normalScale&&(l.normalScale.y*=-1),l.clearcoatNormalScale&&(l.clearcoatNormalScale.y*=-1)),this.cache.add(o,l),this.associations.set(l,this.associations.get(i))),i=l}e.material=i}getMaterialType(){return rs}loadMaterial(e){let t=this,i=this.json,r=this.extensions,s=i.materials[e],a,o={},l=s.extensions||{},c=[];if(l[vi.KHR_MATERIALS_UNLIT]){let h=r[vi.KHR_MATERIALS_UNLIT];a=h.getMaterialType(),c.push(h.extendParams(o,s,t))}else{let h=s.pbrMetallicRoughness||{};if(o.color=new ct(1,1,1),o.opacity=1,Array.isArray(h.baseColorFactor)){let d=h.baseColorFactor;o.color.setRGB(d[0],d[1],d[2],Vn),o.opacity=d[3]}h.baseColorTexture!==void 0&&c.push(t.assignTexture(o,"map",h.baseColorTexture,Ni)),o.metalness=h.metallicFactor!==void 0?h.metallicFactor:1,o.roughness=h.roughnessFactor!==void 0?h.roughnessFactor:1,h.metallicRoughnessTexture!==void 0&&(c.push(t.assignTexture(o,"metalnessMap",h.metallicRoughnessTexture)),c.push(t.assignTexture(o,"roughnessMap",h.metallicRoughnessTexture))),a=this._invokeOne(function(d){return d.getMaterialType&&d.getMaterialType(e)}),c.push(Promise.all(this._invokeAll(function(d){return d.extendMaterialParams&&d.extendMaterialParams(e,o)})))}s.doubleSided===!0&&(o.side=fa);let f=s.alphaMode||q0.OPAQUE;if(f===q0.BLEND?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,f===q0.MASK&&(o.alphaTest=s.alphaCutoff!==void 0?s.alphaCutoff:.5)),s.normalTexture!==void 0&&a!==Wa&&(c.push(t.assignTexture(o,"normalMap",s.normalTexture)),o.normalScale=new Lt(1,1),s.normalTexture.scale!==void 0)){let h=s.normalTexture.scale;o.normalScale.set(h,h)}if(s.occlusionTexture!==void 0&&a!==Wa&&(c.push(t.assignTexture(o,"aoMap",s.occlusionTexture)),s.occlusionTexture.strength!==void 0&&(o.aoMapIntensity=s.occlusionTexture.strength)),s.emissiveFactor!==void 0&&a!==Wa){let h=s.emissiveFactor;o.emissive=new ct().setRGB(h[0],h[1],h[2],Vn)}return s.emissiveTexture!==void 0&&a!==Wa&&c.push(t.assignTexture(o,"emissiveMap",s.emissiveTexture,Ni)),Promise.all(c).then(function(){let h=new a(o);return s.name&&(h.name=s.name),Vo(h,s),t.associations.set(h,{materials:e}),s.extensions&&vh(r,h,s),h})}createUniqueName(e){let t=Ki.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){let t=this,i=this.extensions,r=this.primitiveCache;function s(o){return i[vi.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(o,t).then(function(l){return e1(l,o,t)})}let a=[];for(let o=0,l=e.length;o0&&Ate(g,s),g.name=t.createUniqueName(s.name||"mesh_"+e),Vo(g,s),p.extensions&&vh(r,g,p),t.assignFinalMaterial(g),h.push(g)}for(let u=0,m=h.length;u0){let u=f.userData.pivot,m=h[0];f.pivot=new ne().fromArray(u),f.position.x-=u[0],f.position.y-=u[1],f.position.z-=u[2],m.position.set(0,0,0),delete f.userData.pivot}return f})}_loadNodeShallow(e){let t=this.json,i=this.extensions,r=this;if(this.nodeCache[e]!==void 0)return this.nodeCache[e];let s=t.nodes[e],a=s.name?r.createUniqueName(s.name):"",o=[],l=r._invokeOne(function(c){return c.createNodeMesh&&c.createNodeMesh(e)});return l&&o.push(l),s.camera!==void 0&&o.push(r.getDependency("camera",s.camera).then(function(c){return r._getNodeRef(r.cameraCache,s.camera,c)})),r._invokeAll(function(c){return c.createNodeAttachment&&c.createNodeAttachment(e)}).forEach(function(c){o.push(c)}),this.nodeCache[e]=Promise.all(o).then(function(c){let f;if(s.isBone===!0?f=new tu:c.length>1?f=new Ls:c.length===1?f=c[0]:f=new nr,f!==c[0])for(let h=0,d=c.length;h1){let h=r.associations.get(f);r.associations.set(f,{...h})}return r.associations.get(f).nodes=e,f}),this.nodeCache[e]}loadScene(e){let t=this.extensions,i=this.json.scenes[e],r=this,s=new Ls;i.name&&(s.name=r.createUniqueName(i.name)),Vo(s,i),i.extensions&&vh(t,s,i);let a=i.nodes||[],o=[];for(let l=0,c=a.length;l{let h=new Map;for(let[d,u]of r.associations)(d instanceof Ur||d instanceof Rr)&&h.set(d,u);return f.traverse(d=>{let u=r.associations.get(d);u!=null&&h.set(d,u)}),h};return r.associations=c(s),s})}_createAnimationTracks(e,t,i,r,s){let a=[],o=e.name?e.name:e.uuid,l=[];function c(u){u.morphTargetInfluences&&l.push(u.name?u.name:u.uuid)}qc[s.path]===qc.weights?(c(e),e.isGroup&&e.children.forEach(c)):l.push(o);let f;switch(qc[s.path]){case qc.weights:f=Po;break;case qc.rotation:f=Do;break;case qc.translation:case qc.scale:f=Lo;break;default:switch(i.itemSize){case 1:f=Po;break;case 2:case 3:default:f=Lo;break}break}let h=r.interpolation!==void 0?Ete[r.interpolation]:sh,d=this._getArrayFromAccessor(i);for(let u=0,m=l.length;u{"use strict"});function s1(n){var t,i,r;let e=(i=(t=n.split(".").pop())==null?void 0:t.toLowerCase())!=null?i:"png";return(r=Mte[e])!=null?r:`image/${e}`}function yte(n){let e=n.replace(/\s+#.*$/,"").trim();if(e.startsWith('"')){let t=e.indexOf('"',1);if(t>1)return e.slice(1,t)}return e}function Pte(n){let e=n.trim().split(/\s+/),t=e.findIndex(i=>!i.startsWith("-")&&!/^[-+]?\d*\.?\d+$/.test(i));return e.slice(Math.max(0,t)).join(" ").replace(/^"|"$/g,"")}async function n1(n,e,t){let i=Cs(e,t);try{return{data:await n(i),path:i}}catch(r){throw new Error(`Missing external model resource: ${i}`)}}function Dte(n,e,t){let i=ra(e),r=i.replace(/\.[^.]+$/,""),s=Xr(t),a=[Cs(n,e),Cs(n,i)];if(s)for(let o of r1)a.push(Cs(n,`${s}.${o}`));for(let o of r1){let l=`${r}.${o}`;l!==i&&a.push(Cs(n,l))}return a}async function a1(n,e,t,i){var l,c;let r=new cS,s=[];if(e==="gltf"&&t&&i){let f=new TextDecoder().decode(new Uint8Array(n)),h=JSON.parse(f),d=mp(i);if(h.buffers){for(let g of h.buffers)if(g.uri&&!g.uri.startsWith("data:")){let v=await n1(t,d,g.uri);g.uri=`data:application/octet-stream;base64,${Cl(v.data)}`}}if(h.images){for(let g of h.images)if(g.uri&&!g.uri.startsWith("data:")){let v=await n1(t,d,g.uri);g.uri=`data:${s1(v.path)};base64,${Cl(v.data)}`}}let u=JSON.stringify(h),m=new TextEncoder().encode(u),_=await r.parseAsync(m.buffer,d?`${d}/`:""),p=_.scene||((l=_.scenes)==null?void 0:l[0]);if(!p)throw new Error("GLTF did not contain a scene");return{scene:p,animations:_.animations,warnings:s}}let a=await r.parseAsync(n.slice(0),""),o=a.scene||((c=a.scenes)==null?void 0:c[0]);if(!o)throw new Error("GLB did not contain a scene");return{scene:o,animations:a.animations,warnings:s}}async function o1(n){let t=new lS().parse(n),i=new rs({color:13421772}),r=new ci(t,i);return r.name=ra("")||"stl-model",r}async function l1(n){let t=new oS().parse(n);if(t.hasAttribute("color")){if(t.index){let s=new rs({vertexColors:!0});return new ci(t,s)}let r=new is({size:.02,vertexColors:!0});return new ca(t,r)}if(t.index){let r=new rs({color:13421772});return new ci(t,r)}let i=new is({size:.02,color:13421772});return new ca(t,i)}async function c1(n,e,t){let i=new TextDecoder().decode(new Uint8Array(n)),r=[],s=null,a=i.match(/mtllib\s+(.+)/);if(a&&e&&t){let l=yte(a[1]),c=mp(t),f=Cs(c,l);try{let h=await e(f),u=new TextDecoder().decode(new Uint8Array(h)).split(` +`),m=new Map;for(let x=0;xx!=="");if(!_.some(x=>/^\s*Kd\s+/i.test(x))){let x=_.findIndex(A=>/^\s*newmtl\s+/i.test(A));_.splice(x>=0?x+1:0,0,"Kd 0.80 0.80 0.80")}let v=new nS().parse(_.join(` +`),c?`${c}/`:"");v.preload(),s=v}catch(h){r.push(`OBJ material library not found: ${f}`)}}else a&&(!e||!t)&&r.push("OBJ material library could not be resolved without a model path.");let o=new aS;return s&&o.setMaterials(s),{object:o.parse(i),warnings:r}}var Mte,r1,Cte,f1=C(()=>{"use strict";VF();zF();XF();YF();i1();Gs();na();dS();Mte={jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",tga:"image/x-tga",webp:"image/webp",tif:"image/tiff",tiff:"image/tiff"},r1=["jpg","jpeg","png","bmp","tga","webp","tif","tiff"],Cte=/^\s*(map_Kd|map_Ka|map_Ks|map_Ns|map_d|map_bump|bump|disp|decal)\s+(.+)/i});function hr(){return h1.Platform.isMobile}var h1,ks=C(()=>{"use strict";h1=require("obsidian")});function c_(n,e){return{min:Yr(n),max:Yr(e)}}function d1(n,e){return n?{min:{x:Math.min(n.min.x,e.min.x),y:Math.min(n.min.y,e.min.y),z:Math.min(n.min.z,e.min.z)},max:{x:Math.max(n.max.x,e.max.x),y:Math.max(n.max.y,e.max.y),z:Math.max(n.max.z,e.max.z)}}:c_(e.min,e.max)}function an(n){return Id(n.max,n.min)}function on(n){return jf(n.min,pp(an(n),.5))}function u1(n){return RN(n.min,n.max)}function f_(n){return u1(n)/2}function m1(n){let e=an(n);return Math.max(e.x,e.y,e.z)}function AI(n){let e=an(n),t=u1(n);return{center:jf(n.min,pp(e,.5)),size:e,diagonalLength:t,radius:t/2,maxSpan:Math.max(e.x,e.y,e.z)}}var Zc=C(()=>{"use strict";ys()});function xI(n,e,t={}){var s,a,o,l,c;let i=Math.max(e,Number.EPSILON),r=(s=t.radiusMultiplier)!=null?s:2.5;return{target:Yr(n),radius:i*r,lowerRadiusLimit:i*((a=t.lowerRadiusFactor)!=null?a:.05),upperRadiusLimit:i*((o=t.upperRadiusFactor)!=null?o:10),near:i*((l=t.nearFactor)!=null?l:.001),far:i*((c=t.farFactor)!=null?c:20)}}function uS(n,e={}){let t=AI(n);return xI(t.center,t.radius,e)}function p1(n,e={}){var r,s,a,o,l,c;let t=AI(n),i=Math.max(t.maxSpan,1)*((r=e.distanceMultiplier)!=null?r:1.8);return{target:Yr(t.center),position:jf(t.center,{x:i,y:i*((s=e.elevationFactor)!=null?s:.65),z:i}),near:Math.max((a=e.minNear)!=null?a:.01,t.maxSpan/((o=e.nearDivisor)!=null?o:100)),far:Math.max((l=e.minFar)!=null?l:100,t.maxSpan*((c=e.farMultiplier)!=null?c:20))}}var mS=C(()=>{"use strict";Zc();ys()});function pS(n){var s;let e=new Set,t=0,i=0;for(let a of n.meshes){t+=a.triangleCount,i+=a.vertexCount;for(let o of(s=a.materialKeys)!=null?s:[])o!=null&&e.add(o)}let r=Lte({triangleCount:t,splatCount:n.splatCount,meshCount:n.meshes.length,materialCount:e.size});return{meshCount:n.meshes.length,triangleCount:t,splatCount:n.splatCount,vertexCount:i,materialCount:e.size,performanceTier:r,performanceHint:Ote(r,{triangleCount:t,splatCount:n.splatCount,materialCount:e.size}),resourceWarnings:n.resourceWarnings?[...n.resourceWarnings]:void 0,boundingSize:Yr(n.boundingSize),rootName:n.rootName}}function Lte(n){var e,t,i;return((e=n.splatCount)!=null?e:0)>=15e5||n.triangleCount>=12e5||n.materialCount>=96||n.meshCount>=240?"extreme":((t=n.splatCount)!=null?t:0)>=65e4||n.triangleCount>=45e4||n.materialCount>=48||n.meshCount>=120?"heavy":((i=n.splatCount)!=null?i:0)>=18e4||n.triangleCount>=12e4||n.materialCount>=18||n.meshCount>=48?"medium":"light"}function Ote(n,e){var r;let t=((r=e.splatCount)!=null?r:e.triangleCount).toLocaleString(),i=e.splatCount!==void 0?"splats":"triangles";return n==="extreme"?`${t} ${i}, ${e.materialCount.toLocaleString()} materials. Expect automatic quality throttling while interacting.`:n==="heavy"?`${t} ${i}, ${e.materialCount.toLocaleString()} materials. Interaction may lower shadows and resolution temporarily.`:n==="medium"?`${t} ${i}, ${e.materialCount.toLocaleString()} materials. Performance should be steady on most desktop GPUs.`:`${t} ${i}, ${e.materialCount.toLocaleString()} materials. Performance tier: light.`}function Eh(n){var e;return{name:n.name,triangleCount:n.triangleCount,vertexCount:n.vertexCount,materialName:(e=n.materialName)!=null?e:null,boundingSize:Yr(n.boundingSize),center:Yr(n.center),source:n.source,meshNames:n.meshNames?[...n.meshNames]:void 0,childCount:n.childCount}}function _1(n){return n.splatCount!==void 0?"Splats":"Triangles"}function g1(n){var e;return(e=n.splatCount)!=null?e:n.triangleCount}var h_=C(()=>{"use strict";ys()});function Su(n,e="-"){if(typeof n!="string")return e;let t=n.trim();return t.length>0?t:e}function v1(n,e={}){var r,s;let t=(r=e.countLabel)!=null?r:_1(n),i=(s=e.decimals)!=null?s:3;return[`| Meshes | ${n.meshCount} |`,`| ${t} | ${g1(n).toLocaleString()} |`,`| Vertices | ${n.vertexCount.toLocaleString()} |`,`| Materials | ${n.materialCount} |`,...n.performanceTier?[`| Performance Tier | ${n.performanceTier} |`]:[],`| Bounding Size | ${RI(n.boundingSize,{decimals:i})} |`]}function _S(n){return n.replace(/\|/g,"\\|").replace(/\r?\n/g," ")}function RI(n,e={}){var r,s;let t=(r=e.decimals)!=null?r:3,i=(s=e.separator)!=null?s:" x ";return`${n.x.toFixed(t)}${i}${n.y.toFixed(t)}${i}${n.z.toFixed(t)}`}function E1(n,e={}){return["| Metric | Value |","|--------|-------|",...v1(n,e)]}function Nte(n,e,t={}){return["| Property | Value |","|----------|-------|",`| Format | ${n} |`,...v1(e,t)]}function gS(n){var r,s;let e=[];e.push(`## ${n.title} - Model Info`),e.push(""),e.push(...Nte(n.format,n.summary,{countLabel:n.countLabel})),e.push("");let t=(r=n.meshBreakdown)!=null?r:[];t.length>1&&t.length<=50&&(e.push("### Mesh Breakdown"),e.push(""),e.push("| # | Name | Triangles | Vertices | Material |"),e.push("|---|------|-----------|----------|----------|"),t.forEach((a,o)=>{let l=a.triangleCount===null?"-":a.triangleCount.toLocaleString();e.push(`| ${o+1} | ${_S(Su(a.name,`mesh-${o+1}`))} | ${l} | ${a.vertexCount.toLocaleString()} | ${_S(Su(a.materialName))} |`)}),e.push(""));let i=Array.from((s=n.materialNames)!=null?s:[]).map(a=>Su(a,"")).filter(a=>a.length>0);if(i.length>0){let a=Array.from(new Set(i));e.push("### Materials"),e.push("");for(let o of a)e.push(`- ${o}`);e.push("")}return e.join(` +`)}function vS(n,e={}){var r;let t=Su((r=e.title)!=null?r:n.name,"Selected Part"),i=[];return i.push(`## ${t} - Part Info`),i.push(""),i.push("| Property | Value |"),i.push("|----------|-------|"),i.push(`| Mesh | ${_S(Su(n.name))} |`),i.push(`| Triangles | ${n.triangleCount.toLocaleString()} |`),i.push(`| Vertices | ${n.vertexCount.toLocaleString()} |`),i.push(`| Material | ${_S(Su(n.materialName))} |`),i.push(`| Bounding Size | ${RI(n.boundingSize)} |`),i.push(`| Center | ${RI(n.center,{separator:", "})} |`),i.push(""),i.join(` +`)}var ES=C(()=>{"use strict";h_()});function TS(n){return new bI(n)}var SS,bI,II=C(()=>{"use strict";SS=class SS{constructor(e){this.originals=new Map;this.unsubscribe=null;this.active=!1;this.drag=null;this.pendingDrag=null;this.selected=null;this.activePointerId=null;this.frameCount=0;this.adapter=e;for(let t of e.getParts())this.originals.set(e.getPartId(t),e.captureTransform(t))}isEnabled(){return this.active}setEnabled(e){var t,i,r;return this.active===e?this.active:(this.active=e,this.finishDrag(),this.setSelected(null),this.activePointerId=null,e?this.unsubscribe=this.adapter.subscribe({onPointerDown:(s,a)=>this.handlePointerDown(s,a),onPointerMove:s=>this.handlePointerMove(s),onPointerUp:s=>this.handlePointerUp(s),onRender:()=>this.handleRender()}):((t=this.unsubscribe)==null||t.call(this),this.unsubscribe=null),(r=(i=this.adapter).requestRender)==null||r.call(i),this.active)}toggle(){return this.setEnabled(!this.active)}reset(){var e,t;this.finishDrag(),this.setSelected(null);for(let i of this.adapter.getParts()){if(this.adapter.isDisposed(i))continue;let r=this.originals.get(this.adapter.getPartId(i));r&&this.adapter.restoreTransform(i,r)}this.activePointerId=null,(t=(e=this.adapter).requestRender)==null||t.call(e)}dispose(){this.setEnabled(!1),this.originals.clear()}handlePointerDown(e,t){if(t.button!==0||t.isPrimary===!1)return;let i=this.adapter.resolvePart(e);if(!i){this.drag=null,this.pendingDrag=null,this.activePointerId=null,this.setSelected(null);return}this.activePointerId=t.pointerId,this.setSelected(i),this.pendingDrag={part:i,event:t,x:t.clientX,y:t.clientY}}handlePointerMove(e){if(!(this.activePointerId!==null&&e.pointerId!==this.activePointerId)){if(!this.drag&&this.pendingDrag){if(e.pointerType==="mouse"&&(e.buttons&1)===0){this.pendingDrag=null,this.activePointerId=null;return}if(Math.hypot(e.clientX-this.pendingDrag.x,e.clientY-this.pendingDrag.y){"use strict";Gs();ys();II();S1=new ct(4890367),wte=new ct(1722990),MI=class{constructor(e,t,i,r,s,a){this.raycaster=new Wc;this.pointer=new Lt;this.tempBox=new vr;this.tempCenter=new ne;this.tempDirection=new ne;this.tempCameraForward=new ne;this.tempCameraRight=new ne;this.tempCameraUp=new ne;this.selectionHelper=null;this.lastOccluded=!1;this.selected=null;this.lastPointerDown=null;this.partPointerActive=!1;this.activePointerId=null;this.scene=e,this.camera=t,this.canvas=i,this.meshes=r,this.controls=s,this.invalidate=a}requestRender(){this.invalidate()}getParts(){return this.meshes}getPartId(e){return e.id}isDisposed(e){return!e.parent&&!this.meshes.includes(e)}captureTransform(e){return{parent:e.parent,position:e.position.clone(),quaternion:e.quaternion.clone(),scale:e.scale.clone()}}restoreTransform(e,t){t.parent&&t.parent.add(e),e.position.copy(t.position),e.quaternion.copy(t.quaternion),e.scale.copy(t.scale),e.updateMatrixWorld(!0),this.requestRender()}subscribe(e){this.canvas.classList.add("ai3d-disassembly-active");let t=s=>{var o,l;if(s.button!==0||s.isPrimary===!1)return;this.lastPointerDown={x:s.clientX,y:s.clientY};let a=this.resolvePickTarget(s);if(this.partPointerActive=!!a,this.partPointerActive){s.preventDefault(),s.stopPropagation(),this.controls.enabled=!1,this.activePointerId=s.pointerId;try{(l=(o=this.canvas).setPointerCapture)==null||l.call(o,s.pointerId)}catch(c){}}e.onPointerDown(a,s)},i=s=>{this.activePointerId!==null&&s.pointerId!==this.activePointerId||(this.partPointerActive&&(s.preventDefault(),s.stopPropagation()),e.onPointerMove(s))},r=s=>{var a,o;if(!(this.activePointerId!==null&&s.pointerId!==this.activePointerId)){if(this.partPointerActive&&(s.preventDefault(),s.stopPropagation()),this.lastPointerDown=null,e.onPointerUp(s),this.partPointerActive=!1,this.activePointerId!==null&&((o=(a=this.canvas).hasPointerCapture)!=null&&o.call(a,this.activePointerId)))try{this.canvas.releasePointerCapture(this.activePointerId)}catch(l){}this.activePointerId=null,this.controls.enabled=!0}};return this.canvas.addEventListener("pointerdown",t),window.addEventListener("pointermove",i),window.addEventListener("pointerup",r),()=>{var s,a;if(this.canvas.removeEventListener("pointerdown",t),window.removeEventListener("pointermove",i),window.removeEventListener("pointerup",r),this.canvas.classList.remove("ai3d-disassembly-active","ai3d-disassembly-dragging"),this.partPointerActive=!1,this.activePointerId!==null&&((a=(s=this.canvas).hasPointerCapture)!=null&&a.call(s,this.activePointerId)))try{this.canvas.releasePointerCapture(this.activePointerId)}catch(o){}this.activePointerId=null,this.controls.enabled=!0}}resolvePart(e){return e&&this.isMeshInSet(e)?e:null}setSelected(e){var t;(t=this.selectionHelper)==null||t.removeFromParent(),this.selectionHelper=null,this.selected=e,this.lastOccluded=!1,e&&!this.isDisposed(e)&&(this.selectionHelper=new Il(e,S1),this.scene.add(this.selectionHelper)),this.requestRender()}beginDrag(e,t){let i=this.getPointOnDragPlane(e,t);if(!i)return null;t.preventDefault(),t.stopPropagation(),e.removeFromParent(),this.scene.add(e),this.canvas.classList.add("ai3d-disassembly-dragging");let r="move";t.shiftKey&&(r="rotate");let s=this.tempBox.setFromObject(e).getCenter(this.tempCenter).clone(),a=this.tempCameraForward;this.camera.getWorldDirection(a);let o=Md(Ht(i),Ht(a));return o?(this.controls.enabled=!1,this.requestRender(),{mesh:e,mode:r,plane:o,startPoint:i.clone(),startPosition:e.position.clone(),startQuaternion:e.quaternion.clone(),pivot:s,pointerX:t.clientX,pointerY:t.clientY}):null}updateDrag(e,t){if(t.preventDefault(),t.stopPropagation(),e.mode==="rotate"){this.updateRotation(e,t);return}let i=this.getRayPlanePoint(t,e.plane);if(!i)return;let r=i.clone().sub(e.startPoint);e.mesh.position.copy(e.startPosition).add(r),e.mesh.updateMatrixWorld(!0),this.requestRender()}endDrag(e){this.controls.enabled=!0,this.canvas.classList.remove("ai3d-disassembly-dragging"),this.requestRender()}updateSelectionOcclusion(e){let i=this.tempBox.setFromObject(e).getCenter(this.tempCenter),r=this.camera.position,s=yc(Ht(r),Ht(i));if(!s)return;let a=this.tempDirection.set(s.direction.x,s.direction.y,s.direction.z);this.raycaster.set(r,a),this.raycaster.far=s.distance;let o=this.raycaster.intersectObjects(this.meshes,!1)[0],l=!!o&&Cc(o.distance,s.distance,s.epsilon);l!==this.lastOccluded&&(this.lastOccluded=l,this.selectionHelper&&(this.selectionHelper.material.color.set(l?wte:S1),this.requestRender()))}isMeshInSet(e){return this.meshes.includes(e)}updateRotation(e,t){let i=t.clientX-e.pointerX,r=t.clientY-e.pointerY,s=this.tempCameraForward;this.camera.getWorldDirection(s);let a=this.tempCameraUp.copy(this.camera.up).normalize(),o=this.tempCameraRight.crossVectors(a,s).normalize(),l=Zg({startPosition:Ht(e.startPosition),pivot:Ht(e.pivot),startRotationQuaternion:qg(e.startQuaternion),yawAxis:Ht(a),pitchAxis:Ht(o),deltaX:i,deltaY:r,sensitivity:.01});l&&(e.mesh.position.set(l.position.x,l.position.y,l.position.z),e.mesh.quaternion.set(l.rotationQuaternion.x,l.rotationQuaternion.y,l.rotationQuaternion.z,l.rotationQuaternion.w),e.mesh.updateMatrixWorld(!0),this.requestRender())}resolvePickTarget(e){let t=this.canvas.getBoundingClientRect();this.pointer.x=(e.clientX-t.left)/t.width*2-1,this.pointer.y=-((e.clientY-t.top)/t.height)*2+1,this.raycaster.setFromCamera(this.pointer,this.camera);let i=this.raycaster.intersectObjects(this.meshes,!1)[0];return(i==null?void 0:i.object)instanceof ci?i.object:null}getPointOnDragPlane(e,t){var o;let r=this.tempBox.setFromObject(e).getCenter(this.tempCenter),s=this.tempCameraForward;this.camera.getWorldDirection(s);let a=Md(Ht(r),Ht(s));return a&&(o=this.getRayPlanePoint(t,a))!=null?o:r}getRayPlanePoint(e,t){let i=this.canvas.getBoundingClientRect(),r=e.clientX-i.left,s=e.clientY-i.top;this.pointer.set(r/i.width*2-1,-(s/i.height)*2+1),this.raycaster.setFromCamera(this.pointer,this.camera);let a=jg({origin:Ht(this.raycaster.ray.origin),direction:Ht(this.raycaster.ray.direction)},t);return a?new ne(a.x,a.y,a.z):null}}});function x1(n){return Yr(n)}function Fte(n,e){return{originalPosition:x1(n),originalCenter:x1(e)}}function AS(n,e,t){let i=n.getRootCenter();for(let r of n.getParts()){let s=n.getPartState(r);s||(s=Fte(n.getPartPosition(r),n.getPartCenter(r)),n.setPartState(r,s));let a=(s.originalCenter[t]-i[t])*e;n.setPartPosition(r,bN(s.originalPosition,t,a))}}function xS(n){for(let e of n.getParts()){let t=n.getPartState(e);t&&n.setPartPosition(e,t.originalPosition)}}var CI=C(()=>{"use strict";ys()});function RS(n){return Yr(n)}function Bte(n){return n instanceof ci}function Ute(n){let e=[];return n.traverse(t=>{Bte(t)&&t.geometry&&e.push(t)}),e}function R1(n,e,t){AS(new bS(n),e,t)}function yI(n){xS(new bS(n))}var bS,b1=C(()=>{"use strict";Gs();ys();Zc();CI();bS=class{constructor(e){this.root=e}getParts(){return Ute(this.root)}getRootCenter(){let e=new vr().setFromObject(this.root);return on({min:Ht(e.min),max:Ht(e.max)})}getPartPosition(e){return Ht(e.position)}getPartCenter(e){let i=new vr().setFromObject(e).getCenter(new ne);return Ht(i)}setPartPosition(e,t){e.position.set(t.x,t.y,t.z)}getPartState(e){var i;let t=(i=e.userData)!=null?i:{};return t._previewExplodeState?{originalPosition:RS(t._previewExplodeState.originalPosition),originalCenter:RS(t._previewExplodeState.originalCenter)}:null}setPartState(e,t){e.userData._previewExplodeState={originalPosition:RS(t.originalPosition),originalCenter:RS(t.originalCenter)}}}});var C1={};$e(C1,{ThreeModelPreview:()=>DS,createThreeModelPreview:()=>rie});function Tu(n){return n instanceof ci}function I1(n){return n instanceof No||n instanceof za||n instanceof bl}function ua(n){return n?Array.isArray(n)?n:[n]:[]}function MS(n){var r,s,a,o;let e=n.geometry,t=(s=(r=e.getIndex())==null?void 0:r.count)!=null?s:0;if(t>0)return Math.floor(t/3);let i=(o=(a=e.getAttribute("position"))==null?void 0:a.count)!=null?o:0;return Math.floor(i/3)}function CS(n){var e,t;return(t=(e=n.geometry.getAttribute("position"))==null?void 0:e.count)!=null?t:0}function yS(n){return n?n.name||n.type||`material-${n.uuid}`:null}function PS(n,e){var i;let t=(i=n.userData)==null?void 0:i.name;return typeof t=="string"&&t.trim().length>0?t:n.name||e}function M1(n){let e=n.clone();return e.transparent=!0,e.opacity=Math.max(0,Math.min(1,n.opacity))*Vte,e.depthWrite=!1,e.needsUpdate=!0,e}function tie(n){return Array.isArray(n)?n.map(M1):M1(n)}function iie(n){for(let e of ua(n))e.dispose()}function Au(n){let e=new vr().setFromObject(n);return c_(Ht(e.min),Ht(e.max))}function rie(n){return new DS(n)}var IS,Vte,Gte,kte,Wte,Hte,zte,d_,Xte,Yte,Kte,jte,qte,Zte,Qte,$te,Jte,eie,DS,y1=C(()=>{"use strict";Gs();BF();UF();f1();ks();Zc();mS();ES();h_();ys();A1();b1();na();IS=new ct("#20242e"),Vte=.242,Gte=.28,kte=2.5,Wte=1.5,Hte=1.15,zte=180,d_=30,Xte=8,Yte=28,Kte=18,jte=2,qte=28,Zte=.86,Qte=1.08,$te=.62,Jte=.86,eie=4;DS=class{constructor(e){this.raycaster=new Wc;this.occlusionRaycaster=new Wc;this.renderObservers=new Set;this.pointer=new Lt;this.annotationProjection=new ne;this.annotationDirection=new ne;this.clock={last:performance.now()};this.defaultLights=[];this.configLights=[];this.environmentTarget=null;this.rootObject=null;this.loadedExt="";this.resourceWarnings=[];this.renderHandle=0;this.quality="high";this.renderScale=1;this.interactivePixelRatioActive=!1;this.interactionPixelRatioDeadline=0;this.renderObserverSettleFrames=d_;this.frameBudgetPixelRatioScale=1;this.frameBudgetSlowStreak=0;this.frameBudgetFastStreak=0;this.frameBudgetObserverStride=1;this.frameBudgetObserverCursor=0;this.frameBudgetShadowDeferred=!1;this.lastFrameDurationMs=0;this.viewportVisible=!0;this.viewportObserver=null;this.lastDisposalAudit={reason:"initial",meshCount:0,geometryCount:0,materialCount:0,textureCount:0,objectCount:0,timestamp:performance.now()};this.axesHelper=null;this.bboxHelper=null;this.groundShadowMesh=null;this.gridHelper=null;this.bboxEnabled=!1;this.wireframeEnabled=!1;this.sceneConfig={};this.focusSelectionEnabled=!1;this.focusedMesh=null;this.highlightedMesh=null;this.selectionHelper=null;this.focusHelper=null;this.mixer=null;this.animationPlaying=!1;this.initialTarget=new ne;this.initialPosition=new ne(3,2,3);this.initialFov=45;this.lastPointerDown=null;this.originalMaterials=new Map;this.focusDimMaterials=new Map;this._lastPickResult={mesh:null,pickedPoint:null,screenX:0,screenY:0};this._onPickCallbacks=[];this.disassembly=null;this.disassemblySetup=!1;this.renderDirty=!0;this.cachedMeshes=null;this.cachedMeshRoot=null;this.cameraAnimHandle=0;this.preventCanvasWheelScroll=e=>{e.preventDefault(),e.stopPropagation()};this.handleControlsChange=()=>{let e=performance.now();this.interactionPixelRatioDeadline=e+zte,this.activateInteractivePixelRatio()&&this.resizeRenderer(),this.markDirty()};this.handleViewportIntersection=e=>{let t=e[e.length-1];if(!t)return;let i=t.isIntersecting&&t.intersectionRatio>0;i!==this.viewportVisible&&(this.viewportVisible=i,i?(this.clock.last=performance.now(),this.markDirty(),this.markShadowDirty(),this.startRenderLoop()):(cancelAnimationFrame(this.renderHandle),this.renderHandle=0))};this.handlePointerDown=e=>{e.button!==0||e.isPrimary===!1||(this.lastPointerDown={x:e.clientX,y:e.clientY})};this.handlePointerUp=e=>{var i;if(e.button!==0||e.isPrimary===!1)return;let t=this.lastPointerDown;this.lastPointerDown=null,t&&(Math.hypot(e.clientX-t.x,e.clientY-t.y)>4||(i=this.disassembly)!=null&&i.isEnabled()||this.dispatchPick(e))};this.renderer=new $E({canvas:e,antialias:!0,alpha:!0,preserveDrawingBuffer:!0,powerPreference:"high-performance"}),this.renderer.outputColorSpace=Ni,this.renderer.toneMapping=Bs,this.renderer.toneMappingExposure=1,this.renderer.shadowMap.enabled=!0,this.renderer.shadowMap.type=nE,this.renderer.shadowMap.autoUpdate=!1,this.renderer.shadowMap.needsUpdate=!0,this.renderer.setClearColor(IS,1),this.scene=new oh,this.installGlobalEnvironment(),this.camera=new Br(this.initialFov,1,.01,2e3),this.camera.position.copy(this.initialPosition),this.camera.lookAt(this.initialTarget),this.scene.add(this.camera),this.controls=new iS(this.camera,e),this.controls.enableDamping=!0,this.controls.dampingFactor=.08,this.controls.zoomSpeed=.85,this.controls.screenSpacePanning=!0,this.controls.target.copy(this.initialTarget),this.controls.addEventListener("change",this.handleControlsChange),this.installDefaultLighting(),this.resizeObs=new ResizeObserver(()=>this.resizeRenderer()),this.resizeObs.observe(e),typeof IntersectionObserver!="undefined"&&(this.viewportObserver=new IntersectionObserver(this.handleViewportIntersection,{root:null,threshold:[0,.01]}),this.viewportObserver.observe(e)),e.addEventListener("wheel",this.preventCanvasWheelScroll,{passive:!1}),e.addEventListener("pointerdown",this.handlePointerDown),e.addEventListener("pointerup",this.handlePointerUp),this.resizeRenderer(),this.startRenderLoop()}async loadModel(e,t,i,r){var l;this.clearLoadedModel("model-switch"),this.loadedExt=t.toLowerCase(),this.resourceWarnings=[];let s,a=[];if(this.loadedExt==="glb"||this.loadedExt==="gltf"){let c=await a1(e,this.loadedExt,i,r);s=c.scene,a=c.animations,this.resourceWarnings=c.warnings}else if(this.loadedExt==="stl")s=await o1(e);else if(this.loadedExt==="ply")s=await l1(e);else if(this.loadedExt==="obj"){let c=await c1(e,i,r);s=c.object,this.resourceWarnings=c.warnings}else throw new Error(`Three preview does not support .${this.loadedExt} format`);if(this.rootObject=s,this.scene.add(s),this.invalidateMeshCache(),this.prepareModelForQuality(s),this.updateShadowFraming(),this.syncSceneHelpers(),this.markDirty(),a.length>0){this.mixer=new Xp(s);for(let c of a)this.mixer.clipAction(c).play();this.animationPlaying=!0}let o=this.computeSummary(s);if(this.fitCameraToObject(s),this.axesHelper){let c=Math.max(o.boundingSize.x,o.boundingSize.y,o.boundingSize.z)||1;this.axesHelper.scale.setScalar(Math.max(.5,c*.25))}return this.bboxEnabled&&this.ensureBoundingBoxHelper(),this.disassemblySetup=!1,(l=this.disassembly)==null||l.dispose(),this.disassembly=null,o}applyConfig(e){e.camera&&this.applyCameraConfig(e.camera),e.lights&&this.applyLightConfig(e.lights),e.scene&&this.applySceneConfig(e.scene)}destroy(){var t,i;cancelAnimationFrame(this.renderHandle),cancelAnimationFrame(this.cameraAnimHandle),this._onPickCallbacks=[],this.renderObservers.clear(),(t=this.disassembly)==null||t.dispose(),this.disassembly=null,this.disassemblySetup=!1,this.clearFocusedMesh(),this.clearSelectionHighlight(),this.clearLoadedModel("destroy");for(let r of this.configLights)this.disposeConfiguredLight(r);this.configLights.length=0;for(let r of this.defaultLights)this.disposeConfiguredLight(r);this.defaultLights.length=0,this.disposeGlobalEnvironment(),this.controls.removeEventListener("change",this.handleControlsChange),this.controls.dispose();let e=this.renderer.domElement;e.removeEventListener("wheel",this.preventCanvasWheelScroll),e.removeEventListener("pointerdown",this.handlePointerDown),e.removeEventListener("pointerup",this.handlePointerUp),this.resizeObs.disconnect(),(i=this.viewportObserver)==null||i.disconnect(),this.viewportObserver=null,this.renderer.dispose()}getCanvas(){return this.renderer.domElement}captureSnapshot(){return this.renderNow(0),this.renderer.domElement.toDataURL("image/png")}getAnnotationProvider(){return{canvas:this.renderer.domElement,observeRender:t=>(this.renderObservers.add(t),{remove:()=>this.renderObservers.delete(t)}),getCameraStateKey:()=>this.getAnnotationCameraStateKey(),projectWorldPoint:(t,i)=>this.projectAnnotationWorldPoint(t,i),isWorldPointOccluded:t=>this.isAnnotationWorldPointOccluded(t)}}exportModelInfo(e){if(!this.rootObject)return"";let t=this.computeSummary(this.rootObject),i=this.getRenderableMeshes(this.rootObject),r=e&&ra(e)||t.rootName;return gS({title:r,format:this.loadedExt.toUpperCase(),summary:t,meshBreakdown:i.map(s=>({name:PS(s,`mesh-${s.id}`),triangleCount:MS(s),vertexCount:CS(s),materialName:yS(ua(s.material)[0])}))})}getModelEvidence(){if(!this.rootObject)return null;let e=this.getRenderableMeshes(this.rootObject),t=this.computeGroupedPartSummaries(this.rootObject,e),i=e.filter(a=>!t.groupedMeshes.has(a)).map(a=>this.computePartSummary(a)),r=t.parts.length>0?[...t.parts,...i]:i,s=new Set;for(let a of e)for(let o of ua(a.material)){let l=yS(o);l&&s.add(l)}return{summary:this.computeSummary(this.rootObject),parts:r,materialNames:Array.from(s).sort((a,o)=>a.localeCompare(o)),resourceWarnings:[...this.resourceWarnings],capturedAt:new Date().toISOString()}}getSelectedPartInfo(){var t;let e=(t=this.focusedMesh)!=null?t:Tu(this._lastPickResult.mesh)?this._lastPickResult.mesh:null;return e?this.computePartSummary(e):null}exportSelectedPartInfo(){let e=this.getSelectedPartInfo();return e?vS(e):""}getPickWorldPoint(e){return e.pickedPoint&&typeof e.pickedPoint=="object"?Ht(e.pickedPoint):e.mesh instanceof ci?on(Au(e.mesh)):null}onPick(e){return this._onPickCallbacks.push(e),()=>{this._onPickCallbacks=this._onPickCallbacks.filter(t=>t!==e)}}resetView(){this.rootObject&&yI(this.rootObject),this.resetDisassembly(),this.clearFocusedMesh(),this.clearSelectionHighlight(),this.camera.fov=this.initialFov,this.camera.position.copy(this.initialPosition),this.camera.updateProjectionMatrix(),this.controls.target.copy(this.initialTarget),this.controls.update(),this.markDirty(),this.renderNow(performance.now())}toggleFocusSelection(){var t;let e=!this.focusSelectionEnabled;return e&&((t=this.disassembly)!=null&&t.isEnabled())&&this.disassembly.setEnabled(!1),this.focusSelectionEnabled=e,this.focusSelectionEnabled?(this.clearSelectionHighlight(),this._lastPickResult.mesh instanceof ci&&this.setFocusedMesh(this._lastPickResult.mesh)):this.clearFocusedMesh(),this.markDirty(),this.focusSelectionEnabled}isFocusSelectionEnabled(){return this.focusSelectionEnabled}toggleWireframe(){if(this.wireframeEnabled=!this.wireframeEnabled,!this.rootObject)return this.wireframeEnabled;for(let e of this.getRenderableMeshes(this.rootObject))for(let t of ua(e.material))"wireframe"in t&&(t.wireframe=this.wireframeEnabled,t.needsUpdate=!0);return this.markDirty(),this.wireframeEnabled}toggleOrientationGizmo(){return this.axesHelper||(this.axesHelper=new ou(1.2),this.axesHelper.visible=!1,this.scene.add(this.axesHelper)),this.axesHelper.visible=!this.axesHelper.visible,this.markDirty(),this.axesHelper.visible}isOrientationGizmoEnabled(){var e;return!!((e=this.axesHelper)!=null&&e.visible)}toggleBoundingBox(){var e;return this.bboxEnabled=!this.bboxEnabled,this.bboxEnabled?(this.ensureBoundingBoxHelper(),this.markDirty(),!!this.bboxHelper):((e=this.bboxHelper)==null||e.removeFromParent(),this.bboxHelper=null,this.markDirty(),!1)}hasAnimations(){return this.mixer!==null}toggleAnimation(){return this.mixer?(this.animationPlaying=!this.animationPlaying,this.mixer.timeScale=this.animationPlaying?1:0,this.markDirty(),this.animationPlaying):!1}setRenderQuality(e,t=this.renderScale){this.quality=e,this.renderScale=t,this.applyShadowQuality(),this.resizeRenderer()}setRenderScale(e){return this.renderScale=Math.min(2,Math.max(.25,e)),this.resizeRenderer(),Number(this.renderScale.toFixed(2))}getPerformanceSnapshot(){return{backend:"three",renderScale:Number(this.renderScale.toFixed(2)),quality:this.quality,pixelRatio:Number(this.renderer.getPixelRatio().toFixed(2)),interactivePixelRatioActive:this.interactivePixelRatioActive,renderDirty:this.renderDirty,renderObserverCount:this.renderObservers.size,renderObserverSettleFrames:this.renderObserverSettleFrames,frameBudgetPixelRatioScale:Number(this.frameBudgetPixelRatioScale.toFixed(2)),frameBudgetObserverStride:this.frameBudgetObserverStride,frameBudgetShadowDeferred:this.frameBudgetShadowDeferred,lastFrameDurationMs:Number(this.lastFrameDurationMs.toFixed(2)),viewportVisible:this.viewportVisible,disposalAudit:{...this.lastDisposalAudit},meshCount:this.rootObject?this.getRenderableMeshes(this.rootObject).length:0}}setExplode(e,t){this.rootObject&&(R1(this.rootObject,e,t),this.markShadowDirty(),this.markDirty())}resetExplode(){this.rootObject&&(yI(this.rootObject),this.markShadowDirty(),this.markDirty())}focusWorldPoint(e){let t=new ne(e.x,e.y,e.z),i=this.camera.position.distanceTo(this.controls.target),r=t.clone().sub(this.camera.position).normalize(),s=t.clone().sub(r.multiplyScalar(i));this.animateCamera(s,t)}toggleDisassembly(){if(this.ensureDisassembly(),!this.disassembly)return!1;let e=!this.disassembly.isEnabled();e&&(this.focusSelectionEnabled=!1,this.clearFocusedMesh(),this.clearSelectionHighlight());let t=this.disassembly.setEnabled(e);return t||this.disassembly.reset(),t}resetDisassembly(){var e;(e=this.disassembly)==null||e.reset()}isDisassemblyEnabled(){var e,t;return(t=(e=this.disassembly)==null?void 0:e.isEnabled())!=null?t:!1}ensureDisassembly(){if(this.disassemblySetup||(this.disassemblySetup=!0,!this.rootObject))return;let e=this.getRenderableMeshes(this.rootObject);e.length!==0&&(this.disassembly=T1(this.scene,this.camera,this.renderer.domElement,e,this.controls,()=>{this.markShadowDirty(),this.markDirty()}))}animateCamera(e,t){cancelAnimationFrame(this.cameraAnimHandle);let i=this.camera.position.clone(),r=this.controls.target.clone(),s=500,a=performance.now(),o=()=>{let l=performance.now()-a,c=Math.min(1,l/s),f=c<.5?4*c*c*c:1-Math.pow(-2*c+2,3)/2;this.camera.position.lerpVectors(i,e,f),this.controls.target.lerpVectors(r,t,f),this.controls.update(),this.markDirty(),c<1&&(this.cameraAnimHandle=requestAnimationFrame(o))};this.cameraAnimHandle=requestAnimationFrame(o)}startRenderLoop(){if(this.renderHandle||!this.viewportVisible)return;let e=()=>{if(!this.viewportVisible){this.renderHandle=0;return}this.renderHandle=requestAnimationFrame(e),this.renderNow(performance.now())};this.renderHandle=requestAnimationFrame(e)}renderNow(e){var o,l,c;let t=this.renderer.domElement;if(!this.viewportVisible||!t.isConnected||t.clientWidth<=0||t.clientHeight<=0)return;let i=Math.max(0,(e-this.clock.last)/1e3);this.clock.last=e;let r=this.controls.update(),s=!!this.mixer&&this.animationPlaying;if(s&&this.mixer&&(this.mixer.update(i),this.markShadowDirty()),this.restoreInteractivePixelRatioIfIdle(e,r),!r&&!s&&!this.renderDirty){this.renderObserverSettleFrames>0&&(this.renderObserverSettleFrames--,this.notifyRenderObservers());return}this.renderDirty=!1,this.renderObserverSettleFrames=d_,(o=this.bboxHelper)==null||o.update(),(l=this.selectionHelper)==null||l.update(),(c=this.focusHelper)==null||c.update();let a=performance.now();this.renderer.render(this.scene,this.camera),this.updateFrameBudget(performance.now()-a),this.notifyRenderObservers()}notifyRenderObservers(){if(!(this.frameBudgetObserverStride>1&&(this.frameBudgetObserverCursor=(this.frameBudgetObserverCursor+1)%this.frameBudgetObserverStride,this.frameBudgetObserverCursor!==0)))for(let e of this.renderObservers)e()}markDirty(){this.renderDirty=!0,this.startRenderLoop()}markShadowDirty(){if(this.shouldDeferShadowRefresh()){this.frameBudgetShadowDeferred=!0;return}this.frameBudgetShadowDeferred=!1,this.renderer.shadowMap.needsUpdate=!0}activateInteractivePixelRatio(){if(this.interactivePixelRatioActive)return!1;let e=this.computePixelRatio(!1);return this.computePixelRatio(!0)>=e?!1:(this.interactivePixelRatioActive=!0,!0)}restoreInteractivePixelRatioIfIdle(e,t){!this.interactivePixelRatioActive||t||e=Yte?(this.frameBudgetSlowStreak++,this.frameBudgetFastStreak=0):e<=Kte?(this.frameBudgetFastStreak++,this.frameBudgetSlowStreak=0):(this.frameBudgetSlowStreak=0,this.frameBudgetFastStreak=0),this.frameBudgetSlowStreak>=jte){this.frameBudgetSlowStreak=0;let t=Math.max($te,this.frameBudgetPixelRatioScale*Zte);t=qte&&this.frameBudgetPixelRatioScale<1&&(this.frameBudgetFastStreak=0,this.frameBudgetPixelRatioScale=Math.min(1,this.frameBudgetPixelRatioScale*Qte),this.frameBudgetObserverStride=Math.max(1,this.frameBudgetObserverStride-1),this.renderObserverSettleFrames=d_,this.resizeRenderer())}}resetFrameBudget(){let e=this.frameBudgetPixelRatioScale!==1||this.frameBudgetObserverStride!==1;this.frameBudgetPixelRatioScale=1,this.frameBudgetSlowStreak=0,this.frameBudgetFastStreak=0,this.frameBudgetObserverStride=1,this.frameBudgetObserverCursor=0,this.renderObserverSettleFrames=d_,e&&this.markDirty()}shouldDeferShadowRefresh(){return this.interactivePixelRatioActive&&this.frameBudgetPixelRatioScale<=Jte}resizeRenderer(){let e=this.renderer.domElement,t=Math.max(1,Math.round(e.clientWidth||e.width||1)),i=Math.max(1,Math.round(e.clientHeight||e.height||1));this.renderer.setPixelRatio(this.computePixelRatio()),this.renderer.setSize(t,i,!1),this.camera.aspect=t/i,this.camera.updateProjectionMatrix(),this.markDirty()}applyCameraConfig(e){typeof e.fov=="number"&&Number.isFinite(e.fov)&&(this.camera.fov=e.fov,this.camera.updateProjectionMatrix()),e.position&&this.camera.position.set(...e.position),e.lookAt&&(this.controls.target.set(...e.lookAt),this.camera.lookAt(this.controls.target)),typeof e.near=="number"&&Number.isFinite(e.near)&&(this.camera.near=e.near),typeof e.far=="number"&&Number.isFinite(e.far)&&(this.camera.far=e.far),typeof e.zoom=="number"&&Number.isFinite(e.zoom)&&(this.camera.zoom=e.zoom),this.camera.updateProjectionMatrix(),this.controls.update(),this.markDirty()}applyLightConfig(e){for(let i of this.configLights)this.disposeConfiguredLight(i);this.configLights.length=0;let t=e.length>0;for(let i of this.defaultLights)i.visible=!t;for(let i of e){let r=this.createConfiguredLight(i);r&&(this.configLights.push(r),r.parent!==this.camera&&this.scene.add(r))}this.updateShadowFraming(),this.markShadowDirty(),this.markDirty()}applySceneConfig(e){if(this.sceneConfig={...this.sceneConfig,...e},e.transparent!==void 0||e.background!==void 0)if(this.sceneConfig.transparent)this.scene.background=null,this.renderer.setClearColor(IS,0);else if(this.sceneConfig.background){let t=new ct(this.sceneConfig.background);this.scene.background=t,this.renderer.setClearColor(t,1)}else this.scene.background=IS,this.renderer.setClearColor(IS,1);typeof e.autoRotate=="boolean"&&(this.controls.autoRotate=e.autoRotate),typeof e.autoRotateSpeed=="number"&&(this.controls.autoRotateSpeed=e.autoRotateSpeed),typeof e.axis=="boolean"&&this.syncAxisHelper(e.axis),this.syncSceneHelpers(),this.markDirty()}installDefaultLighting(){let e=new su(16777215,.96);e.name="default-global-ambient";let t=new nu(16777215,7172736,.34);t.name="default-hemi",this.defaultLights.push(e,t);for(let i of this.defaultLights)this.scene.add(i)}installGlobalEnvironment(){this.disposeGlobalEnvironment();let e=new _u(this.renderer),t=new rS;this.environmentTarget=e.fromScene(t,.04),this.scene.environment=this.environmentTarget.texture,this.scene.environmentIntensity=.48,t.dispose(),e.dispose()}disposeGlobalEnvironment(){var e;this.scene.environment=null,(e=this.environmentTarget)==null||e.dispose(),this.environmentTarget=null}createConfiguredLight(e){var r,s,a,o,l,c,f;let t=e.color?new ct(e.color):new ct(16777215),i=(r=e.intensity)!=null?r:1;switch(e.type){case"ambient":return new su(t,i);case"hemisphere":{let h=e.groundColor?new ct(e.groundColor):new ct(4473924);return new nu(t,h,i)}case"directional":{let h=new No(t,i),d=(s=e.position)!=null?s:[-1,2,1],u=(a=e.target)!=null?a:[0,0,0];return h.position.set(...d),h.target.position.set(...u),this.scene.add(h.target),h.castShadow=!!e.castShadow,h}case"point":{let h=new za(t,i),d=(o=e.position)!=null?o:[0,5,0];return h.position.set(...d),h.castShadow=!!e.castShadow,typeof e.decay=="number"&&(h.decay=e.decay),h}case"spot":{let h=new bl(t,i),d=(l=e.position)!=null?l:[0,5,0],u=(c=e.target)!=null?c:[0,0,0];return h.position.set(...d),h.target.position.set(...u),this.scene.add(h.target),h.angle=e.angle?e.angle*Math.PI/180:Math.PI/4,h.penumbra=(f=e.penumbra)!=null?f:.5,typeof e.decay=="number"&&(h.decay=e.decay),h.castShadow=!!e.castShadow,h}case"attachToCam":{let h=new za(t,i);return this.camera.add(h),h}default:return null}}disposeConfiguredLight(e){(e instanceof No||e instanceof bl)&&e.target.removeFromParent(),e.removeFromParent(),e.dispose()}prepareModelForQuality(e){let t=this.renderer.capabilities.getMaxAnisotropy();e.traverse(i=>{if(Tu(i)){i.castShadow=!0,i.receiveShadow=!0;for(let r of ua(i.material))this.prepareMaterialForQuality(r,t)}})}prepareMaterialForQuality(e,t){let i=e;for(let r of Object.values(i))r instanceof Rr&&(r.anisotropy=Math.max(r.anisotropy,t),r.needsUpdate=!0);e.needsUpdate=!0}applyShadowQuality(){let e=this.shadowMapSize();for(let t of this.allLights())!I1(t)||!t.castShadow||(t.shadow.mapSize.set(e,e),t.shadow.bias=-12e-5,t.shadow.normalBias=.018,t.shadow.needsUpdate=!0);this.markShadowDirty(),this.markDirty()}updateShadowFraming(){if(!this.rootObject)return;let e=new vr().setFromObject(this.rootObject),t=e.getCenter(new ne),i=e.getSize(new ne),r=Math.max(i.x,i.y,i.z,1)*1.8;for(let s of this.allLights())if(!(!I1(s)||!s.castShadow)){if(s.shadow.mapSize.set(this.shadowMapSize(),this.shadowMapSize()),s.shadow.bias=-12e-5,s.shadow.normalBias=.018,s instanceof No){let a=s.position.clone().sub(s.target.position);if(a.lengthSq()<.001&&a.set(4,7,5),s.target.position.copy(t),s.target.parent||this.scene.add(s.target),s.position.copy(t).add(a.normalize().multiplyScalar(r*2.4)),s.shadow.camera instanceof Oo){let o=s.shadow.camera;o.left=-r,o.right=r,o.top=r,o.bottom=-r,o.near=.1,o.far=r*5,o.updateProjectionMatrix()}}s.shadow.needsUpdate=!0}this.markShadowDirty()}shadowMapSize(){return this.quality==="low"?512:this.quality==="medium"?1024:2048}allLights(){return[...this.defaultLights,...this.configLights]}syncSceneHelpers(){this.sceneConfig.groundShadow?this.createGroundShadow():this.removeGroundShadow(),this.sceneConfig.grid?this.createGrid():this.removeGrid(),typeof this.sceneConfig.axis=="boolean"&&this.syncAxisHelper(this.sceneConfig.axis)}syncAxisHelper(e){this.axesHelper||(this.axesHelper=new ou(1.2),this.scene.add(this.axesHelper)),this.axesHelper.visible=e}createGroundShadow(){if(!this.rootObject||this.groundShadowMesh)return;let e=Au(this.rootObject),t=on(e),i=an(e),r=Math.max(i.x,i.z,1)*3,s=e.min.y-Math.max(r*.002,.002),a=new ci(new fh(r,r),new Up({color:0,opacity:Gte,transparent:!0}));a.name="ai3d-ground-shadow",a.rotation.x=-Math.PI/2,a.position.set(t.x,s,t.z),a.receiveShadow=!0,a.renderOrder=-1,this.scene.add(a),this.groundShadowMesh=a}removeGroundShadow(){if(this.groundShadowMesh){this.groundShadowMesh.removeFromParent(),this.groundShadowMesh.geometry.dispose();for(let e of ua(this.groundShadowMesh.material))e.dispose();this.groundShadowMesh=null}}createGrid(){if(!this.rootObject||this.gridHelper)return;let e=Au(this.rootObject),t=on(e),i=an(e),r=Math.max(i.x,i.z,1)*2,s=new Yp(r,20,7305093,3423046);s.name="ai3d-grid",s.position.set(t.x,e.min.y-Math.max(r*.003,.003),t.z);for(let a of ua(s.material))a.transparent=!0,a.opacity=.42;this.scene.add(s),this.gridHelper=s}removeGrid(){if(this.gridHelper){this.gridHelper.removeFromParent(),this.gridHelper.geometry.dispose();for(let e of ua(this.gridHelper.material))e.dispose();this.gridHelper=null}}dispatchPick(e){var a,o,l;if(!this.rootObject||(a=this.disassembly)!=null&&a.isEnabled())return;let t=this.renderer.domElement.getBoundingClientRect();this.pointer.x=(e.clientX-t.left)/t.width*2-1,this.pointer.y=-((e.clientY-t.top)/t.height)*2+1,this.raycaster.setFromCamera(this.pointer,this.camera);let i=this.raycaster.intersectObjects(this.getRenderableMeshes(this.rootObject),!1)[0],r=(i==null?void 0:i.object)instanceof ci?i.object:null,s={mesh:r,pickedPoint:(l=(o=i==null?void 0:i.point)==null?void 0:o.clone())!=null?l:null,screenX:e.clientX,screenY:e.clientY};this._lastPickResult=s,this.focusSelectionEnabled&&r?(this.clearSelectionHighlight(),this.focusedMesh!==r&&this.setFocusedMesh(r)):this.focusSelectionEnabled?this.clearSelectionHighlight():this.updateSelectionHighlight(r),this._onPickCallbacks.forEach(c=>c(s))}clearLoadedModel(e="model-switch"){var t,i;if((t=this.disassembly)==null||t.dispose(),this.disassembly=null,this.disassemblySetup=!1,this.invalidateMeshCache(),this.markDirty(),this.clearFocusedMesh(),this.clearSelectionHighlight(),(i=this.bboxHelper)==null||i.removeFromParent(),this.bboxHelper=null,this.bboxEnabled=!1,this.removeGroundShadow(),this.removeGrid(),this.mixer=null,this.animationPlaying=!1,!this.rootObject){this.lastDisposalAudit={reason:e,meshCount:0,geometryCount:0,materialCount:0,textureCount:0,objectCount:0,timestamp:performance.now()};return}this.scene.remove(this.rootObject),this.lastDisposalAudit=this.disposeObjectGraph(this.rootObject,e),this.rootObject=null,this.markShadowDirty()}disposeObjectGraph(e,t){let i=new Set,r=new Set,s=new Set,a=0,o=0;return e.traverse(l=>{if(o++,!Tu(l))return;a++;let c=l.geometry;c&&!i.has(c.uuid)&&(c.dispose(),i.add(c.uuid));for(let f of ua(l.material))this.disposeMaterialWithTextures(f,r,s)}),{reason:t,meshCount:a,geometryCount:i.size,materialCount:r.size,textureCount:s.size,objectCount:o,timestamp:performance.now()}}disposeMaterialWithTextures(e,t,i){let r=e;for(let s of Object.values(r))if(s instanceof Rr&&!i.has(s.uuid))s.dispose(),i.add(s.uuid);else if(Array.isArray(s))for(let a of s)a instanceof Rr&&!i.has(a.uuid)&&(a.dispose(),i.add(a.uuid));t.has(e.uuid)||(e.dispose(),t.add(e.uuid))}fitCameraToObject(e){let t=Au(e),i=p1(t);this.initialTarget.set(i.target.x,i.target.y,i.target.z),this.initialPosition.set(i.position.x,i.position.y,i.position.z),this.initialFov=45;let r=an(t),s=Math.max(r.x,r.y,r.z,1),a=this.initialPosition.distanceTo(this.initialTarget);this.controls.minDistance=Math.max(i.near*4,s*.02,.001),this.controls.maxDistance=Math.max(a*8,this.controls.minDistance*10),this.resetView(),this.camera.near=i.near,this.camera.far=i.far,this.camera.updateProjectionMatrix(),this.markDirty()}getAnnotationCameraStateKey(){return[this.camera.position.x.toFixed(3),this.camera.position.y.toFixed(3),this.camera.position.z.toFixed(3),this.controls.target.x.toFixed(2),this.controls.target.y.toFixed(2),this.controls.target.z.toFixed(2),this.camera.fov.toFixed(2)].join("_")}projectAnnotationWorldPoint(e,t){let i=this.renderer.domElement;return!i.isConnected||i.clientWidth===0||i.clientHeight===0||(this.scene.updateMatrixWorld(),this.camera.updateMatrixWorld(),this.annotationProjection.set(e.x,e.y,e.z).project(this.camera),!Number.isFinite(this.annotationProjection.x)||!Number.isFinite(this.annotationProjection.y)||!Number.isFinite(this.annotationProjection.z))?!1:(t.screenX=(this.annotationProjection.x+1)/2*i.clientWidth,t.screenY=(1-this.annotationProjection.y)/2*i.clientHeight,t.depth=(this.annotationProjection.z+1)/2,!0)}isAnnotationWorldPointOccluded(e){if(!this.rootObject)return!1;let t=yc(Ht(this.camera.position),e);if(!t)return!1;this.rootObject.updateWorldMatrix(!0,!0),this.annotationDirection.set(t.direction.x,t.direction.y,t.direction.z),this.occlusionRaycaster.set(this.camera.position,this.annotationDirection),this.occlusionRaycaster.far=t.distance;let i=this.occlusionRaycaster.intersectObjects(this.getRenderableMeshes(this.rootObject),!1)[0];return!!i&&Cc(i.distance,t.distance,t.epsilon)}getRenderableMeshes(e){if(this.cachedMeshes&&this.cachedMeshRoot===e)return this.cachedMeshes;let t=[];return e.traverse(i=>{Tu(i)&&i.geometry&&t.push(i)}),this.cachedMeshes=t,this.cachedMeshRoot=e,t}invalidateMeshCache(){this.cachedMeshes=null,this.cachedMeshRoot=null}ensureBoundingBoxHelper(){var e;this.rootObject&&((e=this.bboxHelper)==null||e.removeFromParent(),this.bboxHelper=new Il(this.rootObject,16436245),this.scene.add(this.bboxHelper))}updateSelectionHighlight(e){var t;if(!this.rootObject||!e){this.clearSelectionHighlight();return}this.highlightedMesh===e&&this.selectionHelper||((t=this.selectionHelper)==null||t.removeFromParent(),this.selectionHelper=new Il(e,4890367),this.scene.add(this.selectionHelper),this.highlightedMesh=e,this.markDirty())}setFocusedMesh(e){var i,r,s;if(!this.rootObject||!e){this.clearFocusedMesh();return}if(this.focusedMesh===e)return;let t=this.getRenderableMeshes(this.rootObject);if(!t.includes(e)){this.clearFocusedMesh();return}this.restoreFocusedMaterials(),this.disposeFocusDimMaterials();for(let a of t){if(this.originalMaterials.has(a.id)||this.originalMaterials.set(a.id,a.material),a===e){a.material=(i=this.originalMaterials.get(a.id))!=null?i:a.material;continue}let o=(r=this.originalMaterials.get(a.id))!=null?r:a.material,l=tie(o);this.focusDimMaterials.set(a.id,l),a.material=l}(s=this.focusHelper)==null||s.removeFromParent(),this.focusHelper=new Il(e,3065087),this.scene.add(this.focusHelper),this.focusedMesh=e,this.markDirty()}clearFocusedMesh(){var e;this.restoreFocusedMaterials(),this.disposeFocusDimMaterials(),this.originalMaterials.clear(),(e=this.focusHelper)==null||e.removeFromParent(),this.focusHelper=null,this.focusedMesh=null,this.markDirty()}restoreFocusedMaterials(){if(this.rootObject)for(let e of this.getRenderableMeshes(this.rootObject)){let t=this.originalMaterials.get(e.id);t&&(e.material=t)}}disposeFocusDimMaterials(){for(let e of this.focusDimMaterials.values())iie(e);this.focusDimMaterials.clear()}clearSelectionHighlight(){var e;(e=this.selectionHelper)==null||e.removeFromParent(),this.selectionHelper=null,this.highlightedMesh=null,this.markDirty()}computePartSummary(e){e.updateWorldMatrix(!0,!1);let t=Au(e),i=PS(e,`mesh-${e.id}`);return Eh({name:i,triangleCount:MS(e),vertexCount:CS(e),materialName:yS(ua(e.material)[0]),boundingSize:an(t),center:on(t),source:"mesh",meshNames:[i],childCount:1})}computeGroupedPartSummaries(e,t){let i=new Set(t),r=[],s=new Set;return e.updateWorldMatrix(!0,!0),e.traverse(a=>{if(a===e||Tu(a)||!a.name.trim())return;let o=[];if(a.traverse(d=>{Tu(d)&&i.has(d)&&o.push(d)}),o.length<2||o.length===t.length)return;for(let d of o)s.add(d);let l=new vr;for(let d of o)d.updateWorldMatrix(!0,!1),l.union(new vr().setFromObject(d));let c=new Set,f=0,h=0;for(let d of o){f+=MS(d),h+=CS(d);for(let u of ua(d.material)){let m=yS(u);m&&c.add(m)}}r.push(Eh({name:PS(a,`group-${a.id}`),triangleCount:f,vertexCount:h,materialName:c.size===0?null:c.size===1?Array.from(c)[0]:`${c.size} materials`,boundingSize:an({min:Ht(l.min),max:Ht(l.max)}),center:on({min:Ht(l.min),max:Ht(l.max)}),source:"group",meshNames:o.map(d=>PS(d,`mesh-${d.id}`)),childCount:o.length}))}),{parts:r,groupedMeshes:s}}computeSummary(e){let t=this.getRenderableMeshes(e);return pS({rootName:e.name||"__root__",boundingSize:an(Au(e)),meshes:t.map(i=>({triangleCount:MS(i),vertexCount:CS(i),materialKeys:ua(i.material).map(r=>r.uuid)})),resourceWarnings:this.resourceWarnings})}}});var nie,PI,DI,te,hi=C(()=>{nie=typeof WeakRef!="undefined",PI=class{constructor(e,t=!1,i,r){this.initialize(e,t,i,r)}initialize(e,t=!1,i,r){return this.mask=e,this.skipNextObservers=t,this.target=i,this.currentTarget=r,this}},DI=class{constructor(e,t,i=null){this.callback=e,this.mask=t,this.scope=i,this._willBeUnregistered=!1,this.unregisterOnNextCall=!1,this._remove=null}remove(e=!1){this._remove&&this._remove(e)}},te=class n{static FromPromise(e,t){let i=new n;return e.then(r=>{i.notifyObservers(r)}).catch(r=>{if(t)t.notifyObservers(r);else throw r}),i}get observers(){return this._observers}constructor(e,t=!1){this.notifyIfTriggered=t,this._observers=new Array,this._numObserversMarkedAsDeleted=0,this._hasNotified=!1,this._eventState=new PI(0),e&&(this._onObserverAdded=e)}add(e,t=-1,i=!1,r=null,s=!1){if(!e)return null;let a=new DI(e,t,r);a.unregisterOnNextCall=s,i?this._observers.unshift(a):this._observers.push(a),this._onObserverAdded&&this._onObserverAdded(a),this._hasNotified&&this.notifyIfTriggered&&this._lastNotifiedValue!==void 0&&this.notifyObserver(a,this._lastNotifiedValue);let o=nie?new WeakRef(this):{deref:()=>this};return a._remove=(l=!1)=>{let c=o.deref();c&&(l?c.remove(a):c._remove(a))},a}addOnce(e){return this.add(e,void 0,void 0,void 0,!0)}remove(e){return e?(e._remove=null,this._observers.indexOf(e)!==-1?(this._deferUnregister(e),!0):!1):!1}removeCallback(e,t){for(let i=0;i{this._remove(e)},0))}_remove(e,t=!0){if(!e)return!1;let i=this._observers.indexOf(e);return i!==-1?(t&&this._numObserversMarkedAsDeleted--,this._observers.splice(i,1),!0):!1}makeObserverTopPriority(e){this._remove(e,!1),this._observers.unshift(e)}makeObserverBottomPriority(e){this._remove(e,!1),this._observers.push(e)}notifyObservers(e,t=-1,i,r,s){if(this.notifyIfTriggered&&(this._hasNotified=!0,this._lastNotifiedValue=e),!this._observers.length)return!0;let a=this._eventState;a.mask=t,a.target=i,a.currentTarget=r,a.skipNextObservers=!1,a.lastReturnValue=e,a.userInfo=s;for(let o of this._observers)if(!o._willBeUnregistered&&(o.mask&t&&(o.unregisterOnNextCall&&this._deferUnregister(o),o.scope?a.lastReturnValue=o.callback.apply(o.scope,[e,a]):a.lastReturnValue=o.callback(e,a)),a.skipNextObservers))return!1;return!0}notifyObserver(e,t,i=-1){if(this.notifyIfTriggered&&(this._hasNotified=!0,this._lastNotifiedValue=t),e._willBeUnregistered)return;let r=this._eventState;r.mask=i,r.skipNextObservers=!1,e.unregisterOnNextCall&&this._deferUnregister(e),e.callback(t,r)}hasObservers(){return this._observers.length-this._numObserversMarkedAsDeleted>0}clear(){for(;this._observers.length;){let e=this._observers.pop();e&&(e._remove=null)}this._onObserverAdded=null,this._numObserversMarkedAsDeleted=0,this.cleanLastNotifiedState()}cleanLastNotifiedState(){this._hasNotified=!1,this._lastNotifiedValue=void 0}clone(){let e=new n;return e._observers=this._observers.slice(0),e}hasSpecificMask(e=-1){for(let t of this._observers)if(t.mask&e||t.mask===e)return!0;return!1}}});var LS,P1=C(()=>{LS=class{get wrapU(){return this._cachedWrapU}set wrapU(e){this._cachedWrapU=e}get wrapV(){return this._cachedWrapV}set wrapV(e){this._cachedWrapV=e}get wrapR(){return this._cachedWrapR}set wrapR(e){this._cachedWrapR=e}get anisotropicFilteringLevel(){return this._cachedAnisotropicFilteringLevel}set anisotropicFilteringLevel(e){this._cachedAnisotropicFilteringLevel=e}get comparisonFunction(){return this._comparisonFunction}set comparisonFunction(e){this._comparisonFunction=e}get useMipMaps(){return this._useMipMaps}set useMipMaps(e){this._useMipMaps=e}constructor(){this.samplingMode=-1,this._useMipMaps=!0,this._cachedWrapU=null,this._cachedWrapV=null,this._cachedWrapR=null,this._cachedAnisotropicFilteringLevel=null,this._comparisonFunction=0}setParameters(e=1,t=1,i=1,r=1,s=2,a=0){return this._cachedWrapU=e,this._cachedWrapV=t,this._cachedWrapR=i,this._cachedAnisotropicFilteringLevel=r,this.samplingMode=s,this._comparisonFunction=a,this}compareSampler(e){return this._cachedWrapU===e._cachedWrapU&&this._cachedWrapV===e._cachedWrapV&&this._cachedWrapR===e._cachedWrapR&&this._cachedAnisotropicFilteringLevel===e._cachedAnisotropicFilteringLevel&&this.samplingMode===e.samplingMode&&this._comparisonFunction===e._comparisonFunction&&this._useMipMaps===e._useMipMaps}}});var D1,Fi,Ws=C(()=>{hi();P1();(function(n){n[n.Unknown=0]="Unknown",n[n.Url=1]="Url",n[n.Temp=2]="Temp",n[n.Raw=3]="Raw",n[n.Dynamic=4]="Dynamic",n[n.RenderTarget=5]="RenderTarget",n[n.MultiRenderTarget=6]="MultiRenderTarget",n[n.Cube=7]="Cube",n[n.CubeRaw=8]="CubeRaw",n[n.CubePrefiltered=9]="CubePrefiltered",n[n.Raw3D=10]="Raw3D",n[n.Raw2DArray=11]="Raw2DArray",n[n.DepthStencil=12]="DepthStencil",n[n.CubeRawRGBD=13]="CubeRawRGBD",n[n.Depth=14]="Depth"})(D1||(D1={}));Fi=class n extends LS{get useMipMaps(){return this._useMipMaps===null?this.generateMipMaps:this._useMipMaps}set useMipMaps(e){this._useMipMaps=e}get uniqueId(){return this._uniqueId}_setUniqueId(e){this._uniqueId=e}getEngine(){return this._engine}get source(){return this._source}constructor(e,t,i=!1){super(),this.isReady=!1,this.isCube=!1,this.is3D=!1,this.is2DArray=!1,this.isMultiview=!1,this.url="",this.generateMipMaps=!1,this._useMipMaps=null,this.mipLevelCount=1,this.samples=0,this.type=-1,this.format=-1,this.onLoadedObservable=new te,this.onErrorObservable=new te,this.onRebuildCallback=null,this.width=0,this.height=0,this.depth=0,this.baseWidth=0,this.baseHeight=0,this.baseDepth=0,this.invertY=!1,this._invertVScale=!1,this._associatedChannel=-1,this._source=0,this._buffer=null,this._bufferView=null,this._bufferViewArray=null,this._bufferViewArrayArray=null,this._size=0,this._extension="",this._files=null,this._workingCanvas=null,this._workingContext=null,this._cachedCoordinatesMode=null,this._isDisabled=!1,this._compression=null,this._sphericalPolynomial=null,this._sphericalPolynomialPromise=null,this._sphericalPolynomialComputed=!1,this._lodGenerationScale=0,this._lodGenerationOffset=0,this._useSRGBBuffer=!1,this._creationFlags=0,this._lodTextureHigh=null,this._lodTextureMid=null,this._lodTextureLow=null,this._isRGBD=!1,this._linearSpecularLOD=!1,this._irradianceTexture=null,this._hardwareTexture=null,this._maxLodLevel=null,this._references=1,this._gammaSpace=null,this._premulAlpha=!1,this._dynamicTextureSource=null,this._autoMSAAManagement=!1,this._engine=e,this._source=t,this._uniqueId=n._Counter++,i||(this._hardwareTexture=e._createHardwareTexture())}incrementReferences(){this._references++}updateSize(e,t,i=1){this._engine.updateTextureDimensions(this,e,t,i),this.width=e,this.height=t,this.depth=i,this.baseWidth=e,this.baseHeight=t,this.baseDepth=i,this._size=e*t*i}_rebuild(){var t,i;if(this.isReady=!1,this._cachedCoordinatesMode=null,this._cachedWrapU=null,this._cachedWrapV=null,this._cachedWrapR=null,this._cachedAnisotropicFilteringLevel=null,this.onRebuildCallback){let r=this.onRebuildCallback(this),s=a=>{a._swapAndDie(this,!1),this.isReady=r.isReady};r.isAsync?r.proxy.then(s):s(r.proxy);return}let e;switch(this.source){case 2:break;case 1:e=this._engine.createTexture((t=this._originalUrl)!=null?t:this.url,!this.generateMipMaps,this.invertY,null,this.samplingMode,r=>{r._swapAndDie(this,!1),this.isReady=!0},null,this._buffer,void 0,this.format,this._extension,void 0,void 0,void 0,this._useSRGBBuffer);return;case 3:if(e=this._engine.createRawTexture(this._bufferView,this.baseWidth,this.baseHeight,this.format,this.generateMipMaps,this.invertY,this.samplingMode,this._compression,this.type,this._creationFlags,this._useSRGBBuffer,this.mipLevelCount),e._swapAndDie(this,!1),this._bufferViewArray)for(let r=0;r{e._swapAndDie(this,!1),this.isReady=!0},null,this.format,this._extension,!1,0,0,null,void 0,this._useSRGBBuffer,ArrayBuffer.isView(this._buffer)?this._buffer:null);return;case 8:e=this._engine.createRawCubeTexture(this._bufferViewArray,this.width,(i=this._originalFormat)!=null?i:this.format,this.type,this.generateMipMaps,this.invertY,this.samplingMode,this._compression),e._swapAndDie(this,!1),this.isReady=!0;break;case 13:return;case 9:e=this._engine.createPrefilteredCubeTexture(this.url,null,this._lodGenerationScale,this._lodGenerationOffset,r=>{r&&r._swapAndDie(this,!1),this.isReady=!0},null,this.format,this._extension),e._sphericalPolynomial=this._sphericalPolynomial;return;case 12:case 14:break}}_swapAndDie(e,t=!0){var s;(s=this._hardwareTexture)==null||s.setUsage(e._source,this.generateMipMaps,this.is2DArray,this.isCube,this.is3D,this.width,this.height,this.depth),e._hardwareTexture=this._hardwareTexture,t&&(e._isRGBD=this._isRGBD),this._lodTextureHigh&&(e._lodTextureHigh&&e._lodTextureHigh.dispose(),e._lodTextureHigh=this._lodTextureHigh),this._lodTextureMid&&(e._lodTextureMid&&e._lodTextureMid.dispose(),e._lodTextureMid=this._lodTextureMid),this._lodTextureLow&&(e._lodTextureLow&&e._lodTextureLow.dispose(),e._lodTextureLow=this._lodTextureLow),this._irradianceTexture&&(e._irradianceTexture&&e._irradianceTexture.dispose(),e._irradianceTexture=this._irradianceTexture);let i=this._engine.getLoadedTexturesCache(),r=i.indexOf(this);r!==-1&&i.splice(r,1),r=i.indexOf(e),r===-1&&i.push(e)}dispose(){this._references--,this._references===0&&(this.onLoadedObservable.clear(),this.onErrorObservable.clear(),this._engine._releaseTexture(this),this._hardwareTexture=null,this._dynamicTextureSource=null)}};Fi._Counter=0});var Le,Pi=C(()=>{hi();Le=class{static get LastCreatedEngine(){return this.Instances.length===0?null:this.Instances[this.Instances.length-1]}static get LastCreatedScene(){return this._LastCreatedScene}};Le.Instances=[];Le.OnEnginesDisposedObservable=new te;Le._LastCreatedScene=null;Le.UseFallbackTexture=!0;Le.FallbackTexture=""});var J,Pt=C(()=>{J=class n{static _CheckLimit(e,t){let i=n._LogLimitOutputs[e];return i?i.current++:(i={limit:t,current:1},n._LogLimitOutputs[e]=i),i.current<=i.limit}static _GenerateLimitMessage(e,t=1){var s;let i=n._LogLimitOutputs[e];if(!i||!n.MessageLimitReached)return;let r=this._Levels[t];i.current===i.limit&&n[r.name](n.MessageLimitReached.replace(/%LIMIT%/g,""+i.limit).replace(/%TYPE%/g,(s=r.name)!=null?s:""))}static _AddLogEntry(e){n._LogCache=e+n._LogCache,n.OnNewCacheEntry&&n.OnNewCacheEntry(e)}static _FormatMessage(e){let t=r=>r<10?"0"+r:""+r,i=new Date;return"["+t(i.getHours())+":"+t(i.getMinutes())+":"+t(i.getSeconds())+"]: "+e}static _LogDisabled(e,t){}static _LogEnabled(e=1,t,i){let r=Array.isArray(t)?t[0]:t;if(i!==void 0&&!n._CheckLimit(r,i))return;let s=n._FormatMessage(r),a=this._Levels[e],o=Array.isArray(t)?t.slice(1):[];a.logFunc&&a.logFunc("BJS - "+s,...o);let l=`
${s}

`;n._AddLogEntry(l),n._GenerateLimitMessage(r,e)}static get LogCache(){return n._LogCache}static ClearLogCache(){n._LogCache="",n._LogLimitOutputs={},n.errorsCount=0}static set LogLevels(e){n.Log=n._LogDisabled,n.Warn=n._LogDisabled,n.Error=n._LogDisabled;let t=[n.MessageLogLevel,n.WarningLogLevel,n.ErrorLogLevel];for(let i of t)if((e&i)===i){let r=this._Levels[i];n[r.name]=n._LogEnabled.bind(n,i)}}};J.NoneLogLevel=0;J.MessageLogLevel=1;J.WarningLogLevel=2;J.ErrorLogLevel=4;J.AllLogLevel=7;J.MessageLimitReached="Too many %TYPE%s (%LIMIT%), no more %TYPE%s will be reported for this message.";J._LogCache="";J._LogLimitOutputs={};J._Levels=[{},{color:"white",logFunc:console.log,name:"Log"},{color:"orange",logFunc:console.warn,name:"Warn"},{},{color:"red",logFunc:console.error,name:"Error"}];J.errorsCount=0;J.Log=J._LogEnabled.bind(J,J.MessageLogLevel);J.Warn=J._LogEnabled.bind(J,J.WarningLogLevel);J.Error=J._LogEnabled.bind(J,J.ErrorLogLevel)});var T,G=C(()=>{T=class n{static GetShadersRepository(e=0){return e===0?n.ShadersRepository:n.ShadersRepositoryWGSL}static GetShadersStore(e=0){return e===0?n.ShadersStore:n.ShadersStoreWGSL}static GetIncludesShadersStore(e=0){return e===0?n.IncludesShadersStore:n.IncludesShadersStoreWGSL}};T.ShadersRepository="src/Shaders/";T.ShadersStore={};T.IncludesShadersStore={};T.ShadersRepositoryWGSL="src/ShadersWGSL/";T.ShadersStoreWGSL={};T.IncludesShadersStoreWGSL={}});function ar(){return typeof window!="undefined"}function yl(){return typeof navigator!="undefined"}function Qc(){return typeof document!="undefined"}function OS(n){let e="",t=n.firstChild;for(;t;)t.nodeType===3&&(e+=t.textContent),t=t.nextSibling;return e}var ma=C(()=>{});var NS,L1=C(()=>{NS=class{constructor(){this._valueCache={},this.vertexCompilationError=null,this.fragmentCompilationError=null,this.programLinkError=null,this.programValidationError=null,this._isDisposed=!1}get isAsync(){return this.isParallelCompiled}get isReady(){return this.program?this.isParallelCompiled?this.engine._isRenderingStateCompiled(this):!0:!1}_handlesSpectorRebuildCallback(e){e&&this.program&&e(this.program)}setEngine(e){this.engine=e}_fillEffectInformation(e,t,i,r,s,a,o,l){let c=this.engine;if(c.supportsUniformBuffers)for(let d in t)e.bindUniformBlock(d,t[d]);this.engine.getUniforms(this,i).forEach((d,u)=>{r[i[u]]=d}),this._uniforms=r;let h;for(h=0;h{a[d]=u});for(let d of c.getAttributes(this,o))l.push(d)}dispose(){this._uniforms={},this._isDisposed=!0}_cacheMatrix(e,t){let i=this._valueCache[e],r=t.updateFlag;return i!==void 0&&i===r?!1:(this._valueCache[e]=r,!0)}_cacheFloat2(e,t,i){let r=this._valueCache[e];if(!r||r.length!==2)return r=[t,i],this._valueCache[e]=r,!0;let s=!1;return r[0]!==t&&(r[0]=t,s=!0),r[1]!==i&&(r[1]=i,s=!0),s}_cacheFloat3(e,t,i,r){let s=this._valueCache[e];if(!s||s.length!==3)return s=[t,i,r],this._valueCache[e]=s,!0;let a=!1;return s[0]!==t&&(s[0]=t,a=!0),s[1]!==i&&(s[1]=i,a=!0),s[2]!==r&&(s[2]=r,a=!0),a}_cacheFloat4(e,t,i,r,s){let a=this._valueCache[e];if(!a||a.length!==4)return a=[t,i,r,s],this._valueCache[e]=a,!0;let o=!1;return a[0]!==t&&(a[0]=t,o=!0),a[1]!==i&&(a[1]=i,o=!0),a[2]!==r&&(a[2]=r,o=!0),a[3]!==s&&(a[3]=s,o=!0),o}setInt(e,t){let i=this._valueCache[e];i!==void 0&&i===t||this.engine.setInt(this._uniforms[e],t)&&(this._valueCache[e]=t)}setInt2(e,t,i){this._cacheFloat2(e,t,i)&&(this.engine.setInt2(this._uniforms[e],t,i)||(this._valueCache[e]=null))}setInt3(e,t,i,r){this._cacheFloat3(e,t,i,r)&&(this.engine.setInt3(this._uniforms[e],t,i,r)||(this._valueCache[e]=null))}setInt4(e,t,i,r,s){this._cacheFloat4(e,t,i,r,s)&&(this.engine.setInt4(this._uniforms[e],t,i,r,s)||(this._valueCache[e]=null))}setIntArray(e,t){this._valueCache[e]=null,this.engine.setIntArray(this._uniforms[e],t)}setIntArray2(e,t){this._valueCache[e]=null,this.engine.setIntArray2(this._uniforms[e],t)}setIntArray3(e,t){this._valueCache[e]=null,this.engine.setIntArray3(this._uniforms[e],t)}setIntArray4(e,t){this._valueCache[e]=null,this.engine.setIntArray4(this._uniforms[e],t)}setUInt(e,t){let i=this._valueCache[e];i!==void 0&&i===t||this.engine.setUInt(this._uniforms[e],t)&&(this._valueCache[e]=t)}setUInt2(e,t,i){this._cacheFloat2(e,t,i)&&(this.engine.setUInt2(this._uniforms[e],t,i)||(this._valueCache[e]=null))}setUInt3(e,t,i,r){this._cacheFloat3(e,t,i,r)&&(this.engine.setUInt3(this._uniforms[e],t,i,r)||(this._valueCache[e]=null))}setUInt4(e,t,i,r,s){this._cacheFloat4(e,t,i,r,s)&&(this.engine.setUInt4(this._uniforms[e],t,i,r,s)||(this._valueCache[e]=null))}setUIntArray(e,t){this._valueCache[e]=null,this.engine.setUIntArray(this._uniforms[e],t)}setUIntArray2(e,t){this._valueCache[e]=null,this.engine.setUIntArray2(this._uniforms[e],t)}setUIntArray3(e,t){this._valueCache[e]=null,this.engine.setUIntArray3(this._uniforms[e],t)}setUIntArray4(e,t){this._valueCache[e]=null,this.engine.setUIntArray4(this._uniforms[e],t)}setArray(e,t){this._valueCache[e]=null,this.engine.setArray(this._uniforms[e],t)}setArray2(e,t){this._valueCache[e]=null,this.engine.setArray2(this._uniforms[e],t)}setArray3(e,t){this._valueCache[e]=null,this.engine.setArray3(this._uniforms[e],t)}setArray4(e,t){this._valueCache[e]=null,this.engine.setArray4(this._uniforms[e],t)}setMatrices(e,t){t&&(this._valueCache[e]=null,this.engine.setMatrices(this._uniforms[e],t))}setMatrix(e,t){this._cacheMatrix(e,t)&&(this.engine.setMatrices(this._uniforms[e],t.asArray())||(this._valueCache[e]=null))}setMatrix3x3(e,t){this._valueCache[e]=null,this.engine.setMatrix3x3(this._uniforms[e],t)}setMatrix2x2(e,t){this._valueCache[e]=null,this.engine.setMatrix2x2(this._uniforms[e],t)}setFloat(e,t){let i=this._valueCache[e];i!==void 0&&i===t||this.engine.setFloat(this._uniforms[e],t)&&(this._valueCache[e]=t)}setVector2(e,t){this._cacheFloat2(e,t.x,t.y)&&(this.engine.setFloat2(this._uniforms[e],t.x,t.y)||(this._valueCache[e]=null))}setFloat2(e,t,i){this._cacheFloat2(e,t,i)&&(this.engine.setFloat2(this._uniforms[e],t,i)||(this._valueCache[e]=null))}setVector3(e,t){this._cacheFloat3(e,t.x,t.y,t.z)&&(this.engine.setFloat3(this._uniforms[e],t.x,t.y,t.z)||(this._valueCache[e]=null))}setFloat3(e,t,i,r){this._cacheFloat3(e,t,i,r)&&(this.engine.setFloat3(this._uniforms[e],t,i,r)||(this._valueCache[e]=null))}setVector4(e,t){this._cacheFloat4(e,t.x,t.y,t.z,t.w)&&(this.engine.setFloat4(this._uniforms[e],t.x,t.y,t.z,t.w)||(this._valueCache[e]=null))}setQuaternion(e,t){this._cacheFloat4(e,t.x,t.y,t.z,t.w)&&(this.engine.setFloat4(this._uniforms[e],t.x,t.y,t.z,t.w)||(this._valueCache[e]=null))}setFloat4(e,t,i,r,s){this._cacheFloat4(e,t,i,r,s)&&(this.engine.setFloat4(this._uniforms[e],t,i,r,s)||(this._valueCache[e]=null))}setColor3(e,t){this._cacheFloat3(e,t.r,t.g,t.b)&&(this.engine.setFloat3(this._uniforms[e],t.r,t.g,t.b)||(this._valueCache[e]=null))}setColor4(e,t,i){this._cacheFloat4(e,t.r,t.g,t.b,i)&&(this.engine.setFloat4(this._uniforms[e],t.r,t.g,t.b,i)||(this._valueCache[e]=null))}setDirectColor4(e,t){this._cacheFloat4(e,t.r,t.g,t.b,t.a)&&(this.engine.setFloat4(this._uniforms[e],t.r,t.g,t.b,t.a)||(this._valueCache[e]=null))}_getVertexShaderCode(){return this.vertexShader?this.engine._getShaderSource(this.vertexShader):null}_getFragmentShaderCode(){return this.fragmentShader?this.engine._getShaderSource(this.fragmentShader):null}}});function Xe(n,e=!1){if(!(e&&O1[n]))return O1[n]=!0,`${n} needs to be imported before as it contains a side-effect required by your code.`}var O1,ln=C(()=>{O1={}});function wS(n,e,t=""){return t+(e?e+` +`:"")+n}function FS(n,e,t,i,r,s,a){let o=a||xu.loadFile;if(o)return o(n,e,t,i,r,s);throw Xe("FileTools")}function BS(n,e,t,i){if(n){e?n.IS_NDC_HALF_ZRANGE="":delete n.IS_NDC_HALF_ZRANGE,t?n.USE_REVERSE_DEPTHBUFFER="":delete n.USE_REVERSE_DEPTHBUFFER,i?n.USE_EXACT_SRGB_CONVERSIONS="":delete n.USE_EXACT_SRGB_CONVERSIONS;return}else{let r="";return e&&(r+="#define IS_NDC_HALF_ZRANGE"),t&&(r&&(r+=` `),r+="#define USE_REVERSE_DEPTHBUFFER"),i&&(r&&(r+=` -`),r+="#define USE_EXACT_SRGB_CONVERSIONS"),r}}function x1(n,e,t=!1,i){switch(n){case 3:{let s=new Int8Array(e);return i&&s.set(new Int8Array(i)),s}case 0:{let s=new Uint8Array(e);return i&&s.set(new Uint8Array(i)),s}case 4:{let s=typeof e!="number"?new Int16Array(e):new Int16Array(t?e/2:e);return i&&s.set(new Int16Array(i)),s}case 5:case 8:case 9:case 10:case 2:{let s=typeof e!="number"?new Uint16Array(e):new Uint16Array(t?e/2:e);return i&&s.set(new Uint16Array(i)),s}case 6:{let s=typeof e!="number"?new Int32Array(e):new Int32Array(t?e/4:e);return i&&s.set(new Int32Array(i)),s}case 7:case 11:case 12:case 13:case 14:case 15:{let s=typeof e!="number"?new Uint32Array(e):new Uint32Array(t?e/4:e);return i&&s.set(new Uint32Array(i)),s}case 1:{let s=typeof e!="number"?new Float32Array(e):new Float32Array(t?e/4:e);return i&&s.set(new Float32Array(i)),s}}let r=new Uint8Array(e);return i&&r.set(new Uint8Array(i)),r}var Eu,qc=C(()=>{an();fa();Eu={}});function Tn(n){let e=A0.get(n);if(!e){if(!n)return Bte;e={_webGLVersion:n.TEXTURE_BINDING_3D?2:1,_context:n,parallelShaderCompile:n.getExtension("KHR_parallel_shader_compile")||void 0,cachedPipelines:{}},A0.set(n,e)}return e}function CS(n){A0.delete(n)}function R0(n,e,t,i,r,s){var c;let a=Tn(i);s||(s=(c=a._createShaderProgramInjection)!=null?c:yS);let o=x0(e,"vertex",i,a._contextWasLost),l=x0(t,"fragment",i,a._contextWasLost);return s(n,o,l,i,r,a.validateShaderPrograms)}function b0(n,e,t,i,r,s=null,a){var h;let o=Tn(r);a||(a=(h=o._createShaderProgramInjection)!=null?h:yS);let l=o._webGLVersion>1?`#version 300 es +`),r+="#define USE_EXACT_SRGB_CONVERSIONS"),r}}function N1(n,e,t=!1,i){switch(n){case 3:{let s=new Int8Array(e);return i&&s.set(new Int8Array(i)),s}case 0:{let s=new Uint8Array(e);return i&&s.set(new Uint8Array(i)),s}case 4:{let s=typeof e!="number"?new Int16Array(e):new Int16Array(t?e/2:e);return i&&s.set(new Int16Array(i)),s}case 5:case 8:case 9:case 10:case 2:{let s=typeof e!="number"?new Uint16Array(e):new Uint16Array(t?e/2:e);return i&&s.set(new Uint16Array(i)),s}case 6:{let s=typeof e!="number"?new Int32Array(e):new Int32Array(t?e/4:e);return i&&s.set(new Int32Array(i)),s}case 7:case 11:case 12:case 13:case 14:case 15:{let s=typeof e!="number"?new Uint32Array(e):new Uint32Array(t?e/4:e);return i&&s.set(new Uint32Array(i)),s}case 1:{let s=typeof e!="number"?new Float32Array(e):new Float32Array(t?e/4:e);return i&&s.set(new Float32Array(i)),s}}let r=new Uint8Array(e);return i&&r.set(new Uint8Array(i)),r}var xu,$c=C(()=>{ln();ma();xu={}});function Tn(n){let e=LI.get(n);if(!e){if(!n)return sie;e={_webGLVersion:n.TEXTURE_BINDING_3D?2:1,_context:n,parallelShaderCompile:n.getExtension("KHR_parallel_shader_compile")||void 0,cachedPipelines:{}},LI.set(n,e)}return e}function US(n){LI.delete(n)}function NI(n,e,t,i,r,s){var c;let a=Tn(i);s||(s=(c=a._createShaderProgramInjection)!=null?c:VS);let o=OI(e,"vertex",i,a._contextWasLost),l=OI(t,"fragment",i,a._contextWasLost);return s(n,o,l,i,r,a.validateShaderPrograms)}function wI(n,e,t,i,r,s=null,a){var h;let o=Tn(r);a||(a=(h=o._createShaderProgramInjection)!=null?h:VS);let l=o._webGLVersion>1?`#version 300 es #define WEBGL2 -`:"",c=R1(e,"vertex",i,l,r,o._contextWasLost),f=R1(t,"fragment",i,l,r,o._contextWasLost);return a(n,c,f,r,s,o.validateShaderPrograms)}function b1(n,e){let t=new RS,i=Tn(n);return i.parallelShaderCompile&&!i.disableParallelShaderCompile&&(t.isParallelCompiled=!0),t.context=i._context,t}function yS(n,e,t,i,r=null,s){let a=i.createProgram();if(n.program=a,!a)throw new Error("Unable to create program");return i.attachShader(a,e),i.attachShader(a,t),i.linkProgram(a),n.context=i,n.vertexShader=e,n.fragmentShader=t,n.isParallelCompiled||PS(n,i,s),a}function I1(n,e,t){let i=n;if(i._isDisposed)return!1;let r=Tn(e);return r&&r.parallelShaderCompile&&r.parallelShaderCompile.COMPLETION_STATUS_KHR&&i.program&&e.getProgramParameter(i.program,r.parallelShaderCompile.COMPLETION_STATUS_KHR)?(PS(i,e,t),!0):!1}function PS(n,e,t){let i=n.context,r=n.vertexShader,s=n.fragmentShader,a=n.program;if(!i.getProgramParameter(a,i.LINK_STATUS)){if(!e.getShaderParameter(r,e.COMPILE_STATUS)){let c=e.getShaderInfoLog(r);if(c)throw n.vertexCompilationError=c,new Error("VERTEX SHADER "+c)}if(!e.getShaderParameter(s,e.COMPILE_STATUS)){let c=e.getShaderInfoLog(s);if(c)throw n.fragmentCompilationError=c,new Error("FRAGMENT SHADER "+c)}let l=i.getProgramInfoLog(a);if(l)throw n.programLinkError=l,new Error(l)}if(t&&(i.validateProgram(a),!i.getProgramParameter(a,i.VALIDATE_STATUS))){let c=i.getProgramInfoLog(a);if(c)throw n.programValidationError=c,new Error(c)}i.deleteShader(r),i.deleteShader(s),n.vertexShader=void 0,n.fragmentShader=void 0,n.onCompiled&&(n.onCompiled(),n.onCompiled=void 0)}function M1(n,e,t,i,r,s,a,o,l,c="",f,h,d){var _,p;let u=Tn(n.context);h||(h=(_=u.createRawShaderProgramInjection)!=null?_:R0),d||(d=(p=u.createShaderProgramInjection)!=null?p:b0);let m=n;i?m.program=h(m,e,t,m.context,l):m.program=d(m,e,t,o,m.context,l),m.program.__SPECTOR_rebuildProgram=a,f()}function R1(n,e,t,i,r,s){return x0(bS(n,t,i),e,r,s)}function x0(n,e,t,i){let r=t.createShader(e==="vertex"?t.VERTEX_SHADER:t.FRAGMENT_SHADER);if(!r){let s=t.NO_ERROR,a;for(;(a=t.getError())!==t.NO_ERROR;)s=a;throw new Error(`Something went wrong while creating a gl ${e} shader object. gl error=${s}, gl isContextLost=${t.isContextLost()}, _contextWasLost=${i}`)}return t.shaderSource(r,n),t.compileShader(r),r}function C1(n,e){e.useProgram(n)}function y1(n,e){let t=n;if(!t.isParallelCompiled){e(n);return}let i=t.onCompiled;t.onCompiled=()=>{i==null||i(),e(n)}}var A0,Bte,I0=C(()=>{T1();qc();A0=new WeakMap,Bte={_webGLVersion:2,cachedPipelines:{}}});var Ute,Vte,Uo,DS=C(()=>{Ute="attribute",Vte="varying",Uo=class{constructor(){this.children=[]}isValid(e){return!0}process(e,t,i){var s,a,o,l,c,f,h;let r="";if(this.line){let d=this.line,u=t.processor;if(u){u.lineProcessor&&(d=u.lineProcessor(d,t.isFragment,t.processingContext));let m=(a=(s=t.processor)==null?void 0:s.attributeKeywordName)!=null?a:Ute,_=t.isFragment&&((o=t.processor)!=null&&o.varyingFragmentKeywordName)?(l=t.processor)==null?void 0:l.varyingFragmentKeywordName:!t.isFragment&&((c=t.processor)!=null&&c.varyingVertexKeywordName)?(f=t.processor)==null?void 0:f.varyingVertexKeywordName:Vte;!t.isFragment&&u.attributeProcessor&&this.line.startsWith(m)?d=u.attributeProcessor(this.line,e,t.processingContext):u.varyingProcessor&&((h=u.varyingCheck)!=null&&h.call(u,this.line,t.isFragment)||!u.varyingCheck&&this.line.startsWith(_))?d=u.varyingProcessor(this.line,t.isFragment,e,t.processingContext):u.uniformProcessor&&u.uniformRegexp&&u.uniformRegexp.test(this.line)?t.lookForClosingBracketForUniformBuffer||(d=u.uniformProcessor(this.line,t.isFragment,e,t.processingContext)):u.uniformBufferProcessor&&u.uniformBufferRegexp&&u.uniformBufferRegexp.test(this.line)?t.lookForClosingBracketForUniformBuffer||(d=u.uniformBufferProcessor(this.line,t.isFragment,t.processingContext),t.lookForClosingBracketForUniformBuffer=!0):u.textureProcessor&&u.textureRegexp&&u.textureRegexp.test(this.line)?d=u.textureProcessor(this.line,t.isFragment,e,t.processingContext):(u.uniformProcessor||u.uniformBufferProcessor)&&this.line.startsWith("uniform")&&!t.lookForClosingBracketForUniformBuffer&&(/uniform\s+(?:(?:highp)?|(?:lowp)?)\s*(\S+)\s+(\S+)\s*;/.test(this.line)?u.uniformProcessor&&(d=u.uniformProcessor(this.line,t.isFragment,e,t.processingContext)):u.uniformBufferProcessor&&(d=u.uniformBufferProcessor(this.line,t.isFragment,t.processingContext),t.lookForClosingBracketForUniformBuffer=!0)),t.lookForClosingBracketForUniformBuffer&&this.line.indexOf("}")!==-1&&(t.lookForClosingBracketForUniformBuffer=!1,u.endOfUniformBufferProcessor&&(d=u.endOfUniformBufferProcessor(this.line,t.isFragment,t.processingContext)))}r+=d+` -`}for(let d of this.children)r+=d.process(e,t,i);return this.additionalDefineKey&&(e[this.additionalDefineKey]=this.additionalDefineValue||"true",i[this.additionalDefineKey]=e[this.additionalDefineKey]),r}}});var LS,P1=C(()=>{LS=class{constructor(){this._lines=[]}get currentLine(){return this._lines[this.lineIndex]}get canRead(){return this.lineIndex1&&this._lines.push(i);else{let s=t.split(";");for(let a=0;a{DS();Su=class extends Uo{process(e,t,i){for(let r=0;r{DS();OS=class extends Uo{isValid(e){return this.testExpression.isTrue(e)}}});var hn,Tu=C(()=>{hn=class n{isTrue(e){return!0}static postfixToInfix(e){let t=[];for(let i of e)if(n._OperatorPriority[i]===void 0)t.push(i);else{let r=t[t.length-1],s=t[t.length-2];t.length-=2,t.push(`(${s}${i}${r})`)}return t[t.length-1]}static infixToPostfix(e){let t=n._InfixToPostfixCache.get(e);if(t)return t.accessTime=Date.now(),t.result;if(!e.includes("&&")&&!e.includes("||")&&!e.includes(")")&&!e.includes("("))return[e];let i=[],r=-1,s=()=>{f=f.trim(),f!==""&&(i.push(f),f="")},a=h=>{rn._Stack[r],l=()=>r===-1?"!!INVALID EXPRESSION!!":n._Stack[r--],c=0,f="";for(;c1){for(s();r!==-1&&n._OperatorPriority[o()]>=n._OperatorPriority[d];)i.push(l());a(d),c++}else f+=h;c++}for(s();r!==-1;)o()==="("?l():i.push(l());return n._InfixToPostfixCache.size>=n.InfixToPostfixCacheLimitSize&&n.ClearCache(),n._InfixToPostfixCache.set(e,{result:i,accessTime:Date.now()}),i}static ClearCache(){let e=Array.from(n._InfixToPostfixCache.entries()).sort((t,i)=>t[1].accessTime-i[1].accessTime);for(let t=0;t{Tu();Eh=class extends hn{constructor(e,t=!1){super(),this.define=e,this.not=t}isTrue(e){let t=e[this.define]!==void 0;return this.not&&(t=!t),t}}});var NS,N1=C(()=>{Tu();NS=class extends hn{isTrue(e){return this.leftOperand.isTrue(e)||this.rightOperand.isTrue(e)}}});var FS,F1=C(()=>{Tu();FS=class extends hn{isTrue(e){return this.leftOperand.isTrue(e)&&this.rightOperand.isTrue(e)}}});var wS,w1=C(()=>{Tu();wS=class extends hn{constructor(e,t,i){super(),this.define=e,this.operand=t,this.testValue=i}toString(){return`${this.define} ${this.operand} ${this.testValue}`}isTrue(e){let t=!1,i=parseInt(e[this.define]!=null?e[this.define]:this.define),r=parseInt(e[this.testValue]!=null?e[this.testValue]:this.testValue);if(isNaN(i)||isNaN(r))return!1;switch(this.operand){case">":t=i>r;break;case"<":t=i=":t=i>=r;break;case"==":t=i===r;break;case"!=":t=i!==r;break}return t}}});function V1(n){n.processor&&n.processor.initializeShaders&&n.processor.initializeShaders(n.processingContext)}function D0(n,e,t,i){var r;(r=e.processor)!=null&&r.preProcessShaderCode&&(n=e.processor.preProcessShaderCode(n,e.isFragment)),s_(n,e,s=>{e.processCodeAfterIncludes&&(s=e.processCodeAfterIncludes(e.isFragment?"fragment":"vertex",s,e.defines));let a=jte(s,e,i);t(a,s)})}function G1(n,e,t){return!t.processor||!t.processor.finalizeShaders?{vertexCode:n,fragmentCode:e}:t.processor.finalizeShaders(n,e,t.processingContext)}function zte(n,e){var i;if((i=e.processor)!=null&&i.noPrecision)return n;let t=e.shouldUseHighPrecisionShader;return n.indexOf("precision highp float")===-1?t?n=`precision highp float; +`:"",c=w1(e,"vertex",i,l,r,o._contextWasLost),f=w1(t,"fragment",i,l,r,o._contextWasLost);return a(n,c,f,r,s,o.validateShaderPrograms)}function F1(n,e){let t=new NS,i=Tn(n);return i.parallelShaderCompile&&!i.disableParallelShaderCompile&&(t.isParallelCompiled=!0),t.context=i._context,t}function VS(n,e,t,i,r=null,s){let a=i.createProgram();if(n.program=a,!a)throw new Error("Unable to create program");return i.attachShader(a,e),i.attachShader(a,t),i.linkProgram(a),n.context=i,n.vertexShader=e,n.fragmentShader=t,n.isParallelCompiled||GS(n,i,s),a}function B1(n,e,t){let i=n;if(i._isDisposed)return!1;let r=Tn(e);return r&&r.parallelShaderCompile&&r.parallelShaderCompile.COMPLETION_STATUS_KHR&&i.program&&e.getProgramParameter(i.program,r.parallelShaderCompile.COMPLETION_STATUS_KHR)?(GS(i,e,t),!0):!1}function GS(n,e,t){let i=n.context,r=n.vertexShader,s=n.fragmentShader,a=n.program;if(!i.getProgramParameter(a,i.LINK_STATUS)){if(!e.getShaderParameter(r,e.COMPILE_STATUS)){let c=e.getShaderInfoLog(r);if(c)throw n.vertexCompilationError=c,new Error("VERTEX SHADER "+c)}if(!e.getShaderParameter(s,e.COMPILE_STATUS)){let c=e.getShaderInfoLog(s);if(c)throw n.fragmentCompilationError=c,new Error("FRAGMENT SHADER "+c)}let l=i.getProgramInfoLog(a);if(l)throw n.programLinkError=l,new Error(l)}if(t&&(i.validateProgram(a),!i.getProgramParameter(a,i.VALIDATE_STATUS))){let c=i.getProgramInfoLog(a);if(c)throw n.programValidationError=c,new Error(c)}i.deleteShader(r),i.deleteShader(s),n.vertexShader=void 0,n.fragmentShader=void 0,n.onCompiled&&(n.onCompiled(),n.onCompiled=void 0)}function U1(n,e,t,i,r,s,a,o,l,c="",f,h,d){var _,p;let u=Tn(n.context);h||(h=(_=u.createRawShaderProgramInjection)!=null?_:NI),d||(d=(p=u.createShaderProgramInjection)!=null?p:wI);let m=n;i?m.program=h(m,e,t,m.context,l):m.program=d(m,e,t,o,m.context,l),m.program.__SPECTOR_rebuildProgram=a,f()}function w1(n,e,t,i,r,s){return OI(wS(n,t,i),e,r,s)}function OI(n,e,t,i){let r=t.createShader(e==="vertex"?t.VERTEX_SHADER:t.FRAGMENT_SHADER);if(!r){let s=t.NO_ERROR,a;for(;(a=t.getError())!==t.NO_ERROR;)s=a;throw new Error(`Something went wrong while creating a gl ${e} shader object. gl error=${s}, gl isContextLost=${t.isContextLost()}, _contextWasLost=${i}`)}return t.shaderSource(r,n),t.compileShader(r),r}function V1(n,e){e.useProgram(n)}function G1(n,e){let t=n;if(!t.isParallelCompiled){e(n);return}let i=t.onCompiled;t.onCompiled=()=>{i==null||i(),e(n)}}var LI,sie,FI=C(()=>{L1();$c();LI=new WeakMap,sie={_webGLVersion:2,cachedPipelines:{}}});var aie,oie,Go,kS=C(()=>{aie="attribute",oie="varying",Go=class{constructor(){this.children=[]}isValid(e){return!0}process(e,t,i){var s,a,o,l,c,f,h;let r="";if(this.line){let d=this.line,u=t.processor;if(u){u.lineProcessor&&(d=u.lineProcessor(d,t.isFragment,t.processingContext));let m=(a=(s=t.processor)==null?void 0:s.attributeKeywordName)!=null?a:aie,_=t.isFragment&&((o=t.processor)!=null&&o.varyingFragmentKeywordName)?(l=t.processor)==null?void 0:l.varyingFragmentKeywordName:!t.isFragment&&((c=t.processor)!=null&&c.varyingVertexKeywordName)?(f=t.processor)==null?void 0:f.varyingVertexKeywordName:oie;!t.isFragment&&u.attributeProcessor&&this.line.startsWith(m)?d=u.attributeProcessor(this.line,e,t.processingContext):u.varyingProcessor&&((h=u.varyingCheck)!=null&&h.call(u,this.line,t.isFragment)||!u.varyingCheck&&this.line.startsWith(_))?d=u.varyingProcessor(this.line,t.isFragment,e,t.processingContext):u.uniformProcessor&&u.uniformRegexp&&u.uniformRegexp.test(this.line)?t.lookForClosingBracketForUniformBuffer||(d=u.uniformProcessor(this.line,t.isFragment,e,t.processingContext)):u.uniformBufferProcessor&&u.uniformBufferRegexp&&u.uniformBufferRegexp.test(this.line)?t.lookForClosingBracketForUniformBuffer||(d=u.uniformBufferProcessor(this.line,t.isFragment,t.processingContext),t.lookForClosingBracketForUniformBuffer=!0):u.textureProcessor&&u.textureRegexp&&u.textureRegexp.test(this.line)?d=u.textureProcessor(this.line,t.isFragment,e,t.processingContext):(u.uniformProcessor||u.uniformBufferProcessor)&&this.line.startsWith("uniform")&&!t.lookForClosingBracketForUniformBuffer&&(/uniform\s+(?:(?:highp)?|(?:lowp)?)\s*(\S+)\s+(\S+)\s*;/.test(this.line)?u.uniformProcessor&&(d=u.uniformProcessor(this.line,t.isFragment,e,t.processingContext)):u.uniformBufferProcessor&&(d=u.uniformBufferProcessor(this.line,t.isFragment,t.processingContext),t.lookForClosingBracketForUniformBuffer=!0)),t.lookForClosingBracketForUniformBuffer&&this.line.indexOf("}")!==-1&&(t.lookForClosingBracketForUniformBuffer=!1,u.endOfUniformBufferProcessor&&(d=u.endOfUniformBufferProcessor(this.line,t.isFragment,t.processingContext)))}r+=d+` +`}for(let d of this.children)r+=d.process(e,t,i);return this.additionalDefineKey&&(e[this.additionalDefineKey]=this.additionalDefineValue||"true",i[this.additionalDefineKey]=e[this.additionalDefineKey]),r}}});var WS,k1=C(()=>{WS=class{constructor(){this._lines=[]}get currentLine(){return this._lines[this.lineIndex]}get canRead(){return this.lineIndex1&&this._lines.push(i);else{let s=t.split(";");for(let a=0;a{kS();Ru=class extends Go{process(e,t,i){for(let r=0;r{kS();HS=class extends Go{isValid(e){return this.testExpression.isTrue(e)}}});var un,bu=C(()=>{un=class n{isTrue(e){return!0}static postfixToInfix(e){let t=[];for(let i of e)if(n._OperatorPriority[i]===void 0)t.push(i);else{let r=t[t.length-1],s=t[t.length-2];t.length-=2,t.push(`(${s}${i}${r})`)}return t[t.length-1]}static infixToPostfix(e){let t=n._InfixToPostfixCache.get(e);if(t)return t.accessTime=Date.now(),t.result;if(!e.includes("&&")&&!e.includes("||")&&!e.includes(")")&&!e.includes("("))return[e];let i=[],r=-1,s=()=>{f=f.trim(),f!==""&&(i.push(f),f="")},a=h=>{rn._Stack[r],l=()=>r===-1?"!!INVALID EXPRESSION!!":n._Stack[r--],c=0,f="";for(;c1){for(s();r!==-1&&n._OperatorPriority[o()]>=n._OperatorPriority[d];)i.push(l());a(d),c++}else f+=h;c++}for(s();r!==-1;)o()==="("?l():i.push(l());return n._InfixToPostfixCache.size>=n.InfixToPostfixCacheLimitSize&&n.ClearCache(),n._InfixToPostfixCache.set(e,{result:i,accessTime:Date.now()}),i}static ClearCache(){let e=Array.from(n._InfixToPostfixCache.entries()).sort((t,i)=>t[1].accessTime-i[1].accessTime);for(let t=0;t{bu();Sh=class extends un{constructor(e,t=!1){super(),this.define=e,this.not=t}isTrue(e){let t=e[this.define]!==void 0;return this.not&&(t=!t),t}}});var zS,X1=C(()=>{bu();zS=class extends un{isTrue(e){return this.leftOperand.isTrue(e)||this.rightOperand.isTrue(e)}}});var XS,Y1=C(()=>{bu();XS=class extends un{isTrue(e){return this.leftOperand.isTrue(e)&&this.rightOperand.isTrue(e)}}});var YS,K1=C(()=>{bu();YS=class extends un{constructor(e,t,i){super(),this.define=e,this.operand=t,this.testValue=i}toString(){return`${this.define} ${this.operand} ${this.testValue}`}isTrue(e){let t=!1,i=parseInt(e[this.define]!=null?e[this.define]:this.define),r=parseInt(e[this.testValue]!=null?e[this.testValue]:this.testValue);if(isNaN(i)||isNaN(r))return!1;switch(this.operand){case">":t=i>r;break;case"<":t=i=":t=i>=r;break;case"==":t=i===r;break;case"!=":t=i!==r;break}return t}}});function Z1(n){n.processor&&n.processor.initializeShaders&&n.processor.initializeShaders(n.processingContext)}function kI(n,e,t,i){var r;(r=e.processor)!=null&&r.preProcessShaderCode&&(n=e.processor.preProcessShaderCode(n,e.isFragment)),u_(n,e,s=>{e.processCodeAfterIncludes&&(s=e.processCodeAfterIncludes(e.isFragment?"fragment":"vertex",s,e.defines));let a=_ie(s,e,i);t(a,s)})}function Q1(n,e,t){return!t.processor||!t.processor.finalizeShaders?{vertexCode:n,fragmentCode:e}:t.processor.finalizeShaders(n,e,t.processingContext)}function die(n,e){var i;if((i=e.processor)!=null&&i.noPrecision)return n;let t=e.shouldUseHighPrecisionShader;return n.indexOf("precision highp float")===-1?t?n=`precision highp float; `+n:n=`precision mediump float; -`+n:t||(n=n.replace("precision highp float","precision mediump float")),n}function C0(n){let t=/defined\((.+)\)/.exec(n);if(t&&t.length)return new Eh(t[1].trim(),n[0]==="!");let i=["==","!=",">=","<=","<",">"],r="",s=0;for(r of i)if(s=n.indexOf(r),s>-1)break;if(s===-1)return new Eh(n);let a=n.substring(0,s).trim(),o=n.substring(s+r.length).trim();return new wS(a,r,o)}function Xte(n){n=n.replace(Gte,"defined[$1]");let e=hn.infixToPostfix(n),t=[];for(let r of e)if(r!=="||"&&r!=="&&")t.push(r);else if(t.length>=2){let s=t[t.length-1],a=t[t.length-2];t.length-=2;let o=r=="&&"?new FS:new NS;typeof s=="string"&&(s=s.replace(M0,"defined($1)")),typeof a=="string"&&(a=a.replace(M0,"defined($1)")),o.leftOperand=typeof a=="string"?C0(a):a,o.rightOperand=typeof s=="string"?C0(s):s,t.push(o)}let i=t[t.length-1];return typeof i=="string"&&(i=i.replace(M0,"defined($1)")),typeof i=="string"?C0(i):i}function US(n,e){let t=new OS,i=n.substring(0,e),r=n.substring(e);return r=r.substring(0,(r.indexOf("//")+1||r.length+1)-1).trim(),i==="#ifdef"?t.testExpression=new Eh(r):i==="#ifndef"?t.testExpression=new Eh(r,!0):t.testExpression=Xte(r),t}function y0(n,e,t,i){let r;for(;P0(n,t,i);){r=n.currentLine;let s=r.substring(0,5).toLowerCase();if(s==="#else"){let a=new Uo;e.children.push(a),P0(n,a,i);return}else if(s==="#elif"){let a=US(r,5);e.children.push(a),t=a}}}function P0(n,e,t){for(;n.canRead;){n.lineIndex++;let i=n.currentLine;if(i.indexOf("#")>=0){let s=Hte.exec(i);if(s&&s.length){switch(s[0]){case"#ifdef":{let o=new Su;e.children.push(o);let l=US(i,6);o.children.push(l),y0(n,o,l,t);break}case"#else":case"#elif":return!0;case"#endif":return!1;case"#ifndef":{let o=new Su;e.children.push(o);let l=US(i,7);o.children.push(l),y0(n,o,l,t);break}case"#if":{let o=new Su,l=US(i,3);e.children.push(o),o.children.push(l),y0(n,o,l,t);break}}continue}}let r=new Uo;if(r.line=i,e.children.push(r),i[0]==="#"&&i[1]==="d"){let s=i.replace(";","").split(" ");r.additionalDefineKey=s[1],s.length===3&&(r.additionalDefineValue=s[2])}}return!1}function Yte(n,e,t,i){let r=new Uo,s=new LS;return s.lineIndex=-1,s.lines=n.split(` -`),P0(s,r,i),r.process(e,t,i)}function Kte(n,e){var r;let t=n.defines,i={};for(let s of t){let o=s.replace("#define","").replace(";","").trim().split(" ");i[o[0]]=o.length>1?o[1]:""}return((r=n.processor)==null?void 0:r.shaderLanguage)===0&&(i.GL_ES="true"),i.__VERSION__=n.version,i[n.platformName]="true",MS(i,e==null?void 0:e.isNDCHalfZRange,e==null?void 0:e.useReverseDepthBuffer,e==null?void 0:e.useExactSrgbConversions),i}function jte(n,e,t){let i=zte(n,e);if(!e.processor||e.processor.shaderLanguage===0&&i.indexOf("#version 3")!==-1&&(i=i.replace("#version 300 es",""),!e.processor.parseGLES3))return i;let r=e.defines,s=Kte(e,t);e.processor.preProcessor&&(i=e.processor.preProcessor(i,r,s,e.isFragment,e.processingContext));let a={};return i=Yte(i,s,e,a),e.processor.postProcessor&&(i=e.processor.postProcessor(i,r,e.isFragment,e.processingContext,t?{drawBuffersExtensionDisabled:!t.getCaps().drawBuffersExtension}:{},s,a)),t!=null&&t._features.needShaderCodeInlining&&(i=t.inlineShaderCode(i)),i}function s_(n,e,t){BS.length=0;let i;for(;(i=kte.exec(n))!==null;)BS.push(i);let r=[n],s=!1;for(let o of BS){let l=o[1];if(l.indexOf("__decl__")!==-1&&(l=l.replace(Wte,""),e.supportsUniformBuffers&&(l=l.replace("Vertex","Ubo").replace("Fragment","Ubo")),l=l+"Declaration"),e.includesShadersStore[l]){let c=e.includesShadersStore[l];if(o[2]){let h=o[3].split(",");for(let d=0;dv+"{X}")),c+=_.replace(U1,p.toString())+` -`}else e.supportsUniformBuffers||(c=c.replace(B1,(d,u)=>u+"{X}")),c=c.replace(U1,h)}let f=[];for(let h of r){let d=h.split(o[0]);for(let u=0;u=0||c.indexOf("#include <")>=0}else{let c=e.shadersRepository+"ShadersInclude/"+l+".fx";L0.loadFile(c,f=>{e.includesShadersStore[l]=f,s_(r.join(""),e,t)});return}}BS.length=0;let a=r.join("");s?s_(a.toString(),e,t):t(a)}var Gte,M0,kte,Wte,B1,U1,BS,Hte,L0,VS=C(()=>{DS();P1();D1();L1();O1();N1();F1();Tu();w1();an();qc();Gte=/defined\s*?\((.+?)\)/g,M0=/defined\s*?\[(.+?)\]/g,kte=/#include\s?<(.+)>(\((.*)\))*(\[(.*)\])*/g,Wte=/__decl__/,B1=/light\{X\}.(\w*)/g,U1=/\{X\}/g,BS=[],Hte=/(#ifdef)|(#else)|(#elif)|(#endif)|(#ifndef)|(#if)/;L0={loadFile:(n,e,t,i,r,s)=>{throw Xe("FileTools")}}});function W1(n,e){return Tn(e).cachedPipelines[n]}function GS(n){let e=n._name,t=n.context;if(e&&t){let i=Tn(t),r=i.cachedPipelines[e];r==null||r.dispose(),delete i.cachedPipelines[e]}}function H1(n,e,t,i,r,s,a){let o,l,c=ar()?s==null?void 0:s.getHostDocument():null;typeof e=="string"?o=e:typeof e.vertexSource=="string"?o="source:"+e.vertexSource:typeof e.vertexElement=="string"?o=(c==null?void 0:c.getElementById(e.vertexElement))||e.vertexElement:o=e.vertex||e,typeof e=="string"?l=e:typeof e.fragmentSource=="string"?l="source:"+e.fragmentSource:typeof e.fragmentElement=="string"?l=(c==null?void 0:c.getElementById(e.fragmentElement))||e.fragmentElement:l=e.fragment||e;let f=[void 0,void 0],h=()=>{if(f[0]&&f[1]){let[d,u]=f;V1(n),D0(d,n,(m,_)=>{a&&(a._vertexSourceCodeBeforeMigration=_),t&&(m=t("vertex",m)),n.isFragment=!0,D0(u,n,(p,g)=>{a&&(a._fragmentSourceCodeBeforeMigration=g),t&&(p=t("fragment",p));let v=G1(m,p,n);n=null;let x=qte(v.vertexCode,v.fragmentCode,e,r);i==null||i(x.vertexSourceCode,x.fragmentSourceCode)},s)},s)}};k1(o,"Vertex","",d=>{a&&(a._rawVertexSourceCode=d),f[0]=d,h()},r),k1(l,"Fragment","Pixel",d=>{a&&(a._rawFragmentSourceCode=d),f[1]=d,h()},r)}function k1(n,e,t,i,r,s){if(typeof HTMLElement!="undefined"&&n instanceof HTMLElement){let l=xS(n);i(l);return}if(n.substring(0,7)==="source:"){i(n.substring(7));return}if(n.substring(0,7)==="base64:"){let l=window.atob(n.substring(7));i(l);return}let a=S.GetShadersStore(r);if(a[n+e+"Shader"]){i(a[n+e+"Shader"]);return}if(t&&a[n+t+"Shader"]){i(a[n+t+"Shader"]);return}let o;if(n[0]==="."||n[0]==="/"||n.indexOf("http")>-1?o=n:o=S.GetShadersRepository(r)+n,s=s||IS,!s)throw new Error("loadFileInjection is not defined");s(o+"."+e.toLowerCase()+".fx",i)}function qte(n,e,t,i){if(t){let r=t.vertexElement||t.vertex||t.spectorName||t,s=t.fragmentElement||t.fragment||t.spectorName||t;return{vertexSourceCode:(i===1?"//":"")+"#define SHADER_NAME vertex:"+r+` +`+n:t||(n=n.replace("precision highp float","precision mediump float")),n}function UI(n){let t=/defined\((.+)\)/.exec(n);if(t&&t.length)return new Sh(t[1].trim(),n[0]==="!");let i=["==","!=",">=","<=","<",">"],r="",s=0;for(r of i)if(s=n.indexOf(r),s>-1)break;if(s===-1)return new Sh(n);let a=n.substring(0,s).trim(),o=n.substring(s+r.length).trim();return new YS(a,r,o)}function uie(n){n=n.replace(lie,"defined[$1]");let e=un.infixToPostfix(n),t=[];for(let r of e)if(r!=="||"&&r!=="&&")t.push(r);else if(t.length>=2){let s=t[t.length-1],a=t[t.length-2];t.length-=2;let o=r=="&&"?new XS:new zS;typeof s=="string"&&(s=s.replace(BI,"defined($1)")),typeof a=="string"&&(a=a.replace(BI,"defined($1)")),o.leftOperand=typeof a=="string"?UI(a):a,o.rightOperand=typeof s=="string"?UI(s):s,t.push(o)}let i=t[t.length-1];return typeof i=="string"&&(i=i.replace(BI,"defined($1)")),typeof i=="string"?UI(i):i}function jS(n,e){let t=new HS,i=n.substring(0,e),r=n.substring(e);return r=r.substring(0,(r.indexOf("//")+1||r.length+1)-1).trim(),i==="#ifdef"?t.testExpression=new Sh(r):i==="#ifndef"?t.testExpression=new Sh(r,!0):t.testExpression=uie(r),t}function VI(n,e,t,i){let r;for(;GI(n,t,i);){r=n.currentLine;let s=r.substring(0,5).toLowerCase();if(s==="#else"){let a=new Go;e.children.push(a),GI(n,a,i);return}else if(s==="#elif"){let a=jS(r,5);e.children.push(a),t=a}}}function GI(n,e,t){for(;n.canRead;){n.lineIndex++;let i=n.currentLine;if(i.indexOf("#")>=0){let s=hie.exec(i);if(s&&s.length){switch(s[0]){case"#ifdef":{let o=new Ru;e.children.push(o);let l=jS(i,6);o.children.push(l),VI(n,o,l,t);break}case"#else":case"#elif":return!0;case"#endif":return!1;case"#ifndef":{let o=new Ru;e.children.push(o);let l=jS(i,7);o.children.push(l),VI(n,o,l,t);break}case"#if":{let o=new Ru,l=jS(i,3);e.children.push(o),o.children.push(l),VI(n,o,l,t);break}}continue}}let r=new Go;if(r.line=i,e.children.push(r),i[0]==="#"&&i[1]==="d"){let s=i.replace(";","").split(" ");r.additionalDefineKey=s[1],s.length===3&&(r.additionalDefineValue=s[2])}}return!1}function mie(n,e,t,i){let r=new Go,s=new WS;return s.lineIndex=-1,s.lines=n.split(` +`),GI(s,r,i),r.process(e,t,i)}function pie(n,e){var r;let t=n.defines,i={};for(let s of t){let o=s.replace("#define","").replace(";","").trim().split(" ");i[o[0]]=o.length>1?o[1]:""}return((r=n.processor)==null?void 0:r.shaderLanguage)===0&&(i.GL_ES="true"),i.__VERSION__=n.version,i[n.platformName]="true",BS(i,e==null?void 0:e.isNDCHalfZRange,e==null?void 0:e.useReverseDepthBuffer,e==null?void 0:e.useExactSrgbConversions),i}function _ie(n,e,t){let i=die(n,e);if(!e.processor||e.processor.shaderLanguage===0&&i.indexOf("#version 3")!==-1&&(i=i.replace("#version 300 es",""),!e.processor.parseGLES3))return i;let r=e.defines,s=pie(e,t);e.processor.preProcessor&&(i=e.processor.preProcessor(i,r,s,e.isFragment,e.processingContext));let a={};return i=mie(i,s,e,a),e.processor.postProcessor&&(i=e.processor.postProcessor(i,r,e.isFragment,e.processingContext,t?{drawBuffersExtensionDisabled:!t.getCaps().drawBuffersExtension}:{},s,a)),t!=null&&t._features.needShaderCodeInlining&&(i=t.inlineShaderCode(i)),i}function u_(n,e,t){KS.length=0;let i;for(;(i=cie.exec(n))!==null;)KS.push(i);let r=[n],s=!1;for(let o of KS){let l=o[1];if(l.indexOf("__decl__")!==-1&&(l=l.replace(fie,""),e.supportsUniformBuffers&&(l=l.replace("Vertex","Ubo").replace("Fragment","Ubo")),l=l+"Declaration"),e.includesShadersStore[l]){let c=e.includesShadersStore[l];if(o[2]){let h=o[3].split(",");for(let d=0;dv+"{X}")),c+=_.replace(q1,p.toString())+` +`}else e.supportsUniformBuffers||(c=c.replace(j1,(d,u)=>u+"{X}")),c=c.replace(q1,h)}let f=[];for(let h of r){let d=h.split(o[0]);for(let u=0;u=0||c.indexOf("#include <")>=0}else{let c=e.shadersRepository+"ShadersInclude/"+l+".fx";WI.loadFile(c,f=>{e.includesShadersStore[l]=f,u_(r.join(""),e,t)});return}}KS.length=0;let a=r.join("");s?u_(a.toString(),e,t):t(a)}var lie,BI,cie,fie,j1,q1,KS,hie,WI,qS=C(()=>{kS();k1();W1();H1();z1();X1();Y1();bu();K1();ln();$c();lie=/defined\s*?\((.+?)\)/g,BI=/defined\s*?\[(.+?)\]/g,cie=/#include\s?<(.+)>(\((.*)\))*(\[(.*)\])*/g,fie=/__decl__/,j1=/light\{X\}.(\w*)/g,q1=/\{X\}/g,KS=[],hie=/(#ifdef)|(#else)|(#elif)|(#endif)|(#ifndef)|(#if)/;WI={loadFile:(n,e,t,i,r,s)=>{throw Xe("FileTools")}}});function J1(n,e){return Tn(e).cachedPipelines[n]}function ZS(n){let e=n._name,t=n.context;if(e&&t){let i=Tn(t),r=i.cachedPipelines[e];r==null||r.dispose(),delete i.cachedPipelines[e]}}function e3(n,e,t,i,r,s,a){let o,l,c=ar()?s==null?void 0:s.getHostDocument():null;typeof e=="string"?o=e:typeof e.vertexSource=="string"?o="source:"+e.vertexSource:typeof e.vertexElement=="string"?o=(c==null?void 0:c.getElementById(e.vertexElement))||e.vertexElement:o=e.vertex||e,typeof e=="string"?l=e:typeof e.fragmentSource=="string"?l="source:"+e.fragmentSource:typeof e.fragmentElement=="string"?l=(c==null?void 0:c.getElementById(e.fragmentElement))||e.fragmentElement:l=e.fragment||e;let f=[void 0,void 0],h=()=>{if(f[0]&&f[1]){let[d,u]=f;Z1(n),kI(d,n,(m,_)=>{a&&(a._vertexSourceCodeBeforeMigration=_),t&&(m=t("vertex",m)),n.isFragment=!0,kI(u,n,(p,g)=>{a&&(a._fragmentSourceCodeBeforeMigration=g),t&&(p=t("fragment",p));let v=Q1(m,p,n);n=null;let x=gie(v.vertexCode,v.fragmentCode,e,r);i==null||i(x.vertexSourceCode,x.fragmentSourceCode)},s)},s)}};$1(o,"Vertex","",d=>{a&&(a._rawVertexSourceCode=d),f[0]=d,h()},r),$1(l,"Fragment","Pixel",d=>{a&&(a._rawFragmentSourceCode=d),f[1]=d,h()},r)}function $1(n,e,t,i,r,s){if(typeof HTMLElement!="undefined"&&n instanceof HTMLElement){let l=OS(n);i(l);return}if(n.substring(0,7)==="source:"){i(n.substring(7));return}if(n.substring(0,7)==="base64:"){let l=window.atob(n.substring(7));i(l);return}let a=T.GetShadersStore(r);if(a[n+e+"Shader"]){i(a[n+e+"Shader"]);return}if(t&&a[n+t+"Shader"]){i(a[n+t+"Shader"]);return}let o;if(n[0]==="."||n[0]==="/"||n.indexOf("http")>-1?o=n:o=T.GetShadersRepository(r)+n,s=s||FS,!s)throw new Error("loadFileInjection is not defined");s(o+"."+e.toLowerCase()+".fx",i)}function gie(n,e,t,i){if(t){let r=t.vertexElement||t.vertex||t.spectorName||t,s=t.fragmentElement||t.fragment||t.spectorName||t;return{vertexSourceCode:(i===1?"//":"")+"#define SHADER_NAME vertex:"+r+` `+n,fragmentSourceCode:(i===1?"//":"")+"#define SHADER_NAME fragment:"+s+` -`+e}}else return{vertexSourceCode:n,fragmentSourceCode:e}}var z1,O0=C(()=>{fa();I0();k();Pt();VS();qc();z1=(n,e,t,i)=>{try{let r=n.context?Tn(n.context):null;r&&(r.disableParallelShaderCompile=n.disableParallelCompilation);let s=n.existingPipelineContext||e(n.shaderProcessingContext);return s._name=n.name,n.name&&r&&(r.cachedPipelines[n.name]=s),t(s,n.vertex,n.fragment,!!n.createAsRaw,"","",n.rebuildRebind,n.defines,n.transformFeedbackVaryings,"",()=>{i(s,()=>{var a;(a=n.onRenderingStateCompiled)==null||a.call(n,s)})}),s}catch(r){throw $.Error("Error compiling effect"),r}}});function X1(n,e,t){try{if(n())return e(),!0}catch(i){return t==null||t(i),!0}return!1}var kS,Ya,Vo,Go=C(()=>{kS=[],Ya=class{static SetImmediate(e){kS.length===0&&setTimeout(()=>{let t=kS;kS=[];for(let i of t)i()},1),kS.push(e)}};Vo=(n,e,t,i=16,r=3e4,s=!0,a)=>{if(s&&X1(n,e,t))return null;let o=!1,l=null,c=()=>{if(!o&&!X1(n,e,t)){if(r-=i,r<0){t==null||t(new Error("Operation timed out after maximum retries. "+(a||"")),!0);return}l=setTimeout(c,i)}};return l=setTimeout(c,i),()=>{o=!0,l!==null&&clearTimeout(l)}}});var Ji,Sh=C(()=>{hi();Pt();k();O0();Go();Ji=class n{static get ShadersRepository(){return S.ShadersRepository}static set ShadersRepository(e){S.ShadersRepository=e}get isDisposed(){return this._isDisposed}get onBindObservable(){return this._onBindObservable||(this._onBindObservable=new ee),this._onBindObservable}get shaderLanguage(){return this._shaderLanguage}constructor(e,t,i,r=null,s,a=null,o=null,l=null,c=null,f,h="",d=0,u){var p,g,v,x;this.defines="",this.onCompiled=null,this.onError=null,this.onBind=null,this.uniqueId=0,this.onCompileObservable=new ee,this.onErrorObservable=new ee,this._onBindObservable=null,this._isDisposed=!1,this._refCount=1,this._bonesComputationForcedToCPU=!1,this._uniformBuffersNames={},this._multiTarget=!1,this._samplers={},this._isReady=!1,this._compilationError="",this._allFallbacksProcessed=!1,this._uniforms={},this._key="",this._fallbacks=null,this._vertexSourceCodeOverride="",this._fragmentSourceCodeOverride="",this._transformFeedbackVaryings=null,this._disableParallelShaderCompilation=!1,this._pipelineContext=null,this._vertexSourceCode="",this._fragmentSourceCode="",this._vertexSourceCodeBeforeMigration="",this._fragmentSourceCodeBeforeMigration="",this._rawVertexSourceCode="",this._rawFragmentSourceCode="",this._processCodeAfterIncludes=void 0,this._processFinalCode=null,this._onReleaseEffectsObserver=null,this.name=e,this._key=h;let m=this._key.replace(/\r/g,"").replace(/\n/g,"|"),_;if(t.attributes){let A=t;if(this._engine=i,this._attributesNames=A.attributes,this._uniformsNames=A.uniformsNames.concat(A.samplers),this._samplerList=A.samplers.slice(),this.defines=A.defines,this.onError=A.onError,this.onCompiled=A.onCompiled,this._fallbacks=A.fallbacks,this._indexParameters=A.indexParameters,this._transformFeedbackVaryings=A.transformFeedbackVaryings||null,this._multiTarget=!!A.multiTarget,this._shaderLanguage=(p=A.shaderLanguage)!=null?p:0,this._disableParallelShaderCompilation=!!A.disableParallelShaderCompilation,A.uniformBuffersNames){this._uniformBuffersNamesList=A.uniformBuffersNames.slice();for(let E=0;E{this._onReleaseEffectsObserver=null,!this.isDisposed&&this.dispose(!0)})}async _processShaderCodeAsync(e=null,t=!1,i=null,r){r&&await r(),this._processingContext=i||this._engine._getShaderProcessingContext(this._shaderLanguage,!1);let s={defines:this.defines.split(` -`),indexParameters:this._indexParameters,isFragment:!1,shouldUseHighPrecisionShader:this._engine._shouldUseHighPrecisionShader,processor:e!=null?e:this._engine._getShaderProcessor(this._shaderLanguage),supportsUniformBuffers:this._engine.supportsUniformBuffers,shadersRepository:S.GetShadersRepository(this._shaderLanguage),includesShadersStore:S.GetIncludesShadersStore(this._shaderLanguage),version:(this._engine.version*100).toString(),platformName:this._engine.shaderPlatformName,processingContext:this._processingContext,isNDCHalfZRange:this._engine.isNDCHalfZRange,useReverseDepthBuffer:this._engine.useReverseDepthBuffer,processCodeAfterIncludes:this._processCodeAfterIncludes};H1(s,this.name,this._processFinalCode,(a,o)=>{this._vertexSourceCode=a,this._fragmentSourceCode=o,this._prepareEffect(t)},this._shaderLanguage,this._engine,this)}get key(){return this._key}isReady(){try{return this._isReadyInternal()}catch(e){return!1}}_isReadyInternal(){return this._engine.isDisposed||this._isReady?!0:this._pipelineContext?this._pipelineContext.isReady:!1}getEngine(){return this._engine}getPipelineContext(){return this._pipelineContext}getAttributesNames(){return this._attributesNames}getAttributeLocation(e){return this._attributes[e]}getAttributeLocationByName(e){return this._attributeLocationByName[e]}getAttributesCount(){return this._attributes.length}getUniformIndex(e){return this._uniformsNames.indexOf(e)}getUniform(e){return this._uniforms[e]}getSamplers(){return this._samplerList}getUniformNames(){return this._uniformsNames}getUniformBuffersNames(){return this._uniformBuffersNamesList}getIndexParameters(){return this._indexParameters}getCompilationError(){return this._compilationError}allFallbacksProcessed(){return this._allFallbacksProcessed}async whenCompiledAsync(){return await new Promise(e=>{this.executeWhenCompiled(e)})}executeWhenCompiled(e){if(this.isReady()){e(this);return}this.onCompileObservable.add(t=>{e(t)}),(!this._pipelineContext||this._pipelineContext.isAsync)&&this._checkIsReady(null)}_checkIsReady(e){Vo(()=>this._isReadyInternal()||this._isDisposed,()=>{},t=>{this._processCompilationErrors(t,e)},16,12e4,!0,` - Effect: ${typeof this.name=="string"?this.name:this.key}`)}get vertexSourceCode(){var e,t;return this._vertexSourceCodeOverride&&this._fragmentSourceCodeOverride?this._vertexSourceCodeOverride:(t=(e=this._pipelineContext)==null?void 0:e._getVertexShaderCode())!=null?t:this._vertexSourceCode}get fragmentSourceCode(){var e,t;return this._vertexSourceCodeOverride&&this._fragmentSourceCodeOverride?this._fragmentSourceCodeOverride:(t=(e=this._pipelineContext)==null?void 0:e._getFragmentShaderCode())!=null?t:this._fragmentSourceCode}get vertexSourceCodeBeforeMigration(){return this._vertexSourceCodeBeforeMigration}get fragmentSourceCodeBeforeMigration(){return this._fragmentSourceCodeBeforeMigration}get rawVertexSourceCode(){return this._rawVertexSourceCode}get rawFragmentSourceCode(){return this._rawFragmentSourceCode}getPipelineGenerationOptions(){return{platformName:this._engine.shaderPlatformName,shaderLanguage:this._shaderLanguage,shaderNameOrContent:this.name,key:this._key,defines:this.defines.split(` -`),addGlobalDefines:!1,extendedProcessingOptions:{indexParameters:this._indexParameters,isNDCHalfZRange:this._engine.isNDCHalfZRange,useReverseDepthBuffer:this._engine.useReverseDepthBuffer,supportsUniformBuffers:this._engine.supportsUniformBuffers},extendedCreatePipelineOptions:{transformFeedbackVaryings:this._transformFeedbackVaryings,createAsRaw:!!(this._vertexSourceCodeOverride&&this._fragmentSourceCodeOverride)}}}_rebuildProgram(e,t,i,r){this._isReady=!1,this._vertexSourceCodeOverride=e,this._fragmentSourceCodeOverride=t,this.onError=(s,a)=>{r&&r(a)},this.onCompiled=()=>{var a,o;let s=this.getEngine().scenes;if(s)for(let l=0;lthis._rebuildProgram(l,c,f,h),defines:r,transformFeedbackVaryings:this._transformFeedbackVaryings,name:this._key.replace(/\r/g,"").replace(/\n/g,"|"),createAsRaw:i,disableParallelCompilation:this._disableParallelShaderCompilation,shaderProcessingContext:this._processingContext,onRenderingStateCompiled:l=>{t&&!e&&this._engine._deletePipelineContext(t),l&&this._onRenderingStateCompiled(l)}},this._engine.createPipelineContext.bind(this._engine),this._engine._preparePipelineContextAsync.bind(this._engine),this._engine._executeWhenRenderingStateIsCompiled.bind(this._engine)),this._pipelineContext.isAsync&&this._checkIsReady(t)}catch(i){this._processCompilationErrors(i,t)}}_getShaderCodeAndErrorLine(e,t,i){let r=i?/FRAGMENT SHADER ERROR: 0:(\d+?):/:/VERTEX SHADER ERROR: 0:(\d+?):/,s=null;if(t&&e){let a=t.match(r);if(a&&a.length===2){let o=parseInt(a[1]),l=e.split(` -`,-1);l.length>=o&&(s=`Offending line [${o}] in ${i?"fragment":"vertex"} code: ${l[o-1]}`)}}return[e,s]}_processCompilationErrors(e,t=null){var a,o,l;this._compilationError=e.message;let i=this._attributesNames,r=this._fallbacks;if($.Error("Unable to compile effect:"),$.Error(`Uniforms: ${this._uniformsNames.join(" ")}`),$.Error(`Attributes: ${i.join(" ")}`),$.Error(`Defines: -`+this.defines),n.LogShaderCodeOnCompilationError){let c=null,f=null,h;(a=this._pipelineContext)!=null&&a._getVertexShaderCode()&&([h,c]=this._getShaderCodeAndErrorLine(this._pipelineContext._getVertexShaderCode(),this._compilationError,!1),h&&($.Error("Vertex code:"),$.Error(h))),(o=this._pipelineContext)!=null&&o._getFragmentShaderCode()&&([h,f]=this._getShaderCodeAndErrorLine((l=this._pipelineContext)==null?void 0:l._getFragmentShaderCode(),this._compilationError,!0),h&&($.Error("Fragment code:"),$.Error(h))),c&&$.Error(c),f&&$.Error(f)}$.Error("Error: "+this._compilationError);let s=()=>{this.onError&&this.onError(this,this._compilationError),this.onErrorObservable.notifyObservers(this),this._engine.onEffectErrorObservable.notifyObservers({effect:this,errors:this._compilationError})};t&&(this._pipelineContext=t,this._isReady=!0,s()),r?(this._pipelineContext=null,r.hasMoreFallbacks?(this._allFallbacksProcessed=!1,$.Error("Trying next fallback."),this.defines=r.reduce(this.defines,this),this._prepareEffect()):(this._allFallbacksProcessed=!0,s(),this.onErrorObservable.clear(),this._fallbacks&&this._fallbacks.unBindMesh())):(this._allFallbacksProcessed=!0,t||s())}get isSupported(){return this._compilationError===""}_bindTexture(e,t){this._engine._bindTexture(this._samplers[e],t,e)}setTexture(e,t){this._engine.setTexture(this._samplers[e],this._uniforms[e],t,e)}setTextureArray(e,t){let i=e+"Ex";if(this._samplerList.indexOf(i+"0")===-1){let r=this._samplerList.indexOf(e);for(let a=1;a0||this._isDisposed||(this._onReleaseEffectsObserver&&(this._engine.onReleaseEffectsObservable.remove(this._onReleaseEffectsObserver),this._onReleaseEffectsObserver=null),this._pipelineContext&&GS(this._pipelineContext),this._engine._releaseEffect(this),this.clearCodeCache(),this._isDisposed=!0)}static RegisterShader(e,t,i,r=0){t&&(S.GetShadersStore(r)[`${e}PixelShader`]=t),i&&(S.GetShadersStore(r)[`${e}VertexShader`]=i)}static ResetCache(){n._BaseCache={}}};Ji.LogShaderCodeOnCompilationError=!0;Ji.PersistentMode=!1;Ji.AutomaticallyClearCodeCache=!1;Ji._UniqueIdSeed=0;Ji._BaseCache={};Ji.ShadersStore=S.ShadersStore;Ji.IncludesShadersStore=S.IncludesShadersStore});var Gn,N0=C(()=>{Gn=class n{static SetMatrixPrecision(e){if(n.MatrixTrackPrecisionChange=!1,e&&!n.MatrixUse64Bits&&n.MatrixTrackedMatrices)for(let t=0;t{fa();fr=class{static get Now(){return ar()&&window.performance&&window.performance.now?window.performance.now():Date.now()}}});var WS,Y1=C(()=>{WS=class{constructor(e=!0){this._isDepthTestDirty=!1,this._isDepthMaskDirty=!1,this._isDepthFuncDirty=!1,this._isCullFaceDirty=!1,this._isCullDirty=!1,this._isZOffsetDirty=!1,this._isFrontFaceDirty=!1,e&&this.reset()}get isDirty(){return this._isDepthFuncDirty||this._isDepthTestDirty||this._isDepthMaskDirty||this._isCullFaceDirty||this._isCullDirty||this._isZOffsetDirty||this._isFrontFaceDirty}get zOffset(){return this._zOffset}set zOffset(e){this._zOffset!==e&&(this._zOffset=e,this._isZOffsetDirty=!0)}get zOffsetUnits(){return this._zOffsetUnits}set zOffsetUnits(e){this._zOffsetUnits!==e&&(this._zOffsetUnits=e,this._isZOffsetDirty=!0)}get cullFace(){return this._cullFace}set cullFace(e){this._cullFace!==e&&(this._cullFace=e,this._isCullFaceDirty=!0)}get cull(){return this._cull}set cull(e){this._cull!==e&&(this._cull=e,this._isCullDirty=!0)}get depthFunc(){return this._depthFunc}set depthFunc(e){this._depthFunc!==e&&(this._depthFunc=e,this._isDepthFuncDirty=!0)}get depthMask(){return this._depthMask}set depthMask(e){this._depthMask!==e&&(this._depthMask=e,this._isDepthMaskDirty=!0)}get depthTest(){return this._depthTest}set depthTest(e){this._depthTest!==e&&(this._depthTest=e,this._isDepthTestDirty=!0)}get frontFace(){return this._frontFace}set frontFace(e){this._frontFace!==e&&(this._frontFace=e,this._isFrontFaceDirty=!0)}reset(){this._depthMask=!0,this._depthTest=!0,this._depthFunc=null,this._cullFace=null,this._cull=null,this._zOffset=0,this._zOffsetUnits=0,this._frontFace=null,this._isDepthTestDirty=!0,this._isDepthMaskDirty=!0,this._isDepthFuncDirty=!1,this._isCullFaceDirty=!1,this._isCullDirty=!1,this._isZOffsetDirty=!0,this._isFrontFaceDirty=!1}apply(e){this.isDirty&&(this._isCullDirty&&(this.cull?e.enable(e.CULL_FACE):e.disable(e.CULL_FACE),this._isCullDirty=!1),this._isCullFaceDirty&&(e.cullFace(this.cullFace),this._isCullFaceDirty=!1),this._isDepthMaskDirty&&(e.depthMask(this.depthMask),this._isDepthMaskDirty=!1),this._isDepthTestDirty&&(this.depthTest?e.enable(e.DEPTH_TEST):e.disable(e.DEPTH_TEST),this._isDepthTestDirty=!1),this._isDepthFuncDirty&&(e.depthFunc(this.depthFunc),this._isDepthFuncDirty=!1),this._isZOffsetDirty&&(this.zOffset||this.zOffsetUnits?(e.enable(e.POLYGON_OFFSET_FILL),e.polygonOffset(this.zOffset,this.zOffsetUnits)):e.disable(e.POLYGON_OFFSET_FILL),this._isZOffsetDirty=!1),this._isFrontFaceDirty&&(e.frontFace(this.frontFace),this._isFrontFaceDirty=!1))}}});var HS,K1=C(()=>{HS=class{get isDirty(){return this._isStencilTestDirty||this._isStencilMaskDirty||this._isStencilFuncDirty||this._isStencilOpDirty}get func(){return this._func}set func(e){this._func!==e&&(this._func=e,this._isStencilFuncDirty=!0)}get backFunc(){return this._func}set backFunc(e){this._backFunc!==e&&(this._backFunc=e,this._isStencilFuncDirty=!0)}get funcRef(){return this._funcRef}set funcRef(e){this._funcRef!==e&&(this._funcRef=e,this._isStencilFuncDirty=!0)}get funcMask(){return this._funcMask}set funcMask(e){this._funcMask!==e&&(this._funcMask=e,this._isStencilFuncDirty=!0)}get opStencilFail(){return this._opStencilFail}set opStencilFail(e){this._opStencilFail!==e&&(this._opStencilFail=e,this._isStencilOpDirty=!0)}get opDepthFail(){return this._opDepthFail}set opDepthFail(e){this._opDepthFail!==e&&(this._opDepthFail=e,this._isStencilOpDirty=!0)}get opStencilDepthPass(){return this._opStencilDepthPass}set opStencilDepthPass(e){this._opStencilDepthPass!==e&&(this._opStencilDepthPass=e,this._isStencilOpDirty=!0)}get backOpStencilFail(){return this._backOpStencilFail}set backOpStencilFail(e){this._backOpStencilFail!==e&&(this._backOpStencilFail=e,this._isStencilOpDirty=!0)}get backOpDepthFail(){return this._backOpDepthFail}set backOpDepthFail(e){this._backOpDepthFail!==e&&(this._backOpDepthFail=e,this._isStencilOpDirty=!0)}get backOpStencilDepthPass(){return this._backOpStencilDepthPass}set backOpStencilDepthPass(e){this._backOpStencilDepthPass!==e&&(this._backOpStencilDepthPass=e,this._isStencilOpDirty=!0)}get mask(){return this._mask}set mask(e){this._mask!==e&&(this._mask=e,this._isStencilMaskDirty=!0)}get enabled(){return this._enabled}set enabled(e){this._enabled!==e&&(this._enabled=e,this._isStencilTestDirty=!0)}constructor(e=!0){this._isStencilTestDirty=!1,this._isStencilMaskDirty=!1,this._isStencilFuncDirty=!1,this._isStencilOpDirty=!1,this.useStencilGlobalOnly=!1,e&&this.reset()}reset(){var e;this.stencilMaterial=void 0,(e=this.stencilGlobal)==null||e.reset(),this._isStencilTestDirty=!0,this._isStencilMaskDirty=!0,this._isStencilFuncDirty=!0,this._isStencilOpDirty=!0}apply(e){var i;if(!e)return;let t=!this.useStencilGlobalOnly&&!!((i=this.stencilMaterial)!=null&&i.enabled);this.enabled=t?this.stencilMaterial.enabled:this.stencilGlobal.enabled,this.func=t?this.stencilMaterial.func:this.stencilGlobal.func,this.backFunc=t?this.stencilMaterial.backFunc:this.stencilGlobal.backFunc,this.funcRef=t?this.stencilMaterial.funcRef:this.stencilGlobal.funcRef,this.funcMask=t?this.stencilMaterial.funcMask:this.stencilGlobal.funcMask,this.opStencilFail=t?this.stencilMaterial.opStencilFail:this.stencilGlobal.opStencilFail,this.opDepthFail=t?this.stencilMaterial.opDepthFail:this.stencilGlobal.opDepthFail,this.opStencilDepthPass=t?this.stencilMaterial.opStencilDepthPass:this.stencilGlobal.opStencilDepthPass,this.backOpStencilFail=t?this.stencilMaterial.backOpStencilFail:this.stencilGlobal.backOpStencilFail,this.backOpDepthFail=t?this.stencilMaterial.backOpDepthFail:this.stencilGlobal.backOpDepthFail,this.backOpStencilDepthPass=t?this.stencilMaterial.backOpStencilDepthPass:this.stencilGlobal.backOpStencilDepthPass,this.mask=t?this.stencilMaterial.mask:this.stencilGlobal.mask,this.isDirty&&(this._isStencilTestDirty&&(this.enabled?e.enable(e.STENCIL_TEST):e.disable(e.STENCIL_TEST),this._isStencilTestDirty=!1),this._isStencilMaskDirty&&(e.stencilMask(this.mask),this._isStencilMaskDirty=!1),this._isStencilFuncDirty&&(e.stencilFuncSeparate(e.FRONT,this.func,this.funcRef,this.funcMask),e.stencilFuncSeparate(e.BACK,this.backFunc,this.funcRef,this.funcMask),this._isStencilFuncDirty=!1),this._isStencilOpDirty&&(e.stencilOpSeparate(e.FRONT,this.opStencilFail,this.opDepthFail,this.opStencilDepthPass),e.stencilOpSeparate(e.BACK,this.backOpStencilFail,this.backOpDepthFail,this.backOpStencilDepthPass),this._isStencilOpDirty=!1))}}});var Th,j1=C(()=>{Th=class n{constructor(){this.reset()}reset(){this.enabled=!1,this.mask=255,this.funcRef=1,this.funcMask=255,this.func=n.ALWAYS,this.opStencilFail=n.KEEP,this.opDepthFail=n.KEEP,this.opStencilDepthPass=n.REPLACE,this.backFunc=n.ALWAYS,this.backOpStencilFail=n.KEEP,this.backOpDepthFail=n.KEEP,this.backOpStencilDepthPass=n.REPLACE}get stencilFunc(){return this.func}set stencilFunc(e){this.func=e}get stencilBackFunc(){return this.backFunc}set stencilBackFunc(e){this.backFunc=e}get stencilFuncRef(){return this.funcRef}set stencilFuncRef(e){this.funcRef=e}get stencilFuncMask(){return this.funcMask}set stencilFuncMask(e){this.funcMask=e}get stencilOpStencilFail(){return this.opStencilFail}set stencilOpStencilFail(e){this.opStencilFail=e}get stencilOpDepthFail(){return this.opDepthFail}set stencilOpDepthFail(e){this.opDepthFail=e}get stencilOpStencilDepthPass(){return this.opStencilDepthPass}set stencilOpStencilDepthPass(e){this.opStencilDepthPass=e}get stencilBackOpStencilFail(){return this.backOpStencilFail}set stencilBackOpStencilFail(e){this.backOpStencilFail=e}get stencilBackOpDepthFail(){return this.backOpDepthFail}set stencilBackOpDepthFail(e){this.backOpDepthFail=e}get stencilBackOpStencilDepthPass(){return this.backOpStencilDepthPass}set stencilBackOpStencilDepthPass(e){this.backOpStencilDepthPass=e}get stencilMask(){return this.mask}set stencilMask(e){this.mask=e}get stencilTest(){return this.enabled}set stencilTest(e){this.enabled=e}};Th.ALWAYS=519;Th.KEEP=7680;Th.REPLACE=7681});var Au,F0=C(()=>{Au=class{constructor(e){this._supportBlendParametersPerTarget=e,this._blendFunctionParameters=new Array(32),this._blendEquationParameters=new Array(16),this._blendConstants=new Array(4),this._isBlendConstantsDirty=!1,this._alphaBlend=Array(8).fill(!1),this._numTargetEnabled=0,this._isAlphaBlendDirty=!1,this._isBlendFunctionParametersDirty=!1,this._isBlendEquationParametersDirty=!1,this.reset()}get isDirty(){return this._isAlphaBlendDirty||this._isBlendFunctionParametersDirty||this._isBlendEquationParametersDirty}get alphaBlend(){return this._numTargetEnabled>0}set alphaBlend(e){this.setAlphaBlend(e)}setAlphaBlend(e,t=0){this._alphaBlend[t]!==e&&(e?this._numTargetEnabled++:this._numTargetEnabled--,this._alphaBlend[t]=e,this._isAlphaBlendDirty=!0)}setAlphaBlendConstants(e,t,i,r){this._blendConstants[0]===e&&this._blendConstants[1]===t&&this._blendConstants[2]===i&&this._blendConstants[3]===r||(this._blendConstants[0]=e,this._blendConstants[1]=t,this._blendConstants[2]=i,this._blendConstants[3]=r,this._isBlendConstantsDirty=!0)}setAlphaBlendFunctionParameters(e,t,i,r,s=0){let a=s*4;this._blendFunctionParameters[a+0]===e&&this._blendFunctionParameters[a+1]===t&&this._blendFunctionParameters[a+2]===i&&this._blendFunctionParameters[a+3]===r||(this._blendFunctionParameters[a+0]=e,this._blendFunctionParameters[a+1]=t,this._blendFunctionParameters[a+2]=i,this._blendFunctionParameters[a+3]=r,this._isBlendFunctionParametersDirty=!0)}setAlphaEquationParameters(e,t,i=0){let r=i*2;this._blendEquationParameters[r+0]===e&&this._blendEquationParameters[r+1]===t||(this._blendEquationParameters[r+0]=e,this._blendEquationParameters[r+1]=t,this._isBlendEquationParametersDirty=!0)}reset(){this._alphaBlend.fill(!1),this._numTargetEnabled=0,this._blendFunctionParameters.fill(null),this._blendEquationParameters.fill(null),this._blendConstants[0]=null,this._blendConstants[1]=null,this._blendConstants[2]=null,this._blendConstants[3]=null,this._isAlphaBlendDirty=!0,this._isBlendFunctionParametersDirty=!1,this._isBlendEquationParametersDirty=!1,this._isBlendConstantsDirty=!1}apply(e,t=1){if(!this.isDirty)return;if(this._isBlendConstantsDirty&&(e.blendColor(this._blendConstants[0],this._blendConstants[1],this._blendConstants[2],this._blendConstants[3]),this._isBlendConstantsDirty=!1),t===1||!this._supportBlendParametersPerTarget){this._isAlphaBlendDirty&&(this._alphaBlend[0]?e.enable(e.BLEND):e.disable(e.BLEND),this._isAlphaBlendDirty=!1),this._isBlendFunctionParametersDirty&&(e.blendFuncSeparate(this._blendFunctionParameters[0],this._blendFunctionParameters[1],this._blendFunctionParameters[2],this._blendFunctionParameters[3]),this._isBlendFunctionParametersDirty=!1),this._isBlendEquationParametersDirty&&(e.blendEquationSeparate(this._blendEquationParameters[0],this._blendEquationParameters[1]),this._isBlendEquationParametersDirty=!1);return}let i=e;if(this._isAlphaBlendDirty){for(let r=0;r{hi();Sh();Pi();Pt();N0();Cl();Y1();K1();j1();F0();an();ks();fa();qc();Re=class n{get frameId(){return this._frameId}get isWebGPU(){return this._isWebGPU}_getShaderProcessor(e){return this._shaderProcessor}_resetAlphaMode(){this._alphaMode.fill(-1),this._alphaEquation.fill(-1)}get shaderPlatformName(){return this._shaderPlatformName}_clearEmptyResources(){this._emptyTexture=null,this._emptyCubeTexture=null,this._emptyTexture3D=null,this._emptyTexture2DArray=null}get useReverseDepthBuffer(){return this._useReverseDepthBuffer}set useReverseDepthBuffer(e){e!==this._useReverseDepthBuffer&&(this._useReverseDepthBuffer=e,e?this._depthCullingState.depthFunc=518:this._depthCullingState.depthFunc=515)}setColorWrite(e){e!==this._colorWrite&&(this._colorWriteChanged=!0,this._colorWrite=e)}getColorWrite(){return this._colorWrite}get depthCullingState(){return this._depthCullingState}get alphaState(){return this._alphaState}get stencilState(){return this._stencilState}get stencilStateComposer(){return this._stencilStateComposer}_getGlobalDefines(e){if(e){this.isNDCHalfZRange?e.IS_NDC_HALF_ZRANGE="":delete e.IS_NDC_HALF_ZRANGE,this.useReverseDepthBuffer?e.USE_REVERSE_DEPTHBUFFER="":delete e.USE_REVERSE_DEPTHBUFFER,this.useExactSrgbConversions?e.USE_EXACT_SRGB_CONVERSIONS="":delete e.USE_EXACT_SRGB_CONVERSIONS;return}else{let t="";return this.isNDCHalfZRange&&(t+="#define IS_NDC_HALF_ZRANGE"),this.useReverseDepthBuffer&&(t&&(t+=` +`+e}}else return{vertexSourceCode:n,fragmentSourceCode:e}}var t3,HI=C(()=>{ma();FI();G();Pt();qS();$c();t3=(n,e,t,i)=>{try{let r=n.context?Tn(n.context):null;r&&(r.disableParallelShaderCompile=n.disableParallelCompilation);let s=n.existingPipelineContext||e(n.shaderProcessingContext);return s._name=n.name,n.name&&r&&(r.cachedPipelines[n.name]=s),t(s,n.vertex,n.fragment,!!n.createAsRaw,"","",n.rebuildRebind,n.defines,n.transformFeedbackVaryings,"",()=>{i(s,()=>{var a;(a=n.onRenderingStateCompiled)==null||a.call(n,s)})}),s}catch(r){throw J.Error("Error compiling effect"),r}}});function i3(n,e,t){try{if(n())return e(),!0}catch(i){return t==null||t(i),!0}return!1}var QS,ja,ko,Wo=C(()=>{QS=[],ja=class{static SetImmediate(e){QS.length===0&&setTimeout(()=>{let t=QS;QS=[];for(let i of t)i()},1),QS.push(e)}};ko=(n,e,t,i=16,r=3e4,s=!0,a)=>{if(s&&i3(n,e,t))return null;let o=!1,l=null,c=()=>{if(!o&&!i3(n,e,t)){if(r-=i,r<0){t==null||t(new Error("Operation timed out after maximum retries. "+(a||"")),!0);return}l=setTimeout(c,i)}};return l=setTimeout(c,i),()=>{o=!0,l!==null&&clearTimeout(l)}}});var $i,Th=C(()=>{hi();Pt();G();HI();Wo();$i=class n{static get ShadersRepository(){return T.ShadersRepository}static set ShadersRepository(e){T.ShadersRepository=e}get isDisposed(){return this._isDisposed}get onBindObservable(){return this._onBindObservable||(this._onBindObservable=new te),this._onBindObservable}get shaderLanguage(){return this._shaderLanguage}constructor(e,t,i,r=null,s,a=null,o=null,l=null,c=null,f,h="",d=0,u){var p,g,v,x;this.defines="",this.onCompiled=null,this.onError=null,this.onBind=null,this.uniqueId=0,this.onCompileObservable=new te,this.onErrorObservable=new te,this._onBindObservable=null,this._isDisposed=!1,this._refCount=1,this._bonesComputationForcedToCPU=!1,this._uniformBuffersNames={},this._multiTarget=!1,this._samplers={},this._isReady=!1,this._compilationError="",this._allFallbacksProcessed=!1,this._uniforms={},this._key="",this._fallbacks=null,this._vertexSourceCodeOverride="",this._fragmentSourceCodeOverride="",this._transformFeedbackVaryings=null,this._disableParallelShaderCompilation=!1,this._pipelineContext=null,this._vertexSourceCode="",this._fragmentSourceCode="",this._vertexSourceCodeBeforeMigration="",this._fragmentSourceCodeBeforeMigration="",this._rawVertexSourceCode="",this._rawFragmentSourceCode="",this._processCodeAfterIncludes=void 0,this._processFinalCode=null,this._onReleaseEffectsObserver=null,this.name=e,this._key=h;let m=this._key.replace(/\r/g,"").replace(/\n/g,"|"),_;if(t.attributes){let A=t;if(this._engine=i,this._attributesNames=A.attributes,this._uniformsNames=A.uniformsNames.concat(A.samplers),this._samplerList=A.samplers.slice(),this.defines=A.defines,this.onError=A.onError,this.onCompiled=A.onCompiled,this._fallbacks=A.fallbacks,this._indexParameters=A.indexParameters,this._transformFeedbackVaryings=A.transformFeedbackVaryings||null,this._multiTarget=!!A.multiTarget,this._shaderLanguage=(p=A.shaderLanguage)!=null?p:0,this._disableParallelShaderCompilation=!!A.disableParallelShaderCompilation,A.uniformBuffersNames){this._uniformBuffersNamesList=A.uniformBuffersNames.slice();for(let S=0;S{this._onReleaseEffectsObserver=null,!this.isDisposed&&this.dispose(!0)})}async _processShaderCodeAsync(e=null,t=!1,i=null,r){r&&await r(),this._processingContext=i||this._engine._getShaderProcessingContext(this._shaderLanguage,!1);let s={defines:this.defines.split(` +`),indexParameters:this._indexParameters,isFragment:!1,shouldUseHighPrecisionShader:this._engine._shouldUseHighPrecisionShader,processor:e!=null?e:this._engine._getShaderProcessor(this._shaderLanguage),supportsUniformBuffers:this._engine.supportsUniformBuffers,shadersRepository:T.GetShadersRepository(this._shaderLanguage),includesShadersStore:T.GetIncludesShadersStore(this._shaderLanguage),version:(this._engine.version*100).toString(),platformName:this._engine.shaderPlatformName,processingContext:this._processingContext,isNDCHalfZRange:this._engine.isNDCHalfZRange,useReverseDepthBuffer:this._engine.useReverseDepthBuffer,processCodeAfterIncludes:this._processCodeAfterIncludes};e3(s,this.name,this._processFinalCode,(a,o)=>{this._vertexSourceCode=a,this._fragmentSourceCode=o,this._prepareEffect(t)},this._shaderLanguage,this._engine,this)}get key(){return this._key}isReady(){try{return this._isReadyInternal()}catch(e){return!1}}_isReadyInternal(){return this._engine.isDisposed||this._isReady?!0:this._pipelineContext?this._pipelineContext.isReady:!1}getEngine(){return this._engine}getPipelineContext(){return this._pipelineContext}getAttributesNames(){return this._attributesNames}getAttributeLocation(e){return this._attributes[e]}getAttributeLocationByName(e){return this._attributeLocationByName[e]}getAttributesCount(){return this._attributes.length}getUniformIndex(e){return this._uniformsNames.indexOf(e)}getUniform(e){return this._uniforms[e]}getSamplers(){return this._samplerList}getUniformNames(){return this._uniformsNames}getUniformBuffersNames(){return this._uniformBuffersNamesList}getIndexParameters(){return this._indexParameters}getCompilationError(){return this._compilationError}allFallbacksProcessed(){return this._allFallbacksProcessed}async whenCompiledAsync(){return await new Promise(e=>{this.executeWhenCompiled(e)})}executeWhenCompiled(e){if(this.isReady()){e(this);return}this.onCompileObservable.add(t=>{e(t)}),(!this._pipelineContext||this._pipelineContext.isAsync)&&this._checkIsReady(null)}_checkIsReady(e){ko(()=>this._isReadyInternal()||this._isDisposed,()=>{},t=>{this._processCompilationErrors(t,e)},16,12e4,!0,` - Effect: ${typeof this.name=="string"?this.name:this.key}`)}get vertexSourceCode(){var e,t;return this._vertexSourceCodeOverride&&this._fragmentSourceCodeOverride?this._vertexSourceCodeOverride:(t=(e=this._pipelineContext)==null?void 0:e._getVertexShaderCode())!=null?t:this._vertexSourceCode}get fragmentSourceCode(){var e,t;return this._vertexSourceCodeOverride&&this._fragmentSourceCodeOverride?this._fragmentSourceCodeOverride:(t=(e=this._pipelineContext)==null?void 0:e._getFragmentShaderCode())!=null?t:this._fragmentSourceCode}get vertexSourceCodeBeforeMigration(){return this._vertexSourceCodeBeforeMigration}get fragmentSourceCodeBeforeMigration(){return this._fragmentSourceCodeBeforeMigration}get rawVertexSourceCode(){return this._rawVertexSourceCode}get rawFragmentSourceCode(){return this._rawFragmentSourceCode}getPipelineGenerationOptions(){return{platformName:this._engine.shaderPlatformName,shaderLanguage:this._shaderLanguage,shaderNameOrContent:this.name,key:this._key,defines:this.defines.split(` +`),addGlobalDefines:!1,extendedProcessingOptions:{indexParameters:this._indexParameters,isNDCHalfZRange:this._engine.isNDCHalfZRange,useReverseDepthBuffer:this._engine.useReverseDepthBuffer,supportsUniformBuffers:this._engine.supportsUniformBuffers},extendedCreatePipelineOptions:{transformFeedbackVaryings:this._transformFeedbackVaryings,createAsRaw:!!(this._vertexSourceCodeOverride&&this._fragmentSourceCodeOverride)}}}_rebuildProgram(e,t,i,r){this._isReady=!1,this._vertexSourceCodeOverride=e,this._fragmentSourceCodeOverride=t,this.onError=(s,a)=>{r&&r(a)},this.onCompiled=()=>{var a,o;let s=this.getEngine().scenes;if(s)for(let l=0;lthis._rebuildProgram(l,c,f,h),defines:r,transformFeedbackVaryings:this._transformFeedbackVaryings,name:this._key.replace(/\r/g,"").replace(/\n/g,"|"),createAsRaw:i,disableParallelCompilation:this._disableParallelShaderCompilation,shaderProcessingContext:this._processingContext,onRenderingStateCompiled:l=>{t&&!e&&this._engine._deletePipelineContext(t),l&&this._onRenderingStateCompiled(l)}},this._engine.createPipelineContext.bind(this._engine),this._engine._preparePipelineContextAsync.bind(this._engine),this._engine._executeWhenRenderingStateIsCompiled.bind(this._engine)),this._pipelineContext.isAsync&&this._checkIsReady(t)}catch(i){this._processCompilationErrors(i,t)}}_getShaderCodeAndErrorLine(e,t,i){let r=i?/FRAGMENT SHADER ERROR: 0:(\d+?):/:/VERTEX SHADER ERROR: 0:(\d+?):/,s=null;if(t&&e){let a=t.match(r);if(a&&a.length===2){let o=parseInt(a[1]),l=e.split(` +`,-1);l.length>=o&&(s=`Offending line [${o}] in ${i?"fragment":"vertex"} code: ${l[o-1]}`)}}return[e,s]}_processCompilationErrors(e,t=null){var a,o,l;this._compilationError=e.message;let i=this._attributesNames,r=this._fallbacks;if(J.Error("Unable to compile effect:"),J.Error(`Uniforms: ${this._uniformsNames.join(" ")}`),J.Error(`Attributes: ${i.join(" ")}`),J.Error(`Defines: +`+this.defines),n.LogShaderCodeOnCompilationError){let c=null,f=null,h;(a=this._pipelineContext)!=null&&a._getVertexShaderCode()&&([h,c]=this._getShaderCodeAndErrorLine(this._pipelineContext._getVertexShaderCode(),this._compilationError,!1),h&&(J.Error("Vertex code:"),J.Error(h))),(o=this._pipelineContext)!=null&&o._getFragmentShaderCode()&&([h,f]=this._getShaderCodeAndErrorLine((l=this._pipelineContext)==null?void 0:l._getFragmentShaderCode(),this._compilationError,!0),h&&(J.Error("Fragment code:"),J.Error(h))),c&&J.Error(c),f&&J.Error(f)}J.Error("Error: "+this._compilationError);let s=()=>{this.onError&&this.onError(this,this._compilationError),this.onErrorObservable.notifyObservers(this),this._engine.onEffectErrorObservable.notifyObservers({effect:this,errors:this._compilationError})};t&&(this._pipelineContext=t,this._isReady=!0,s()),r?(this._pipelineContext=null,r.hasMoreFallbacks?(this._allFallbacksProcessed=!1,J.Error("Trying next fallback."),this.defines=r.reduce(this.defines,this),this._prepareEffect()):(this._allFallbacksProcessed=!0,s(),this.onErrorObservable.clear(),this._fallbacks&&this._fallbacks.unBindMesh())):(this._allFallbacksProcessed=!0,t||s())}get isSupported(){return this._compilationError===""}_bindTexture(e,t){this._engine._bindTexture(this._samplers[e],t,e)}setTexture(e,t){this._engine.setTexture(this._samplers[e],this._uniforms[e],t,e)}setTextureArray(e,t){let i=e+"Ex";if(this._samplerList.indexOf(i+"0")===-1){let r=this._samplerList.indexOf(e);for(let a=1;a0||this._isDisposed||(this._onReleaseEffectsObserver&&(this._engine.onReleaseEffectsObservable.remove(this._onReleaseEffectsObserver),this._onReleaseEffectsObserver=null),this._pipelineContext&&ZS(this._pipelineContext),this._engine._releaseEffect(this),this.clearCodeCache(),this._isDisposed=!0)}static RegisterShader(e,t,i,r=0){t&&(T.GetShadersStore(r)[`${e}PixelShader`]=t),i&&(T.GetShadersStore(r)[`${e}VertexShader`]=i)}static ResetCache(){n._BaseCache={}}};$i.LogShaderCodeOnCompilationError=!0;$i.PersistentMode=!1;$i.AutomaticallyClearCodeCache=!1;$i._UniqueIdSeed=0;$i._BaseCache={};$i.ShadersStore=T.ShadersStore;$i.IncludesShadersStore=T.IncludesShadersStore});var Gn,zI=C(()=>{Gn=class n{static SetMatrixPrecision(e){if(n.MatrixTrackPrecisionChange=!1,e&&!n.MatrixUse64Bits&&n.MatrixTrackedMatrices)for(let t=0;t{ma();dr=class{static get Now(){return ar()&&window.performance&&window.performance.now?window.performance.now():Date.now()}}});var $S,r3=C(()=>{$S=class{constructor(e=!0){this._isDepthTestDirty=!1,this._isDepthMaskDirty=!1,this._isDepthFuncDirty=!1,this._isCullFaceDirty=!1,this._isCullDirty=!1,this._isZOffsetDirty=!1,this._isFrontFaceDirty=!1,e&&this.reset()}get isDirty(){return this._isDepthFuncDirty||this._isDepthTestDirty||this._isDepthMaskDirty||this._isCullFaceDirty||this._isCullDirty||this._isZOffsetDirty||this._isFrontFaceDirty}get zOffset(){return this._zOffset}set zOffset(e){this._zOffset!==e&&(this._zOffset=e,this._isZOffsetDirty=!0)}get zOffsetUnits(){return this._zOffsetUnits}set zOffsetUnits(e){this._zOffsetUnits!==e&&(this._zOffsetUnits=e,this._isZOffsetDirty=!0)}get cullFace(){return this._cullFace}set cullFace(e){this._cullFace!==e&&(this._cullFace=e,this._isCullFaceDirty=!0)}get cull(){return this._cull}set cull(e){this._cull!==e&&(this._cull=e,this._isCullDirty=!0)}get depthFunc(){return this._depthFunc}set depthFunc(e){this._depthFunc!==e&&(this._depthFunc=e,this._isDepthFuncDirty=!0)}get depthMask(){return this._depthMask}set depthMask(e){this._depthMask!==e&&(this._depthMask=e,this._isDepthMaskDirty=!0)}get depthTest(){return this._depthTest}set depthTest(e){this._depthTest!==e&&(this._depthTest=e,this._isDepthTestDirty=!0)}get frontFace(){return this._frontFace}set frontFace(e){this._frontFace!==e&&(this._frontFace=e,this._isFrontFaceDirty=!0)}reset(){this._depthMask=!0,this._depthTest=!0,this._depthFunc=null,this._cullFace=null,this._cull=null,this._zOffset=0,this._zOffsetUnits=0,this._frontFace=null,this._isDepthTestDirty=!0,this._isDepthMaskDirty=!0,this._isDepthFuncDirty=!1,this._isCullFaceDirty=!1,this._isCullDirty=!1,this._isZOffsetDirty=!0,this._isFrontFaceDirty=!1}apply(e){this.isDirty&&(this._isCullDirty&&(this.cull?e.enable(e.CULL_FACE):e.disable(e.CULL_FACE),this._isCullDirty=!1),this._isCullFaceDirty&&(e.cullFace(this.cullFace),this._isCullFaceDirty=!1),this._isDepthMaskDirty&&(e.depthMask(this.depthMask),this._isDepthMaskDirty=!1),this._isDepthTestDirty&&(this.depthTest?e.enable(e.DEPTH_TEST):e.disable(e.DEPTH_TEST),this._isDepthTestDirty=!1),this._isDepthFuncDirty&&(e.depthFunc(this.depthFunc),this._isDepthFuncDirty=!1),this._isZOffsetDirty&&(this.zOffset||this.zOffsetUnits?(e.enable(e.POLYGON_OFFSET_FILL),e.polygonOffset(this.zOffset,this.zOffsetUnits)):e.disable(e.POLYGON_OFFSET_FILL),this._isZOffsetDirty=!1),this._isFrontFaceDirty&&(e.frontFace(this.frontFace),this._isFrontFaceDirty=!1))}}});var JS,n3=C(()=>{JS=class{get isDirty(){return this._isStencilTestDirty||this._isStencilMaskDirty||this._isStencilFuncDirty||this._isStencilOpDirty}get func(){return this._func}set func(e){this._func!==e&&(this._func=e,this._isStencilFuncDirty=!0)}get backFunc(){return this._func}set backFunc(e){this._backFunc!==e&&(this._backFunc=e,this._isStencilFuncDirty=!0)}get funcRef(){return this._funcRef}set funcRef(e){this._funcRef!==e&&(this._funcRef=e,this._isStencilFuncDirty=!0)}get funcMask(){return this._funcMask}set funcMask(e){this._funcMask!==e&&(this._funcMask=e,this._isStencilFuncDirty=!0)}get opStencilFail(){return this._opStencilFail}set opStencilFail(e){this._opStencilFail!==e&&(this._opStencilFail=e,this._isStencilOpDirty=!0)}get opDepthFail(){return this._opDepthFail}set opDepthFail(e){this._opDepthFail!==e&&(this._opDepthFail=e,this._isStencilOpDirty=!0)}get opStencilDepthPass(){return this._opStencilDepthPass}set opStencilDepthPass(e){this._opStencilDepthPass!==e&&(this._opStencilDepthPass=e,this._isStencilOpDirty=!0)}get backOpStencilFail(){return this._backOpStencilFail}set backOpStencilFail(e){this._backOpStencilFail!==e&&(this._backOpStencilFail=e,this._isStencilOpDirty=!0)}get backOpDepthFail(){return this._backOpDepthFail}set backOpDepthFail(e){this._backOpDepthFail!==e&&(this._backOpDepthFail=e,this._isStencilOpDirty=!0)}get backOpStencilDepthPass(){return this._backOpStencilDepthPass}set backOpStencilDepthPass(e){this._backOpStencilDepthPass!==e&&(this._backOpStencilDepthPass=e,this._isStencilOpDirty=!0)}get mask(){return this._mask}set mask(e){this._mask!==e&&(this._mask=e,this._isStencilMaskDirty=!0)}get enabled(){return this._enabled}set enabled(e){this._enabled!==e&&(this._enabled=e,this._isStencilTestDirty=!0)}constructor(e=!0){this._isStencilTestDirty=!1,this._isStencilMaskDirty=!1,this._isStencilFuncDirty=!1,this._isStencilOpDirty=!1,this.useStencilGlobalOnly=!1,e&&this.reset()}reset(){var e;this.stencilMaterial=void 0,(e=this.stencilGlobal)==null||e.reset(),this._isStencilTestDirty=!0,this._isStencilMaskDirty=!0,this._isStencilFuncDirty=!0,this._isStencilOpDirty=!0}apply(e){var i;if(!e)return;let t=!this.useStencilGlobalOnly&&!!((i=this.stencilMaterial)!=null&&i.enabled);this.enabled=t?this.stencilMaterial.enabled:this.stencilGlobal.enabled,this.func=t?this.stencilMaterial.func:this.stencilGlobal.func,this.backFunc=t?this.stencilMaterial.backFunc:this.stencilGlobal.backFunc,this.funcRef=t?this.stencilMaterial.funcRef:this.stencilGlobal.funcRef,this.funcMask=t?this.stencilMaterial.funcMask:this.stencilGlobal.funcMask,this.opStencilFail=t?this.stencilMaterial.opStencilFail:this.stencilGlobal.opStencilFail,this.opDepthFail=t?this.stencilMaterial.opDepthFail:this.stencilGlobal.opDepthFail,this.opStencilDepthPass=t?this.stencilMaterial.opStencilDepthPass:this.stencilGlobal.opStencilDepthPass,this.backOpStencilFail=t?this.stencilMaterial.backOpStencilFail:this.stencilGlobal.backOpStencilFail,this.backOpDepthFail=t?this.stencilMaterial.backOpDepthFail:this.stencilGlobal.backOpDepthFail,this.backOpStencilDepthPass=t?this.stencilMaterial.backOpStencilDepthPass:this.stencilGlobal.backOpStencilDepthPass,this.mask=t?this.stencilMaterial.mask:this.stencilGlobal.mask,this.isDirty&&(this._isStencilTestDirty&&(this.enabled?e.enable(e.STENCIL_TEST):e.disable(e.STENCIL_TEST),this._isStencilTestDirty=!1),this._isStencilMaskDirty&&(e.stencilMask(this.mask),this._isStencilMaskDirty=!1),this._isStencilFuncDirty&&(e.stencilFuncSeparate(e.FRONT,this.func,this.funcRef,this.funcMask),e.stencilFuncSeparate(e.BACK,this.backFunc,this.funcRef,this.funcMask),this._isStencilFuncDirty=!1),this._isStencilOpDirty&&(e.stencilOpSeparate(e.FRONT,this.opStencilFail,this.opDepthFail,this.opStencilDepthPass),e.stencilOpSeparate(e.BACK,this.backOpStencilFail,this.backOpDepthFail,this.backOpStencilDepthPass),this._isStencilOpDirty=!1))}}});var Ah,s3=C(()=>{Ah=class n{constructor(){this.reset()}reset(){this.enabled=!1,this.mask=255,this.funcRef=1,this.funcMask=255,this.func=n.ALWAYS,this.opStencilFail=n.KEEP,this.opDepthFail=n.KEEP,this.opStencilDepthPass=n.REPLACE,this.backFunc=n.ALWAYS,this.backOpStencilFail=n.KEEP,this.backOpDepthFail=n.KEEP,this.backOpStencilDepthPass=n.REPLACE}get stencilFunc(){return this.func}set stencilFunc(e){this.func=e}get stencilBackFunc(){return this.backFunc}set stencilBackFunc(e){this.backFunc=e}get stencilFuncRef(){return this.funcRef}set stencilFuncRef(e){this.funcRef=e}get stencilFuncMask(){return this.funcMask}set stencilFuncMask(e){this.funcMask=e}get stencilOpStencilFail(){return this.opStencilFail}set stencilOpStencilFail(e){this.opStencilFail=e}get stencilOpDepthFail(){return this.opDepthFail}set stencilOpDepthFail(e){this.opDepthFail=e}get stencilOpStencilDepthPass(){return this.opStencilDepthPass}set stencilOpStencilDepthPass(e){this.opStencilDepthPass=e}get stencilBackOpStencilFail(){return this.backOpStencilFail}set stencilBackOpStencilFail(e){this.backOpStencilFail=e}get stencilBackOpDepthFail(){return this.backOpDepthFail}set stencilBackOpDepthFail(e){this.backOpDepthFail=e}get stencilBackOpStencilDepthPass(){return this.backOpStencilDepthPass}set stencilBackOpStencilDepthPass(e){this.backOpStencilDepthPass=e}get stencilMask(){return this.mask}set stencilMask(e){this.mask=e}get stencilTest(){return this.enabled}set stencilTest(e){this.enabled=e}};Ah.ALWAYS=519;Ah.KEEP=7680;Ah.REPLACE=7681});var Iu,XI=C(()=>{Iu=class{constructor(e){this._supportBlendParametersPerTarget=e,this._blendFunctionParameters=new Array(32),this._blendEquationParameters=new Array(16),this._blendConstants=new Array(4),this._isBlendConstantsDirty=!1,this._alphaBlend=Array(8).fill(!1),this._numTargetEnabled=0,this._isAlphaBlendDirty=!1,this._isBlendFunctionParametersDirty=!1,this._isBlendEquationParametersDirty=!1,this.reset()}get isDirty(){return this._isAlphaBlendDirty||this._isBlendFunctionParametersDirty||this._isBlendEquationParametersDirty}get alphaBlend(){return this._numTargetEnabled>0}set alphaBlend(e){this.setAlphaBlend(e)}setAlphaBlend(e,t=0){this._alphaBlend[t]!==e&&(e?this._numTargetEnabled++:this._numTargetEnabled--,this._alphaBlend[t]=e,this._isAlphaBlendDirty=!0)}setAlphaBlendConstants(e,t,i,r){this._blendConstants[0]===e&&this._blendConstants[1]===t&&this._blendConstants[2]===i&&this._blendConstants[3]===r||(this._blendConstants[0]=e,this._blendConstants[1]=t,this._blendConstants[2]=i,this._blendConstants[3]=r,this._isBlendConstantsDirty=!0)}setAlphaBlendFunctionParameters(e,t,i,r,s=0){let a=s*4;this._blendFunctionParameters[a+0]===e&&this._blendFunctionParameters[a+1]===t&&this._blendFunctionParameters[a+2]===i&&this._blendFunctionParameters[a+3]===r||(this._blendFunctionParameters[a+0]=e,this._blendFunctionParameters[a+1]=t,this._blendFunctionParameters[a+2]=i,this._blendFunctionParameters[a+3]=r,this._isBlendFunctionParametersDirty=!0)}setAlphaEquationParameters(e,t,i=0){let r=i*2;this._blendEquationParameters[r+0]===e&&this._blendEquationParameters[r+1]===t||(this._blendEquationParameters[r+0]=e,this._blendEquationParameters[r+1]=t,this._isBlendEquationParametersDirty=!0)}reset(){this._alphaBlend.fill(!1),this._numTargetEnabled=0,this._blendFunctionParameters.fill(null),this._blendEquationParameters.fill(null),this._blendConstants[0]=null,this._blendConstants[1]=null,this._blendConstants[2]=null,this._blendConstants[3]=null,this._isAlphaBlendDirty=!0,this._isBlendFunctionParametersDirty=!1,this._isBlendEquationParametersDirty=!1,this._isBlendConstantsDirty=!1}apply(e,t=1){if(!this.isDirty)return;if(this._isBlendConstantsDirty&&(e.blendColor(this._blendConstants[0],this._blendConstants[1],this._blendConstants[2],this._blendConstants[3]),this._isBlendConstantsDirty=!1),t===1||!this._supportBlendParametersPerTarget){this._isAlphaBlendDirty&&(this._alphaBlend[0]?e.enable(e.BLEND):e.disable(e.BLEND),this._isAlphaBlendDirty=!1),this._isBlendFunctionParametersDirty&&(e.blendFuncSeparate(this._blendFunctionParameters[0],this._blendFunctionParameters[1],this._blendFunctionParameters[2],this._blendFunctionParameters[3]),this._isBlendFunctionParametersDirty=!1),this._isBlendEquationParametersDirty&&(e.blendEquationSeparate(this._blendEquationParameters[0],this._blendEquationParameters[1]),this._isBlendEquationParametersDirty=!1);return}let i=e;if(this._isAlphaBlendDirty){for(let r=0;r{hi();Th();Pi();Pt();zI();Pl();r3();n3();s3();XI();ln();Ws();ma();$c();Re=class n{get frameId(){return this._frameId}get isWebGPU(){return this._isWebGPU}_getShaderProcessor(e){return this._shaderProcessor}_resetAlphaMode(){this._alphaMode.fill(-1),this._alphaEquation.fill(-1)}get shaderPlatformName(){return this._shaderPlatformName}_clearEmptyResources(){this._emptyTexture=null,this._emptyCubeTexture=null,this._emptyTexture3D=null,this._emptyTexture2DArray=null}get useReverseDepthBuffer(){return this._useReverseDepthBuffer}set useReverseDepthBuffer(e){e!==this._useReverseDepthBuffer&&(this._useReverseDepthBuffer=e,e?this._depthCullingState.depthFunc=518:this._depthCullingState.depthFunc=515)}setColorWrite(e){e!==this._colorWrite&&(this._colorWriteChanged=!0,this._colorWrite=e)}getColorWrite(){return this._colorWrite}get depthCullingState(){return this._depthCullingState}get alphaState(){return this._alphaState}get stencilState(){return this._stencilState}get stencilStateComposer(){return this._stencilStateComposer}_getGlobalDefines(e){if(e){this.isNDCHalfZRange?e.IS_NDC_HALF_ZRANGE="":delete e.IS_NDC_HALF_ZRANGE,this.useReverseDepthBuffer?e.USE_REVERSE_DEPTHBUFFER="":delete e.USE_REVERSE_DEPTHBUFFER,this.useExactSrgbConversions?e.USE_EXACT_SRGB_CONVERSIONS="":delete e.USE_EXACT_SRGB_CONVERSIONS;return}else{let t="";return this.isNDCHalfZRange&&(t+="#define IS_NDC_HALF_ZRANGE"),this.useReverseDepthBuffer&&(t&&(t+=` `),t+="#define USE_REVERSE_DEPTHBUFFER"),this.useExactSrgbConversions&&(t&&(t+=` -`),t+="#define USE_EXACT_SRGB_CONVERSIONS"),t}}_rebuildInternalTextures(){let e=this._internalTexturesCache.slice();for(let t of e)t._rebuild()}_rebuildRenderTargetWrappers(){let e=this._renderTargetWrapperCache.slice();for(let t of e)t._rebuild()}_rebuildEffects(){for(let e in this._compiledEffects){let t=this._compiledEffects[e];t._pipelineContext=null,t._prepareEffect()}Ji.ResetCache()}_rebuildGraphicsResources(){var e;this.wipeCaches(!0),this._rebuildEffects(),(e=this._rebuildComputeEffects)==null||e.call(this),this._rebuildBuffers(),this._rebuildInternalTextures(),this._rebuildTextures(),this._rebuildRenderTargetWrappers(),this.wipeCaches(!0)}_flagContextRestored(){$.Warn(this.name+" context successfully restored."),this.onContextRestoredObservable.notifyObservers(this),this._contextWasLost=!1}_restoreEngineAfterContextLost(e){setTimeout(()=>{this._clearEmptyResources();let t=this._depthCullingState.depthTest,i=this._depthCullingState.depthFunc,r=this._depthCullingState.depthMask,s=this._stencilState.stencilTest;e(),this._rebuildGraphicsResources(),this._depthCullingState.depthTest=t,this._depthCullingState.depthFunc=i,this._depthCullingState.depthMask=r,this._stencilState.stencilTest=s,this._flagContextRestored()},0)}get isDisposed(){return this._isDisposed}get snapshotRendering(){return!1}set snapshotRendering(e){}get snapshotRenderingMode(){return 0}set snapshotRenderingMode(e){}getClassName(){return"AbstractEngine"}get emptyTexture(){return this._emptyTexture||(this._emptyTexture=this.createRawTexture(new Uint8Array(4),1,1,5,!1,!1,1)),this._emptyTexture}get emptyTexture3D(){return this._emptyTexture3D||(this._emptyTexture3D=this.createRawTexture3D(new Uint8Array(4),1,1,1,5,!1,!1,1)),this._emptyTexture3D}get emptyTexture2DArray(){return this._emptyTexture2DArray||(this._emptyTexture2DArray=this.createRawTexture2DArray(new Uint8Array(4),1,1,1,5,!1,!1,1)),this._emptyTexture2DArray}get emptyCubeTexture(){if(!this._emptyCubeTexture){let e=new Uint8Array(4),t=[e,e,e,e,e,e];this._emptyCubeTexture=this.createRawCubeTexture(t,1,5,0,!1,!1,1)}return this._emptyCubeTexture}get activeRenderLoops(){return this._activeRenderLoops}stopRenderLoop(e){if(!e){this._activeRenderLoops.length=0,this._cancelFrame();return}let t=this._activeRenderLoops.indexOf(e);t>=0&&(this._activeRenderLoops.splice(t,1),this._activeRenderLoops.length==0&&this._cancelFrame())}_cancelFrame(){if(this._frameHandler!==0){let e=this._frameHandler;if(this._frameHandler=0,ar()){let{cancelAnimationFrame:t}=this.getHostWindow()||window;if(typeof t=="function")return t(e)}else if(typeof cancelAnimationFrame=="function")return cancelAnimationFrame(e);return clearTimeout(e)}}beginFrame(){this.onBeginFrameObservable.notifyObservers(this)}endFrame(){this._frameId++,this.onEndFrameObservable.notifyObservers(this)}get maxFPS(){return this._maxFPS}set maxFPS(e){if(this._maxFPS=e,e!==void 0){if(e<=0){this._minFrameTime=Number.MAX_VALUE;return}this._minFrameTime=1e3/e}}_isOverFrameTime(e){if(!e||this._maxFPS===void 0)return!1;let t=e-this._lastFrameTime;return this._lastFrameTime=e,this._renderAccumulator+=t,this._renderAccumulatorthis._minFrameTime&&(this._renderAccumulator=this._minFrameTime),!1)}_processFrame(e){if(this._frameHandler=0,!this._contextWasLost&&!this._isOverFrameTime(e)){let t=!0;(this.isDisposed||!this.renderEvenInBackground&&this._windowIsBackground)&&(t=!1),t&&(this.beginFrame(),!this.skipFrameRender&&!this._renderViews()&&this._renderFrame(),this.endFrame())}}_renderLoop(e){this._processFrame(e),this._activeRenderLoops.length>0&&this._frameHandler===0&&(this._frameHandler=this._queueNewFrame(this._boundRenderFunction,this.getHostWindow()))}_renderFrame(){for(let e=0;e-1?e.substring(T).toLowerCase():"");R.indexOf("?")>-1&&(R=R.split("?")[0]);let y=n.GetCompatibleTextureLoader(R,m);r&&r.addPendingData(A),A.url=e,A.generateMipMaps=!t,A.samplingMode=s,A.invertY=i,A._useSRGBBuffer=this._getUseSRGBBuffer(!!p,t),this._doNotHandleContextLost||(A._buffer=f);let M=null;a&&!h&&(M=A.onLoadedObservable.add(a)),h||this._internalTexturesCache.push(A);let D=(O,V)=>{r&&r.removePendingData(A),e===E?(M&&A.onLoadedObservable.remove(M),Le.UseFallbackTexture&&e!==Le.FallbackTexture&&this._createTextureBase(Le.FallbackTexture,t,A.invertY,r,s,null,o,l,c,f,A),O=(O||"Unknown error")+(Le.UseFallbackTexture?" - Fallback texture was used":""),A.onErrorObservable.notifyObservers({message:O,exception:V}),o&&o(O,V)):($.Warn(`Failed to load ${e}, falling back to ${E}`),this._createTextureBase(E,t,A.invertY,r,s,a,o,l,c,f,A,d,u,m,_,p))};if(y){let O=async V=>{(await y).loadData(V,A,(w,U,G,J,Y,Q)=>{Q?D("TextureLoader failed to load data"):l(A,R,r,{width:w,height:U},A.invertY,!G,J,()=>(Y(),!1),s)},_)};if(!f)this._loadFile(e,async V=>{try{await O(new Uint8Array(V))}catch(N){D("Failed to parse texture data",N)}},void 0,r?r.offlineProvider:void 0,!0,(V,N)=>{D("Unable to load "+(V&&V.responseURL,N))});else{let V=async N=>{try{await O(N)}catch(w){D("Failed to parse texture data",w)}};f instanceof ArrayBuffer?V(new Uint8Array(f)):ArrayBuffer.isView(f)?V(f):o&&o("Unable to load: only ArrayBuffer or ArrayBufferView is supported",null)}}else{let O=V=>{v&&!this._doNotHandleContextLost&&(A._buffer=V),l(A,R,r,V,A.invertY,t,!1,c,s)};!g||x?f&&(typeof f.decoding=="string"||f.close)?O(f):n._FileToolsLoadImage(e||"",O,D,r?r.offlineProvider:null,m,A.invertY&&this._features.needsInvertingBitmap?{imageOrientation:"flipY"}:void 0,this):typeof f=="string"||f instanceof ArrayBuffer||ArrayBuffer.isView(f)||f instanceof Blob?n._FileToolsLoadImage(f,O,D,r?r.offlineProvider:null,m,A.invertY&&this._features.needsInvertingBitmap?{imageOrientation:"flipY"}:void 0,this):f&&O(f)}return A}_rebuildBuffers(){for(let e of this._uniformBuffers)e._rebuildAfterContextLost()}get _shouldUseHighPrecisionShader(){return!!(this._caps.highPrecisionShaderSupported&&this._highPrecisionShadersAllowed)}getHostDocument(){return this._renderingCanvas&&this._renderingCanvas.ownerDocument?this._renderingCanvas.ownerDocument:jc()?document:null}getLoadedTexturesCache(){return this._internalTexturesCache}clearInternalTexturesCache(){this._internalTexturesCache.length=0}getCaps(){return this._caps}resetTextureCache(){for(let e in this._boundTexturesCache)Object.prototype.hasOwnProperty.call(this._boundTexturesCache,e)&&(this._boundTexturesCache[e]=null);this._currentTextureChannel=-1}get name(){return this._name}set name(e){this._name=e}static get NpmPackage(){return"babylonjs@9.6.0"}static get Version(){return"9.6.0"}getRenderingCanvas(){return this._renderingCanvas}getAudioContext(){return this._audioContext}getAudioDestination(){return this._audioDestination}setHardwareScalingLevel(e){this._hardwareScalingLevel=e,this.resize()}getHardwareScalingLevel(){return this._hardwareScalingLevel}get doNotHandleContextLost(){return this._doNotHandleContextLost}set doNotHandleContextLost(e){this._doNotHandleContextLost=e}get isStencilEnable(){return this._isStencilEnable}getCreationOptions(){return this._creationOptions}constructor(e,t,i){var a,o,l,c,f,h,d,u,m,_;this._colorWrite=!0,this._colorWriteChanged=!0,this._depthCullingState=new WS,this._stencilStateComposer=new HS,this._stencilState=new Th,this._alphaState=new Au(!1),this._alphaMode=Array(8).fill(-1),this._alphaEquation=Array(8).fill(-1),this._activeRequests=[],this._badOS=!1,this._badDesktopOS=!1,this._compatibilityMode=!0,this._internalTexturesCache=new Array,this._currentRenderTarget=null,this._boundTexturesCache={},this._activeChannel=0,this._currentTextureChannel=-1,this._viewportCached={x:0,y:0,z:0,w:0},this._isWebGPU=!1,this._enableGPUDebugMarkers=!1,this.onCanvasBlurObservable=new ee,this.onCanvasFocusObservable=new ee,this.onNewSceneAddedObservable=new ee,this.onResizeObservable=new ee,this.onCanvasPointerOutObservable=new ee,this.onEffectErrorObservable=new ee,this.disablePerformanceMonitorInBackground=!1,this.disableVertexArrayObjects=!1,this._frameId=0,this.hostInformation={isMobile:!1},this.isFullscreen=!1,this.enableOfflineSupport=!1,this.disableManifestCheck=!1,this.disableContextMenu=!0,this.currentRenderPassId=0,this.isPointerLock=!1,this.postProcesses=[],this.canvasTabIndex=1,this._contextWasLost=!1,this._useReverseDepthBuffer=!1,this.isNDCHalfZRange=!1,this.hasOriginBottomLeft=!0,this._renderTargetWrapperCache=new Array,this._compiledEffects={},this._isDisposed=!1,this.scenes=[],this._virtualScenes=new Array,this.onBeforeTextureInitObservable=new ee,this.renderEvenInBackground=!0,this.preventCacheWipeBetweenFrames=!1,this._frameHandler=0,this._activeRenderLoops=new Array,this._windowIsBackground=!1,this._boundRenderFunction=p=>this._renderLoop(p),this._lastFrameTime=0,this._renderAccumulator=0,this.skipFrameRender=!1,this.onBeforeShaderCompilationObservable=new ee,this.onAfterShaderCompilationObservable=new ee,this.onBeginFrameObservable=new ee,this.onEndFrameObservable=new ee,this._transformTextureUrl=null,this._uniformBuffers=new Array,this._storageBuffers=new Array,this._highPrecisionShadersAllowed=!0,this.onContextLostObservable=new ee,this.onContextRestoredObservable=new ee,this._name="",this.premultipliedAlpha=!0,this.adaptToDeviceRatio=!1,this._lastDevicePixelRatio=1,this._doNotHandleContextLost=!1,this.cullBackFaces=null,this._renderPassNames=["main"],this._fps=60,this._deltaTime=0,this._deterministicLockstep=!1,this._lockstepMaxSteps=4,this._timeStep=1/60,this.onDisposeObservable=new ee,this.onReleaseEffectsObservable=new ee,Le.Instances.push(this),this.startTime=fr.Now,this._stencilStateComposer.stencilGlobal=this._stencilState,Gn.SetMatrixPrecision(!!t.useLargeWorldRendering||!!t.useHighPrecisionMatrix),Ml()&&navigator.userAgent&&(this._badOS=/iPad/i.test(navigator.userAgent)||/iPhone/i.test(navigator.userAgent),this._badDesktopOS=/^((?!chrome|android).)*safari/i.test(navigator.userAgent)),this.adaptToDeviceRatio=i!=null?i:!1,t.antialias=e!=null?e:t.antialias,t.deterministicLockstep=(a=t.deterministicLockstep)!=null?a:!1,t.lockstepMaxSteps=(o=t.lockstepMaxSteps)!=null?o:4,t.timeStep=(l=t.timeStep)!=null?l:1/60,t.stencil=(c=t.stencil)!=null?c:!0,this._audioContext=(h=(f=t.audioEngineOptions)==null?void 0:f.audioContext)!=null?h:null,this._audioDestination=(u=(d=t.audioEngineOptions)==null?void 0:d.audioDestination)!=null?u:null,this.premultipliedAlpha=(m=t.premultipliedAlpha)!=null?m:!0,this._doNotHandleContextLost=!!t.doNotHandleContextLost,this._isStencilEnable=!!t.stencil,this.useExactSrgbConversions=(_=t.useExactSrgbConversions)!=null?_:!1;let r=ar()&&window.devicePixelRatio||1,s=t.limitDeviceRatio||r;i=i||t.adaptToDeviceRatio||!1,this._hardwareScalingLevel=i?1/Math.min(s,r):1,this._lastDevicePixelRatio=r,this._creationOptions=t}resize(e=!1){var r,s;let t,i;if(this.adaptToDeviceRatio){let a=ar()&&window.devicePixelRatio||1,o=this._lastDevicePixelRatio/a;this._lastDevicePixelRatio=a,this._hardwareScalingLevel*=o}if(ar()&&jc())if(this._renderingCanvas){let a=(s=(r=this._renderingCanvas).getBoundingClientRect)==null?void 0:s.call(r);t=this._renderingCanvas.clientWidth||(a==null?void 0:a.width)||this._renderingCanvas.width*this._hardwareScalingLevel||100,i=this._renderingCanvas.clientHeight||(a==null?void 0:a.height)||this._renderingCanvas.height*this._hardwareScalingLevel||100}else t=window.innerWidth,i=window.innerHeight;else t=this._renderingCanvas?this._renderingCanvas.width:100,i=this._renderingCanvas?this._renderingCanvas.height:100;this.setSize(t/this._hardwareScalingLevel,i/this._hardwareScalingLevel,e)}setSize(e,t,i=!1){if(!this._renderingCanvas||(e=e|0,t=t|0,!i&&this._renderingCanvas.width===e&&this._renderingCanvas.height===t))return!1;if(this._renderingCanvas.width=e,this._renderingCanvas.height=t,this.scenes){for(let r=0;r{let e=navigator.userAgent;this.hostInformation.isMobile=e.indexOf("Mobile")!==-1||e.indexOf("Mac")!==-1&&jc()&&"ontouchend"in document},this._checkForMobile(),ar()&&window.addEventListener("resize",this._checkForMobile))}createVideoElement(e){return document.createElement("video")}_reportDrawCall(e=1){var t;(t=this._drawCalls)==null||t.addCount(e,!1)}getFps(){return this._fps}getDeltaTime(){return this._deltaTime}isDeterministicLockStep(){return this._deterministicLockstep}getLockstepMaxSteps(){return this._lockstepMaxSteps}getTimeStep(){return this._timeStep*1e3}_createImageBitmapFromSource(e,t){throw new Error("createImageBitmapFromSource is not implemented")}createImageBitmap(e,t){return createImageBitmap(e,t)}resizeImageBitmap(e,t,i){throw new Error("resizeImageBitmap is not implemented")}getFontOffset(e){throw new Error("getFontOffset is not implemented")}static _CreateCanvas(e,t){if(typeof document=="undefined")return new OffscreenCanvas(e,t);let i=document.createElement("canvas");return i.width=e,i.height=t,i}createCanvas(e,t){return n._CreateCanvas(e,t)}static _FileToolsLoadImage(e,t,i,r,s,a,o){throw Xe("FileTools")}_loadFile(e,t,i,r,s,a){let o=IS(e,t,i,r,s,a);return this._activeRequests.push(o),o.onCompleteObservable.add(()=>{let l=this._activeRequests.indexOf(o);l!==-1&&this._activeRequests.splice(l,1)}),o}static _FileToolsLoadFile(e,t,i,r,s,a){if(Eu.loadFile)return Eu.loadFile(e,t,i,r,s,a);throw Xe("FileTools")}dispose(){var t;for(this.releaseEffects(),this._isDisposed=!0,this.stopRenderLoop(),this._emptyTexture&&(this._releaseTexture(this._emptyTexture),this._emptyTexture=null),this._emptyCubeTexture&&(this._releaseTexture(this._emptyCubeTexture),this._emptyCubeTexture=null),this._renderingCanvas=null,this.onBeforeTextureInitObservable&&this.onBeforeTextureInitObservable.clear();this.postProcesses.length;)this.postProcesses[0].dispose();for(;this.scenes.length;)this.scenes[0].dispose();for(;this._virtualScenes.length;)this._virtualScenes[0].dispose();(t=this.releaseComputeEffects)==null||t.call(this),Ji.ResetCache();for(let i of this._activeRequests)i.abort();this._boundRenderFunction=null,this.onDisposeObservable.notifyObservers(this),this.onDisposeObservable.clear(),this.onResizeObservable.clear(),this.onCanvasBlurObservable.clear(),this.onCanvasFocusObservable.clear(),this.onCanvasPointerOutObservable.clear(),this.onNewSceneAddedObservable.clear(),this.onEffectErrorObservable.clear(),ar()&&window.removeEventListener("resize",this._checkForMobile);let e=Le.Instances.indexOf(this);e>=0&&Le.Instances.splice(e,1),Le.Instances.length||(Le.OnEnginesDisposedObservable.notifyObservers(this),Le.OnEnginesDisposedObservable.clear()),this.onBeginFrameObservable.clear(),this.onEndFrameObservable.clear()}static DefaultLoadingScreenFactory(e){throw Xe("LoadingScreen")}static MarkAllMaterialsAsDirty(e,t){for(let i=0;i{});var XS,Z1=C(()=>{XS=class{constructor(){this.shaderLanguage=0}postProcessor(e,t,i,r,s){if(s.drawBuffersExtensionDisabled){let a=/#extension.+GL_EXT_draw_buffers.+(enable|require)/g;e=e.replace(a,"")}return e}}});var Zte,YS,Q1=C(()=>{Zte=/(flat\s)?\s*varying\s*.*/,YS=class{constructor(){this.shaderLanguage=0}attributeProcessor(e){return e.replace("attribute","in")}varyingCheck(e,t){return Zte.test(e)}varyingProcessor(e,t){return e.replace("varying",t?"in":"out")}postProcessor(e,t,i){let r=e.search(/#extension.+GL_EXT_draw_buffers.+require/)!==-1,s=/#extension.+(GL_OVR_multiview2|GL_OES_standard_derivatives|GL_EXT_shader_texture_lod|GL_EXT_frag_depth|GL_EXT_draw_buffers).+(enable|require)/g;if(e=e.replace(s,""),e=e.replace(/texture2D\s*\(/g,"texture("),i){let a=e.search(/layout *\(location *= *0\) *out/g)!==-1,o=t.indexOf("#define DUAL_SOURCE_BLENDING")!==-1,l=o?`layout(location = 0, index = 0) out vec4 glFragColor; +`),t+="#define USE_EXACT_SRGB_CONVERSIONS"),t}}_rebuildInternalTextures(){let e=this._internalTexturesCache.slice();for(let t of e)t._rebuild()}_rebuildRenderTargetWrappers(){let e=this._renderTargetWrapperCache.slice();for(let t of e)t._rebuild()}_rebuildEffects(){for(let e in this._compiledEffects){let t=this._compiledEffects[e];t._pipelineContext=null,t._prepareEffect()}$i.ResetCache()}_rebuildGraphicsResources(){var e;this.wipeCaches(!0),this._rebuildEffects(),(e=this._rebuildComputeEffects)==null||e.call(this),this._rebuildBuffers(),this._rebuildInternalTextures(),this._rebuildTextures(),this._rebuildRenderTargetWrappers(),this.wipeCaches(!0)}_flagContextRestored(){J.Warn(this.name+" context successfully restored."),this.onContextRestoredObservable.notifyObservers(this),this._contextWasLost=!1}_restoreEngineAfterContextLost(e){setTimeout(()=>{this._clearEmptyResources();let t=this._depthCullingState.depthTest,i=this._depthCullingState.depthFunc,r=this._depthCullingState.depthMask,s=this._stencilState.stencilTest;e(),this._rebuildGraphicsResources(),this._depthCullingState.depthTest=t,this._depthCullingState.depthFunc=i,this._depthCullingState.depthMask=r,this._stencilState.stencilTest=s,this._flagContextRestored()},0)}get isDisposed(){return this._isDisposed}get snapshotRendering(){return!1}set snapshotRendering(e){}get snapshotRenderingMode(){return 0}set snapshotRenderingMode(e){}getClassName(){return"AbstractEngine"}get emptyTexture(){return this._emptyTexture||(this._emptyTexture=this.createRawTexture(new Uint8Array(4),1,1,5,!1,!1,1)),this._emptyTexture}get emptyTexture3D(){return this._emptyTexture3D||(this._emptyTexture3D=this.createRawTexture3D(new Uint8Array(4),1,1,1,5,!1,!1,1)),this._emptyTexture3D}get emptyTexture2DArray(){return this._emptyTexture2DArray||(this._emptyTexture2DArray=this.createRawTexture2DArray(new Uint8Array(4),1,1,1,5,!1,!1,1)),this._emptyTexture2DArray}get emptyCubeTexture(){if(!this._emptyCubeTexture){let e=new Uint8Array(4),t=[e,e,e,e,e,e];this._emptyCubeTexture=this.createRawCubeTexture(t,1,5,0,!1,!1,1)}return this._emptyCubeTexture}get activeRenderLoops(){return this._activeRenderLoops}stopRenderLoop(e){if(!e){this._activeRenderLoops.length=0,this._cancelFrame();return}let t=this._activeRenderLoops.indexOf(e);t>=0&&(this._activeRenderLoops.splice(t,1),this._activeRenderLoops.length==0&&this._cancelFrame())}_cancelFrame(){if(this._frameHandler!==0){let e=this._frameHandler;if(this._frameHandler=0,ar()){let{cancelAnimationFrame:t}=this.getHostWindow()||window;if(typeof t=="function")return t(e)}else if(typeof cancelAnimationFrame=="function")return cancelAnimationFrame(e);return clearTimeout(e)}}beginFrame(){this.onBeginFrameObservable.notifyObservers(this)}endFrame(){this._frameId++,this.onEndFrameObservable.notifyObservers(this)}get maxFPS(){return this._maxFPS}set maxFPS(e){if(this._maxFPS=e,e!==void 0){if(e<=0){this._minFrameTime=Number.MAX_VALUE;return}this._minFrameTime=1e3/e}}_isOverFrameTime(e){if(!e||this._maxFPS===void 0)return!1;let t=e-this._lastFrameTime;return this._lastFrameTime=e,this._renderAccumulator+=t,this._renderAccumulatorthis._minFrameTime&&(this._renderAccumulator=this._minFrameTime),!1)}_processFrame(e){if(this._frameHandler=0,!this._contextWasLost&&!this._isOverFrameTime(e)){let t=!0;(this.isDisposed||!this.renderEvenInBackground&&this._windowIsBackground)&&(t=!1),t&&(this.beginFrame(),!this.skipFrameRender&&!this._renderViews()&&this._renderFrame(),this.endFrame())}}_renderLoop(e){this._processFrame(e),this._activeRenderLoops.length>0&&this._frameHandler===0&&(this._frameHandler=this._queueNewFrame(this._boundRenderFunction,this.getHostWindow()))}_renderFrame(){for(let e=0;e-1?e.substring(E).toLowerCase():"");R.indexOf("?")>-1&&(R=R.split("?")[0]);let y=n.GetCompatibleTextureLoader(R,m);r&&r.addPendingData(A),A.url=e,A.generateMipMaps=!t,A.samplingMode=s,A.invertY=i,A._useSRGBBuffer=this._getUseSRGBBuffer(!!p,t),this._doNotHandleContextLost||(A._buffer=f);let M=null;a&&!h&&(M=A.onLoadedObservable.add(a)),h||this._internalTexturesCache.push(A);let D=(O,V)=>{r&&r.removePendingData(A),e===S?(M&&A.onLoadedObservable.remove(M),Le.UseFallbackTexture&&e!==Le.FallbackTexture&&this._createTextureBase(Le.FallbackTexture,t,A.invertY,r,s,null,o,l,c,f,A),O=(O||"Unknown error")+(Le.UseFallbackTexture?" - Fallback texture was used":""),A.onErrorObservable.notifyObservers({message:O,exception:V}),o&&o(O,V)):(J.Warn(`Failed to load ${e}, falling back to ${S}`),this._createTextureBase(S,t,A.invertY,r,s,a,o,l,c,f,A,d,u,m,_,p))};if(y){let O=async V=>{(await y).loadData(V,A,(F,U,W,$,q,Z)=>{Z?D("TextureLoader failed to load data"):l(A,R,r,{width:F,height:U},A.invertY,!W,$,()=>(q(),!1),s)},_)};if(!f)this._loadFile(e,async V=>{try{await O(new Uint8Array(V))}catch(N){D("Failed to parse texture data",N)}},void 0,r?r.offlineProvider:void 0,!0,(V,N)=>{D("Unable to load "+(V&&V.responseURL,N))});else{let V=async N=>{try{await O(N)}catch(F){D("Failed to parse texture data",F)}};f instanceof ArrayBuffer?V(new Uint8Array(f)):ArrayBuffer.isView(f)?V(f):o&&o("Unable to load: only ArrayBuffer or ArrayBufferView is supported",null)}}else{let O=V=>{v&&!this._doNotHandleContextLost&&(A._buffer=V),l(A,R,r,V,A.invertY,t,!1,c,s)};!g||x?f&&(typeof f.decoding=="string"||f.close)?O(f):n._FileToolsLoadImage(e||"",O,D,r?r.offlineProvider:null,m,A.invertY&&this._features.needsInvertingBitmap?{imageOrientation:"flipY"}:void 0,this):typeof f=="string"||f instanceof ArrayBuffer||ArrayBuffer.isView(f)||f instanceof Blob?n._FileToolsLoadImage(f,O,D,r?r.offlineProvider:null,m,A.invertY&&this._features.needsInvertingBitmap?{imageOrientation:"flipY"}:void 0,this):f&&O(f)}return A}_rebuildBuffers(){for(let e of this._uniformBuffers)e._rebuildAfterContextLost()}get _shouldUseHighPrecisionShader(){return!!(this._caps.highPrecisionShaderSupported&&this._highPrecisionShadersAllowed)}getHostDocument(){return this._renderingCanvas&&this._renderingCanvas.ownerDocument?this._renderingCanvas.ownerDocument:Qc()?document:null}getLoadedTexturesCache(){return this._internalTexturesCache}clearInternalTexturesCache(){this._internalTexturesCache.length=0}getCaps(){return this._caps}resetTextureCache(){for(let e in this._boundTexturesCache)Object.prototype.hasOwnProperty.call(this._boundTexturesCache,e)&&(this._boundTexturesCache[e]=null);this._currentTextureChannel=-1}get name(){return this._name}set name(e){this._name=e}static get NpmPackage(){return"babylonjs@9.6.0"}static get Version(){return"9.6.0"}getRenderingCanvas(){return this._renderingCanvas}getAudioContext(){return this._audioContext}getAudioDestination(){return this._audioDestination}setHardwareScalingLevel(e){this._hardwareScalingLevel=e,this.resize()}getHardwareScalingLevel(){return this._hardwareScalingLevel}get doNotHandleContextLost(){return this._doNotHandleContextLost}set doNotHandleContextLost(e){this._doNotHandleContextLost=e}get isStencilEnable(){return this._isStencilEnable}getCreationOptions(){return this._creationOptions}constructor(e,t,i){var a,o,l,c,f,h,d,u,m,_;this._colorWrite=!0,this._colorWriteChanged=!0,this._depthCullingState=new $S,this._stencilStateComposer=new JS,this._stencilState=new Ah,this._alphaState=new Iu(!1),this._alphaMode=Array(8).fill(-1),this._alphaEquation=Array(8).fill(-1),this._activeRequests=[],this._badOS=!1,this._badDesktopOS=!1,this._compatibilityMode=!0,this._internalTexturesCache=new Array,this._currentRenderTarget=null,this._boundTexturesCache={},this._activeChannel=0,this._currentTextureChannel=-1,this._viewportCached={x:0,y:0,z:0,w:0},this._isWebGPU=!1,this._enableGPUDebugMarkers=!1,this.onCanvasBlurObservable=new te,this.onCanvasFocusObservable=new te,this.onNewSceneAddedObservable=new te,this.onResizeObservable=new te,this.onCanvasPointerOutObservable=new te,this.onEffectErrorObservable=new te,this.disablePerformanceMonitorInBackground=!1,this.disableVertexArrayObjects=!1,this._frameId=0,this.hostInformation={isMobile:!1},this.isFullscreen=!1,this.enableOfflineSupport=!1,this.disableManifestCheck=!1,this.disableContextMenu=!0,this.currentRenderPassId=0,this.isPointerLock=!1,this.postProcesses=[],this.canvasTabIndex=1,this._contextWasLost=!1,this._useReverseDepthBuffer=!1,this.isNDCHalfZRange=!1,this.hasOriginBottomLeft=!0,this._renderTargetWrapperCache=new Array,this._compiledEffects={},this._isDisposed=!1,this.scenes=[],this._virtualScenes=new Array,this.onBeforeTextureInitObservable=new te,this.renderEvenInBackground=!0,this.preventCacheWipeBetweenFrames=!1,this._frameHandler=0,this._activeRenderLoops=new Array,this._windowIsBackground=!1,this._boundRenderFunction=p=>this._renderLoop(p),this._lastFrameTime=0,this._renderAccumulator=0,this.skipFrameRender=!1,this.onBeforeShaderCompilationObservable=new te,this.onAfterShaderCompilationObservable=new te,this.onBeginFrameObservable=new te,this.onEndFrameObservable=new te,this._transformTextureUrl=null,this._uniformBuffers=new Array,this._storageBuffers=new Array,this._highPrecisionShadersAllowed=!0,this.onContextLostObservable=new te,this.onContextRestoredObservable=new te,this._name="",this.premultipliedAlpha=!0,this.adaptToDeviceRatio=!1,this._lastDevicePixelRatio=1,this._doNotHandleContextLost=!1,this.cullBackFaces=null,this._renderPassNames=["main"],this._fps=60,this._deltaTime=0,this._deterministicLockstep=!1,this._lockstepMaxSteps=4,this._timeStep=1/60,this.onDisposeObservable=new te,this.onReleaseEffectsObservable=new te,Le.Instances.push(this),this.startTime=dr.Now,this._stencilStateComposer.stencilGlobal=this._stencilState,Gn.SetMatrixPrecision(!!t.useLargeWorldRendering||!!t.useHighPrecisionMatrix),yl()&&navigator.userAgent&&(this._badOS=/iPad/i.test(navigator.userAgent)||/iPhone/i.test(navigator.userAgent),this._badDesktopOS=/^((?!chrome|android).)*safari/i.test(navigator.userAgent)),this.adaptToDeviceRatio=i!=null?i:!1,t.antialias=e!=null?e:t.antialias,t.deterministicLockstep=(a=t.deterministicLockstep)!=null?a:!1,t.lockstepMaxSteps=(o=t.lockstepMaxSteps)!=null?o:4,t.timeStep=(l=t.timeStep)!=null?l:1/60,t.stencil=(c=t.stencil)!=null?c:!0,this._audioContext=(h=(f=t.audioEngineOptions)==null?void 0:f.audioContext)!=null?h:null,this._audioDestination=(u=(d=t.audioEngineOptions)==null?void 0:d.audioDestination)!=null?u:null,this.premultipliedAlpha=(m=t.premultipliedAlpha)!=null?m:!0,this._doNotHandleContextLost=!!t.doNotHandleContextLost,this._isStencilEnable=!!t.stencil,this.useExactSrgbConversions=(_=t.useExactSrgbConversions)!=null?_:!1;let r=ar()&&window.devicePixelRatio||1,s=t.limitDeviceRatio||r;i=i||t.adaptToDeviceRatio||!1,this._hardwareScalingLevel=i?1/Math.min(s,r):1,this._lastDevicePixelRatio=r,this._creationOptions=t}resize(e=!1){var r,s;let t,i;if(this.adaptToDeviceRatio){let a=ar()&&window.devicePixelRatio||1,o=this._lastDevicePixelRatio/a;this._lastDevicePixelRatio=a,this._hardwareScalingLevel*=o}if(ar()&&Qc())if(this._renderingCanvas){let a=(s=(r=this._renderingCanvas).getBoundingClientRect)==null?void 0:s.call(r);t=this._renderingCanvas.clientWidth||(a==null?void 0:a.width)||this._renderingCanvas.width*this._hardwareScalingLevel||100,i=this._renderingCanvas.clientHeight||(a==null?void 0:a.height)||this._renderingCanvas.height*this._hardwareScalingLevel||100}else t=window.innerWidth,i=window.innerHeight;else t=this._renderingCanvas?this._renderingCanvas.width:100,i=this._renderingCanvas?this._renderingCanvas.height:100;this.setSize(t/this._hardwareScalingLevel,i/this._hardwareScalingLevel,e)}setSize(e,t,i=!1){if(!this._renderingCanvas||(e=e|0,t=t|0,!i&&this._renderingCanvas.width===e&&this._renderingCanvas.height===t))return!1;if(this._renderingCanvas.width=e,this._renderingCanvas.height=t,this.scenes){for(let r=0;r{let e=navigator.userAgent;this.hostInformation.isMobile=e.indexOf("Mobile")!==-1||e.indexOf("Mac")!==-1&&Qc()&&"ontouchend"in document},this._checkForMobile(),ar()&&window.addEventListener("resize",this._checkForMobile))}createVideoElement(e){return document.createElement("video")}_reportDrawCall(e=1){var t;(t=this._drawCalls)==null||t.addCount(e,!1)}getFps(){return this._fps}getDeltaTime(){return this._deltaTime}isDeterministicLockStep(){return this._deterministicLockstep}getLockstepMaxSteps(){return this._lockstepMaxSteps}getTimeStep(){return this._timeStep*1e3}_createImageBitmapFromSource(e,t){throw new Error("createImageBitmapFromSource is not implemented")}createImageBitmap(e,t){return createImageBitmap(e,t)}resizeImageBitmap(e,t,i){throw new Error("resizeImageBitmap is not implemented")}getFontOffset(e){throw new Error("getFontOffset is not implemented")}static _CreateCanvas(e,t){if(typeof document=="undefined")return new OffscreenCanvas(e,t);let i=document.createElement("canvas");return i.width=e,i.height=t,i}createCanvas(e,t){return n._CreateCanvas(e,t)}static _FileToolsLoadImage(e,t,i,r,s,a,o){throw Xe("FileTools")}_loadFile(e,t,i,r,s,a){let o=FS(e,t,i,r,s,a);return this._activeRequests.push(o),o.onCompleteObservable.add(()=>{let l=this._activeRequests.indexOf(o);l!==-1&&this._activeRequests.splice(l,1)}),o}static _FileToolsLoadFile(e,t,i,r,s,a){if(xu.loadFile)return xu.loadFile(e,t,i,r,s,a);throw Xe("FileTools")}dispose(){var t;for(this.releaseEffects(),this._isDisposed=!0,this.stopRenderLoop(),this._emptyTexture&&(this._releaseTexture(this._emptyTexture),this._emptyTexture=null),this._emptyCubeTexture&&(this._releaseTexture(this._emptyCubeTexture),this._emptyCubeTexture=null),this._renderingCanvas=null,this.onBeforeTextureInitObservable&&this.onBeforeTextureInitObservable.clear();this.postProcesses.length;)this.postProcesses[0].dispose();for(;this.scenes.length;)this.scenes[0].dispose();for(;this._virtualScenes.length;)this._virtualScenes[0].dispose();(t=this.releaseComputeEffects)==null||t.call(this),$i.ResetCache();for(let i of this._activeRequests)i.abort();this._boundRenderFunction=null,this.onDisposeObservable.notifyObservers(this),this.onDisposeObservable.clear(),this.onResizeObservable.clear(),this.onCanvasBlurObservable.clear(),this.onCanvasFocusObservable.clear(),this.onCanvasPointerOutObservable.clear(),this.onNewSceneAddedObservable.clear(),this.onEffectErrorObservable.clear(),ar()&&window.removeEventListener("resize",this._checkForMobile);let e=Le.Instances.indexOf(this);e>=0&&Le.Instances.splice(e,1),Le.Instances.length||(Le.OnEnginesDisposedObservable.notifyObservers(this),Le.OnEnginesDisposedObservable.clear()),this.onBeginFrameObservable.clear(),this.onEndFrameObservable.clear()}static DefaultLoadingScreenFactory(e){throw Xe("LoadingScreen")}static MarkAllMaterialsAsDirty(e,t){for(let i=0;i{});var tT,o3=C(()=>{tT=class{constructor(){this.shaderLanguage=0}postProcessor(e,t,i,r,s){if(s.drawBuffersExtensionDisabled){let a=/#extension.+GL_EXT_draw_buffers.+(enable|require)/g;e=e.replace(a,"")}return e}}});var vie,iT,l3=C(()=>{vie=/(flat\s)?\s*varying\s*.*/,iT=class{constructor(){this.shaderLanguage=0}attributeProcessor(e){return e.replace("attribute","in")}varyingCheck(e,t){return vie.test(e)}varyingProcessor(e,t){return e.replace("varying",t?"in":"out")}postProcessor(e,t,i){let r=e.search(/#extension.+GL_EXT_draw_buffers.+require/)!==-1,s=/#extension.+(GL_OVR_multiview2|GL_OES_standard_derivatives|GL_EXT_shader_texture_lod|GL_EXT_frag_depth|GL_EXT_draw_buffers).+(enable|require)/g;if(e=e.replace(s,""),e=e.replace(/texture2D\s*\(/g,"texture("),i){let a=e.search(/layout *\(location *= *0\) *out/g)!==-1,o=t.indexOf("#define DUAL_SOURCE_BLENDING")!==-1,l=o?`layout(location = 0, index = 0) out vec4 glFragColor; layout(location = 0, index = 1) out vec4 glFragColor2; `:`layout(location = 0) out vec4 glFragColor; `;o&&(e=`#extension GL_EXT_blend_func_extended : require `+e),e=e.replace(/texture2DLodEXT\s*\(/g,"textureLod("),e=e.replace(/textureCubeLodEXT\s*\(/g,"textureLod("),e=e.replace(/textureCube\s*\(/g,"texture("),e=e.replace(/gl_FragDepthEXT/g,"gl_FragDepth"),e=e.replace(/gl_FragColor/g,"glFragColor"),e=e.replace(/gl_FragData/g,"glFragData"),e=e.replace(/void\s+?main\s*\(/g,(r||a?"":l)+"void main(")}else if(t.indexOf("#define VERTEXOUTPUT_INVARIANT")>=0&&(e=`invariant gl_Position; `+e),t.indexOf("#define MULTIVIEW")!==-1)return`#extension GL_OVR_multiview2 : require layout (num_views = 2) in; -`+e;return e}}});var Ah,B0=C(()=>{Ah=class n{get underlyingResource(){return null}constructor(){this.references=0,this.capacity=0,this.is32Bits=!1,this.uniqueId=n._Counter++}};Ah._Counter=0});var ko,KS=C(()=>{B0();ko=class extends Ah{constructor(e){super(),this._buffer=e}get underlyingResource(){return this._buffer}}});function xh(n){let e=1;do e*=2;while(en-t?t:e}function J1(n){return n--,n|=n>>1,n|=n>>2,n|=n>>4,n|=n>>8,n|=n>>16,n++,n}function jS(n){return n=n|n>>1,n=n|n>>2,n=n|n>>4,n=n|n>>8,n=n|n>>16,n-(n>>1)}function fs(n,e,t=2){let i;switch(t){case 1:i=jS(n);break;case 2:i=U0(n);break;case 3:default:i=J1(n);break}return Math.min(i,e)}var Wo=C(()=>{});var xu,V0=C(()=>{xu=class{get underlyingResource(){return this._webGLTexture}constructor(e=null,t){if(this._MSAARenderBuffers=null,this._context=t,!e&&(e=t.createTexture(),!e))throw new Error("Unable to create webGL texture");this.set(e)}setUsage(){}set(e){this._webGLTexture=e}reset(){this._webGLTexture=null,this._MSAARenderBuffers=null}addMSAARenderBuffer(e){this._MSAARenderBuffers||(this._MSAARenderBuffers=[]),this._MSAARenderBuffers.push(e)}releaseMSAARenderBuffers(){if(this._MSAARenderBuffers){for(let e of this._MSAARenderBuffers)this._context.deleteRenderbuffer(e);this._MSAARenderBuffers=null}}getMSAARenderBuffer(e=0){var t,i;return(i=(t=this._MSAARenderBuffers)==null?void 0:t[e])!=null?i:null}release(){this.releaseMSAARenderBuffers(),this._webGLTexture&&this._context.deleteTexture(this._webGLTexture),this.reset()}}});function G0(n){return n===13||n===14||n===15||n===16||n===17||n===18||n===19}function yl(n){return n===13||n===17||n===18||n===19}var o_=C(()=>{});var $1={};et($1,{ThinEngine:()=>bt});var k0,bt,hs=C(()=>{Sh();I0();Lr();w0();Pt();fa();Z1();Q1();KS();Wo();V0();ks();qc();O0();o_();F0();k0=class{},bt=class n extends Re{get name(){return this._name}set name(e){this._name=e}get version(){return this._webGLVersion}static get ShadersRepository(){return Ji.ShadersRepository}static set ShadersRepository(e){Ji.ShadersRepository=e}get supportsUniformBuffers(){return this.webGLVersion>1&&!this.disableUniformBuffers}get needPOTTextures(){return this._webGLVersion<2||this.forcePOTTextures}get _supportsHardwareTextureRescaling(){return!1}set framebufferDimensionsObject(e){this._framebufferDimensionsObject=e}snapshotRenderingReset(){this.snapshotRendering=!1}constructor(e,t,i,r){if(i=i||{},super(t!=null?t:i.antialias,i,r),this._name="WebGL",this.forcePOTTextures=!1,this.validateShaderPrograms=!1,this.disableUniformBuffers=!1,this._webGLVersion=1,this._vertexAttribArraysEnabled=[],this._uintIndicesCurrentlySet=!1,this._currentBoundBuffer=new Array,this._currentFramebuffer=null,this._dummyFramebuffer=null,this._currentBufferPointers=new Array,this._currentInstanceLocations=new Array,this._currentInstanceBuffers=new Array,this._vaoRecordInProgress=!1,this._mustWipeVertexAttributes=!1,this._nextFreeTextureSlots=new Array,this._maxSimultaneousTextures=0,this._maxMSAASamplesOverride=null,this._unpackFlipYCached=null,this.enableUnpackFlipYCached=!0,this._boundUniforms={},!e)return;let s;if(e.getContext){if(s=e,i.preserveDrawingBuffer===void 0&&(i.preserveDrawingBuffer=!1),i.xrCompatible===void 0&&(i.xrCompatible=!1),navigator&&navigator.userAgent){this._setupMobileChecks();let l=navigator.userAgent;for(let c of n.ExceptionList){let f=c.key,h=c.targets;if(new RegExp(f).test(l)){if(c.capture&&c.captureConstraint){let u=c.capture,m=c.captureConstraint,p=new RegExp(u).exec(l);if(p&&p.length>0&&parseInt(p[p.length-1])>=m)continue}for(let u of h)switch(u){case"uniformBuffer":this.disableUniformBuffers=!0;break;case"vao":this.disableVertexArrayObjects=!0;break;case"antialias":i.antialias=!1;break;case"maxMSAASamples":this._maxMSAASamplesOverride=1;break}}}}if(this._doNotHandleContextLost?this._onContextLost=()=>{CS(this._gl)}:(this._onContextLost=l=>{l.preventDefault(),this._contextWasLost=!0,CS(this._gl),$.Warn("WebGL context lost."),this.onContextLostObservable.notifyObservers(this)},this._onContextRestored=()=>{this._restoreEngineAfterContextLost(()=>this._initGLContext())},s.addEventListener("webglcontextrestored",this._onContextRestored,!1),i.powerPreference=i.powerPreference||"high-performance"),s.addEventListener("webglcontextlost",this._onContextLost,!1),this._badDesktopOS&&(i.xrCompatible=!1),!i.disableWebGL2Support)try{this._gl=s.getContext("webgl2",i)||s.getContext("experimental-webgl2",i),this._gl&&(this._webGLVersion=2,this._shaderPlatformName="WEBGL2",this._gl.deleteQuery||(this._webGLVersion=1,this._shaderPlatformName="WEBGL1"))}catch(l){}if(!this._gl){if(!s)throw new Error("The provided canvas is null or undefined.");try{this._gl=s.getContext("webgl",i)||s.getContext("experimental-webgl",i)}catch(l){throw new Error("WebGL not supported",{cause:l})}}if(!this._gl)throw new Error("WebGL not supported")}else{this._gl=e,s=this._gl.canvas,this._gl.renderbufferStorageMultisample?(this._webGLVersion=2,this._shaderPlatformName="WEBGL2"):this._shaderPlatformName="WEBGL1";let l=this._gl.getContextAttributes();l&&(i.stencil=l.stencil)}this._sharedInit(s),this._gl.pixelStorei(this._gl.UNPACK_COLORSPACE_CONVERSION_WEBGL,this._gl.NONE),i.useHighPrecisionFloats!==void 0&&(this._highPrecisionShadersAllowed=i.useHighPrecisionFloats),this.resize(),this._initGLContext(),this._initFeatures();for(let l=0;l1?new YS:new XS;let a=`Babylon.js v${n.Version}`;$.Log(a+` - ${this.description}`),this._renderingCanvas&&this._renderingCanvas.setAttribute&&this._renderingCanvas.setAttribute("data-engine",a);let o=Tn(this._gl);o.validateShaderPrograms=this.validateShaderPrograms,o.parallelShaderCompile=this._caps.parallelShaderCompile}_clearEmptyResources(){this._dummyFramebuffer=null,super._clearEmptyResources()}_getShaderProcessingContext(e){return null}areAllEffectsReady(){for(let e in this._compiledEffects)if(!this._compiledEffects[e].isReady())return!1;return!0}_initGLContext(){var i;this._caps={maxTexturesImageUnits:this._gl.getParameter(this._gl.MAX_TEXTURE_IMAGE_UNITS),maxCombinedTexturesImageUnits:this._gl.getParameter(this._gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS),maxVertexTextureImageUnits:this._gl.getParameter(this._gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS),maxTextureSize:this._gl.getParameter(this._gl.MAX_TEXTURE_SIZE),maxSamples:this._webGLVersion>1?this._gl.getParameter(this._gl.MAX_SAMPLES):1,maxCubemapTextureSize:this._gl.getParameter(this._gl.MAX_CUBE_MAP_TEXTURE_SIZE),maxRenderTextureSize:this._gl.getParameter(this._gl.MAX_RENDERBUFFER_SIZE),maxVertexAttribs:this._gl.getParameter(this._gl.MAX_VERTEX_ATTRIBS),maxVaryingVectors:this._gl.getParameter(this._gl.MAX_VARYING_VECTORS),maxFragmentUniformVectors:this._gl.getParameter(this._gl.MAX_FRAGMENT_UNIFORM_VECTORS),maxVertexUniformVectors:this._gl.getParameter(this._gl.MAX_VERTEX_UNIFORM_VECTORS),shaderFloatPrecision:0,parallelShaderCompile:this._gl.getExtension("KHR_parallel_shader_compile")||void 0,standardDerivatives:this._webGLVersion>1||this._gl.getExtension("OES_standard_derivatives")!==null,maxAnisotropy:1,astc:this._gl.getExtension("WEBGL_compressed_texture_astc")||this._gl.getExtension("WEBKIT_WEBGL_compressed_texture_astc"),bptc:this._gl.getExtension("EXT_texture_compression_bptc")||this._gl.getExtension("WEBKIT_EXT_texture_compression_bptc"),s3tc:this._gl.getExtension("WEBGL_compressed_texture_s3tc")||this._gl.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"),s3tc_srgb:this._gl.getExtension("WEBGL_compressed_texture_s3tc_srgb")||this._gl.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc_srgb"),pvrtc:this._gl.getExtension("WEBGL_compressed_texture_pvrtc")||this._gl.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"),etc1:this._gl.getExtension("WEBGL_compressed_texture_etc1")||this._gl.getExtension("WEBKIT_WEBGL_compressed_texture_etc1"),etc2:this._gl.getExtension("WEBGL_compressed_texture_etc")||this._gl.getExtension("WEBKIT_WEBGL_compressed_texture_etc")||this._gl.getExtension("WEBGL_compressed_texture_es3_0"),textureAnisotropicFilterExtension:this._gl.getExtension("EXT_texture_filter_anisotropic")||this._gl.getExtension("WEBKIT_EXT_texture_filter_anisotropic")||this._gl.getExtension("MOZ_EXT_texture_filter_anisotropic"),uintIndices:this._webGLVersion>1||this._gl.getExtension("OES_element_index_uint")!==null,fragmentDepthSupported:this._webGLVersion>1||this._gl.getExtension("EXT_frag_depth")!==null,highPrecisionShaderSupported:!1,timerQuery:this._gl.getExtension("EXT_disjoint_timer_query_webgl2")||this._gl.getExtension("EXT_disjoint_timer_query"),supportOcclusionQuery:this._webGLVersion>1,canUseTimestampForTimerQuery:!1,drawBuffersExtension:!1,maxMSAASamples:1,colorBufferFloat:!!(this._webGLVersion>1&&this._gl.getExtension("EXT_color_buffer_float")),blendFloat:this._gl.getExtension("EXT_float_blend")!==null,supportFloatTexturesResolve:!1,rg11b10ufColorRenderable:!1,colorBufferHalfFloat:!!(this._webGLVersion>1&&this._gl.getExtension("EXT_color_buffer_half_float")),textureFloat:!!(this._webGLVersion>1||this._gl.getExtension("OES_texture_float")),textureHalfFloat:!!(this._webGLVersion>1||this._gl.getExtension("OES_texture_half_float")),textureHalfFloatRender:!1,textureFloatLinearFiltering:!1,textureFloatRender:!1,textureHalfFloatLinearFiltering:!1,vertexArrayObject:!1,instancedArrays:!1,textureLOD:!!(this._webGLVersion>1||this._gl.getExtension("EXT_shader_texture_lod")),texelFetch:this._webGLVersion!==1,blendMinMax:!1,multiview:this._gl.getExtension("OVR_multiview2"),oculusMultiview:this._gl.getExtension("OCULUS_multiview"),depthTextureExtension:!1,canUseGLInstanceID:this._webGLVersion>1,canUseGLVertexID:this._webGLVersion>1,supportComputeShaders:!1,supportSRGBBuffers:!1,supportTransformFeedbacks:this._webGLVersion>1,textureMaxLevel:this._webGLVersion>1,texture2DArrayMaxLayerCount:this._webGLVersion>1?this._gl.getParameter(this._gl.MAX_ARRAY_TEXTURE_LAYERS):128,disableMorphTargetTexture:!1,textureNorm16:!!this._gl.getExtension("EXT_texture_norm16"),blendParametersPerTarget:!1,dualSourceBlending:!1,supportReadWriteStorageTextures:!1},this._caps.supportFloatTexturesResolve=this._caps.colorBufferFloat,this._caps.rg11b10ufColorRenderable=this._caps.colorBufferFloat,this._glVersion=this._gl.getParameter(this._gl.VERSION);let e=this._gl.getExtension("WEBGL_debug_renderer_info");e!=null&&(this._glRenderer=this._gl.getParameter(e.UNMASKED_RENDERER_WEBGL),this._glVendor=this._gl.getParameter(e.UNMASKED_VENDOR_WEBGL)),this._glVendor||(this._glVendor=this._gl.getParameter(this._gl.VENDOR)||"Unknown vendor"),this._glRenderer||(this._glRenderer=this._gl.getParameter(this._gl.RENDERER)||"Unknown renderer"),this._gl.HALF_FLOAT_OES!==36193&&(this._gl.HALF_FLOAT_OES=36193),this._gl.RGBA16F!==34842&&(this._gl.RGBA16F=34842),this._gl.RGBA32F!==34836&&(this._gl.RGBA32F=34836),this._gl.DEPTH24_STENCIL8!==35056&&(this._gl.DEPTH24_STENCIL8=35056),this._caps.timerQuery&&(this._webGLVersion===1&&(this._gl.getQuery=this._caps.timerQuery.getQueryEXT.bind(this._caps.timerQuery)),this._caps.canUseTimestampForTimerQuery=((i=this._gl.getQuery(this._caps.timerQuery.TIMESTAMP_EXT,this._caps.timerQuery.QUERY_COUNTER_BITS_EXT))!=null?i:0)>0),this._caps.maxAnisotropy=this._caps.textureAnisotropicFilterExtension?this._gl.getParameter(this._caps.textureAnisotropicFilterExtension.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,this._caps.textureFloatLinearFiltering=!!(this._caps.textureFloat&&this._gl.getExtension("OES_texture_float_linear")),this._caps.textureFloatRender=!!(this._caps.textureFloat&&this._canRenderToFloatFramebuffer()),this._caps.textureHalfFloatLinearFiltering=!!(this._webGLVersion>1||this._caps.textureHalfFloat&&this._gl.getExtension("OES_texture_half_float_linear")),this._caps.textureNorm16&&(this._gl.R16_EXT=33322,this._gl.RG16_EXT=33324,this._gl.RGB16_EXT=32852,this._gl.RGBA16_EXT=32859,this._gl.R16_SNORM_EXT=36760,this._gl.RG16_SNORM_EXT=36761,this._gl.RGB16_SNORM_EXT=36762,this._gl.RGBA16_SNORM_EXT=36763);let t=this._gl.getExtension("OES_draw_buffers_indexed");if(this._caps.blendParametersPerTarget=!!t,this._alphaState=new Au(this._caps.blendParametersPerTarget),t&&(this._gl.blendEquationSeparateIndexed=t.blendEquationSeparateiOES.bind(t),this._gl.blendEquationIndexed=t.blendEquationiOES.bind(t),this._gl.blendFuncSeparateIndexed=t.blendFuncSeparateiOES.bind(t),this._gl.blendFuncIndexed=t.blendFunciOES.bind(t),this._gl.colorMaskIndexed=t.colorMaskiOES.bind(t),this._gl.disableIndexed=t.disableiOES.bind(t),this._gl.enableIndexed=t.enableiOES.bind(t)),this._caps.dualSourceBlending=!!this._gl.getExtension("WEBGL_blend_func_extended"),this._caps.astc&&(this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR),this._caps.bptc&&(this._gl.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT=this._caps.bptc.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT),this._caps.s3tc_srgb&&(this._gl.COMPRESSED_SRGB_S3TC_DXT1_EXT=this._caps.s3tc_srgb.COMPRESSED_SRGB_S3TC_DXT1_EXT,this._gl.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT=this._caps.s3tc_srgb.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,this._gl.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT=this._caps.s3tc_srgb.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT),this._caps.etc2&&(this._gl.COMPRESSED_SRGB8_ETC2=this._caps.etc2.COMPRESSED_SRGB8_ETC2,this._gl.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC=this._caps.etc2.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC),this._webGLVersion>1&&this._gl.HALF_FLOAT_OES!==5131&&(this._gl.HALF_FLOAT_OES=5131),this._caps.textureHalfFloatRender=this._caps.textureHalfFloat&&this._canRenderToHalfFloatFramebuffer(),this._webGLVersion>1)this._caps.drawBuffersExtension=!0,this._caps.maxMSAASamples=this._maxMSAASamplesOverride!==null?this._maxMSAASamplesOverride:this._gl.getParameter(this._gl.MAX_SAMPLES),this._caps.maxDrawBuffers=this._gl.getParameter(this._gl.MAX_DRAW_BUFFERS);else{let r=this._gl.getExtension("WEBGL_draw_buffers");if(r!==null){this._caps.drawBuffersExtension=!0,this._gl.drawBuffers=r.drawBuffersWEBGL.bind(r),this._caps.maxDrawBuffers=this._gl.getParameter(r.MAX_DRAW_BUFFERS_WEBGL),this._gl.DRAW_FRAMEBUFFER=this._gl.FRAMEBUFFER;for(let s=0;s<16;s++)this._gl["COLOR_ATTACHMENT"+s+"_WEBGL"]=r["COLOR_ATTACHMENT"+s+"_WEBGL"]}}if(this._webGLVersion>1)this._caps.depthTextureExtension=!0;else{let r=this._gl.getExtension("WEBGL_depth_texture");r!=null&&(this._caps.depthTextureExtension=!0,this._gl.UNSIGNED_INT_24_8=r.UNSIGNED_INT_24_8_WEBGL)}if(this.disableVertexArrayObjects)this._caps.vertexArrayObject=!1;else if(this._webGLVersion>1)this._caps.vertexArrayObject=!0;else{let r=this._gl.getExtension("OES_vertex_array_object");r!=null&&(this._caps.vertexArrayObject=!0,this._gl.createVertexArray=r.createVertexArrayOES.bind(r),this._gl.bindVertexArray=r.bindVertexArrayOES.bind(r),this._gl.deleteVertexArray=r.deleteVertexArrayOES.bind(r))}if(this._webGLVersion>1)this._caps.instancedArrays=!0;else{let r=this._gl.getExtension("ANGLE_instanced_arrays");r!=null?(this._caps.instancedArrays=!0,this._gl.drawArraysInstanced=r.drawArraysInstancedANGLE.bind(r),this._gl.drawElementsInstanced=r.drawElementsInstancedANGLE.bind(r),this._gl.vertexAttribDivisor=r.vertexAttribDivisorANGLE.bind(r)):this._caps.instancedArrays=!1}if(this._gl.getShaderPrecisionFormat){let r=this._gl.getShaderPrecisionFormat(this._gl.VERTEX_SHADER,this._gl.HIGH_FLOAT),s=this._gl.getShaderPrecisionFormat(this._gl.FRAGMENT_SHADER,this._gl.HIGH_FLOAT);if(r&&s&&(this._caps.highPrecisionShaderSupported=r.precision!==0&&s.precision!==0,this._caps.shaderFloatPrecision=Math.min(r.precision,s.precision)),!this._shouldUseHighPrecisionShader){let a=this._gl.getShaderPrecisionFormat(this._gl.VERTEX_SHADER,this._gl.MEDIUM_FLOAT),o=this._gl.getShaderPrecisionFormat(this._gl.FRAGMENT_SHADER,this._gl.MEDIUM_FLOAT);a&&o&&(this._caps.shaderFloatPrecision=Math.min(a.precision,o.precision))}this._caps.shaderFloatPrecision<10&&(this._caps.shaderFloatPrecision=10)}if(this._webGLVersion>1)this._caps.blendMinMax=!0;else{let r=this._gl.getExtension("EXT_blend_minmax");r!=null&&(this._caps.blendMinMax=!0,this._gl.MAX=r.MAX_EXT,this._gl.MIN=r.MIN_EXT)}if(!this._caps.supportSRGBBuffers){if(this._webGLVersion>1)this._caps.supportSRGBBuffers=!0,this._glSRGBExtensionValues={SRGB:WebGL2RenderingContext.SRGB,SRGB8:WebGL2RenderingContext.SRGB8,SRGB8_ALPHA8:WebGL2RenderingContext.SRGB8_ALPHA8};else{let r=this._gl.getExtension("EXT_sRGB");r!=null&&(this._caps.supportSRGBBuffers=!0,this._glSRGBExtensionValues={SRGB:r.SRGB_EXT,SRGB8:r.SRGB_ALPHA_EXT,SRGB8_ALPHA8:r.SRGB_ALPHA_EXT})}if(this._creationOptions){let r=this._creationOptions.forceSRGBBufferSupportState;r!==void 0&&(this._caps.supportSRGBBuffers=this._caps.supportSRGBBuffers&&r)}}this._depthCullingState.depthTest=!0,this._depthCullingState.depthFunc=this._gl.LEQUAL,this._depthCullingState.depthMask=!0,this._maxSimultaneousTextures=this._caps.maxCombinedTexturesImageUnits;for(let r=0;r=65535)return new Uint32Array(e);return new Uint16Array(e)}return new Uint16Array(e)}bindArrayBuffer(e){this._vaoRecordInProgress||this._unbindVertexArrayObject(),this._bindBuffer(e,this._gl.ARRAY_BUFFER)}bindUniformBlock(e,t,i){let r=e.program,s=this._gl.getUniformBlockIndex(r,t);this._gl.uniformBlockBinding(r,s,i)}bindIndexBuffer(e){this._vaoRecordInProgress||this._unbindVertexArrayObject(),this._bindBuffer(e,this._gl.ELEMENT_ARRAY_BUFFER)}_bindBuffer(e,t){(this._vaoRecordInProgress||this._currentBoundBuffer[t]!==e)&&(this._gl.bindBuffer(t,e?e.underlyingResource:null),this._currentBoundBuffer[t]=e)}updateArrayBuffer(e){this._gl.bufferSubData(this._gl.ARRAY_BUFFER,0,e)}_vertexAttribPointer(e,t,i,r,s,a,o){let l=this._currentBufferPointers[t];if(!l)return;let c=!1;l.active?(l.buffer!==e&&(l.buffer=e,c=!0),l.size!==i&&(l.size=i,c=!0),l.type!==r&&(l.type=r,c=!0),l.normalized!==s&&(l.normalized=s,c=!0),l.stride!==a&&(l.stride=a,c=!0),l.offset!==o&&(l.offset=o,c=!0)):(c=!0,l.active=!0,l.index=t,l.size=i,l.type=r,l.normalized=s,l.stride=a,l.offset=o,l.buffer=e),(c||this._vaoRecordInProgress)&&(this.bindArrayBuffer(e),r===this._gl.UNSIGNED_INT||r===this._gl.INT?this._gl.vertexAttribIPointer(t,i,r,a,o):this._gl.vertexAttribPointer(t,i,r,s,a,o))}_bindIndexBufferWithCache(e){e!=null&&this._cachedIndexBuffer!==e&&(this._cachedIndexBuffer=e,this.bindIndexBuffer(e),this._uintIndicesCurrentlySet=e.is32Bits)}_bindVertexBuffersAttributes(e,t,i){let r=t.getAttributesNames();this._vaoRecordInProgress||this._unbindVertexArrayObject(),this.unbindAllAttributes();for(let s=0;s=0){let o=r[s],l=null;if(i&&(l=i[o]),l||(l=e[o]),!l)continue;this._gl.enableVertexAttribArray(a),this._vaoRecordInProgress||(this._vertexAttribArraysEnabled[a]=!0);let c=l.getBuffer();c&&(this._vertexAttribPointer(c,a,l.getSize(),l.type,l.normalized,l.byteStride,l.byteOffset),l.getIsInstanced()&&(this._gl.vertexAttribDivisor(a,l.getInstanceDivisor()),this._vaoRecordInProgress||(this._currentInstanceLocations.push(a),this._currentInstanceBuffers.push(c))))}}}recordVertexArrayObject(e,t,i,r){let s=this._gl.createVertexArray();if(!s)throw new Error("Unable to create VAO");return this._vaoRecordInProgress=!0,this._gl.bindVertexArray(s),this._mustWipeVertexAttributes=!0,this._bindVertexBuffersAttributes(e,i,r),this.bindIndexBuffer(t),this._vaoRecordInProgress=!1,this._gl.bindVertexArray(null),s}bindVertexArrayObject(e,t){this._cachedVertexArrayObject!==e&&(this._cachedVertexArrayObject=e,this._gl.bindVertexArray(e),this._cachedVertexBuffers=null,this._cachedIndexBuffer=null,this._uintIndicesCurrentlySet=t!=null&&t.is32Bits,this._mustWipeVertexAttributes=!0)}bindBuffersDirectly(e,t,i,r,s){if(this._cachedVertexBuffers!==e||this._cachedEffectForVertexBuffers!==s){this._cachedVertexBuffers=e,this._cachedEffectForVertexBuffers=s;let a=s.getAttributesCount();this._unbindVertexArrayObject(),this.unbindAllAttributes();let o=0;for(let l=0;l=0&&(this._gl.enableVertexAttribArray(c),this._vertexAttribArraysEnabled[c]=!0,this._vertexAttribPointer(e,c,i[l],this._gl.FLOAT,!1,r,o)),o+=i[l]*4}}this._bindIndexBufferWithCache(t)}_unbindVertexArrayObject(){this._cachedVertexArrayObject&&(this._cachedVertexArrayObject=null,this._gl.bindVertexArray(null))}bindBuffers(e,t,i,r){(this._cachedVertexBuffers!==e||this._cachedEffectForVertexBuffers!==i)&&(this._cachedVertexBuffers=e,this._cachedEffectForVertexBuffers=i,this._bindVertexBuffersAttributes(e,i,r)),this._bindIndexBufferWithCache(t)}unbindInstanceAttributes(){let e;for(let t=0,i=this._currentInstanceLocations.length;t1||this.isWebGPU)),(o===1&&!this._caps.textureFloatLinearFiltering||o===2&&!this._caps.textureHalfFloatLinearFiltering)&&(l=1),o===1&&!this._caps.textureFloat&&(o=0,$.Warn("Float textures are not supported. Type forced to TEXTURETYPE_UNSIGNED_BYTE"));let p=G0(c),g=yl(c),v=this._gl,x=new wi(this,r),A=e.width||e,E=e.height||e,T=e.depth||0,R=e.layers||0,I=this._getSamplingParameters(l,(s||a)&&!p),y=R!==0?v.TEXTURE_2D_ARRAY:T!==0?v.TEXTURE_3D:_?v.TEXTURE_CUBE_MAP:v.TEXTURE_2D,M=p?this._getInternalFormatFromDepthTextureFormat(c,!0,g):this._getRGBABufferInternalSizedFormat(o,c,f),D=p?g?v.DEPTH_STENCIL:v.DEPTH_COMPONENT:this._getInternalFormat(c),O=p?this._getWebGLTextureTypeFromDepthTextureFormat(c):this._getWebGLTextureType(o);if(this._bindTextureDirectly(y,x),R!==0)x.is2DArray=!0,v.texImage3D(y,0,M,A,E,R,0,D,O,null);else if(T!==0)x.is3D=!0,v.texImage3D(y,0,M,A,E,T,0,D,O,null);else if(_){x.isCube=!0;for(let N=0;N<6;N++)v.texImage2D(v.TEXTURE_CUBE_MAP_POSITIVE_X+N,0,M,A,E,0,D,O,null)}else v.texImage2D(y,0,M,A,E,0,D,O,null);if(v.texParameteri(y,v.TEXTURE_MAG_FILTER,I.mag),v.texParameteri(y,v.TEXTURE_MIN_FILTER,I.min),v.texParameteri(y,v.TEXTURE_WRAP_S,v.CLAMP_TO_EDGE),v.texParameteri(y,v.TEXTURE_WRAP_T,v.CLAMP_TO_EDGE),p&&this.webGLVersion>1&&(m===0?(v.texParameteri(y,v.TEXTURE_COMPARE_FUNC,515),v.texParameteri(y,v.TEXTURE_COMPARE_MODE,v.NONE)):(v.texParameteri(y,v.TEXTURE_COMPARE_FUNC,m),v.texParameteri(y,v.TEXTURE_COMPARE_MODE,v.COMPARE_REF_TO_TEXTURE))),(s||a)&&this._gl.generateMipmap(y),this._bindTextureDirectly(y,null),x._useSRGBBuffer=f,x.baseWidth=A,x.baseHeight=E,x.width=A,x.height=E,x.depth=R||T,x.isReady=!0,x.samples=h,x.generateMipMaps=s,x.samplingMode=l,x.type=o,x.format=c,x.label=d,x.comparisonFunction=m,this._internalTexturesCache.push(x),u){let N;if(G0(x.format)?N=this._setupFramebufferDepthAttachments(yl(x.format),x.format!==19,x.width,x.height,h,x.format,!0):N=this._createRenderBuffer(x.width,x.height,h,-1,this._getRGBABufferInternalSizedFormat(x.type,x.format,x._useSRGBBuffer),-1),!N)throw new Error("Unable to create render buffer");x._autoMSAAManagement=!0;let w=x._hardwareTexture;w||(w=x._hardwareTexture=this._createHardwareTexture()),w.addMSAARenderBuffer(N)}return x}_getUseSRGBBuffer(e,t){return e&&this._caps.supportSRGBBuffers&&(this.webGLVersion>1||t)}createTexture(e,t,i,r,s=3,a=null,o=null,l=null,c=null,f=null,h=null,d,u,m,_){return this._createTextureBase(e,t,i,r,s,a,o,(...p)=>this._prepareWebGLTexture(...p,f),(p,g,v,x,A,E)=>{let T=this._gl,R=v.width===p&&v.height===g;A._creationFlags=m!=null?m:0;let I=this._getTexImageParametersForCreateTexture(A.format,A._useSRGBBuffer);if(R)return T.texImage2D(T.TEXTURE_2D,0,I.internalFormat,I.format,I.type,v),!1;let y=this._caps.maxTextureSize;if(v.width>y||v.height>y||!this._supportsHardwareTextureRescaling)return this._prepareWorkingCanvas(),!this._workingCanvas||!this._workingContext||(this._workingCanvas.width=p,this._workingCanvas.height=g,this._workingContext.drawImage(v,0,0,v.width,v.height,0,0,p,g),T.texImage2D(T.TEXTURE_2D,0,I.internalFormat,I.format,I.type,this._workingCanvas),A.width=p,A.height=g),!1;{let M=new wi(this,2);this._bindTextureDirectly(T.TEXTURE_2D,M,!0),T.texImage2D(T.TEXTURE_2D,0,I.internalFormat,I.format,I.type,v),this._rescaleTexture(M,A,r,I.format,()=>{this._releaseTexture(M),this._bindTextureDirectly(T.TEXTURE_2D,A,!0),E()})}return!0},l,c,f,h,d,u,_)}_getTexImageParametersForCreateTexture(e,t){let i,r;return this.webGLVersion===1?(i=this._getInternalFormat(e,t),r=i):(i=this._getInternalFormat(e,!1),r=this._getRGBABufferInternalSizedFormat(0,e,t)),{internalFormat:r,format:i,type:this._gl.UNSIGNED_BYTE}}_rescaleTexture(e,t,i,r,s){}_unpackFlipY(e){this._unpackFlipYCached!==e&&(this._gl.pixelStorei(this._gl.UNPACK_FLIP_Y_WEBGL,e?1:0),this.enableUnpackFlipYCached&&(this._unpackFlipYCached=e))}_getUnpackAlignement(){return this._gl.getParameter(this._gl.UNPACK_ALIGNMENT)}_getTextureTarget(e){return e.isCube?this._gl.TEXTURE_CUBE_MAP:e.is3D?this._gl.TEXTURE_3D:e.is2DArray||e.isMultiview?this._gl.TEXTURE_2D_ARRAY:this._gl.TEXTURE_2D}updateTextureSamplingMode(e,t,i=!1){let r=this._getTextureTarget(t),s=this._getSamplingParameters(e,t.useMipMaps||i);this._setTextureParameterInteger(r,this._gl.TEXTURE_MAG_FILTER,s.mag,t),this._setTextureParameterInteger(r,this._gl.TEXTURE_MIN_FILTER,s.min),i&&s.hasMipMaps&&(t.generateMipMaps=!0,this._gl.generateMipmap(r)),this._bindTextureDirectly(r,null),t.samplingMode=e}updateTextureDimensions(e,t,i,r=1){}updateTextureWrappingMode(e,t,i=null,r=null){let s=this._getTextureTarget(e);t!==null&&(this._setTextureParameterInteger(s,this._gl.TEXTURE_WRAP_S,this._getTextureWrapMode(t),e),e._cachedWrapU=t),i!==null&&(this._setTextureParameterInteger(s,this._gl.TEXTURE_WRAP_T,this._getTextureWrapMode(i),e),e._cachedWrapV=i),(e.is2DArray||e.is3D)&&r!==null&&(this._setTextureParameterInteger(s,this._gl.TEXTURE_WRAP_R,this._getTextureWrapMode(r),e),e._cachedWrapR=r),this._bindTextureDirectly(s,null)}_uploadCompressedDataToTextureDirectly(e,t,i,r,s,a=0,o=0){let l=this._gl,c=l.TEXTURE_2D;if(e.isCube&&(c=l.TEXTURE_CUBE_MAP_POSITIVE_X+a),e._useSRGBBuffer)switch(t){case 37492:case 36196:this._caps.etc2?t=l.COMPRESSED_SRGB8_ETC2:e._useSRGBBuffer=!1;break;case 37496:this._caps.etc2?t=l.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:e._useSRGBBuffer=!1;break;case 36492:t=l.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT;break;case 37808:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR;break;case 37809:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR;break;case 37810:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR;break;case 37811:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR;break;case 37812:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR;break;case 37813:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR;break;case 37814:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR;break;case 37815:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR;break;case 37816:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR;break;case 37817:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR;break;case 37818:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR;break;case 37819:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR;break;case 37820:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR;break;case 37821:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR;break;case 33776:this._caps.s3tc_srgb?t=l.COMPRESSED_SRGB_S3TC_DXT1_EXT:e._useSRGBBuffer=!1;break;case 33777:this._caps.s3tc_srgb?t=l.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:e._useSRGBBuffer=!1;break;case 33779:this._caps.s3tc_srgb?t=l.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:e._useSRGBBuffer=!1;break;default:e._useSRGBBuffer=!1;break}if(e.generateMipMaps){let f=e._hardwareTexture;f.memoryAllocated||(l.texStorage2D(e.isCube?l.TEXTURE_CUBE_MAP:l.TEXTURE_2D,Math.floor(Math.log2(Math.max(i,r)))+1,t,e.width,e.height),f.memoryAllocated=!0),this._gl.compressedTexSubImage2D(c,o,0,0,i,r,t,s)}else this._gl.compressedTexImage2D(c,o,t,i,r,0,s)}_uploadDataToTextureDirectly(e,t,i=0,r=0,s,a=!1){let o=this._gl,l=this._getWebGLTextureType(e.type),c=this._getInternalFormat(e.format),f=s===void 0?this._getRGBABufferInternalSizedFormat(e.type,e.format,e._useSRGBBuffer):this._getInternalFormat(s,e._useSRGBBuffer);this._unpackFlipY(e.invertY);let h=o.TEXTURE_2D;e.isCube&&(h=o.TEXTURE_CUBE_MAP_POSITIVE_X+i);let d=Math.round(Math.log(e.width)*Math.LOG2E),u=Math.round(Math.log(e.height)*Math.LOG2E),m=a?e.width:Math.pow(2,Math.max(d-r,0)),_=a?e.height:Math.pow(2,Math.max(u-r,0));o.texImage2D(h,r,f,m,_,0,c,l,t)}updateTextureData(e,t,i,r,s,a,o=0,l=0,c=!1){let f=this._gl,h=this._getWebGLTextureType(e.type),d=this._getInternalFormat(e.format);this._unpackFlipY(e.invertY);let u=f.TEXTURE_2D,m=f.TEXTURE_2D;e.isCube&&(m=f.TEXTURE_CUBE_MAP_POSITIVE_X+o,u=f.TEXTURE_CUBE_MAP),this._bindTextureDirectly(u,e,!0),f.texSubImage2D(m,l,i,r,s,a,d,h,t),c&&this._gl.generateMipmap(m),this._bindTextureDirectly(u,null)}_uploadArrayBufferViewToTexture(e,t,i=0,r=0){let s=this._gl,a=e.isCube?s.TEXTURE_CUBE_MAP:s.TEXTURE_2D;this._bindTextureDirectly(a,e,!0),this._uploadDataToTextureDirectly(e,t,i,r),this._bindTextureDirectly(a,null,!0)}_prepareWebGLTextureContinuation(e,t,i,r,s){let a=this._gl;if(!a)return;let o=this._getSamplingParameters(s,!i);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,o.mag),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,o.min),!i&&!r&&a.generateMipmap(a.TEXTURE_2D),this._bindTextureDirectly(a.TEXTURE_2D,null),t&&t.removePendingData(e),e.onLoadedObservable.notifyObservers(e),e.onLoadedObservable.clear()}_prepareWebGLTexture(e,t,i,r,s,a,o,l,c,f){let h=this.getCaps().maxTextureSize,d=Math.min(h,this.needPOTTextures?fs(r.width,h):r.width),u=Math.min(h,this.needPOTTextures?fs(r.height,h):r.height),m=this._gl;if(m){if(!e._hardwareTexture){i&&i.removePendingData(e);return}this._bindTextureDirectly(m.TEXTURE_2D,e,!0),this._unpackFlipY(s===void 0?!0:!!s),e.baseWidth=r.width,e.baseHeight=r.height,e.width=d,e.height=u,e.isReady=!0,e.type=e.type!==-1?e.type:0,e.format=e.format!==-1?e.format:f!=null?f:t===".jpg"&&!e._useSRGBBuffer?4:5,!l(d,u,r,t,e,()=>{this._prepareWebGLTextureContinuation(e,i,a,o,c)})&&this._prepareWebGLTextureContinuation(e,i,a,o,c)}}_getInternalFormatFromDepthTextureFormat(e,t,i){let r=this._gl;if(!t)return r.STENCIL_INDEX8;let a=i?r.DEPTH_STENCIL:r.DEPTH_COMPONENT;return this.webGLVersion>1?e===15?a=r.DEPTH_COMPONENT16:e===16?a=r.DEPTH_COMPONENT24:e===17||e===13?a=i?r.DEPTH24_STENCIL8:r.DEPTH_COMPONENT24:e===14?a=r.DEPTH_COMPONENT32F:e===18&&(a=i?r.DEPTH32F_STENCIL8:r.DEPTH_COMPONENT32F):a=r.DEPTH_COMPONENT16,a}_getWebGLTextureTypeFromDepthTextureFormat(e){let t=this._gl,i=t.UNSIGNED_INT;return e===15?i=t.UNSIGNED_SHORT:e===17||e===13?i=t.UNSIGNED_INT_24_8:e===14?i=t.FLOAT:e===18?i=t.FLOAT_32_UNSIGNED_INT_24_8_REV:e===19&&(i=t.UNSIGNED_BYTE),i}_setupFramebufferDepthAttachments(e,t,i,r,s=1,a,o=!1){let l=this._gl;a=a!=null?a:e?13:14;let c=this._getInternalFormatFromDepthTextureFormat(a,t,e);return e&&t?this._createRenderBuffer(i,r,s,l.DEPTH_STENCIL,c,o?-1:l.DEPTH_STENCIL_ATTACHMENT):t?this._createRenderBuffer(i,r,s,c,c,o?-1:l.DEPTH_ATTACHMENT):e?this._createRenderBuffer(i,r,s,c,c,o?-1:l.STENCIL_ATTACHMENT):null}_createRenderBuffer(e,t,i,r,s,a,o=!0){let c=this._gl.createRenderbuffer();return this._updateRenderBuffer(c,e,t,i,r,s,a,o)}_updateRenderBuffer(e,t,i,r,s,a,o,l=!0){let c=this._gl;return c.bindRenderbuffer(c.RENDERBUFFER,e),r>1&&c.renderbufferStorageMultisample?c.renderbufferStorageMultisample(c.RENDERBUFFER,r,a,t,i):c.renderbufferStorage(c.RENDERBUFFER,s,t,i),o!==-1&&c.framebufferRenderbuffer(c.FRAMEBUFFER,o,c.RENDERBUFFER,e),l&&c.bindRenderbuffer(c.RENDERBUFFER,null),e}_releaseTexture(e){this._deleteTexture(e._hardwareTexture),this.unbindAllTextures();let t=this._internalTexturesCache.indexOf(e);t!==-1&&this._internalTexturesCache.splice(t,1),e._lodTextureHigh&&e._lodTextureHigh.dispose(),e._lodTextureMid&&e._lodTextureMid.dispose(),e._lodTextureLow&&e._lodTextureLow.dispose(),e._irradianceTexture&&e._irradianceTexture.dispose()}_deleteTexture(e){e==null||e.release()}_setProgram(e){this._currentProgram!==e&&(C1(e,this._gl),this._currentProgram=e)}bindSamplers(e){let t=e.getPipelineContext();this._setProgram(t.program);let i=e.getSamplers();for(let r=0;r-1;if(i&&a&&(this._activeChannel=t._associatedChannel),this._boundTexturesCache[this._activeChannel]!==t||r){if(this._activateCurrentTexture(),t&&t.isMultiview)throw $.Error(["_bindTextureDirectly called with a multiview texture!",e,t]),"_bindTextureDirectly called with a multiview texture!";this._gl.bindTexture(e,(c=(l=t==null?void 0:t._hardwareTexture)==null?void 0:l.underlyingResource)!=null?c:null),this._boundTexturesCache[this._activeChannel]=t,t&&(t._associatedChannel=this._activeChannel)}else i&&(s=!0,this._activateCurrentTexture());return a&&!i&&this._bindSamplerUniformToChannel(t._associatedChannel,this._activeChannel),s}_bindTexture(e,t,i){if(e===void 0)return;t&&(t._associatedChannel=e),this._activeChannel=e;let r=t?this._getTextureTarget(t):this._gl.TEXTURE_2D;this._bindTextureDirectly(r,t)}unbindAllTextures(){for(let e=0;e1&&(this._bindTextureDirectly(this._gl.TEXTURE_3D,null),this._bindTextureDirectly(this._gl.TEXTURE_2D_ARRAY,null))}setTexture(e,t,i,r){e!==void 0&&(t&&(this._boundUniforms[e]=t),this._setTexture(e,i))}_bindSamplerUniformToChannel(e,t){let i=this._boundUniforms[e];!i||i._currentState===t||(this._gl.uniform1i(i,t),i._currentState=t)}_getTextureWrapMode(e){switch(e){case 1:return this._gl.REPEAT;case 0:return this._gl.CLAMP_TO_EDGE;case 2:return this._gl.MIRRORED_REPEAT}return this._gl.REPEAT}_setTexture(e,t,i=!1,r=!1,s=""){if(!t)return this._boundTexturesCache[e]!=null&&(this._activeChannel=e,this._bindTextureDirectly(this._gl.TEXTURE_2D,null),this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP,null),this.webGLVersion>1&&(this._bindTextureDirectly(this._gl.TEXTURE_3D,null),this._bindTextureDirectly(this._gl.TEXTURE_2D_ARRAY,null))),!1;if(t.video){this._activeChannel=e;let c=t.getInternalTexture();c&&(c._associatedChannel=e),t.update()}else if(t.delayLoadState===4)return t.delayLoad(),!1;let a;r?a=t.depthStencilTexture:t.isReady()?a=t.getInternalTexture():t.isCube?a=this.emptyCubeTexture:t.is3D?a=this.emptyTexture3D:t.is2DArray?a=this.emptyTexture2DArray:a=this.emptyTexture,!i&&a&&(a._associatedChannel=e);let o=!0;this._boundTexturesCache[e]===a&&(i||this._bindSamplerUniformToChannel(a._associatedChannel,e),o=!1),this._activeChannel=e;let l=this._getTextureTarget(a);if(o&&this._bindTextureDirectly(l,a,i),a&&!a.isMultiview){if(a.isCube&&a._cachedCoordinatesMode!==t.coordinatesMode){a._cachedCoordinatesMode=t.coordinatesMode;let c=t.coordinatesMode!==3&&t.coordinatesMode!==5?1:0;t.wrapU=c,t.wrapV=c}a._cachedWrapU!==t.wrapU&&(a._cachedWrapU=t.wrapU,this._setTextureParameterInteger(l,this._gl.TEXTURE_WRAP_S,this._getTextureWrapMode(t.wrapU),a)),a._cachedWrapV!==t.wrapV&&(a._cachedWrapV=t.wrapV,this._setTextureParameterInteger(l,this._gl.TEXTURE_WRAP_T,this._getTextureWrapMode(t.wrapV),a)),a.is3D&&a._cachedWrapR!==t.wrapR&&(a._cachedWrapR=t.wrapR,this._setTextureParameterInteger(l,this._gl.TEXTURE_WRAP_R,this._getTextureWrapMode(t.wrapR),a)),this._setAnisotropicLevel(l,a,t.anisotropicFilteringLevel)}return!0}setTextureArray(e,t,i,r){if(!(e===void 0||!t)){(!this._textureUnits||this._textureUnits.length!==i.length)&&(this._textureUnits=new Int32Array(i.length));for(let s=0;s=this._caps.maxVertexAttribs||!this._vertexAttribArraysEnabled[e]||this.disableAttributeByIndex(e)}releaseEffects(){this._compiledEffects={},this.onReleaseEffectsObservable.notifyObservers(this)}dispose(){var e;ar()&&this._renderingCanvas&&(this._renderingCanvas.removeEventListener("webglcontextlost",this._onContextLost),this._onContextRestored&&this._renderingCanvas.removeEventListener("webglcontextrestored",this._onContextRestored)),super.dispose(),this._dummyFramebuffer&&this._gl.deleteFramebuffer(this._dummyFramebuffer),this.unbindAllAttributes(),this._boundUniforms={},this._workingCanvas=null,this._workingContext=null,this._currentBufferPointers.length=0,this._currentProgram=null,this._creationOptions.loseContextOnDispose&&((e=this._gl.getExtension("WEBGL_lose_context"))==null||e.loseContext()),CS(this._gl)}attachContextLostEvent(e){this._renderingCanvas&&this._renderingCanvas.addEventListener("webglcontextlost",e,!1)}attachContextRestoredEvent(e){this._renderingCanvas&&this._renderingCanvas.addEventListener("webglcontextrestored",e,!1)}getError(){return this._gl.getError()}_canRenderToFloatFramebuffer(){return this._webGLVersion>1?this._caps.colorBufferFloat:this._canRenderToFramebuffer(1)}_canRenderToHalfFloatFramebuffer(){return this._webGLVersion>1?this._caps.colorBufferFloat:this._canRenderToFramebuffer(2)}_canRenderToFramebuffer(e){let t=this._gl;for(;t.getError()!==t.NO_ERROR;);let i=!0,r=t.createTexture();t.bindTexture(t.TEXTURE_2D,r),t.texImage2D(t.TEXTURE_2D,0,this._getRGBABufferInternalSizedFormat(e),1,1,0,t.RGBA,this._getWebGLTextureType(e),null),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST);let s=t.createFramebuffer();t.bindFramebuffer(t.FRAMEBUFFER,s),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,r,0);let a=t.checkFramebufferStatus(t.FRAMEBUFFER);if(i=i&&a===t.FRAMEBUFFER_COMPLETE,i=i&&t.getError()===t.NO_ERROR,i&&(t.clear(t.COLOR_BUFFER_BIT),i=i&&t.getError()===t.NO_ERROR),i){t.bindFramebuffer(t.FRAMEBUFFER,null);let o=t.RGBA,l=t.UNSIGNED_BYTE,c=new Uint8Array(4);t.readPixels(0,0,1,1,o,l,c),i=i&&t.getError()===t.NO_ERROR}for(t.deleteTexture(r),t.deleteFramebuffer(s),t.bindFramebuffer(t.FRAMEBUFFER,null);!i&&t.getError()!==t.NO_ERROR;);return i}_getWebGLTextureType(e){if(this._webGLVersion===1){switch(e){case 1:return this._gl.FLOAT;case 2:return this._gl.HALF_FLOAT_OES;case 0:return this._gl.UNSIGNED_BYTE;case 8:return this._gl.UNSIGNED_SHORT_4_4_4_4;case 9:return this._gl.UNSIGNED_SHORT_5_5_5_1;case 10:return this._gl.UNSIGNED_SHORT_5_6_5}return this._gl.UNSIGNED_BYTE}switch(e){case 3:return this._gl.BYTE;case 0:return this._gl.UNSIGNED_BYTE;case 4:return this._gl.SHORT;case 5:return this._gl.UNSIGNED_SHORT;case 6:return this._gl.INT;case 7:return this._gl.UNSIGNED_INT;case 1:return this._gl.FLOAT;case 2:return this._gl.HALF_FLOAT;case 8:return this._gl.UNSIGNED_SHORT_4_4_4_4;case 9:return this._gl.UNSIGNED_SHORT_5_5_5_1;case 10:return this._gl.UNSIGNED_SHORT_5_6_5;case 11:return this._gl.UNSIGNED_INT_2_10_10_10_REV;case 12:return this._gl.UNSIGNED_INT_24_8;case 13:return this._gl.UNSIGNED_INT_10F_11F_11F_REV;case 14:return this._gl.UNSIGNED_INT_5_9_9_9_REV;case 15:return this._gl.FLOAT_32_UNSIGNED_INT_24_8_REV}return this._gl.UNSIGNED_BYTE}_getInternalFormat(e,t=!1){let i=t?this._glSRGBExtensionValues.SRGB8_ALPHA8:this._gl.RGBA;switch(e){case 0:i=this._gl.ALPHA;break;case 1:i=this._gl.LUMINANCE;break;case 2:i=this._gl.LUMINANCE_ALPHA;break;case 6:case 33322:case 36760:i=this._gl.RED;break;case 7:case 33324:case 36761:i=this._gl.RG;break;case 4:case 32852:case 36762:i=t?this._glSRGBExtensionValues.SRGB:this._gl.RGB;break;case 5:case 32859:case 36763:i=t?this._glSRGBExtensionValues.SRGB8_ALPHA8:this._gl.RGBA;break}if(this._webGLVersion>1)switch(e){case 8:i=this._gl.RED_INTEGER;break;case 9:i=this._gl.RG_INTEGER;break;case 10:i=this._gl.RGB_INTEGER;break;case 11:i=this._gl.RGBA_INTEGER;break}return i}_getRGBABufferInternalSizedFormat(e,t,i=!1){if(this._webGLVersion===1){if(t!==void 0)switch(t){case 0:return this._gl.ALPHA;case 1:return this._gl.LUMINANCE;case 2:return this._gl.LUMINANCE_ALPHA;case 4:return i?this._glSRGBExtensionValues.SRGB:this._gl.RGB}return this._gl.RGBA}switch(e){case 3:switch(t){case 6:return this._gl.R8_SNORM;case 7:return this._gl.RG8_SNORM;case 4:return this._gl.RGB8_SNORM;case 8:return this._gl.R8I;case 9:return this._gl.RG8I;case 10:return this._gl.RGB8I;case 11:return this._gl.RGBA8I;default:return this._gl.RGBA8_SNORM}case 0:switch(t){case 6:return this._gl.R8;case 7:return this._gl.RG8;case 4:return i?this._glSRGBExtensionValues.SRGB8:this._gl.RGB8;case 5:return i?this._glSRGBExtensionValues.SRGB8_ALPHA8:this._gl.RGBA8;case 8:return this._gl.R8UI;case 9:return this._gl.RG8UI;case 10:return this._gl.RGB8UI;case 11:return this._gl.RGBA8UI;case 0:return this._gl.ALPHA;case 1:return this._gl.LUMINANCE;case 2:return this._gl.LUMINANCE_ALPHA;default:return this._gl.RGBA8}case 4:switch(t){case 8:return this._gl.R16I;case 36760:return this._gl.R16_SNORM_EXT;case 36761:return this._gl.RG16_SNORM_EXT;case 36762:return this._gl.RGB16_SNORM_EXT;case 36763:return this._gl.RGBA16_SNORM_EXT;case 9:return this._gl.RG16I;case 10:return this._gl.RGB16I;case 11:return this._gl.RGBA16I;default:return this._gl.RGBA16I}case 5:switch(t){case 8:return this._gl.R16UI;case 33322:return this._gl.R16_EXT;case 33324:return this._gl.RG16_EXT;case 32852:return this._gl.RGB16_EXT;case 32859:return this._gl.RGBA16_EXT;case 9:return this._gl.RG16UI;case 10:return this._gl.RGB16UI;case 11:return this._gl.RGBA16UI;default:return this._gl.RGBA16UI}case 6:switch(t){case 8:return this._gl.R32I;case 9:return this._gl.RG32I;case 10:return this._gl.RGB32I;case 11:return this._gl.RGBA32I;default:return this._gl.RGBA32I}case 7:switch(t){case 8:return this._gl.R32UI;case 9:return this._gl.RG32UI;case 10:return this._gl.RGB32UI;case 11:return this._gl.RGBA32UI;default:return this._gl.RGBA32UI}case 1:switch(t){case 6:return this._gl.R32F;case 7:return this._gl.RG32F;case 4:return this._gl.RGB32F;case 5:return this._gl.RGBA32F;default:return this._gl.RGBA32F}case 2:switch(t){case 6:return this._gl.R16F;case 7:return this._gl.RG16F;case 4:return this._gl.RGB16F;case 5:return this._gl.RGBA16F;default:return this._gl.RGBA16F}case 10:return this._gl.RGB565;case 13:return this._gl.R11F_G11F_B10F;case 14:return this._gl.RGB9_E5;case 8:return this._gl.RGBA4;case 9:return this._gl.RGB5_A1;case 11:switch(t){case 5:return this._gl.RGB10_A2;case 11:return this._gl.RGB10_A2UI;default:return this._gl.RGB10_A2}}return i?this._glSRGBExtensionValues.SRGB8_ALPHA8:this._gl.RGBA8}readPixels(e,t,i,r,s=!0,a=!0,o=null){let l=s?4:3,c=s?this._gl.RGBA:this._gl.RGB,f=i*r*l;if(!o)o=new Uint8Array(f);else if(o.length{Cl();qS=class{constructor(e=30){this._enabled=!0,this._rollingFrameTime=new W0(e)}sampleFrame(e=fr.Now){if(this._enabled){if(this._lastFrameTimeMs!=null){let t=e-this._lastFrameTimeMs;this._rollingFrameTime.add(t)}this._lastFrameTimeMs=e}}get averageFrameTime(){return this._rollingFrameTime.average}get averageFrameTimeVariance(){return this._rollingFrameTime.variance}get instantaneousFrameTime(){return this._rollingFrameTime.history(0)}get averageFPS(){return 1e3/this._rollingFrameTime.average}get instantaneousFPS(){let e=this._rollingFrameTime.history(0);return e===0?0:1e3/e}get isSaturated(){return this._rollingFrameTime.isSaturated()}enable(){this._enabled=!0}disable(){this._enabled=!1,this._lastFrameTimeMs=null}get isEnabled(){return this._enabled}reset(){this._lastFrameTimeMs=null,this._rollingFrameTime.reset()}},W0=class{constructor(e){this._samples=new Array(e),this.reset()}add(e){let t;if(this.isSaturated()){let i=this._samples[this._pos];t=i-this.average,this.average-=t/(this._sampleCount-1),this._m2-=t*(i-this.average)}else this._sampleCount++;t=e-this.average,this.average+=t/this._sampleCount,this._m2+=t*(e-this.average),this.variance=this._m2/(this._sampleCount-1),this._samples[this._pos]=e,this._pos++,this._pos%=this._samples.length}history(e){if(e>=this._sampleCount||e>=this._samples.length)return 0;let t=this._wrapPosition(this._pos-1);return this._samples[this._wrapPosition(t-e)]}isSaturated(){return this._sampleCount>=this._samples.length}reset(){this.average=0,this.variance=0,this._sampleCount=0,this._pos=0,this._m2=0}_wrapPosition(e){let t=this._samples.length;return(e%t+t)%t}}});var t3=C(()=>{hs();bt.prototype.setAlphaMode=function(n,e=!1,t=0){if(this._alphaMode[t]===n){if(!e){let r=n===0;this.depthCullingState.depthMask!==r&&(this.depthCullingState.depthMask=r)}return}let i=n===0;this._alphaState.setAlphaBlend(!i,t),this._alphaState.setAlphaMode(n,t),e||(this.depthCullingState.depthMask=i),this._alphaMode[t]=n}});function i3(n,e,t,i){let r,s=1;i===1?r=new Float32Array(e*t*4):i===2?(r=new Uint16Array(e*t*4),s=15360):i===7?r=new Uint32Array(e*t*4):r=new Uint8Array(e*t*4);for(let a=0;a{ks();Pt();hs();Wo();bt.prototype.updateRawTexture=function(n,e,t,i,r=null,s=0,a=!1){if(!n)return;let o=this._getRGBABufferInternalSizedFormat(s,t,a),l=this._getInternalFormat(t),c=this._getWebGLTextureType(s);this._bindTextureDirectly(this._gl.TEXTURE_2D,n,!0),this._unpackFlipY(i===void 0?!0:!!i),this._doNotHandleContextLost||(n._bufferView=e,n.format=t,n.type=s,n.invertY=i,n._compression=r),n.width%4!==0&&this._gl.pixelStorei(this._gl.UNPACK_ALIGNMENT,1),r&&e?this._gl.compressedTexImage2D(this._gl.TEXTURE_2D,0,this.getCaps().s3tc[r],n.width,n.height,0,e):this._gl.texImage2D(this._gl.TEXTURE_2D,0,o,n.width,n.height,0,l,c,e),n.generateMipMaps&&this._gl.generateMipmap(this._gl.TEXTURE_2D),this._bindTextureDirectly(this._gl.TEXTURE_2D,null),n.isReady=!0};bt.prototype.createRawTexture=function(n,e,t,i,r,s,a,o=null,l=0,c=0,f=!1){let h=new wi(this,3);h.baseWidth=e,h.baseHeight=t,h.width=e,h.height=t,h.format=i,h.generateMipMaps=r,h.samplingMode=a,h.invertY=s,h._compression=o,h.type=l,h._useSRGBBuffer=this._getUseSRGBBuffer(f,!r),this._doNotHandleContextLost||(h._bufferView=n),this.updateRawTexture(h,n,i,s,o,l,h._useSRGBBuffer),this._bindTextureDirectly(this._gl.TEXTURE_2D,h,!0);let d=this._getSamplingParameters(a,r);return this._gl.texParameteri(this._gl.TEXTURE_2D,this._gl.TEXTURE_MAG_FILTER,d.mag),this._gl.texParameteri(this._gl.TEXTURE_2D,this._gl.TEXTURE_MIN_FILTER,d.min),r&&this._gl.generateMipmap(this._gl.TEXTURE_2D),this._bindTextureDirectly(this._gl.TEXTURE_2D,null),this._internalTexturesCache.push(h),h};bt.prototype.createRawCubeTexture=function(n,e,t,i,r,s,a,o=null){let l=this._gl,c=new wi(this,8);c.isCube=!0,c.format=t,c.type=i,this._doNotHandleContextLost||(c._bufferViewArray=n);let f=this._getWebGLTextureType(i),h=this._getInternalFormat(t);h===l.RGB&&(h=l.RGBA),f===l.FLOAT&&!this._caps.textureFloatLinearFiltering?(r=!1,a=1,$.Warn("Float texture filtering is not supported. Mipmap generation and sampling mode are forced to false and TEXTURE_NEAREST_SAMPLINGMODE, respectively.")):f===this._gl.HALF_FLOAT_OES&&!this._caps.textureHalfFloatLinearFiltering?(r=!1,a=1,$.Warn("Half float texture filtering is not supported. Mipmap generation and sampling mode are forced to false and TEXTURE_NEAREST_SAMPLINGMODE, respectively.")):f===l.FLOAT&&!this._caps.textureFloatRender?(r=!1,$.Warn("Render to float textures is not supported. Mipmap generation forced to false.")):f===l.HALF_FLOAT&&!this._caps.colorBufferFloat&&(r=!1,$.Warn("Render to half float textures is not supported. Mipmap generation forced to false."));let d=e,u=d;if(c.width=d,c.height=u,c.invertY=s,c._compression=o,!this.needPOTTextures||xh(c.width)&&xh(c.height)||(r=!1),n)this.updateRawCubeTexture(c,n,t,i,s,o);else{let p=this._getRGBABufferInternalSizedFormat(i),g=0;this._bindTextureDirectly(l.TEXTURE_CUBE_MAP,c,!0);for(let v=0;v<6;v++)o?l.compressedTexImage2D(l.TEXTURE_CUBE_MAP_POSITIVE_X+v,g,this.getCaps().s3tc[o],c.width,c.height,0,void 0):l.texImage2D(l.TEXTURE_CUBE_MAP_POSITIVE_X+v,g,p,c.width,c.height,0,h,f,null);this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP,null)}this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP,c,!0),n&&r&&this._gl.generateMipmap(this._gl.TEXTURE_CUBE_MAP);let _=this._getSamplingParameters(a,r);return l.texParameteri(l.TEXTURE_CUBE_MAP,l.TEXTURE_MAG_FILTER,_.mag),l.texParameteri(l.TEXTURE_CUBE_MAP,l.TEXTURE_MIN_FILTER,_.min),l.texParameteri(l.TEXTURE_CUBE_MAP,l.TEXTURE_WRAP_S,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_CUBE_MAP,l.TEXTURE_WRAP_T,l.CLAMP_TO_EDGE),this._bindTextureDirectly(l.TEXTURE_CUBE_MAP,null),c.generateMipMaps=r,c.samplingMode=a,c.isReady=!0,c};bt.prototype.updateRawCubeTexture=function(n,e,t,i,r,s=null,a=0){n._bufferViewArray=e,n.format=t,n.type=i,n.invertY=r,n._compression=s;let o=this._gl,l=this._getWebGLTextureType(i),c=this._getInternalFormat(t),f=this._getRGBABufferInternalSizedFormat(i),h=!1;c===o.RGB&&(c=o.RGBA,h=!0),this._bindTextureDirectly(o.TEXTURE_CUBE_MAP,n,!0),this._unpackFlipY(r===void 0?!0:!!r),n.width%4!==0&&o.pixelStorei(o.UNPACK_ALIGNMENT,1);for(let u=0;u<6;u++){let m=e[u];s?o.compressedTexImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+u,a,this.getCaps().s3tc[s],n.width,n.height,0,m):(h&&(m=i3(m,n.width,n.height,i)),o.texImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+u,a,f,n.width,n.height,0,c,l,m))}(!this.needPOTTextures||xh(n.width)&&xh(n.height))&&n.generateMipMaps&&a===0&&this._gl.generateMipmap(this._gl.TEXTURE_CUBE_MAP),this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP,null),n.isReady=!0};bt.prototype.createRawCubeTextureFromUrl=function(n,e,t,i,r,s,a,o,l=null,c=null,f=3,h=!1){let d=this._gl,u=this.createRawCubeTexture(null,t,i,r,!s,h,f,null);e==null||e.addPendingData(u),u.url=n,u.isReady=!1,this._internalTexturesCache.push(u);let m=(p,g)=>{e==null||e.removePendingData(u),c&&c(p?p.status+" "+p.statusText:"Failed to parse texture data",g)},_=async p=>{if(!u._hardwareTexture)return;let g=a(p);if(!g)return;let v=g instanceof Promise?await g:g,x=u.width;if(o){let A=this._getWebGLTextureType(r),E=this._getInternalFormat(i),T=this._getRGBABufferInternalSizedFormat(r),R=!1;E===d.RGB&&(E=d.RGBA,R=!0),this._bindTextureDirectly(d.TEXTURE_CUBE_MAP,u,!0),this._unpackFlipY(!1);let I=o(v);for(let y=0;y>y;for(let D=0;D<6;D++){let O=I[y][D];R&&(O=i3(O,M,M,r)),d.texImage2D(D,y,T,M,M,0,E,A,O)}}this._bindTextureDirectly(d.TEXTURE_CUBE_MAP,null)}else this.updateRawCubeTexture(u,v,i,r,h);u.isReady=!0,e==null||e.removePendingData(u),u.onLoadedObservable.notifyObservers(u),u.onLoadedObservable.clear(),l&&l()};return this._loadFile(n,p=>{_(p).catch(g=>{m(void 0,g)})},void 0,e==null?void 0:e.offlineProvider,!0,m),u};bt.prototype.createRawTexture2DArray=r3(!1);bt.prototype.createRawTexture3D=r3(!0);bt.prototype.updateRawTexture2DArray=n3(!1);bt.prototype.updateRawTexture3D=n3(!0)});var a3=C(()=>{hs();qc();bt.prototype._readTexturePixelsSync=function(n,e,t,i=-1,r=0,s=null,a=!0,o=!1,l=0,c=0){var d,u,m;let f=this._gl;if(!f)throw new Error("Engine does not have gl rendering context.");if(!this._dummyFramebuffer){let _=f.createFramebuffer();if(!_)throw new Error("Unable to create dummy framebuffer");this._dummyFramebuffer=_}f.bindFramebuffer(f.FRAMEBUFFER,this._dummyFramebuffer),i>-1&&(n.is2DArray||n.is3D)?f.framebufferTextureLayer(f.FRAMEBUFFER,f.COLOR_ATTACHMENT0,(d=n._hardwareTexture)==null?void 0:d.underlyingResource,r,i):i>-1?f.framebufferTexture2D(f.FRAMEBUFFER,f.COLOR_ATTACHMENT0,f.TEXTURE_CUBE_MAP_POSITIVE_X+i,(u=n._hardwareTexture)==null?void 0:u.underlyingResource,r):f.framebufferTexture2D(f.FRAMEBUFFER,f.COLOR_ATTACHMENT0,f.TEXTURE_2D,(m=n._hardwareTexture)==null?void 0:m.underlyingResource,r);let h=n.type!==void 0?this._getWebGLTextureType(n.type):f.UNSIGNED_BYTE;if(o)s||(s=x1(n.type,4*e*t));else switch(h){case f.UNSIGNED_BYTE:s||(s=new Uint8Array(4*e*t)),h=f.UNSIGNED_BYTE;break;default:s||(s=new Float32Array(4*e*t)),h=f.FLOAT;break}return a&&this.flushFramebuffer(),f.readPixels(l,c,e,t,f.RGBA,h,s),f.bindFramebuffer(f.FRAMEBUFFER,this._currentFramebuffer),s};bt.prototype._readTexturePixels=function(n,e,t,i=-1,r=0,s=null,a=!0,o=!1,l=0,c=0){return Promise.resolve(this._readTexturePixelsSync(n,e,t,i,r,s,a,o,l,c))}});var o3=C(()=>{hs();bt.prototype.updateDynamicIndexBuffer=function(n,e,t=0){this._currentBoundBuffer[this._gl.ELEMENT_ARRAY_BUFFER]=null,this.bindIndexBuffer(n);let i;n.is32Bits?i=e instanceof Uint32Array?e:new Uint32Array(e):i=e instanceof Uint16Array?e:new Uint16Array(e),this._gl.bufferData(this._gl.ELEMENT_ARRAY_BUFFER,i,this._gl.DYNAMIC_DRAW),this._resetIndexBufferBinding()};bt.prototype.updateDynamicVertexBuffer=function(n,e,t,i){this.bindArrayBuffer(n),t===void 0&&(t=0);let r=e.byteLength||e.length;i===void 0||i>=r&&t===0?e instanceof Array?this._gl.bufferSubData(this._gl.ARRAY_BUFFER,t,new Float32Array(e)):this._gl.bufferSubData(this._gl.ARRAY_BUFFER,t,e):e instanceof Array?this._gl.bufferSubData(this._gl.ARRAY_BUFFER,t,new Float32Array(e).subarray(0,i/4)):(ArrayBuffer.isView(e)?e=new Uint8Array(e.buffer,e.byteOffset,i):e=new Uint8Array(e,0,i),this._gl.bufferSubData(this._gl.ARRAY_BUFFER,t,e)),this._resetVertexBufferBinding()}});var l3=C(()=>{hs();ks();Pt();Wo();bt.prototype._createDepthStencilCubeTexture=function(n,e){let t=new wi(this,12);if(t.isCube=!0,this.webGLVersion===1)return $.Error("Depth cube texture is not supported by WebGL 1."),t;let i={bilinearFiltering:!1,comparisonFunction:0,generateStencil:!1,...e},r=this._gl;this._bindTextureDirectly(r.TEXTURE_CUBE_MAP,t,!0),this._setupDepthStencilTexture(t,n,i.bilinearFiltering,i.comparisonFunction);for(let s=0;s<6;s++)i.generateStencil?r.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+s,0,r.DEPTH24_STENCIL8,n,n,0,r.DEPTH_STENCIL,r.UNSIGNED_INT_24_8,null):r.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+s,0,r.DEPTH_COMPONENT24,n,n,0,r.DEPTH_COMPONENT,r.UNSIGNED_INT,null);return this._bindTextureDirectly(r.TEXTURE_CUBE_MAP,null),this._internalTexturesCache.push(t),t};bt.prototype._setCubeMapTextureParams=function(n,e,t){let i=this._gl;i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_MIN_FILTER,e?i.LINEAR_MIPMAP_LINEAR:i.LINEAR),i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),n.samplingMode=e?3:2,e&&this.getCaps().textureMaxLevel&&t!==void 0&&t>0&&(i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_MAX_LEVEL,t),n._maxLodLevel=t),this._bindTextureDirectly(i.TEXTURE_CUBE_MAP,null)};bt.prototype.createCubeTexture=function(n,e,t,i,r=null,s=null,a,o=null,l=!1,c=0,f=0,h=null,d,u=!1,m=null){let _=this._gl;return this.createCubeTextureBase(n,e,t,!!i,r,s,a,o,l,c,f,h,p=>this._bindTextureDirectly(_.TEXTURE_CUBE_MAP,p,!0),(p,g)=>{let v=this.needPOTTextures?fs(g[0].width,this._caps.maxCubemapTextureSize):g[0].width,x=v,A=[_.TEXTURE_CUBE_MAP_POSITIVE_X,_.TEXTURE_CUBE_MAP_POSITIVE_Y,_.TEXTURE_CUBE_MAP_POSITIVE_Z,_.TEXTURE_CUBE_MAP_NEGATIVE_X,_.TEXTURE_CUBE_MAP_NEGATIVE_Y,_.TEXTURE_CUBE_MAP_NEGATIVE_Z];this._bindTextureDirectly(_.TEXTURE_CUBE_MAP,p,!0),this._unpackFlipY(!1);let E=a?this._getInternalFormat(a,p._useSRGBBuffer):p._useSRGBBuffer?this._glSRGBExtensionValues.SRGB8_ALPHA8:_.RGBA,T=a?this._getInternalFormat(a):_.RGBA;p._useSRGBBuffer&&this.webGLVersion===1&&(T=E);for(let R=0;R{o_();ZS=class{get depthStencilTexture(){return this._depthStencilTexture}setDepthStencilTexture(e,t=!0){t&&this._depthStencilTexture&&this._depthStencilTexture.dispose(),this._depthStencilTexture=e,this._generateDepthBuffer=this._generateStencilBuffer=this._depthStencilTextureWithStencil=!1,e&&(this._generateDepthBuffer=!0,this._generateStencilBuffer=this._depthStencilTextureWithStencil=yl(e.format))}get depthStencilTextureWithStencil(){return this._depthStencilTextureWithStencil}get isCube(){return this._isCube}get isMulti(){return this._isMulti}get is2DArray(){return this.layers>0}get is3D(){return this.depth>0}get size(){return this.width}get width(){var e;return(e=this._size.width)!=null?e:this._size}get height(){var e;return(e=this._size.height)!=null?e:this._size}get layers(){return this._size.layers||0}get depth(){return this._size.depth||0}get texture(){var e,t;return(t=(e=this._textures)==null?void 0:e[0])!=null?t:null}get textures(){return this._textures}get faceIndices(){return this._faceIndices}get layerIndices(){return this._layerIndices}getBaseArrayLayer(e){var s,a,o,l;if(!this._textures)return-1;let t=this._textures[e],i=(a=(s=this._layerIndices)==null?void 0:s[e])!=null?a:0,r=(l=(o=this._faceIndices)==null?void 0:o[e])!=null?l:0;return t.isCube?i*6+r:t.is3D?0:i}get samples(){return this._samples}setSamples(e,t=!0,i=!1){if(this.samples===e&&!i)return e;let r=this._isMulti?this._engine.updateMultipleRenderTargetTextureSampleCount(this,e,t):this._engine.updateRenderTargetTextureSampleCount(this,e);return this._samples=e,r}resolveMSAATextures(){this.isMulti?this._engine.resolveMultiFramebuffer(this):this._engine.resolveFramebuffer(this)}generateMipMaps(){this._engine._currentRenderTarget===this&&(this.isMulti?this._engine.unBindMultiColorAttachmentFramebuffer(this,!0):this._engine.unBindFramebuffer(this,!0)),this.isMulti?this._engine.generateMipMapsMultiFramebuffer(this):this._engine.generateMipMapsFramebuffer(this)}constructor(e,t,i,r,s){this._textures=null,this._faceIndices=null,this._layerIndices=null,this._samples=1,this._attachments=null,this._generateStencilBuffer=!1,this._generateDepthBuffer=!1,this._depthStencilTextureWithStencil=!1,this.disableAutomaticMSAAResolve=!1,this.resolveMSAAColors=!0,this.resolveMSAADepth=!1,this.resolveMSAAStencil=!1,this.depthReadOnly=!1,this.stencilReadOnly=!1,this._isMulti=e,this._isCube=t,this._size=i,this._engine=r,this._depthStencilTexture=null,this.label=s}setTextures(e){Array.isArray(e)?this._textures=e:e?this._textures=[e]:this._textures=null}setTexture(e,t=0,i=!0){this._textures||(this._textures=[]),this._textures[t]!==e&&(this._textures[t]&&i&&this._textures[t].dispose(),this._textures[t]=e)}setLayerAndFaceIndices(e,t){this._layerIndices=e,this._faceIndices=t}setLayerAndFaceIndex(e=0,t,i){this._layerIndices||(this._layerIndices=[]),this._faceIndices||(this._faceIndices=[]),t!==void 0&&t>=0&&(this._layerIndices[e]=t),i!==void 0&&i>=0&&(this._faceIndices[e]=i)}createDepthStencilTexture(e=0,t=!0,i=!1,r=1,s=14,a){var o;return(o=this._depthStencilTexture)==null||o.dispose(),this._depthStencilTextureWithStencil=i,this._depthStencilTextureLabel=a,this._depthStencilTexture=this._engine.createDepthStencilTexture(this._size,{bilinearFiltering:t,comparisonFunction:e,generateStencil:i,isCube:this._isCube,samples:r,depthTextureFormat:s,label:a},this),this._depthStencilTexture}_shareDepth(e){this.shareDepth(e)}shareDepth(e){this._depthStencilTexture&&(e._depthStencilTexture&&e._depthStencilTexture.dispose(),e._depthStencilTexture=this._depthStencilTexture,e._depthStencilTextureWithStencil=this._depthStencilTextureWithStencil,this._depthStencilTexture.incrementReferences())}_swapAndDie(e){this.texture&&this.texture._swapAndDie(e),this._textures=null,this.dispose(!0)}_cloneRenderTargetWrapper(){var t,i,r,s,a,o,l,c;let e=null;if(this._isMulti){let f=this.textures;if(f&&f.length>0){let h=!1,d=f.length,u=-1,m=f[f.length-1]._source;(m===14||m===12)&&(h=!0,u=f[f.length-1].format,d--);let _=[],p=[],g=[],v=[],x=[],A=[],E=[],T={};for(let y=0;y1&&e.setSamples(this.samples),e._swapRenderTargetWrapper(this),e.dispose()}}releaseTextures(){if(this._textures)for(let e=0;e{c3();o_();QS=class extends ZS{setDepthStencilTexture(e,t=!0){if(super.setDepthStencilTexture(e,t),!e)return;let i=this._engine,r=this._context,s=e._hardwareTexture;if(s&&e._autoMSAAManagement&&this._MSAAFramebuffer){let a=i._currentFramebuffer;i._bindUnboundFramebuffer(this._MSAAFramebuffer),r.framebufferRenderbuffer(r.FRAMEBUFFER,yl(e.format)?r.DEPTH_STENCIL_ATTACHMENT:r.DEPTH_ATTACHMENT,r.RENDERBUFFER,s.getMSAARenderBuffer()),i._bindUnboundFramebuffer(a)}}constructor(e,t,i,r,s){super(e,t,i,r),this._framebuffer=null,this._depthStencilBuffer=null,this._MSAAFramebuffer=null,this._colorTextureArray=null,this._depthStencilTextureArray=null,this._disposeOnlyFramebuffers=!1,this._currentLOD=0,this._context=s}_cloneRenderTargetWrapper(){let e;return this._colorTextureArray&&this._depthStencilTextureArray?(e=this._engine.createMultiviewRenderTargetTexture(this.width,this.height),e.texture.isReady=!0):e=super._cloneRenderTargetWrapper(),e}_swapRenderTargetWrapper(e){super._swapRenderTargetWrapper(e),e._framebuffer=this._framebuffer,e._depthStencilBuffer=this._depthStencilBuffer,e._MSAAFramebuffer=this._MSAAFramebuffer,e._colorTextureArray=this._colorTextureArray,e._depthStencilTextureArray=this._depthStencilTextureArray,this._framebuffer=this._depthStencilBuffer=this._MSAAFramebuffer=this._colorTextureArray=this._depthStencilTextureArray=null}createDepthStencilTexture(e=0,t=!0,i=!1,r=1,s=14,a){if(this._depthStencilBuffer){let o=this._engine,l=o._currentFramebuffer,c=this._context;o._bindUnboundFramebuffer(this._framebuffer),c.framebufferRenderbuffer(c.FRAMEBUFFER,c.DEPTH_STENCIL_ATTACHMENT,c.RENDERBUFFER,null),c.framebufferRenderbuffer(c.FRAMEBUFFER,c.DEPTH_ATTACHMENT,c.RENDERBUFFER,null),c.framebufferRenderbuffer(c.FRAMEBUFFER,c.STENCIL_ATTACHMENT,c.RENDERBUFFER,null),o._bindUnboundFramebuffer(l),c.deleteRenderbuffer(this._depthStencilBuffer),this._depthStencilBuffer=null}return super.createDepthStencilTexture(e,t,i,r,s,a)}shareDepth(e){super.shareDepth(e);let t=this._context,i=this._depthStencilBuffer,r=e._MSAAFramebuffer||e._framebuffer,s=this._engine;e._depthStencilBuffer&&e._depthStencilBuffer!==i&&t.deleteRenderbuffer(e._depthStencilBuffer),e._depthStencilBuffer=i;let a=e._generateStencilBuffer?t.DEPTH_STENCIL_ATTACHMENT:t.DEPTH_ATTACHMENT;s._bindUnboundFramebuffer(r),t.framebufferRenderbuffer(t.FRAMEBUFFER,a,t.RENDERBUFFER,i),s._bindUnboundFramebuffer(null)}_bindTextureRenderTarget(e,t=0,i,r=0){var f,h,d,u;let s=e._hardwareTexture;if(!s)return;let a=this._framebuffer,o=this._engine,l=o._currentFramebuffer;o._bindUnboundFramebuffer(a);let c;if(o.webGLVersion>1){let m=this._context;c=m["COLOR_ATTACHMENT"+t],e.is2DArray||e.is3D?(i=(h=i!=null?i:(f=this.layerIndices)==null?void 0:f[t])!=null?h:0,m.framebufferTextureLayer(m.FRAMEBUFFER,c,s.underlyingResource,r,i)):e.isCube?(i=(u=i!=null?i:(d=this.faceIndices)==null?void 0:d[t])!=null?u:0,m.framebufferTexture2D(m.FRAMEBUFFER,c,m.TEXTURE_CUBE_MAP_POSITIVE_X+i,s.underlyingResource,r)):m.framebufferTexture2D(m.FRAMEBUFFER,c,m.TEXTURE_2D,s.underlyingResource,r)}else{let m=this._context;c=m["COLOR_ATTACHMENT"+t+"_WEBGL"];let _=i!==void 0?m.TEXTURE_CUBE_MAP_POSITIVE_X+i:m.TEXTURE_2D;m.framebufferTexture2D(m.FRAMEBUFFER,c,_,s.underlyingResource,r)}if(e._autoMSAAManagement&&this._MSAAFramebuffer){let m=this._context;o._bindUnboundFramebuffer(this._MSAAFramebuffer),m.framebufferRenderbuffer(m.FRAMEBUFFER,c,m.RENDERBUFFER,s.getMSAARenderBuffer())}o._bindUnboundFramebuffer(l)}setTexture(e,t=0,i=!0){super.setTexture(e,t,i),this._bindTextureRenderTarget(e,t)}setLayerAndFaceIndices(e,t){var r,s;if(super.setLayerAndFaceIndices(e,t),!this.textures||!this.layerIndices||!this.faceIndices)return;let i=(s=(r=this._attachments)==null?void 0:r.length)!=null?s:this.textures.length;for(let a=0;a{Lr();Re.prototype.createDepthStencilTexture=function(n,e,t){if(e.isCube){let i=n.width||n;return this._createDepthStencilCubeTexture(i,e)}else return this._createDepthStencilTexture(n,e,t)}});var h3=C(()=>{ks();Pt();hs();f3();o_();H0();bt.prototype._createHardwareRenderTargetWrapper=function(n,e,t){let i=new QS(n,e,t,this,this._gl);return this._renderTargetWrapperCache.push(i),i};bt.prototype.createRenderTargetTexture=function(n,e){var _,p;let t=this._createHardwareRenderTargetWrapper(!1,!1,n),i=!0,r=!1,s=!1,a,o=1,l;e!==void 0&&typeof e=="object"&&(i=(_=e.generateDepthBuffer)!=null?_:!0,r=!!e.generateStencilBuffer,s=!!e.noColorAttachment,a=e.colorAttachment,o=(p=e.samples)!=null?p:1,l=e.label);let c=a||(s?null:this._createInternalTexture(n,e,!0,5)),f=n.width||n,h=n.height||n,d=this._currentFramebuffer,u=this._gl,m=u.createFramebuffer();if(this._bindUnboundFramebuffer(m),t._depthStencilBuffer=this._setupFramebufferDepthAttachments(r,i,f,h),c&&!c.is2DArray&&!c.is3D&&u.framebufferTexture2D(u.FRAMEBUFFER,u.COLOR_ATTACHMENT0,u.TEXTURE_2D,c._hardwareTexture.underlyingResource,0),this._bindUnboundFramebuffer(d),t.label=l!=null?l:"RenderTargetWrapper",t._framebuffer=m,t._generateDepthBuffer=i,t._generateStencilBuffer=r,t.setTextures(c),!a)this.updateRenderTargetTextureSampleCount(t,o);else if(t._samples=a.samples,a.samples>1){let g=a._hardwareTexture.getMSAARenderBuffer(0);t._MSAAFramebuffer=u.createFramebuffer(),this._bindUnboundFramebuffer(t._MSAAFramebuffer),u.framebufferRenderbuffer(u.FRAMEBUFFER,u.COLOR_ATTACHMENT0,u.RENDERBUFFER,g),this._bindUnboundFramebuffer(null)}return t};bt.prototype._createDepthStencilTexture=function(n,e,t){var u;let i=this._gl,r=n.layers||0,s=n.depth||0,a=i.TEXTURE_2D;r!==0?a=i.TEXTURE_2D_ARRAY:s!==0&&(a=i.TEXTURE_3D);let o=new wi(this,12);if(o.label=e.label,!this._caps.depthTextureExtension)return $.Error("Depth texture is not supported by your browser or hardware."),o;let l={bilinearFiltering:!1,comparisonFunction:0,generateStencil:!1,...e};if(this._bindTextureDirectly(a,o,!0),this._setupDepthStencilTexture(o,n,l.comparisonFunction===0?!1:l.bilinearFiltering,l.comparisonFunction,l.samples),l.depthTextureFormat!==void 0){if(l.depthTextureFormat!==15&&l.depthTextureFormat!==16&&l.depthTextureFormat!==17&&l.depthTextureFormat!==13&&l.depthTextureFormat!==14&&l.depthTextureFormat!==18)return $.Error(`Depth texture ${l.depthTextureFormat} format is not supported.`),o;o.format=l.depthTextureFormat}else o.format=l.generateStencil?13:16;let c=yl(o.format),f=this._getWebGLTextureTypeFromDepthTextureFormat(o.format),h=c?i.DEPTH_STENCIL:i.DEPTH_COMPONENT,d=this._getInternalFormatFromDepthTextureFormat(o.format,!0,c);return o.is2DArray?i.texImage3D(a,0,d,o.width,o.height,r,0,h,f,null):o.is3D?i.texImage3D(a,0,d,o.width,o.height,s,0,h,f,null):i.texImage2D(a,0,d,o.width,o.height,0,h,f,null),this._bindTextureDirectly(a,null),this._internalTexturesCache.push(o),t._depthStencilBuffer&&(i.deleteRenderbuffer(t._depthStencilBuffer),t._depthStencilBuffer=null),this._bindUnboundFramebuffer((u=t._MSAAFramebuffer)!=null?u:t._framebuffer),t._generateStencilBuffer=c,t._depthStencilTextureWithStencil=c,t._depthStencilBuffer=this._setupFramebufferDepthAttachments(t._generateStencilBuffer,t._generateDepthBuffer,t.width,t.height,t.samples,o.format),this._bindUnboundFramebuffer(null),o};bt.prototype.updateRenderTargetTextureSampleCount=function(n,e){var s,a;if(this.webGLVersion<2||!n)return 1;if(n.samples===e)return e;let t=this._gl;e=Math.min(e,this.getCaps().maxMSAASamples),n._depthStencilBuffer&&(t.deleteRenderbuffer(n._depthStencilBuffer),n._depthStencilBuffer=null),n._MSAAFramebuffer&&(t.deleteFramebuffer(n._MSAAFramebuffer),n._MSAAFramebuffer=null);let i=(s=n.texture)==null?void 0:s._hardwareTexture;if(i==null||i.releaseMSAARenderBuffers(),n.texture&&e>1&&typeof t.renderbufferStorageMultisample=="function"){let o=t.createFramebuffer();if(!o)throw new Error("Unable to create multi sampled framebuffer");n._MSAAFramebuffer=o,this._bindUnboundFramebuffer(n._MSAAFramebuffer);let l=this._createRenderBuffer(n.texture.width,n.texture.height,e,-1,this._getRGBABufferInternalSizedFormat(n.texture.type,n.texture.format,n.texture._useSRGBBuffer),t.COLOR_ATTACHMENT0,!1);if(!l)throw new Error("Unable to create multi sampled framebuffer");i==null||i.addMSAARenderBuffer(l)}this._bindUnboundFramebuffer((a=n._MSAAFramebuffer)!=null?a:n._framebuffer),n.texture&&(n.texture.samples=e),n._samples=e;let r=n._depthStencilTexture?n._depthStencilTexture.format:void 0;return n._depthStencilBuffer=this._setupFramebufferDepthAttachments(n._generateStencilBuffer,n._generateDepthBuffer,n.width,n.height,e,r),this._bindUnboundFramebuffer(null),e};bt.prototype._setupDepthStencilTexture=function(n,e,t,i,r=1){var d,u;let s=(d=e.width)!=null?d:e,a=(u=e.height)!=null?u:e,o=e.layers||0,l=e.depth||0;n.baseWidth=s,n.baseHeight=a,n.width=s,n.height=a,n.is2DArray=o>0,n.depth=o||l,n.isReady=!0,n.samples=r,n.generateMipMaps=!1,n.samplingMode=t?2:1,n.type=0,n._comparisonFunction=i;let c=this._gl,f=this._getTextureTarget(n),h=this._getSamplingParameters(n.samplingMode,!1);c.texParameteri(f,c.TEXTURE_MAG_FILTER,h.mag),c.texParameteri(f,c.TEXTURE_MIN_FILTER,h.min),c.texParameteri(f,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(f,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE),this.webGLVersion>1&&(i===0?(c.texParameteri(f,c.TEXTURE_COMPARE_FUNC,515),c.texParameteri(f,c.TEXTURE_COMPARE_MODE,c.NONE)):(c.texParameteri(f,c.TEXTURE_COMPARE_FUNC,i),c.texParameteri(f,c.TEXTURE_COMPARE_MODE,c.COMPARE_REF_TO_TEXTURE)))}});var d3=C(()=>{hs();bt.prototype.setDepthStencilTexture=function(n,e,t,i){n!==void 0&&(e&&(this._boundUniforms[n]=e),!t||!t.depthStencilTexture?this._setTexture(n,null,void 0,void 0,i):this._setTexture(n,t,!1,!0,i))}});var u3=C(()=>{ks();Pt();hs();bt.prototype.createRenderTargetCubeTexture=function(n,e){let t=this._createHardwareRenderTargetWrapper(!1,!0,n),i={generateMipMaps:!0,generateDepthBuffer:!0,generateStencilBuffer:!1,type:0,samplingMode:3,format:5,...e};i.generateStencilBuffer=i.generateDepthBuffer&&i.generateStencilBuffer,(i.type===1&&!this._caps.textureFloatLinearFiltering||i.type===2&&!this._caps.textureHalfFloatLinearFiltering)&&(i.samplingMode=1);let r=this._gl,s=new wi(this,5);this._bindTextureDirectly(r.TEXTURE_CUBE_MAP,s,!0);let a=this._getSamplingParameters(i.samplingMode,i.generateMipMaps);i.type===1&&!this._caps.textureFloat&&(i.type=0,$.Warn("Float textures are not supported. Cube render target forced to TEXTURETYPE_UNESIGNED_BYTE type")),r.texParameteri(r.TEXTURE_CUBE_MAP,r.TEXTURE_MAG_FILTER,a.mag),r.texParameteri(r.TEXTURE_CUBE_MAP,r.TEXTURE_MIN_FILTER,a.min),r.texParameteri(r.TEXTURE_CUBE_MAP,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_CUBE_MAP,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE);for(let l=0;l<6;l++)r.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+l,0,this._getRGBABufferInternalSizedFormat(i.type,i.format),n,n,0,this._getInternalFormat(i.format),this._getWebGLTextureType(i.type),null);let o=r.createFramebuffer();return this._bindUnboundFramebuffer(o),t._depthStencilBuffer=this._setupFramebufferDepthAttachments(i.generateStencilBuffer,i.generateDepthBuffer,n,n),i.generateMipMaps&&r.generateMipmap(r.TEXTURE_CUBE_MAP),this._bindTextureDirectly(r.TEXTURE_CUBE_MAP,null),this._bindUnboundFramebuffer(null),t._framebuffer=o,t._generateDepthBuffer=i.generateDepthBuffer,t._generateStencilBuffer=i.generateStencilBuffer,s.width=n,s.height=n,s.isReady=!0,s.isCube=!0,s.samples=1,s.generateMipMaps=i.generateMipMaps,s.samplingMode=i.samplingMode,s.type=i.type,s.format=i.format,this._internalTexturesCache.push(s),t.setTextures(s),t}});var m3,Ru,hr,Nt,An=C(()=>{m3=.45454545454545453,Ru=2.2,hr=(1+Math.sqrt(5))/2,Nt=.001});function on(n,e){let t=[];for(let i=0;i{let s=r.previous;if(!s)return;let a=r.next;a?(s.next=a,a.previous=s):(s.next=void 0,n[e]=s),r.next=void 0,r.previous=void 0}}function JS(n,e){let t=Jte.map(i=>Qte(n,i,e));return()=>{for(let i of t)i==null||i()}}var Jte,Ho=C(()=>{Jte=["push","splice","pop","shift","unshift"]});function wt(n,e){p3[n]=e}function dn(n){return p3[n]}var p3,Vi=C(()=>{p3={}});function Ei(n,e,t=1401298e-51){return Math.abs(n-e)<=t}function $i(n,e){return n===e?n:Math.random()*(e-n)+n}function Ka(n,e,t){return n+(e-n)*t}function _3(n,e,t,i,r){let s=r*r,a=r*s,o=2*a-3*s+1,l=-2*a+3*s,c=a-2*s+r,f=a-s;return n*o+t*l+e*c+i*f}function Ft(n,e=0,t=1){return Math.min(t,Math.max(e,n))}function g3(n){return n-=Math.PI*2*Math.floor((n+Math.PI)/(Math.PI*2)),n}function ja(n){let e=n.toString(16);return n<=15?("0"+e).toUpperCase():e.toUpperCase()}function v3(n){if(Math.log2)return Math.floor(Math.log2(n));if(n<0)return NaN;if(n===0)return-1/0;let e=0;if(n<1){for(;n<1;)e++,n=n*2;e=-e}else if(n>1)for(;n>1;)e++,n=Math.floor(n/2);return e}function $S(n,e){let t=n%e;return t===0?e:$S(e,t)}var xn=C(()=>{});function E3(n){n.updateFlag=bu._UpdateFlagSeed++}function z0(n,e,t,i=0){let r=n.asArray(),s=e.asArray(),a=r[0],o=r[1],l=r[2],c=r[3],f=r[4],h=r[5],d=r[6],u=r[7],m=r[8],_=r[9],p=r[10],g=r[11],v=r[12],x=r[13],A=r[14],E=r[15],T=s[0],R=s[1],I=s[2],y=s[3],M=s[4],D=s[5],O=s[6],V=s[7],N=s[8],w=s[9],U=s[10],G=s[11],J=s[12],Y=s[13],Q=s[14],X=s[15];t[i]=a*T+o*M+l*N+c*J,t[i+1]=a*R+o*D+l*w+c*Y,t[i+2]=a*I+o*O+l*U+c*Q,t[i+3]=a*y+o*V+l*G+c*X,t[i+4]=f*T+h*M+d*N+u*J,t[i+5]=f*R+h*D+d*w+u*Y,t[i+6]=f*I+h*O+d*U+u*Q,t[i+7]=f*y+h*V+d*G+u*X,t[i+8]=m*T+_*M+p*N+g*J,t[i+9]=m*R+_*D+p*w+g*Y,t[i+10]=m*I+_*O+p*U+g*Q,t[i+11]=m*y+_*V+p*G+g*X,t[i+12]=v*T+x*M+A*N+E*J,t[i+13]=v*R+x*D+A*w+E*Y,t[i+14]=v*I+x*O+A*U+E*Q,t[i+15]=v*y+x*V+A*G+E*X}function Rh(n,e,t,i=0){z0(n,e,t.asArray(),i),E3(t)}function S3(n,e,t=0){let i=n.asArray();e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e[t+9]=i[9],e[t+10]=i[10],e[t+11]=i[11],e[t+12]=i[12],e[t+13]=i[13],e[t+14]=i[14],e[t+15]=i[15]}function l_(n,e){let t=X0(n,e.asArray());return t&&E3(e),t}function X0(n,e){let t=n.asArray(),i=t[0],r=t[1],s=t[2],a=t[3],o=t[4],l=t[5],c=t[6],f=t[7],h=t[8],d=t[9],u=t[10],m=t[11],_=t[12],p=t[13],g=t[14],v=t[15],x=u*v-g*m,A=d*v-p*m,E=d*g-p*u,T=h*v-_*m,R=h*g-u*_,I=h*p-_*d,y=+(l*x-c*A+f*E),M=-(o*x-c*T+f*R),D=+(o*A-l*T+f*I),O=-(o*E-l*R+c*I),V=i*y+r*M+s*D+a*O;if(V===0)return!1;let N=1/V,w=c*v-g*f,U=l*v-p*f,G=l*g-p*c,J=o*v-_*f,Y=o*g-_*c,Q=o*p-_*l,X=c*m-u*f,j=l*m-d*f,me=l*u-d*c,xe=o*m-h*f,Ge=o*u-h*c,se=o*d-h*l,pe=-(r*x-s*A+a*E),ie=+(i*x-s*T+a*R),_e=-(i*A-r*T+a*I),Pe=+(i*E-r*R+s*I),de=+(r*w-s*U+a*G),be=-(i*w-s*J+a*Y),Ze=+(i*U-r*J+a*Q),Tt=-(i*G-r*Y+s*Q),Ye=-(r*X-s*j+a*me),Ke=+(i*X-s*xe+a*Ge),fe=-(i*j-r*xe+a*se),Fe=+(i*me-r*Ge+s*se);return e[0]=y*N,e[1]=pe*N,e[2]=de*N,e[3]=Ye*N,e[4]=M*N,e[5]=ie*N,e[6]=be*N,e[7]=Ke*N,e[8]=D*N,e[9]=_e*N,e[10]=Ze*N,e[11]=fe*N,e[12]=O*N,e[13]=Pe*N,e[14]=Tt*N,e[15]=Fe*N,!0}var bu,Y0=C(()=>{bu=class{};bu._UpdateFlagSeed=0});var kn,Ne,b,Mi,ze,K,We,Z,bh,Ve=C(()=>{An();Ho();Vi();N0();Pi();xn();Y0();kn=n=>parseInt(n.toString().replace(/\W/g,"")),Ne=class n{constructor(e=0,t=0){this.x=e,this.y=t}toString(){return`{X: ${this.x} Y: ${this.y}}`}getClassName(){return"Vector2"}getHashCode(){let e=kn(this.x),t=kn(this.y),i=e;return i=i*397^t,i}toArray(e,t=0){return e[t]=this.x,e[t+1]=this.y,this}fromArray(e,t=0){return n.FromArrayToRef(e,t,this),this}asArray(){return[this.x,this.y]}copyFrom(e){return this.x=e.x,this.y=e.y,this}copyFromFloats(e,t){return this.x=e,this.y=t,this}set(e,t){return this.copyFromFloats(e,t)}setAll(e){return this.copyFromFloats(e,e)}add(e){return new n(this.x+e.x,this.y+e.y)}addToRef(e,t){return t.x=this.x+e.x,t.y=this.y+e.y,t}addInPlace(e){return this.x+=e.x,this.y+=e.y,this}addInPlaceFromFloats(e,t){return this.x+=e,this.y+=t,this}addVector3(e){return new n(this.x+e.x,this.y+e.y)}subtract(e){return new n(this.x-e.x,this.y-e.y)}subtractToRef(e,t){return t.x=this.x-e.x,t.y=this.y-e.y,t}subtractInPlace(e){return this.x-=e.x,this.y-=e.y,this}multiplyInPlace(e){return this.x*=e.x,this.y*=e.y,this}multiply(e){return new n(this.x*e.x,this.y*e.y)}multiplyToRef(e,t){return t.x=this.x*e.x,t.y=this.y*e.y,t}multiplyByFloats(e,t){return new n(this.x*e,this.y*t)}divide(e){return new n(this.x/e.x,this.y/e.y)}divideToRef(e,t){return t.x=this.x/e.x,t.y=this.y/e.y,t}divideInPlace(e){return this.x=this.x/e.x,this.y=this.y/e.y,this}minimizeInPlace(e){return this.minimizeInPlaceFromFloats(e.x,e.y)}maximizeInPlace(e){return this.maximizeInPlaceFromFloats(e.x,e.y)}minimizeInPlaceFromFloats(e,t){return this.x=Math.min(e,this.x),this.y=Math.min(t,this.y),this}maximizeInPlaceFromFloats(e,t){return this.x=Math.max(e,this.x),this.y=Math.max(t,this.y),this}subtractFromFloats(e,t){return new n(this.x-e,this.y-t)}subtractFromFloatsToRef(e,t,i){return i.x=this.x-e,i.y=this.y-t,i}negate(){return new n(-this.x,-this.y)}negateInPlace(){return this.x*=-1,this.y*=-1,this}negateToRef(e){return e.x=-this.x,e.y=-this.y,e}scaleInPlace(e){return this.x*=e,this.y*=e,this}scale(e){return new n(this.x*e,this.y*e)}scaleToRef(e,t){return t.x=this.x*e,t.y=this.y*e,t}scaleAndAddToRef(e,t){return t.x+=this.x*e,t.y+=this.y*e,t}equals(e){return e&&this.x===e.x&&this.y===e.y}equalsWithEpsilon(e,t=Nt){return e&&Ei(this.x,e.x,t)&&Ei(this.y,e.y,t)}equalsToFloats(e,t){return this.x===e&&this.y===t}floor(){return new n(Math.floor(this.x),Math.floor(this.y))}floorToRef(e){return e.x=Math.floor(this.x),e.y=Math.floor(this.y),e}fract(){return new n(this.x-Math.floor(this.x),this.y-Math.floor(this.y))}fractToRef(e){return e.x=this.x-Math.floor(this.x),e.y=this.y-Math.floor(this.y),e}rotate(e){return this.rotateToRef(e,new n)}rotateToRef(e,t){let i=Math.cos(e),r=Math.sin(e);return t.x=i*this.x-r*this.y,t.y=r*this.x+i*this.y,t}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}lengthSquared(){return this.x*this.x+this.y*this.y}normalize(){return this.normalizeFromLength(this.length())}normalizeFromLength(e){return e===0||e===1?this:this.scaleInPlace(1/e)}normalizeToNew(){let e=new n;return this.normalizeToRef(e),e}normalizeToRef(e){let t=this.length();return t===0&&(e.x=this.x,e.y=this.y),this.scaleToRef(1/t,e)}clone(){return new n(this.x,this.y)}dot(e){return this.x*e.x+this.y*e.y}static Zero(){return new n(0,0)}static One(){return new n(1,1)}static Random(e=0,t=1){return new n($i(e,t),$i(e,t))}static RandomToRef(e=0,t=1,i){return i.copyFromFloats($i(e,t),$i(e,t))}static get ZeroReadOnly(){return n._ZeroReadOnly}static FromArray(e,t=0){return new n(e[t],e[t+1])}static FromArrayToRef(e,t,i){return i.x=e[t],i.y=e[t+1],i}static FromFloatsToRef(e,t,i){return i.copyFromFloats(e,t),i}static CatmullRom(e,t,i,r,s){let a=s*s,o=s*a,l=.5*(2*t.x+(-e.x+i.x)*s+(2*e.x-5*t.x+4*i.x-r.x)*a+(-e.x+3*t.x-3*i.x+r.x)*o),c=.5*(2*t.y+(-e.y+i.y)*s+(2*e.y-5*t.y+4*i.y-r.y)*a+(-e.y+3*t.y-3*i.y+r.y)*o);return new n(l,c)}static ClampToRef(e,t,i,r){return r.x=Ft(e.x,t.x,i.x),r.y=Ft(e.y,t.y,i.y),r}static Clamp(e,t,i){let r=Ft(e.x,t.x,i.x),s=Ft(e.y,t.y,i.y);return new n(r,s)}static Hermite(e,t,i,r,s){let a=s*s,o=s*a,l=2*o-3*a+1,c=-2*o+3*a,f=o-2*a+s,h=o-a,d=e.x*l+i.x*c+t.x*f+r.x*h,u=e.y*l+i.y*c+t.y*f+r.y*h;return new n(d,u)}static Hermite1stDerivative(e,t,i,r,s){return this.Hermite1stDerivativeToRef(e,t,i,r,s,new n)}static Hermite1stDerivativeToRef(e,t,i,r,s,a){let o=s*s;return a.x=(o-s)*6*e.x+(3*o-4*s+1)*t.x+(-o+s)*6*i.x+(3*o-2*s)*r.x,a.y=(o-s)*6*e.y+(3*o-4*s+1)*t.y+(-o+s)*6*i.y+(3*o-2*s)*r.y,a}static Lerp(e,t,i){return n.LerpToRef(e,t,i,new n)}static LerpToRef(e,t,i,r){return r.x=e.x+(t.x-e.x)*i,r.y=e.y+(t.y-e.y)*i,r}static Dot(e,t){return e.x*t.x+e.y*t.y}static Normalize(e){return n.NormalizeToRef(e,new n)}static NormalizeToRef(e,t){return e.normalizeToRef(t),t}static Minimize(e,t){let i=e.xt.x?e.x:t.x,r=e.y>t.y?e.y:t.y;return new n(i,r)}static Transform(e,t){return n.TransformToRef(e,t,new n)}static TransformToRef(e,t,i){let r=t.m,s=e.x*r[0]+e.y*r[4]+r[12],a=e.x*r[1]+e.y*r[5]+r[13];return i.x=s,i.y=a,i}static PointInTriangle(e,t,i,r){let s=.5*(-i.y*r.x+t.y*(-i.x+r.x)+t.x*(i.y-r.y)+i.x*r.y),a=s<0?-1:1,o=(t.y*r.x-t.x*r.y+(r.y-t.y)*e.x+(t.x-r.x)*e.y)*a,l=(t.x*i.y-t.y*i.x+(t.y-i.y)*e.x+(i.x-t.x)*e.y)*a;return o>0&&l>0&&o+l<2*s*a}static Distance(e,t){return Math.sqrt(n.DistanceSquared(e,t))}static DistanceSquared(e,t){let i=e.x-t.x,r=e.y-t.y;return i*i+r*r}static Center(e,t){return n.CenterToRef(e,t,new n)}static CenterToRef(e,t,i){return i.copyFromFloats((e.x+t.x)/2,(e.y+t.y)/2)}static DistanceOfPointFromSegment(e,t,i){let r=n.DistanceSquared(t,i);if(r===0)return n.Distance(e,t);let s=i.subtract(t),a=Math.max(0,Math.min(1,n.Dot(e.subtract(t),s)/r)),o=t.add(s.multiplyByFloats(a,a));return n.Distance(e,o)}};Ne._V8PerformanceHack=new Ne(.5,.5);Ne._ZeroReadOnly=Ne.Zero();Object.defineProperties(Ne.prototype,{dimension:{value:[2]},rank:{value:1}});b=class n{get x(){return this._x}set x(e){this._x=e,this._isDirty=!0}get y(){return this._y}set y(e){this._y=e,this._isDirty=!0}get z(){return this._z}set z(e){this._z=e,this._isDirty=!0}constructor(e=0,t=0,i=0){this._isDirty=!0,this._x=e,this._y=t,this._z=i}toString(){return`{X: ${this._x} Y: ${this._y} Z: ${this._z}}`}getClassName(){return"Vector3"}getHashCode(){let e=kn(this._x),t=kn(this._y),i=kn(this._z),r=e;return r=r*397^t,r=r*397^i,r}asArray(){return[this._x,this._y,this._z]}toArray(e,t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,this}fromArray(e,t=0){return n.FromArrayToRef(e,t,this),this}toQuaternion(){return ze.RotationYawPitchRoll(this._y,this._x,this._z)}addInPlace(e){return this._x+=e._x,this._y+=e._y,this._z+=e._z,this._isDirty=!0,this}addInPlaceFromFloats(e,t,i){return this._x+=e,this._y+=t,this._z+=i,this._isDirty=!0,this}add(e){return new n(this._x+e._x,this._y+e._y,this._z+e._z)}addToRef(e,t){return t._x=this._x+e._x,t._y=this._y+e._y,t._z=this._z+e._z,t._isDirty=!0,t}subtractInPlace(e){return this._x-=e._x,this._y-=e._y,this._z-=e._z,this._isDirty=!0,this}subtract(e){return new n(this._x-e._x,this._y-e._y,this._z-e._z)}subtractToRef(e,t){return this.subtractFromFloatsToRef(e._x,e._y,e._z,t)}subtractFromFloats(e,t,i){return new n(this._x-e,this._y-t,this._z-i)}subtractFromFloatsToRef(e,t,i,r){return r._x=this._x-e,r._y=this._y-t,r._z=this._z-i,r._isDirty=!0,r}negate(){return new n(-this._x,-this._y,-this._z)}negateInPlace(){return this._x*=-1,this._y*=-1,this._z*=-1,this._isDirty=!0,this}negateToRef(e){return e._x=this._x*-1,e._y=this._y*-1,e._z=this._z*-1,e._isDirty=!0,e}scaleInPlace(e){return this._x*=e,this._y*=e,this._z*=e,this._isDirty=!0,this}scale(e){return new n(this._x*e,this._y*e,this._z*e)}scaleToRef(e,t){return t._x=this._x*e,t._y=this._y*e,t._z=this._z*e,t._isDirty=!0,t}getNormalToRef(e){let t=this.length(),i=Math.acos(this._y/t),r=Math.atan2(this._z,this._x);i>Math.PI/2?i-=Math.PI/2:i+=Math.PI/2;let s=t*Math.sin(i)*Math.cos(r),a=t*Math.cos(i),o=t*Math.sin(i)*Math.sin(r);return e.set(s,a,o),e}applyRotationQuaternionToRef(e,t){let i=this._x,r=this._y,s=this._z,a=e._x,o=e._y,l=e._z,c=e._w,f=2*(o*s-l*r),h=2*(l*i-a*s),d=2*(a*r-o*i);return t._x=i+c*f+o*d-l*h,t._y=r+c*h+l*f-a*d,t._z=s+c*d+a*h-o*f,t._isDirty=!0,t}applyRotationQuaternionInPlace(e){return this.applyRotationQuaternionToRef(e,this)}applyRotationQuaternion(e){return this.applyRotationQuaternionToRef(e,new n)}scaleAndAddToRef(e,t){return t._x+=this._x*e,t._y+=this._y*e,t._z+=this._z*e,t._isDirty=!0,t}projectOnPlane(e,t){return this.projectOnPlaneToRef(e,t,new n)}projectOnPlaneToRef(e,t,i){let r=e.normal,s=e.d,a=We.Vector3[0];this.subtractToRef(t,a),a.normalize();let o=n.Dot(a,r);if(Math.abs(o)<1e-10)i.setAll(1/0);else{let l=-(n.Dot(t,r)+s)/o,c=a.scaleInPlace(l);t.addToRef(c,i)}return i}equals(e){return e&&this._x===e._x&&this._y===e._y&&this._z===e._z}equalsWithEpsilon(e,t=Nt){return e&&Ei(this._x,e._x,t)&&Ei(this._y,e._y,t)&&Ei(this._z,e._z,t)}equalsToFloats(e,t,i){return this._x===e&&this._y===t&&this._z===i}multiplyInPlace(e){return this._x*=e._x,this._y*=e._y,this._z*=e._z,this._isDirty=!0,this}multiply(e){return this.multiplyByFloats(e._x,e._y,e._z)}multiplyToRef(e,t){return t._x=this._x*e._x,t._y=this._y*e._y,t._z=this._z*e._z,t._isDirty=!0,t}multiplyByFloats(e,t,i){return new n(this._x*e,this._y*t,this._z*i)}divide(e){return new n(this._x/e._x,this._y/e._y,this._z/e._z)}divideToRef(e,t){return t._x=this._x/e._x,t._y=this._y/e._y,t._z=this._z/e._z,t._isDirty=!0,t}divideInPlace(e){return this._x=this._x/e._x,this._y=this._y/e._y,this._z=this._z/e._z,this._isDirty=!0,this}minimizeInPlace(e){return this.minimizeInPlaceFromFloats(e._x,e._y,e._z)}maximizeInPlace(e){return this.maximizeInPlaceFromFloats(e._x,e._y,e._z)}minimizeInPlaceFromFloats(e,t,i){return ethis._x&&(this.x=e),t>this._y&&(this.y=t),i>this._z&&(this.z=i),this}isNonUniformWithinEpsilon(e){let t=Math.abs(this._x),i=Math.abs(this._y);if(!Ei(t,i,e))return!0;let r=Math.abs(this._z);return!Ei(t,r,e)||!Ei(i,r,e)}get isNonUniform(){let e=Math.abs(this._x),t=Math.abs(this._y);if(e!==t)return!0;let i=Math.abs(this._z);return e!==i}floorToRef(e){return e._x=Math.floor(this._x),e._y=Math.floor(this._y),e._z=Math.floor(this._z),e._isDirty=!0,e}floor(){return new n(Math.floor(this._x),Math.floor(this._y),Math.floor(this._z))}fractToRef(e){return e._x=this._x-Math.floor(this._x),e._y=this._y-Math.floor(this._y),e._z=this._z-Math.floor(this._z),e._isDirty=!0,e}fract(){return new n(this._x-Math.floor(this._x),this._y-Math.floor(this._y),this._z-Math.floor(this._z))}length(){return Math.sqrt(this.lengthSquared())}lengthSquared(){return this._x*this._x+this._y*this._y+this._z*this._z}get hasAZeroComponent(){return this._x*this._y*this._z===0}normalize(){return this.normalizeFromLength(this.length())}reorderInPlace(e){if(e=e.toLowerCase(),e==="xyz")return this;let t=We.Vector3[0].copyFrom(this);return this.x=t[e[0]],this.y=t[e[1]],this.z=t[e[2]],this}rotateByQuaternionToRef(e,t){return e.toRotationMatrix(We.Matrix[0]),n.TransformCoordinatesToRef(this,We.Matrix[0],t),t}rotateByQuaternionAroundPointToRef(e,t,i){return this.subtractToRef(t,We.Vector3[0]),We.Vector3[0].rotateByQuaternionToRef(e,We.Vector3[0]),t.addToRef(We.Vector3[0],i),i}cross(e){return n.CrossToRef(this,e,new n)}normalizeFromLength(e){return e===0||e===1?this:this.scaleInPlace(1/e)}normalizeToNew(){return this.normalizeToRef(new n)}normalizeToRef(e){let t=this.length();return t===0||t===1?(e._x=this._x,e._y=this._y,e._z=this._z,e._isDirty=!0,e):this.scaleToRef(1/t,e)}clone(){return new n(this._x,this._y,this._z)}copyFrom(e){return this.copyFromFloats(e._x,e._y,e._z)}copyFromFloats(e,t,i){return this._x=e,this._y=t,this._z=i,this._isDirty=!0,this}set(e,t,i){return this.copyFromFloats(e,t,i)}setAll(e){return this._x=this._y=this._z=e,this._isDirty=!0,this}static GetClipFactor(e,t,i,r){let s=n.Dot(e,i),a=n.Dot(t,i);return(s-r)/(s-a)}static GetAngleBetweenVectors(e,t,i){let r=e.normalizeToRef(We.Vector3[1]),s=t.normalizeToRef(We.Vector3[2]),a=n.Dot(r,s);a=Ft(a,-1,1);let o=Math.acos(a),l=We.Vector3[3];return n.CrossToRef(r,s,l),n.Dot(l,i)>0?isNaN(o)?0:o:isNaN(o)?-Math.PI:-Math.acos(a)}static GetAngleBetweenVectorsOnPlane(e,t,i){We.Vector3[0].copyFrom(e);let r=We.Vector3[0];We.Vector3[1].copyFrom(t);let s=We.Vector3[1];We.Vector3[2].copyFrom(i);let a=We.Vector3[2],o=We.Vector3[3],l=We.Vector3[4];r.normalize(),s.normalize(),a.normalize(),n.CrossToRef(a,r,o),n.CrossToRef(o,a,l);let c=Math.atan2(n.Dot(s,o),n.Dot(s,l));return g3(c)}static PitchYawRollToMoveBetweenPointsToRef(e,t,i){let r=Z.Vector3[0];return t.subtractToRef(e,r),i._y=Math.atan2(r.x,r.z)||0,i._x=Math.atan2(Math.sqrt(r.x**2+r.z**2),r.y)||0,i._z=0,i._isDirty=!0,i}static PitchYawRollToMoveBetweenPoints(e,t){let i=n.Zero();return n.PitchYawRollToMoveBetweenPointsToRef(e,t,i)}static SlerpToRef(e,t,i,r){i=Ft(i,0,1);let s=We.Vector3[0],a=We.Vector3[1];s.copyFrom(e);let o=s.length();s.normalizeFromLength(o),a.copyFrom(t);let l=a.length();a.normalizeFromLength(l);let c=n.Dot(s,a),f,h;if(c<1-Nt){let d=Math.acos(c),u=1/Math.sin(d);f=Math.sin((1-i)*d)*u,h=Math.sin(i*d)*u}else f=1-i,h=i;return s.scaleInPlace(f),a.scaleInPlace(h),r.copyFrom(s).addInPlace(a),r.scaleInPlace(Ka(o,l,i)),r}static SmoothToRef(e,t,i,r,s){return n.SlerpToRef(e,t,r===0?1:i/r,s),s}static FromArray(e,t=0){return new n(e[t],e[t+1],e[t+2])}static FromFloatArray(e,t){return n.FromArray(e,t)}static FromArrayToRef(e,t,i){return i._x=e[t],i._y=e[t+1],i._z=e[t+2],i._isDirty=!0,i}static FromFloatArrayToRef(e,t,i){return n.FromArrayToRef(e,t,i)}static FromFloatsToRef(e,t,i,r){return r.copyFromFloats(e,t,i),r}static Zero(){return new n(0,0,0)}static One(){return new n(1,1,1)}static Up(){return new n(0,1,0)}static get UpReadOnly(){return n._UpReadOnly}static get DownReadOnly(){return n._DownReadOnly}static get RightReadOnly(){return n._RightReadOnly}static get LeftReadOnly(){return n._LeftReadOnly}static get LeftHandedForwardReadOnly(){return n._LeftHandedForwardReadOnly}static get RightHandedForwardReadOnly(){return n._RightHandedForwardReadOnly}static get LeftHandedBackwardReadOnly(){return n._LeftHandedBackwardReadOnly}static get RightHandedBackwardReadOnly(){return n._RightHandedBackwardReadOnly}static get ZeroReadOnly(){return n._ZeroReadOnly}static get OneReadOnly(){return n._OneReadOnly}static Down(){return new n(0,-1,0)}static Forward(e=!1){return new n(0,0,e?-1:1)}static Backward(e=!1){return new n(0,0,e?1:-1)}static Right(){return new n(1,0,0)}static Left(){return new n(-1,0,0)}static Random(e=0,t=1){return new n($i(e,t),$i(e,t),$i(e,t))}static RandomToRef(e=0,t=1,i){return i.copyFromFloats($i(e,t),$i(e,t),$i(e,t))}static TransformCoordinates(e,t){let i=n.Zero();return n.TransformCoordinatesToRef(e,t,i),i}static TransformCoordinatesToRef(e,t,i){return n.TransformCoordinatesFromFloatsToRef(e._x,e._y,e._z,t,i),i}static TransformCoordinatesFromFloatsToRef(e,t,i,r,s){let a=r.m,o=e*a[0]+t*a[4]+i*a[8]+a[12],l=e*a[1]+t*a[5]+i*a[9]+a[13],c=e*a[2]+t*a[6]+i*a[10]+a[14],f=1/(e*a[3]+t*a[7]+i*a[11]+a[15]);return s._x=o*f,s._y=l*f,s._z=c*f,s._isDirty=!0,s}static TransformNormal(e,t){let i=n.Zero();return n.TransformNormalToRef(e,t,i),i}static TransformNormalToRef(e,t,i){return this.TransformNormalFromFloatsToRef(e._x,e._y,e._z,t,i),i}static TransformNormalFromFloatsToRef(e,t,i,r,s){let a=r.m;return s._x=e*a[0]+t*a[4]+i*a[8],s._y=e*a[1]+t*a[5]+i*a[9],s._z=e*a[2]+t*a[6]+i*a[10],s._isDirty=!0,s}static CatmullRom(e,t,i,r,s){let a=s*s,o=s*a,l=.5*(2*t._x+(-e._x+i._x)*s+(2*e._x-5*t._x+4*i._x-r._x)*a+(-e._x+3*t._x-3*i._x+r._x)*o),c=.5*(2*t._y+(-e._y+i._y)*s+(2*e._y-5*t._y+4*i._y-r._y)*a+(-e._y+3*t._y-3*i._y+r._y)*o),f=.5*(2*t._z+(-e._z+i._z)*s+(2*e._z-5*t._z+4*i._z-r._z)*a+(-e._z+3*t._z-3*i._z+r._z)*o);return new n(l,c,f)}static Clamp(e,t,i){let r=new n;return n.ClampToRef(e,t,i,r),r}static ClampToRef(e,t,i,r){let s=e._x;s=s>i._x?i._x:s,s=si._y?i._y:a,a=ai._z?i._z:o,o=o0&&M<0?(O.copyFrom(a),V=t,N=i):M>0&&D<0?(O.copyFrom(l),V=i,N=r):(O.copyFrom(o).scaleInPlace(-1),V=r,N=t);let w=We.Vector3[9],U=We.Vector3[4];if(V.subtractToRef(v,T),N.subtractToRef(v,w),n.CrossToRef(T,w,U),!(n.Dot(U,c)<0))return s.copyFrom(v),Math.abs(_*p);let J=We.Vector3[5];n.CrossToRef(O,U,J),J.normalize();let Y=We.Vector3[9];Y.copyFrom(V).subtractInPlace(v);let Q=Y.length();if(Qthis._x&&(this.x=e.x),e.y>this._y&&(this.y=e.y),e.z>this._z&&(this.z=e.z),e.w>this._w&&(this.w=e.w),this}minimizeInPlaceFromFloats(e,t,i,r){return this.x=Math.min(e,this._x),this.y=Math.min(t,this._y),this.z=Math.min(i,this._z),this.w=Math.min(r,this._w),this}maximizeInPlaceFromFloats(e,t,i,r){return this.x=Math.max(e,this._x),this.y=Math.max(t,this._y),this.z=Math.max(i,this._z),this.w=Math.max(r,this._w),this}floorToRef(e){return e.x=Math.floor(this._x),e.y=Math.floor(this._y),e.z=Math.floor(this._z),e.w=Math.floor(this._w),e}floor(){return new n(Math.floor(this._x),Math.floor(this._y),Math.floor(this._z),Math.floor(this._w))}fractToRef(e){return e.x=this._x-Math.floor(this._x),e.y=this._y-Math.floor(this._y),e.z=this._z-Math.floor(this._z),e.w=this._w-Math.floor(this._w),e}fract(){return new n(this._x-Math.floor(this._x),this._y-Math.floor(this._y),this._z-Math.floor(this._z),this._w-Math.floor(this._w))}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}lengthSquared(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}normalize(){return this.normalizeFromLength(this.length())}normalizeFromLength(e){return e===0||e===1?this:this.scaleInPlace(1/e)}normalizeToNew(){return this.normalizeToRef(new n)}normalizeToRef(e){let t=this.length();return t===0||t===1?(e.x=this._x,e.y=this._y,e.z=this._z,e.w=this._w,e):this.scaleToRef(1/t,e)}toVector3(){return new b(this._x,this._y,this._z)}clone(){return new n(this._x,this._y,this._z,this._w)}copyFrom(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w,this}copyFromFloats(e,t,i,r){return this.x=e,this.y=t,this.z=i,this.w=r,this}set(e,t,i,r){return this.copyFromFloats(e,t,i,r)}setAll(e){return this.x=this.y=this.z=this.w=e,this}dot(e){return this._x*e.x+this._y*e.y+this._z*e.z+this._w*e.w}static FromArray(e,t){return t||(t=0),new n(e[t],e[t+1],e[t+2],e[t+3])}static FromArrayToRef(e,t,i){return i.x=e[t],i.y=e[t+1],i.z=e[t+2],i.w=e[t+3],i}static FromFloatArrayToRef(e,t,i){return n.FromArrayToRef(e,t,i),i}static FromFloatsToRef(e,t,i,r,s){return s.x=e,s.y=t,s.z=i,s.w=r,s}static Zero(){return new n(0,0,0,0)}static One(){return new n(1,1,1,1)}static Random(e=0,t=1){return new n($i(e,t),$i(e,t),$i(e,t),$i(e,t))}static RandomToRef(e=0,t=1,i){return i.x=$i(e,t),i.y=$i(e,t),i.z=$i(e,t),i.w=$i(e,t),i}static Clamp(e,t,i){return n.ClampToRef(e,t,i,new n)}static ClampToRef(e,t,i,r){return r.x=Ft(e.x,t.x,i.x),r.y=Ft(e.y,t.y,i.y),r.z=Ft(e.z,t.z,i.z),r.w=Ft(e.w,t.w,i.w),r}static CheckExtends(e,t,i){t.minimizeInPlace(e),i.maximizeInPlace(e)}static get ZeroReadOnly(){return n._ZeroReadOnly}static Normalize(e){return n.NormalizeToRef(e,new n)}static NormalizeToRef(e,t){return e.normalizeToRef(t),t}static Minimize(e,t){let i=new n;return i.copyFrom(e),i.minimizeInPlace(t),i}static Maximize(e,t){let i=new n;return i.copyFrom(e),i.maximizeInPlace(t),i}static Distance(e,t){return Math.sqrt(n.DistanceSquared(e,t))}static DistanceSquared(e,t){let i=e.x-t.x,r=e.y-t.y,s=e.z-t.z,a=e.w-t.w;return i*i+r*r+s*s+a*a}static Center(e,t){return n.CenterToRef(e,t,new n)}static CenterToRef(e,t,i){return i.x=(e.x+t.x)/2,i.y=(e.y+t.y)/2,i.z=(e.z+t.z)/2,i.w=(e.w+t.w)/2,i}static TransformCoordinates(e,t){return n.TransformCoordinatesToRef(e,t,new n)}static TransformCoordinatesToRef(e,t,i){return n.TransformCoordinatesFromFloatsToRef(e._x,e._y,e._z,t,i),i}static TransformCoordinatesFromFloatsToRef(e,t,i,r,s){let a=r.m,o=e*a[0]+t*a[4]+i*a[8]+a[12],l=e*a[1]+t*a[5]+i*a[9]+a[13],c=e*a[2]+t*a[6]+i*a[10]+a[14],f=e*a[3]+t*a[7]+i*a[11]+a[15];return s.x=o,s.y=l,s.z=c,s.w=f,s}static TransformNormal(e,t){return n.TransformNormalToRef(e,t,new n)}static TransformNormalToRef(e,t,i){let r=t.m,s=e.x*r[0]+e.y*r[4]+e.z*r[8],a=e.x*r[1]+e.y*r[5]+e.z*r[9],o=e.x*r[2]+e.y*r[6]+e.z*r[10];return i.x=s,i.y=a,i.z=o,i.w=e.w,i}static TransformNormalFromFloatsToRef(e,t,i,r,s,a){let o=s.m;return a.x=e*o[0]+t*o[4]+i*o[8],a.y=e*o[1]+t*o[5]+i*o[9],a.z=e*o[2]+t*o[6]+i*o[10],a.w=r,a}static FromVector3(e,t=0){return new n(e._x,e._y,e._z,t)}static Dot(e,t){return e.x*t.x+e.y*t.y+e.z*t.z+e.w*t.w}};Mi._V8PerformanceHack=new Mi(.5,.5,.5,.5);Mi._ZeroReadOnly=Mi.Zero();Object.defineProperties(Mi.prototype,{dimension:{value:[4]},rank:{value:1}});ze=class n{get x(){return this._x}set x(e){this._x=e,this._isDirty=!0}get y(){return this._y}set y(e){this._y=e,this._isDirty=!0}get z(){return this._z}set z(e){this._z=e,this._isDirty=!0}get w(){return this._w}set w(e){this._w=e,this._isDirty=!0}constructor(e=0,t=0,i=0,r=1){this._isDirty=!0,this._x=e,this._y=t,this._z=i,this._w=r}toString(){return`{X: ${this._x} Y: ${this._y} Z: ${this._z} W: ${this._w}}`}getClassName(){return"Quaternion"}getHashCode(){let e=kn(this._x),t=kn(this._y),i=kn(this._z),r=kn(this._w),s=e;return s=s*397^t,s=s*397^i,s=s*397^r,s}asArray(){return[this._x,this._y,this._z,this._w]}toArray(e,t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,this}fromArray(e,t=0){return n.FromArrayToRef(e,t,this)}equals(e){return e&&this._x===e._x&&this._y===e._y&&this._z===e._z&&this._w===e._w}equalsWithEpsilon(e,t=Nt){return e&&Ei(this._x,e._x,t)&&Ei(this._y,e._y,t)&&Ei(this._z,e._z,t)&&Ei(this._w,e._w,t)}isApprox(e,t=Nt){return e&&(Ei(this._x,e._x,t)&&Ei(this._y,e._y,t)&&Ei(this._z,e._z,t)&&Ei(this._w,e._w,t)||Ei(this._x,-e._x,t)&&Ei(this._y,-e._y,t)&&Ei(this._z,-e._z,t)&&Ei(this._w,-e._w,t))}clone(){return new n(this._x,this._y,this._z,this._w)}copyFrom(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._w=e._w,this._isDirty=!0,this}copyFromFloats(e,t,i,r){return this._x=e,this._y=t,this._z=i,this._w=r,this._isDirty=!0,this}set(e,t,i,r){return this.copyFromFloats(e,t,i,r)}setAll(e){return this.copyFromFloats(e,e,e,e)}add(e){return new n(this._x+e._x,this._y+e._y,this._z+e._z,this._w+e._w)}addInPlace(e){return this._x+=e._x,this._y+=e._y,this._z+=e._z,this._w+=e._w,this._isDirty=!0,this}addToRef(e,t){return t._x=this._x+e._x,t._y=this._y+e._y,t._z=this._z+e._z,t._w=this._w+e._w,t._isDirty=!0,t}addInPlaceFromFloats(e,t,i,r){return this._x+=e,this._y+=t,this._z+=i,this._w+=r,this._isDirty=!0,this}subtractToRef(e,t){return t._x=this._x-e._x,t._y=this._y-e._y,t._z=this._z-e._z,t._w=this._w-e._w,t._isDirty=!0,t}subtractFromFloats(e,t,i,r){return this.subtractFromFloatsToRef(e,t,i,r,new n)}subtractFromFloatsToRef(e,t,i,r,s){return s._x=this._x-e,s._y=this._y-t,s._z=this._z-i,s._w=this._w-r,s._isDirty=!0,s}subtract(e){return new n(this._x-e._x,this._y-e._y,this._z-e._z,this._w-e._w)}subtractInPlace(e){return this._x-=e._x,this._y-=e._y,this._z-=e._z,this._w-=e._w,this._isDirty=!0,this}scale(e){return new n(this._x*e,this._y*e,this._z*e,this._w*e)}scaleToRef(e,t){return t._x=this._x*e,t._y=this._y*e,t._z=this._z*e,t._w=this._w*e,t._isDirty=!0,t}scaleInPlace(e){return this._x*=e,this._y*=e,this._z*=e,this._w*=e,this._isDirty=!0,this}scaleAndAddToRef(e,t){return t._x+=this._x*e,t._y+=this._y*e,t._z+=this._z*e,t._w+=this._w*e,t._isDirty=!0,t}multiply(e){let t=new n(0,0,0,1);return this.multiplyToRef(e,t),t}multiplyToRef(e,t){let i=this._x*e._w+this._y*e._z-this._z*e._y+this._w*e._x,r=-this._x*e._z+this._y*e._w+this._z*e._x+this._w*e._y,s=this._x*e._y-this._y*e._x+this._z*e._w+this._w*e._z,a=-this._x*e._x-this._y*e._y-this._z*e._z+this._w*e._w;return t.copyFromFloats(i,r,s,a),t}multiplyInPlace(e){return this.multiplyToRef(e,this)}multiplyByFloats(e,t,i,r){return this._x*=e,this._y*=t,this._z*=i,this._w*=r,this._isDirty=!0,this}divide(e){throw new ReferenceError("Can not divide a quaternion")}divideToRef(e,t){throw new ReferenceError("Can not divide a quaternion")}divideInPlace(e){throw new ReferenceError("Can not divide a quaternion")}minimizeInPlace(){throw new ReferenceError("Can not minimize a quaternion")}minimizeInPlaceFromFloats(){throw new ReferenceError("Can not minimize a quaternion")}maximizeInPlace(){throw new ReferenceError("Can not maximize a quaternion")}maximizeInPlaceFromFloats(){throw new ReferenceError("Can not maximize a quaternion")}negate(){return this.negateToRef(new n)}negateInPlace(){return this._x=-this._x,this._y=-this._y,this._z=-this._z,this._w=-this._w,this._isDirty=!0,this}negateToRef(e){return e._x=-this._x,e._y=-this._y,e._z=-this._z,e._w=-this._w,e._isDirty=!0,e}equalsToFloats(e,t,i,r){return this._x===e&&this._y===t&&this._z===i&&this._w===r}floorToRef(e){throw new ReferenceError("Can not floor a quaternion")}floor(){throw new ReferenceError("Can not floor a quaternion")}fractToRef(e){throw new ReferenceError("Can not fract a quaternion")}fract(){throw new ReferenceError("Can not fract a quaternion")}conjugateToRef(e){return e.copyFromFloats(-this._x,-this._y,-this._z,this._w),e}conjugateInPlace(){return this._x*=-1,this._y*=-1,this._z*=-1,this._isDirty=!0,this}conjugate(){return new n(-this._x,-this._y,-this._z,this._w)}invert(){let e=this.conjugate(),t=this.lengthSquared();return t==0||t==1||e.scaleInPlace(1/t),e}invertInPlace(){this.conjugateInPlace();let e=this.lengthSquared();return e==0||e==1?this:(this.scaleInPlace(1/e),this)}lengthSquared(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this.lengthSquared())}normalize(){return this.normalizeFromLength(this.length())}normalizeFromLength(e){return e===0||e===1?this:this.scaleInPlace(1/e)}normalizeToNew(){let e=new n(0,0,0,1);return this.normalizeToRef(e),e}normalizeToRef(e){let t=this.length();return t===0||t===1?e.copyFromFloats(this._x,this._y,this._z,this._w):this.scaleToRef(1/t,e)}toEulerAngles(){let e=b.Zero();return this.toEulerAnglesToRef(e),e}toEulerAnglesToRef(e){let t=this._z,i=this._x,r=this._y,s=this._w,a=r*t-i*s,o=.4999999;if(a<-o)e._y=2*Math.atan2(r,s),e._x=Math.PI/2,e._z=0,e._isDirty=!0;else if(a>o)e._y=2*Math.atan2(r,s),e._x=-Math.PI/2,e._z=0,e._isDirty=!0;else{let l=s*s,c=t*t,f=i*i,h=r*r;e._z=Math.atan2(2*(i*r+t*s),-c-f+h+l),e._x=Math.asin(-2*a),e._y=Math.atan2(2*(t*i+r*s),c-f-h+l),e._isDirty=!0}return e}toAlphaBetaGammaToRef(e){let t=this._z,i=this._x,r=this._y,s=this._w,a=Math.sqrt(i*i+r*r),o=Math.sqrt(t*t+s*s),l=2*Math.atan2(a,o),c=2*Math.atan2(t,s),f=2*Math.atan2(r,i),h=(c+f)/2,d=(c-f)/2;return e.set(d,l,h),e}toRotationMatrix(e){return K.FromQuaternionToRef(this,e),e}fromRotationMatrix(e){return n.FromRotationMatrixToRef(e,this),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}toAxisAngle(){let e=b.Zero(),t=this.toAxisAngleToRef(e);return{axis:e,angle:t}}toAxisAngleToRef(e){let t,i=Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z),r=this._w;return i>0?(t=2*Math.atan2(i,r),e.set(this._x/i,this._y/i,this._z/i)):(t=0,e.set(1,0,0)),t}static FromRotationMatrix(e){let t=new n;return n.FromRotationMatrixToRef(e,t),t}static FromRotationMatrixToRef(e,t){let i=e.m,r=i[0],s=i[4],a=i[8],o=i[1],l=i[5],c=i[9],f=i[2],h=i[6],d=i[10],u=r+l+d,m;return u>0?(m=.5/Math.sqrt(u+1),t._w=.25/m,t._x=(h-c)*m,t._y=(a-f)*m,t._z=(o-s)*m,t._isDirty=!0):r>l&&r>d?(m=2*Math.sqrt(1+r-l-d),t._w=(h-c)/m,t._x=.25*m,t._y=(s+o)/m,t._z=(a+f)/m,t._isDirty=!0):l>d?(m=2*Math.sqrt(1+l-r-d),t._w=(a-f)/m,t._x=(s+o)/m,t._y=.25*m,t._z=(c+h)/m,t._isDirty=!0):(m=2*Math.sqrt(1+d-r-l),t._w=(o-s)/m,t._x=(a+f)/m,t._y=(c+h)/m,t._z=.25*m,t._isDirty=!0),t}static Dot(e,t){return e._x*t._x+e._y*t._y+e._z*t._z+e._w*t._w}static AreClose(e,t,i=.1){let r=n.Dot(e,t);return 1-r*r<=i}static SmoothToRef(e,t,i,r,s){let a=r===0?1:i/r;return a=Ft(a,0,1),n.SlerpToRef(e,t,a,s),s}static Zero(){return new n(0,0,0,0)}static Inverse(e){return new n(-e._x,-e._y,-e._z,e._w)}static InverseToRef(e,t){return t.set(-e._x,-e._y,-e._z,e._w),t}static Identity(){return new n(0,0,0,1)}static IsIdentity(e){return e&&e._x===0&&e._y===0&&e._z===0&&e._w===1}static RotationAxis(e,t){return n.RotationAxisToRef(e,t,new n)}static RotationAxisToRef(e,t,i){i._w=Math.cos(t/2);let r=Math.sin(t/2)/e.length();return i._x=e._x*r,i._y=e._y*r,i._z=e._z*r,i._isDirty=!0,i}static FromArray(e,t){return t||(t=0),new n(e[t],e[t+1],e[t+2],e[t+3])}static FromArrayToRef(e,t,i){return i._x=e[t],i._y=e[t+1],i._z=e[t+2],i._w=e[t+3],i._isDirty=!0,i}static FromFloatsToRef(e,t,i,r,s){return s.copyFromFloats(e,t,i,r),s}static FromEulerAngles(e,t,i){let r=new n;return n.RotationYawPitchRollToRef(t,e,i,r),r}static FromEulerAnglesToRef(e,t,i,r){return n.RotationYawPitchRollToRef(t,e,i,r),r}static FromEulerVector(e){let t=new n;return n.RotationYawPitchRollToRef(e._y,e._x,e._z,t),t}static FromEulerVectorToRef(e,t){return n.RotationYawPitchRollToRef(e._y,e._x,e._z,t),t}static FromUnitVectorsToRef(e,t,i,r=Nt){let s=b.Dot(e,t)+1;return sMath.abs(e.z)?i.set(-e.y,e.x,0,0):i.set(0,-e.z,e.y,0):(b.CrossToRef(e,t,Z.Vector3[0]),i.set(Z.Vector3[0].x,Z.Vector3[0].y,Z.Vector3[0].z,s)),i.normalize()}static RotationYawPitchRoll(e,t,i){let r=new n;return n.RotationYawPitchRollToRef(e,t,i,r),r}static RotationYawPitchRollToRef(e,t,i,r){let s=i*.5,a=t*.5,o=e*.5,l=Math.sin(s),c=Math.cos(s),f=Math.sin(a),h=Math.cos(a),d=Math.sin(o),u=Math.cos(o);return r._x=u*f*c+d*h*l,r._y=d*h*c-u*f*l,r._z=u*h*l-d*f*c,r._w=u*h*c+d*f*l,r._isDirty=!0,r}static RotationAlphaBetaGamma(e,t,i){let r=new n;return n.RotationAlphaBetaGammaToRef(e,t,i,r),r}static RotationAlphaBetaGammaToRef(e,t,i,r){let s=(i+e)*.5,a=(i-e)*.5,o=t*.5;return r._x=Math.cos(a)*Math.sin(o),r._y=Math.sin(a)*Math.sin(o),r._z=Math.sin(s)*Math.cos(o),r._w=Math.cos(s)*Math.cos(o),r._isDirty=!0,r}static RotationQuaternionFromAxis(e,t,i){let r=new n(0,0,0,0);return n.RotationQuaternionFromAxisToRef(e,t,i,r),r}static RotationQuaternionFromAxisToRef(e,t,i,r){let s=We.Matrix[0];return e=e.normalizeToRef(We.Vector3[0]),t=t.normalizeToRef(We.Vector3[1]),i=i.normalizeToRef(We.Vector3[2]),K.FromXYZAxesToRef(e,t,i,s),n.FromRotationMatrixToRef(s,r),r}static FromLookDirectionLH(e,t){let i=new n;return n.FromLookDirectionLHToRef(e,t,i),i}static FromLookDirectionLHToRef(e,t,i){let r=We.Matrix[0];return K.LookDirectionLHToRef(e,t,r),n.FromRotationMatrixToRef(r,i),i}static FromLookDirectionRH(e,t){let i=new n;return n.FromLookDirectionRHToRef(e,t,i),i}static FromLookDirectionRHToRef(e,t,i){let r=We.Matrix[0];return K.LookDirectionRHToRef(e,t,r),n.FromRotationMatrixToRef(r,i)}static Slerp(e,t,i){let r=n.Identity();return n.SlerpToRef(e,t,i,r),r}static SlerpToRef(e,t,i,r){let s,a,o=e._x*t._x+e._y*t._y+e._z*t._z+e._w*t._w,l=!1;if(o<0&&(l=!0,o=-o),o>.999999)a=1-i,s=l?-i:i;else{let c=Math.acos(o),f=1/Math.sin(c);a=Math.sin((1-i)*c)*f,s=l?-Math.sin(i*c)*f:Math.sin(i*c)*f}return r._x=a*e._x+s*t._x,r._y=a*e._y+s*t._y,r._z=a*e._z+s*t._z,r._w=a*e._w+s*t._w,r._isDirty=!0,r}static Hermite(e,t,i,r,s){let a=s*s,o=s*a,l=2*o-3*a+1,c=-2*o+3*a,f=o-2*a+s,h=o-a,d=e._x*l+i._x*c+t._x*f+r._x*h,u=e._y*l+i._y*c+t._y*f+r._y*h,m=e._z*l+i._z*c+t._z*f+r._z*h,_=e._w*l+i._w*c+t._w*f+r._w*h;return new n(d,u,m,_)}static Hermite1stDerivative(e,t,i,r,s){let a=new n;return this.Hermite1stDerivativeToRef(e,t,i,r,s,a),a}static Hermite1stDerivativeToRef(e,t,i,r,s,a){let o=s*s;return a._x=(o-s)*6*e._x+(3*o-4*s+1)*t._x+(-o+s)*6*i._x+(3*o-2*s)*r._x,a._y=(o-s)*6*e._y+(3*o-4*s+1)*t._y+(-o+s)*6*i._y+(3*o-2*s)*r._y,a._z=(o-s)*6*e._z+(3*o-4*s+1)*t._z+(-o+s)*6*i._z+(3*o-2*s)*r._z,a._w=(o-s)*6*e._w+(3*o-4*s+1)*t._w+(-o+s)*6*i._w+(3*o-2*s)*r._w,a._isDirty=!0,a}static Normalize(e){let t=n.Zero();return n.NormalizeToRef(e,t),t}static NormalizeToRef(e,t){return e.normalizeToRef(t),t}static Clamp(e,t,i){let r=new n;return n.ClampToRef(e,t,i,r),r}static ClampToRef(e,t,i,r){return r.copyFromFloats(Ft(e.x,t.x,i.x),Ft(e.y,t.y,i.y),Ft(e.z,t.z,i.z),Ft(e.w,t.w,i.w))}static Random(e=0,t=1){return new n($i(e,t),$i(e,t),$i(e,t),$i(e,t))}static RandomToRef(e=0,t=1,i){return i.copyFromFloats($i(e,t),$i(e,t),$i(e,t),$i(e,t))}static Minimize(){throw new ReferenceError("Quaternion.Minimize does not make sense")}static Maximize(){throw new ReferenceError("Quaternion.Maximize does not make sense")}static Distance(e,t){return Math.sqrt(n.DistanceSquared(e,t))}static DistanceSquared(e,t){let i=e.x-t.x,r=e.y-t.y,s=e.z-t.z,a=e.w-t.w;return i*i+r*r+s*s+a*a}static Center(e,t){return n.CenterToRef(e,t,n.Zero())}static CenterToRef(e,t,i){return i.copyFromFloats((e.x+t.x)/2,(e.y+t.y)/2,(e.z+t.z)/2,(e.w+t.w)/2)}};ze._V8PerformanceHack=new ze(.5,.5,.5,.5);Object.defineProperties(ze.prototype,{dimension:{value:[4]},rank:{value:1}});K=class n{static get Use64Bits(){return Gn.MatrixUse64Bits}get m(){return this._m}markAsUpdated(){this.updateFlag=bu._UpdateFlagSeed++,this._isIdentity=!1,this._isIdentity3x2=!1,this._isIdentityDirty=!0,this._isIdentity3x2Dirty=!0}_updateIdentityStatus(e,t=!1,i=!1,r=!0){this._isIdentity=e,this._isIdentity3x2=e||i,this._isIdentityDirty=this._isIdentity?!1:t,this._isIdentity3x2Dirty=this._isIdentity3x2?!1:r}constructor(){this._isIdentity=!1,this._isIdentityDirty=!0,this._isIdentity3x2=!0,this._isIdentity3x2Dirty=!0,this.updateFlag=-1,Gn.MatrixTrackPrecisionChange&&Gn.MatrixTrackedMatrices.push(this),this._m=new Gn.MatrixCurrentType(16),this.markAsUpdated()}isIdentity(){if(this._isIdentityDirty){this._isIdentityDirty=!1;let e=this._m;this._isIdentity=e[0]===1&&e[1]===0&&e[2]===0&&e[3]===0&&e[4]===0&&e[5]===1&&e[6]===0&&e[7]===0&&e[8]===0&&e[9]===0&&e[10]===1&&e[11]===0&&e[12]===0&&e[13]===0&&e[14]===0&&e[15]===1}return this._isIdentity}isIdentityAs3x2(){return this._isIdentity3x2Dirty&&(this._isIdentity3x2Dirty=!1,this._m[0]!==1||this._m[5]!==1||this._m[15]!==1?this._isIdentity3x2=!1:this._m[1]!==0||this._m[2]!==0||this._m[3]!==0||this._m[4]!==0||this._m[6]!==0||this._m[7]!==0||this._m[8]!==0||this._m[9]!==0||this._m[10]!==0||this._m[11]!==0||this._m[12]!==0||this._m[13]!==0||this._m[14]!==0?this._isIdentity3x2=!1:this._isIdentity3x2=!0),this._isIdentity3x2}determinant(){if(this._isIdentity===!0)return 1;let e=this._m,t=e[0],i=e[1],r=e[2],s=e[3],a=e[4],o=e[5],l=e[6],c=e[7],f=e[8],h=e[9],d=e[10],u=e[11],m=e[12],_=e[13],p=e[14],g=e[15],v=d*g-p*u,x=h*g-_*u,A=h*p-_*d,E=f*g-m*u,T=f*p-d*m,R=f*_-m*h,I=+(o*v-l*x+c*A),y=-(a*v-l*E+c*T),M=+(a*x-o*E+c*R),D=-(a*A-o*T+l*R);return t*I+i*y+r*M+s*D}toString(){return`{${this.m[0]}, ${this.m[1]}, ${this.m[2]}, ${this.m[3]} +`+e;return e}}});var xh,KI=C(()=>{xh=class n{get underlyingResource(){return null}constructor(){this.references=0,this.capacity=0,this.is32Bits=!1,this.uniqueId=n._Counter++}};xh._Counter=0});var Ho,rT=C(()=>{KI();Ho=class extends xh{constructor(e){super(),this._buffer=e}get underlyingResource(){return this._buffer}}});function Rh(n){let e=1;do e*=2;while(en-t?t:e}function c3(n){return n--,n|=n>>1,n|=n>>2,n|=n>>4,n|=n>>8,n|=n>>16,n++,n}function nT(n){return n=n|n>>1,n=n|n>>2,n=n|n>>4,n=n|n>>8,n=n|n>>16,n-(n>>1)}function fs(n,e,t=2){let i;switch(t){case 1:i=nT(n);break;case 2:i=jI(n);break;case 3:default:i=c3(n);break}return Math.min(i,e)}var zo=C(()=>{});var Mu,qI=C(()=>{Mu=class{get underlyingResource(){return this._webGLTexture}constructor(e=null,t){if(this._MSAARenderBuffers=null,this._context=t,!e&&(e=t.createTexture(),!e))throw new Error("Unable to create webGL texture");this.set(e)}setUsage(){}set(e){this._webGLTexture=e}reset(){this._webGLTexture=null,this._MSAARenderBuffers=null}addMSAARenderBuffer(e){this._MSAARenderBuffers||(this._MSAARenderBuffers=[]),this._MSAARenderBuffers.push(e)}releaseMSAARenderBuffers(){if(this._MSAARenderBuffers){for(let e of this._MSAARenderBuffers)this._context.deleteRenderbuffer(e);this._MSAARenderBuffers=null}}getMSAARenderBuffer(e=0){var t,i;return(i=(t=this._MSAARenderBuffers)==null?void 0:t[e])!=null?i:null}release(){this.releaseMSAARenderBuffers(),this._webGLTexture&&this._context.deleteTexture(this._webGLTexture),this.reset()}}});function ZI(n){return n===13||n===14||n===15||n===16||n===17||n===18||n===19}function Dl(n){return n===13||n===17||n===18||n===19}var p_=C(()=>{});var f3={};$e(f3,{ThinEngine:()=>bt});var QI,bt,hs=C(()=>{Th();FI();Lr();YI();Pt();ma();o3();l3();rT();zo();qI();Ws();$c();HI();p_();XI();QI=class{},bt=class n extends Re{get name(){return this._name}set name(e){this._name=e}get version(){return this._webGLVersion}static get ShadersRepository(){return $i.ShadersRepository}static set ShadersRepository(e){$i.ShadersRepository=e}get supportsUniformBuffers(){return this.webGLVersion>1&&!this.disableUniformBuffers}get needPOTTextures(){return this._webGLVersion<2||this.forcePOTTextures}get _supportsHardwareTextureRescaling(){return!1}set framebufferDimensionsObject(e){this._framebufferDimensionsObject=e}snapshotRenderingReset(){this.snapshotRendering=!1}constructor(e,t,i,r){if(i=i||{},super(t!=null?t:i.antialias,i,r),this._name="WebGL",this.forcePOTTextures=!1,this.validateShaderPrograms=!1,this.disableUniformBuffers=!1,this._webGLVersion=1,this._vertexAttribArraysEnabled=[],this._uintIndicesCurrentlySet=!1,this._currentBoundBuffer=new Array,this._currentFramebuffer=null,this._dummyFramebuffer=null,this._currentBufferPointers=new Array,this._currentInstanceLocations=new Array,this._currentInstanceBuffers=new Array,this._vaoRecordInProgress=!1,this._mustWipeVertexAttributes=!1,this._nextFreeTextureSlots=new Array,this._maxSimultaneousTextures=0,this._maxMSAASamplesOverride=null,this._unpackFlipYCached=null,this.enableUnpackFlipYCached=!0,this._boundUniforms={},!e)return;let s;if(e.getContext){if(s=e,i.preserveDrawingBuffer===void 0&&(i.preserveDrawingBuffer=!1),i.xrCompatible===void 0&&(i.xrCompatible=!1),navigator&&navigator.userAgent){this._setupMobileChecks();let l=navigator.userAgent;for(let c of n.ExceptionList){let f=c.key,h=c.targets;if(new RegExp(f).test(l)){if(c.capture&&c.captureConstraint){let u=c.capture,m=c.captureConstraint,p=new RegExp(u).exec(l);if(p&&p.length>0&&parseInt(p[p.length-1])>=m)continue}for(let u of h)switch(u){case"uniformBuffer":this.disableUniformBuffers=!0;break;case"vao":this.disableVertexArrayObjects=!0;break;case"antialias":i.antialias=!1;break;case"maxMSAASamples":this._maxMSAASamplesOverride=1;break}}}}if(this._doNotHandleContextLost?this._onContextLost=()=>{US(this._gl)}:(this._onContextLost=l=>{l.preventDefault(),this._contextWasLost=!0,US(this._gl),J.Warn("WebGL context lost."),this.onContextLostObservable.notifyObservers(this)},this._onContextRestored=()=>{this._restoreEngineAfterContextLost(()=>this._initGLContext())},s.addEventListener("webglcontextrestored",this._onContextRestored,!1),i.powerPreference=i.powerPreference||"high-performance"),s.addEventListener("webglcontextlost",this._onContextLost,!1),this._badDesktopOS&&(i.xrCompatible=!1),!i.disableWebGL2Support)try{this._gl=s.getContext("webgl2",i)||s.getContext("experimental-webgl2",i),this._gl&&(this._webGLVersion=2,this._shaderPlatformName="WEBGL2",this._gl.deleteQuery||(this._webGLVersion=1,this._shaderPlatformName="WEBGL1"))}catch(l){}if(!this._gl){if(!s)throw new Error("The provided canvas is null or undefined.");try{this._gl=s.getContext("webgl",i)||s.getContext("experimental-webgl",i)}catch(l){throw new Error("WebGL not supported",{cause:l})}}if(!this._gl)throw new Error("WebGL not supported")}else{this._gl=e,s=this._gl.canvas,this._gl.renderbufferStorageMultisample?(this._webGLVersion=2,this._shaderPlatformName="WEBGL2"):this._shaderPlatformName="WEBGL1";let l=this._gl.getContextAttributes();l&&(i.stencil=l.stencil)}this._sharedInit(s),this._gl.pixelStorei(this._gl.UNPACK_COLORSPACE_CONVERSION_WEBGL,this._gl.NONE),i.useHighPrecisionFloats!==void 0&&(this._highPrecisionShadersAllowed=i.useHighPrecisionFloats),this.resize(),this._initGLContext(),this._initFeatures();for(let l=0;l1?new iT:new tT;let a=`Babylon.js v${n.Version}`;J.Log(a+` - ${this.description}`),this._renderingCanvas&&this._renderingCanvas.setAttribute&&this._renderingCanvas.setAttribute("data-engine",a);let o=Tn(this._gl);o.validateShaderPrograms=this.validateShaderPrograms,o.parallelShaderCompile=this._caps.parallelShaderCompile}_clearEmptyResources(){this._dummyFramebuffer=null,super._clearEmptyResources()}_getShaderProcessingContext(e){return null}areAllEffectsReady(){for(let e in this._compiledEffects)if(!this._compiledEffects[e].isReady())return!1;return!0}_initGLContext(){var i;this._caps={maxTexturesImageUnits:this._gl.getParameter(this._gl.MAX_TEXTURE_IMAGE_UNITS),maxCombinedTexturesImageUnits:this._gl.getParameter(this._gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS),maxVertexTextureImageUnits:this._gl.getParameter(this._gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS),maxTextureSize:this._gl.getParameter(this._gl.MAX_TEXTURE_SIZE),maxSamples:this._webGLVersion>1?this._gl.getParameter(this._gl.MAX_SAMPLES):1,maxCubemapTextureSize:this._gl.getParameter(this._gl.MAX_CUBE_MAP_TEXTURE_SIZE),maxRenderTextureSize:this._gl.getParameter(this._gl.MAX_RENDERBUFFER_SIZE),maxVertexAttribs:this._gl.getParameter(this._gl.MAX_VERTEX_ATTRIBS),maxVaryingVectors:this._gl.getParameter(this._gl.MAX_VARYING_VECTORS),maxFragmentUniformVectors:this._gl.getParameter(this._gl.MAX_FRAGMENT_UNIFORM_VECTORS),maxVertexUniformVectors:this._gl.getParameter(this._gl.MAX_VERTEX_UNIFORM_VECTORS),shaderFloatPrecision:0,parallelShaderCompile:this._gl.getExtension("KHR_parallel_shader_compile")||void 0,standardDerivatives:this._webGLVersion>1||this._gl.getExtension("OES_standard_derivatives")!==null,maxAnisotropy:1,astc:this._gl.getExtension("WEBGL_compressed_texture_astc")||this._gl.getExtension("WEBKIT_WEBGL_compressed_texture_astc"),bptc:this._gl.getExtension("EXT_texture_compression_bptc")||this._gl.getExtension("WEBKIT_EXT_texture_compression_bptc"),s3tc:this._gl.getExtension("WEBGL_compressed_texture_s3tc")||this._gl.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"),s3tc_srgb:this._gl.getExtension("WEBGL_compressed_texture_s3tc_srgb")||this._gl.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc_srgb"),pvrtc:this._gl.getExtension("WEBGL_compressed_texture_pvrtc")||this._gl.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"),etc1:this._gl.getExtension("WEBGL_compressed_texture_etc1")||this._gl.getExtension("WEBKIT_WEBGL_compressed_texture_etc1"),etc2:this._gl.getExtension("WEBGL_compressed_texture_etc")||this._gl.getExtension("WEBKIT_WEBGL_compressed_texture_etc")||this._gl.getExtension("WEBGL_compressed_texture_es3_0"),textureAnisotropicFilterExtension:this._gl.getExtension("EXT_texture_filter_anisotropic")||this._gl.getExtension("WEBKIT_EXT_texture_filter_anisotropic")||this._gl.getExtension("MOZ_EXT_texture_filter_anisotropic"),uintIndices:this._webGLVersion>1||this._gl.getExtension("OES_element_index_uint")!==null,fragmentDepthSupported:this._webGLVersion>1||this._gl.getExtension("EXT_frag_depth")!==null,highPrecisionShaderSupported:!1,timerQuery:this._gl.getExtension("EXT_disjoint_timer_query_webgl2")||this._gl.getExtension("EXT_disjoint_timer_query"),supportOcclusionQuery:this._webGLVersion>1,canUseTimestampForTimerQuery:!1,drawBuffersExtension:!1,maxMSAASamples:1,colorBufferFloat:!!(this._webGLVersion>1&&this._gl.getExtension("EXT_color_buffer_float")),blendFloat:this._gl.getExtension("EXT_float_blend")!==null,supportFloatTexturesResolve:!1,rg11b10ufColorRenderable:!1,colorBufferHalfFloat:!!(this._webGLVersion>1&&this._gl.getExtension("EXT_color_buffer_half_float")),textureFloat:!!(this._webGLVersion>1||this._gl.getExtension("OES_texture_float")),textureHalfFloat:!!(this._webGLVersion>1||this._gl.getExtension("OES_texture_half_float")),textureHalfFloatRender:!1,textureFloatLinearFiltering:!1,textureFloatRender:!1,textureHalfFloatLinearFiltering:!1,vertexArrayObject:!1,instancedArrays:!1,textureLOD:!!(this._webGLVersion>1||this._gl.getExtension("EXT_shader_texture_lod")),texelFetch:this._webGLVersion!==1,blendMinMax:!1,multiview:this._gl.getExtension("OVR_multiview2"),oculusMultiview:this._gl.getExtension("OCULUS_multiview"),depthTextureExtension:!1,canUseGLInstanceID:this._webGLVersion>1,canUseGLVertexID:this._webGLVersion>1,supportComputeShaders:!1,supportSRGBBuffers:!1,supportTransformFeedbacks:this._webGLVersion>1,textureMaxLevel:this._webGLVersion>1,texture2DArrayMaxLayerCount:this._webGLVersion>1?this._gl.getParameter(this._gl.MAX_ARRAY_TEXTURE_LAYERS):128,disableMorphTargetTexture:!1,textureNorm16:!!this._gl.getExtension("EXT_texture_norm16"),blendParametersPerTarget:!1,dualSourceBlending:!1,supportReadWriteStorageTextures:!1},this._caps.supportFloatTexturesResolve=this._caps.colorBufferFloat,this._caps.rg11b10ufColorRenderable=this._caps.colorBufferFloat,this._glVersion=this._gl.getParameter(this._gl.VERSION);let e=this._gl.getExtension("WEBGL_debug_renderer_info");e!=null&&(this._glRenderer=this._gl.getParameter(e.UNMASKED_RENDERER_WEBGL),this._glVendor=this._gl.getParameter(e.UNMASKED_VENDOR_WEBGL)),this._glVendor||(this._glVendor=this._gl.getParameter(this._gl.VENDOR)||"Unknown vendor"),this._glRenderer||(this._glRenderer=this._gl.getParameter(this._gl.RENDERER)||"Unknown renderer"),this._gl.HALF_FLOAT_OES!==36193&&(this._gl.HALF_FLOAT_OES=36193),this._gl.RGBA16F!==34842&&(this._gl.RGBA16F=34842),this._gl.RGBA32F!==34836&&(this._gl.RGBA32F=34836),this._gl.DEPTH24_STENCIL8!==35056&&(this._gl.DEPTH24_STENCIL8=35056),this._caps.timerQuery&&(this._webGLVersion===1&&(this._gl.getQuery=this._caps.timerQuery.getQueryEXT.bind(this._caps.timerQuery)),this._caps.canUseTimestampForTimerQuery=((i=this._gl.getQuery(this._caps.timerQuery.TIMESTAMP_EXT,this._caps.timerQuery.QUERY_COUNTER_BITS_EXT))!=null?i:0)>0),this._caps.maxAnisotropy=this._caps.textureAnisotropicFilterExtension?this._gl.getParameter(this._caps.textureAnisotropicFilterExtension.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,this._caps.textureFloatLinearFiltering=!!(this._caps.textureFloat&&this._gl.getExtension("OES_texture_float_linear")),this._caps.textureFloatRender=!!(this._caps.textureFloat&&this._canRenderToFloatFramebuffer()),this._caps.textureHalfFloatLinearFiltering=!!(this._webGLVersion>1||this._caps.textureHalfFloat&&this._gl.getExtension("OES_texture_half_float_linear")),this._caps.textureNorm16&&(this._gl.R16_EXT=33322,this._gl.RG16_EXT=33324,this._gl.RGB16_EXT=32852,this._gl.RGBA16_EXT=32859,this._gl.R16_SNORM_EXT=36760,this._gl.RG16_SNORM_EXT=36761,this._gl.RGB16_SNORM_EXT=36762,this._gl.RGBA16_SNORM_EXT=36763);let t=this._gl.getExtension("OES_draw_buffers_indexed");if(this._caps.blendParametersPerTarget=!!t,this._alphaState=new Iu(this._caps.blendParametersPerTarget),t&&(this._gl.blendEquationSeparateIndexed=t.blendEquationSeparateiOES.bind(t),this._gl.blendEquationIndexed=t.blendEquationiOES.bind(t),this._gl.blendFuncSeparateIndexed=t.blendFuncSeparateiOES.bind(t),this._gl.blendFuncIndexed=t.blendFunciOES.bind(t),this._gl.colorMaskIndexed=t.colorMaskiOES.bind(t),this._gl.disableIndexed=t.disableiOES.bind(t),this._gl.enableIndexed=t.enableiOES.bind(t)),this._caps.dualSourceBlending=!!this._gl.getExtension("WEBGL_blend_func_extended"),this._caps.astc&&(this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR),this._caps.bptc&&(this._gl.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT=this._caps.bptc.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT),this._caps.s3tc_srgb&&(this._gl.COMPRESSED_SRGB_S3TC_DXT1_EXT=this._caps.s3tc_srgb.COMPRESSED_SRGB_S3TC_DXT1_EXT,this._gl.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT=this._caps.s3tc_srgb.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,this._gl.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT=this._caps.s3tc_srgb.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT),this._caps.etc2&&(this._gl.COMPRESSED_SRGB8_ETC2=this._caps.etc2.COMPRESSED_SRGB8_ETC2,this._gl.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC=this._caps.etc2.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC),this._webGLVersion>1&&this._gl.HALF_FLOAT_OES!==5131&&(this._gl.HALF_FLOAT_OES=5131),this._caps.textureHalfFloatRender=this._caps.textureHalfFloat&&this._canRenderToHalfFloatFramebuffer(),this._webGLVersion>1)this._caps.drawBuffersExtension=!0,this._caps.maxMSAASamples=this._maxMSAASamplesOverride!==null?this._maxMSAASamplesOverride:this._gl.getParameter(this._gl.MAX_SAMPLES),this._caps.maxDrawBuffers=this._gl.getParameter(this._gl.MAX_DRAW_BUFFERS);else{let r=this._gl.getExtension("WEBGL_draw_buffers");if(r!==null){this._caps.drawBuffersExtension=!0,this._gl.drawBuffers=r.drawBuffersWEBGL.bind(r),this._caps.maxDrawBuffers=this._gl.getParameter(r.MAX_DRAW_BUFFERS_WEBGL),this._gl.DRAW_FRAMEBUFFER=this._gl.FRAMEBUFFER;for(let s=0;s<16;s++)this._gl["COLOR_ATTACHMENT"+s+"_WEBGL"]=r["COLOR_ATTACHMENT"+s+"_WEBGL"]}}if(this._webGLVersion>1)this._caps.depthTextureExtension=!0;else{let r=this._gl.getExtension("WEBGL_depth_texture");r!=null&&(this._caps.depthTextureExtension=!0,this._gl.UNSIGNED_INT_24_8=r.UNSIGNED_INT_24_8_WEBGL)}if(this.disableVertexArrayObjects)this._caps.vertexArrayObject=!1;else if(this._webGLVersion>1)this._caps.vertexArrayObject=!0;else{let r=this._gl.getExtension("OES_vertex_array_object");r!=null&&(this._caps.vertexArrayObject=!0,this._gl.createVertexArray=r.createVertexArrayOES.bind(r),this._gl.bindVertexArray=r.bindVertexArrayOES.bind(r),this._gl.deleteVertexArray=r.deleteVertexArrayOES.bind(r))}if(this._webGLVersion>1)this._caps.instancedArrays=!0;else{let r=this._gl.getExtension("ANGLE_instanced_arrays");r!=null?(this._caps.instancedArrays=!0,this._gl.drawArraysInstanced=r.drawArraysInstancedANGLE.bind(r),this._gl.drawElementsInstanced=r.drawElementsInstancedANGLE.bind(r),this._gl.vertexAttribDivisor=r.vertexAttribDivisorANGLE.bind(r)):this._caps.instancedArrays=!1}if(this._gl.getShaderPrecisionFormat){let r=this._gl.getShaderPrecisionFormat(this._gl.VERTEX_SHADER,this._gl.HIGH_FLOAT),s=this._gl.getShaderPrecisionFormat(this._gl.FRAGMENT_SHADER,this._gl.HIGH_FLOAT);if(r&&s&&(this._caps.highPrecisionShaderSupported=r.precision!==0&&s.precision!==0,this._caps.shaderFloatPrecision=Math.min(r.precision,s.precision)),!this._shouldUseHighPrecisionShader){let a=this._gl.getShaderPrecisionFormat(this._gl.VERTEX_SHADER,this._gl.MEDIUM_FLOAT),o=this._gl.getShaderPrecisionFormat(this._gl.FRAGMENT_SHADER,this._gl.MEDIUM_FLOAT);a&&o&&(this._caps.shaderFloatPrecision=Math.min(a.precision,o.precision))}this._caps.shaderFloatPrecision<10&&(this._caps.shaderFloatPrecision=10)}if(this._webGLVersion>1)this._caps.blendMinMax=!0;else{let r=this._gl.getExtension("EXT_blend_minmax");r!=null&&(this._caps.blendMinMax=!0,this._gl.MAX=r.MAX_EXT,this._gl.MIN=r.MIN_EXT)}if(!this._caps.supportSRGBBuffers){if(this._webGLVersion>1)this._caps.supportSRGBBuffers=!0,this._glSRGBExtensionValues={SRGB:WebGL2RenderingContext.SRGB,SRGB8:WebGL2RenderingContext.SRGB8,SRGB8_ALPHA8:WebGL2RenderingContext.SRGB8_ALPHA8};else{let r=this._gl.getExtension("EXT_sRGB");r!=null&&(this._caps.supportSRGBBuffers=!0,this._glSRGBExtensionValues={SRGB:r.SRGB_EXT,SRGB8:r.SRGB_ALPHA_EXT,SRGB8_ALPHA8:r.SRGB_ALPHA_EXT})}if(this._creationOptions){let r=this._creationOptions.forceSRGBBufferSupportState;r!==void 0&&(this._caps.supportSRGBBuffers=this._caps.supportSRGBBuffers&&r)}}this._depthCullingState.depthTest=!0,this._depthCullingState.depthFunc=this._gl.LEQUAL,this._depthCullingState.depthMask=!0,this._maxSimultaneousTextures=this._caps.maxCombinedTexturesImageUnits;for(let r=0;r=65535)return new Uint32Array(e);return new Uint16Array(e)}return new Uint16Array(e)}bindArrayBuffer(e){this._vaoRecordInProgress||this._unbindVertexArrayObject(),this._bindBuffer(e,this._gl.ARRAY_BUFFER)}bindUniformBlock(e,t,i){let r=e.program,s=this._gl.getUniformBlockIndex(r,t);this._gl.uniformBlockBinding(r,s,i)}bindIndexBuffer(e){this._vaoRecordInProgress||this._unbindVertexArrayObject(),this._bindBuffer(e,this._gl.ELEMENT_ARRAY_BUFFER)}_bindBuffer(e,t){(this._vaoRecordInProgress||this._currentBoundBuffer[t]!==e)&&(this._gl.bindBuffer(t,e?e.underlyingResource:null),this._currentBoundBuffer[t]=e)}updateArrayBuffer(e){this._gl.bufferSubData(this._gl.ARRAY_BUFFER,0,e)}_vertexAttribPointer(e,t,i,r,s,a,o){let l=this._currentBufferPointers[t];if(!l)return;let c=!1;l.active?(l.buffer!==e&&(l.buffer=e,c=!0),l.size!==i&&(l.size=i,c=!0),l.type!==r&&(l.type=r,c=!0),l.normalized!==s&&(l.normalized=s,c=!0),l.stride!==a&&(l.stride=a,c=!0),l.offset!==o&&(l.offset=o,c=!0)):(c=!0,l.active=!0,l.index=t,l.size=i,l.type=r,l.normalized=s,l.stride=a,l.offset=o,l.buffer=e),(c||this._vaoRecordInProgress)&&(this.bindArrayBuffer(e),r===this._gl.UNSIGNED_INT||r===this._gl.INT?this._gl.vertexAttribIPointer(t,i,r,a,o):this._gl.vertexAttribPointer(t,i,r,s,a,o))}_bindIndexBufferWithCache(e){e!=null&&this._cachedIndexBuffer!==e&&(this._cachedIndexBuffer=e,this.bindIndexBuffer(e),this._uintIndicesCurrentlySet=e.is32Bits)}_bindVertexBuffersAttributes(e,t,i){let r=t.getAttributesNames();this._vaoRecordInProgress||this._unbindVertexArrayObject(),this.unbindAllAttributes();for(let s=0;s=0){let o=r[s],l=null;if(i&&(l=i[o]),l||(l=e[o]),!l)continue;this._gl.enableVertexAttribArray(a),this._vaoRecordInProgress||(this._vertexAttribArraysEnabled[a]=!0);let c=l.getBuffer();c&&(this._vertexAttribPointer(c,a,l.getSize(),l.type,l.normalized,l.byteStride,l.byteOffset),l.getIsInstanced()&&(this._gl.vertexAttribDivisor(a,l.getInstanceDivisor()),this._vaoRecordInProgress||(this._currentInstanceLocations.push(a),this._currentInstanceBuffers.push(c))))}}}recordVertexArrayObject(e,t,i,r){let s=this._gl.createVertexArray();if(!s)throw new Error("Unable to create VAO");return this._vaoRecordInProgress=!0,this._gl.bindVertexArray(s),this._mustWipeVertexAttributes=!0,this._bindVertexBuffersAttributes(e,i,r),this.bindIndexBuffer(t),this._vaoRecordInProgress=!1,this._gl.bindVertexArray(null),s}bindVertexArrayObject(e,t){this._cachedVertexArrayObject!==e&&(this._cachedVertexArrayObject=e,this._gl.bindVertexArray(e),this._cachedVertexBuffers=null,this._cachedIndexBuffer=null,this._uintIndicesCurrentlySet=t!=null&&t.is32Bits,this._mustWipeVertexAttributes=!0)}bindBuffersDirectly(e,t,i,r,s){if(this._cachedVertexBuffers!==e||this._cachedEffectForVertexBuffers!==s){this._cachedVertexBuffers=e,this._cachedEffectForVertexBuffers=s;let a=s.getAttributesCount();this._unbindVertexArrayObject(),this.unbindAllAttributes();let o=0;for(let l=0;l=0&&(this._gl.enableVertexAttribArray(c),this._vertexAttribArraysEnabled[c]=!0,this._vertexAttribPointer(e,c,i[l],this._gl.FLOAT,!1,r,o)),o+=i[l]*4}}this._bindIndexBufferWithCache(t)}_unbindVertexArrayObject(){this._cachedVertexArrayObject&&(this._cachedVertexArrayObject=null,this._gl.bindVertexArray(null))}bindBuffers(e,t,i,r){(this._cachedVertexBuffers!==e||this._cachedEffectForVertexBuffers!==i)&&(this._cachedVertexBuffers=e,this._cachedEffectForVertexBuffers=i,this._bindVertexBuffersAttributes(e,i,r)),this._bindIndexBufferWithCache(t)}unbindInstanceAttributes(){let e;for(let t=0,i=this._currentInstanceLocations.length;t1||this.isWebGPU)),(o===1&&!this._caps.textureFloatLinearFiltering||o===2&&!this._caps.textureHalfFloatLinearFiltering)&&(l=1),o===1&&!this._caps.textureFloat&&(o=0,J.Warn("Float textures are not supported. Type forced to TEXTURETYPE_UNSIGNED_BYTE"));let p=ZI(c),g=Dl(c),v=this._gl,x=new Fi(this,r),A=e.width||e,S=e.height||e,E=e.depth||0,R=e.layers||0,I=this._getSamplingParameters(l,(s||a)&&!p),y=R!==0?v.TEXTURE_2D_ARRAY:E!==0?v.TEXTURE_3D:_?v.TEXTURE_CUBE_MAP:v.TEXTURE_2D,M=p?this._getInternalFormatFromDepthTextureFormat(c,!0,g):this._getRGBABufferInternalSizedFormat(o,c,f),D=p?g?v.DEPTH_STENCIL:v.DEPTH_COMPONENT:this._getInternalFormat(c),O=p?this._getWebGLTextureTypeFromDepthTextureFormat(c):this._getWebGLTextureType(o);if(this._bindTextureDirectly(y,x),R!==0)x.is2DArray=!0,v.texImage3D(y,0,M,A,S,R,0,D,O,null);else if(E!==0)x.is3D=!0,v.texImage3D(y,0,M,A,S,E,0,D,O,null);else if(_){x.isCube=!0;for(let N=0;N<6;N++)v.texImage2D(v.TEXTURE_CUBE_MAP_POSITIVE_X+N,0,M,A,S,0,D,O,null)}else v.texImage2D(y,0,M,A,S,0,D,O,null);if(v.texParameteri(y,v.TEXTURE_MAG_FILTER,I.mag),v.texParameteri(y,v.TEXTURE_MIN_FILTER,I.min),v.texParameteri(y,v.TEXTURE_WRAP_S,v.CLAMP_TO_EDGE),v.texParameteri(y,v.TEXTURE_WRAP_T,v.CLAMP_TO_EDGE),p&&this.webGLVersion>1&&(m===0?(v.texParameteri(y,v.TEXTURE_COMPARE_FUNC,515),v.texParameteri(y,v.TEXTURE_COMPARE_MODE,v.NONE)):(v.texParameteri(y,v.TEXTURE_COMPARE_FUNC,m),v.texParameteri(y,v.TEXTURE_COMPARE_MODE,v.COMPARE_REF_TO_TEXTURE))),(s||a)&&this._gl.generateMipmap(y),this._bindTextureDirectly(y,null),x._useSRGBBuffer=f,x.baseWidth=A,x.baseHeight=S,x.width=A,x.height=S,x.depth=R||E,x.isReady=!0,x.samples=h,x.generateMipMaps=s,x.samplingMode=l,x.type=o,x.format=c,x.label=d,x.comparisonFunction=m,this._internalTexturesCache.push(x),u){let N;if(ZI(x.format)?N=this._setupFramebufferDepthAttachments(Dl(x.format),x.format!==19,x.width,x.height,h,x.format,!0):N=this._createRenderBuffer(x.width,x.height,h,-1,this._getRGBABufferInternalSizedFormat(x.type,x.format,x._useSRGBBuffer),-1),!N)throw new Error("Unable to create render buffer");x._autoMSAAManagement=!0;let F=x._hardwareTexture;F||(F=x._hardwareTexture=this._createHardwareTexture()),F.addMSAARenderBuffer(N)}return x}_getUseSRGBBuffer(e,t){return e&&this._caps.supportSRGBBuffers&&(this.webGLVersion>1||t)}createTexture(e,t,i,r,s=3,a=null,o=null,l=null,c=null,f=null,h=null,d,u,m,_){return this._createTextureBase(e,t,i,r,s,a,o,(...p)=>this._prepareWebGLTexture(...p,f),(p,g,v,x,A,S)=>{let E=this._gl,R=v.width===p&&v.height===g;A._creationFlags=m!=null?m:0;let I=this._getTexImageParametersForCreateTexture(A.format,A._useSRGBBuffer);if(R)return E.texImage2D(E.TEXTURE_2D,0,I.internalFormat,I.format,I.type,v),!1;let y=this._caps.maxTextureSize;if(v.width>y||v.height>y||!this._supportsHardwareTextureRescaling)return this._prepareWorkingCanvas(),!this._workingCanvas||!this._workingContext||(this._workingCanvas.width=p,this._workingCanvas.height=g,this._workingContext.drawImage(v,0,0,v.width,v.height,0,0,p,g),E.texImage2D(E.TEXTURE_2D,0,I.internalFormat,I.format,I.type,this._workingCanvas),A.width=p,A.height=g),!1;{let M=new Fi(this,2);this._bindTextureDirectly(E.TEXTURE_2D,M,!0),E.texImage2D(E.TEXTURE_2D,0,I.internalFormat,I.format,I.type,v),this._rescaleTexture(M,A,r,I.format,()=>{this._releaseTexture(M),this._bindTextureDirectly(E.TEXTURE_2D,A,!0),S()})}return!0},l,c,f,h,d,u,_)}_getTexImageParametersForCreateTexture(e,t){let i,r;return this.webGLVersion===1?(i=this._getInternalFormat(e,t),r=i):(i=this._getInternalFormat(e,!1),r=this._getRGBABufferInternalSizedFormat(0,e,t)),{internalFormat:r,format:i,type:this._gl.UNSIGNED_BYTE}}_rescaleTexture(e,t,i,r,s){}_unpackFlipY(e){this._unpackFlipYCached!==e&&(this._gl.pixelStorei(this._gl.UNPACK_FLIP_Y_WEBGL,e?1:0),this.enableUnpackFlipYCached&&(this._unpackFlipYCached=e))}_getUnpackAlignement(){return this._gl.getParameter(this._gl.UNPACK_ALIGNMENT)}_getTextureTarget(e){return e.isCube?this._gl.TEXTURE_CUBE_MAP:e.is3D?this._gl.TEXTURE_3D:e.is2DArray||e.isMultiview?this._gl.TEXTURE_2D_ARRAY:this._gl.TEXTURE_2D}updateTextureSamplingMode(e,t,i=!1){let r=this._getTextureTarget(t),s=this._getSamplingParameters(e,t.useMipMaps||i);this._setTextureParameterInteger(r,this._gl.TEXTURE_MAG_FILTER,s.mag,t),this._setTextureParameterInteger(r,this._gl.TEXTURE_MIN_FILTER,s.min),i&&s.hasMipMaps&&(t.generateMipMaps=!0,this._gl.generateMipmap(r)),this._bindTextureDirectly(r,null),t.samplingMode=e}updateTextureDimensions(e,t,i,r=1){}updateTextureWrappingMode(e,t,i=null,r=null){let s=this._getTextureTarget(e);t!==null&&(this._setTextureParameterInteger(s,this._gl.TEXTURE_WRAP_S,this._getTextureWrapMode(t),e),e._cachedWrapU=t),i!==null&&(this._setTextureParameterInteger(s,this._gl.TEXTURE_WRAP_T,this._getTextureWrapMode(i),e),e._cachedWrapV=i),(e.is2DArray||e.is3D)&&r!==null&&(this._setTextureParameterInteger(s,this._gl.TEXTURE_WRAP_R,this._getTextureWrapMode(r),e),e._cachedWrapR=r),this._bindTextureDirectly(s,null)}_uploadCompressedDataToTextureDirectly(e,t,i,r,s,a=0,o=0){let l=this._gl,c=l.TEXTURE_2D;if(e.isCube&&(c=l.TEXTURE_CUBE_MAP_POSITIVE_X+a),e._useSRGBBuffer)switch(t){case 37492:case 36196:this._caps.etc2?t=l.COMPRESSED_SRGB8_ETC2:e._useSRGBBuffer=!1;break;case 37496:this._caps.etc2?t=l.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:e._useSRGBBuffer=!1;break;case 36492:t=l.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT;break;case 37808:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR;break;case 37809:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR;break;case 37810:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR;break;case 37811:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR;break;case 37812:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR;break;case 37813:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR;break;case 37814:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR;break;case 37815:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR;break;case 37816:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR;break;case 37817:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR;break;case 37818:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR;break;case 37819:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR;break;case 37820:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR;break;case 37821:t=l.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR;break;case 33776:this._caps.s3tc_srgb?t=l.COMPRESSED_SRGB_S3TC_DXT1_EXT:e._useSRGBBuffer=!1;break;case 33777:this._caps.s3tc_srgb?t=l.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:e._useSRGBBuffer=!1;break;case 33779:this._caps.s3tc_srgb?t=l.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:e._useSRGBBuffer=!1;break;default:e._useSRGBBuffer=!1;break}if(e.generateMipMaps){let f=e._hardwareTexture;f.memoryAllocated||(l.texStorage2D(e.isCube?l.TEXTURE_CUBE_MAP:l.TEXTURE_2D,Math.floor(Math.log2(Math.max(i,r)))+1,t,e.width,e.height),f.memoryAllocated=!0),this._gl.compressedTexSubImage2D(c,o,0,0,i,r,t,s)}else this._gl.compressedTexImage2D(c,o,t,i,r,0,s)}_uploadDataToTextureDirectly(e,t,i=0,r=0,s,a=!1){let o=this._gl,l=this._getWebGLTextureType(e.type),c=this._getInternalFormat(e.format),f=s===void 0?this._getRGBABufferInternalSizedFormat(e.type,e.format,e._useSRGBBuffer):this._getInternalFormat(s,e._useSRGBBuffer);this._unpackFlipY(e.invertY);let h=o.TEXTURE_2D;e.isCube&&(h=o.TEXTURE_CUBE_MAP_POSITIVE_X+i);let d=Math.round(Math.log(e.width)*Math.LOG2E),u=Math.round(Math.log(e.height)*Math.LOG2E),m=a?e.width:Math.pow(2,Math.max(d-r,0)),_=a?e.height:Math.pow(2,Math.max(u-r,0));o.texImage2D(h,r,f,m,_,0,c,l,t)}updateTextureData(e,t,i,r,s,a,o=0,l=0,c=!1){let f=this._gl,h=this._getWebGLTextureType(e.type),d=this._getInternalFormat(e.format);this._unpackFlipY(e.invertY);let u=f.TEXTURE_2D,m=f.TEXTURE_2D;e.isCube&&(m=f.TEXTURE_CUBE_MAP_POSITIVE_X+o,u=f.TEXTURE_CUBE_MAP),this._bindTextureDirectly(u,e,!0),f.texSubImage2D(m,l,i,r,s,a,d,h,t),c&&this._gl.generateMipmap(m),this._bindTextureDirectly(u,null)}_uploadArrayBufferViewToTexture(e,t,i=0,r=0){let s=this._gl,a=e.isCube?s.TEXTURE_CUBE_MAP:s.TEXTURE_2D;this._bindTextureDirectly(a,e,!0),this._uploadDataToTextureDirectly(e,t,i,r),this._bindTextureDirectly(a,null,!0)}_prepareWebGLTextureContinuation(e,t,i,r,s){let a=this._gl;if(!a)return;let o=this._getSamplingParameters(s,!i);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,o.mag),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,o.min),!i&&!r&&a.generateMipmap(a.TEXTURE_2D),this._bindTextureDirectly(a.TEXTURE_2D,null),t&&t.removePendingData(e),e.onLoadedObservable.notifyObservers(e),e.onLoadedObservable.clear()}_prepareWebGLTexture(e,t,i,r,s,a,o,l,c,f){let h=this.getCaps().maxTextureSize,d=Math.min(h,this.needPOTTextures?fs(r.width,h):r.width),u=Math.min(h,this.needPOTTextures?fs(r.height,h):r.height),m=this._gl;if(m){if(!e._hardwareTexture){i&&i.removePendingData(e);return}this._bindTextureDirectly(m.TEXTURE_2D,e,!0),this._unpackFlipY(s===void 0?!0:!!s),e.baseWidth=r.width,e.baseHeight=r.height,e.width=d,e.height=u,e.isReady=!0,e.type=e.type!==-1?e.type:0,e.format=e.format!==-1?e.format:f!=null?f:t===".jpg"&&!e._useSRGBBuffer?4:5,!l(d,u,r,t,e,()=>{this._prepareWebGLTextureContinuation(e,i,a,o,c)})&&this._prepareWebGLTextureContinuation(e,i,a,o,c)}}_getInternalFormatFromDepthTextureFormat(e,t,i){let r=this._gl;if(!t)return r.STENCIL_INDEX8;let a=i?r.DEPTH_STENCIL:r.DEPTH_COMPONENT;return this.webGLVersion>1?e===15?a=r.DEPTH_COMPONENT16:e===16?a=r.DEPTH_COMPONENT24:e===17||e===13?a=i?r.DEPTH24_STENCIL8:r.DEPTH_COMPONENT24:e===14?a=r.DEPTH_COMPONENT32F:e===18&&(a=i?r.DEPTH32F_STENCIL8:r.DEPTH_COMPONENT32F):a=r.DEPTH_COMPONENT16,a}_getWebGLTextureTypeFromDepthTextureFormat(e){let t=this._gl,i=t.UNSIGNED_INT;return e===15?i=t.UNSIGNED_SHORT:e===17||e===13?i=t.UNSIGNED_INT_24_8:e===14?i=t.FLOAT:e===18?i=t.FLOAT_32_UNSIGNED_INT_24_8_REV:e===19&&(i=t.UNSIGNED_BYTE),i}_setupFramebufferDepthAttachments(e,t,i,r,s=1,a,o=!1){let l=this._gl;a=a!=null?a:e?13:14;let c=this._getInternalFormatFromDepthTextureFormat(a,t,e);return e&&t?this._createRenderBuffer(i,r,s,l.DEPTH_STENCIL,c,o?-1:l.DEPTH_STENCIL_ATTACHMENT):t?this._createRenderBuffer(i,r,s,c,c,o?-1:l.DEPTH_ATTACHMENT):e?this._createRenderBuffer(i,r,s,c,c,o?-1:l.STENCIL_ATTACHMENT):null}_createRenderBuffer(e,t,i,r,s,a,o=!0){let c=this._gl.createRenderbuffer();return this._updateRenderBuffer(c,e,t,i,r,s,a,o)}_updateRenderBuffer(e,t,i,r,s,a,o,l=!0){let c=this._gl;return c.bindRenderbuffer(c.RENDERBUFFER,e),r>1&&c.renderbufferStorageMultisample?c.renderbufferStorageMultisample(c.RENDERBUFFER,r,a,t,i):c.renderbufferStorage(c.RENDERBUFFER,s,t,i),o!==-1&&c.framebufferRenderbuffer(c.FRAMEBUFFER,o,c.RENDERBUFFER,e),l&&c.bindRenderbuffer(c.RENDERBUFFER,null),e}_releaseTexture(e){this._deleteTexture(e._hardwareTexture),this.unbindAllTextures();let t=this._internalTexturesCache.indexOf(e);t!==-1&&this._internalTexturesCache.splice(t,1),e._lodTextureHigh&&e._lodTextureHigh.dispose(),e._lodTextureMid&&e._lodTextureMid.dispose(),e._lodTextureLow&&e._lodTextureLow.dispose(),e._irradianceTexture&&e._irradianceTexture.dispose()}_deleteTexture(e){e==null||e.release()}_setProgram(e){this._currentProgram!==e&&(V1(e,this._gl),this._currentProgram=e)}bindSamplers(e){let t=e.getPipelineContext();this._setProgram(t.program);let i=e.getSamplers();for(let r=0;r-1;if(i&&a&&(this._activeChannel=t._associatedChannel),this._boundTexturesCache[this._activeChannel]!==t||r){if(this._activateCurrentTexture(),t&&t.isMultiview)throw J.Error(["_bindTextureDirectly called with a multiview texture!",e,t]),"_bindTextureDirectly called with a multiview texture!";this._gl.bindTexture(e,(c=(l=t==null?void 0:t._hardwareTexture)==null?void 0:l.underlyingResource)!=null?c:null),this._boundTexturesCache[this._activeChannel]=t,t&&(t._associatedChannel=this._activeChannel)}else i&&(s=!0,this._activateCurrentTexture());return a&&!i&&this._bindSamplerUniformToChannel(t._associatedChannel,this._activeChannel),s}_bindTexture(e,t,i){if(e===void 0)return;t&&(t._associatedChannel=e),this._activeChannel=e;let r=t?this._getTextureTarget(t):this._gl.TEXTURE_2D;this._bindTextureDirectly(r,t)}unbindAllTextures(){for(let e=0;e1&&(this._bindTextureDirectly(this._gl.TEXTURE_3D,null),this._bindTextureDirectly(this._gl.TEXTURE_2D_ARRAY,null))}setTexture(e,t,i,r){e!==void 0&&(t&&(this._boundUniforms[e]=t),this._setTexture(e,i))}_bindSamplerUniformToChannel(e,t){let i=this._boundUniforms[e];!i||i._currentState===t||(this._gl.uniform1i(i,t),i._currentState=t)}_getTextureWrapMode(e){switch(e){case 1:return this._gl.REPEAT;case 0:return this._gl.CLAMP_TO_EDGE;case 2:return this._gl.MIRRORED_REPEAT}return this._gl.REPEAT}_setTexture(e,t,i=!1,r=!1,s=""){if(!t)return this._boundTexturesCache[e]!=null&&(this._activeChannel=e,this._bindTextureDirectly(this._gl.TEXTURE_2D,null),this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP,null),this.webGLVersion>1&&(this._bindTextureDirectly(this._gl.TEXTURE_3D,null),this._bindTextureDirectly(this._gl.TEXTURE_2D_ARRAY,null))),!1;if(t.video){this._activeChannel=e;let c=t.getInternalTexture();c&&(c._associatedChannel=e),t.update()}else if(t.delayLoadState===4)return t.delayLoad(),!1;let a;r?a=t.depthStencilTexture:t.isReady()?a=t.getInternalTexture():t.isCube?a=this.emptyCubeTexture:t.is3D?a=this.emptyTexture3D:t.is2DArray?a=this.emptyTexture2DArray:a=this.emptyTexture,!i&&a&&(a._associatedChannel=e);let o=!0;this._boundTexturesCache[e]===a&&(i||this._bindSamplerUniformToChannel(a._associatedChannel,e),o=!1),this._activeChannel=e;let l=this._getTextureTarget(a);if(o&&this._bindTextureDirectly(l,a,i),a&&!a.isMultiview){if(a.isCube&&a._cachedCoordinatesMode!==t.coordinatesMode){a._cachedCoordinatesMode=t.coordinatesMode;let c=t.coordinatesMode!==3&&t.coordinatesMode!==5?1:0;t.wrapU=c,t.wrapV=c}a._cachedWrapU!==t.wrapU&&(a._cachedWrapU=t.wrapU,this._setTextureParameterInteger(l,this._gl.TEXTURE_WRAP_S,this._getTextureWrapMode(t.wrapU),a)),a._cachedWrapV!==t.wrapV&&(a._cachedWrapV=t.wrapV,this._setTextureParameterInteger(l,this._gl.TEXTURE_WRAP_T,this._getTextureWrapMode(t.wrapV),a)),a.is3D&&a._cachedWrapR!==t.wrapR&&(a._cachedWrapR=t.wrapR,this._setTextureParameterInteger(l,this._gl.TEXTURE_WRAP_R,this._getTextureWrapMode(t.wrapR),a)),this._setAnisotropicLevel(l,a,t.anisotropicFilteringLevel)}return!0}setTextureArray(e,t,i,r){if(!(e===void 0||!t)){(!this._textureUnits||this._textureUnits.length!==i.length)&&(this._textureUnits=new Int32Array(i.length));for(let s=0;s=this._caps.maxVertexAttribs||!this._vertexAttribArraysEnabled[e]||this.disableAttributeByIndex(e)}releaseEffects(){this._compiledEffects={},this.onReleaseEffectsObservable.notifyObservers(this)}dispose(){var e;ar()&&this._renderingCanvas&&(this._renderingCanvas.removeEventListener("webglcontextlost",this._onContextLost),this._onContextRestored&&this._renderingCanvas.removeEventListener("webglcontextrestored",this._onContextRestored)),super.dispose(),this._dummyFramebuffer&&this._gl.deleteFramebuffer(this._dummyFramebuffer),this.unbindAllAttributes(),this._boundUniforms={},this._workingCanvas=null,this._workingContext=null,this._currentBufferPointers.length=0,this._currentProgram=null,this._creationOptions.loseContextOnDispose&&((e=this._gl.getExtension("WEBGL_lose_context"))==null||e.loseContext()),US(this._gl)}attachContextLostEvent(e){this._renderingCanvas&&this._renderingCanvas.addEventListener("webglcontextlost",e,!1)}attachContextRestoredEvent(e){this._renderingCanvas&&this._renderingCanvas.addEventListener("webglcontextrestored",e,!1)}getError(){return this._gl.getError()}_canRenderToFloatFramebuffer(){return this._webGLVersion>1?this._caps.colorBufferFloat:this._canRenderToFramebuffer(1)}_canRenderToHalfFloatFramebuffer(){return this._webGLVersion>1?this._caps.colorBufferFloat:this._canRenderToFramebuffer(2)}_canRenderToFramebuffer(e){let t=this._gl;for(;t.getError()!==t.NO_ERROR;);let i=!0,r=t.createTexture();t.bindTexture(t.TEXTURE_2D,r),t.texImage2D(t.TEXTURE_2D,0,this._getRGBABufferInternalSizedFormat(e),1,1,0,t.RGBA,this._getWebGLTextureType(e),null),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST);let s=t.createFramebuffer();t.bindFramebuffer(t.FRAMEBUFFER,s),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,r,0);let a=t.checkFramebufferStatus(t.FRAMEBUFFER);if(i=i&&a===t.FRAMEBUFFER_COMPLETE,i=i&&t.getError()===t.NO_ERROR,i&&(t.clear(t.COLOR_BUFFER_BIT),i=i&&t.getError()===t.NO_ERROR),i){t.bindFramebuffer(t.FRAMEBUFFER,null);let o=t.RGBA,l=t.UNSIGNED_BYTE,c=new Uint8Array(4);t.readPixels(0,0,1,1,o,l,c),i=i&&t.getError()===t.NO_ERROR}for(t.deleteTexture(r),t.deleteFramebuffer(s),t.bindFramebuffer(t.FRAMEBUFFER,null);!i&&t.getError()!==t.NO_ERROR;);return i}_getWebGLTextureType(e){if(this._webGLVersion===1){switch(e){case 1:return this._gl.FLOAT;case 2:return this._gl.HALF_FLOAT_OES;case 0:return this._gl.UNSIGNED_BYTE;case 8:return this._gl.UNSIGNED_SHORT_4_4_4_4;case 9:return this._gl.UNSIGNED_SHORT_5_5_5_1;case 10:return this._gl.UNSIGNED_SHORT_5_6_5}return this._gl.UNSIGNED_BYTE}switch(e){case 3:return this._gl.BYTE;case 0:return this._gl.UNSIGNED_BYTE;case 4:return this._gl.SHORT;case 5:return this._gl.UNSIGNED_SHORT;case 6:return this._gl.INT;case 7:return this._gl.UNSIGNED_INT;case 1:return this._gl.FLOAT;case 2:return this._gl.HALF_FLOAT;case 8:return this._gl.UNSIGNED_SHORT_4_4_4_4;case 9:return this._gl.UNSIGNED_SHORT_5_5_5_1;case 10:return this._gl.UNSIGNED_SHORT_5_6_5;case 11:return this._gl.UNSIGNED_INT_2_10_10_10_REV;case 12:return this._gl.UNSIGNED_INT_24_8;case 13:return this._gl.UNSIGNED_INT_10F_11F_11F_REV;case 14:return this._gl.UNSIGNED_INT_5_9_9_9_REV;case 15:return this._gl.FLOAT_32_UNSIGNED_INT_24_8_REV}return this._gl.UNSIGNED_BYTE}_getInternalFormat(e,t=!1){let i=t?this._glSRGBExtensionValues.SRGB8_ALPHA8:this._gl.RGBA;switch(e){case 0:i=this._gl.ALPHA;break;case 1:i=this._gl.LUMINANCE;break;case 2:i=this._gl.LUMINANCE_ALPHA;break;case 6:case 33322:case 36760:i=this._gl.RED;break;case 7:case 33324:case 36761:i=this._gl.RG;break;case 4:case 32852:case 36762:i=t?this._glSRGBExtensionValues.SRGB:this._gl.RGB;break;case 5:case 32859:case 36763:i=t?this._glSRGBExtensionValues.SRGB8_ALPHA8:this._gl.RGBA;break}if(this._webGLVersion>1)switch(e){case 8:i=this._gl.RED_INTEGER;break;case 9:i=this._gl.RG_INTEGER;break;case 10:i=this._gl.RGB_INTEGER;break;case 11:i=this._gl.RGBA_INTEGER;break}return i}_getRGBABufferInternalSizedFormat(e,t,i=!1){if(this._webGLVersion===1){if(t!==void 0)switch(t){case 0:return this._gl.ALPHA;case 1:return this._gl.LUMINANCE;case 2:return this._gl.LUMINANCE_ALPHA;case 4:return i?this._glSRGBExtensionValues.SRGB:this._gl.RGB}return this._gl.RGBA}switch(e){case 3:switch(t){case 6:return this._gl.R8_SNORM;case 7:return this._gl.RG8_SNORM;case 4:return this._gl.RGB8_SNORM;case 8:return this._gl.R8I;case 9:return this._gl.RG8I;case 10:return this._gl.RGB8I;case 11:return this._gl.RGBA8I;default:return this._gl.RGBA8_SNORM}case 0:switch(t){case 6:return this._gl.R8;case 7:return this._gl.RG8;case 4:return i?this._glSRGBExtensionValues.SRGB8:this._gl.RGB8;case 5:return i?this._glSRGBExtensionValues.SRGB8_ALPHA8:this._gl.RGBA8;case 8:return this._gl.R8UI;case 9:return this._gl.RG8UI;case 10:return this._gl.RGB8UI;case 11:return this._gl.RGBA8UI;case 0:return this._gl.ALPHA;case 1:return this._gl.LUMINANCE;case 2:return this._gl.LUMINANCE_ALPHA;default:return this._gl.RGBA8}case 4:switch(t){case 8:return this._gl.R16I;case 36760:return this._gl.R16_SNORM_EXT;case 36761:return this._gl.RG16_SNORM_EXT;case 36762:return this._gl.RGB16_SNORM_EXT;case 36763:return this._gl.RGBA16_SNORM_EXT;case 9:return this._gl.RG16I;case 10:return this._gl.RGB16I;case 11:return this._gl.RGBA16I;default:return this._gl.RGBA16I}case 5:switch(t){case 8:return this._gl.R16UI;case 33322:return this._gl.R16_EXT;case 33324:return this._gl.RG16_EXT;case 32852:return this._gl.RGB16_EXT;case 32859:return this._gl.RGBA16_EXT;case 9:return this._gl.RG16UI;case 10:return this._gl.RGB16UI;case 11:return this._gl.RGBA16UI;default:return this._gl.RGBA16UI}case 6:switch(t){case 8:return this._gl.R32I;case 9:return this._gl.RG32I;case 10:return this._gl.RGB32I;case 11:return this._gl.RGBA32I;default:return this._gl.RGBA32I}case 7:switch(t){case 8:return this._gl.R32UI;case 9:return this._gl.RG32UI;case 10:return this._gl.RGB32UI;case 11:return this._gl.RGBA32UI;default:return this._gl.RGBA32UI}case 1:switch(t){case 6:return this._gl.R32F;case 7:return this._gl.RG32F;case 4:return this._gl.RGB32F;case 5:return this._gl.RGBA32F;default:return this._gl.RGBA32F}case 2:switch(t){case 6:return this._gl.R16F;case 7:return this._gl.RG16F;case 4:return this._gl.RGB16F;case 5:return this._gl.RGBA16F;default:return this._gl.RGBA16F}case 10:return this._gl.RGB565;case 13:return this._gl.R11F_G11F_B10F;case 14:return this._gl.RGB9_E5;case 8:return this._gl.RGBA4;case 9:return this._gl.RGB5_A1;case 11:switch(t){case 5:return this._gl.RGB10_A2;case 11:return this._gl.RGB10_A2UI;default:return this._gl.RGB10_A2}}return i?this._glSRGBExtensionValues.SRGB8_ALPHA8:this._gl.RGBA8}readPixels(e,t,i,r,s=!0,a=!0,o=null){let l=s?4:3,c=s?this._gl.RGBA:this._gl.RGB,f=i*r*l;if(!o)o=new Uint8Array(f);else if(o.length{Pl();sT=class{constructor(e=30){this._enabled=!0,this._rollingFrameTime=new $I(e)}sampleFrame(e=dr.Now){if(this._enabled){if(this._lastFrameTimeMs!=null){let t=e-this._lastFrameTimeMs;this._rollingFrameTime.add(t)}this._lastFrameTimeMs=e}}get averageFrameTime(){return this._rollingFrameTime.average}get averageFrameTimeVariance(){return this._rollingFrameTime.variance}get instantaneousFrameTime(){return this._rollingFrameTime.history(0)}get averageFPS(){return 1e3/this._rollingFrameTime.average}get instantaneousFPS(){let e=this._rollingFrameTime.history(0);return e===0?0:1e3/e}get isSaturated(){return this._rollingFrameTime.isSaturated()}enable(){this._enabled=!0}disable(){this._enabled=!1,this._lastFrameTimeMs=null}get isEnabled(){return this._enabled}reset(){this._lastFrameTimeMs=null,this._rollingFrameTime.reset()}},$I=class{constructor(e){this._samples=new Array(e),this.reset()}add(e){let t;if(this.isSaturated()){let i=this._samples[this._pos];t=i-this.average,this.average-=t/(this._sampleCount-1),this._m2-=t*(i-this.average)}else this._sampleCount++;t=e-this.average,this.average+=t/this._sampleCount,this._m2+=t*(e-this.average),this.variance=this._m2/(this._sampleCount-1),this._samples[this._pos]=e,this._pos++,this._pos%=this._samples.length}history(e){if(e>=this._sampleCount||e>=this._samples.length)return 0;let t=this._wrapPosition(this._pos-1);return this._samples[this._wrapPosition(t-e)]}isSaturated(){return this._sampleCount>=this._samples.length}reset(){this.average=0,this.variance=0,this._sampleCount=0,this._pos=0,this._m2=0}_wrapPosition(e){let t=this._samples.length;return(e%t+t)%t}}});var d3=C(()=>{hs();bt.prototype.setAlphaMode=function(n,e=!1,t=0){if(this._alphaMode[t]===n){if(!e){let r=n===0;this.depthCullingState.depthMask!==r&&(this.depthCullingState.depthMask=r)}return}let i=n===0;this._alphaState.setAlphaBlend(!i,t),this._alphaState.setAlphaMode(n,t),e||(this.depthCullingState.depthMask=i),this._alphaMode[t]=n}});function u3(n,e,t,i){let r,s=1;i===1?r=new Float32Array(e*t*4):i===2?(r=new Uint16Array(e*t*4),s=15360):i===7?r=new Uint32Array(e*t*4):r=new Uint8Array(e*t*4);for(let a=0;a{Ws();Pt();hs();zo();bt.prototype.updateRawTexture=function(n,e,t,i,r=null,s=0,a=!1){if(!n)return;let o=this._getRGBABufferInternalSizedFormat(s,t,a),l=this._getInternalFormat(t),c=this._getWebGLTextureType(s);this._bindTextureDirectly(this._gl.TEXTURE_2D,n,!0),this._unpackFlipY(i===void 0?!0:!!i),this._doNotHandleContextLost||(n._bufferView=e,n.format=t,n.type=s,n.invertY=i,n._compression=r),n.width%4!==0&&this._gl.pixelStorei(this._gl.UNPACK_ALIGNMENT,1),r&&e?this._gl.compressedTexImage2D(this._gl.TEXTURE_2D,0,this.getCaps().s3tc[r],n.width,n.height,0,e):this._gl.texImage2D(this._gl.TEXTURE_2D,0,o,n.width,n.height,0,l,c,e),n.generateMipMaps&&this._gl.generateMipmap(this._gl.TEXTURE_2D),this._bindTextureDirectly(this._gl.TEXTURE_2D,null),n.isReady=!0};bt.prototype.createRawTexture=function(n,e,t,i,r,s,a,o=null,l=0,c=0,f=!1){let h=new Fi(this,3);h.baseWidth=e,h.baseHeight=t,h.width=e,h.height=t,h.format=i,h.generateMipMaps=r,h.samplingMode=a,h.invertY=s,h._compression=o,h.type=l,h._useSRGBBuffer=this._getUseSRGBBuffer(f,!r),this._doNotHandleContextLost||(h._bufferView=n),this.updateRawTexture(h,n,i,s,o,l,h._useSRGBBuffer),this._bindTextureDirectly(this._gl.TEXTURE_2D,h,!0);let d=this._getSamplingParameters(a,r);return this._gl.texParameteri(this._gl.TEXTURE_2D,this._gl.TEXTURE_MAG_FILTER,d.mag),this._gl.texParameteri(this._gl.TEXTURE_2D,this._gl.TEXTURE_MIN_FILTER,d.min),r&&this._gl.generateMipmap(this._gl.TEXTURE_2D),this._bindTextureDirectly(this._gl.TEXTURE_2D,null),this._internalTexturesCache.push(h),h};bt.prototype.createRawCubeTexture=function(n,e,t,i,r,s,a,o=null){let l=this._gl,c=new Fi(this,8);c.isCube=!0,c.format=t,c.type=i,this._doNotHandleContextLost||(c._bufferViewArray=n);let f=this._getWebGLTextureType(i),h=this._getInternalFormat(t);h===l.RGB&&(h=l.RGBA),f===l.FLOAT&&!this._caps.textureFloatLinearFiltering?(r=!1,a=1,J.Warn("Float texture filtering is not supported. Mipmap generation and sampling mode are forced to false and TEXTURE_NEAREST_SAMPLINGMODE, respectively.")):f===this._gl.HALF_FLOAT_OES&&!this._caps.textureHalfFloatLinearFiltering?(r=!1,a=1,J.Warn("Half float texture filtering is not supported. Mipmap generation and sampling mode are forced to false and TEXTURE_NEAREST_SAMPLINGMODE, respectively.")):f===l.FLOAT&&!this._caps.textureFloatRender?(r=!1,J.Warn("Render to float textures is not supported. Mipmap generation forced to false.")):f===l.HALF_FLOAT&&!this._caps.colorBufferFloat&&(r=!1,J.Warn("Render to half float textures is not supported. Mipmap generation forced to false."));let d=e,u=d;if(c.width=d,c.height=u,c.invertY=s,c._compression=o,!this.needPOTTextures||Rh(c.width)&&Rh(c.height)||(r=!1),n)this.updateRawCubeTexture(c,n,t,i,s,o);else{let p=this._getRGBABufferInternalSizedFormat(i),g=0;this._bindTextureDirectly(l.TEXTURE_CUBE_MAP,c,!0);for(let v=0;v<6;v++)o?l.compressedTexImage2D(l.TEXTURE_CUBE_MAP_POSITIVE_X+v,g,this.getCaps().s3tc[o],c.width,c.height,0,void 0):l.texImage2D(l.TEXTURE_CUBE_MAP_POSITIVE_X+v,g,p,c.width,c.height,0,h,f,null);this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP,null)}this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP,c,!0),n&&r&&this._gl.generateMipmap(this._gl.TEXTURE_CUBE_MAP);let _=this._getSamplingParameters(a,r);return l.texParameteri(l.TEXTURE_CUBE_MAP,l.TEXTURE_MAG_FILTER,_.mag),l.texParameteri(l.TEXTURE_CUBE_MAP,l.TEXTURE_MIN_FILTER,_.min),l.texParameteri(l.TEXTURE_CUBE_MAP,l.TEXTURE_WRAP_S,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_CUBE_MAP,l.TEXTURE_WRAP_T,l.CLAMP_TO_EDGE),this._bindTextureDirectly(l.TEXTURE_CUBE_MAP,null),c.generateMipMaps=r,c.samplingMode=a,c.isReady=!0,c};bt.prototype.updateRawCubeTexture=function(n,e,t,i,r,s=null,a=0){n._bufferViewArray=e,n.format=t,n.type=i,n.invertY=r,n._compression=s;let o=this._gl,l=this._getWebGLTextureType(i),c=this._getInternalFormat(t),f=this._getRGBABufferInternalSizedFormat(i),h=!1;c===o.RGB&&(c=o.RGBA,h=!0),this._bindTextureDirectly(o.TEXTURE_CUBE_MAP,n,!0),this._unpackFlipY(r===void 0?!0:!!r),n.width%4!==0&&o.pixelStorei(o.UNPACK_ALIGNMENT,1);for(let u=0;u<6;u++){let m=e[u];s?o.compressedTexImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+u,a,this.getCaps().s3tc[s],n.width,n.height,0,m):(h&&(m=u3(m,n.width,n.height,i)),o.texImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+u,a,f,n.width,n.height,0,c,l,m))}(!this.needPOTTextures||Rh(n.width)&&Rh(n.height))&&n.generateMipMaps&&a===0&&this._gl.generateMipmap(this._gl.TEXTURE_CUBE_MAP),this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP,null),n.isReady=!0};bt.prototype.createRawCubeTextureFromUrl=function(n,e,t,i,r,s,a,o,l=null,c=null,f=3,h=!1){let d=this._gl,u=this.createRawCubeTexture(null,t,i,r,!s,h,f,null);e==null||e.addPendingData(u),u.url=n,u.isReady=!1,this._internalTexturesCache.push(u);let m=(p,g)=>{e==null||e.removePendingData(u),c&&c(p?p.status+" "+p.statusText:"Failed to parse texture data",g)},_=async p=>{if(!u._hardwareTexture)return;let g=a(p);if(!g)return;let v=g instanceof Promise?await g:g,x=u.width;if(o){let A=this._getWebGLTextureType(r),S=this._getInternalFormat(i),E=this._getRGBABufferInternalSizedFormat(r),R=!1;S===d.RGB&&(S=d.RGBA,R=!0),this._bindTextureDirectly(d.TEXTURE_CUBE_MAP,u,!0),this._unpackFlipY(!1);let I=o(v);for(let y=0;y>y;for(let D=0;D<6;D++){let O=I[y][D];R&&(O=u3(O,M,M,r)),d.texImage2D(D,y,E,M,M,0,S,A,O)}}this._bindTextureDirectly(d.TEXTURE_CUBE_MAP,null)}else this.updateRawCubeTexture(u,v,i,r,h);u.isReady=!0,e==null||e.removePendingData(u),u.onLoadedObservable.notifyObservers(u),u.onLoadedObservable.clear(),l&&l()};return this._loadFile(n,p=>{_(p).catch(g=>{m(void 0,g)})},void 0,e==null?void 0:e.offlineProvider,!0,m),u};bt.prototype.createRawTexture2DArray=m3(!1);bt.prototype.createRawTexture3D=m3(!0);bt.prototype.updateRawTexture2DArray=p3(!1);bt.prototype.updateRawTexture3D=p3(!0)});var g3=C(()=>{hs();$c();bt.prototype._readTexturePixelsSync=function(n,e,t,i=-1,r=0,s=null,a=!0,o=!1,l=0,c=0){var d,u,m;let f=this._gl;if(!f)throw new Error("Engine does not have gl rendering context.");if(!this._dummyFramebuffer){let _=f.createFramebuffer();if(!_)throw new Error("Unable to create dummy framebuffer");this._dummyFramebuffer=_}f.bindFramebuffer(f.FRAMEBUFFER,this._dummyFramebuffer),i>-1&&(n.is2DArray||n.is3D)?f.framebufferTextureLayer(f.FRAMEBUFFER,f.COLOR_ATTACHMENT0,(d=n._hardwareTexture)==null?void 0:d.underlyingResource,r,i):i>-1?f.framebufferTexture2D(f.FRAMEBUFFER,f.COLOR_ATTACHMENT0,f.TEXTURE_CUBE_MAP_POSITIVE_X+i,(u=n._hardwareTexture)==null?void 0:u.underlyingResource,r):f.framebufferTexture2D(f.FRAMEBUFFER,f.COLOR_ATTACHMENT0,f.TEXTURE_2D,(m=n._hardwareTexture)==null?void 0:m.underlyingResource,r);let h=n.type!==void 0?this._getWebGLTextureType(n.type):f.UNSIGNED_BYTE;if(o)s||(s=N1(n.type,4*e*t));else switch(h){case f.UNSIGNED_BYTE:s||(s=new Uint8Array(4*e*t)),h=f.UNSIGNED_BYTE;break;default:s||(s=new Float32Array(4*e*t)),h=f.FLOAT;break}return a&&this.flushFramebuffer(),f.readPixels(l,c,e,t,f.RGBA,h,s),f.bindFramebuffer(f.FRAMEBUFFER,this._currentFramebuffer),s};bt.prototype._readTexturePixels=function(n,e,t,i=-1,r=0,s=null,a=!0,o=!1,l=0,c=0){return Promise.resolve(this._readTexturePixelsSync(n,e,t,i,r,s,a,o,l,c))}});var v3=C(()=>{hs();bt.prototype.updateDynamicIndexBuffer=function(n,e,t=0){this._currentBoundBuffer[this._gl.ELEMENT_ARRAY_BUFFER]=null,this.bindIndexBuffer(n);let i;n.is32Bits?i=e instanceof Uint32Array?e:new Uint32Array(e):i=e instanceof Uint16Array?e:new Uint16Array(e),this._gl.bufferData(this._gl.ELEMENT_ARRAY_BUFFER,i,this._gl.DYNAMIC_DRAW),this._resetIndexBufferBinding()};bt.prototype.updateDynamicVertexBuffer=function(n,e,t,i){this.bindArrayBuffer(n),t===void 0&&(t=0);let r=e.byteLength||e.length;i===void 0||i>=r&&t===0?e instanceof Array?this._gl.bufferSubData(this._gl.ARRAY_BUFFER,t,new Float32Array(e)):this._gl.bufferSubData(this._gl.ARRAY_BUFFER,t,e):e instanceof Array?this._gl.bufferSubData(this._gl.ARRAY_BUFFER,t,new Float32Array(e).subarray(0,i/4)):(ArrayBuffer.isView(e)?e=new Uint8Array(e.buffer,e.byteOffset,i):e=new Uint8Array(e,0,i),this._gl.bufferSubData(this._gl.ARRAY_BUFFER,t,e)),this._resetVertexBufferBinding()}});var E3=C(()=>{hs();Ws();Pt();zo();bt.prototype._createDepthStencilCubeTexture=function(n,e){let t=new Fi(this,12);if(t.isCube=!0,this.webGLVersion===1)return J.Error("Depth cube texture is not supported by WebGL 1."),t;let i={bilinearFiltering:!1,comparisonFunction:0,generateStencil:!1,...e},r=this._gl;this._bindTextureDirectly(r.TEXTURE_CUBE_MAP,t,!0),this._setupDepthStencilTexture(t,n,i.bilinearFiltering,i.comparisonFunction);for(let s=0;s<6;s++)i.generateStencil?r.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+s,0,r.DEPTH24_STENCIL8,n,n,0,r.DEPTH_STENCIL,r.UNSIGNED_INT_24_8,null):r.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+s,0,r.DEPTH_COMPONENT24,n,n,0,r.DEPTH_COMPONENT,r.UNSIGNED_INT,null);return this._bindTextureDirectly(r.TEXTURE_CUBE_MAP,null),this._internalTexturesCache.push(t),t};bt.prototype._setCubeMapTextureParams=function(n,e,t){let i=this._gl;i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_MIN_FILTER,e?i.LINEAR_MIPMAP_LINEAR:i.LINEAR),i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),n.samplingMode=e?3:2,e&&this.getCaps().textureMaxLevel&&t!==void 0&&t>0&&(i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_MAX_LEVEL,t),n._maxLodLevel=t),this._bindTextureDirectly(i.TEXTURE_CUBE_MAP,null)};bt.prototype.createCubeTexture=function(n,e,t,i,r=null,s=null,a,o=null,l=!1,c=0,f=0,h=null,d,u=!1,m=null){let _=this._gl;return this.createCubeTextureBase(n,e,t,!!i,r,s,a,o,l,c,f,h,p=>this._bindTextureDirectly(_.TEXTURE_CUBE_MAP,p,!0),(p,g)=>{let v=this.needPOTTextures?fs(g[0].width,this._caps.maxCubemapTextureSize):g[0].width,x=v,A=[_.TEXTURE_CUBE_MAP_POSITIVE_X,_.TEXTURE_CUBE_MAP_POSITIVE_Y,_.TEXTURE_CUBE_MAP_POSITIVE_Z,_.TEXTURE_CUBE_MAP_NEGATIVE_X,_.TEXTURE_CUBE_MAP_NEGATIVE_Y,_.TEXTURE_CUBE_MAP_NEGATIVE_Z];this._bindTextureDirectly(_.TEXTURE_CUBE_MAP,p,!0),this._unpackFlipY(!1);let S=a?this._getInternalFormat(a,p._useSRGBBuffer):p._useSRGBBuffer?this._glSRGBExtensionValues.SRGB8_ALPHA8:_.RGBA,E=a?this._getInternalFormat(a):_.RGBA;p._useSRGBBuffer&&this.webGLVersion===1&&(E=S);for(let R=0;R{p_();aT=class{get depthStencilTexture(){return this._depthStencilTexture}setDepthStencilTexture(e,t=!0){t&&this._depthStencilTexture&&this._depthStencilTexture.dispose(),this._depthStencilTexture=e,this._generateDepthBuffer=this._generateStencilBuffer=this._depthStencilTextureWithStencil=!1,e&&(this._generateDepthBuffer=!0,this._generateStencilBuffer=this._depthStencilTextureWithStencil=Dl(e.format))}get depthStencilTextureWithStencil(){return this._depthStencilTextureWithStencil}get isCube(){return this._isCube}get isMulti(){return this._isMulti}get is2DArray(){return this.layers>0}get is3D(){return this.depth>0}get size(){return this.width}get width(){var e;return(e=this._size.width)!=null?e:this._size}get height(){var e;return(e=this._size.height)!=null?e:this._size}get layers(){return this._size.layers||0}get depth(){return this._size.depth||0}get texture(){var e,t;return(t=(e=this._textures)==null?void 0:e[0])!=null?t:null}get textures(){return this._textures}get faceIndices(){return this._faceIndices}get layerIndices(){return this._layerIndices}getBaseArrayLayer(e){var s,a,o,l;if(!this._textures)return-1;let t=this._textures[e],i=(a=(s=this._layerIndices)==null?void 0:s[e])!=null?a:0,r=(l=(o=this._faceIndices)==null?void 0:o[e])!=null?l:0;return t.isCube?i*6+r:t.is3D?0:i}get samples(){return this._samples}setSamples(e,t=!0,i=!1){if(this.samples===e&&!i)return e;let r=this._isMulti?this._engine.updateMultipleRenderTargetTextureSampleCount(this,e,t):this._engine.updateRenderTargetTextureSampleCount(this,e);return this._samples=e,r}resolveMSAATextures(){this.isMulti?this._engine.resolveMultiFramebuffer(this):this._engine.resolveFramebuffer(this)}generateMipMaps(){this._engine._currentRenderTarget===this&&(this.isMulti?this._engine.unBindMultiColorAttachmentFramebuffer(this,!0):this._engine.unBindFramebuffer(this,!0)),this.isMulti?this._engine.generateMipMapsMultiFramebuffer(this):this._engine.generateMipMapsFramebuffer(this)}constructor(e,t,i,r,s){this._textures=null,this._faceIndices=null,this._layerIndices=null,this._samples=1,this._attachments=null,this._generateStencilBuffer=!1,this._generateDepthBuffer=!1,this._depthStencilTextureWithStencil=!1,this.disableAutomaticMSAAResolve=!1,this.resolveMSAAColors=!0,this.resolveMSAADepth=!1,this.resolveMSAAStencil=!1,this.depthReadOnly=!1,this.stencilReadOnly=!1,this._isMulti=e,this._isCube=t,this._size=i,this._engine=r,this._depthStencilTexture=null,this.label=s}setTextures(e){Array.isArray(e)?this._textures=e:e?this._textures=[e]:this._textures=null}setTexture(e,t=0,i=!0){this._textures||(this._textures=[]),this._textures[t]!==e&&(this._textures[t]&&i&&this._textures[t].dispose(),this._textures[t]=e)}setLayerAndFaceIndices(e,t){this._layerIndices=e,this._faceIndices=t}setLayerAndFaceIndex(e=0,t,i){this._layerIndices||(this._layerIndices=[]),this._faceIndices||(this._faceIndices=[]),t!==void 0&&t>=0&&(this._layerIndices[e]=t),i!==void 0&&i>=0&&(this._faceIndices[e]=i)}createDepthStencilTexture(e=0,t=!0,i=!1,r=1,s=14,a){var o;return(o=this._depthStencilTexture)==null||o.dispose(),this._depthStencilTextureWithStencil=i,this._depthStencilTextureLabel=a,this._depthStencilTexture=this._engine.createDepthStencilTexture(this._size,{bilinearFiltering:t,comparisonFunction:e,generateStencil:i,isCube:this._isCube,samples:r,depthTextureFormat:s,label:a},this),this._depthStencilTexture}_shareDepth(e){this.shareDepth(e)}shareDepth(e){this._depthStencilTexture&&(e._depthStencilTexture&&e._depthStencilTexture.dispose(),e._depthStencilTexture=this._depthStencilTexture,e._depthStencilTextureWithStencil=this._depthStencilTextureWithStencil,this._depthStencilTexture.incrementReferences())}_swapAndDie(e){this.texture&&this.texture._swapAndDie(e),this._textures=null,this.dispose(!0)}_cloneRenderTargetWrapper(){var t,i,r,s,a,o,l,c;let e=null;if(this._isMulti){let f=this.textures;if(f&&f.length>0){let h=!1,d=f.length,u=-1,m=f[f.length-1]._source;(m===14||m===12)&&(h=!0,u=f[f.length-1].format,d--);let _=[],p=[],g=[],v=[],x=[],A=[],S=[],E={};for(let y=0;y1&&e.setSamples(this.samples),e._swapRenderTargetWrapper(this),e.dispose()}}releaseTextures(){if(this._textures)for(let e=0;e{S3();p_();oT=class extends aT{setDepthStencilTexture(e,t=!0){if(super.setDepthStencilTexture(e,t),!e)return;let i=this._engine,r=this._context,s=e._hardwareTexture;if(s&&e._autoMSAAManagement&&this._MSAAFramebuffer){let a=i._currentFramebuffer;i._bindUnboundFramebuffer(this._MSAAFramebuffer),r.framebufferRenderbuffer(r.FRAMEBUFFER,Dl(e.format)?r.DEPTH_STENCIL_ATTACHMENT:r.DEPTH_ATTACHMENT,r.RENDERBUFFER,s.getMSAARenderBuffer()),i._bindUnboundFramebuffer(a)}}constructor(e,t,i,r,s){super(e,t,i,r),this._framebuffer=null,this._depthStencilBuffer=null,this._MSAAFramebuffer=null,this._colorTextureArray=null,this._depthStencilTextureArray=null,this._disposeOnlyFramebuffers=!1,this._currentLOD=0,this._context=s}_cloneRenderTargetWrapper(){let e;return this._colorTextureArray&&this._depthStencilTextureArray?(e=this._engine.createMultiviewRenderTargetTexture(this.width,this.height),e.texture.isReady=!0):e=super._cloneRenderTargetWrapper(),e}_swapRenderTargetWrapper(e){super._swapRenderTargetWrapper(e),e._framebuffer=this._framebuffer,e._depthStencilBuffer=this._depthStencilBuffer,e._MSAAFramebuffer=this._MSAAFramebuffer,e._colorTextureArray=this._colorTextureArray,e._depthStencilTextureArray=this._depthStencilTextureArray,this._framebuffer=this._depthStencilBuffer=this._MSAAFramebuffer=this._colorTextureArray=this._depthStencilTextureArray=null}createDepthStencilTexture(e=0,t=!0,i=!1,r=1,s=14,a){if(this._depthStencilBuffer){let o=this._engine,l=o._currentFramebuffer,c=this._context;o._bindUnboundFramebuffer(this._framebuffer),c.framebufferRenderbuffer(c.FRAMEBUFFER,c.DEPTH_STENCIL_ATTACHMENT,c.RENDERBUFFER,null),c.framebufferRenderbuffer(c.FRAMEBUFFER,c.DEPTH_ATTACHMENT,c.RENDERBUFFER,null),c.framebufferRenderbuffer(c.FRAMEBUFFER,c.STENCIL_ATTACHMENT,c.RENDERBUFFER,null),o._bindUnboundFramebuffer(l),c.deleteRenderbuffer(this._depthStencilBuffer),this._depthStencilBuffer=null}return super.createDepthStencilTexture(e,t,i,r,s,a)}shareDepth(e){super.shareDepth(e);let t=this._context,i=this._depthStencilBuffer,r=e._MSAAFramebuffer||e._framebuffer,s=this._engine;e._depthStencilBuffer&&e._depthStencilBuffer!==i&&t.deleteRenderbuffer(e._depthStencilBuffer),e._depthStencilBuffer=i;let a=e._generateStencilBuffer?t.DEPTH_STENCIL_ATTACHMENT:t.DEPTH_ATTACHMENT;s._bindUnboundFramebuffer(r),t.framebufferRenderbuffer(t.FRAMEBUFFER,a,t.RENDERBUFFER,i),s._bindUnboundFramebuffer(null)}_bindTextureRenderTarget(e,t=0,i,r=0){var f,h,d,u;let s=e._hardwareTexture;if(!s)return;let a=this._framebuffer,o=this._engine,l=o._currentFramebuffer;o._bindUnboundFramebuffer(a);let c;if(o.webGLVersion>1){let m=this._context;c=m["COLOR_ATTACHMENT"+t],e.is2DArray||e.is3D?(i=(h=i!=null?i:(f=this.layerIndices)==null?void 0:f[t])!=null?h:0,m.framebufferTextureLayer(m.FRAMEBUFFER,c,s.underlyingResource,r,i)):e.isCube?(i=(u=i!=null?i:(d=this.faceIndices)==null?void 0:d[t])!=null?u:0,m.framebufferTexture2D(m.FRAMEBUFFER,c,m.TEXTURE_CUBE_MAP_POSITIVE_X+i,s.underlyingResource,r)):m.framebufferTexture2D(m.FRAMEBUFFER,c,m.TEXTURE_2D,s.underlyingResource,r)}else{let m=this._context;c=m["COLOR_ATTACHMENT"+t+"_WEBGL"];let _=i!==void 0?m.TEXTURE_CUBE_MAP_POSITIVE_X+i:m.TEXTURE_2D;m.framebufferTexture2D(m.FRAMEBUFFER,c,_,s.underlyingResource,r)}if(e._autoMSAAManagement&&this._MSAAFramebuffer){let m=this._context;o._bindUnboundFramebuffer(this._MSAAFramebuffer),m.framebufferRenderbuffer(m.FRAMEBUFFER,c,m.RENDERBUFFER,s.getMSAARenderBuffer())}o._bindUnboundFramebuffer(l)}setTexture(e,t=0,i=!0){super.setTexture(e,t,i),this._bindTextureRenderTarget(e,t)}setLayerAndFaceIndices(e,t){var r,s;if(super.setLayerAndFaceIndices(e,t),!this.textures||!this.layerIndices||!this.faceIndices)return;let i=(s=(r=this._attachments)==null?void 0:r.length)!=null?s:this.textures.length;for(let a=0;a{Lr();Re.prototype.createDepthStencilTexture=function(n,e,t){if(e.isCube){let i=n.width||n;return this._createDepthStencilCubeTexture(i,e)}else return this._createDepthStencilTexture(n,e,t)}});var A3=C(()=>{Ws();Pt();hs();T3();p_();JI();bt.prototype._createHardwareRenderTargetWrapper=function(n,e,t){let i=new oT(n,e,t,this,this._gl);return this._renderTargetWrapperCache.push(i),i};bt.prototype.createRenderTargetTexture=function(n,e){var _,p;let t=this._createHardwareRenderTargetWrapper(!1,!1,n),i=!0,r=!1,s=!1,a,o=1,l;e!==void 0&&typeof e=="object"&&(i=(_=e.generateDepthBuffer)!=null?_:!0,r=!!e.generateStencilBuffer,s=!!e.noColorAttachment,a=e.colorAttachment,o=(p=e.samples)!=null?p:1,l=e.label);let c=a||(s?null:this._createInternalTexture(n,e,!0,5)),f=n.width||n,h=n.height||n,d=this._currentFramebuffer,u=this._gl,m=u.createFramebuffer();if(this._bindUnboundFramebuffer(m),t._depthStencilBuffer=this._setupFramebufferDepthAttachments(r,i,f,h),c&&!c.is2DArray&&!c.is3D&&u.framebufferTexture2D(u.FRAMEBUFFER,u.COLOR_ATTACHMENT0,u.TEXTURE_2D,c._hardwareTexture.underlyingResource,0),this._bindUnboundFramebuffer(d),t.label=l!=null?l:"RenderTargetWrapper",t._framebuffer=m,t._generateDepthBuffer=i,t._generateStencilBuffer=r,t.setTextures(c),!a)this.updateRenderTargetTextureSampleCount(t,o);else if(t._samples=a.samples,a.samples>1){let g=a._hardwareTexture.getMSAARenderBuffer(0);t._MSAAFramebuffer=u.createFramebuffer(),this._bindUnboundFramebuffer(t._MSAAFramebuffer),u.framebufferRenderbuffer(u.FRAMEBUFFER,u.COLOR_ATTACHMENT0,u.RENDERBUFFER,g),this._bindUnboundFramebuffer(null)}return t};bt.prototype._createDepthStencilTexture=function(n,e,t){var u;let i=this._gl,r=n.layers||0,s=n.depth||0,a=i.TEXTURE_2D;r!==0?a=i.TEXTURE_2D_ARRAY:s!==0&&(a=i.TEXTURE_3D);let o=new Fi(this,12);if(o.label=e.label,!this._caps.depthTextureExtension)return J.Error("Depth texture is not supported by your browser or hardware."),o;let l={bilinearFiltering:!1,comparisonFunction:0,generateStencil:!1,...e};if(this._bindTextureDirectly(a,o,!0),this._setupDepthStencilTexture(o,n,l.comparisonFunction===0?!1:l.bilinearFiltering,l.comparisonFunction,l.samples),l.depthTextureFormat!==void 0){if(l.depthTextureFormat!==15&&l.depthTextureFormat!==16&&l.depthTextureFormat!==17&&l.depthTextureFormat!==13&&l.depthTextureFormat!==14&&l.depthTextureFormat!==18)return J.Error(`Depth texture ${l.depthTextureFormat} format is not supported.`),o;o.format=l.depthTextureFormat}else o.format=l.generateStencil?13:16;let c=Dl(o.format),f=this._getWebGLTextureTypeFromDepthTextureFormat(o.format),h=c?i.DEPTH_STENCIL:i.DEPTH_COMPONENT,d=this._getInternalFormatFromDepthTextureFormat(o.format,!0,c);return o.is2DArray?i.texImage3D(a,0,d,o.width,o.height,r,0,h,f,null):o.is3D?i.texImage3D(a,0,d,o.width,o.height,s,0,h,f,null):i.texImage2D(a,0,d,o.width,o.height,0,h,f,null),this._bindTextureDirectly(a,null),this._internalTexturesCache.push(o),t._depthStencilBuffer&&(i.deleteRenderbuffer(t._depthStencilBuffer),t._depthStencilBuffer=null),this._bindUnboundFramebuffer((u=t._MSAAFramebuffer)!=null?u:t._framebuffer),t._generateStencilBuffer=c,t._depthStencilTextureWithStencil=c,t._depthStencilBuffer=this._setupFramebufferDepthAttachments(t._generateStencilBuffer,t._generateDepthBuffer,t.width,t.height,t.samples,o.format),this._bindUnboundFramebuffer(null),o};bt.prototype.updateRenderTargetTextureSampleCount=function(n,e){var s,a;if(this.webGLVersion<2||!n)return 1;if(n.samples===e)return e;let t=this._gl;e=Math.min(e,this.getCaps().maxMSAASamples),n._depthStencilBuffer&&(t.deleteRenderbuffer(n._depthStencilBuffer),n._depthStencilBuffer=null),n._MSAAFramebuffer&&(t.deleteFramebuffer(n._MSAAFramebuffer),n._MSAAFramebuffer=null);let i=(s=n.texture)==null?void 0:s._hardwareTexture;if(i==null||i.releaseMSAARenderBuffers(),n.texture&&e>1&&typeof t.renderbufferStorageMultisample=="function"){let o=t.createFramebuffer();if(!o)throw new Error("Unable to create multi sampled framebuffer");n._MSAAFramebuffer=o,this._bindUnboundFramebuffer(n._MSAAFramebuffer);let l=this._createRenderBuffer(n.texture.width,n.texture.height,e,-1,this._getRGBABufferInternalSizedFormat(n.texture.type,n.texture.format,n.texture._useSRGBBuffer),t.COLOR_ATTACHMENT0,!1);if(!l)throw new Error("Unable to create multi sampled framebuffer");i==null||i.addMSAARenderBuffer(l)}this._bindUnboundFramebuffer((a=n._MSAAFramebuffer)!=null?a:n._framebuffer),n.texture&&(n.texture.samples=e),n._samples=e;let r=n._depthStencilTexture?n._depthStencilTexture.format:void 0;return n._depthStencilBuffer=this._setupFramebufferDepthAttachments(n._generateStencilBuffer,n._generateDepthBuffer,n.width,n.height,e,r),this._bindUnboundFramebuffer(null),e};bt.prototype._setupDepthStencilTexture=function(n,e,t,i,r=1){var d,u;let s=(d=e.width)!=null?d:e,a=(u=e.height)!=null?u:e,o=e.layers||0,l=e.depth||0;n.baseWidth=s,n.baseHeight=a,n.width=s,n.height=a,n.is2DArray=o>0,n.depth=o||l,n.isReady=!0,n.samples=r,n.generateMipMaps=!1,n.samplingMode=t?2:1,n.type=0,n._comparisonFunction=i;let c=this._gl,f=this._getTextureTarget(n),h=this._getSamplingParameters(n.samplingMode,!1);c.texParameteri(f,c.TEXTURE_MAG_FILTER,h.mag),c.texParameteri(f,c.TEXTURE_MIN_FILTER,h.min),c.texParameteri(f,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(f,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE),this.webGLVersion>1&&(i===0?(c.texParameteri(f,c.TEXTURE_COMPARE_FUNC,515),c.texParameteri(f,c.TEXTURE_COMPARE_MODE,c.NONE)):(c.texParameteri(f,c.TEXTURE_COMPARE_FUNC,i),c.texParameteri(f,c.TEXTURE_COMPARE_MODE,c.COMPARE_REF_TO_TEXTURE)))}});var x3=C(()=>{hs();bt.prototype.setDepthStencilTexture=function(n,e,t,i){n!==void 0&&(e&&(this._boundUniforms[n]=e),!t||!t.depthStencilTexture?this._setTexture(n,null,void 0,void 0,i):this._setTexture(n,t,!1,!0,i))}});var R3=C(()=>{Ws();Pt();hs();bt.prototype.createRenderTargetCubeTexture=function(n,e){let t=this._createHardwareRenderTargetWrapper(!1,!0,n),i={generateMipMaps:!0,generateDepthBuffer:!0,generateStencilBuffer:!1,type:0,samplingMode:3,format:5,...e};i.generateStencilBuffer=i.generateDepthBuffer&&i.generateStencilBuffer,(i.type===1&&!this._caps.textureFloatLinearFiltering||i.type===2&&!this._caps.textureHalfFloatLinearFiltering)&&(i.samplingMode=1);let r=this._gl,s=new Fi(this,5);this._bindTextureDirectly(r.TEXTURE_CUBE_MAP,s,!0);let a=this._getSamplingParameters(i.samplingMode,i.generateMipMaps);i.type===1&&!this._caps.textureFloat&&(i.type=0,J.Warn("Float textures are not supported. Cube render target forced to TEXTURETYPE_UNESIGNED_BYTE type")),r.texParameteri(r.TEXTURE_CUBE_MAP,r.TEXTURE_MAG_FILTER,a.mag),r.texParameteri(r.TEXTURE_CUBE_MAP,r.TEXTURE_MIN_FILTER,a.min),r.texParameteri(r.TEXTURE_CUBE_MAP,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_CUBE_MAP,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE);for(let l=0;l<6;l++)r.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+l,0,this._getRGBABufferInternalSizedFormat(i.type,i.format),n,n,0,this._getInternalFormat(i.format),this._getWebGLTextureType(i.type),null);let o=r.createFramebuffer();return this._bindUnboundFramebuffer(o),t._depthStencilBuffer=this._setupFramebufferDepthAttachments(i.generateStencilBuffer,i.generateDepthBuffer,n,n),i.generateMipMaps&&r.generateMipmap(r.TEXTURE_CUBE_MAP),this._bindTextureDirectly(r.TEXTURE_CUBE_MAP,null),this._bindUnboundFramebuffer(null),t._framebuffer=o,t._generateDepthBuffer=i.generateDepthBuffer,t._generateStencilBuffer=i.generateStencilBuffer,s.width=n,s.height=n,s.isReady=!0,s.isCube=!0,s.samples=1,s.generateMipMaps=i.generateMipMaps,s.samplingMode=i.samplingMode,s.type=i.type,s.format=i.format,this._internalTexturesCache.push(s),t.setTextures(s),t}});var b3,Cu,ur,Nt,An=C(()=>{b3=.45454545454545453,Cu=2.2,ur=(1+Math.sqrt(5))/2,Nt=.001});function cn(n,e){let t=[];for(let i=0;i{let s=r.previous;if(!s)return;let a=r.next;a?(s.next=a,a.previous=s):(s.next=void 0,n[e]=s),r.next=void 0,r.previous=void 0}}function lT(n,e){let t=Sie.map(i=>Eie(n,i,e));return()=>{for(let i of t)i==null||i()}}var Sie,Xo=C(()=>{Sie=["push","splice","pop","shift","unshift"]});function Ft(n,e){I3[n]=e}function mn(n){return I3[n]}var I3,Vi=C(()=>{I3={}});function Ei(n,e,t=1401298e-51){return Math.abs(n-e)<=t}function Ji(n,e){return n===e?n:Math.random()*(e-n)+n}function qa(n,e,t){return n+(e-n)*t}function M3(n,e,t,i,r){let s=r*r,a=r*s,o=2*a-3*s+1,l=-2*a+3*s,c=a-2*s+r,f=a-s;return n*o+t*l+e*c+i*f}function wt(n,e=0,t=1){return Math.min(t,Math.max(e,n))}function C3(n){return n-=Math.PI*2*Math.floor((n+Math.PI)/(Math.PI*2)),n}function Za(n){let e=n.toString(16);return n<=15?("0"+e).toUpperCase():e.toUpperCase()}function y3(n){if(Math.log2)return Math.floor(Math.log2(n));if(n<0)return NaN;if(n===0)return-1/0;let e=0;if(n<1){for(;n<1;)e++,n=n*2;e=-e}else if(n>1)for(;n>1;)e++,n=Math.floor(n/2);return e}function cT(n,e){let t=n%e;return t===0?e:cT(e,t)}var xn=C(()=>{});function P3(n){n.updateFlag=yu._UpdateFlagSeed++}function eM(n,e,t,i=0){let r=n.asArray(),s=e.asArray(),a=r[0],o=r[1],l=r[2],c=r[3],f=r[4],h=r[5],d=r[6],u=r[7],m=r[8],_=r[9],p=r[10],g=r[11],v=r[12],x=r[13],A=r[14],S=r[15],E=s[0],R=s[1],I=s[2],y=s[3],M=s[4],D=s[5],O=s[6],V=s[7],N=s[8],F=s[9],U=s[10],W=s[11],$=s[12],q=s[13],Z=s[14],X=s[15];t[i]=a*E+o*M+l*N+c*$,t[i+1]=a*R+o*D+l*F+c*q,t[i+2]=a*I+o*O+l*U+c*Z,t[i+3]=a*y+o*V+l*W+c*X,t[i+4]=f*E+h*M+d*N+u*$,t[i+5]=f*R+h*D+d*F+u*q,t[i+6]=f*I+h*O+d*U+u*Z,t[i+7]=f*y+h*V+d*W+u*X,t[i+8]=m*E+_*M+p*N+g*$,t[i+9]=m*R+_*D+p*F+g*q,t[i+10]=m*I+_*O+p*U+g*Z,t[i+11]=m*y+_*V+p*W+g*X,t[i+12]=v*E+x*M+A*N+S*$,t[i+13]=v*R+x*D+A*F+S*q,t[i+14]=v*I+x*O+A*U+S*Z,t[i+15]=v*y+x*V+A*W+S*X}function bh(n,e,t,i=0){eM(n,e,t.asArray(),i),P3(t)}function D3(n,e,t=0){let i=n.asArray();e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e[t+9]=i[9],e[t+10]=i[10],e[t+11]=i[11],e[t+12]=i[12],e[t+13]=i[13],e[t+14]=i[14],e[t+15]=i[15]}function __(n,e){let t=tM(n,e.asArray());return t&&P3(e),t}function tM(n,e){let t=n.asArray(),i=t[0],r=t[1],s=t[2],a=t[3],o=t[4],l=t[5],c=t[6],f=t[7],h=t[8],d=t[9],u=t[10],m=t[11],_=t[12],p=t[13],g=t[14],v=t[15],x=u*v-g*m,A=d*v-p*m,S=d*g-p*u,E=h*v-_*m,R=h*g-u*_,I=h*p-_*d,y=+(l*x-c*A+f*S),M=-(o*x-c*E+f*R),D=+(o*A-l*E+f*I),O=-(o*S-l*R+c*I),V=i*y+r*M+s*D+a*O;if(V===0)return!1;let N=1/V,F=c*v-g*f,U=l*v-p*f,W=l*g-p*c,$=o*v-_*f,q=o*g-_*c,Z=o*p-_*l,X=c*m-u*f,Y=l*m-d*f,fe=l*u-d*c,xe=o*m-h*f,Fe=o*u-h*c,se=o*d-h*l,pe=-(r*x-s*A+a*S),ie=+(i*x-s*E+a*R),_e=-(i*A-r*E+a*I),Pe=+(i*S-r*R+s*I),ue=+(r*F-s*U+a*W),be=-(i*F-s*$+a*q),Ze=+(i*U-r*$+a*Z),Tt=-(i*W-r*q+s*Z),Ye=-(r*X-s*Y+a*fe),Ke=+(i*X-s*xe+a*Fe),he=-(i*Y-r*xe+a*se),we=+(i*fe-r*Fe+s*se);return e[0]=y*N,e[1]=pe*N,e[2]=ue*N,e[3]=Ye*N,e[4]=M*N,e[5]=ie*N,e[6]=be*N,e[7]=Ke*N,e[8]=D*N,e[9]=_e*N,e[10]=Ze*N,e[11]=he*N,e[12]=O*N,e[13]=Pe*N,e[14]=Tt*N,e[15]=we*N,!0}var yu,iM=C(()=>{yu=class{};yu._UpdateFlagSeed=0});var kn,Ne,b,Mi,ze,K,We,Q,Ih,Ge=C(()=>{An();Xo();Vi();zI();Pi();xn();iM();kn=n=>parseInt(n.toString().replace(/\W/g,"")),Ne=class n{constructor(e=0,t=0){this.x=e,this.y=t}toString(){return`{X: ${this.x} Y: ${this.y}}`}getClassName(){return"Vector2"}getHashCode(){let e=kn(this.x),t=kn(this.y),i=e;return i=i*397^t,i}toArray(e,t=0){return e[t]=this.x,e[t+1]=this.y,this}fromArray(e,t=0){return n.FromArrayToRef(e,t,this),this}asArray(){return[this.x,this.y]}copyFrom(e){return this.x=e.x,this.y=e.y,this}copyFromFloats(e,t){return this.x=e,this.y=t,this}set(e,t){return this.copyFromFloats(e,t)}setAll(e){return this.copyFromFloats(e,e)}add(e){return new n(this.x+e.x,this.y+e.y)}addToRef(e,t){return t.x=this.x+e.x,t.y=this.y+e.y,t}addInPlace(e){return this.x+=e.x,this.y+=e.y,this}addInPlaceFromFloats(e,t){return this.x+=e,this.y+=t,this}addVector3(e){return new n(this.x+e.x,this.y+e.y)}subtract(e){return new n(this.x-e.x,this.y-e.y)}subtractToRef(e,t){return t.x=this.x-e.x,t.y=this.y-e.y,t}subtractInPlace(e){return this.x-=e.x,this.y-=e.y,this}multiplyInPlace(e){return this.x*=e.x,this.y*=e.y,this}multiply(e){return new n(this.x*e.x,this.y*e.y)}multiplyToRef(e,t){return t.x=this.x*e.x,t.y=this.y*e.y,t}multiplyByFloats(e,t){return new n(this.x*e,this.y*t)}divide(e){return new n(this.x/e.x,this.y/e.y)}divideToRef(e,t){return t.x=this.x/e.x,t.y=this.y/e.y,t}divideInPlace(e){return this.x=this.x/e.x,this.y=this.y/e.y,this}minimizeInPlace(e){return this.minimizeInPlaceFromFloats(e.x,e.y)}maximizeInPlace(e){return this.maximizeInPlaceFromFloats(e.x,e.y)}minimizeInPlaceFromFloats(e,t){return this.x=Math.min(e,this.x),this.y=Math.min(t,this.y),this}maximizeInPlaceFromFloats(e,t){return this.x=Math.max(e,this.x),this.y=Math.max(t,this.y),this}subtractFromFloats(e,t){return new n(this.x-e,this.y-t)}subtractFromFloatsToRef(e,t,i){return i.x=this.x-e,i.y=this.y-t,i}negate(){return new n(-this.x,-this.y)}negateInPlace(){return this.x*=-1,this.y*=-1,this}negateToRef(e){return e.x=-this.x,e.y=-this.y,e}scaleInPlace(e){return this.x*=e,this.y*=e,this}scale(e){return new n(this.x*e,this.y*e)}scaleToRef(e,t){return t.x=this.x*e,t.y=this.y*e,t}scaleAndAddToRef(e,t){return t.x+=this.x*e,t.y+=this.y*e,t}equals(e){return e&&this.x===e.x&&this.y===e.y}equalsWithEpsilon(e,t=Nt){return e&&Ei(this.x,e.x,t)&&Ei(this.y,e.y,t)}equalsToFloats(e,t){return this.x===e&&this.y===t}floor(){return new n(Math.floor(this.x),Math.floor(this.y))}floorToRef(e){return e.x=Math.floor(this.x),e.y=Math.floor(this.y),e}fract(){return new n(this.x-Math.floor(this.x),this.y-Math.floor(this.y))}fractToRef(e){return e.x=this.x-Math.floor(this.x),e.y=this.y-Math.floor(this.y),e}rotate(e){return this.rotateToRef(e,new n)}rotateToRef(e,t){let i=Math.cos(e),r=Math.sin(e);return t.x=i*this.x-r*this.y,t.y=r*this.x+i*this.y,t}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}lengthSquared(){return this.x*this.x+this.y*this.y}normalize(){return this.normalizeFromLength(this.length())}normalizeFromLength(e){return e===0||e===1?this:this.scaleInPlace(1/e)}normalizeToNew(){let e=new n;return this.normalizeToRef(e),e}normalizeToRef(e){let t=this.length();return t===0&&(e.x=this.x,e.y=this.y),this.scaleToRef(1/t,e)}clone(){return new n(this.x,this.y)}dot(e){return this.x*e.x+this.y*e.y}static Zero(){return new n(0,0)}static One(){return new n(1,1)}static Random(e=0,t=1){return new n(Ji(e,t),Ji(e,t))}static RandomToRef(e=0,t=1,i){return i.copyFromFloats(Ji(e,t),Ji(e,t))}static get ZeroReadOnly(){return n._ZeroReadOnly}static FromArray(e,t=0){return new n(e[t],e[t+1])}static FromArrayToRef(e,t,i){return i.x=e[t],i.y=e[t+1],i}static FromFloatsToRef(e,t,i){return i.copyFromFloats(e,t),i}static CatmullRom(e,t,i,r,s){let a=s*s,o=s*a,l=.5*(2*t.x+(-e.x+i.x)*s+(2*e.x-5*t.x+4*i.x-r.x)*a+(-e.x+3*t.x-3*i.x+r.x)*o),c=.5*(2*t.y+(-e.y+i.y)*s+(2*e.y-5*t.y+4*i.y-r.y)*a+(-e.y+3*t.y-3*i.y+r.y)*o);return new n(l,c)}static ClampToRef(e,t,i,r){return r.x=wt(e.x,t.x,i.x),r.y=wt(e.y,t.y,i.y),r}static Clamp(e,t,i){let r=wt(e.x,t.x,i.x),s=wt(e.y,t.y,i.y);return new n(r,s)}static Hermite(e,t,i,r,s){let a=s*s,o=s*a,l=2*o-3*a+1,c=-2*o+3*a,f=o-2*a+s,h=o-a,d=e.x*l+i.x*c+t.x*f+r.x*h,u=e.y*l+i.y*c+t.y*f+r.y*h;return new n(d,u)}static Hermite1stDerivative(e,t,i,r,s){return this.Hermite1stDerivativeToRef(e,t,i,r,s,new n)}static Hermite1stDerivativeToRef(e,t,i,r,s,a){let o=s*s;return a.x=(o-s)*6*e.x+(3*o-4*s+1)*t.x+(-o+s)*6*i.x+(3*o-2*s)*r.x,a.y=(o-s)*6*e.y+(3*o-4*s+1)*t.y+(-o+s)*6*i.y+(3*o-2*s)*r.y,a}static Lerp(e,t,i){return n.LerpToRef(e,t,i,new n)}static LerpToRef(e,t,i,r){return r.x=e.x+(t.x-e.x)*i,r.y=e.y+(t.y-e.y)*i,r}static Dot(e,t){return e.x*t.x+e.y*t.y}static Normalize(e){return n.NormalizeToRef(e,new n)}static NormalizeToRef(e,t){return e.normalizeToRef(t),t}static Minimize(e,t){let i=e.xt.x?e.x:t.x,r=e.y>t.y?e.y:t.y;return new n(i,r)}static Transform(e,t){return n.TransformToRef(e,t,new n)}static TransformToRef(e,t,i){let r=t.m,s=e.x*r[0]+e.y*r[4]+r[12],a=e.x*r[1]+e.y*r[5]+r[13];return i.x=s,i.y=a,i}static PointInTriangle(e,t,i,r){let s=.5*(-i.y*r.x+t.y*(-i.x+r.x)+t.x*(i.y-r.y)+i.x*r.y),a=s<0?-1:1,o=(t.y*r.x-t.x*r.y+(r.y-t.y)*e.x+(t.x-r.x)*e.y)*a,l=(t.x*i.y-t.y*i.x+(t.y-i.y)*e.x+(i.x-t.x)*e.y)*a;return o>0&&l>0&&o+l<2*s*a}static Distance(e,t){return Math.sqrt(n.DistanceSquared(e,t))}static DistanceSquared(e,t){let i=e.x-t.x,r=e.y-t.y;return i*i+r*r}static Center(e,t){return n.CenterToRef(e,t,new n)}static CenterToRef(e,t,i){return i.copyFromFloats((e.x+t.x)/2,(e.y+t.y)/2)}static DistanceOfPointFromSegment(e,t,i){let r=n.DistanceSquared(t,i);if(r===0)return n.Distance(e,t);let s=i.subtract(t),a=Math.max(0,Math.min(1,n.Dot(e.subtract(t),s)/r)),o=t.add(s.multiplyByFloats(a,a));return n.Distance(e,o)}};Ne._V8PerformanceHack=new Ne(.5,.5);Ne._ZeroReadOnly=Ne.Zero();Object.defineProperties(Ne.prototype,{dimension:{value:[2]},rank:{value:1}});b=class n{get x(){return this._x}set x(e){this._x=e,this._isDirty=!0}get y(){return this._y}set y(e){this._y=e,this._isDirty=!0}get z(){return this._z}set z(e){this._z=e,this._isDirty=!0}constructor(e=0,t=0,i=0){this._isDirty=!0,this._x=e,this._y=t,this._z=i}toString(){return`{X: ${this._x} Y: ${this._y} Z: ${this._z}}`}getClassName(){return"Vector3"}getHashCode(){let e=kn(this._x),t=kn(this._y),i=kn(this._z),r=e;return r=r*397^t,r=r*397^i,r}asArray(){return[this._x,this._y,this._z]}toArray(e,t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,this}fromArray(e,t=0){return n.FromArrayToRef(e,t,this),this}toQuaternion(){return ze.RotationYawPitchRoll(this._y,this._x,this._z)}addInPlace(e){return this._x+=e._x,this._y+=e._y,this._z+=e._z,this._isDirty=!0,this}addInPlaceFromFloats(e,t,i){return this._x+=e,this._y+=t,this._z+=i,this._isDirty=!0,this}add(e){return new n(this._x+e._x,this._y+e._y,this._z+e._z)}addToRef(e,t){return t._x=this._x+e._x,t._y=this._y+e._y,t._z=this._z+e._z,t._isDirty=!0,t}subtractInPlace(e){return this._x-=e._x,this._y-=e._y,this._z-=e._z,this._isDirty=!0,this}subtract(e){return new n(this._x-e._x,this._y-e._y,this._z-e._z)}subtractToRef(e,t){return this.subtractFromFloatsToRef(e._x,e._y,e._z,t)}subtractFromFloats(e,t,i){return new n(this._x-e,this._y-t,this._z-i)}subtractFromFloatsToRef(e,t,i,r){return r._x=this._x-e,r._y=this._y-t,r._z=this._z-i,r._isDirty=!0,r}negate(){return new n(-this._x,-this._y,-this._z)}negateInPlace(){return this._x*=-1,this._y*=-1,this._z*=-1,this._isDirty=!0,this}negateToRef(e){return e._x=this._x*-1,e._y=this._y*-1,e._z=this._z*-1,e._isDirty=!0,e}scaleInPlace(e){return this._x*=e,this._y*=e,this._z*=e,this._isDirty=!0,this}scale(e){return new n(this._x*e,this._y*e,this._z*e)}scaleToRef(e,t){return t._x=this._x*e,t._y=this._y*e,t._z=this._z*e,t._isDirty=!0,t}getNormalToRef(e){let t=this.length(),i=Math.acos(this._y/t),r=Math.atan2(this._z,this._x);i>Math.PI/2?i-=Math.PI/2:i+=Math.PI/2;let s=t*Math.sin(i)*Math.cos(r),a=t*Math.cos(i),o=t*Math.sin(i)*Math.sin(r);return e.set(s,a,o),e}applyRotationQuaternionToRef(e,t){let i=this._x,r=this._y,s=this._z,a=e._x,o=e._y,l=e._z,c=e._w,f=2*(o*s-l*r),h=2*(l*i-a*s),d=2*(a*r-o*i);return t._x=i+c*f+o*d-l*h,t._y=r+c*h+l*f-a*d,t._z=s+c*d+a*h-o*f,t._isDirty=!0,t}applyRotationQuaternionInPlace(e){return this.applyRotationQuaternionToRef(e,this)}applyRotationQuaternion(e){return this.applyRotationQuaternionToRef(e,new n)}scaleAndAddToRef(e,t){return t._x+=this._x*e,t._y+=this._y*e,t._z+=this._z*e,t._isDirty=!0,t}projectOnPlane(e,t){return this.projectOnPlaneToRef(e,t,new n)}projectOnPlaneToRef(e,t,i){let r=e.normal,s=e.d,a=We.Vector3[0];this.subtractToRef(t,a),a.normalize();let o=n.Dot(a,r);if(Math.abs(o)<1e-10)i.setAll(1/0);else{let l=-(n.Dot(t,r)+s)/o,c=a.scaleInPlace(l);t.addToRef(c,i)}return i}equals(e){return e&&this._x===e._x&&this._y===e._y&&this._z===e._z}equalsWithEpsilon(e,t=Nt){return e&&Ei(this._x,e._x,t)&&Ei(this._y,e._y,t)&&Ei(this._z,e._z,t)}equalsToFloats(e,t,i){return this._x===e&&this._y===t&&this._z===i}multiplyInPlace(e){return this._x*=e._x,this._y*=e._y,this._z*=e._z,this._isDirty=!0,this}multiply(e){return this.multiplyByFloats(e._x,e._y,e._z)}multiplyToRef(e,t){return t._x=this._x*e._x,t._y=this._y*e._y,t._z=this._z*e._z,t._isDirty=!0,t}multiplyByFloats(e,t,i){return new n(this._x*e,this._y*t,this._z*i)}divide(e){return new n(this._x/e._x,this._y/e._y,this._z/e._z)}divideToRef(e,t){return t._x=this._x/e._x,t._y=this._y/e._y,t._z=this._z/e._z,t._isDirty=!0,t}divideInPlace(e){return this._x=this._x/e._x,this._y=this._y/e._y,this._z=this._z/e._z,this._isDirty=!0,this}minimizeInPlace(e){return this.minimizeInPlaceFromFloats(e._x,e._y,e._z)}maximizeInPlace(e){return this.maximizeInPlaceFromFloats(e._x,e._y,e._z)}minimizeInPlaceFromFloats(e,t,i){return ethis._x&&(this.x=e),t>this._y&&(this.y=t),i>this._z&&(this.z=i),this}isNonUniformWithinEpsilon(e){let t=Math.abs(this._x),i=Math.abs(this._y);if(!Ei(t,i,e))return!0;let r=Math.abs(this._z);return!Ei(t,r,e)||!Ei(i,r,e)}get isNonUniform(){let e=Math.abs(this._x),t=Math.abs(this._y);if(e!==t)return!0;let i=Math.abs(this._z);return e!==i}floorToRef(e){return e._x=Math.floor(this._x),e._y=Math.floor(this._y),e._z=Math.floor(this._z),e._isDirty=!0,e}floor(){return new n(Math.floor(this._x),Math.floor(this._y),Math.floor(this._z))}fractToRef(e){return e._x=this._x-Math.floor(this._x),e._y=this._y-Math.floor(this._y),e._z=this._z-Math.floor(this._z),e._isDirty=!0,e}fract(){return new n(this._x-Math.floor(this._x),this._y-Math.floor(this._y),this._z-Math.floor(this._z))}length(){return Math.sqrt(this.lengthSquared())}lengthSquared(){return this._x*this._x+this._y*this._y+this._z*this._z}get hasAZeroComponent(){return this._x*this._y*this._z===0}normalize(){return this.normalizeFromLength(this.length())}reorderInPlace(e){if(e=e.toLowerCase(),e==="xyz")return this;let t=We.Vector3[0].copyFrom(this);return this.x=t[e[0]],this.y=t[e[1]],this.z=t[e[2]],this}rotateByQuaternionToRef(e,t){return e.toRotationMatrix(We.Matrix[0]),n.TransformCoordinatesToRef(this,We.Matrix[0],t),t}rotateByQuaternionAroundPointToRef(e,t,i){return this.subtractToRef(t,We.Vector3[0]),We.Vector3[0].rotateByQuaternionToRef(e,We.Vector3[0]),t.addToRef(We.Vector3[0],i),i}cross(e){return n.CrossToRef(this,e,new n)}normalizeFromLength(e){return e===0||e===1?this:this.scaleInPlace(1/e)}normalizeToNew(){return this.normalizeToRef(new n)}normalizeToRef(e){let t=this.length();return t===0||t===1?(e._x=this._x,e._y=this._y,e._z=this._z,e._isDirty=!0,e):this.scaleToRef(1/t,e)}clone(){return new n(this._x,this._y,this._z)}copyFrom(e){return this.copyFromFloats(e._x,e._y,e._z)}copyFromFloats(e,t,i){return this._x=e,this._y=t,this._z=i,this._isDirty=!0,this}set(e,t,i){return this.copyFromFloats(e,t,i)}setAll(e){return this._x=this._y=this._z=e,this._isDirty=!0,this}static GetClipFactor(e,t,i,r){let s=n.Dot(e,i),a=n.Dot(t,i);return(s-r)/(s-a)}static GetAngleBetweenVectors(e,t,i){let r=e.normalizeToRef(We.Vector3[1]),s=t.normalizeToRef(We.Vector3[2]),a=n.Dot(r,s);a=wt(a,-1,1);let o=Math.acos(a),l=We.Vector3[3];return n.CrossToRef(r,s,l),n.Dot(l,i)>0?isNaN(o)?0:o:isNaN(o)?-Math.PI:-Math.acos(a)}static GetAngleBetweenVectorsOnPlane(e,t,i){We.Vector3[0].copyFrom(e);let r=We.Vector3[0];We.Vector3[1].copyFrom(t);let s=We.Vector3[1];We.Vector3[2].copyFrom(i);let a=We.Vector3[2],o=We.Vector3[3],l=We.Vector3[4];r.normalize(),s.normalize(),a.normalize(),n.CrossToRef(a,r,o),n.CrossToRef(o,a,l);let c=Math.atan2(n.Dot(s,o),n.Dot(s,l));return C3(c)}static PitchYawRollToMoveBetweenPointsToRef(e,t,i){let r=Q.Vector3[0];return t.subtractToRef(e,r),i._y=Math.atan2(r.x,r.z)||0,i._x=Math.atan2(Math.sqrt(r.x**2+r.z**2),r.y)||0,i._z=0,i._isDirty=!0,i}static PitchYawRollToMoveBetweenPoints(e,t){let i=n.Zero();return n.PitchYawRollToMoveBetweenPointsToRef(e,t,i)}static SlerpToRef(e,t,i,r){i=wt(i,0,1);let s=We.Vector3[0],a=We.Vector3[1];s.copyFrom(e);let o=s.length();s.normalizeFromLength(o),a.copyFrom(t);let l=a.length();a.normalizeFromLength(l);let c=n.Dot(s,a),f,h;if(c<1-Nt){let d=Math.acos(c),u=1/Math.sin(d);f=Math.sin((1-i)*d)*u,h=Math.sin(i*d)*u}else f=1-i,h=i;return s.scaleInPlace(f),a.scaleInPlace(h),r.copyFrom(s).addInPlace(a),r.scaleInPlace(qa(o,l,i)),r}static SmoothToRef(e,t,i,r,s){return n.SlerpToRef(e,t,r===0?1:i/r,s),s}static FromArray(e,t=0){return new n(e[t],e[t+1],e[t+2])}static FromFloatArray(e,t){return n.FromArray(e,t)}static FromArrayToRef(e,t,i){return i._x=e[t],i._y=e[t+1],i._z=e[t+2],i._isDirty=!0,i}static FromFloatArrayToRef(e,t,i){return n.FromArrayToRef(e,t,i)}static FromFloatsToRef(e,t,i,r){return r.copyFromFloats(e,t,i),r}static Zero(){return new n(0,0,0)}static One(){return new n(1,1,1)}static Up(){return new n(0,1,0)}static get UpReadOnly(){return n._UpReadOnly}static get DownReadOnly(){return n._DownReadOnly}static get RightReadOnly(){return n._RightReadOnly}static get LeftReadOnly(){return n._LeftReadOnly}static get LeftHandedForwardReadOnly(){return n._LeftHandedForwardReadOnly}static get RightHandedForwardReadOnly(){return n._RightHandedForwardReadOnly}static get LeftHandedBackwardReadOnly(){return n._LeftHandedBackwardReadOnly}static get RightHandedBackwardReadOnly(){return n._RightHandedBackwardReadOnly}static get ZeroReadOnly(){return n._ZeroReadOnly}static get OneReadOnly(){return n._OneReadOnly}static Down(){return new n(0,-1,0)}static Forward(e=!1){return new n(0,0,e?-1:1)}static Backward(e=!1){return new n(0,0,e?1:-1)}static Right(){return new n(1,0,0)}static Left(){return new n(-1,0,0)}static Random(e=0,t=1){return new n(Ji(e,t),Ji(e,t),Ji(e,t))}static RandomToRef(e=0,t=1,i){return i.copyFromFloats(Ji(e,t),Ji(e,t),Ji(e,t))}static TransformCoordinates(e,t){let i=n.Zero();return n.TransformCoordinatesToRef(e,t,i),i}static TransformCoordinatesToRef(e,t,i){return n.TransformCoordinatesFromFloatsToRef(e._x,e._y,e._z,t,i),i}static TransformCoordinatesFromFloatsToRef(e,t,i,r,s){let a=r.m,o=e*a[0]+t*a[4]+i*a[8]+a[12],l=e*a[1]+t*a[5]+i*a[9]+a[13],c=e*a[2]+t*a[6]+i*a[10]+a[14],f=1/(e*a[3]+t*a[7]+i*a[11]+a[15]);return s._x=o*f,s._y=l*f,s._z=c*f,s._isDirty=!0,s}static TransformNormal(e,t){let i=n.Zero();return n.TransformNormalToRef(e,t,i),i}static TransformNormalToRef(e,t,i){return this.TransformNormalFromFloatsToRef(e._x,e._y,e._z,t,i),i}static TransformNormalFromFloatsToRef(e,t,i,r,s){let a=r.m;return s._x=e*a[0]+t*a[4]+i*a[8],s._y=e*a[1]+t*a[5]+i*a[9],s._z=e*a[2]+t*a[6]+i*a[10],s._isDirty=!0,s}static CatmullRom(e,t,i,r,s){let a=s*s,o=s*a,l=.5*(2*t._x+(-e._x+i._x)*s+(2*e._x-5*t._x+4*i._x-r._x)*a+(-e._x+3*t._x-3*i._x+r._x)*o),c=.5*(2*t._y+(-e._y+i._y)*s+(2*e._y-5*t._y+4*i._y-r._y)*a+(-e._y+3*t._y-3*i._y+r._y)*o),f=.5*(2*t._z+(-e._z+i._z)*s+(2*e._z-5*t._z+4*i._z-r._z)*a+(-e._z+3*t._z-3*i._z+r._z)*o);return new n(l,c,f)}static Clamp(e,t,i){let r=new n;return n.ClampToRef(e,t,i,r),r}static ClampToRef(e,t,i,r){let s=e._x;s=s>i._x?i._x:s,s=si._y?i._y:a,a=ai._z?i._z:o,o=o0&&M<0?(O.copyFrom(a),V=t,N=i):M>0&&D<0?(O.copyFrom(l),V=i,N=r):(O.copyFrom(o).scaleInPlace(-1),V=r,N=t);let F=We.Vector3[9],U=We.Vector3[4];if(V.subtractToRef(v,E),N.subtractToRef(v,F),n.CrossToRef(E,F,U),!(n.Dot(U,c)<0))return s.copyFrom(v),Math.abs(_*p);let $=We.Vector3[5];n.CrossToRef(O,U,$),$.normalize();let q=We.Vector3[9];q.copyFrom(V).subtractInPlace(v);let Z=q.length();if(Zthis._x&&(this.x=e.x),e.y>this._y&&(this.y=e.y),e.z>this._z&&(this.z=e.z),e.w>this._w&&(this.w=e.w),this}minimizeInPlaceFromFloats(e,t,i,r){return this.x=Math.min(e,this._x),this.y=Math.min(t,this._y),this.z=Math.min(i,this._z),this.w=Math.min(r,this._w),this}maximizeInPlaceFromFloats(e,t,i,r){return this.x=Math.max(e,this._x),this.y=Math.max(t,this._y),this.z=Math.max(i,this._z),this.w=Math.max(r,this._w),this}floorToRef(e){return e.x=Math.floor(this._x),e.y=Math.floor(this._y),e.z=Math.floor(this._z),e.w=Math.floor(this._w),e}floor(){return new n(Math.floor(this._x),Math.floor(this._y),Math.floor(this._z),Math.floor(this._w))}fractToRef(e){return e.x=this._x-Math.floor(this._x),e.y=this._y-Math.floor(this._y),e.z=this._z-Math.floor(this._z),e.w=this._w-Math.floor(this._w),e}fract(){return new n(this._x-Math.floor(this._x),this._y-Math.floor(this._y),this._z-Math.floor(this._z),this._w-Math.floor(this._w))}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}lengthSquared(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}normalize(){return this.normalizeFromLength(this.length())}normalizeFromLength(e){return e===0||e===1?this:this.scaleInPlace(1/e)}normalizeToNew(){return this.normalizeToRef(new n)}normalizeToRef(e){let t=this.length();return t===0||t===1?(e.x=this._x,e.y=this._y,e.z=this._z,e.w=this._w,e):this.scaleToRef(1/t,e)}toVector3(){return new b(this._x,this._y,this._z)}clone(){return new n(this._x,this._y,this._z,this._w)}copyFrom(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w,this}copyFromFloats(e,t,i,r){return this.x=e,this.y=t,this.z=i,this.w=r,this}set(e,t,i,r){return this.copyFromFloats(e,t,i,r)}setAll(e){return this.x=this.y=this.z=this.w=e,this}dot(e){return this._x*e.x+this._y*e.y+this._z*e.z+this._w*e.w}static FromArray(e,t){return t||(t=0),new n(e[t],e[t+1],e[t+2],e[t+3])}static FromArrayToRef(e,t,i){return i.x=e[t],i.y=e[t+1],i.z=e[t+2],i.w=e[t+3],i}static FromFloatArrayToRef(e,t,i){return n.FromArrayToRef(e,t,i),i}static FromFloatsToRef(e,t,i,r,s){return s.x=e,s.y=t,s.z=i,s.w=r,s}static Zero(){return new n(0,0,0,0)}static One(){return new n(1,1,1,1)}static Random(e=0,t=1){return new n(Ji(e,t),Ji(e,t),Ji(e,t),Ji(e,t))}static RandomToRef(e=0,t=1,i){return i.x=Ji(e,t),i.y=Ji(e,t),i.z=Ji(e,t),i.w=Ji(e,t),i}static Clamp(e,t,i){return n.ClampToRef(e,t,i,new n)}static ClampToRef(e,t,i,r){return r.x=wt(e.x,t.x,i.x),r.y=wt(e.y,t.y,i.y),r.z=wt(e.z,t.z,i.z),r.w=wt(e.w,t.w,i.w),r}static CheckExtends(e,t,i){t.minimizeInPlace(e),i.maximizeInPlace(e)}static get ZeroReadOnly(){return n._ZeroReadOnly}static Normalize(e){return n.NormalizeToRef(e,new n)}static NormalizeToRef(e,t){return e.normalizeToRef(t),t}static Minimize(e,t){let i=new n;return i.copyFrom(e),i.minimizeInPlace(t),i}static Maximize(e,t){let i=new n;return i.copyFrom(e),i.maximizeInPlace(t),i}static Distance(e,t){return Math.sqrt(n.DistanceSquared(e,t))}static DistanceSquared(e,t){let i=e.x-t.x,r=e.y-t.y,s=e.z-t.z,a=e.w-t.w;return i*i+r*r+s*s+a*a}static Center(e,t){return n.CenterToRef(e,t,new n)}static CenterToRef(e,t,i){return i.x=(e.x+t.x)/2,i.y=(e.y+t.y)/2,i.z=(e.z+t.z)/2,i.w=(e.w+t.w)/2,i}static TransformCoordinates(e,t){return n.TransformCoordinatesToRef(e,t,new n)}static TransformCoordinatesToRef(e,t,i){return n.TransformCoordinatesFromFloatsToRef(e._x,e._y,e._z,t,i),i}static TransformCoordinatesFromFloatsToRef(e,t,i,r,s){let a=r.m,o=e*a[0]+t*a[4]+i*a[8]+a[12],l=e*a[1]+t*a[5]+i*a[9]+a[13],c=e*a[2]+t*a[6]+i*a[10]+a[14],f=e*a[3]+t*a[7]+i*a[11]+a[15];return s.x=o,s.y=l,s.z=c,s.w=f,s}static TransformNormal(e,t){return n.TransformNormalToRef(e,t,new n)}static TransformNormalToRef(e,t,i){let r=t.m,s=e.x*r[0]+e.y*r[4]+e.z*r[8],a=e.x*r[1]+e.y*r[5]+e.z*r[9],o=e.x*r[2]+e.y*r[6]+e.z*r[10];return i.x=s,i.y=a,i.z=o,i.w=e.w,i}static TransformNormalFromFloatsToRef(e,t,i,r,s,a){let o=s.m;return a.x=e*o[0]+t*o[4]+i*o[8],a.y=e*o[1]+t*o[5]+i*o[9],a.z=e*o[2]+t*o[6]+i*o[10],a.w=r,a}static FromVector3(e,t=0){return new n(e._x,e._y,e._z,t)}static Dot(e,t){return e.x*t.x+e.y*t.y+e.z*t.z+e.w*t.w}};Mi._V8PerformanceHack=new Mi(.5,.5,.5,.5);Mi._ZeroReadOnly=Mi.Zero();Object.defineProperties(Mi.prototype,{dimension:{value:[4]},rank:{value:1}});ze=class n{get x(){return this._x}set x(e){this._x=e,this._isDirty=!0}get y(){return this._y}set y(e){this._y=e,this._isDirty=!0}get z(){return this._z}set z(e){this._z=e,this._isDirty=!0}get w(){return this._w}set w(e){this._w=e,this._isDirty=!0}constructor(e=0,t=0,i=0,r=1){this._isDirty=!0,this._x=e,this._y=t,this._z=i,this._w=r}toString(){return`{X: ${this._x} Y: ${this._y} Z: ${this._z} W: ${this._w}}`}getClassName(){return"Quaternion"}getHashCode(){let e=kn(this._x),t=kn(this._y),i=kn(this._z),r=kn(this._w),s=e;return s=s*397^t,s=s*397^i,s=s*397^r,s}asArray(){return[this._x,this._y,this._z,this._w]}toArray(e,t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,this}fromArray(e,t=0){return n.FromArrayToRef(e,t,this)}equals(e){return e&&this._x===e._x&&this._y===e._y&&this._z===e._z&&this._w===e._w}equalsWithEpsilon(e,t=Nt){return e&&Ei(this._x,e._x,t)&&Ei(this._y,e._y,t)&&Ei(this._z,e._z,t)&&Ei(this._w,e._w,t)}isApprox(e,t=Nt){return e&&(Ei(this._x,e._x,t)&&Ei(this._y,e._y,t)&&Ei(this._z,e._z,t)&&Ei(this._w,e._w,t)||Ei(this._x,-e._x,t)&&Ei(this._y,-e._y,t)&&Ei(this._z,-e._z,t)&&Ei(this._w,-e._w,t))}clone(){return new n(this._x,this._y,this._z,this._w)}copyFrom(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._w=e._w,this._isDirty=!0,this}copyFromFloats(e,t,i,r){return this._x=e,this._y=t,this._z=i,this._w=r,this._isDirty=!0,this}set(e,t,i,r){return this.copyFromFloats(e,t,i,r)}setAll(e){return this.copyFromFloats(e,e,e,e)}add(e){return new n(this._x+e._x,this._y+e._y,this._z+e._z,this._w+e._w)}addInPlace(e){return this._x+=e._x,this._y+=e._y,this._z+=e._z,this._w+=e._w,this._isDirty=!0,this}addToRef(e,t){return t._x=this._x+e._x,t._y=this._y+e._y,t._z=this._z+e._z,t._w=this._w+e._w,t._isDirty=!0,t}addInPlaceFromFloats(e,t,i,r){return this._x+=e,this._y+=t,this._z+=i,this._w+=r,this._isDirty=!0,this}subtractToRef(e,t){return t._x=this._x-e._x,t._y=this._y-e._y,t._z=this._z-e._z,t._w=this._w-e._w,t._isDirty=!0,t}subtractFromFloats(e,t,i,r){return this.subtractFromFloatsToRef(e,t,i,r,new n)}subtractFromFloatsToRef(e,t,i,r,s){return s._x=this._x-e,s._y=this._y-t,s._z=this._z-i,s._w=this._w-r,s._isDirty=!0,s}subtract(e){return new n(this._x-e._x,this._y-e._y,this._z-e._z,this._w-e._w)}subtractInPlace(e){return this._x-=e._x,this._y-=e._y,this._z-=e._z,this._w-=e._w,this._isDirty=!0,this}scale(e){return new n(this._x*e,this._y*e,this._z*e,this._w*e)}scaleToRef(e,t){return t._x=this._x*e,t._y=this._y*e,t._z=this._z*e,t._w=this._w*e,t._isDirty=!0,t}scaleInPlace(e){return this._x*=e,this._y*=e,this._z*=e,this._w*=e,this._isDirty=!0,this}scaleAndAddToRef(e,t){return t._x+=this._x*e,t._y+=this._y*e,t._z+=this._z*e,t._w+=this._w*e,t._isDirty=!0,t}multiply(e){let t=new n(0,0,0,1);return this.multiplyToRef(e,t),t}multiplyToRef(e,t){let i=this._x*e._w+this._y*e._z-this._z*e._y+this._w*e._x,r=-this._x*e._z+this._y*e._w+this._z*e._x+this._w*e._y,s=this._x*e._y-this._y*e._x+this._z*e._w+this._w*e._z,a=-this._x*e._x-this._y*e._y-this._z*e._z+this._w*e._w;return t.copyFromFloats(i,r,s,a),t}multiplyInPlace(e){return this.multiplyToRef(e,this)}multiplyByFloats(e,t,i,r){return this._x*=e,this._y*=t,this._z*=i,this._w*=r,this._isDirty=!0,this}divide(e){throw new ReferenceError("Can not divide a quaternion")}divideToRef(e,t){throw new ReferenceError("Can not divide a quaternion")}divideInPlace(e){throw new ReferenceError("Can not divide a quaternion")}minimizeInPlace(){throw new ReferenceError("Can not minimize a quaternion")}minimizeInPlaceFromFloats(){throw new ReferenceError("Can not minimize a quaternion")}maximizeInPlace(){throw new ReferenceError("Can not maximize a quaternion")}maximizeInPlaceFromFloats(){throw new ReferenceError("Can not maximize a quaternion")}negate(){return this.negateToRef(new n)}negateInPlace(){return this._x=-this._x,this._y=-this._y,this._z=-this._z,this._w=-this._w,this._isDirty=!0,this}negateToRef(e){return e._x=-this._x,e._y=-this._y,e._z=-this._z,e._w=-this._w,e._isDirty=!0,e}equalsToFloats(e,t,i,r){return this._x===e&&this._y===t&&this._z===i&&this._w===r}floorToRef(e){throw new ReferenceError("Can not floor a quaternion")}floor(){throw new ReferenceError("Can not floor a quaternion")}fractToRef(e){throw new ReferenceError("Can not fract a quaternion")}fract(){throw new ReferenceError("Can not fract a quaternion")}conjugateToRef(e){return e.copyFromFloats(-this._x,-this._y,-this._z,this._w),e}conjugateInPlace(){return this._x*=-1,this._y*=-1,this._z*=-1,this._isDirty=!0,this}conjugate(){return new n(-this._x,-this._y,-this._z,this._w)}invert(){let e=this.conjugate(),t=this.lengthSquared();return t==0||t==1||e.scaleInPlace(1/t),e}invertInPlace(){this.conjugateInPlace();let e=this.lengthSquared();return e==0||e==1?this:(this.scaleInPlace(1/e),this)}lengthSquared(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this.lengthSquared())}normalize(){return this.normalizeFromLength(this.length())}normalizeFromLength(e){return e===0||e===1?this:this.scaleInPlace(1/e)}normalizeToNew(){let e=new n(0,0,0,1);return this.normalizeToRef(e),e}normalizeToRef(e){let t=this.length();return t===0||t===1?e.copyFromFloats(this._x,this._y,this._z,this._w):this.scaleToRef(1/t,e)}toEulerAngles(){let e=b.Zero();return this.toEulerAnglesToRef(e),e}toEulerAnglesToRef(e){let t=this._z,i=this._x,r=this._y,s=this._w,a=r*t-i*s,o=.4999999;if(a<-o)e._y=2*Math.atan2(r,s),e._x=Math.PI/2,e._z=0,e._isDirty=!0;else if(a>o)e._y=2*Math.atan2(r,s),e._x=-Math.PI/2,e._z=0,e._isDirty=!0;else{let l=s*s,c=t*t,f=i*i,h=r*r;e._z=Math.atan2(2*(i*r+t*s),-c-f+h+l),e._x=Math.asin(-2*a),e._y=Math.atan2(2*(t*i+r*s),c-f-h+l),e._isDirty=!0}return e}toAlphaBetaGammaToRef(e){let t=this._z,i=this._x,r=this._y,s=this._w,a=Math.sqrt(i*i+r*r),o=Math.sqrt(t*t+s*s),l=2*Math.atan2(a,o),c=2*Math.atan2(t,s),f=2*Math.atan2(r,i),h=(c+f)/2,d=(c-f)/2;return e.set(d,l,h),e}toRotationMatrix(e){return K.FromQuaternionToRef(this,e),e}fromRotationMatrix(e){return n.FromRotationMatrixToRef(e,this),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}toAxisAngle(){let e=b.Zero(),t=this.toAxisAngleToRef(e);return{axis:e,angle:t}}toAxisAngleToRef(e){let t,i=Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z),r=this._w;return i>0?(t=2*Math.atan2(i,r),e.set(this._x/i,this._y/i,this._z/i)):(t=0,e.set(1,0,0)),t}static FromRotationMatrix(e){let t=new n;return n.FromRotationMatrixToRef(e,t),t}static FromRotationMatrixToRef(e,t){let i=e.m,r=i[0],s=i[4],a=i[8],o=i[1],l=i[5],c=i[9],f=i[2],h=i[6],d=i[10],u=r+l+d,m;return u>0?(m=.5/Math.sqrt(u+1),t._w=.25/m,t._x=(h-c)*m,t._y=(a-f)*m,t._z=(o-s)*m,t._isDirty=!0):r>l&&r>d?(m=2*Math.sqrt(1+r-l-d),t._w=(h-c)/m,t._x=.25*m,t._y=(s+o)/m,t._z=(a+f)/m,t._isDirty=!0):l>d?(m=2*Math.sqrt(1+l-r-d),t._w=(a-f)/m,t._x=(s+o)/m,t._y=.25*m,t._z=(c+h)/m,t._isDirty=!0):(m=2*Math.sqrt(1+d-r-l),t._w=(o-s)/m,t._x=(a+f)/m,t._y=(c+h)/m,t._z=.25*m,t._isDirty=!0),t}static Dot(e,t){return e._x*t._x+e._y*t._y+e._z*t._z+e._w*t._w}static AreClose(e,t,i=.1){let r=n.Dot(e,t);return 1-r*r<=i}static SmoothToRef(e,t,i,r,s){let a=r===0?1:i/r;return a=wt(a,0,1),n.SlerpToRef(e,t,a,s),s}static Zero(){return new n(0,0,0,0)}static Inverse(e){return new n(-e._x,-e._y,-e._z,e._w)}static InverseToRef(e,t){return t.set(-e._x,-e._y,-e._z,e._w),t}static Identity(){return new n(0,0,0,1)}static IsIdentity(e){return e&&e._x===0&&e._y===0&&e._z===0&&e._w===1}static RotationAxis(e,t){return n.RotationAxisToRef(e,t,new n)}static RotationAxisToRef(e,t,i){i._w=Math.cos(t/2);let r=Math.sin(t/2)/e.length();return i._x=e._x*r,i._y=e._y*r,i._z=e._z*r,i._isDirty=!0,i}static FromArray(e,t){return t||(t=0),new n(e[t],e[t+1],e[t+2],e[t+3])}static FromArrayToRef(e,t,i){return i._x=e[t],i._y=e[t+1],i._z=e[t+2],i._w=e[t+3],i._isDirty=!0,i}static FromFloatsToRef(e,t,i,r,s){return s.copyFromFloats(e,t,i,r),s}static FromEulerAngles(e,t,i){let r=new n;return n.RotationYawPitchRollToRef(t,e,i,r),r}static FromEulerAnglesToRef(e,t,i,r){return n.RotationYawPitchRollToRef(t,e,i,r),r}static FromEulerVector(e){let t=new n;return n.RotationYawPitchRollToRef(e._y,e._x,e._z,t),t}static FromEulerVectorToRef(e,t){return n.RotationYawPitchRollToRef(e._y,e._x,e._z,t),t}static FromUnitVectorsToRef(e,t,i,r=Nt){let s=b.Dot(e,t)+1;return sMath.abs(e.z)?i.set(-e.y,e.x,0,0):i.set(0,-e.z,e.y,0):(b.CrossToRef(e,t,Q.Vector3[0]),i.set(Q.Vector3[0].x,Q.Vector3[0].y,Q.Vector3[0].z,s)),i.normalize()}static RotationYawPitchRoll(e,t,i){let r=new n;return n.RotationYawPitchRollToRef(e,t,i,r),r}static RotationYawPitchRollToRef(e,t,i,r){let s=i*.5,a=t*.5,o=e*.5,l=Math.sin(s),c=Math.cos(s),f=Math.sin(a),h=Math.cos(a),d=Math.sin(o),u=Math.cos(o);return r._x=u*f*c+d*h*l,r._y=d*h*c-u*f*l,r._z=u*h*l-d*f*c,r._w=u*h*c+d*f*l,r._isDirty=!0,r}static RotationAlphaBetaGamma(e,t,i){let r=new n;return n.RotationAlphaBetaGammaToRef(e,t,i,r),r}static RotationAlphaBetaGammaToRef(e,t,i,r){let s=(i+e)*.5,a=(i-e)*.5,o=t*.5;return r._x=Math.cos(a)*Math.sin(o),r._y=Math.sin(a)*Math.sin(o),r._z=Math.sin(s)*Math.cos(o),r._w=Math.cos(s)*Math.cos(o),r._isDirty=!0,r}static RotationQuaternionFromAxis(e,t,i){let r=new n(0,0,0,0);return n.RotationQuaternionFromAxisToRef(e,t,i,r),r}static RotationQuaternionFromAxisToRef(e,t,i,r){let s=We.Matrix[0];return e=e.normalizeToRef(We.Vector3[0]),t=t.normalizeToRef(We.Vector3[1]),i=i.normalizeToRef(We.Vector3[2]),K.FromXYZAxesToRef(e,t,i,s),n.FromRotationMatrixToRef(s,r),r}static FromLookDirectionLH(e,t){let i=new n;return n.FromLookDirectionLHToRef(e,t,i),i}static FromLookDirectionLHToRef(e,t,i){let r=We.Matrix[0];return K.LookDirectionLHToRef(e,t,r),n.FromRotationMatrixToRef(r,i),i}static FromLookDirectionRH(e,t){let i=new n;return n.FromLookDirectionRHToRef(e,t,i),i}static FromLookDirectionRHToRef(e,t,i){let r=We.Matrix[0];return K.LookDirectionRHToRef(e,t,r),n.FromRotationMatrixToRef(r,i)}static Slerp(e,t,i){let r=n.Identity();return n.SlerpToRef(e,t,i,r),r}static SlerpToRef(e,t,i,r){let s,a,o=e._x*t._x+e._y*t._y+e._z*t._z+e._w*t._w,l=!1;if(o<0&&(l=!0,o=-o),o>.999999)a=1-i,s=l?-i:i;else{let c=Math.acos(o),f=1/Math.sin(c);a=Math.sin((1-i)*c)*f,s=l?-Math.sin(i*c)*f:Math.sin(i*c)*f}return r._x=a*e._x+s*t._x,r._y=a*e._y+s*t._y,r._z=a*e._z+s*t._z,r._w=a*e._w+s*t._w,r._isDirty=!0,r}static Hermite(e,t,i,r,s){let a=s*s,o=s*a,l=2*o-3*a+1,c=-2*o+3*a,f=o-2*a+s,h=o-a,d=e._x*l+i._x*c+t._x*f+r._x*h,u=e._y*l+i._y*c+t._y*f+r._y*h,m=e._z*l+i._z*c+t._z*f+r._z*h,_=e._w*l+i._w*c+t._w*f+r._w*h;return new n(d,u,m,_)}static Hermite1stDerivative(e,t,i,r,s){let a=new n;return this.Hermite1stDerivativeToRef(e,t,i,r,s,a),a}static Hermite1stDerivativeToRef(e,t,i,r,s,a){let o=s*s;return a._x=(o-s)*6*e._x+(3*o-4*s+1)*t._x+(-o+s)*6*i._x+(3*o-2*s)*r._x,a._y=(o-s)*6*e._y+(3*o-4*s+1)*t._y+(-o+s)*6*i._y+(3*o-2*s)*r._y,a._z=(o-s)*6*e._z+(3*o-4*s+1)*t._z+(-o+s)*6*i._z+(3*o-2*s)*r._z,a._w=(o-s)*6*e._w+(3*o-4*s+1)*t._w+(-o+s)*6*i._w+(3*o-2*s)*r._w,a._isDirty=!0,a}static Normalize(e){let t=n.Zero();return n.NormalizeToRef(e,t),t}static NormalizeToRef(e,t){return e.normalizeToRef(t),t}static Clamp(e,t,i){let r=new n;return n.ClampToRef(e,t,i,r),r}static ClampToRef(e,t,i,r){return r.copyFromFloats(wt(e.x,t.x,i.x),wt(e.y,t.y,i.y),wt(e.z,t.z,i.z),wt(e.w,t.w,i.w))}static Random(e=0,t=1){return new n(Ji(e,t),Ji(e,t),Ji(e,t),Ji(e,t))}static RandomToRef(e=0,t=1,i){return i.copyFromFloats(Ji(e,t),Ji(e,t),Ji(e,t),Ji(e,t))}static Minimize(){throw new ReferenceError("Quaternion.Minimize does not make sense")}static Maximize(){throw new ReferenceError("Quaternion.Maximize does not make sense")}static Distance(e,t){return Math.sqrt(n.DistanceSquared(e,t))}static DistanceSquared(e,t){let i=e.x-t.x,r=e.y-t.y,s=e.z-t.z,a=e.w-t.w;return i*i+r*r+s*s+a*a}static Center(e,t){return n.CenterToRef(e,t,n.Zero())}static CenterToRef(e,t,i){return i.copyFromFloats((e.x+t.x)/2,(e.y+t.y)/2,(e.z+t.z)/2,(e.w+t.w)/2)}};ze._V8PerformanceHack=new ze(.5,.5,.5,.5);Object.defineProperties(ze.prototype,{dimension:{value:[4]},rank:{value:1}});K=class n{static get Use64Bits(){return Gn.MatrixUse64Bits}get m(){return this._m}markAsUpdated(){this.updateFlag=yu._UpdateFlagSeed++,this._isIdentity=!1,this._isIdentity3x2=!1,this._isIdentityDirty=!0,this._isIdentity3x2Dirty=!0}_updateIdentityStatus(e,t=!1,i=!1,r=!0){this._isIdentity=e,this._isIdentity3x2=e||i,this._isIdentityDirty=this._isIdentity?!1:t,this._isIdentity3x2Dirty=this._isIdentity3x2?!1:r}constructor(){this._isIdentity=!1,this._isIdentityDirty=!0,this._isIdentity3x2=!0,this._isIdentity3x2Dirty=!0,this.updateFlag=-1,Gn.MatrixTrackPrecisionChange&&Gn.MatrixTrackedMatrices.push(this),this._m=new Gn.MatrixCurrentType(16),this.markAsUpdated()}isIdentity(){if(this._isIdentityDirty){this._isIdentityDirty=!1;let e=this._m;this._isIdentity=e[0]===1&&e[1]===0&&e[2]===0&&e[3]===0&&e[4]===0&&e[5]===1&&e[6]===0&&e[7]===0&&e[8]===0&&e[9]===0&&e[10]===1&&e[11]===0&&e[12]===0&&e[13]===0&&e[14]===0&&e[15]===1}return this._isIdentity}isIdentityAs3x2(){return this._isIdentity3x2Dirty&&(this._isIdentity3x2Dirty=!1,this._m[0]!==1||this._m[5]!==1||this._m[15]!==1?this._isIdentity3x2=!1:this._m[1]!==0||this._m[2]!==0||this._m[3]!==0||this._m[4]!==0||this._m[6]!==0||this._m[7]!==0||this._m[8]!==0||this._m[9]!==0||this._m[10]!==0||this._m[11]!==0||this._m[12]!==0||this._m[13]!==0||this._m[14]!==0?this._isIdentity3x2=!1:this._isIdentity3x2=!0),this._isIdentity3x2}determinant(){if(this._isIdentity===!0)return 1;let e=this._m,t=e[0],i=e[1],r=e[2],s=e[3],a=e[4],o=e[5],l=e[6],c=e[7],f=e[8],h=e[9],d=e[10],u=e[11],m=e[12],_=e[13],p=e[14],g=e[15],v=d*g-p*u,x=h*g-_*u,A=h*p-_*d,S=f*g-m*u,E=f*p-d*m,R=f*_-m*h,I=+(o*v-l*x+c*A),y=-(a*v-l*S+c*E),M=+(a*x-o*S+c*R),D=-(a*A-o*E+l*R);return t*I+i*y+r*M+s*D}toString(){return`{${this.m[0]}, ${this.m[1]}, ${this.m[2]}, ${this.m[3]} ${this.m[4]}, ${this.m[5]}, ${this.m[6]}, ${this.m[7]} ${this.m[8]}, ${this.m[9]}, ${this.m[10]}, ${this.m[11]} -${this.m[12]}, ${this.m[13]}, ${this.m[14]}, ${this.m[15]}}`}toArray(e=null,t=0){if(!e)return this._m;let i=this._m;for(let r=0;r<16;r++)e[t+r]=i[r];return this}asArray(){return this._m}fromArray(e,t=0){return n.FromArrayToRef(e,t,this)}copyFromFloats(...e){return n.FromArrayToRef(e,0,this)}set(...e){let t=this._m;for(let i=0;i<16;i++)t[i]=e[i];return this.markAsUpdated(),this}setAll(e){let t=this._m;for(let i=0;i<16;i++)t[i]=e;return this.markAsUpdated(),this}invert(){return this.invertToRef(this),this}reset(){return n.FromValuesToRef(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,this),this._updateIdentityStatus(!1),this}add(e){let t=new n;return this.addToRef(e,t),t}addToRef(e,t){let i=this._m,r=t._m,s=e.m;for(let a=0;a<16;a++)r[a]=i[a]+s[a];return t.markAsUpdated(),t}addToSelf(e){let t=this._m,i=e.m;return t[0]+=i[0],t[1]+=i[1],t[2]+=i[2],t[3]+=i[3],t[4]+=i[4],t[5]+=i[5],t[6]+=i[6],t[7]+=i[7],t[8]+=i[8],t[9]+=i[9],t[10]+=i[10],t[11]+=i[11],t[12]+=i[12],t[13]+=i[13],t[14]+=i[14],t[15]+=i[15],this.markAsUpdated(),this}addInPlace(e){let t=this._m,i=e.m;for(let r=0;r<16;r++)t[r]+=i[r];return this.markAsUpdated(),this}addInPlaceFromFloats(...e){let t=this._m;for(let i=0;i<16;i++)t[i]+=e[i];return this.markAsUpdated(),this}subtract(e){let t=this._m,i=e.m;for(let r=0;r<16;r++)t[r]-=i[r];return this.markAsUpdated(),this}subtractToRef(e,t){let i=this._m,r=e.m,s=t._m;for(let a=0;a<16;a++)s[a]=i[a]-r[a];return t.markAsUpdated(),t}subtractInPlace(e){let t=this._m,i=e.m;for(let r=0;r<16;r++)t[r]-=i[r];return this.markAsUpdated(),this}subtractFromFloats(...e){return this.subtractFromFloatsToRef(...e,new n)}subtractFromFloatsToRef(...e){let t=e.pop(),i=this._m,r=t._m,s=e;for(let a=0;a<16;a++)r[a]=i[a]-s[a];return t.markAsUpdated(),t}invertToRef(e){return this._isIdentity===!0?(n.IdentityToRef(e),e):(X0(this,e.asArray())?e.markAsUpdated():e.copyFrom(this),e)}addAtIndex(e,t){return this._m[e]+=t,this.markAsUpdated(),this}multiplyAtIndex(e,t){return this._m[e]*=t,this.markAsUpdated(),this}setTranslationFromFloats(e,t,i){return this._m[12]=e,this._m[13]=t,this._m[14]=i,this.markAsUpdated(),this}addTranslationFromFloats(e,t,i){return this._m[12]+=e,this._m[13]+=t,this._m[14]+=i,this.markAsUpdated(),this}setTranslation(e){return this.setTranslationFromFloats(e._x,e._y,e._z)}getTranslation(){return new b(this._m[12],this._m[13],this._m[14])}getTranslationToRef(e){return e.x=this._m[12],e.y=this._m[13],e.z=this._m[14],e}removeRotationAndScaling(){let e=this.m;return n.FromValuesToRef(1,0,0,0,0,1,0,0,0,0,1,0,e[12],e[13],e[14],e[15],this),this._updateIdentityStatus(e[12]===0&&e[13]===0&&e[14]===0&&e[15]===1),this}copyFrom(e){e.copyToArray(this._m);let t=e;return this.updateFlag=t.updateFlag,this._updateIdentityStatus(t._isIdentity,t._isIdentityDirty,t._isIdentity3x2,t._isIdentity3x2Dirty),this}copyToArray(e,t=0){return S3(this,e,t),this}multiply(e){let t=new n;return this.multiplyToRef(e,t),t}multiplyInPlace(e){let t=this._m,i=e.m;for(let r=0;r<16;r++)t[r]*=i[r];return this.markAsUpdated(),this}multiplyByFloats(...e){let t=this._m;for(let i=0;i<16;i++)t[i]*=e[i];return this.markAsUpdated(),this}multiplyByFloatsToRef(...e){let t=e.pop(),i=this._m,r=t._m,s=e;for(let a=0;a<16;a++)r[a]=i[a]*s[a];return t.markAsUpdated(),t}multiplyToRef(e,t){return this._isIdentity?(t.copyFrom(e),t):e._isIdentity?(t.copyFrom(this),t):(this.multiplyToArray(e,t._m,0),t.markAsUpdated(),t)}multiplyToArray(e,t,i){return z0(this,e,t,i),this}divide(e){return this.divideToRef(e,new n)}divideToRef(e,t){let i=this._m,r=e.m,s=t._m;for(let a=0;a<16;a++)s[a]=i[a]/r[a];return t.markAsUpdated(),t}divideInPlace(e){let t=this._m,i=e.m;for(let r=0;r<16;r++)t[r]/=i[r];return this.markAsUpdated(),this}minimizeInPlace(e){let t=this._m,i=e.m;for(let r=0;r<16;r++)t[r]=Math.min(t[r],i[r]);return this.markAsUpdated(),this}minimizeInPlaceFromFloats(...e){let t=this._m;for(let i=0;i<16;i++)t[i]=Math.min(t[i],e[i]);return this.markAsUpdated(),this}maximizeInPlace(e){let t=this._m,i=e.m;for(let r=0;r<16;r++)t[r]=Math.min(t[r],i[r]);return this.markAsUpdated(),this}maximizeInPlaceFromFloats(...e){let t=this._m;for(let i=0;i<16;i++)t[i]=Math.min(t[i],e[i]);return this.markAsUpdated(),this}negate(){return this.negateToRef(new n)}negateInPlace(){let e=this._m;for(let t=0;t<16;t++)e[t]=-e[t];return this.markAsUpdated(),this}negateToRef(e){let t=this._m,i=e._m;for(let r=0;r<16;r++)i[r]=-t[r];return e.markAsUpdated(),e}equals(e){let t=e;if(!t)return!1;if((this._isIdentity||t._isIdentity)&&!this._isIdentityDirty&&!t._isIdentityDirty)return this._isIdentity&&t._isIdentity;let i=this.m,r=t.m;return i[0]===r[0]&&i[1]===r[1]&&i[2]===r[2]&&i[3]===r[3]&&i[4]===r[4]&&i[5]===r[5]&&i[6]===r[6]&&i[7]===r[7]&&i[8]===r[8]&&i[9]===r[9]&&i[10]===r[10]&&i[11]===r[11]&&i[12]===r[12]&&i[13]===r[13]&&i[14]===r[14]&&i[15]===r[15]}equalsWithEpsilon(e,t=0){let i=this._m,r=e.m;for(let s=0;s<16;s++)if(!Ei(i[s],r[s],t))return!1;return!0}equalsToFloats(...e){let t=this._m;for(let i=0;i<16;i++)if(t[i]!=e[i])return!1;return!0}floor(){return this.floorToRef(new n)}floorToRef(e){let t=this._m,i=e._m;for(let r=0;r<16;r++)i[r]=Math.floor(t[r]);return e.markAsUpdated(),e}fract(){return this.fractToRef(new n)}fractToRef(e){let t=this._m,i=e._m;for(let r=0;r<16;r++)i[r]=t[r]-Math.floor(t[r]);return e.markAsUpdated(),e}clone(){let e=new n;return e.copyFrom(this),e}getClassName(){return"Matrix"}getHashCode(){let e=kn(this._m[0]);for(let t=1;t<16;t++)e=e*397^kn(this._m[t]);return e}decomposeToTransformNode(e){return e.rotationQuaternion=e.rotationQuaternion||new ze,this.decompose(e.scaling,e.rotationQuaternion,e.position)}decompose(e,t,i,r,s=!0){if(this._isIdentity)return i&&i.setAll(0),e&&e.setAll(1),t&&t.copyFromFloats(0,0,0,1),!0;let a=this._m;if(i&&i.copyFromFloats(a[12],a[13],a[14]),e=e||We.Vector3[0],e.x=Math.sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2]),e.y=Math.sqrt(a[4]*a[4]+a[5]*a[5]+a[6]*a[6]),e.z=Math.sqrt(a[8]*a[8]+a[9]*a[9]+a[10]*a[10]),r){let o=(s?r.absoluteScaling.x:r.scaling.x)<0?-1:1,l=(s?r.absoluteScaling.y:r.scaling.y)<0?-1:1,c=(s?r.absoluteScaling.z:r.scaling.z)<0?-1:1;e.x*=o,e.y*=l,e.z*=c}else this.determinant()<=0&&(e.y*=-1);if(e._x===0||e._y===0||e._z===0)return t&&t.copyFromFloats(0,0,0,1),!1;if(t){let o=1/e._x,l=1/e._y,c=1/e._z;n.FromValuesToRef(a[0]*o,a[1]*o,a[2]*o,0,a[4]*l,a[5]*l,a[6]*l,0,a[8]*c,a[9]*c,a[10]*c,0,0,0,0,1,We.Matrix[0]),ze.FromRotationMatrixToRef(We.Matrix[0],t)}return!0}getRow(e){if(e<0||e>3)return null;let t=e*4;return new Mi(this._m[t+0],this._m[t+1],this._m[t+2],this._m[t+3])}getRowToRef(e,t){if(e>=0&&e<=3){let i=e*4;t.x=this._m[i+0],t.y=this._m[i+1],t.z=this._m[i+2],t.w=this._m[i+3]}return t}setRow(e,t){return this.setRowFromFloats(e,t.x,t.y,t.z,t.w)}transpose(){let e=new n;return n.TransposeToRef(this,e),e}transposeToRef(e){return n.TransposeToRef(this,e),e}setRowFromFloats(e,t,i,r,s){if(e<0||e>3)return this;let a=e*4;return this._m[a+0]=t,this._m[a+1]=i,this._m[a+2]=r,this._m[a+3]=s,this.markAsUpdated(),this}scale(e){let t=new n;return this.scaleToRef(e,t),t}scaleToRef(e,t){for(let i=0;i<16;i++)t._m[i]=this._m[i]*e;return t.markAsUpdated(),t}scaleAndAddToRef(e,t){for(let i=0;i<16;i++)t._m[i]+=this._m[i]*e;return t.markAsUpdated(),t}scaleInPlace(e){let t=this._m;for(let i=0;i<16;i++)t[i]*=e;return this.markAsUpdated(),this}toNormalMatrix(e){let t=We.Matrix[0];this.invertToRef(t),t.transposeToRef(e);let i=e._m;return n.FromValuesToRef(i[0],i[1],i[2],0,i[4],i[5],i[6],0,i[8],i[9],i[10],0,0,0,0,1,e),e}getRotationMatrix(){let e=new n;return this.getRotationMatrixToRef(e),e}getRotationMatrixToRef(e){let t=We.Vector3[0];if(!this.decompose(t))return n.IdentityToRef(e),e;let i=this._m,r=1/t._x,s=1/t._y,a=1/t._z;return n.FromValuesToRef(i[0]*r,i[1]*r,i[2]*r,0,i[4]*s,i[5]*s,i[6]*s,0,i[8]*a,i[9]*a,i[10]*a,0,0,0,0,1,e),e}toggleModelMatrixHandInPlace(){let e=this._m;return e[2]*=-1,e[6]*=-1,e[8]*=-1,e[9]*=-1,e[14]*=-1,this.markAsUpdated(),this}toggleProjectionMatrixHandInPlace(){let e=this._m;return e[8]*=-1,e[9]*=-1,e[10]*=-1,e[11]*=-1,this.markAsUpdated(),this}static FromArray(e,t=0){let i=new n;return n.FromArrayToRef(e,t,i),i}static FromArrayToRef(e,t,i){for(let r=0;r<16;r++)i._m[r]=e[r+t];return i.markAsUpdated(),i}static FromFloat32ArrayToRefScaled(e,t,i,r){return r._m[0]=e[0+t]*i,r._m[1]=e[1+t]*i,r._m[2]=e[2+t]*i,r._m[3]=e[3+t]*i,r._m[4]=e[4+t]*i,r._m[5]=e[5+t]*i,r._m[6]=e[6+t]*i,r._m[7]=e[7+t]*i,r._m[8]=e[8+t]*i,r._m[9]=e[9+t]*i,r._m[10]=e[10+t]*i,r._m[11]=e[11+t]*i,r._m[12]=e[12+t]*i,r._m[13]=e[13+t]*i,r._m[14]=e[14+t]*i,r._m[15]=e[15+t]*i,r.markAsUpdated(),r}static get IdentityReadOnly(){return n._IdentityReadOnly}static FromValuesToRef(e,t,i,r,s,a,o,l,c,f,h,d,u,m,_,p,g){let v=g._m;v[0]=e,v[1]=t,v[2]=i,v[3]=r,v[4]=s,v[5]=a,v[6]=o,v[7]=l,v[8]=c,v[9]=f,v[10]=h,v[11]=d,v[12]=u,v[13]=m,v[14]=_,v[15]=p,g.markAsUpdated()}static FromValues(e,t,i,r,s,a,o,l,c,f,h,d,u,m,_,p){let g=new n,v=g._m;return v[0]=e,v[1]=t,v[2]=i,v[3]=r,v[4]=s,v[5]=a,v[6]=o,v[7]=l,v[8]=c,v[9]=f,v[10]=h,v[11]=d,v[12]=u,v[13]=m,v[14]=_,v[15]=p,g.markAsUpdated(),g}static Compose(e,t,i){let r=new n;return n.ComposeToRef(e,t,i,r),r}static ComposeToRef(e,t,i,r){let s=r._m,a=t._x,o=t._y,l=t._z,c=t._w,f=a+a,h=o+o,d=l+l,u=a*f,m=a*h,_=a*d,p=o*h,g=o*d,v=l*d,x=c*f,A=c*h,E=c*d,T=e._x,R=e._y,I=e._z;return s[0]=(1-(p+v))*T,s[1]=(m+E)*T,s[2]=(_-A)*T,s[3]=0,s[4]=(m-E)*R,s[5]=(1-(u+v))*R,s[6]=(g+x)*R,s[7]=0,s[8]=(_+A)*I,s[9]=(g-x)*I,s[10]=(1-(u+p))*I,s[11]=0,s[12]=i._x,s[13]=i._y,s[14]=i._z,s[15]=1,r.markAsUpdated(),r}static Identity(){let e=n.FromValues(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return e._updateIdentityStatus(!0),e}static IdentityToRef(e){return n.FromValuesToRef(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,e),e._updateIdentityStatus(!0),e}static Zero(){let e=n.FromValues(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);return e._updateIdentityStatus(!1),e}static RotationX(e){let t=new n;return n.RotationXToRef(e,t),t}static Invert(e){let t=new n;return e.invertToRef(t),t}static RotationXToRef(e,t){let i=Math.sin(e),r=Math.cos(e);return n.FromValuesToRef(1,0,0,0,0,r,i,0,0,-i,r,0,0,0,0,1,t),t._updateIdentityStatus(r===1&&i===0),t}static RotationY(e){let t=new n;return n.RotationYToRef(e,t),t}static RotationYToRef(e,t){let i=Math.sin(e),r=Math.cos(e);return n.FromValuesToRef(r,0,-i,0,0,1,0,0,i,0,r,0,0,0,0,1,t),t._updateIdentityStatus(r===1&&i===0),t}static RotationZ(e){let t=new n;return n.RotationZToRef(e,t),t}static RotationZToRef(e,t){let i=Math.sin(e),r=Math.cos(e);return n.FromValuesToRef(r,i,0,0,-i,r,0,0,0,0,1,0,0,0,0,1,t),t._updateIdentityStatus(r===1&&i===0),t}static RotationAxis(e,t){let i=new n;return n.RotationAxisToRef(e,t,i),i}static RotationAxisToRef(e,t,i){let r=Math.sin(-t),s=Math.cos(-t),a=1-s;e=e.normalizeToRef(We.Vector3[0]);let o=i._m;return o[0]=e._x*e._x*a+s,o[1]=e._x*e._y*a-e._z*r,o[2]=e._x*e._z*a+e._y*r,o[3]=0,o[4]=e._y*e._x*a+e._z*r,o[5]=e._y*e._y*a+s,o[6]=e._y*e._z*a-e._x*r,o[7]=0,o[8]=e._z*e._x*a-e._y*r,o[9]=e._z*e._y*a+e._x*r,o[10]=e._z*e._z*a+s,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,i.markAsUpdated(),i}static RotationAlignToRef(e,t,i,r=!1){let s=b.Dot(t,e),a=i._m;if(s<-1+Nt)a[0]=-1,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=r?1:-1,a[6]=0,a[7]=0,a[8]=0,a[9]=0,a[10]=r?-1:1,a[11]=0;else{let o=b.Cross(t,e),l=1/(1+s);a[0]=o._x*o._x*l+s,a[1]=o._y*o._x*l-o._z,a[2]=o._z*o._x*l+o._y,a[3]=0,a[4]=o._x*o._y*l+o._z,a[5]=o._y*o._y*l+s,a[6]=o._z*o._y*l-o._x,a[7]=0,a[8]=o._x*o._z*l-o._y,a[9]=o._y*o._z*l+o._x,a[10]=o._z*o._z*l+s,a[11]=0}return a[12]=0,a[13]=0,a[14]=0,a[15]=1,i.markAsUpdated(),i}static RotationYawPitchRoll(e,t,i){let r=new n;return n.RotationYawPitchRollToRef(e,t,i,r),r}static RotationYawPitchRollToRef(e,t,i,r){return ze.RotationYawPitchRollToRef(e,t,i,We.Quaternion[0]),We.Quaternion[0].toRotationMatrix(r),r}static Scaling(e,t,i){let r=new n;return n.ScalingToRef(e,t,i,r),r}static ScalingToRef(e,t,i,r){return n.FromValuesToRef(e,0,0,0,0,t,0,0,0,0,i,0,0,0,0,1,r),r._updateIdentityStatus(e===1&&t===1&&i===1),r}static Translation(e,t,i){let r=new n;return n.TranslationToRef(e,t,i,r),r}static TranslationToRef(e,t,i,r){return n.FromValuesToRef(1,0,0,0,0,1,0,0,0,0,1,0,e,t,i,1,r),r._updateIdentityStatus(e===0&&t===0&&i===0),r}static Lerp(e,t,i){let r=new n;return n.LerpToRef(e,t,i,r),r}static LerpToRef(e,t,i,r){let s=r._m,a=e.m,o=t.m;for(let l=0;l<16;l++)s[l]=a[l]*(1-i)+o[l]*i;return r.markAsUpdated(),r}static DecomposeLerp(e,t,i){let r=new n;return n.DecomposeLerpToRef(e,t,i,r),r}static DecomposeLerpToRef(e,t,i,r){let s=We.Vector3[0],a=We.Quaternion[0],o=We.Vector3[1];e.decompose(s,a,o);let l=We.Vector3[2],c=We.Quaternion[1],f=We.Vector3[3];t.decompose(l,c,f);let h=We.Vector3[4];b.LerpToRef(s,l,i,h);let d=We.Quaternion[2];ze.SlerpToRef(a,c,i,d);let u=We.Vector3[5];return b.LerpToRef(o,f,i,u),n.ComposeToRef(h,d,u,r),r}static LookAtLH(e,t,i){let r=new n;return n.LookAtLHToRef(e,t,i,r),r}static LookAtLHToRef(e,t,i,r){let s=We.Vector3[0],a=We.Vector3[1],o=We.Vector3[2];t.subtractToRef(e,o),o.normalize(),b.CrossToRef(i,o,s);let l=s.lengthSquared();l===0?s.x=1:s.normalizeFromLength(Math.sqrt(l)),b.CrossToRef(o,s,a),a.normalize();let c=-b.Dot(s,e),f=-b.Dot(a,e),h=-b.Dot(o,e);return n.FromValuesToRef(s._x,a._x,o._x,0,s._y,a._y,o._y,0,s._z,a._z,o._z,0,c,f,h,1,r),r}static LookAtRH(e,t,i){let r=new n;return n.LookAtRHToRef(e,t,i,r),r}static LookAtRHToRef(e,t,i,r){let s=We.Vector3[0],a=We.Vector3[1],o=We.Vector3[2];e.subtractToRef(t,o),o.normalize(),b.CrossToRef(i,o,s);let l=s.lengthSquared();l===0?s.x=1:s.normalizeFromLength(Math.sqrt(l)),b.CrossToRef(o,s,a),a.normalize();let c=-b.Dot(s,e),f=-b.Dot(a,e),h=-b.Dot(o,e);return n.FromValuesToRef(s._x,a._x,o._x,0,s._y,a._y,o._y,0,s._z,a._z,o._z,0,c,f,h,1,r),r}static LookDirectionLH(e,t){let i=new n;return n.LookDirectionLHToRef(e,t,i),i}static LookDirectionLHToRef(e,t,i){let r=We.Vector3[0];r.copyFrom(e),r.scaleInPlace(-1);let s=We.Vector3[1];return b.CrossToRef(t,r,s),n.FromValuesToRef(s._x,s._y,s._z,0,t._x,t._y,t._z,0,r._x,r._y,r._z,0,0,0,0,1,i),i}static LookDirectionRH(e,t){let i=new n;return n.LookDirectionRHToRef(e,t,i),i}static LookDirectionRHToRef(e,t,i){let r=We.Vector3[2];return b.CrossToRef(t,e,r),n.FromValuesToRef(r._x,r._y,r._z,0,t._x,t._y,t._z,0,e._x,e._y,e._z,0,0,0,0,1,i),i}static OrthoLH(e,t,i,r,s){let a=new n;return n.OrthoLHToRef(e,t,i,r,a,s),a}static OrthoLHToRef(e,t,i,r,s,a){let o=i,l=r,c=2/e,f=2/t,h=2/(l-o),d=-(l+o)/(l-o);return n.FromValuesToRef(c,0,0,0,0,f,0,0,0,0,h,0,0,0,d,1,s),a&&s.multiplyToRef(bh,s),s._updateIdentityStatus(c===1&&f===1&&h===1&&d===0),s}static OrthoOffCenterLH(e,t,i,r,s,a,o){let l=new n;return n.OrthoOffCenterLHToRef(e,t,i,r,s,a,l,o),l}static OrthoOffCenterLHToRef(e,t,i,r,s,a,o,l){let c=s,f=a,h=2/(t-e),d=2/(r-i),u=2/(f-c),m=-(f+c)/(f-c),_=(e+t)/(e-t),p=(r+i)/(i-r);return n.FromValuesToRef(h,0,0,0,0,d,0,0,0,0,u,0,_,p,m,1,o),l&&o.multiplyToRef(bh,o),o.markAsUpdated(),o}static ObliqueOffCenterLHToRef(e,t,i,r,s,a,o,l,c,f,h){let d=-o*Math.cos(l),u=-o*Math.sin(l);return n.TranslationToRef(0,0,-c,We.Matrix[1]),n.FromValuesToRef(1,0,0,0,0,1,0,0,d,u,1,0,0,0,0,1,We.Matrix[0]),We.Matrix[1].multiplyToRef(We.Matrix[0],We.Matrix[0]),n.TranslationToRef(0,0,c,We.Matrix[1]),We.Matrix[0].multiplyToRef(We.Matrix[1],We.Matrix[0]),n.OrthoOffCenterLHToRef(e,t,i,r,s,a,f,h),We.Matrix[0].multiplyToRef(f,f),f}static OrthoOffCenterRH(e,t,i,r,s,a,o){let l=new n;return n.OrthoOffCenterRHToRef(e,t,i,r,s,a,l,o),l}static OrthoOffCenterRHToRef(e,t,i,r,s,a,o,l){return n.OrthoOffCenterLHToRef(e,t,i,r,s,a,o,l),o._m[10]*=-1,o}static ObliqueOffCenterRHToRef(e,t,i,r,s,a,o,l,c,f,h){let d=o*Math.cos(l),u=o*Math.sin(l);return n.TranslationToRef(0,0,c,We.Matrix[1]),n.FromValuesToRef(1,0,0,0,0,1,0,0,d,u,1,0,0,0,0,1,We.Matrix[0]),We.Matrix[1].multiplyToRef(We.Matrix[0],We.Matrix[0]),n.TranslationToRef(0,0,-c,We.Matrix[1]),We.Matrix[0].multiplyToRef(We.Matrix[1],We.Matrix[0]),n.OrthoOffCenterRHToRef(e,t,i,r,s,a,f,h),We.Matrix[0].multiplyToRef(f,f),f}static PerspectiveLH(e,t,i,r,s,a=0){let o=new n,l=i,c=r,f=2*l/e,h=2*l/t,d=(c+l)/(c-l),u=-2*c*l/(c-l),m=Math.tan(a);return n.FromValuesToRef(f,0,0,0,0,h,0,m,0,0,d,1,0,0,u,0,o),s&&o.multiplyToRef(bh,o),o._updateIdentityStatus(!1),o}static PerspectiveFovLH(e,t,i,r,s,a=0,o=!1){let l=new n;return n.PerspectiveFovLHToRef(e,t,i,r,l,!0,s,a,o),l}static PerspectiveFovLHToRef(e,t,i,r,s,a=!0,o,l=0,c=!1){let f=i,h=r,d=1/Math.tan(e*.5),u=a?d/t:d,m=a?d:d*t,_=c&&f===0?-1:h!==0?(h+f)/(h-f):1,p=c&&f===0?2*h:h!==0?-2*h*f/(h-f):-2*f,g=Math.tan(l);return n.FromValuesToRef(u,0,0,0,0,m,0,g,0,0,_,1,0,0,p,0,s),o&&s.multiplyToRef(bh,s),s._updateIdentityStatus(!1),s}static PerspectiveFovReverseLHToRef(e,t,i,r,s,a=!0,o,l=0){let c=1/Math.tan(e*.5),f=a?c/t:c,h=a?c:c*t,d=Math.tan(l);return n.FromValuesToRef(f,0,0,0,0,h,0,d,0,0,-i,1,0,0,1,0,s),o&&s.multiplyToRef(bh,s),s._updateIdentityStatus(!1),s}static PerspectiveFovRH(e,t,i,r,s,a=0,o=!1){let l=new n;return n.PerspectiveFovRHToRef(e,t,i,r,l,!0,s,a,o),l}static PerspectiveFovRHToRef(e,t,i,r,s,a=!0,o,l=0,c=!1){let f=i,h=r,d=1/Math.tan(e*.5),u=a?d/t:d,m=a?d:d*t,_=c&&f===0?1:h!==0?-(h+f)/(h-f):-1,p=c&&f===0?2*h:h!==0?-2*h*f/(h-f):-2*f,g=Math.tan(l);return n.FromValuesToRef(u,0,0,0,0,m,0,g,0,0,_,-1,0,0,p,0,s),o&&s.multiplyToRef(bh,s),s._updateIdentityStatus(!1),s}static PerspectiveFovReverseRHToRef(e,t,i,r,s,a=!0,o,l=0){let c=1/Math.tan(e*.5),f=a?c/t:c,h=a?c:c*t,d=Math.tan(l);return n.FromValuesToRef(f,0,0,0,0,h,0,d,0,0,-i,-1,0,0,-1,0,s),o&&s.multiplyToRef(bh,s),s._updateIdentityStatus(!1),s}static GetFinalMatrix(e,t,i,r,s,a){let o=e.width,l=e.height,c=e.x,f=e.y,h=n.FromValues(o/2,0,0,0,0,-l/2,0,0,0,0,a-s,0,c+o/2,l/2+f,s,1),d=new n;return t.multiplyToRef(i,d),d.multiplyToRef(r,d),d.multiplyToRef(h,d)}static GetAsMatrix2x2(e){let t=e.m,i=[t[0],t[1],t[4],t[5]];return Gn.MatrixUse64Bits?i:new Float32Array(i)}static GetAsMatrix3x3(e){let t=e.m,i=[t[0],t[1],t[2],t[4],t[5],t[6],t[8],t[9],t[10]];return Gn.MatrixUse64Bits?i:new Float32Array(i)}static Transpose(e){let t=new n;return n.TransposeToRef(e,t),t}static TransposeToRef(e,t){let i=e.m,r=i[0],s=i[4],a=i[8],o=i[12],l=i[1],c=i[5],f=i[9],h=i[13],d=i[2],u=i[6],m=i[10],_=i[14],p=i[3],g=i[7],v=i[11],x=i[15],A=t._m;return A[0]=r,A[1]=s,A[2]=a,A[3]=o,A[4]=l,A[5]=c,A[6]=f,A[7]=h,A[8]=d,A[9]=u,A[10]=m,A[11]=_,A[12]=p,A[13]=g,A[14]=v,A[15]=x,t.markAsUpdated(),t._updateIdentityStatus(e._isIdentity,e._isIdentityDirty),t}static Reflection(e){let t=new n;return n.ReflectionToRef(e,t),t}static ReflectionToRef(e,t){e.normalize();let i=e.normal.x,r=e.normal.y,s=e.normal.z,a=-2*i,o=-2*r,l=-2*s;return n.FromValuesToRef(a*i+1,o*i,l*i,0,a*r,o*r+1,l*r,0,a*s,o*s,l*s+1,0,a*e.d,o*e.d,l*e.d,1,t),t}static FromXYZAxesToRef(e,t,i,r){return n.FromValuesToRef(e._x,e._y,e._z,0,t._x,t._y,t._z,0,i._x,i._y,i._z,0,0,0,0,1,r),r}static FromQuaternionToRef(e,t){let i=e._x*e._x,r=e._y*e._y,s=e._z*e._z,a=e._x*e._y,o=e._z*e._w,l=e._z*e._x,c=e._y*e._w,f=e._y*e._z,h=e._x*e._w;return t._m[0]=1-2*(r+s),t._m[1]=2*(a+o),t._m[2]=2*(l-c),t._m[3]=0,t._m[4]=2*(a-o),t._m[5]=1-2*(s+i),t._m[6]=2*(f+h),t._m[7]=0,t._m[8]=2*(l+c),t._m[9]=2*(f-h),t._m[10]=1-2*(r+i),t._m[11]=0,t._m[12]=0,t._m[13]=0,t._m[14]=0,t._m[15]=1,t.markAsUpdated(),t}};K._IdentityReadOnly=K.Identity();Object.defineProperties(K.prototype,{dimension:{value:[4,4]},rank:{value:2}});We=class{};We.Vector3=Pl(11,b.Zero);We.Matrix=Pl(2,K.Identity);We.Quaternion=Pl(3,ze.Zero);Z=class{};Z.Vector2=Pl(3,Ne.Zero);Z.Vector3=Pl(13,b.Zero);Z.Vector4=Pl(3,Mi.Zero);Z.Quaternion=Pl(3,ze.Zero);Z.Matrix=Pl(8,K.Identity);wt("BABYLON.Vector2",Ne);wt("BABYLON.Vector3",b);wt("BABYLON.Vector4",Mi);wt("BABYLON.Matrix",K);bh=K.FromValues(1,0,0,0,0,1,0,0,0,0,.5,0,0,0,.5,1)});var T3,ds,A3,Iu=C(()=>{Ve();(function(n){n[n.LOCAL=0]="LOCAL",n[n.WORLD=1]="WORLD",n[n.BONE=2]="BONE"})(T3||(T3={}));ds=class{};ds.X=new b(1,0,0);ds.Y=new b(0,1,0);ds.Z=new b(0,0,1);(function(n){n[n.X=0]="X",n[n.Y=1]="Y",n[n.Z=2]="Z"})(A3||(A3={}))});function Mu(n){return Math.pow(n,Ru)}function Cu(n){return n<=.04045?.0773993808*n:Math.pow(.947867299*(n+.055),2.4)}function yu(n){return Math.pow(n,m3)}function Pu(n){return n<=.0031308?12.92*n:1.055*Math.pow(n,.41666)-.055}var Te,lt,un,Ht=C(()=>{Ho();Vi();An();xn();Te=class n{constructor(e=0,t=0,i=0){this.r=e,this.g=t,this.b=i}toString(){return"{R: "+this.r+" G:"+this.g+" B:"+this.b+"}"}getClassName(){return"Color3"}getHashCode(){let e=this.r*255|0;return e=e*397^(this.g*255|0),e=e*397^(this.b*255|0),e}toArray(e,t=0){return e[t]=this.r,e[t+1]=this.g,e[t+2]=this.b,this}fromArray(e,t=0){return n.FromArrayToRef(e,t,this),this}toColor4(e=1){return new lt(this.r,this.g,this.b,e)}asArray(){return[this.r,this.g,this.b]}toLuminance(){return this.r*.3+this.g*.59+this.b*.11}multiply(e){return new n(this.r*e.r,this.g*e.g,this.b*e.b)}multiplyToRef(e,t){return t.r=this.r*e.r,t.g=this.g*e.g,t.b=this.b*e.b,t}multiplyInPlace(e){return this.r*=e.r,this.g*=e.g,this.b*=e.b,this}multiplyByFloats(e,t,i){return new n(this.r*e,this.g*t,this.b*i)}divide(e){throw new ReferenceError("Can not divide a color")}divideToRef(e,t){throw new ReferenceError("Can not divide a color")}divideInPlace(e){throw new ReferenceError("Can not divide a color")}minimizeInPlace(e){return this.minimizeInPlaceFromFloats(e.r,e.g,e.b)}maximizeInPlace(e){return this.maximizeInPlaceFromFloats(e.r,e.g,e.b)}minimizeInPlaceFromFloats(e,t,i){return this.r=Math.min(e,this.r),this.g=Math.min(t,this.g),this.b=Math.min(i,this.b),this}maximizeInPlaceFromFloats(e,t,i){return this.r=Math.max(e,this.r),this.g=Math.max(t,this.g),this.b=Math.max(i,this.b),this}floorToRef(e){throw new ReferenceError("Can not floor a color")}floor(){throw new ReferenceError("Can not floor a color")}fractToRef(e){throw new ReferenceError("Can not fract a color")}fract(){throw new ReferenceError("Can not fract a color")}equals(e){return e&&this.r===e.r&&this.g===e.g&&this.b===e.b}equalsFloats(e,t,i){return this.equalsToFloats(e,t,i)}equalsToFloats(e,t,i){return this.r===e&&this.g===t&&this.b===i}equalsWithEpsilon(e,t=Nt){return Ei(this.r,e.r,t)&&Ei(this.g,e.g,t)&&Ei(this.b,e.b,t)}negate(){throw new ReferenceError("Can not negate a color")}negateInPlace(){throw new ReferenceError("Can not negate a color")}negateToRef(e){throw new ReferenceError("Can not negate a color")}scale(e){return new n(this.r*e,this.g*e,this.b*e)}scaleInPlace(e){return this.r*=e,this.g*=e,this.b*=e,this}scaleToRef(e,t){return t.r=this.r*e,t.g=this.g*e,t.b=this.b*e,t}scaleAndAddToRef(e,t){return t.r+=this.r*e,t.g+=this.g*e,t.b+=this.b*e,t}clampToRef(e=0,t=1,i){return i.r=Ft(this.r,e,t),i.g=Ft(this.g,e,t),i.b=Ft(this.b,e,t),i}add(e){return new n(this.r+e.r,this.g+e.g,this.b+e.b)}addInPlace(e){return this.r+=e.r,this.g+=e.g,this.b+=e.b,this}addInPlaceFromFloats(e,t,i){return this.r+=e,this.g+=t,this.b+=i,this}addToRef(e,t){return t.r=this.r+e.r,t.g=this.g+e.g,t.b=this.b+e.b,t}subtract(e){return new n(this.r-e.r,this.g-e.g,this.b-e.b)}subtractToRef(e,t){return t.r=this.r-e.r,t.g=this.g-e.g,t.b=this.b-e.b,t}subtractInPlace(e){return this.r-=e.r,this.g-=e.g,this.b-=e.b,this}subtractFromFloats(e,t,i){return new n(this.r-e,this.g-t,this.b-i)}subtractFromFloatsToRef(e,t,i,r){return r.r=this.r-e,r.g=this.g-t,r.b=this.b-i,r}clone(){return new n(this.r,this.g,this.b)}copyFrom(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copyFromFloats(e,t,i){return this.r=e,this.g=t,this.b=i,this}set(e,t,i){return this.copyFromFloats(e,t,i)}setAll(e){return this.r=this.g=this.b=e,this}toHexString(){let e=Math.round(this.r*255),t=Math.round(this.g*255),i=Math.round(this.b*255);return"#"+ja(e)+ja(t)+ja(i)}fromHexString(e){return e.substring(0,1)!=="#"||e.length!==7?this:(this.r=parseInt(e.substring(1,3),16)/255,this.g=parseInt(e.substring(3,5),16)/255,this.b=parseInt(e.substring(5,7),16)/255,this)}toHSV(){return this.toHSVToRef(new n)}toHSVToRef(e){let t=this.r,i=this.g,r=this.b,s=Math.max(t,i,r),a=Math.min(t,i,r),o=0,l=0,c=s,f=s-a;return s!==0&&(l=f/s),s!=a&&(s==t?(o=(i-r)/f,i=0&&a<=1?(l=s,c=o):a>=1&&a<=2?(l=o,c=s):a>=2&&a<=3?(c=s,f=o):a>=3&&a<=4?(c=o,f=s):a>=4&&a<=5?(l=o,f=s):a>=5&&a<=6&&(l=s,f=o);let h=i-s;return r.r=l+h,r.g=c+h,r.b=f+h,r}static FromHSV(e,t,i){let r=new n(0,0,0);return n.HSVtoRGBToRef(e,t,i,r),r}static FromHexString(e){return new n(0,0,0).fromHexString(e)}static FromArray(e,t=0){return new n(e[t],e[t+1],e[t+2])}static FromArrayToRef(e,t=0,i){i.r=e[t],i.g=e[t+1],i.b=e[t+2]}static FromInts(e,t,i){return new n(e/255,t/255,i/255)}static Lerp(e,t,i){let r=new n(0,0,0);return n.LerpToRef(e,t,i,r),r}static LerpToRef(e,t,i,r){r.r=e.r+(t.r-e.r)*i,r.g=e.g+(t.g-e.g)*i,r.b=e.b+(t.b-e.b)*i}static Hermite(e,t,i,r,s){let a=s*s,o=s*a,l=2*o-3*a+1,c=-2*o+3*a,f=o-2*a+s,h=o-a,d=e.r*l+i.r*c+t.r*f+r.r*h,u=e.g*l+i.g*c+t.g*f+r.g*h,m=e.b*l+i.b*c+t.b*f+r.b*h;return new n(d,u,m)}static Hermite1stDerivative(e,t,i,r,s){let a=n.Black();return this.Hermite1stDerivativeToRef(e,t,i,r,s,a),a}static Hermite1stDerivativeToRef(e,t,i,r,s,a){let o=s*s;a.r=(o-s)*6*e.r+(3*o-4*s+1)*t.r+(-o+s)*6*i.r+(3*o-2*s)*r.r,a.g=(o-s)*6*e.g+(3*o-4*s+1)*t.g+(-o+s)*6*i.g+(3*o-2*s)*r.g,a.b=(o-s)*6*e.b+(3*o-4*s+1)*t.b+(-o+s)*6*i.b+(3*o-2*s)*r.b}static Red(){return new n(1,0,0)}static Green(){return new n(0,1,0)}static Blue(){return new n(0,0,1)}static Black(){return new n(0,0,0)}static get BlackReadOnly(){return n._BlackReadOnly}static White(){return new n(1,1,1)}static Purple(){return new n(.5,0,.5)}static Magenta(){return new n(1,0,1)}static Yellow(){return new n(1,1,0)}static Gray(){return new n(.5,.5,.5)}static Teal(){return new n(0,1,1)}static Random(){return new n(Math.random(),Math.random(),Math.random())}};Te._V8PerformanceHack=new Te(.5,.5,.5);Te._BlackReadOnly=Te.Black();Object.defineProperties(Te.prototype,{dimension:{value:[3]},rank:{value:1}});lt=class n{constructor(e=0,t=0,i=0,r=1){this.r=e,this.g=t,this.b=i,this.a=r}asArray(){return[this.r,this.g,this.b,this.a]}toArray(e,t=0){return e[t]=this.r,e[t+1]=this.g,e[t+2]=this.b,e[t+3]=this.a,this}fromArray(e,t=0){return this.r=e[t],this.g=e[t+1],this.b=e[t+2],this.a=e[t+3],this}equals(e){return e&&this.r===e.r&&this.g===e.g&&this.b===e.b&&this.a===e.a}add(e){return new n(this.r+e.r,this.g+e.g,this.b+e.b,this.a+e.a)}addToRef(e,t){return t.r=this.r+e.r,t.g=this.g+e.g,t.b=this.b+e.b,t.a=this.a+e.a,t}addInPlace(e){return this.r+=e.r,this.g+=e.g,this.b+=e.b,this.a+=e.a,this}addInPlaceFromFloats(e,t,i,r){return this.r+=e,this.g+=t,this.b+=i,this.a+=r,this}subtract(e){return new n(this.r-e.r,this.g-e.g,this.b-e.b,this.a-e.a)}subtractToRef(e,t){return t.r=this.r-e.r,t.g=this.g-e.g,t.b=this.b-e.b,t.a=this.a-e.a,t}subtractInPlace(e){return this.r-=e.r,this.g-=e.g,this.b-=e.b,this.a-=e.a,this}subtractFromFloats(e,t,i,r){return new n(this.r-e,this.g-t,this.b-i,this.a-r)}subtractFromFloatsToRef(e,t,i,r,s){return s.r=this.r-e,s.g=this.g-t,s.b=this.b-i,s.a=this.a-r,s}scale(e){return new n(this.r*e,this.g*e,this.b*e,this.a*e)}scaleInPlace(e){return this.r*=e,this.g*=e,this.b*=e,this.a*=e,this}scaleToRef(e,t){return t.r=this.r*e,t.g=this.g*e,t.b=this.b*e,t.a=this.a*e,t}scaleAndAddToRef(e,t){return t.r+=this.r*e,t.g+=this.g*e,t.b+=this.b*e,t.a+=this.a*e,t}clampToRef(e=0,t=1,i){return i.r=Ft(this.r,e,t),i.g=Ft(this.g,e,t),i.b=Ft(this.b,e,t),i.a=Ft(this.a,e,t),i}multiply(e){return new n(this.r*e.r,this.g*e.g,this.b*e.b,this.a*e.a)}multiplyToRef(e,t){return t.r=this.r*e.r,t.g=this.g*e.g,t.b=this.b*e.b,t.a=this.a*e.a,t}multiplyInPlace(e){return this.r*=e.r,this.g*=e.g,this.b*=e.b,this.a*=e.a,this}multiplyByFloats(e,t,i,r){return new n(this.r*e,this.g*t,this.b*i,this.a*r)}divide(e){throw new ReferenceError("Can not divide a color")}divideToRef(e,t){throw new ReferenceError("Can not divide a color")}divideInPlace(e){throw new ReferenceError("Can not divide a color")}minimizeInPlace(e){return this.r=Math.min(this.r,e.r),this.g=Math.min(this.g,e.g),this.b=Math.min(this.b,e.b),this.a=Math.min(this.a,e.a),this}maximizeInPlace(e){return this.r=Math.max(this.r,e.r),this.g=Math.max(this.g,e.g),this.b=Math.max(this.b,e.b),this.a=Math.max(this.a,e.a),this}minimizeInPlaceFromFloats(e,t,i,r){return this.r=Math.min(e,this.r),this.g=Math.min(t,this.g),this.b=Math.min(i,this.b),this.a=Math.min(r,this.a),this}maximizeInPlaceFromFloats(e,t,i,r){return this.r=Math.max(e,this.r),this.g=Math.max(t,this.g),this.b=Math.max(i,this.b),this.a=Math.max(r,this.a),this}floorToRef(e){throw new ReferenceError("Can not floor a color")}floor(){throw new ReferenceError("Can not floor a color")}fractToRef(e){throw new ReferenceError("Can not fract a color")}fract(){throw new ReferenceError("Can not fract a color")}negate(){throw new ReferenceError("Can not negate a color")}negateInPlace(){throw new ReferenceError("Can not negate a color")}negateToRef(e){throw new ReferenceError("Can not negate a color")}equalsWithEpsilon(e,t=Nt){return Ei(this.r,e.r,t)&&Ei(this.g,e.g,t)&&Ei(this.b,e.b,t)&&Ei(this.a,e.a,t)}equalsToFloats(e,t,i,r){return this.r===e&&this.g===t&&this.b===i&&this.a===r}toString(){return"{R: "+this.r+" G:"+this.g+" B:"+this.b+" A:"+this.a+"}"}getClassName(){return"Color4"}getHashCode(){let e=this.r*255|0;return e=e*397^(this.g*255|0),e=e*397^(this.b*255|0),e=e*397^(this.a*255|0),e}clone(){return new n().copyFrom(this)}copyFrom(e){return this.r=e.r,this.g=e.g,this.b=e.b,this.a=e.a,this}copyFromFloats(e,t,i,r){return this.r=e,this.g=t,this.b=i,this.a=r,this}set(e,t,i,r){return this.copyFromFloats(e,t,i,r)}setAll(e){return this.r=this.g=this.b=this.a=e,this}toHexString(e=!1){let t=Math.round(this.r*255),i=Math.round(this.g*255),r=Math.round(this.b*255);if(e)return"#"+ja(t)+ja(i)+ja(r);let s=Math.round(this.a*255);return"#"+ja(t)+ja(i)+ja(r)+ja(s)}fromHexString(e){return e.substring(0,1)!=="#"||e.length!==9&&e.length!==7?this:(this.r=parseInt(e.substring(1,3),16)/255,this.g=parseInt(e.substring(3,5),16)/255,this.b=parseInt(e.substring(5,7),16)/255,e.length===9&&(this.a=parseInt(e.substring(7,9),16)/255),this)}toLinearSpace(e=!1){let t=new n;return this.toLinearSpaceToRef(t,e),t}toLinearSpaceToRef(e,t=!1){return t?(e.r=Cu(this.r),e.g=Cu(this.g),e.b=Cu(this.b)):(e.r=Mu(this.r),e.g=Mu(this.g),e.b=Mu(this.b)),e.a=this.a,this}toGammaSpace(e=!1){let t=new n;return this.toGammaSpaceToRef(t,e),t}toGammaSpaceToRef(e,t=!1){return t?(e.r=Pu(this.r),e.g=Pu(this.g),e.b=Pu(this.b)):(e.r=yu(this.r),e.g=yu(this.g),e.b=yu(this.b)),e.a=this.a,this}static FromHexString(e){return e.substring(0,1)!=="#"||e.length!==9&&e.length!==7?new n(0,0,0,0):new n(0,0,0,1).fromHexString(e)}static Lerp(e,t,i){return n.LerpToRef(e,t,i,new n)}static LerpToRef(e,t,i,r){return r.r=e.r+(t.r-e.r)*i,r.g=e.g+(t.g-e.g)*i,r.b=e.b+(t.b-e.b)*i,r.a=e.a+(t.a-e.a)*i,r}static Hermite(e,t,i,r,s){let a=s*s,o=s*a,l=2*o-3*a+1,c=-2*o+3*a,f=o-2*a+s,h=o-a,d=e.r*l+i.r*c+t.r*f+r.r*h,u=e.g*l+i.g*c+t.g*f+r.g*h,m=e.b*l+i.b*c+t.b*f+r.b*h,_=e.a*l+i.a*c+t.a*f+r.a*h;return new n(d,u,m,_)}static Hermite1stDerivative(e,t,i,r,s){let a=new n;return this.Hermite1stDerivativeToRef(e,t,i,r,s,a),a}static Hermite1stDerivativeToRef(e,t,i,r,s,a){let o=s*s;a.r=(o-s)*6*e.r+(3*o-4*s+1)*t.r+(-o+s)*6*i.r+(3*o-2*s)*r.r,a.g=(o-s)*6*e.g+(3*o-4*s+1)*t.g+(-o+s)*6*i.g+(3*o-2*s)*r.g,a.b=(o-s)*6*e.b+(3*o-4*s+1)*t.b+(-o+s)*6*i.b+(3*o-2*s)*r.b,a.a=(o-s)*6*e.a+(3*o-4*s+1)*t.a+(-o+s)*6*i.a+(3*o-2*s)*r.a}static FromColor3(e,t=1){return new n(e.r,e.g,e.b,t)}static FromArray(e,t=0){return new n(e[t],e[t+1],e[t+2],e[t+3])}static FromArrayToRef(e,t=0,i){i.r=e[t],i.g=e[t+1],i.b=e[t+2],i.a=e[t+3]}static FromInts(e,t,i,r){return new n(e/255,t/255,i/255,r/255)}static CheckColors4(e,t){if(e.length===t*3){let i=[];for(let r=0;rnew lt(0,0,0,0));wt("BABYLON.Color3",Te);wt("BABYLON.Color4",lt)});var qa,Du=C(()=>{Ve();qa=class n{constructor(e,t,i,r){this.normal=new b(e,t,i),this.d=r}asArray(){return[this.normal.x,this.normal.y,this.normal.z,this.d]}clone(){return new n(this.normal.x,this.normal.y,this.normal.z,this.d)}getClassName(){return"Plane"}getHashCode(){let e=this.normal.getHashCode();return e=e*397^(this.d|0),e}normalize(){let e=Math.sqrt(this.normal.x*this.normal.x+this.normal.y*this.normal.y+this.normal.z*this.normal.z),t=0;return e!==0&&(t=1/e),this.normal.x*=t,this.normal.y*=t,this.normal.z*=t,this.d*=t,this}transform(e){let t=n._TmpMatrix;e.invertToRef(t);let i=t.m,r=this.normal.x,s=this.normal.y,a=this.normal.z,o=this.d,l=r*i[0]+s*i[1]+a*i[2]+o*i[3],c=r*i[4]+s*i[5]+a*i[6]+o*i[7],f=r*i[8]+s*i[9]+a*i[10]+o*i[11],h=r*i[12]+s*i[13]+a*i[14]+o*i[15];return new n(l,c,f,h)}dotCoordinate(e){return this.normal.x*e.x+this.normal.y*e.y+this.normal.z*e.z+this.d}copyFromPoints(e,t,i){let r=t.x-e.x,s=t.y-e.y,a=t.z-e.z,o=i.x-e.x,l=i.y-e.y,c=i.z-e.z,f=s*c-a*l,h=a*o-r*c,d=r*l-s*o,u=Math.sqrt(f*f+h*h+d*d),m;return u!==0?m=1/u:m=0,this.normal.x=f*m,this.normal.y=h*m,this.normal.z=d*m,this.d=-(this.normal.x*e.x+this.normal.y*e.y+this.normal.z*e.z),this}isFrontFacingTo(e,t){return b.Dot(this.normal,e)<=t}signedDistanceTo(e){return b.Dot(e,this.normal)+this.d}static FromArray(e){return new n(e[0],e[1],e[2],e[3])}static FromPoints(e,t,i){let r=new n(0,0,0,0);return r.copyFromPoints(e,t,i),r}static FromPositionAndNormal(e,t){let i=new n(0,0,0,0);return this.FromPositionAndNormalToRef(e,t,i)}static FromPositionAndNormalToRef(e,t,i){return i.normal.copyFrom(t),i.normal.normalize(),i.d=-e.dot(i.normal),i}static SignedDistanceToPlaneFromPositionAndNormal(e,t,i){let r=-(t.x*e.x+t.y*e.y+t.z*e.z);return b.Dot(i,t)+r}};qa._TmpMatrix=K.Identity()});var Zc,eT=C(()=>{Du();Zc=class n{static GetPlanes(e){let t=[];for(let i=0;i<6;i++)t.push(new qa(0,0,0,0));return n.GetPlanesToRef(e,t),t}static GetNearPlaneToRef(e,t){let i=e.m;t.normal.x=i[3]+i[2],t.normal.y=i[7]+i[6],t.normal.z=i[11]+i[10],t.d=i[15]+i[14],t.normalize()}static GetFarPlaneToRef(e,t){let i=e.m;t.normal.x=i[3]-i[2],t.normal.y=i[7]-i[6],t.normal.z=i[11]-i[10],t.d=i[15]-i[14],t.normalize()}static GetLeftPlaneToRef(e,t){let i=e.m;t.normal.x=i[3]+i[0],t.normal.y=i[7]+i[4],t.normal.z=i[11]+i[8],t.d=i[15]+i[12],t.normalize()}static GetRightPlaneToRef(e,t){let i=e.m;t.normal.x=i[3]-i[0],t.normal.y=i[7]-i[4],t.normal.z=i[11]-i[8],t.d=i[15]-i[12],t.normalize()}static GetTopPlaneToRef(e,t){let i=e.m;t.normal.x=i[3]-i[1],t.normal.y=i[7]-i[5],t.normal.z=i[11]-i[9],t.d=i[15]-i[13],t.normalize()}static GetBottomPlaneToRef(e,t){let i=e.m;t.normal.x=i[3]+i[1],t.normal.y=i[7]+i[5],t.normal.z=i[11]+i[9],t.d=i[15]+i[13],t.normalize()}static GetPlanesToRef(e,t){n.GetNearPlaneToRef(e,t[0]),n.GetFarPlaneToRef(e,t[1]),n.GetLeftPlaneToRef(e,t[2]),n.GetRightPlaneToRef(e,t[3]),n.GetTopPlaneToRef(e,t[4]),n.GetBottomPlaneToRef(e,t[5])}static IsPointInFrustum(e,t){for(let i=0;i<6;i++)if(t[i].dotCoordinate(e)<0)return!1;return!0}}});var x3,Lu,K0,Ou,Ih,Mh=C(()=>{xn();Ve();An();(function(n){n[n.CW=0]="CW",n[n.CCW=1]="CCW"})(x3||(x3={}));Lu=class n{constructor(e){this._radians=e,this._radians<0&&(this._radians+=2*Math.PI)}degrees(){return this._radians*180/Math.PI}radians(){return this._radians}static BetweenTwoPoints(e,t){let i=t.subtract(e),r=Math.atan2(i.y,i.x);return new n(r)}static BetweenTwoVectors(e,t){let i=e.lengthSquared()*t.lengthSquared();if(i===0)return new n(Math.PI/2);i=Math.sqrt(i);let r=e.dot(t)/i;r=Ft(r,-1,1);let s=Math.acos(r);return new n(s)}static FromRadians(e){return new n(e)}static FromDegrees(e){return new n(e*Math.PI/180)}},K0=class{constructor(e,t,i){this.startPoint=e,this.midPoint=t,this.endPoint=i;let r=Math.pow(t.x,2)+Math.pow(t.y,2),s=(Math.pow(e.x,2)+Math.pow(e.y,2)-r)/2,a=(r-Math.pow(i.x,2)-Math.pow(i.y,2))/2,o=(e.x-t.x)*(t.y-i.y)-(t.x-i.x)*(e.y-t.y);this.centerPoint=new Ne((s*(t.y-i.y)-a*(e.y-t.y))/o,((e.x-t.x)*a-(t.x-i.x)*s)/o),this.radius=this.centerPoint.subtract(this.startPoint).length(),this.startAngle=Lu.BetweenTwoPoints(this.centerPoint,this.startPoint);let l=this.startAngle.degrees(),c=Lu.BetweenTwoPoints(this.centerPoint,this.midPoint).degrees(),f=Lu.BetweenTwoPoints(this.centerPoint,this.endPoint).degrees();c-l>180&&(c-=360),c-l<-180&&(c+=360),f-c>180&&(f-=360),f-c<-180&&(f+=360),this.orientation=c-l<0?0:1,this.angle=Lu.FromDegrees(this.orientation===0?l-f:f-l)}},Ou=class n{constructor(e,t){this._points=new Array,this._length=0,this.closed=!1,this._points.push(new Ne(e,t))}addLineTo(e,t){if(this.closed)return this;let i=new Ne(e,t),r=this._points[this._points.length-1];return this._points.push(i),this._length+=i.subtract(r).length(),this}addArcTo(e,t,i,r,s=36){if(this.closed)return this;let a=this._points[this._points.length-1],o=new Ne(e,t),l=new Ne(i,r),c=new K0(a,o,l),f=c.angle.radians()/s;c.orientation===0&&(f*=-1);let h=c.startAngle.radians()+f;for(let d=0;d(1-l)*(1-l)*c+2*l*(1-l)*f+l*l*h,o=this._points[this._points.length-1];for(let l=0;l<=s;l++){let c=l/s,f=a(c,o.x,e,i),h=a(c,o.y,t,r);this.addLineTo(f,h)}return this}addBezierCurveTo(e,t,i,r,s,a,o=36){if(this.closed)return this;let l=(f,h,d,u,m)=>(1-f)*(1-f)*(1-f)*h+3*f*(1-f)*(1-f)*d+3*f*f*(1-f)*u+f*f*f*m,c=this._points[this._points.length-1];for(let f=0;f<=o;f++){let h=f/o,d=l(h,c.x,e,i,s),u=l(h,c.y,t,r,a);this.addLineTo(d,u)}return this}isPointInside(e){let t=!1,i=this._points.length;for(let r=i-1,s=0;sNumber.EPSILON){if(c<0&&(a=this._points[s],l=-l,o=this._points[r],c=-c),e.yo.y)continue;if(e.y===a.y&&e.x===a.x)return!0;{let f=c*(e.x-a.x)-l*(e.y-a.y);if(f===0)return!0;if(f<0)continue;t=!t}}else{if(e.y!==a.y)continue;if(o.x<=e.x&&e.x<=a.x||a.x<=e.x&&e.x<=o.x)return!0}}return t}close(){return this.closed=!0,this}length(){let e=this._length;if(this.closed){let t=this._points[this._points.length-1],i=this._points[0];e+=i.subtract(t).length()}return e}area(){let e=this._points.length,t=0;for(let i=e-1,r=0;r1)return Ne.Zero();let t=e*this.length(),i=0;for(let r=0;r=i&&t<=c){let f=l.normalize(),h=t-i;return new Ne(a.x+f.x*h,a.y+f.y*h)}i=c}return Ne.Zero()}static StartingAt(e,t){return new n(e,t)}},Ih=class n{constructor(e,t=null,i,r=!1){this.path=e,this._curve=new Array,this._distances=new Array,this._tangents=new Array,this._normals=new Array,this._binormals=new Array,this._pointAtData={id:0,point:b.Zero(),previousPointArrayIndex:0,position:0,subPosition:0,interpolateReady:!1,interpolationMatrix:K.Identity()};for(let s=0;st){let c=e;e=t,t=c}let i=this.getCurve(),r=this.getPointAt(e),s=this.getPreviousPointIndexAt(e),a=this.getPointAt(t),o=this.getPreviousPointIndexAt(t)+1,l=[];return e!==0&&(s++,l.push(r)),l.push(...i.slice(s,o)),(t!==1||e===1)&&l.push(a),new n(l,this.getNormalAt(e),this._raw,this._alignTangentsWithPath)}update(e,t=null,i=!1){for(let r=0;rt+1;)t++,i=this._curve[e].subtract(this._curve[e-t]);return i}_normalVector(e,t){let i,r=e.length();if(r===0&&(r=1),t==null){let s;Ei(Math.abs(e.y)/r,1,Nt)?Ei(Math.abs(e.x)/r,1,Nt)?Ei(Math.abs(e.z)/r,1,Nt)?s=b.Zero():s=new b(0,0,1):s=new b(1,0,0):s=new b(0,-1,0),i=b.Cross(e,s)}else i=b.Cross(e,t),b.CrossToRef(i,e,i);return i.normalize(),i}_updatePointAtData(e,t=!1){if(this._pointAtData.id===e)return this._pointAtData.interpolateReady||this._updateInterpolationMatrix(),this._pointAtData;this._pointAtData.id=e;let i=this.getPoints();if(e<=0)return this._setPointAtData(0,0,i[0],0,t);if(e>=1)return this._setPointAtData(1,1,i[i.length-1],i.length-1,t);let r=i[0],s,a=0,o=e*this.length();for(let l=1;lo){let h=(a-o)/c,d=r.subtract(s),u=s.add(d.scaleInPlace(h));return this._setPointAtData(e,1-h,u,l-1,t)}r=s}return this._pointAtData}_setPointAtData(e,t,i,r,s){return this._pointAtData.point=i,this._pointAtData.position=e,this._pointAtData.subPosition=t,this._pointAtData.previousPointArrayIndex=r,this._pointAtData.interpolateReady=s,s&&this._updateInterpolationMatrix(),this._pointAtData}_updateInterpolationMatrix(){this._pointAtData.interpolationMatrix=K.Identity();let e=this._pointAtData.previousPointArrayIndex;if(e!==this._tangents.length-1){let t=e+1,i=this._tangents[e].clone(),r=this._normals[e].clone(),s=this._binormals[e].clone(),a=this._tangents[t].clone(),o=this._normals[t].clone(),l=this._binormals[t].clone(),c=ze.RotationQuaternionFromAxis(r,s,i),f=ze.RotationQuaternionFromAxis(o,l,a);ze.Slerp(c,f,this._pointAtData.subPosition).toRotationMatrix(this._pointAtData.interpolationMatrix)}}}});var Dl,tT=C(()=>{Dl=class n{constructor(e,t){this.width=e,this.height=t}toString(){return`{W: ${this.width}, H: ${this.height}}`}getClassName(){return"Size"}getHashCode(){let e=this.width|0;return e=e*397^(this.height|0),e}copyFrom(e){this.width=e.width,this.height=e.height}copyFromFloats(e,t){return this.width=e,this.height=t,this}set(e,t){return this.copyFromFloats(e,t)}multiplyByFloats(e,t){return new n(this.width*e,this.height*t)}clone(){return new n(this.width,this.height)}equals(e){return e?this.width===e.width&&this.height===e.height:!1}get surface(){return this.width*this.height}static Zero(){return new n(0,0)}add(e){return new n(this.width+e.width,this.height+e.height)}subtract(e){return new n(this.width-e.width,this.height-e.height)}scale(e){return new n(this.width*e,this.height*e)}static Lerp(e,t,i){let r=e.width+(t.width-e.width)*i,s=e.height+(t.height-e.height)*i;return new n(r,s)}}});var R3=C(()=>{Ve()});var Za,Nu=C(()=>{Za=class n{constructor(e,t,i,r){this.x=e,this.y=t,this.width=i,this.height=r}toGlobal(e,t){return new n(this.x*e,this.y*t,this.width*e,this.height*t)}toGlobalToRef(e,t,i){return i.x=this.x*e,i.y=this.y*t,i.width=this.width*e,i.height=this.height*t,this}clone(){return new n(this.x,this.y,this.width,this.height)}}});var b3=C(()=>{Iu();Ht();An();eT();Mh();Du();tT();Ve();R3();Nu()});var zo,$te,Ll,Ol,c_,Xo,f_=C(()=>{Ve();b3();zo=[Math.sqrt(1/(4*Math.PI)),-Math.sqrt(3/(4*Math.PI)),Math.sqrt(3/(4*Math.PI)),-Math.sqrt(3/(4*Math.PI)),Math.sqrt(15/(4*Math.PI)),-Math.sqrt(15/(4*Math.PI)),Math.sqrt(5/(16*Math.PI)),-Math.sqrt(15/(4*Math.PI)),Math.sqrt(15/(16*Math.PI))],$te=[()=>1,n=>n.y,n=>n.z,n=>n.x,n=>n.x*n.y,n=>n.y*n.z,n=>3*n.z*n.z-1,n=>n.x*n.z,n=>n.x*n.x-n.y*n.y],Ll=(n,e)=>zo[n]*$te[n](e),Ol=[Math.PI,2*Math.PI/3,2*Math.PI/3,2*Math.PI/3,Math.PI/4,Math.PI/4,Math.PI/4,Math.PI/4,Math.PI/4],c_=class n{constructor(){this.preScaled=!1,this.l00=b.Zero(),this.l1_1=b.Zero(),this.l10=b.Zero(),this.l11=b.Zero(),this.l2_2=b.Zero(),this.l2_1=b.Zero(),this.l20=b.Zero(),this.l21=b.Zero(),this.l22=b.Zero()}addLight(e,t,i){Z.Vector3[0].set(t.r,t.g,t.b);let r=Z.Vector3[0],s=Z.Vector3[1];r.scaleToRef(i,s),s.scaleToRef(Ll(0,e),Z.Vector3[2]),this.l00.addInPlace(Z.Vector3[2]),s.scaleToRef(Ll(1,e),Z.Vector3[2]),this.l1_1.addInPlace(Z.Vector3[2]),s.scaleToRef(Ll(2,e),Z.Vector3[2]),this.l10.addInPlace(Z.Vector3[2]),s.scaleToRef(Ll(3,e),Z.Vector3[2]),this.l11.addInPlace(Z.Vector3[2]),s.scaleToRef(Ll(4,e),Z.Vector3[2]),this.l2_2.addInPlace(Z.Vector3[2]),s.scaleToRef(Ll(5,e),Z.Vector3[2]),this.l2_1.addInPlace(Z.Vector3[2]),s.scaleToRef(Ll(6,e),Z.Vector3[2]),this.l20.addInPlace(Z.Vector3[2]),s.scaleToRef(Ll(7,e),Z.Vector3[2]),this.l21.addInPlace(Z.Vector3[2]),s.scaleToRef(Ll(8,e),Z.Vector3[2]),this.l22.addInPlace(Z.Vector3[2])}scaleInPlace(e){this.l00.scaleInPlace(e),this.l1_1.scaleInPlace(e),this.l10.scaleInPlace(e),this.l11.scaleInPlace(e),this.l2_2.scaleInPlace(e),this.l2_1.scaleInPlace(e),this.l20.scaleInPlace(e),this.l21.scaleInPlace(e),this.l22.scaleInPlace(e)}convertIncidentRadianceToIrradiance(){this.l00.scaleInPlace(Ol[0]),this.l1_1.scaleInPlace(Ol[1]),this.l10.scaleInPlace(Ol[2]),this.l11.scaleInPlace(Ol[3]),this.l2_2.scaleInPlace(Ol[4]),this.l2_1.scaleInPlace(Ol[5]),this.l20.scaleInPlace(Ol[6]),this.l21.scaleInPlace(Ol[7]),this.l22.scaleInPlace(Ol[8])}convertIrradianceToLambertianRadiance(){this.scaleInPlace(1/Math.PI)}preScaleForRendering(){this.preScaled=!0,this.l00.scaleInPlace(zo[0]),this.l1_1.scaleInPlace(zo[1]),this.l10.scaleInPlace(zo[2]),this.l11.scaleInPlace(zo[3]),this.l2_2.scaleInPlace(zo[4]),this.l2_1.scaleInPlace(zo[5]),this.l20.scaleInPlace(zo[6]),this.l21.scaleInPlace(zo[7]),this.l22.scaleInPlace(zo[8])}updateFromArray(e){return b.FromArrayToRef(e[0],0,this.l00),b.FromArrayToRef(e[1],0,this.l1_1),b.FromArrayToRef(e[2],0,this.l10),b.FromArrayToRef(e[3],0,this.l11),b.FromArrayToRef(e[4],0,this.l2_2),b.FromArrayToRef(e[5],0,this.l2_1),b.FromArrayToRef(e[6],0,this.l20),b.FromArrayToRef(e[7],0,this.l21),b.FromArrayToRef(e[8],0,this.l22),this}updateFromFloatsArray(e){return b.FromFloatsToRef(e[0],e[1],e[2],this.l00),b.FromFloatsToRef(e[3],e[4],e[5],this.l1_1),b.FromFloatsToRef(e[6],e[7],e[8],this.l10),b.FromFloatsToRef(e[9],e[10],e[11],this.l11),b.FromFloatsToRef(e[12],e[13],e[14],this.l2_2),b.FromFloatsToRef(e[15],e[16],e[17],this.l2_1),b.FromFloatsToRef(e[18],e[19],e[20],this.l20),b.FromFloatsToRef(e[21],e[22],e[23],this.l21),b.FromFloatsToRef(e[24],e[25],e[26],this.l22),this}static FromArray(e){return new n().updateFromArray(e)}static FromPolynomial(e){let t=new n;return t.l00=e.xx.scale(.376127).add(e.yy.scale(.376127)).add(e.zz.scale(.376126)),t.l1_1=e.y.scale(.977204),t.l10=e.z.scale(.977204),t.l11=e.x.scale(.977204),t.l2_2=e.xy.scale(1.16538),t.l2_1=e.yz.scale(1.16538),t.l20=e.zz.scale(1.34567).subtract(e.xx.scale(.672834)).subtract(e.yy.scale(.672834)),t.l21=e.zx.scale(1.16538),t.l22=e.xx.scale(1.16538).subtract(e.yy.scale(1.16538)),t.l1_1.scaleInPlace(-1),t.l11.scaleInPlace(-1),t.l2_1.scaleInPlace(-1),t.l21.scaleInPlace(-1),t.scaleInPlace(Math.PI),t}},Xo=class n{constructor(){this.x=b.Zero(),this.y=b.Zero(),this.z=b.Zero(),this.xx=b.Zero(),this.yy=b.Zero(),this.zz=b.Zero(),this.xy=b.Zero(),this.yz=b.Zero(),this.zx=b.Zero()}get preScaledHarmonics(){return this._harmonics||(this._harmonics=c_.FromPolynomial(this)),this._harmonics.preScaled||this._harmonics.preScaleForRendering(),this._harmonics}addAmbient(e){Z.Vector3[0].copyFromFloats(e.r,e.g,e.b);let t=Z.Vector3[0];this.xx.addInPlace(t),this.yy.addInPlace(t),this.zz.addInPlace(t)}scaleInPlace(e){this.x.scaleInPlace(e),this.y.scaleInPlace(e),this.z.scaleInPlace(e),this.xx.scaleInPlace(e),this.yy.scaleInPlace(e),this.zz.scaleInPlace(e),this.yz.scaleInPlace(e),this.zx.scaleInPlace(e),this.xy.scaleInPlace(e)}updateFromHarmonics(e){return this._harmonics=e,this.x.copyFrom(e.l11),this.x.scaleInPlace(1.02333).scaleInPlace(-1),this.y.copyFrom(e.l1_1),this.y.scaleInPlace(1.02333).scaleInPlace(-1),this.z.copyFrom(e.l10),this.z.scaleInPlace(1.02333),this.xx.copyFrom(e.l00),Z.Vector3[0].copyFrom(e.l20).scaleInPlace(.247708),Z.Vector3[1].copyFrom(e.l22).scaleInPlace(.429043),this.xx.scaleInPlace(.886277).subtractInPlace(Z.Vector3[0]).addInPlace(Z.Vector3[1]),this.yy.copyFrom(e.l00),this.yy.scaleInPlace(.886277).subtractInPlace(Z.Vector3[0]).subtractInPlace(Z.Vector3[1]),this.zz.copyFrom(e.l00),Z.Vector3[0].copyFrom(e.l20).scaleInPlace(.495417),this.zz.scaleInPlace(.886277).addInPlace(Z.Vector3[0]),this.yz.copyFrom(e.l2_1),this.yz.scaleInPlace(.858086).scaleInPlace(-1),this.zx.copyFrom(e.l21),this.zx.scaleInPlace(.858086).scaleInPlace(-1),this.xy.copyFrom(e.l2_2),this.xy.scaleInPlace(.858086),this.scaleInPlace(1/Math.PI),this}static FromHarmonics(e){return new n().updateFromHarmonics(e)}static FromArray(e){let t=new n;return b.FromArrayToRef(e[0],0,t.x),b.FromArrayToRef(e[1],0,t.y),b.FromArrayToRef(e[2],0,t.z),b.FromArrayToRef(e[3],0,t.xx),b.FromArrayToRef(e[4],0,t.yy),b.FromArrayToRef(e[5],0,t.zz),b.FromArrayToRef(e[6],0,t.yz),b.FromArrayToRef(e[7],0,t.zx),b.FromArrayToRef(e[8],0,t.xy),t}}});function P(n,e,t,i){var r=arguments.length,s=r<3?e:i===null?i=Object.getOwnPropertyDescriptor(e,t):i,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(n,e,t,i);else for(var o=n.length-1;o>=0;o--)(a=n[o])&&(s=(r<3?a(s):r>3?a(e,t,s):a(e,t))||s);return r>3&&s&&Object.defineProperty(e,t,s),s}var kt=C(()=>{});function I3(n){let e=n.getClassName();return rT[e]||(rT[e]={}),rT[e]}function nT(n){let e=n.getClassName();if(iT[e])return iT[e];iT[e]={};let t=iT[e],i=n,r=e;for(;r;){let s=rT[r];for(let l in s)t[l]=s[l];let a,o=!1;do{if(a=Object.getPrototypeOf(i),!a.getClassName){o=!0;break}if(a.getClassName()!==r)break;i=a}while(a);if(o)break;r=a.getClassName(),i=a}return t}var iT,rT,j0=C(()=>{iT={},rT={}});function ha(n,e){return(t,i)=>{let r=I3(t);r[i]||(r[i]={type:n,sourceName:e})}}function eie(n,e=null){return(t,i)=>{let r=e||"_"+i;Object.defineProperty(t,i,{get:function(){return this[r]},set:function(s){var a;typeof((a=this[r])==null?void 0:a.equals)=="function"&&this[r].equals(s)||this[r]!==s&&(this[r]=s,t[n].apply(this))},enumerable:!0,configurable:!0})}}function oe(n,e=null){return eie(n,e)}function F(n){return ha(0,n)}function Bt(n){return ha(1,n)}function dr(n){return ha(2,n)}function Fu(n){return ha(3,n)}function wu(n){return ha(4,n)}function Vr(n){return ha(5,n)}function sT(n){return ha(6,n)}function M3(n){return ha(7,n)}function Bu(n){return ha(8,n)}function C3(n){return ha(9,n)}function y3(n){return ha(10,n)}function P3(n){return ha(11,n)}function us(n,e,t,i){let r=t.value;t.value=(...s)=>{let a=r;if(typeof _native!="undefined"&&_native[e]){let o=_native[e];i?a=(...l)=>i(...l)?o(...l):r(...l):a=o}return n[e]=a,a(...s)}}function dt(n,e=null){return(t,i)=>{let r=i;Object.defineProperty(t,e||"",{get:function(){return this[r].value},set:function(a){var o,l;typeof((l=(o=this[r])==null?void 0:o.value)==null?void 0:l.equals)=="function"&&this[r].value.equals(a)||this[r].value!==a&&(this[r].value=a,t[n].apply(this))},enumerable:!0,configurable:!0})}}var Ut=C(()=>{j0();us.filter=function(n){return(e,t,i)=>us(e,t,i,n)}});function Qc(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,n=>{let e=Math.random()*16|0;return(n==="x"?e:e&3|8).toString(16)})}var h_=C(()=>{});function tie(){return typeof _native!="undefined"&&_native.XMLHttpRequest?new _native.XMLHttpRequest:new XMLHttpRequest}var Rr,Ch=C(()=>{Rr=class n{constructor(){this._xhr=tie(),this._requestURL=""}static get IsCustomRequestAvailable(){return Object.keys(n.CustomRequestHeaders).length>0||n.CustomRequestModifiers.length>0}static _CleanUrl(e){return e=e.replace("file:http:","http:"),e=e.replace("file:https:","https:"),e}static _ShouldSkipRequestModifications(e){return n.SkipRequestModificationForBabylonCDN&&(e.includes("preview.babylonjs.com")||e.includes("cdn.babylonjs.com"))}static _CollectCustomizations(e,t={}){let i={...t};if(n._ShouldSkipRequestModifications(e))return{url:e,headers:i};for(let s in n.CustomRequestHeaders){let a=n.CustomRequestHeaders[s];a&&(i[s]=a)}let r={setRequestHeader:(s,a)=>{i[s]=a}};for(let s of n.CustomRequestModifiers){if(n._ShouldSkipRequestModifications(e))break;let a=s(r,e);typeof a=="string"&&(e=a)}return{url:e,headers:i}}static async FetchAsync(e,t={}){var r,s,a;let i=(r=t.method)!=null?r:"GET";if(typeof fetch!="undefined"){let{url:o,headers:l}=n._CollectCustomizations(n._CleanUrl(e),(s=t.headers)!=null?s:{});return await fetch(o,{method:i,headers:l,body:(a=t.body)!=null?a:void 0})}return await new Promise((o,l)=>{var f;let c=new n;c.responseType="arraybuffer",c.addEventListener("readystatechange",()=>{if(c.readyState===4)if(c.status>=200&&c.status<300){let h=typeof Headers!="undefined"?new Headers:void 0,d=c.getResponseHeader("Content-Type");d&&h&&h.set("Content-Type",d),o(typeof Response!="undefined"?new Response(c.response,{status:c.status,statusText:c.statusText,headers:h}):{ok:!0,status:c.status,statusText:c.statusText,headers:{get:u=>c.getResponseHeader(u)},arrayBuffer:async()=>await Promise.resolve(c.response)})}else l(new Error(`HTTP ${c.status} loading '${c.requestURL}': ${c.statusText}`))}),c.open(i,e,t.headers),c.send((f=t.body)!=null?f:null)})}get requestURL(){return this._requestURL}get onprogress(){return this._xhr.onprogress}set onprogress(e){this._xhr.onprogress=e}get readyState(){return this._xhr.readyState}get status(){return this._xhr.status}get statusText(){return this._xhr.statusText}get response(){return this._xhr.response}get responseURL(){return this._xhr.responseURL}get responseText(){return this._xhr.responseText}get responseType(){return this._xhr.responseType}set responseType(e){this._xhr.responseType=e}get timeout(){return this._xhr.timeout}set timeout(e){this._xhr.timeout=e}addEventListener(e,t,i){this._xhr.addEventListener(e,t,i)}removeEventListener(e,t,i){this._xhr.removeEventListener(e,t,i)}abort(){this._xhr.abort()}send(e){this._xhr.send(e)}open(e,t,i){let{url:r,headers:s}=n._CollectCustomizations(t,i);this._requestURL=n._CleanUrl(r),this._xhr.open(e,this._requestURL,!0);for(let a in s)this._xhr.setRequestHeader(a,s[a])}setRequestHeader(e,t){this._xhr.setRequestHeader(e,t)}getResponseHeader(e){return this._xhr.getResponseHeader(e)}};Rr.CustomRequestHeaders={};Rr.CustomRequestModifiers=new Array;Rr.SkipRequestModificationForBabylonCDN=!0});var Jc,D3=C(()=>{Jc=class{};Jc.FilesToLoad={}});var aT,L3=C(()=>{aT=class{static ExponentialBackoff(e=3,t=500){return(i,r,s)=>r.status!==0||s>=e||i.indexOf("file:")!==-1?-1:Math.pow(2,s)*t}}});var Nl,da,ms,d_=C(()=>{Nl=class extends Error{};Nl._setPrototypeOf=Object.setPrototypeOf||((n,e)=>(n.__proto__=e,n));da={MeshInvalidPositionsError:0,UnsupportedTextureError:1e3,GLTFLoaderUnexpectedMagicError:2e3,SceneLoaderError:3e3,LoadFileError:4e3,RequestFileError:4001,ReadFileError:4002},ms=class n extends Nl{constructor(e,t,i){super(e),this.errorCode=t,this.innerError=i,this.name="RuntimeError",Nl._setPrototypeOf(this,n.prototype)}}});function iie(n){let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",t="",i,r,s,a,o,l,c,f=0;for(;f>2,o=(i&3)<<4|r>>4,l=(r&15)<<2|s>>6,c=s&63,isNaN(r)?l=c=64:isNaN(s)&&(c=64),t+=e.charAt(a)+e.charAt(o)+e.charAt(l)+e.charAt(c);return t}function rie(n){let e=q0(n),t=e.length,i=new Uint8Array(new ArrayBuffer(t));for(let r=0;r{O3=n=>{if(typeof TextDecoder!="undefined")return new TextDecoder().decode(n);let e="";for(let t=0;t{let e=ArrayBuffer.isView(n)?new Uint8Array(n.buffer,n.byteOffset,n.byteLength):new Uint8Array(n);return typeof e.toBase64=="function"?e.toBase64():iie(e)},q0=n=>atob(n),N3=n=>typeof Uint8Array.fromBase64=="function"?Uint8Array.fromBase64(n).buffer:rie(n)});function nie(n,e,t,i){switch(e){case 5120:{let r=n.getInt8(t);return i&&(r=Math.max(r/127,-1)),r}case 5121:{let r=n.getUint8(t);return i&&(r=r/255),r}case 5122:{let r=n.getInt16(t,!0);return i&&(r=Math.max(r/32767,-1)),r}case 5123:{let r=n.getUint16(t,!0);return i&&(r=r/65535),r}case 5124:return n.getInt32(t,!0);case 5125:return n.getUint32(t,!0);case 5126:return n.getFloat32(t,!0);default:throw new Error(`Invalid component type ${e}`)}}function sie(n,e,t,i,r){switch(e){case 5120:{i&&(r=Math.round(r*127)),n.setInt8(t,r);break}case 5121:{i&&(r=Math.round(r*255)),n.setUint8(t,r);break}case 5122:{i&&(r=Math.round(r*32767)),n.setInt16(t,r,!0);break}case 5123:{i&&(r=Math.round(r*65535)),n.setUint16(t,r,!0);break}case 5124:{n.setInt32(t,r,!0);break}case 5125:{n.setUint32(t,r,!0);break}case 5126:{n.setFloat32(t,r,!0);break}default:throw new Error(`Invalid component type ${e}`)}}function Yo(n){switch(n){case 5120:case 5121:return 1;case 5122:case 5123:return 2;case 5124:case 5125:case 5126:return 4;default:throw new Error(`Invalid type '${n}'`)}}function Z0(n){switch(n){case 5120:return Int8Array;case 5121:return Uint8Array;case 5122:return Int16Array;case 5123:return Uint16Array;case 5124:return Int32Array;case 5125:return Uint32Array;case 5126:return Float32Array;default:throw new Error(`Invalid component type '${n}'`)}}function yh(n,e,t,i,r,s,a,o){let l=new Array(i),c=new Array(i);if(n instanceof Array){let f=e/4,h=t/4;for(let d=0;d{for(let u=0;un.length)throw new Error("Last accessed index is out of bounds.");if(_{for(let A=0;Af.byteLength)throw new Error("Last accessed byte is out of bounds.");let u=e*o;if(r{for(let g=0;g{for(let d=0;d{Pt()});function ef(n){return N3(n.split(",")[1])}var U3,Gu,lT,J0,aie,Bi,cT,B3,ku,Ph,Ko,fT,V3,G3,$c,k3,W3,oie,m_,lie,Fl=C(()=>{Ch();fa();hi();D3();L3();d_();u_();VS();Pi();Pt();Go();qc();Lr();Vu();U3=new RegExp(/^data:([^,]+\/[^,]+)?;base64,/i),Gu=class n extends ms{constructor(e,t){super(e,da.LoadFileError),this.name="LoadFileError",Nl._setPrototypeOf(this,n.prototype),t instanceof Rr?this.request=t:this.file=t}},lT=class n extends ms{constructor(e,t){super(e,da.RequestFileError),this.request=t,this.name="RequestFileError",Nl._setPrototypeOf(this,n.prototype)}},J0=class n extends ms{constructor(e,t){super(e,da.ReadFileError),this.file=t,this.name="ReadFileError",Nl._setPrototypeOf(this,n.prototype)}},aie=n=>(n=n.replace(/#/gm,"%23"),n),Bi={DefaultRetryStrategy:aT.ExponentialBackoff(),BaseUrl:"",CorsBehavior:"anonymous",PreprocessUrl:n=>n,ScriptBaseUrl:"",ScriptPreprocessUrl:n=>n,CleanUrl:aie},cT=(n,e)=>{if(!(n&&n.indexOf("data:")===0)&&Bi.CorsBehavior)if(typeof Bi.CorsBehavior=="string"||Bi.CorsBehavior instanceof String)e.crossOrigin=Bi.CorsBehavior;else{let t=Bi.CorsBehavior(n);t&&(e.crossOrigin=t)}},B3={getRequiredSize:null},ku=(n,e,t,i,r="",s,a=Le.LastCreatedEngine)=>{if(typeof HTMLImageElement=="undefined"&&!(a!=null&&a._features.forceBitmapOverHTMLImageElement))return t("LoadImage is only supported in web or BabylonNative environments."),null;let o,l=!1;if(n instanceof ArrayBuffer||ArrayBuffer.isView(n))if(typeof Blob!="undefined"&&typeof URL!="undefined"){let E;n instanceof ArrayBuffer?E=n:E=oT(n),o=URL.createObjectURL(new Blob([E],{type:r})),l=!0}else o=`data:${r};base64,`+Uu(n);else n instanceof Blob?(o=URL.createObjectURL(n),l=!0):(o=Bi.CleanUrl(n),o=Bi.PreprocessUrl(o));let c=E=>{if(t){let T=o||n.toString();t(`Error while trying to load image: ${T.indexOf("http")===0||T.length<=128?T:T.slice(0,128)+"..."}`,E)}};if(a!=null&&a._features.forceBitmapOverHTMLImageElement)return Ko(o,E=>{a.createImageBitmap(new Blob([E],{type:r}),{premultiplyAlpha:"none",colorSpaceConversion:"none",...s}).then(T=>{e(T),l&&URL.revokeObjectURL(o)}).catch(T=>{t&&t("Error while trying to load image: "+n,T)})},void 0,i||void 0,!0,(E,T)=>{c(T)}),null;let f=new Image;if(B3.getRequiredSize){let E=B3.getRequiredSize(n);E.width&&(f.width=E.width),E.height&&(f.height=E.height)}cT(o,f);let h=[],d=()=>{for(let E of h)E.target.addEventListener(E.name,E.handler)},u=()=>{for(let E of h)E.target.removeEventListener(E.name,E.handler);h.length=0},m=()=>{u(),e(f),l&&f.src&&URL.revokeObjectURL(f.src)},_=E=>{u(),c(E),l&&f.src&&URL.revokeObjectURL(f.src)},p=E=>{if(E.blockedURI!==f.src||E.disposition==="report")return;u();let T=new Error(`CSP violation of policy ${E.effectiveDirective} ${E.blockedURI}. Current policy is ${E.originalPolicy}`);Le.UseFallbackTexture=!1,c(T),l&&f.src&&URL.revokeObjectURL(f.src),f.src=""};h.push({target:f,name:"load",handler:m}),h.push({target:f,name:"error",handler:_}),h.push({target:document,name:"securitypolicyviolation",handler:p}),d();let g=o.substring(0,5)==="blob:",v=o.substring(0,5)==="data:",x=()=>{g||v||!Rr.IsCustomRequestAvailable?f.src=o:Ko(o,(E,T,R)=>{let I=!r&&R?R:r,y=new Blob([E],{type:I}),M=URL.createObjectURL(y);l=!0,f.src=M},void 0,i||void 0,!0,(E,T)=>{c(T)})},A=()=>{i&&i.loadImage(o,f)};if(!g&&!v&&i&&i.enableTexturesOffline)i.open(A,x);else{if(o.indexOf("file:")!==-1){let E=decodeURIComponent(o.substring(5).toLowerCase());if(Jc.FilesToLoad[E]&&typeof URL!="undefined"){try{let T;try{T=URL.createObjectURL(Jc.FilesToLoad[E])}catch(R){T=URL.createObjectURL(Jc.FilesToLoad[E])}f.src=T,l=!0}catch(T){f.src=""}return f}}x()}return f},Ph=(n,e,t,i,r)=>{let s=new FileReader,a={onCompleteObservable:new ee,abort:()=>s.abort()};return s.onloadend=()=>a.onCompleteObservable.notifyObservers(a),r&&(s.onerror=()=>{r(new J0(`Unable to read ${n.name}`,n))}),s.onload=o=>{e(o.target.result)},t&&(s.onprogress=t),i?s.readAsArrayBuffer(n):s.readAsText(n),a},Ko=(n,e,t,i,r,s,a)=>{if(n.name)return Ph(n,e,t,r,s?f=>{s(void 0,f)}:void 0);let o=n;if(o.indexOf("file:")!==-1){let f=decodeURIComponent(o.substring(5).toLowerCase());f.indexOf("./")===0&&(f=f.substring(2));let h=Jc.FilesToLoad[f];if(h)return Ph(h,e,t,r,s?d=>s(void 0,new Gu(d.message,d.file)):void 0)}let{match:l,type:c}=k3(o);if(l){let f={onCompleteObservable:new ee,abort:()=>()=>{}};try{let h=r?ef(o):W3(o);e(h,void 0,c)}catch(h){s?s(void 0,h):$.Error(h.message||"Failed to parse the Data URL")}return Ya.SetImmediate(()=>{f.onCompleteObservable.notifyObservers(f)}),f}return fT(o,(f,h)=>{e(f,h==null?void 0:h.responseURL,h==null?void 0:h.getResponseHeader("content-type"))},t,i,r,s?f=>{s(f.request,new Gu(f.message,f.request))}:void 0,a)},fT=(n,e,t,i,r,s,a)=>{var h;i!==null&&(i!=null||(i=(h=Le.LastCreatedScene)==null?void 0:h.offlineProvider)),n=Bi.CleanUrl(n),n=Bi.PreprocessUrl(n);let o=Bi.BaseUrl+n,l=!1,c={onCompleteObservable:new ee,abort:()=>l=!0},f=()=>{let d=new Rr,u=null,m,_=()=>{d&&(t&&d.removeEventListener("progress",t),m&&d.removeEventListener("readystatechange",m),d.removeEventListener("loadend",p))},p=()=>{_(),c.onCompleteObservable.notifyObservers(c),c.onCompleteObservable.clear(),t=void 0,m=null,p=null,s=void 0,a=void 0,e=void 0};c.abort=()=>{l=!0,p&&p(),d&&d.readyState!==(XMLHttpRequest.DONE||4)&&d.abort(),u!==null&&(clearTimeout(u),u=null),d=null};let g=x=>{let A=x.message||"Unknown error";s&&d?s(new lT(A,d)):$.Error(A)},v=x=>{if(d){if(d.open("GET",o),a)try{a(d)}catch(A){g(A);return}r&&(d.responseType="arraybuffer"),t&&d.addEventListener("progress",t),p&&d.addEventListener("loadend",p),m=()=>{if(!(l||!d)&&d.readyState===(XMLHttpRequest.DONE||4)){if(m&&d.removeEventListener("readystatechange",m),d.status>=200&&d.status<300||d.status===0&&(!ar()||G3())){let T=r?d.response:d.responseText;if(T!==null){try{e&&e(T,d)}catch(R){g(R)}return}}let A=Bi.DefaultRetryStrategy;if(A){let T=A(o,d,x);if(T!==-1){_(),d=new Rr,u=setTimeout(()=>v(x+1),T);return}}let E=new lT("Error status: "+d.status+" "+d.statusText+" - Unable to load "+o,d);s&&s(E)}},d.addEventListener("readystatechange",m),d.send()}};v(0)};if(i&&i.enableSceneOffline&&!n.startsWith("blob:")){let d=m=>{m&&m.status>400?s&&s(m):f()},u=()=>{i&&i.loadFile(Bi.BaseUrl+n,m=>{!l&&e&&e(m),c.onCompleteObservable.notifyObservers(c)},t?m=>{!l&&t&&t(m)}:void 0,d,r)};i.open(u,d)}else f();return c},V3=n=>{let{match:e,type:t}=k3(n);if(e)return t||void 0;let i=n.lastIndexOf(".");switch(n.substring(i+1).toLowerCase()){case"glb":return"model/gltf-binary";case"bin":return"application/octet-stream";case"gltf":return"model/gltf+json";case"jpg":case"jpeg":return"image/jpeg";case"png":return"image/png";case"webp":return"image/webp";case"ktx":return"image/ktx";case"ktx2":return"image/ktx2";case"avif":return"image/avif";default:return}},G3=()=>typeof location!="undefined"&&location.protocol==="file:",$c=n=>U3.test(n),k3=n=>{let e=U3.exec(n);return e===null||e.length===0?{match:!1,type:""}:{match:!0,type:e[0].replace("data:","").replace(";base64,","")}};W3=n=>q0(n.split(",")[1]),oie=()=>{Re._FileToolsLoadImage=ku,Eu.loadFile=Ko,L0.loadFile=Ko};oie();lie=(n,e,t,i,r,s,a,o,l,c)=>{m_={DecodeBase64UrlToBinary:n,DecodeBase64UrlToString:e,DefaultRetryStrategy:t.DefaultRetryStrategy,BaseUrl:t.BaseUrl,CorsBehavior:t.CorsBehavior,PreprocessUrl:t.PreprocessUrl,IsBase64DataUrl:i,IsFileURL:r,LoadFile:s,LoadImage:a,ReadFile:o,RequestFile:l,SetCorsBehavior:c},Object.defineProperty(m_,"DefaultRetryStrategy",{get:function(){return t.DefaultRetryStrategy},set:function(f){t.DefaultRetryStrategy=f}}),Object.defineProperty(m_,"BaseUrl",{get:function(){return t.BaseUrl},set:function(f){t.BaseUrl=f}}),Object.defineProperty(m_,"PreprocessUrl",{get:function(){return t.PreprocessUrl},set:function(f){t.PreprocessUrl=f}}),Object.defineProperty(m_,"CorsBehavior",{get:function(){return t.CorsBehavior},set:function(f){t.CorsBehavior=f}})};lie(ef,W3,Bi,$c,G3,Ko,ku,Ph,fT,cT)});var hT,H3=C(()=>{tT();hT=class n{get wrapU(){return this._wrapU}set wrapU(e){this._wrapU=e}get wrapV(){return this._wrapV}set wrapV(e){this._wrapV=e}get coordinatesMode(){return 0}get isCube(){return this._texture?this._texture.isCube:!1}set isCube(e){this._texture&&(this._texture.isCube=e)}get is3D(){return this._texture?this._texture.is3D:!1}set is3D(e){this._texture&&(this._texture.is3D=e)}get is2DArray(){return this._texture?this._texture.is2DArray:!1}set is2DArray(e){this._texture&&(this._texture.is2DArray=e)}getClassName(){return"ThinTexture"}static _IsRenderTargetWrapper(e){return(e==null?void 0:e.shareDepth)!==void 0}constructor(e){var t,i,r;this._wrapU=1,this._wrapV=1,this.wrapR=1,this.anisotropicFilteringLevel=4,this.delayLoadState=0,this._texture=null,this._engine=null,this._cachedSize=Dl.Zero(),this._cachedBaseSize=Dl.Zero(),this._initialSamplingMode=2,this._texture=n._IsRenderTargetWrapper(e)?e.texture:e,this._texture&&(this._engine=this._texture.getEngine(),this.wrapU=(t=this._texture._cachedWrapU)!=null?t:this.wrapU,this.wrapV=(i=this._texture._cachedWrapV)!=null?i:this.wrapV,this.wrapR=(r=this._texture._cachedWrapR)!=null?r:this.wrapR)}isReady(){return this.delayLoadState===4?(this.delayLoad(),!1):this._texture?this._texture.isReady:!1}delayLoad(){}getInternalTexture(){return this._texture}getSize(){if(this._texture){if(this._texture.width)return this._cachedSize.width=this._texture.width,this._cachedSize.height=this._texture.height,this._cachedSize;if(this._texture._size)return this._cachedSize.width=this._texture._size,this._cachedSize.height=this._texture._size,this._cachedSize}return this._cachedSize}getBaseSize(){return!this.isReady()||!this._texture?(this._cachedBaseSize.width=0,this._cachedBaseSize.height=0,this._cachedBaseSize):this._texture._size?(this._cachedBaseSize.width=this._texture._size,this._cachedBaseSize.height=this._texture._size,this._cachedBaseSize):(this._cachedBaseSize.width=this._texture.baseWidth,this._cachedBaseSize.height=this._texture.baseHeight,this._cachedBaseSize)}get samplingMode(){return this._texture?this._texture.samplingMode:this._initialSamplingMode}updateSamplingMode(e,t=!1){this._texture&&this._engine&&this._engine.updateTextureSamplingMode(e,this._texture,this._texture.generateMipMaps&&t)}releaseInternalTexture(){this._texture&&(this._texture.dispose(),this._texture=null)}dispose(){this._texture&&(this.releaseInternalTexture(),this._engine=null)}}});var dT,z3=C(()=>{dT=class n{static Eval(e,t){return e.match(/\([^()]*\)/g)?e=e.replace(/\([^()]*\)/g,i=>(i=i.slice(1,i.length-1),n._HandleParenthesisContent(i,t))):e=n._HandleParenthesisContent(e,t),e==="true"?!0:e==="false"?!1:n.Eval(e,t)}static _HandleParenthesisContent(e,t){t=t||(s=>s==="true");let i,r=e.split("||");for(let s in r)if(Object.prototype.hasOwnProperty.call(r,s)){let a=n._SimplifyNegation(r[s].trim()),o=a.split("&&");if(o.length>1)for(let l=0;l(t=t.replace(/[\s]/g,()=>""),t.length%2?"!":"")),e=e.trim(),e==="!true"?e="false":e==="!false"&&(e="true"),e}}});var qt,tf=C(()=>{z3();qt=class n{static EnableFor(e){e._tags=e._tags||{},e.hasTags=()=>n.HasTags(e),e.addTags=t=>n.AddTagsTo(e,t),e.removeTags=t=>n.RemoveTagsFrom(e,t),e.matchesTagsQuery=t=>n.MatchesQuery(e,t)}static DisableFor(e){delete e._tags,delete e.hasTags,delete e.addTags,delete e.removeTags,delete e.matchesTagsQuery}static HasTags(e){if(!e._tags)return!1;let t=e._tags;for(let i in t)if(Object.prototype.hasOwnProperty.call(t,i))return!0;return!1}static GetTags(e,t=!0){if(!e._tags)return null;if(t){let i=[];for(let r in e._tags)Object.prototype.hasOwnProperty.call(e._tags,r)&&e._tags[r]===!0&&i.push(r);return i.join(" ")}else return e._tags}static AddTagsTo(e,t){if(!t||typeof t!="string")return;let i=t.split(" ");for(let r of i)n._AddTagTo(e,r)}static _AddTagTo(e,t){t=t.trim(),!(t===""||t==="true"||t==="false")&&(t.match(/[\s]/)||t.match(/^([!]|([|]|[&]){2})/)||(n.EnableFor(e),e._tags[t]=!0))}static RemoveTagsFrom(e,t){if(!n.HasTags(e))return;let i=t.split(" ");for(let r in i)n._RemoveTagFrom(e,i[r])}static _RemoveTagFrom(e,t){delete e._tags[t]}static MatchesQuery(e,t){return t===void 0?!0:t===""?n.HasTags(e):dT.Eval(t,i=>n.HasTags(e)&&e._tags[i])}}});var X3,tt,_r=C(()=>{an();tf();Ht();Ve();j0();X3=function(n,e,t,i={}){let r=n();qt&&qt.HasTags(e)&&qt.AddTagsTo(r,qt.GetTags(e,!0));let s=nT(r),a={};for(let o in s){let l=s[o],c=e[o],f=l.type;if(c!=null&&(o!=="uniqueId"||tt.AllowLoadingUniqueId))switch(f){case 0:case 6:case 9:case 11:typeof c.slice=="function"?r[o]=c.slice():r[o]=c;break;case 1:i.cloneTexturesOnlyOnce&&a[c.uniqueId]?r[o]=a[c.uniqueId]:(r[o]=t||c.isRenderTarget?c:c.clone(),a[c.uniqueId]=r[o]);break;case 2:case 3:case 4:case 5:case 7:case 8:case 10:case 12:r[o]=t?c:c.clone();break}}return r},tt=class n{static AppendSerializedAnimations(e,t){if(e.animations){t.animations=[];for(let i=0;i{throw Xe("ImageProcessingConfiguration")};tt._FresnelParametersParser=n=>{throw Xe("FresnelParameters")};tt._ColorCurvesParser=n=>{throw Xe("ColorCurves")};tt._TextureParser=(n,e,t)=>{throw Xe("Texture")}});var pi,p_=C(()=>{kt();Ut();hi();Ve();Pi();h_();Fl();H3();_r();pi=class n extends hT{set hasAlpha(e){this._hasAlpha!==e&&(this._hasAlpha=e,this._scene&&this._scene.markAllMaterialsAsDirty(1,t=>t.hasTexture(this)))}get hasAlpha(){return this._hasAlpha}set getAlphaFromRGB(e){this._getAlphaFromRGB!==e&&(this._getAlphaFromRGB=e,this._scene&&this._scene.markAllMaterialsAsDirty(1,t=>t.hasTexture(this)))}get getAlphaFromRGB(){return this._getAlphaFromRGB}set coordinatesIndex(e){this._coordinatesIndex!==e&&(this._coordinatesIndex=e,this._scene&&this._scene.markAllMaterialsAsDirty(1,t=>t.hasTexture(this)))}get coordinatesIndex(){return this._coordinatesIndex}set coordinatesMode(e){this._coordinatesMode!==e&&(this._coordinatesMode=e,this._scene&&this._scene.markAllMaterialsAsDirty(1,t=>t.hasTexture(this)))}get coordinatesMode(){return this._coordinatesMode}get wrapU(){return this._wrapU}set wrapU(e){this._wrapU=e}get wrapV(){return this._wrapV}set wrapV(e){this._wrapV=e}get isCube(){return this._texture?this._texture.isCube:this._isCube}set isCube(e){this._texture?this._texture.isCube=e:this._isCube=e}get is3D(){return this._texture?this._texture.is3D:!1}set is3D(e){this._texture&&(this._texture.is3D=e)}get is2DArray(){return this._texture?this._texture.is2DArray:!1}set is2DArray(e){this._texture&&(this._texture.is2DArray=e)}get gammaSpace(){if(this._texture)this._texture._gammaSpace===null&&(this._texture._gammaSpace=this._gammaSpace);else return this._gammaSpace;return this._texture._gammaSpace&&!this._texture._useSRGBBuffer}set gammaSpace(e){var t;if(this._texture){if(this._texture._gammaSpace===e)return;this._texture._gammaSpace=e}else{if(this._gammaSpace===e)return;this._gammaSpace=e}(t=this.getScene())==null||t.markAllMaterialsAsDirty(1,i=>i.hasTexture(this))}get isRGBD(){return this._texture!=null&&this._texture._isRGBD}set isRGBD(e){var t;e!==this.isRGBD&&(this._texture&&(this._texture._isRGBD=e),(t=this.getScene())==null||t.markAllMaterialsAsDirty(1,i=>i.hasTexture(this)))}get noMipmap(){return!1}get lodGenerationOffset(){return this._texture?this._texture._lodGenerationOffset:0}set lodGenerationOffset(e){this._texture&&(this._texture._lodGenerationOffset=e)}get lodGenerationScale(){return this._texture?this._texture._lodGenerationScale:0}set lodGenerationScale(e){this._texture&&(this._texture._lodGenerationScale=e)}get linearSpecularLOD(){return this._texture?this._texture._linearSpecularLOD:!1}set linearSpecularLOD(e){this._texture&&(this._texture._linearSpecularLOD=e)}get irradianceTexture(){return this._texture?this._texture._irradianceTexture:null}set irradianceTexture(e){this._texture&&(this._texture._irradianceTexture=e)}get uid(){return this._uid||(this._uid=Qc()),this._uid}toString(){return this.name}getClassName(){return"BaseTexture"}set onDispose(e){this._onDisposeObserver&&this.onDisposeObservable.remove(this._onDisposeObserver),this._onDisposeObserver=this.onDisposeObservable.add(e)}get isBlocking(){return!0}get loadingError(){return this._loadingError}get errorObject(){return this._errorObject}constructor(e,t=null){super(null),this.metadata=null,this.reservedDataStore=null,this._hasAlpha=!1,this._getAlphaFromRGB=!1,this.level=1,this._coordinatesIndex=0,this.optimizeUVAllocation=!0,this._coordinatesMode=0,this.wrapR=1,this.anisotropicFilteringLevel=n.DEFAULT_ANISOTROPIC_FILTERING_LEVEL,this._isCube=!1,this._gammaSpace=!0,this.invertZ=!1,this.lodLevelInAlpha=!1,this._dominantDirection=null,this.isRenderTarget=!1,this._prefiltered=!1,this._forceSerialize=!1,this.animations=[],this.onDisposeObservable=new ee,this._onDisposeObserver=null,this._scene=null,this._uid=null,this._parentContainer=null,this._loadingError=!1,e?n._IsScene(e)?this._scene=e:this._engine=e:this._scene=Le.LastCreatedScene,this._scene&&(this.uniqueId=this._scene.getUniqueId(),this._scene.addTexture(this),this._engine=this._scene.getEngine()),this._texture=t,this._uid=null}getScene(){return this._scene}_getEngine(){return this._engine}getTextureMatrix(){return K.IdentityReadOnly}getReflectionTextureMatrix(){return K.IdentityReadOnly}getRefractionTextureMatrix(){return this.getReflectionTextureMatrix()}isReadyOrNotBlocking(){return!this.isBlocking||this.isReady()||this.loadingError}scale(e){}get canRescale(){return!1}_getFromCache(e,t,i,r,s,a){let o=this._getEngine();if(!o)return null;let l=o._getUseSRGBBuffer(!!s,t),c=o.getLoadedTexturesCache();for(let f=0;f=0&&this._scene.textures.splice(e,1),this._scene.onTextureRemovedObservable.notifyObservers(this),this._scene=null,this._parentContainer){let t=this._parentContainer.textures.indexOf(this);t>-1&&this._parentContainer.textures.splice(t,1),this._parentContainer=null}}this.onDisposeObservable.notifyObservers(this),this.onDisposeObservable.clear(),this.metadata=null,super.dispose()}serialize(e=!1){if(!this.name&&!e)return null;let t=tt.Serialize(this);return tt.AppendSerializedAnimations(this,t),t}static WhenAllReady(e,t){let i=e.length;if(i===0){t();return}for(let r=0;r{--i===0&&t()}):--i===0&&t()}}}static _IsScene(e){return e.getClassName()==="Scene"}};pi.DEFAULT_ANISOTROPIC_FILTERING_LEVEL=4;P([F()],pi.prototype,"uniqueId",void 0);P([F()],pi.prototype,"name",void 0);P([F()],pi.prototype,"displayName",void 0);P([F()],pi.prototype,"metadata",void 0);P([F("hasAlpha")],pi.prototype,"_hasAlpha",void 0);P([F("getAlphaFromRGB")],pi.prototype,"_getAlphaFromRGB",void 0);P([F()],pi.prototype,"level",void 0);P([F("coordinatesIndex")],pi.prototype,"_coordinatesIndex",void 0);P([F()],pi.prototype,"optimizeUVAllocation",void 0);P([F("coordinatesMode")],pi.prototype,"_coordinatesMode",void 0);P([F()],pi.prototype,"wrapU",null);P([F()],pi.prototype,"wrapV",null);P([F()],pi.prototype,"wrapR",void 0);P([F()],pi.prototype,"anisotropicFilteringLevel",void 0);P([F()],pi.prototype,"isCube",null);P([F()],pi.prototype,"is3D",null);P([F()],pi.prototype,"is2DArray",null);P([F()],pi.prototype,"gammaSpace",null);P([F()],pi.prototype,"invertZ",void 0);P([F()],pi.prototype,"lodLevelInAlpha",void 0);P([F()],pi.prototype,"lodGenerationOffset",null);P([F()],pi.prototype,"lodGenerationScale",null);P([F()],pi.prototype,"linearSpecularLOD",null);P([Bt()],pi.prototype,"irradianceTexture",null);P([F()],pi.prototype,"isRenderTarget",void 0)});var rf,wl,$0=C(()=>{Ve();xn();f_();An();Ht();rf=class{constructor(e,t,i,r){this.name=e,this.worldAxisForNormal=t,this.worldAxisForFileX=i,this.worldAxisForFileY=r}},wl=class{static _NearestPow2Floor(e){return e<=1?1:1<0?this._NearestPow2Floor(i):0,s=!e.noMipmap&&((x=e._texture)==null?void 0:x.generateMipMaps)===!0,a=r>0&&r0&&r{Promise.all([f,c,h,d,u,m]).then(([E,T,R,I,y,M])=>{let D=l;g&&(E=this._DownsampleFace(E,t,r,4),T=this._DownsampleFace(T,t,r,4),R=this._DownsampleFace(R,t,r,4),I=this._DownsampleFace(I,t,r,4),y=this._DownsampleFace(y,t,r,4),M=this._DownsampleFace(M,t,r,4),D=r);let O={size:D,right:T,left:E,up:R,down:I,front:y,back:M,format:p,type:E instanceof Float32Array?1:0,gammaSpace:_};A(this.ConvertCubeMapToSphericalPolynomial(O))})})}static _AreaElement(e,t){return Math.atan2(e*t,Math.sqrt(e*e+t*t+1))}static _DownsampleFace(e,t,i,r){let s=e instanceof Float32Array?e:Float32Array.from(e),a=i*i*r,o=new Float32Array(a),l=t/i,c=1/(l*l);for(let d=0;d0?this._NearestPow2Floor(t):0;if(i>0&&e.size>i){let m=e.format===5?4:3,_=["right","left","up","down","front","back"],p={};for(let g of _)p[g]=this._DownsampleFace(e[g],e.size,i,m);e={...e,...p,size:i}}let r=new c_,s=0,a=2/e.size,o=a,l=.5*a,c=l-1;for(let m=0;m<6;m++){let _=this._FileFaces[m],p=e[_.name],g=c,v=e.format===5?4:3;for(let x=0;xD){let N=D/V;I*=N,y*=N,M*=N}}else I=Ft(I,0,D),y=Ft(y,0,D),M=Ft(M,0,D);let O=new Te(I,y,M);r.addLight(T,O,R),s+=R,A+=a}g+=o}}let u=4*Math.PI*6/6/s;return r.scaleInPlace(u),r.convertIncidentRadianceToIrradiance(),r.convertIrradianceToLambertianRadiance(),Xo.FromHarmonics(r)}};wl._FileFaces=[new rf("right",new b(1,0,0),new b(0,0,-1),new b(0,-1,0)),new rf("left",new b(-1,0,0),new b(0,0,1),new b(0,-1,0)),new rf("up",new b(0,1,0),new b(1,0,0),new b(0,0,1)),new rf("down",new b(0,-1,0),new b(1,0,0),new b(0,0,-1)),new rf("front",new b(0,0,1),new b(1,0,0),new b(0,-1,0)),new rf("back",new b(0,0,-1),new b(-1,0,0),new b(0,-1,0))];wl.MAX_HDRI_VALUE=4096;wl.PRESERVE_CLAMPED_COLORS=!1});var Bl,eM=C(()=>{Pt();Vi();Bl=class{static Instantiate(e){if(this.RegisteredExternalClasses&&this.RegisteredExternalClasses[e])return this.RegisteredExternalClasses[e];let t=dn(e);if(t)return t;$.Warn(e+" not found, you may have missed an import.");let i=e.split("."),r=window||this;for(let s=0,a=i.length;s=0;){let h=n[c];h<0?h=0:h>1&&(h=1),f[c]=h*255}n=f}let s=document.createElement("canvas");s.width=i,s.height=r;let a=s.getContext("2d");if(!a)return null;let o=a.createImageData(i,r);if(o.data.set(n),a.putImageData(o,0,0),t){let c=document.createElement("canvas");c.width=i,c.height=r;let f=c.getContext("2d");return f?(f.translate(0,r),f.scale(1,-1),f.drawImage(s,0,0),c.toDataURL("image/png")):null}return s.toDataURL("image/png")}function K3(n,e=0,t=0){let i=n.getInternalTexture();if(!i)return null;let r=n._readPixelsSync(e,t);return r?Y3(r,n.getSize(),i.invertY):null}async function j3(n,e=0,t=0){let i=n.getInternalTexture();if(!i)return null;let r=await n.readPixels(e,t);return r?Y3(r,n.getSize(),i.invertY):null}var q3=C(()=>{});var It,Qr=C(()=>{It=!1});var ge,Gr=C(()=>{kt();Ut();hi();Ve();p_();Vi();an();Go();eM();Du();u_();q3();Qr();_r();ge=class n extends pi{static _CreateVideoTexture(e,t,i,r=!1,s=!1,a=n.TRILINEAR_SAMPLINGMODE,o={},l,c=5){throw Xe("VideoTexture")}get noMipmap(){return this._noMipmap}get mimeType(){return this._mimeType}set isBlocking(e){this._isBlocking=e}get isBlocking(){return this._isBlocking}get invertY(){return this._invertY}constructor(e,t,i,r,s=n.TRILINEAR_SAMPLINGMODE,a=null,o=null,l=null,c=!1,f,h,d,u,m){var R,I,y,M,D,O,V,N,w,U,G;super(t),this.url=null,this.uOffset=0,this.vOffset=0,this.uScale=1,this.vScale=1,this.uAng=0,this.vAng=0,this.wAng=0,this.uRotationCenter=.5,this.vRotationCenter=.5,this.wRotationCenter=.5,this.homogeneousRotationInUVTransform=!1,this.inspectableCustomProperties=null,this._noMipmap=!1,this._invertY=!1,this._rowGenerationMatrix=null,this._cachedTextureMatrix=null,this._projectionModeMatrix=null,this._t0=null,this._t1=null,this._t2=null,this._cachedUOffset=-1,this._cachedVOffset=-1,this._cachedUScale=0,this._cachedVScale=0,this._cachedUAng=-1,this._cachedVAng=-1,this._cachedWAng=-1,this._cachedReflectionProjectionMatrixId=-1,this._cachedURotationCenter=-1,this._cachedVRotationCenter=-1,this._cachedWRotationCenter=-1,this._cachedHomogeneousRotationInUVTransform=!1,this._cachedIdentity3x2=!0,this._cachedReflectionTextureMatrix=null,this._cachedReflectionUOffset=-1,this._cachedReflectionVOffset=-1,this._cachedReflectionUScale=0,this._cachedReflectionVScale=0,this._cachedReflectionCoordinatesMode=-1,this._buffer=null,this._deleteBuffer=!1,this._format=null,this._delayedOnLoad=null,this._delayedOnError=null,this.onLoadObservable=new ee,this._isBlocking=!0,this.name=e||"",this.url=e;let _,p=!1,g=null,v=!0;typeof i=="object"&&i!==null?(_=(R=i.noMipmap)!=null?R:!1,r=(I=i.invertY)!=null?I:!It,s=(y=i.samplingMode)!=null?y:n.TRILINEAR_SAMPLINGMODE,a=(M=i.onLoad)!=null?M:null,o=(D=i.onError)!=null?D:null,l=(O=i.buffer)!=null?O:null,c=(V=i.deleteBuffer)!=null?V:!1,f=i.format,h=i.mimeType,d=i.loaderOptions,u=i.creationFlags,p=(N=i.useSRGBBuffer)!=null?N:!1,g=(w=i.internalTexture)!=null?w:null,v=(U=i.gammaSpace)!=null?U:v,m=(G=i.forcedExtension)!=null?G:m):_=!!i,this._gammaSpace=v,this._noMipmap=_,this._invertY=r===void 0?!It:r,this._initialSamplingMode=s,this._buffer=l,this._deleteBuffer=c,this._mimeType=h,this._loaderOptions=d,this._creationFlags=u,this._useSRGBBuffer=p,this._forcedExtension=m,f!==void 0&&(this._format=f);let x=this.getScene(),A=this._getEngine();if(!A)return;A.onBeforeTextureInitObservable.notifyObservers(this);let E=()=>{this._texture&&(this._texture._invertVScale&&(this.vScale*=-1,this.vOffset+=1),this._texture._cachedWrapU!==null&&(this.wrapU=this._texture._cachedWrapU,this._texture._cachedWrapU=null),this._texture._cachedWrapV!==null&&(this.wrapV=this._texture._cachedWrapV,this._texture._cachedWrapV=null),this._texture._cachedWrapR!==null&&(this.wrapR=this._texture._cachedWrapR,this._texture._cachedWrapR=null)),this.onLoadObservable.hasObservers()&&this.onLoadObservable.notifyObservers(this),a&&a(),!this.isBlocking&&x&&x.resetCachedMaterial()},T=(J,Y)=>{this._loadingError=!0,this._errorObject={message:J,exception:Y},o&&o(J,Y),n.OnTextureLoadErrorObservable.notifyObservers(this)};if(!this.url&&!g){this._delayedOnLoad=E,this._delayedOnError=T;return}if(this._texture=g!=null?g:this._getFromCache(this.url,_,s,this._invertY,p,this.isCube),this._texture)if(this._texture.isReady)Ya.SetImmediate(()=>E());else{let J=this._texture.onLoadedObservable.add(E);this._texture.onErrorObservable.add(Y=>{var Q;T(Y.message,Y.exception),(Q=this._texture)==null||Q.onLoadedObservable.remove(J)})}else if(!x||!x.useDelayedTextureLoading){try{this._texture=A.createTexture(this.url,_,this._invertY,x,s,E,T,this._buffer,void 0,this._format,this._forcedExtension,h,d,u,p)}catch(J){throw T("error loading",J),J}c&&(this._buffer=null)}else this.delayLoadState=4,this._delayedOnLoad=E,this._delayedOnError=T}updateURL(e,t=null,i,r){this.url&&(this.releaseInternalTexture(),this.getScene().markAllMaterialsAsDirty(1,o=>o.hasTexture(this))),(!this.name||this.name.startsWith("data:"))&&(this.name=e),this.url=e,this._buffer=t,this._forcedExtension=r,this.delayLoadState=4;let s=this._delayedOnLoad,a=()=>{s?s():this.onLoadObservable.hasObservers()&&this.onLoadObservable.notifyObservers(this),i&&i()};this._delayedOnLoad=a,this.delayLoad()}delayLoad(){if(this.delayLoadState!==4)return;let e=this.getScene();if(!e)return;let t=this.url;!t&&(this.name.indexOf("://")>0||this.name.startsWith("data:"))&&(t=this.name),this.delayLoadState=1,this._texture=this._getFromCache(t,this._noMipmap,this.samplingMode,this._invertY,this._useSRGBBuffer,this.isCube),this._texture?this._delayedOnLoad&&(this._texture.isReady?Ya.SetImmediate(this._delayedOnLoad):this._texture.onLoadedObservable.add(this._delayedOnLoad)):(this._texture=e.getEngine().createTexture(t,this._noMipmap,this._invertY,e,this.samplingMode,this._delayedOnLoad,this._delayedOnError,this._buffer,null,this._format,this._forcedExtension,this._mimeType,this._loaderOptions,this._creationFlags,this._useSRGBBuffer),this._deleteBuffer&&(this._buffer=null)),this._delayedOnLoad=null,this._delayedOnError=null}_prepareRowForTextureGeneration(e,t,i,r){e*=this._cachedUScale,t*=this._cachedVScale,e-=this.uRotationCenter*this._cachedUScale,t-=this.vRotationCenter*this._cachedVScale,i-=this.wRotationCenter,b.TransformCoordinatesFromFloatsToRef(e,t,i,this._rowGenerationMatrix,r),r.x+=this.uRotationCenter*this._cachedUScale+this._cachedUOffset,r.y+=this.vRotationCenter*this._cachedVScale+this._cachedVOffset,r.z+=this.wRotationCenter}getTextureMatrix(e=1){if(this.uOffset===this._cachedUOffset&&this.vOffset===this._cachedVOffset&&this.uScale*e===this._cachedUScale&&this.vScale===this._cachedVScale&&this.uAng===this._cachedUAng&&this.vAng===this._cachedVAng&&this.wAng===this._cachedWAng&&this.uRotationCenter===this._cachedURotationCenter&&this.vRotationCenter===this._cachedVRotationCenter&&this.wRotationCenter===this._cachedWRotationCenter&&this.homogeneousRotationInUVTransform===this._cachedHomogeneousRotationInUVTransform)return this._cachedTextureMatrix;this._cachedUOffset=this.uOffset,this._cachedVOffset=this.vOffset,this._cachedUScale=this.uScale*e,this._cachedVScale=this.vScale,this._cachedUAng=this.uAng,this._cachedVAng=this.vAng,this._cachedWAng=this.wAng,this._cachedURotationCenter=this.uRotationCenter,this._cachedVRotationCenter=this.vRotationCenter,this._cachedWRotationCenter=this.wRotationCenter,this._cachedHomogeneousRotationInUVTransform=this.homogeneousRotationInUVTransform,(!this._cachedTextureMatrix||!this._rowGenerationMatrix)&&(this._cachedTextureMatrix=K.Zero(),this._rowGenerationMatrix=new K,this._t0=b.Zero(),this._t1=b.Zero(),this._t2=b.Zero()),K.RotationYawPitchRollToRef(this.vAng,this.uAng,this.wAng,this._rowGenerationMatrix),this.homogeneousRotationInUVTransform?(K.TranslationToRef(-this._cachedURotationCenter,-this._cachedVRotationCenter,-this._cachedWRotationCenter,Z.Matrix[0]),K.TranslationToRef(this._cachedURotationCenter,this._cachedVRotationCenter,this._cachedWRotationCenter,Z.Matrix[1]),K.ScalingToRef(this._cachedUScale,this._cachedVScale,0,Z.Matrix[2]),K.TranslationToRef(this._cachedUOffset,this._cachedVOffset,0,Z.Matrix[3]),Z.Matrix[0].multiplyToRef(this._rowGenerationMatrix,this._cachedTextureMatrix),this._cachedTextureMatrix.multiplyToRef(Z.Matrix[1],this._cachedTextureMatrix),this._cachedTextureMatrix.multiplyToRef(Z.Matrix[2],this._cachedTextureMatrix),this._cachedTextureMatrix.multiplyToRef(Z.Matrix[3],this._cachedTextureMatrix),this._cachedTextureMatrix.setRowFromFloats(2,this._cachedTextureMatrix.m[12],this._cachedTextureMatrix.m[13],this._cachedTextureMatrix.m[14],1)):(this._prepareRowForTextureGeneration(0,0,0,this._t0),this._prepareRowForTextureGeneration(1,0,0,this._t1),this._prepareRowForTextureGeneration(0,1,0,this._t2),this._t1.subtractInPlace(this._t0),this._t2.subtractInPlace(this._t0),K.FromValuesToRef(this._t1.x,this._t1.y,this._t1.z,0,this._t2.x,this._t2.y,this._t2.z,0,this._t0.x,this._t0.y,this._t0.z,0,0,0,0,1,this._cachedTextureMatrix));let t=this.getScene();if(!t)return this._cachedTextureMatrix;let i=this._cachedIdentity3x2;return this._cachedIdentity3x2=this._cachedTextureMatrix.isIdentityAs3x2(),this.optimizeUVAllocation&&i!==this._cachedIdentity3x2&&t.markAllMaterialsAsDirty(1,r=>r.hasTexture(this)),this._cachedTextureMatrix}getReflectionTextureMatrix(){let e=this.getScene();if(!e)return this._cachedReflectionTextureMatrix;if(this.uOffset===this._cachedReflectionUOffset&&this.vOffset===this._cachedReflectionVOffset&&this.uScale===this._cachedReflectionUScale&&this.vScale===this._cachedReflectionVScale&&this.coordinatesMode===this._cachedReflectionCoordinatesMode)if(this.coordinatesMode===n.PROJECTION_MODE){if(this._cachedReflectionProjectionMatrixId===e.getProjectionMatrix().updateFlag)return this._cachedReflectionTextureMatrix}else return this._cachedReflectionTextureMatrix;this._cachedReflectionTextureMatrix||(this._cachedReflectionTextureMatrix=K.Zero()),this._projectionModeMatrix||(this._projectionModeMatrix=K.Zero());let t=this._cachedReflectionCoordinatesMode!==this.coordinatesMode;switch(this._cachedReflectionUOffset=this.uOffset,this._cachedReflectionVOffset=this.vOffset,this._cachedReflectionUScale=this.uScale,this._cachedReflectionVScale=this.vScale,this._cachedReflectionCoordinatesMode=this.coordinatesMode,this.coordinatesMode){case n.PLANAR_MODE:{K.IdentityToRef(this._cachedReflectionTextureMatrix),this._cachedReflectionTextureMatrix[0]=this.uScale,this._cachedReflectionTextureMatrix[5]=this.vScale,this._cachedReflectionTextureMatrix[12]=this.uOffset,this._cachedReflectionTextureMatrix[13]=this.vOffset;break}case n.PROJECTION_MODE:{K.FromValuesToRef(.5,0,0,0,0,-.5,0,0,0,0,0,0,.5,.5,1,1,this._projectionModeMatrix);let i=e.getProjectionMatrix();this._cachedReflectionProjectionMatrixId=i.updateFlag,i.multiplyToRef(this._projectionModeMatrix,this._cachedReflectionTextureMatrix);break}default:K.IdentityToRef(this._cachedReflectionTextureMatrix);break}return t&&e.markAllMaterialsAsDirty(1,i=>i.hasTexture(this)),this._cachedReflectionTextureMatrix}clone(){let e={noMipmap:this._noMipmap,invertY:this._invertY,samplingMode:this.samplingMode,onLoad:void 0,onError:void 0,buffer:this._texture?this._texture._buffer:void 0,deleteBuffer:this._deleteBuffer,format:this.textureFormat,mimeType:this.mimeType,loaderOptions:this._loaderOptions,creationFlags:this._creationFlags,useSRGBBuffer:this._useSRGBBuffer};return tt.Clone(()=>new n(this._texture?this._texture.url:null,this.getScene(),e),this)}serialize(){var i,r;let e=this.name;n.SerializeBuffers||this.name.startsWith("data:")&&(this.name=""),this.name.startsWith("data:")&&this.url===this.name&&(this.url="");let t=super.serialize(n._SerializeInternalTextureUniqueId);if(!t)return null;if(n.SerializeBuffers||n.ForceSerializeBuffers)if(typeof this._buffer=="string"&&this._buffer.startsWith("data:"))t.base64String=this._buffer,t.name=t.name.replace("data:","");else if(this.url&&this.url.startsWith("data:")&&this._buffer instanceof Uint8Array){let s=this.mimeType||"image/png";t.base64String=`data:${s};base64,${Uu(this._buffer)}`}else(n.ForceSerializeBuffers||this.url&&this.url.startsWith("blob:")||this._forceSerialize)&&(t.base64String=!this._engine||this._engine._features.supportSyncTextureRead?K3(this):j3(this));return t.invertY=this._invertY,t.samplingMode=this.samplingMode,t._creationFlags=this._creationFlags,t._useSRGBBuffer=this._useSRGBBuffer,n._SerializeInternalTextureUniqueId&&(t.internalTextureUniqueId=(i=this._texture)==null?void 0:i.uniqueId),t.internalTextureLabel=(r=this._texture)==null?void 0:r.label,t.noMipmap=this._noMipmap,this.name=e,t}getClassName(){return"Texture"}dispose(){super.dispose(),this.onLoadObservable.clear(),this._delayedOnLoad=null,this._delayedOnError=null,this._buffer=null}static Parse(e,t,i){if(e.customType){let c=Bl.Instantiate(e.customType).Parse(e,t,i);return e.samplingMode&&c.updateSamplingMode&&c._samplingMode&&c._samplingMode!==e.samplingMode&&c.updateSamplingMode(e.samplingMode),c}if(e.isCube&&!e.isRenderTarget)return n._CubeTextureParser(e,t,i);let r=e.internalTextureUniqueId!==void 0;if(!e.name&&!e.isRenderTarget&&!r)return null;let s;if(r){let l=t.getEngine().getLoadedTexturesCache();for(let c of l)if(c.uniqueId===e.internalTextureUniqueId){s=c;break}}let a=l=>{if(l&&l._texture&&(l._texture._cachedWrapU=null,l._texture._cachedWrapV=null,l._texture._cachedWrapR=null),e.samplingMode){let c=e.samplingMode;l&&l.samplingMode!==c&&l.updateSamplingMode(c)}if(l&&e.animations)for(let c=0;c{var c,f,h,d,u;let l=!0;if(e.noMipmap&&(l=!1),e.mirrorPlane){let m=n._CreateMirror(e.name,e.renderTargetSize,t,l);return m._waitingRenderList=e.renderList,m.mirrorPlane=qa.FromArray(e.mirrorPlane),a(m),m}else if(e.isRenderTarget&&!e.base64String){let m=null;if(e.isCube){if(t.reflectionProbes)for(let _=0;_{a(m)}},p=e.base64String,g=p.startsWith("data:")?p.substring(5):p;m=n.CreateFromBase64String("",g,t,_),m.name=e.name}else{let _;e.name&&(e.name.indexOf("://")>0||e.name.startsWith("data:"))?_=e.name:_=i+e.name,e.url&&(e.url.startsWith("data:")||n.UseSerializedUrlIfAny)&&(_=e.url);let p={noMipmap:!l,invertY:e.invertY,samplingMode:e.samplingMode,useSRGBBuffer:(d=e._useSRGBBuffer)!=null?d:!1,creationFlags:(u=e._creationFlags)!=null?u:0,onLoad:()=>{a(m)},internalTexture:s};m=new n(_,t,p)}return m}},e,t)}static CreateFromBase64String(e,t,i,r,s,a=n.TRILINEAR_SAMPLINGMODE,o=null,l=null,c=5,f,h){return new n("data:"+t,i,r,s,a,o,l,e,!1,c,void 0,void 0,f,h)}static LoadFromDataString(e,t,i,r=!1,s,a=!0,o=n.TRILINEAR_SAMPLINGMODE,l=null,c=null,f=5,h,d){return e.substring(0,5)!=="data:"&&(e="data:"+e),new n(e,i,s,a,o,l,c,t,r,f,void 0,void 0,h,d)}};ge.SerializeBuffers=!0;ge.ForceSerializeBuffers=!1;ge.OnTextureLoadErrorObservable=new ee;ge._SerializeInternalTextureUniqueId=!1;ge._CubeTextureParser=(n,e,t)=>{throw Xe("CubeTexture")};ge._CreateMirror=(n,e,t,i)=>{throw Xe("MirrorTexture")};ge._CreateRenderTargetTexture=(n,e,t,i,r)=>{throw Xe("RenderTargetTexture")};ge.NEAREST_SAMPLINGMODE=1;ge.NEAREST_NEAREST_MIPLINEAR=8;ge.BILINEAR_SAMPLINGMODE=2;ge.LINEAR_LINEAR_MIPNEAREST=11;ge.TRILINEAR_SAMPLINGMODE=3;ge.LINEAR_LINEAR_MIPLINEAR=3;ge.NEAREST_NEAREST_MIPNEAREST=4;ge.NEAREST_LINEAR_MIPNEAREST=5;ge.NEAREST_LINEAR_MIPLINEAR=6;ge.NEAREST_LINEAR=7;ge.NEAREST_NEAREST=1;ge.LINEAR_NEAREST_MIPNEAREST=9;ge.LINEAR_NEAREST_MIPLINEAR=10;ge.LINEAR_LINEAR=2;ge.LINEAR_NEAREST=12;ge.EXPLICIT_MODE=0;ge.SPHERICAL_MODE=1;ge.PLANAR_MODE=2;ge.CUBIC_MODE=3;ge.PROJECTION_MODE=4;ge.SKYBOX_MODE=5;ge.INVCUBIC_MODE=6;ge.EQUIRECTANGULAR_MODE=7;ge.FIXED_EQUIRECTANGULAR_MODE=8;ge.FIXED_EQUIRECTANGULAR_MIRRORED_MODE=9;ge.CLAMP_ADDRESSMODE=0;ge.WRAP_ADDRESSMODE=1;ge.MIRROR_ADDRESSMODE=2;ge.UseSerializedUrlIfAny=!1;P([F()],ge.prototype,"url",void 0);P([F()],ge.prototype,"uOffset",void 0);P([F()],ge.prototype,"vOffset",void 0);P([F()],ge.prototype,"uScale",void 0);P([F()],ge.prototype,"vScale",void 0);P([F()],ge.prototype,"uAng",void 0);P([F()],ge.prototype,"vAng",void 0);P([F()],ge.prototype,"wAng",void 0);P([F()],ge.prototype,"uRotationCenter",void 0);P([F()],ge.prototype,"vRotationCenter",void 0);P([F()],ge.prototype,"wRotationCenter",void 0);P([F()],ge.prototype,"homogeneousRotationInUVTransform",void 0);P([F()],ge.prototype,"isBlocking",null);wt("BABYLON.Texture",ge);tt._TextureParser=ge.Parse});var Qa,L,Ui=C(()=>{B0();Pt();Vu();Qa=class{get isDisposed(){return this._isDisposed}constructor(e,t,i,r=0,s=!1,a=!1,o=!1,l,c){this._isAlreadyOwned=!1,this._isDisposed=!1,e&&e.getScene?this._engine=e.getScene().getEngine():this._engine=e,this._updatable=i,this._instanced=a,this._divisor=l||1,this._label=c,t instanceof Ah?(this._data=null,this._buffer=t):(this._data=t,this._buffer=null),this.byteStride=o?r:r*Float32Array.BYTES_PER_ELEMENT,s||this.create()}createVertexBuffer(e,t,i,r,s,a=!1,o){let l=a?t:t*Float32Array.BYTES_PER_ELEMENT,c=r?a?r:r*Float32Array.BYTES_PER_ELEMENT:this.byteStride;return new L(this._engine,this,e,this._updatable,!0,c,s===void 0?this._instanced:s,l,i,void 0,void 0,!0,this._divisor||o)}isUpdatable(){return this._updatable}getData(){return this._data}getBuffer(){return this._buffer}getStrideSize(){return this.byteStride/Float32Array.BYTES_PER_ELEMENT}create(e=null){!e&&this._buffer||(e=e||this._data,e&&(this._buffer?this._updatable&&(this._engine.updateDynamicVertexBuffer(this._buffer,e),this._data=e):this._updatable?(this._buffer=this._engine.createDynamicVertexBuffer(e,this._label),this._data=e):this._buffer=this._engine.createVertexBuffer(e,void 0,this._label)))}_rebuild(){if(this._data)this._buffer=null,this.create(this._data);else{if(!this._buffer)return;if(this._buffer.capacity>0){this._updatable?this._buffer=this._engine.createDynamicVertexBuffer(this._buffer.capacity,this._label):this._buffer=this._engine.createVertexBuffer(this._buffer.capacity,void 0,this._label);return}$.Warn(`Missing data for buffer "${this._label}" ${this._buffer?"(uniqueId: "+this._buffer.uniqueId+")":""}. Buffer reconstruction failed.`),this._buffer=null}}update(e){this.create(e)}updateDirectly(e,t,i,r=!1){this._buffer&&this._updatable&&(this._engine.updateDynamicVertexBuffer(this._buffer,e,r?t:t*Float32Array.BYTES_PER_ELEMENT,i?i*this.byteStride:void 0),t===0&&i===void 0?this._data=e:this._data=null)}_increaseReferences(){if(this._buffer){if(!this._isAlreadyOwned){this._isAlreadyOwned=!0;return}this._buffer.references++}}dispose(){this._buffer&&this._engine._releaseBuffer(this._buffer)&&(this._isDisposed=!0,this._data=null,this._buffer=null)}},L=class n{get isDisposed(){return this._isDisposed}get instanceDivisor(){return this._instanceDivisor}set instanceDivisor(e){let t=e!=0;this._instanceDivisor=e,t!==this._instanced&&(this._instanced=t,this._computeHashCode())}get _maxVerticesCount(){let e=this.getData();return e?Array.isArray(e)?e.length/(this.byteStride/4)-this.byteOffset/4:(e.byteLength-this.byteOffset)/this.byteStride:0}constructor(e,t,i,r,s,a,o,l,c,f,h=!1,d=!1,u=1,m=!1){var g,v,x,A,E;this._isDisposed=!1;let _;if(this.engine=e,typeof r=="object"&&r!==null?(_=(g=r.updatable)!=null?g:!1,s=r.postponeInternalCreation,a=r.stride,o=r.instanced,l=r.offset,c=r.size,f=r.type,h=(v=r.normalized)!=null?v:!1,d=(x=r.useBytes)!=null?x:!1,u=(A=r.divisor)!=null?A:1,m=(E=r.takeBufferOwnership)!=null?E:!1,this._label=r.label):_=!!r,t instanceof Qa?(this._buffer=t,this._ownsBuffer=m):(this._buffer=new Qa(e,t,_,a,s,o,d,u,this._label),this._ownsBuffer=!0),this.uniqueId=n._Counter++,this._kind=i,f===void 0){let T=this.getData();this.type=T?n.GetDataType(T):n.FLOAT}else this.type=f;let p=Yo(this.type);d?(this._size=c||(a?a/p:n.DeduceStride(i)),this.byteStride=a||this._buffer.byteStride||this._size*p,this.byteOffset=l||0):(this._size=c||a||n.DeduceStride(i),this.byteStride=a?a*p:this._buffer.byteStride||this._size*p,this.byteOffset=(l||0)*p),this.normalized=h,this._instanced=o!==void 0?o:!1,this._instanceDivisor=o?u:0,this._alignBuffer(),this._computeHashCode()}_computeHashCode(){this.hashCode=(this.type-5120<<0)+((this.normalized?1:0)<<3)+(this._size<<4)+((this._instanced?1:0)<<6)+(this.byteStride<<12)}_rebuild(){var e;(e=this._buffer)==null||e._rebuild()}getKind(){return this._kind}isUpdatable(){return this._buffer.isUpdatable()}getData(){return this._buffer.getData()}getFloatData(e,t){let i=this.getData();return i?Q0(i,this._size,this.type,this.byteOffset,this.byteStride,this.normalized,e,t):null}getBuffer(){return this._buffer.getBuffer()}getWrapperBuffer(){return this._buffer}getStrideSize(){return this.byteStride/Yo(this.type)}getOffset(){return this.byteOffset/Yo(this.type)}getSize(e=!1){return e?this._size*Yo(this.type):this._size}getIsInstanced(){return this._instanced}getInstanceDivisor(){return this._instanceDivisor}create(e){this._buffer.create(e),this._alignBuffer()}update(e){this._buffer.update(e),this._alignBuffer()}updateDirectly(e,t,i=!1){this._buffer.updateDirectly(e,t,void 0,i),this._alignBuffer()}dispose(){this._ownsBuffer&&this._buffer.dispose(),this._isDisposed=!0}forEach(e,t){yh(this._buffer.getData(),this.byteOffset,this.byteStride,this._size,this.type,e,this.normalized,(i,r)=>{for(let s=0;s{for(let h=0;h{Ui();hi();Ul=class{constructor(e){this._vertexBuffers={},this._activePostProcesses=[],this.onBeforeRenderObservable=new ee,this._scene=e}_prepareBuffers(){if(this._vertexBuffers[L.PositionKind])return;let e=[];e.push(1,1),e.push(-1,1),e.push(-1,-1),e.push(1,-1),this._vertexBuffers[L.PositionKind]=new L(this._scene.getEngine(),e,L.PositionKind,!1,!1,2),this._buildIndexBuffer()}_buildIndexBuffer(){let e=[];e.push(0),e.push(1),e.push(2),e.push(0),e.push(2),e.push(3),this._indexBuffer=this._scene.getEngine().createIndexBuffer(e)}_getActivePostProcesses(e){let t=this._activePostProcesses;t.length=0;for(let i=0;i{Pt();Z3=(n,e,t)=>!n||n.getClassName&&n.getClassName()==="Mesh"?null:n.getClassName&&(n.getClassName()==="SubMesh"||n.getClassName()==="PhysicsBody")?n.clone(e):n.clone?n.clone():Array.isArray(n)?n.slice():t&&typeof n=="object"?{...n}:null;jo=class{static DeepCopy(e,t,i,r,s=!1){let a=cie(e);for(let o of a){if(o[0]==="_"&&(!r||r.indexOf(o)===-1)||o.endsWith("Observable")||i&&i.indexOf(o)!==-1)continue;let l=e[o],c=typeof l;if(c!=="function")try{if(c==="object")if(l instanceof Uint8Array)t[o]=Uint8Array.from(l);else if(l instanceof Array){if(t[o]=[],l.length>0)if(typeof l[0]=="object")for(let f=0;f{hi();fa();Pt();__();Cl();an();Ch();Pi();Fl();Go();eM();h_();Wo();he=class{static get BaseUrl(){return Bi.BaseUrl}static set BaseUrl(e){Bi.BaseUrl=e}static get CleanUrl(){return Bi.CleanUrl}static set CleanUrl(e){Bi.CleanUrl=e}static IsAbsoluteUrl(e){return e.indexOf("//")===0?!0:e.indexOf("://")===-1||e.indexOf(".")===-1||e.indexOf("/")===-1||e.indexOf(":")>e.indexOf("/")?!1:e.indexOf("://"){Ko(e,s=>{i(s)},void 0,void 0,t,(s,a)=>{r(a)})})}static GetAssetUrl(e){if(!e)return"";if(vt.AssetBaseUrl&&e.startsWith(vt._DefaultAssetsUrl)){let t=vt.AssetBaseUrl.endsWith("/")?vt.AssetBaseUrl.slice(0,-1):vt.AssetBaseUrl;return e.replace(vt._DefaultAssetsUrl,t)}return e}static GetBabylonScriptURL(e,t){if(!e)return"";if(e.startsWith(vt._DefaultCdnUrl)){if(vt.ScriptBaseUrl){let i=vt.ScriptBaseUrl.endsWith("/")?vt.ScriptBaseUrl.slice(0,-1):vt.ScriptBaseUrl;e=e.replace(vt._DefaultCdnUrl,i)}else if(vt._CdnVersion){let i=`${vt._DefaultCdnUrl}/v${vt._CdnVersion}`;e.startsWith(i)||(e=e.replace(vt._DefaultCdnUrl,i))}}return e=vt.ScriptPreprocessUrl(e),t&&!vt.IsAbsoluteUrl(e)&&(e=vt.GetAbsoluteUrl(e)),e}static LoadBabylonScript(e,t,i,r){e=vt.GetBabylonScriptURL(e),vt.LoadScript(e,t,i)}static async LoadBabylonScriptAsync(e){return e=vt.GetBabylonScriptURL(e),await vt.LoadScriptAsync(e)}static _LoadScriptNative(e,t,i){let r=new Error(`[AI3D] Babylon script loading is disabled in this plugin build. Refused script URL: ${e}`);i==null||i(r.message,r)}static _LoadScriptWeb(e,t,i,r,s=!1){let a=new Error(`[AI3D] Babylon script loading is disabled in this plugin build. Refused script URL: ${e}`);i==null||i(a.message,a)}static async LoadScriptAsync(e,t){return await new Promise((i,r)=>{this.LoadScript(e,()=>{i()},(s,a)=>{r(a||new Error(s))},t)})}static ReadFileAsDataURL(e,t,i){let r=new FileReader,s={onCompleteObservable:new ee,abort:()=>r.abort()};return r.onloadend=()=>{s.onCompleteObservable.notifyObservers(s)},r.onload=a=>{t(a.target.result)},r.onprogress=i,r.readAsDataURL(e),s}static ReadFile(e,t,i,r,s){return Ph(e,t,i,r,s)}static FileAsURL(e){let t=new Blob([e]);return window.URL.createObjectURL(t)}static Format(e,t=2){return e.toFixed(t)}static DeepCopy(e,t,i,r){jo.DeepCopy(e,t,i,r)}static IsEmpty(e){for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t))return!1;return!0}static RegisterTopRootEvents(e,t){for(let i=0;i{let l=atob(this.toDataURL(a,o).split(",")[1]),c=l.length,f=new Uint8Array(c);for(let h=0;ht(s)):e.toBlob(function(s){t(s)},i,r)}static DownloadBlob(e,t){if("download"in document.createElement("a")){if(!t){let i=new Date;t="screenshot_"+((i.getFullYear()+"-"+(i.getMonth()+1)).slice(2)+"-"+i.getDate()+"_"+i.getHours()+"-"+("0"+i.getMinutes()).slice(-2))+".png"}vt.Download(e,t)}else if(e&&typeof URL!="undefined"){let i=URL.createObjectURL(e),r=window.open("");if(!r)return;let s=r.document.createElement("img");s.onload=function(){URL.revokeObjectURL(i)},s.src=i,r.document.body.appendChild(s)}}static EncodeScreenshotCanvasData(e,t,i="image/png",r,s){if(typeof r=="string"||!t)this.ToBlob(e,function(a){a&&vt.DownloadBlob(a,r),t&&t("")},i,s);else if(t){if(vt._IsOffScreenCanvas(e)){e.convertToBlob({type:i,quality:s}).then(o=>{let l=new FileReader;l.readAsDataURL(o),l.onloadend=()=>{let c=l.result;t(c)}});return}let a=e.toDataURL(i,s);t(a)}}static Download(e,t){if(typeof URL=="undefined")return;let i=window.URL.createObjectURL(e),r=document.createElement("a");document.body.appendChild(r),r.style.display="none",r.href=i,r.download=t,r.addEventListener("click",()=>{r.parentElement&&r.parentElement.removeChild(r)}),r.click(),window.URL.revokeObjectURL(i)}static BackCompatCameraNoPreventDefault(e){return typeof e[0]=="boolean"?e[0]:typeof e[1]=="boolean"?e[1]:!1}static CreateScreenshot(e,t,i,r,s="image/png",a=!1,o){throw Xe("ScreenshotTools")}static async CreateScreenshotAsync(e,t,i,r="image/png",s){throw Xe("ScreenshotTools")}static CreateScreenshotUsingRenderTarget(e,t,i,r,s="image/png",a=1,o=!1,l,c=!1,f=!1,h=!0,d,u){throw Xe("ScreenshotTools")}static async CreateScreenshotUsingRenderTargetAsync(e,t,i,r="image/png",s=1,a=!1,o,l=!1,c=!1,f=!0,h,d){throw Xe("ScreenshotTools")}static RandomId(){return Qc()}static IsBase64(e){return $c(e)}static DecodeBase64(e){return ef(e)}static get errorsCount(){return $.errorsCount}static Log(e){$.Log(e)}static Warn(e){$.Warn(e)}static Error(e){$.Error(e)}static get LogCache(){return $.LogCache}static ClearLogCache(){$.ClearLogCache()}static set LogLevels(e){$.LogLevels=e}static set PerformanceLogLevel(e){var t;if((e&vt.PerformanceUserMarkLogLevel)===vt.PerformanceUserMarkLogLevel){_native!=null&&_native.enablePerformanceLogging?(_native.enablePerformanceLogging(1),vt.StartPerformanceCounter=vt._StartMarkNative,vt.EndPerformanceCounter=vt._EndMarkNative):(vt.StartPerformanceCounter=vt._StartUserMark,vt.EndPerformanceCounter=vt._EndUserMark);return}if((e&vt.PerformanceConsoleLogLevel)===vt.PerformanceConsoleLogLevel){_native!=null&&_native.enablePerformanceLogging?(_native.enablePerformanceLogging(2),vt.StartPerformanceCounter=vt._StartMarkNative,vt.EndPerformanceCounter=vt._EndMarkNative):(vt.StartPerformanceCounter=vt._StartPerformanceConsole,vt.EndPerformanceCounter=vt._EndPerformanceConsole);return}vt.StartPerformanceCounter=vt._StartPerformanceCounterDisabled,vt.EndPerformanceCounter=vt._EndPerformanceCounterDisabled,(t=_native==null?void 0:_native.disablePerformanceLogging)==null||t.call(_native)}static _StartPerformanceCounterDisabled(e,t){}static _EndPerformanceCounterDisabled(e,t){}static _StartUserMark(e,t=!0){if(!vt._Performance){if(!ar())return;vt._Performance=window.performance}!t||!vt._Performance.mark||vt._Performance.mark(e+"-Begin")}static _EndUserMark(e,t=!0){!t||!vt._Performance.mark||(vt._Performance.mark(e+"-End"),vt._Performance.measure(e,e+"-Begin",e+"-End"))}static _StartPerformanceConsole(e,t=!0){t&&(vt._StartUserMark(e,t),console.time&&console.time(e))}static _EndPerformanceConsole(e,t=!0){t&&(vt._EndUserMark(e,t),console.timeEnd(e))}static _StartMarkNative(e,t=!0){if(t&&(_native!=null&&_native.startPerformanceCounter))if(vt._NativePerformanceCounterHandles.has(e))vt.Warn(`Performance counter with name ${e} is already started.`);else{let i=_native.startPerformanceCounter(e);vt._NativePerformanceCounterHandles.set(e,i)}}static _EndMarkNative(e,t=!0){if(t&&(_native!=null&&_native.endPerformanceCounter)){let i=vt._NativePerformanceCounterHandles.get(e);i?(_native.endPerformanceCounter(i),vt._NativePerformanceCounterHandles.delete(e)):vt.Warn(`Performance counter with name ${e} was not started.`)}}static get Now(){return fr.Now}static GetClassName(e,t=!1){let i=null;return!t&&e.getClassName?i=e.getClassName():(e instanceof Object&&(i=(t?e:Object.getPrototypeOf(e)).constructor.__bjsclassName__),i||(i=typeof e)),i}static First(e,t){for(let i of e)if(t(i))return i;return null}static getFullClassName(e,t=!1){let i=null,r=null;if(!t&&e.getClassName)i=e.getClassName();else{if(e instanceof Object){let s=t?e:Object.getPrototypeOf(e);i=s.constructor.__bjsclassName__,r=s.constructor.__bjsmoduleName__}i||(i=typeof e)}return i?(r!=null?r+".":"")+i:null}static async DelayAsync(e){await new Promise(t=>{setTimeout(()=>{t()},e)})}static IsSafari(){return Ml()?/^((?!chrome|android).)*safari/i.test(navigator.userAgent):!1}};vt=he;he.AssetBaseUrl="";he.UseCustomRequestHeaders=!1;he.CustomRequestHeaders=Rr.CustomRequestHeaders;he.GetDOMTextContent=xS;he._DefaultCdnUrl="https://cdn.babylonjs.com";he._CdnVersion="9.6.0";he._DefaultAssetsUrl="https://assets.babylonjs.com/core";he.LoadScript=typeof _native=="undefined"?vt._LoadScriptWeb:vt._LoadScriptNative;he.GetAbsoluteUrl=typeof document=="object"?n=>{let e=document.createElement("a");return e.href=n,e.href}:typeof URL=="function"&&typeof location=="object"?n=>new URL(n,location.origin).href:()=>{throw new Error("Unable to get absolute URL. Override BABYLON.Tools.GetAbsoluteUrl to a custom implementation for the current context.")};he.NoneLogLevel=$.NoneLogLevel;he.MessageLogLevel=$.MessageLogLevel;he.WarningLogLevel=$.WarningLogLevel;he.ErrorLogLevel=$.ErrorLogLevel;he.AllLogLevel=$.AllLogLevel;he.IsWindowObjectExist=ar;he.PerformanceNoneLogLevel=0;he.PerformanceUserMarkLogLevel=1;he.PerformanceConsoleLogLevel=2;he._NativePerformanceCounterHandles=new Map;he.StartPerformanceCounter=vt._StartPerformanceCounterDisabled;he.EndPerformanceCounter=vt._EndPerformanceCounterDisabled;mT=class n{constructor(e,t,i,r=0){this.iterations=e,this.index=r-1,this._done=!1,this._fn=t,this._successCallback=i}executeNext(){this._done||(this.index+1{s&&s()?o.breakLoop():setTimeout(()=>{for(let l=0;l=e)break;if(i(c),s&&s()){o.breakLoop();break}}o.executeNext()},a)},r)}};he.Mix=a_;he.IsExponentOfTwo=xh;Le.FallbackTexture="data:image/jpg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QBmRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAAExAAIAAAAQAAAATgAAAAAAAABgAAAAAQAAAGAAAAABcGFpbnQubmV0IDQuMC41AP/bAEMABAIDAwMCBAMDAwQEBAQFCQYFBQUFCwgIBgkNCw0NDQsMDA4QFBEODxMPDAwSGBITFRYXFxcOERkbGRYaFBYXFv/bAEMBBAQEBQUFCgYGChYPDA8WFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFv/AABEIAQABAAMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APH6KKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FCiiigD6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++gooooA+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gUKKKKAPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76CiiigD5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BQooooA+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/voKKKKAPl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FCiiigD6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++gooooA+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gUKKKKAPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76CiiigD5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BQooooA+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/voKKKKAPl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FCiiigD6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++gooooA+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gUKKKKAPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76P//Z"});var or,nf=C(()=>{Pt();Ci();or=class n{constructor(e,t,i=!1,r,s=!1,a){this._uniformNames=[],this._valueCache={},this._engine=e,this._noUBO=!e.supportsUniformBuffers||s,this._dynamic=i,this._name=r!=null?r:"no-name",this._data=t||[],this._uniformLocations={},this._uniformSizes={},this._uniformArraySizes={},this._uniformLocationPointer=0,this._needSync=!1,this._trackUBOsInFrame=!1,(a===void 0&&this._engine._features.trackUbosInFrame||a===!0)&&(this._buffers=[],this._bufferIndex=-1,this._bufferUpdatedLastFrame=!1,this._createBufferOnWrite=!1,this._currentFrameId=0,this._trackUBOsInFrame=!0),this._noUBO?(this.updateMatrix3x3=this._updateMatrix3x3ForEffect,this.updateMatrix2x2=this._updateMatrix2x2ForEffect,this.updateFloat=this._updateFloatForEffect,this.updateFloat2=this._updateFloat2ForEffect,this.updateFloat3=this._updateFloat3ForEffect,this.updateFloat4=this._updateFloat4ForEffect,this.updateFloatArray=this._updateFloatArrayForEffect,this.updateArray=this._updateArrayForEffect,this.updateIntArray=this._updateIntArrayForEffect,this.updateUIntArray=this._updateUIntArrayForEffect,this.updateMatrix=this._updateMatrixForEffect,this.updateMatrices=this._updateMatricesForEffect,this.updateVector3=this._updateVector3ForEffect,this.updateVector4=this._updateVector4ForEffect,this.updateColor3=this._updateColor3ForEffect,this.updateColor4=this._updateColor4ForEffect,this.updateDirectColor4=this._updateDirectColor4ForEffect,this.updateInt=this._updateIntForEffect,this.updateInt2=this._updateInt2ForEffect,this.updateInt3=this._updateInt3ForEffect,this.updateInt4=this._updateInt4ForEffect,this.updateUInt=this._updateUIntForEffect,this.updateUInt2=this._updateUInt2ForEffect,this.updateUInt3=this._updateUInt3ForEffect,this.updateUInt4=this._updateUInt4ForEffect):(this._engine._uniformBuffers.push(this),this.updateMatrix3x3=this._updateMatrix3x3ForUniform,this.updateMatrix2x2=this._updateMatrix2x2ForUniform,this.updateFloat=this._updateFloatForUniform,this.updateFloat2=this._updateFloat2ForUniform,this.updateFloat3=this._updateFloat3ForUniform,this.updateFloat4=this._updateFloat4ForUniform,this.updateFloatArray=this._updateFloatArrayForUniform,this.updateArray=this._updateArrayForUniform,this.updateIntArray=this._updateIntArrayForUniform,this.updateUIntArray=this._updateUIntArrayForUniform,this.updateMatrix=this._updateMatrixForUniform,this.updateMatrices=this._updateMatricesForUniform,this.updateVector3=this._updateVector3ForUniform,this.updateVector4=this._updateVector4ForUniform,this.updateColor3=this._updateColor3ForUniform,this.updateColor4=this._updateColor4ForUniform,this.updateDirectColor4=this._updateDirectColor4ForUniform,this.updateInt=this._updateIntForUniform,this.updateInt2=this._updateInt2ForUniform,this.updateInt3=this._updateInt3ForUniform,this.updateInt4=this._updateInt4ForUniform,this.updateUInt=this._updateUIntForUniform,this.updateUInt2=this._updateUInt2ForUniform,this.updateUInt3=this._updateUInt3ForUniform,this.updateUInt4=this._updateUInt4ForUniform)}get useUbo(){return!this._noUBO}get isSync(){return!this._needSync}isDynamic(){return this._dynamic}getData(){return this._bufferData}getBuffer(){return this._buffer}getUniformNames(){return this._uniformNames}_fillAlignment(e){let t;if(e<=2?t=e:t=4,this._uniformLocationPointer%t!==0){let i=this._uniformLocationPointer;this._uniformLocationPointer+=t-this._uniformLocationPointer%t;let r=this._uniformLocationPointer-i;for(let s=0;s0&&typeof t=="number"&&(this._uniformArraySizes[e]={strideSize:t,arraySize:i}),this._uniformLocations[e]!==void 0||(this._uniformNames.push(e),this._noUBO))return;let r;if(i>0){if(t instanceof Array)throw"addUniform should not be use with Array in UBO: "+e;if(this._fillAlignment(4),t==16)t=t*i;else{let a=(4-t)*i;t=t*i+a}r=[];for(let s=0;s1&&this._buffers[this._bufferIndex][1])if(this._buffersEqual(this._bufferData,this._buffers[this._bufferIndex][1])){this._needSync=!1,this._createBufferOnWrite=this._trackUBOsInFrame;return}else this._copyBuffer(this._bufferData,this._buffers[this._bufferIndex][1]);this._bufferUpdatedLastFrame=!0,this._engine.updateUniformBuffer(this._buffer,this._bufferData),this._needSync=!1,this._createBufferOnWrite=this._trackUBOsInFrame}}_createNewBuffer(){this._bufferIndex+10?(this._buffers.length===1?this._needSync=!this._bufferUpdatedLastFrame:this._needSync=this._bufferIndex!==0,this._bufferIndex=0,this._buffer=this._buffers[this._bufferIndex][0]):this._bufferIndex=-1)}updateUniform(e,t,i){this._checkNewFrame();let r=this._uniformLocations[e];if(r===void 0){if(this._buffer){$.Error("Cannot add an uniform after UBO has been created. uniformName="+e);return}this.addUniform(e,i),r=this._uniformLocations[e]}if(this._buffer||this.create(),this._dynamic)for(let s=0;s1&&this._buffers[t][1]&&this._bufferData.set(this._buffers[t][1]),this._valueCache={},this._currentFrameId=this._engine.frameId,!0;return!1}has(e){return this._uniformLocations[e]!==void 0}dispose(){if(this._noUBO)return;let e=this._engine._uniformBuffers,t=e.indexOf(this);if(t!==-1&&(e[t]=e[e.length-1],e.pop()),this._trackUBOsInFrame&&this._buffers)for(let i=0;i{Fi=class n{constructor(e){this.length=0,this.data=new Array(e),this._id=n._GlobalId++}push(e){this.data[this.length++]=e,this.length>this.data.length&&(this.data.length*=2)}forEach(e){for(let t=0;tthis.data.length&&(this.data.length=(this.length+e.length)*2);for(let t=0;t=this.length?-1:t}contains(e){return this.indexOf(e)!==-1}};Fi._GlobalId=0;Ja=class extends Fi{constructor(){super(...arguments),this._duplicateId=0}push(e){super.push(e),e.__smartArrayFlags||(e.__smartArrayFlags={}),e.__smartArrayFlags[this._id]=this._duplicateId}pushNoDuplicate(e){return e.__smartArrayFlags&&e.__smartArrayFlags[this._id]===this._duplicateId?!1:(this.push(e),!0)}reset(){super.reset(),this._duplicateId++}concatWithNoDuplicate(e){if(e.length!==0){this.length+e.length>this.data.length&&(this.data.length=(this.length+e.length)*2);for(let t=0;t{$a();Ve();g_=class n{set opaqueSortCompareFn(e){e?this._opaqueSortCompareFn=e:this._opaqueSortCompareFn=n.PainterSortCompare,this._renderOpaque=this._renderOpaqueSorted}set alphaTestSortCompareFn(e){e?this._alphaTestSortCompareFn=e:this._alphaTestSortCompareFn=n.PainterSortCompare,this._renderAlphaTest=this._renderAlphaTestSorted}set transparentSortCompareFn(e){e?this._transparentSortCompareFn=e:this._transparentSortCompareFn=n.defaultTransparentSortCompare,this._renderTransparent=this._renderTransparentSorted}constructor(e,t,i=null,r=null,s=null){this.index=e,this._opaqueSubMeshes=new Fi(256),this._transparentSubMeshes=new Fi(256),this._alphaTestSubMeshes=new Fi(256),this._depthOnlySubMeshes=new Fi(256),this._particleSystems=new Fi(256),this._spriteManagers=new Fi(256),this._empty=!0,this._edgesRenderers=new Ja(16),this.disableDepthPrePass=!1,this._scene=t,this.opaqueSortCompareFn=i,this.alphaTestSortCompareFn=r,this.transparentSortCompareFn=s}render(e,t,i,r,s=!0,a=!0,o=!0,l=!0,c){if(e){e(this._opaqueSubMeshes,this._alphaTestSubMeshes,this._transparentSubMeshes,this._depthOnlySubMeshes);return}let f=this._scene.getEngine();s&&this._depthOnlySubMeshes.length!==0&&(f.setColorWrite(!1),this._renderAlphaTest(this._depthOnlySubMeshes),f.setColorWrite(!0)),a&&this._opaqueSubMeshes.length!==0&&this._renderOpaque(this._opaqueSubMeshes),o&&this._alphaTestSubMeshes.length!==0&&this._renderAlphaTest(this._alphaTestSubMeshes);let h=f.getStencilBuffer();if(f.setStencilBuffer(!1),t&&this._renderSprites(),i&&this._renderParticles(r),this.onBeforeTransparentRendering&&this.onBeforeTransparentRendering(),l&&(c||this._transparentSubMeshes.length!==0||this._scene.useOrderIndependentTransparency)){if(f.setStencilBuffer(h),c)c(this._transparentSubMeshes,this);else if(this._scene.useOrderIndependentTransparency){let d=this._scene.depthPeelingRenderer.render(this._transparentSubMeshes);d.length&&this._renderTransparent(d)}else this._renderTransparent(this._transparentSubMeshes);f.setAlphaMode(0)}if(f.setStencilBuffer(!1),a&&this._edgesRenderers.length){for(let d=0;dt._alphaIndex?1:e._alphaIndext._distanceToCamera?-1:0}static frontToBackSortCompare(e,t){return e._distanceToCamerat._distanceToCamera?1:0}static PainterSortCompare(e,t){let i=e.getMesh(),r=t.getMesh();return i.material&&r.material?i.material.uniqueId-r.material.uniqueId:i.uniqueId-r.uniqueId}prepare(){this._opaqueSubMeshes.reset(),this._transparentSubMeshes.reset(),this._alphaTestSubMeshes.reset(),this._depthOnlySubMeshes.reset(),this._particleSystems.reset(),this.prepareSprites(),this._edgesRenderers.reset(),this._empty=!0}prepareSprites(){this._spriteManagers.reset()}dispose(){this._opaqueSubMeshes.dispose(),this._transparentSubMeshes.dispose(),this._alphaTestSubMeshes.dispose(),this._depthOnlySubMeshes.dispose(),this._particleSystems.dispose(),this._spriteManagers.dispose(),this._edgesRenderers.dispose()}dispatch(e,t,i){t===void 0&&(t=e.getMesh()),i===void 0&&(i=e.getMaterial()),i!=null&&(i.needAlphaBlendingForMesh(t)?this._transparentSubMeshes.push(e):i.needAlphaTestingForMesh(t)?(i.needDepthPrePass&&!this.disableDepthPrePass&&this._depthOnlySubMeshes.push(e),this._alphaTestSubMeshes.push(e)):(i.needDepthPrePass&&!this.disableDepthPrePass&&this._depthOnlySubMeshes.push(e),this._opaqueSubMeshes.push(e)),t._renderingGroup=this,t._edgesRenderer&&t.isEnabled()&&t.isVisible&&t._edgesRenderer.isEnabled&&this._edgesRenderers.pushNoDuplicate(t._edgesRenderer),this._empty=!1)}dispatchSprites(e){this._spriteManagers.push(e),this._empty=!1}dispatchParticles(e){this._particleSystems.push(e),this._empty=!1}_renderParticles(e){if(this._particleSystems.length===0)return;let t=this._scene.activeCamera;this._scene.onBeforeParticlesRenderingObservable.notifyObservers(this._scene);for(let i=0;i{Q3();tM=class{},ua=class n{get disableDepthPrePass(){return this._disableDepthPrePass}set disableDepthPrePass(e){this._disableDepthPrePass=e;for(let t of this._renderingGroups)t.disableDepthPrePass=e}get maintainStateBetweenFrames(){return this._maintainStateBetweenFrames}set maintainStateBetweenFrames(e){e!==this._maintainStateBetweenFrames&&(this._maintainStateBetweenFrames=e,this._maintainStateBetweenFrames||this.restoreDispachedFlags())}restoreDispachedFlags(){for(let e of this._scene.meshes)if(e.subMeshes)for(let t of e.subMeshes)t._wasDispatched=!1;if(this._scene.spriteManagers)for(let e of this._scene.spriteManagers)e._wasDispatched=!1;for(let e of this._scene.particleSystems)e._wasDispatched=!1}constructor(e){this._useSceneAutoClearSetup=!1,this._disableDepthPrePass=!1,this._renderingGroups=new Array,this._autoClearDepthStencil={},this._customOpaqueSortCompareFn={},this._customAlphaTestSortCompareFn={},this._customTransparentSortCompareFn={},this._renderingGroupInfo=new tM,this._maintainStateBetweenFrames=!1,this._scene=e;for(let t=n.MIN_RENDERINGGROUPS;t{Yt=class{static CompareLightsPriority(e,t){return e.shadowEnabled!==t.shadowEnabled?(t.shadowEnabled?1:0)-(e.shadowEnabled?1:0):t.renderPriority-e.renderPriority}};Yt.FALLOFF_DEFAULT=0;Yt.FALLOFF_PHYSICAL=1;Yt.FALLOFF_GLTF=2;Yt.FALLOFF_STANDARD=3;Yt.LIGHTMAP_DEFAULT=0;Yt.LIGHTMAP_SPECULAR=1;Yt.LIGHTMAP_SHADOWSONLY=2;Yt.INTENSITYMODE_AUTOMATIC=0;Yt.INTENSITYMODE_LUMINOUSPOWER=1;Yt.INTENSITYMODE_LUMINOUSINTENSITY=2;Yt.INTENSITYMODE_ILLUMINANCE=3;Yt.INTENSITYMODE_LUMINANCE=4;Yt.LIGHTTYPEID_POINTLIGHT=0;Yt.LIGHTTYPEID_DIRECTIONALLIGHT=1;Yt.LIGHTTYPEID_SPOTLIGHT=2;Yt.LIGHTTYPEID_HEMISPHERICLIGHT=3;Yt.LIGHTTYPEID_RECT_AREALIGHT=4;Yt.LIGHTTYPEID_CLUSTERED_CONTAINER=5});var ma,iM=C(()=>{nf();hi();pT();Ho();Go();Pt();$a();v_();ma=class n{get renderList(){return this._renderList}set renderList(e){this._renderList!==e&&(this._unObserveRenderList&&(this._unObserveRenderList(),this._unObserveRenderList=null),e&&(this._unObserveRenderList=JS(e,this._renderListHasChanged)),this._renderList=e)}get disableImageProcessing(){return this._disableImageProcessing}set disableImageProcessing(e){e!==this._disableImageProcessing&&(this._disableImageProcessing=e,this._scene.markAllMaterialsAsDirty(64))}get disableDepthPrePass(){return this._disableDepthPrePass}set disableDepthPrePass(e){this._disableDepthPrePass=e,this._renderingManager.disableDepthPrePass=e}get name(){return this._name}set name(e){if(this._name!==e){if(this._name=e,this._sceneUBOs)for(let t=0;tthis._checkReadiness(),()=>{if(this._freezeActiveMeshesCancel=null,e)for(let t=0;t{this._freezeActiveMeshesCancel=null,i?($.Error("ObjectRenderer: Timeout while waiting for the renderer to be ready."),t&&$.Error(t)):($.Error("ObjectRenderer: An unexpected error occurred while waiting for the renderer to be ready."),t&&($.Error(t),t.stack&&$.Error(t.stack)))})}_unfreezeActiveMeshes(){var e;(e=this._freezeActiveMeshesCancel)==null||e.call(this),this._freezeActiveMeshesCancel=null;for(let t=0;t{let a=this._renderList?this._renderList.length:0;if(s===0&&a>0||a===0)for(let o of this._scene.meshes)o._markSubMeshesAsLightDirty()},this.particleSystemList=null,this.getCustomRenderList=null,this.renderMeshes=!0,this.renderDepthOnlyMeshes=!0,this.renderOpaqueMeshes=!0,this.renderAlphaTestMeshes=!0,this.renderTransparentMeshes=!0,this.renderParticles=!0,this.renderSprites=!1,this.forceLayerMaskCheck=!1,this.enableBoundingBoxRendering=!1,this.enableOutlineRendering=!0,this._disableImageProcessing=!1,this.dontSetTransformationMatrix=!1,this._disableDepthPrePass=!1,this.onBeforeRenderObservable=new ee,this.onAfterRenderObservable=new ee,this.onBeforeRenderingManagerRenderObservable=new ee,this.onAfterRenderingManagerRenderObservable=new ee,this.onInitRenderingObservable=new ee,this.onFinishRenderingObservable=new ee,this.onFastPathRenderObservable=new ee,this._currentRefreshId=-1,this._refreshRate=1,this._currentApplyByPostProcessSetting=!1,this._activeMeshes=new Fi(256),this._activeBoundingBoxes=new Fi(32),this._currentFrameId=-1,this._currentSceneUBOIndex=0,this._isFrozen=!1,this._freezeActiveMeshesCancel=null,this._currentSceneCamera=null,this.name=e,this._scene=t,this._engine=this._scene.getEngine(),this._useUBO=this._engine.supportsUniformBuffers,this.renderList=[],this._renderPassIds=[],this.options={numPasses:1,doNotChangeAspectRatio:!0,enableClusteredLights:!1,...i},this._createRenderPassId(),this.renderPassId=this._renderPassIds[0],this._renderingManager=new ua(t),this._renderingManager._useSceneAutoClearSetup=!0,this.options.enableClusteredLights&&this.onInitRenderingObservable.add(()=>{for(let r of this._scene.lights)r.getTypeID()===Yt.LIGHTTYPEID_CLUSTERED_CONTAINER&&r.isSupported&&r._updateBatches(this.activeCamera).render()}),this._scene.addObjectRenderer(this)}_releaseRenderPassId(){for(let e=0;e=this._sceneUBOs.length){let s=this._sceneUBOs.length;this._sceneUBOs.push(this._createSceneUBO(`Scene ubo #${s} for ${this.name}`,t)),this._sceneUBOIsMultiview.push(t)}else this._sceneUBOIsMultiview[this._currentSceneUBOIndex]!==t&&(this._sceneUBOs[this._currentSceneUBOIndex].dispose(),this._sceneUBOs[this._currentSceneUBOIndex]=this._createSceneUBO(`Scene ubo #${this._currentSceneUBOIndex} for ${this.name}`,t),this._sceneUBOIsMultiview[this._currentSceneUBOIndex]=t);let i=this._sceneUBOs[this._currentSceneUBOIndex++];return i.unbindEffect(),i}resetRefreshCounter(){this._currentRefreshId=-1}get refreshRate(){return this._refreshRate}set refreshRate(e){this._refreshRate=e,this.resetRefreshCounter()}shouldRender(){return this._engine.snapshotRendering?!0:this._currentRefreshId===-1?(this._currentRefreshId=1,!0):this.refreshRate===this._currentRefreshId?(this._currentRefreshId=1,!0):(this._currentRefreshId++,!1)}isReadyForRendering(e,t){this.prepareRenderList(),this.initRender(e,t);let i=this._checkReadiness();return this.finishRender(),i}prepareRenderList(){let e=this._scene;if(this._waitingRenderList){if(!this.renderListPredicate){this.renderList=[];for(let t=0;t1&&(e.incrementRenderId(),e.resetCachedMaterial())}let s=this.particleSystemList||e.particleSystems;for(let a of s)a.isReady()||(i=!1);return this._engine.currentRenderPassId=t,i}_prepareRenderingManager(e=0,t=!1){var d,u;let i=this._scene,r=null,s,a,o=this.renderList?this.renderList:i.frameGraph?i.meshes:i.getActiveMeshes().data,l=this.renderList||i.frameGraph?o.length:i.getActiveMeshes().length;if(this.getCustomRenderList&&(r=this.getCustomRenderList(e,o,l)),r)s=r.length,a=this.forceLayerMaskCheck;else{if(this._defaultRenderListPrepared&&!t&&!this._engine.isWebGPU)return o;this._defaultRenderListPrepared=!0,r=o,s=l,a=!this.renderList||this.forceLayerMaskCheck}let c=i.activeCamera,f=(d=this.cameraForLOD)!=null?d:c,h=(u=i.getBoundingBoxRenderer)==null?void 0:u.call(i);if(i._activeMeshesFrozen&&this._isFrozen){if(this._renderingManager.resetSprites(),this.enableBoundingBoxRendering&&h){h.reset();for(let m=0;m{Go();Wn=class{static GetEffect(e){return e.getPipelineContext===void 0?e.effect:e}constructor(e,t=!0){this._wasPreviouslyReady=!1,this._forceRebindOnNextCall=!0,this._wasPreviouslyUsingInstances=null,this.effect=null,this.defines=null,this.drawContext=e.createDrawContext(),t&&(this.materialContext=e.createMaterialContext())}setEffect(e,t,i=!0){var r;this.effect=e,t!==void 0&&(this.defines=t),i&&((r=this.drawContext)==null||r.reset())}dispose(e=!1){var t;if(this.effect){let i=this.effect;e?i.dispose():Ya.SetImmediate(()=>{i.getEngine().onEndFrameObservable.addOnce(()=>{i.dispose()})}),this.effect=null}(t=this.drawContext)==null||t.dispose()}}});var $3={};et($3,{postprocessVertexShader:()=>fie});var rM,J3,fie,nM=C(()=>{k();rM="postprocessVertexShader",J3=`attribute vec2 position;uniform vec2 scale;varying vec2 vUV;const vec2 madd=vec2(0.5,0.5); +${this.m[12]}, ${this.m[13]}, ${this.m[14]}, ${this.m[15]}}`}toArray(e=null,t=0){if(!e)return this._m;let i=this._m;for(let r=0;r<16;r++)e[t+r]=i[r];return this}asArray(){return this._m}fromArray(e,t=0){return n.FromArrayToRef(e,t,this)}copyFromFloats(...e){return n.FromArrayToRef(e,0,this)}set(...e){let t=this._m;for(let i=0;i<16;i++)t[i]=e[i];return this.markAsUpdated(),this}setAll(e){let t=this._m;for(let i=0;i<16;i++)t[i]=e;return this.markAsUpdated(),this}invert(){return this.invertToRef(this),this}reset(){return n.FromValuesToRef(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,this),this._updateIdentityStatus(!1),this}add(e){let t=new n;return this.addToRef(e,t),t}addToRef(e,t){let i=this._m,r=t._m,s=e.m;for(let a=0;a<16;a++)r[a]=i[a]+s[a];return t.markAsUpdated(),t}addToSelf(e){let t=this._m,i=e.m;return t[0]+=i[0],t[1]+=i[1],t[2]+=i[2],t[3]+=i[3],t[4]+=i[4],t[5]+=i[5],t[6]+=i[6],t[7]+=i[7],t[8]+=i[8],t[9]+=i[9],t[10]+=i[10],t[11]+=i[11],t[12]+=i[12],t[13]+=i[13],t[14]+=i[14],t[15]+=i[15],this.markAsUpdated(),this}addInPlace(e){let t=this._m,i=e.m;for(let r=0;r<16;r++)t[r]+=i[r];return this.markAsUpdated(),this}addInPlaceFromFloats(...e){let t=this._m;for(let i=0;i<16;i++)t[i]+=e[i];return this.markAsUpdated(),this}subtract(e){let t=this._m,i=e.m;for(let r=0;r<16;r++)t[r]-=i[r];return this.markAsUpdated(),this}subtractToRef(e,t){let i=this._m,r=e.m,s=t._m;for(let a=0;a<16;a++)s[a]=i[a]-r[a];return t.markAsUpdated(),t}subtractInPlace(e){let t=this._m,i=e.m;for(let r=0;r<16;r++)t[r]-=i[r];return this.markAsUpdated(),this}subtractFromFloats(...e){return this.subtractFromFloatsToRef(...e,new n)}subtractFromFloatsToRef(...e){let t=e.pop(),i=this._m,r=t._m,s=e;for(let a=0;a<16;a++)r[a]=i[a]-s[a];return t.markAsUpdated(),t}invertToRef(e){return this._isIdentity===!0?(n.IdentityToRef(e),e):(tM(this,e.asArray())?e.markAsUpdated():e.copyFrom(this),e)}addAtIndex(e,t){return this._m[e]+=t,this.markAsUpdated(),this}multiplyAtIndex(e,t){return this._m[e]*=t,this.markAsUpdated(),this}setTranslationFromFloats(e,t,i){return this._m[12]=e,this._m[13]=t,this._m[14]=i,this.markAsUpdated(),this}addTranslationFromFloats(e,t,i){return this._m[12]+=e,this._m[13]+=t,this._m[14]+=i,this.markAsUpdated(),this}setTranslation(e){return this.setTranslationFromFloats(e._x,e._y,e._z)}getTranslation(){return new b(this._m[12],this._m[13],this._m[14])}getTranslationToRef(e){return e.x=this._m[12],e.y=this._m[13],e.z=this._m[14],e}removeRotationAndScaling(){let e=this.m;return n.FromValuesToRef(1,0,0,0,0,1,0,0,0,0,1,0,e[12],e[13],e[14],e[15],this),this._updateIdentityStatus(e[12]===0&&e[13]===0&&e[14]===0&&e[15]===1),this}copyFrom(e){e.copyToArray(this._m);let t=e;return this.updateFlag=t.updateFlag,this._updateIdentityStatus(t._isIdentity,t._isIdentityDirty,t._isIdentity3x2,t._isIdentity3x2Dirty),this}copyToArray(e,t=0){return D3(this,e,t),this}multiply(e){let t=new n;return this.multiplyToRef(e,t),t}multiplyInPlace(e){let t=this._m,i=e.m;for(let r=0;r<16;r++)t[r]*=i[r];return this.markAsUpdated(),this}multiplyByFloats(...e){let t=this._m;for(let i=0;i<16;i++)t[i]*=e[i];return this.markAsUpdated(),this}multiplyByFloatsToRef(...e){let t=e.pop(),i=this._m,r=t._m,s=e;for(let a=0;a<16;a++)r[a]=i[a]*s[a];return t.markAsUpdated(),t}multiplyToRef(e,t){return this._isIdentity?(t.copyFrom(e),t):e._isIdentity?(t.copyFrom(this),t):(this.multiplyToArray(e,t._m,0),t.markAsUpdated(),t)}multiplyToArray(e,t,i){return eM(this,e,t,i),this}divide(e){return this.divideToRef(e,new n)}divideToRef(e,t){let i=this._m,r=e.m,s=t._m;for(let a=0;a<16;a++)s[a]=i[a]/r[a];return t.markAsUpdated(),t}divideInPlace(e){let t=this._m,i=e.m;for(let r=0;r<16;r++)t[r]/=i[r];return this.markAsUpdated(),this}minimizeInPlace(e){let t=this._m,i=e.m;for(let r=0;r<16;r++)t[r]=Math.min(t[r],i[r]);return this.markAsUpdated(),this}minimizeInPlaceFromFloats(...e){let t=this._m;for(let i=0;i<16;i++)t[i]=Math.min(t[i],e[i]);return this.markAsUpdated(),this}maximizeInPlace(e){let t=this._m,i=e.m;for(let r=0;r<16;r++)t[r]=Math.min(t[r],i[r]);return this.markAsUpdated(),this}maximizeInPlaceFromFloats(...e){let t=this._m;for(let i=0;i<16;i++)t[i]=Math.min(t[i],e[i]);return this.markAsUpdated(),this}negate(){return this.negateToRef(new n)}negateInPlace(){let e=this._m;for(let t=0;t<16;t++)e[t]=-e[t];return this.markAsUpdated(),this}negateToRef(e){let t=this._m,i=e._m;for(let r=0;r<16;r++)i[r]=-t[r];return e.markAsUpdated(),e}equals(e){let t=e;if(!t)return!1;if((this._isIdentity||t._isIdentity)&&!this._isIdentityDirty&&!t._isIdentityDirty)return this._isIdentity&&t._isIdentity;let i=this.m,r=t.m;return i[0]===r[0]&&i[1]===r[1]&&i[2]===r[2]&&i[3]===r[3]&&i[4]===r[4]&&i[5]===r[5]&&i[6]===r[6]&&i[7]===r[7]&&i[8]===r[8]&&i[9]===r[9]&&i[10]===r[10]&&i[11]===r[11]&&i[12]===r[12]&&i[13]===r[13]&&i[14]===r[14]&&i[15]===r[15]}equalsWithEpsilon(e,t=0){let i=this._m,r=e.m;for(let s=0;s<16;s++)if(!Ei(i[s],r[s],t))return!1;return!0}equalsToFloats(...e){let t=this._m;for(let i=0;i<16;i++)if(t[i]!=e[i])return!1;return!0}floor(){return this.floorToRef(new n)}floorToRef(e){let t=this._m,i=e._m;for(let r=0;r<16;r++)i[r]=Math.floor(t[r]);return e.markAsUpdated(),e}fract(){return this.fractToRef(new n)}fractToRef(e){let t=this._m,i=e._m;for(let r=0;r<16;r++)i[r]=t[r]-Math.floor(t[r]);return e.markAsUpdated(),e}clone(){let e=new n;return e.copyFrom(this),e}getClassName(){return"Matrix"}getHashCode(){let e=kn(this._m[0]);for(let t=1;t<16;t++)e=e*397^kn(this._m[t]);return e}decomposeToTransformNode(e){return e.rotationQuaternion=e.rotationQuaternion||new ze,this.decompose(e.scaling,e.rotationQuaternion,e.position)}decompose(e,t,i,r,s=!0){if(this._isIdentity)return i&&i.setAll(0),e&&e.setAll(1),t&&t.copyFromFloats(0,0,0,1),!0;let a=this._m;if(i&&i.copyFromFloats(a[12],a[13],a[14]),e=e||We.Vector3[0],e.x=Math.sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2]),e.y=Math.sqrt(a[4]*a[4]+a[5]*a[5]+a[6]*a[6]),e.z=Math.sqrt(a[8]*a[8]+a[9]*a[9]+a[10]*a[10]),r){let o=(s?r.absoluteScaling.x:r.scaling.x)<0?-1:1,l=(s?r.absoluteScaling.y:r.scaling.y)<0?-1:1,c=(s?r.absoluteScaling.z:r.scaling.z)<0?-1:1;e.x*=o,e.y*=l,e.z*=c}else this.determinant()<=0&&(e.y*=-1);if(e._x===0||e._y===0||e._z===0)return t&&t.copyFromFloats(0,0,0,1),!1;if(t){let o=1/e._x,l=1/e._y,c=1/e._z;n.FromValuesToRef(a[0]*o,a[1]*o,a[2]*o,0,a[4]*l,a[5]*l,a[6]*l,0,a[8]*c,a[9]*c,a[10]*c,0,0,0,0,1,We.Matrix[0]),ze.FromRotationMatrixToRef(We.Matrix[0],t)}return!0}getRow(e){if(e<0||e>3)return null;let t=e*4;return new Mi(this._m[t+0],this._m[t+1],this._m[t+2],this._m[t+3])}getRowToRef(e,t){if(e>=0&&e<=3){let i=e*4;t.x=this._m[i+0],t.y=this._m[i+1],t.z=this._m[i+2],t.w=this._m[i+3]}return t}setRow(e,t){return this.setRowFromFloats(e,t.x,t.y,t.z,t.w)}transpose(){let e=new n;return n.TransposeToRef(this,e),e}transposeToRef(e){return n.TransposeToRef(this,e),e}setRowFromFloats(e,t,i,r,s){if(e<0||e>3)return this;let a=e*4;return this._m[a+0]=t,this._m[a+1]=i,this._m[a+2]=r,this._m[a+3]=s,this.markAsUpdated(),this}scale(e){let t=new n;return this.scaleToRef(e,t),t}scaleToRef(e,t){for(let i=0;i<16;i++)t._m[i]=this._m[i]*e;return t.markAsUpdated(),t}scaleAndAddToRef(e,t){for(let i=0;i<16;i++)t._m[i]+=this._m[i]*e;return t.markAsUpdated(),t}scaleInPlace(e){let t=this._m;for(let i=0;i<16;i++)t[i]*=e;return this.markAsUpdated(),this}toNormalMatrix(e){let t=We.Matrix[0];this.invertToRef(t),t.transposeToRef(e);let i=e._m;return n.FromValuesToRef(i[0],i[1],i[2],0,i[4],i[5],i[6],0,i[8],i[9],i[10],0,0,0,0,1,e),e}getRotationMatrix(){let e=new n;return this.getRotationMatrixToRef(e),e}getRotationMatrixToRef(e){let t=We.Vector3[0];if(!this.decompose(t))return n.IdentityToRef(e),e;let i=this._m,r=1/t._x,s=1/t._y,a=1/t._z;return n.FromValuesToRef(i[0]*r,i[1]*r,i[2]*r,0,i[4]*s,i[5]*s,i[6]*s,0,i[8]*a,i[9]*a,i[10]*a,0,0,0,0,1,e),e}toggleModelMatrixHandInPlace(){let e=this._m;return e[2]*=-1,e[6]*=-1,e[8]*=-1,e[9]*=-1,e[14]*=-1,this.markAsUpdated(),this}toggleProjectionMatrixHandInPlace(){let e=this._m;return e[8]*=-1,e[9]*=-1,e[10]*=-1,e[11]*=-1,this.markAsUpdated(),this}static FromArray(e,t=0){let i=new n;return n.FromArrayToRef(e,t,i),i}static FromArrayToRef(e,t,i){for(let r=0;r<16;r++)i._m[r]=e[r+t];return i.markAsUpdated(),i}static FromFloat32ArrayToRefScaled(e,t,i,r){return r._m[0]=e[0+t]*i,r._m[1]=e[1+t]*i,r._m[2]=e[2+t]*i,r._m[3]=e[3+t]*i,r._m[4]=e[4+t]*i,r._m[5]=e[5+t]*i,r._m[6]=e[6+t]*i,r._m[7]=e[7+t]*i,r._m[8]=e[8+t]*i,r._m[9]=e[9+t]*i,r._m[10]=e[10+t]*i,r._m[11]=e[11+t]*i,r._m[12]=e[12+t]*i,r._m[13]=e[13+t]*i,r._m[14]=e[14+t]*i,r._m[15]=e[15+t]*i,r.markAsUpdated(),r}static get IdentityReadOnly(){return n._IdentityReadOnly}static FromValuesToRef(e,t,i,r,s,a,o,l,c,f,h,d,u,m,_,p,g){let v=g._m;v[0]=e,v[1]=t,v[2]=i,v[3]=r,v[4]=s,v[5]=a,v[6]=o,v[7]=l,v[8]=c,v[9]=f,v[10]=h,v[11]=d,v[12]=u,v[13]=m,v[14]=_,v[15]=p,g.markAsUpdated()}static FromValues(e,t,i,r,s,a,o,l,c,f,h,d,u,m,_,p){let g=new n,v=g._m;return v[0]=e,v[1]=t,v[2]=i,v[3]=r,v[4]=s,v[5]=a,v[6]=o,v[7]=l,v[8]=c,v[9]=f,v[10]=h,v[11]=d,v[12]=u,v[13]=m,v[14]=_,v[15]=p,g.markAsUpdated(),g}static Compose(e,t,i){let r=new n;return n.ComposeToRef(e,t,i,r),r}static ComposeToRef(e,t,i,r){let s=r._m,a=t._x,o=t._y,l=t._z,c=t._w,f=a+a,h=o+o,d=l+l,u=a*f,m=a*h,_=a*d,p=o*h,g=o*d,v=l*d,x=c*f,A=c*h,S=c*d,E=e._x,R=e._y,I=e._z;return s[0]=(1-(p+v))*E,s[1]=(m+S)*E,s[2]=(_-A)*E,s[3]=0,s[4]=(m-S)*R,s[5]=(1-(u+v))*R,s[6]=(g+x)*R,s[7]=0,s[8]=(_+A)*I,s[9]=(g-x)*I,s[10]=(1-(u+p))*I,s[11]=0,s[12]=i._x,s[13]=i._y,s[14]=i._z,s[15]=1,r.markAsUpdated(),r}static Identity(){let e=n.FromValues(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return e._updateIdentityStatus(!0),e}static IdentityToRef(e){return n.FromValuesToRef(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,e),e._updateIdentityStatus(!0),e}static Zero(){let e=n.FromValues(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);return e._updateIdentityStatus(!1),e}static RotationX(e){let t=new n;return n.RotationXToRef(e,t),t}static Invert(e){let t=new n;return e.invertToRef(t),t}static RotationXToRef(e,t){let i=Math.sin(e),r=Math.cos(e);return n.FromValuesToRef(1,0,0,0,0,r,i,0,0,-i,r,0,0,0,0,1,t),t._updateIdentityStatus(r===1&&i===0),t}static RotationY(e){let t=new n;return n.RotationYToRef(e,t),t}static RotationYToRef(e,t){let i=Math.sin(e),r=Math.cos(e);return n.FromValuesToRef(r,0,-i,0,0,1,0,0,i,0,r,0,0,0,0,1,t),t._updateIdentityStatus(r===1&&i===0),t}static RotationZ(e){let t=new n;return n.RotationZToRef(e,t),t}static RotationZToRef(e,t){let i=Math.sin(e),r=Math.cos(e);return n.FromValuesToRef(r,i,0,0,-i,r,0,0,0,0,1,0,0,0,0,1,t),t._updateIdentityStatus(r===1&&i===0),t}static RotationAxis(e,t){let i=new n;return n.RotationAxisToRef(e,t,i),i}static RotationAxisToRef(e,t,i){let r=Math.sin(-t),s=Math.cos(-t),a=1-s;e=e.normalizeToRef(We.Vector3[0]);let o=i._m;return o[0]=e._x*e._x*a+s,o[1]=e._x*e._y*a-e._z*r,o[2]=e._x*e._z*a+e._y*r,o[3]=0,o[4]=e._y*e._x*a+e._z*r,o[5]=e._y*e._y*a+s,o[6]=e._y*e._z*a-e._x*r,o[7]=0,o[8]=e._z*e._x*a-e._y*r,o[9]=e._z*e._y*a+e._x*r,o[10]=e._z*e._z*a+s,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,i.markAsUpdated(),i}static RotationAlignToRef(e,t,i,r=!1){let s=b.Dot(t,e),a=i._m;if(s<-1+Nt)a[0]=-1,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=r?1:-1,a[6]=0,a[7]=0,a[8]=0,a[9]=0,a[10]=r?-1:1,a[11]=0;else{let o=b.Cross(t,e),l=1/(1+s);a[0]=o._x*o._x*l+s,a[1]=o._y*o._x*l-o._z,a[2]=o._z*o._x*l+o._y,a[3]=0,a[4]=o._x*o._y*l+o._z,a[5]=o._y*o._y*l+s,a[6]=o._z*o._y*l-o._x,a[7]=0,a[8]=o._x*o._z*l-o._y,a[9]=o._y*o._z*l+o._x,a[10]=o._z*o._z*l+s,a[11]=0}return a[12]=0,a[13]=0,a[14]=0,a[15]=1,i.markAsUpdated(),i}static RotationYawPitchRoll(e,t,i){let r=new n;return n.RotationYawPitchRollToRef(e,t,i,r),r}static RotationYawPitchRollToRef(e,t,i,r){return ze.RotationYawPitchRollToRef(e,t,i,We.Quaternion[0]),We.Quaternion[0].toRotationMatrix(r),r}static Scaling(e,t,i){let r=new n;return n.ScalingToRef(e,t,i,r),r}static ScalingToRef(e,t,i,r){return n.FromValuesToRef(e,0,0,0,0,t,0,0,0,0,i,0,0,0,0,1,r),r._updateIdentityStatus(e===1&&t===1&&i===1),r}static Translation(e,t,i){let r=new n;return n.TranslationToRef(e,t,i,r),r}static TranslationToRef(e,t,i,r){return n.FromValuesToRef(1,0,0,0,0,1,0,0,0,0,1,0,e,t,i,1,r),r._updateIdentityStatus(e===0&&t===0&&i===0),r}static Lerp(e,t,i){let r=new n;return n.LerpToRef(e,t,i,r),r}static LerpToRef(e,t,i,r){let s=r._m,a=e.m,o=t.m;for(let l=0;l<16;l++)s[l]=a[l]*(1-i)+o[l]*i;return r.markAsUpdated(),r}static DecomposeLerp(e,t,i){let r=new n;return n.DecomposeLerpToRef(e,t,i,r),r}static DecomposeLerpToRef(e,t,i,r){let s=We.Vector3[0],a=We.Quaternion[0],o=We.Vector3[1];e.decompose(s,a,o);let l=We.Vector3[2],c=We.Quaternion[1],f=We.Vector3[3];t.decompose(l,c,f);let h=We.Vector3[4];b.LerpToRef(s,l,i,h);let d=We.Quaternion[2];ze.SlerpToRef(a,c,i,d);let u=We.Vector3[5];return b.LerpToRef(o,f,i,u),n.ComposeToRef(h,d,u,r),r}static LookAtLH(e,t,i){let r=new n;return n.LookAtLHToRef(e,t,i,r),r}static LookAtLHToRef(e,t,i,r){let s=We.Vector3[0],a=We.Vector3[1],o=We.Vector3[2];t.subtractToRef(e,o),o.normalize(),b.CrossToRef(i,o,s);let l=s.lengthSquared();l===0?s.x=1:s.normalizeFromLength(Math.sqrt(l)),b.CrossToRef(o,s,a),a.normalize();let c=-b.Dot(s,e),f=-b.Dot(a,e),h=-b.Dot(o,e);return n.FromValuesToRef(s._x,a._x,o._x,0,s._y,a._y,o._y,0,s._z,a._z,o._z,0,c,f,h,1,r),r}static LookAtRH(e,t,i){let r=new n;return n.LookAtRHToRef(e,t,i,r),r}static LookAtRHToRef(e,t,i,r){let s=We.Vector3[0],a=We.Vector3[1],o=We.Vector3[2];e.subtractToRef(t,o),o.normalize(),b.CrossToRef(i,o,s);let l=s.lengthSquared();l===0?s.x=1:s.normalizeFromLength(Math.sqrt(l)),b.CrossToRef(o,s,a),a.normalize();let c=-b.Dot(s,e),f=-b.Dot(a,e),h=-b.Dot(o,e);return n.FromValuesToRef(s._x,a._x,o._x,0,s._y,a._y,o._y,0,s._z,a._z,o._z,0,c,f,h,1,r),r}static LookDirectionLH(e,t){let i=new n;return n.LookDirectionLHToRef(e,t,i),i}static LookDirectionLHToRef(e,t,i){let r=We.Vector3[0];r.copyFrom(e),r.scaleInPlace(-1);let s=We.Vector3[1];return b.CrossToRef(t,r,s),n.FromValuesToRef(s._x,s._y,s._z,0,t._x,t._y,t._z,0,r._x,r._y,r._z,0,0,0,0,1,i),i}static LookDirectionRH(e,t){let i=new n;return n.LookDirectionRHToRef(e,t,i),i}static LookDirectionRHToRef(e,t,i){let r=We.Vector3[2];return b.CrossToRef(t,e,r),n.FromValuesToRef(r._x,r._y,r._z,0,t._x,t._y,t._z,0,e._x,e._y,e._z,0,0,0,0,1,i),i}static OrthoLH(e,t,i,r,s){let a=new n;return n.OrthoLHToRef(e,t,i,r,a,s),a}static OrthoLHToRef(e,t,i,r,s,a){let o=i,l=r,c=2/e,f=2/t,h=2/(l-o),d=-(l+o)/(l-o);return n.FromValuesToRef(c,0,0,0,0,f,0,0,0,0,h,0,0,0,d,1,s),a&&s.multiplyToRef(Ih,s),s._updateIdentityStatus(c===1&&f===1&&h===1&&d===0),s}static OrthoOffCenterLH(e,t,i,r,s,a,o){let l=new n;return n.OrthoOffCenterLHToRef(e,t,i,r,s,a,l,o),l}static OrthoOffCenterLHToRef(e,t,i,r,s,a,o,l){let c=s,f=a,h=2/(t-e),d=2/(r-i),u=2/(f-c),m=-(f+c)/(f-c),_=(e+t)/(e-t),p=(r+i)/(i-r);return n.FromValuesToRef(h,0,0,0,0,d,0,0,0,0,u,0,_,p,m,1,o),l&&o.multiplyToRef(Ih,o),o.markAsUpdated(),o}static ObliqueOffCenterLHToRef(e,t,i,r,s,a,o,l,c,f,h){let d=-o*Math.cos(l),u=-o*Math.sin(l);return n.TranslationToRef(0,0,-c,We.Matrix[1]),n.FromValuesToRef(1,0,0,0,0,1,0,0,d,u,1,0,0,0,0,1,We.Matrix[0]),We.Matrix[1].multiplyToRef(We.Matrix[0],We.Matrix[0]),n.TranslationToRef(0,0,c,We.Matrix[1]),We.Matrix[0].multiplyToRef(We.Matrix[1],We.Matrix[0]),n.OrthoOffCenterLHToRef(e,t,i,r,s,a,f,h),We.Matrix[0].multiplyToRef(f,f),f}static OrthoOffCenterRH(e,t,i,r,s,a,o){let l=new n;return n.OrthoOffCenterRHToRef(e,t,i,r,s,a,l,o),l}static OrthoOffCenterRHToRef(e,t,i,r,s,a,o,l){return n.OrthoOffCenterLHToRef(e,t,i,r,s,a,o,l),o._m[10]*=-1,o}static ObliqueOffCenterRHToRef(e,t,i,r,s,a,o,l,c,f,h){let d=o*Math.cos(l),u=o*Math.sin(l);return n.TranslationToRef(0,0,c,We.Matrix[1]),n.FromValuesToRef(1,0,0,0,0,1,0,0,d,u,1,0,0,0,0,1,We.Matrix[0]),We.Matrix[1].multiplyToRef(We.Matrix[0],We.Matrix[0]),n.TranslationToRef(0,0,-c,We.Matrix[1]),We.Matrix[0].multiplyToRef(We.Matrix[1],We.Matrix[0]),n.OrthoOffCenterRHToRef(e,t,i,r,s,a,f,h),We.Matrix[0].multiplyToRef(f,f),f}static PerspectiveLH(e,t,i,r,s,a=0){let o=new n,l=i,c=r,f=2*l/e,h=2*l/t,d=(c+l)/(c-l),u=-2*c*l/(c-l),m=Math.tan(a);return n.FromValuesToRef(f,0,0,0,0,h,0,m,0,0,d,1,0,0,u,0,o),s&&o.multiplyToRef(Ih,o),o._updateIdentityStatus(!1),o}static PerspectiveFovLH(e,t,i,r,s,a=0,o=!1){let l=new n;return n.PerspectiveFovLHToRef(e,t,i,r,l,!0,s,a,o),l}static PerspectiveFovLHToRef(e,t,i,r,s,a=!0,o,l=0,c=!1){let f=i,h=r,d=1/Math.tan(e*.5),u=a?d/t:d,m=a?d:d*t,_=c&&f===0?-1:h!==0?(h+f)/(h-f):1,p=c&&f===0?2*h:h!==0?-2*h*f/(h-f):-2*f,g=Math.tan(l);return n.FromValuesToRef(u,0,0,0,0,m,0,g,0,0,_,1,0,0,p,0,s),o&&s.multiplyToRef(Ih,s),s._updateIdentityStatus(!1),s}static PerspectiveFovReverseLHToRef(e,t,i,r,s,a=!0,o,l=0){let c=1/Math.tan(e*.5),f=a?c/t:c,h=a?c:c*t,d=Math.tan(l);return n.FromValuesToRef(f,0,0,0,0,h,0,d,0,0,-i,1,0,0,1,0,s),o&&s.multiplyToRef(Ih,s),s._updateIdentityStatus(!1),s}static PerspectiveFovRH(e,t,i,r,s,a=0,o=!1){let l=new n;return n.PerspectiveFovRHToRef(e,t,i,r,l,!0,s,a,o),l}static PerspectiveFovRHToRef(e,t,i,r,s,a=!0,o,l=0,c=!1){let f=i,h=r,d=1/Math.tan(e*.5),u=a?d/t:d,m=a?d:d*t,_=c&&f===0?1:h!==0?-(h+f)/(h-f):-1,p=c&&f===0?2*h:h!==0?-2*h*f/(h-f):-2*f,g=Math.tan(l);return n.FromValuesToRef(u,0,0,0,0,m,0,g,0,0,_,-1,0,0,p,0,s),o&&s.multiplyToRef(Ih,s),s._updateIdentityStatus(!1),s}static PerspectiveFovReverseRHToRef(e,t,i,r,s,a=!0,o,l=0){let c=1/Math.tan(e*.5),f=a?c/t:c,h=a?c:c*t,d=Math.tan(l);return n.FromValuesToRef(f,0,0,0,0,h,0,d,0,0,-i,-1,0,0,-1,0,s),o&&s.multiplyToRef(Ih,s),s._updateIdentityStatus(!1),s}static GetFinalMatrix(e,t,i,r,s,a){let o=e.width,l=e.height,c=e.x,f=e.y,h=n.FromValues(o/2,0,0,0,0,-l/2,0,0,0,0,a-s,0,c+o/2,l/2+f,s,1),d=new n;return t.multiplyToRef(i,d),d.multiplyToRef(r,d),d.multiplyToRef(h,d)}static GetAsMatrix2x2(e){let t=e.m,i=[t[0],t[1],t[4],t[5]];return Gn.MatrixUse64Bits?i:new Float32Array(i)}static GetAsMatrix3x3(e){let t=e.m,i=[t[0],t[1],t[2],t[4],t[5],t[6],t[8],t[9],t[10]];return Gn.MatrixUse64Bits?i:new Float32Array(i)}static Transpose(e){let t=new n;return n.TransposeToRef(e,t),t}static TransposeToRef(e,t){let i=e.m,r=i[0],s=i[4],a=i[8],o=i[12],l=i[1],c=i[5],f=i[9],h=i[13],d=i[2],u=i[6],m=i[10],_=i[14],p=i[3],g=i[7],v=i[11],x=i[15],A=t._m;return A[0]=r,A[1]=s,A[2]=a,A[3]=o,A[4]=l,A[5]=c,A[6]=f,A[7]=h,A[8]=d,A[9]=u,A[10]=m,A[11]=_,A[12]=p,A[13]=g,A[14]=v,A[15]=x,t.markAsUpdated(),t._updateIdentityStatus(e._isIdentity,e._isIdentityDirty),t}static Reflection(e){let t=new n;return n.ReflectionToRef(e,t),t}static ReflectionToRef(e,t){e.normalize();let i=e.normal.x,r=e.normal.y,s=e.normal.z,a=-2*i,o=-2*r,l=-2*s;return n.FromValuesToRef(a*i+1,o*i,l*i,0,a*r,o*r+1,l*r,0,a*s,o*s,l*s+1,0,a*e.d,o*e.d,l*e.d,1,t),t}static FromXYZAxesToRef(e,t,i,r){return n.FromValuesToRef(e._x,e._y,e._z,0,t._x,t._y,t._z,0,i._x,i._y,i._z,0,0,0,0,1,r),r}static FromQuaternionToRef(e,t){let i=e._x*e._x,r=e._y*e._y,s=e._z*e._z,a=e._x*e._y,o=e._z*e._w,l=e._z*e._x,c=e._y*e._w,f=e._y*e._z,h=e._x*e._w;return t._m[0]=1-2*(r+s),t._m[1]=2*(a+o),t._m[2]=2*(l-c),t._m[3]=0,t._m[4]=2*(a-o),t._m[5]=1-2*(s+i),t._m[6]=2*(f+h),t._m[7]=0,t._m[8]=2*(l+c),t._m[9]=2*(f-h),t._m[10]=1-2*(r+i),t._m[11]=0,t._m[12]=0,t._m[13]=0,t._m[14]=0,t._m[15]=1,t.markAsUpdated(),t}};K._IdentityReadOnly=K.Identity();Object.defineProperties(K.prototype,{dimension:{value:[4,4]},rank:{value:2}});We=class{};We.Vector3=Ll(11,b.Zero);We.Matrix=Ll(2,K.Identity);We.Quaternion=Ll(3,ze.Zero);Q=class{};Q.Vector2=Ll(3,Ne.Zero);Q.Vector3=Ll(13,b.Zero);Q.Vector4=Ll(3,Mi.Zero);Q.Quaternion=Ll(3,ze.Zero);Q.Matrix=Ll(8,K.Identity);Ft("BABYLON.Vector2",Ne);Ft("BABYLON.Vector3",b);Ft("BABYLON.Vector4",Mi);Ft("BABYLON.Matrix",K);Ih=K.FromValues(1,0,0,0,0,1,0,0,0,0,.5,0,0,0,.5,1)});var L3,ds,O3,Pu=C(()=>{Ge();(function(n){n[n.LOCAL=0]="LOCAL",n[n.WORLD=1]="WORLD",n[n.BONE=2]="BONE"})(L3||(L3={}));ds=class{};ds.X=new b(1,0,0);ds.Y=new b(0,1,0);ds.Z=new b(0,0,1);(function(n){n[n.X=0]="X",n[n.Y=1]="Y",n[n.Z=2]="Z"})(O3||(O3={}))});function Du(n){return Math.pow(n,Cu)}function Lu(n){return n<=.04045?.0773993808*n:Math.pow(.947867299*(n+.055),2.4)}function Ou(n){return Math.pow(n,b3)}function Nu(n){return n<=.0031308?12.92*n:1.055*Math.pow(n,.41666)-.055}var Te,lt,pn,zt=C(()=>{Xo();Vi();An();xn();Te=class n{constructor(e=0,t=0,i=0){this.r=e,this.g=t,this.b=i}toString(){return"{R: "+this.r+" G:"+this.g+" B:"+this.b+"}"}getClassName(){return"Color3"}getHashCode(){let e=this.r*255|0;return e=e*397^(this.g*255|0),e=e*397^(this.b*255|0),e}toArray(e,t=0){return e[t]=this.r,e[t+1]=this.g,e[t+2]=this.b,this}fromArray(e,t=0){return n.FromArrayToRef(e,t,this),this}toColor4(e=1){return new lt(this.r,this.g,this.b,e)}asArray(){return[this.r,this.g,this.b]}toLuminance(){return this.r*.3+this.g*.59+this.b*.11}multiply(e){return new n(this.r*e.r,this.g*e.g,this.b*e.b)}multiplyToRef(e,t){return t.r=this.r*e.r,t.g=this.g*e.g,t.b=this.b*e.b,t}multiplyInPlace(e){return this.r*=e.r,this.g*=e.g,this.b*=e.b,this}multiplyByFloats(e,t,i){return new n(this.r*e,this.g*t,this.b*i)}divide(e){throw new ReferenceError("Can not divide a color")}divideToRef(e,t){throw new ReferenceError("Can not divide a color")}divideInPlace(e){throw new ReferenceError("Can not divide a color")}minimizeInPlace(e){return this.minimizeInPlaceFromFloats(e.r,e.g,e.b)}maximizeInPlace(e){return this.maximizeInPlaceFromFloats(e.r,e.g,e.b)}minimizeInPlaceFromFloats(e,t,i){return this.r=Math.min(e,this.r),this.g=Math.min(t,this.g),this.b=Math.min(i,this.b),this}maximizeInPlaceFromFloats(e,t,i){return this.r=Math.max(e,this.r),this.g=Math.max(t,this.g),this.b=Math.max(i,this.b),this}floorToRef(e){throw new ReferenceError("Can not floor a color")}floor(){throw new ReferenceError("Can not floor a color")}fractToRef(e){throw new ReferenceError("Can not fract a color")}fract(){throw new ReferenceError("Can not fract a color")}equals(e){return e&&this.r===e.r&&this.g===e.g&&this.b===e.b}equalsFloats(e,t,i){return this.equalsToFloats(e,t,i)}equalsToFloats(e,t,i){return this.r===e&&this.g===t&&this.b===i}equalsWithEpsilon(e,t=Nt){return Ei(this.r,e.r,t)&&Ei(this.g,e.g,t)&&Ei(this.b,e.b,t)}negate(){throw new ReferenceError("Can not negate a color")}negateInPlace(){throw new ReferenceError("Can not negate a color")}negateToRef(e){throw new ReferenceError("Can not negate a color")}scale(e){return new n(this.r*e,this.g*e,this.b*e)}scaleInPlace(e){return this.r*=e,this.g*=e,this.b*=e,this}scaleToRef(e,t){return t.r=this.r*e,t.g=this.g*e,t.b=this.b*e,t}scaleAndAddToRef(e,t){return t.r+=this.r*e,t.g+=this.g*e,t.b+=this.b*e,t}clampToRef(e=0,t=1,i){return i.r=wt(this.r,e,t),i.g=wt(this.g,e,t),i.b=wt(this.b,e,t),i}add(e){return new n(this.r+e.r,this.g+e.g,this.b+e.b)}addInPlace(e){return this.r+=e.r,this.g+=e.g,this.b+=e.b,this}addInPlaceFromFloats(e,t,i){return this.r+=e,this.g+=t,this.b+=i,this}addToRef(e,t){return t.r=this.r+e.r,t.g=this.g+e.g,t.b=this.b+e.b,t}subtract(e){return new n(this.r-e.r,this.g-e.g,this.b-e.b)}subtractToRef(e,t){return t.r=this.r-e.r,t.g=this.g-e.g,t.b=this.b-e.b,t}subtractInPlace(e){return this.r-=e.r,this.g-=e.g,this.b-=e.b,this}subtractFromFloats(e,t,i){return new n(this.r-e,this.g-t,this.b-i)}subtractFromFloatsToRef(e,t,i,r){return r.r=this.r-e,r.g=this.g-t,r.b=this.b-i,r}clone(){return new n(this.r,this.g,this.b)}copyFrom(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copyFromFloats(e,t,i){return this.r=e,this.g=t,this.b=i,this}set(e,t,i){return this.copyFromFloats(e,t,i)}setAll(e){return this.r=this.g=this.b=e,this}toHexString(){let e=Math.round(this.r*255),t=Math.round(this.g*255),i=Math.round(this.b*255);return"#"+Za(e)+Za(t)+Za(i)}fromHexString(e){return e.substring(0,1)!=="#"||e.length!==7?this:(this.r=parseInt(e.substring(1,3),16)/255,this.g=parseInt(e.substring(3,5),16)/255,this.b=parseInt(e.substring(5,7),16)/255,this)}toHSV(){return this.toHSVToRef(new n)}toHSVToRef(e){let t=this.r,i=this.g,r=this.b,s=Math.max(t,i,r),a=Math.min(t,i,r),o=0,l=0,c=s,f=s-a;return s!==0&&(l=f/s),s!=a&&(s==t?(o=(i-r)/f,i=0&&a<=1?(l=s,c=o):a>=1&&a<=2?(l=o,c=s):a>=2&&a<=3?(c=s,f=o):a>=3&&a<=4?(c=o,f=s):a>=4&&a<=5?(l=o,f=s):a>=5&&a<=6&&(l=s,f=o);let h=i-s;return r.r=l+h,r.g=c+h,r.b=f+h,r}static FromHSV(e,t,i){let r=new n(0,0,0);return n.HSVtoRGBToRef(e,t,i,r),r}static FromHexString(e){return new n(0,0,0).fromHexString(e)}static FromArray(e,t=0){return new n(e[t],e[t+1],e[t+2])}static FromArrayToRef(e,t=0,i){i.r=e[t],i.g=e[t+1],i.b=e[t+2]}static FromInts(e,t,i){return new n(e/255,t/255,i/255)}static Lerp(e,t,i){let r=new n(0,0,0);return n.LerpToRef(e,t,i,r),r}static LerpToRef(e,t,i,r){r.r=e.r+(t.r-e.r)*i,r.g=e.g+(t.g-e.g)*i,r.b=e.b+(t.b-e.b)*i}static Hermite(e,t,i,r,s){let a=s*s,o=s*a,l=2*o-3*a+1,c=-2*o+3*a,f=o-2*a+s,h=o-a,d=e.r*l+i.r*c+t.r*f+r.r*h,u=e.g*l+i.g*c+t.g*f+r.g*h,m=e.b*l+i.b*c+t.b*f+r.b*h;return new n(d,u,m)}static Hermite1stDerivative(e,t,i,r,s){let a=n.Black();return this.Hermite1stDerivativeToRef(e,t,i,r,s,a),a}static Hermite1stDerivativeToRef(e,t,i,r,s,a){let o=s*s;a.r=(o-s)*6*e.r+(3*o-4*s+1)*t.r+(-o+s)*6*i.r+(3*o-2*s)*r.r,a.g=(o-s)*6*e.g+(3*o-4*s+1)*t.g+(-o+s)*6*i.g+(3*o-2*s)*r.g,a.b=(o-s)*6*e.b+(3*o-4*s+1)*t.b+(-o+s)*6*i.b+(3*o-2*s)*r.b}static Red(){return new n(1,0,0)}static Green(){return new n(0,1,0)}static Blue(){return new n(0,0,1)}static Black(){return new n(0,0,0)}static get BlackReadOnly(){return n._BlackReadOnly}static White(){return new n(1,1,1)}static Purple(){return new n(.5,0,.5)}static Magenta(){return new n(1,0,1)}static Yellow(){return new n(1,1,0)}static Gray(){return new n(.5,.5,.5)}static Teal(){return new n(0,1,1)}static Random(){return new n(Math.random(),Math.random(),Math.random())}};Te._V8PerformanceHack=new Te(.5,.5,.5);Te._BlackReadOnly=Te.Black();Object.defineProperties(Te.prototype,{dimension:{value:[3]},rank:{value:1}});lt=class n{constructor(e=0,t=0,i=0,r=1){this.r=e,this.g=t,this.b=i,this.a=r}asArray(){return[this.r,this.g,this.b,this.a]}toArray(e,t=0){return e[t]=this.r,e[t+1]=this.g,e[t+2]=this.b,e[t+3]=this.a,this}fromArray(e,t=0){return this.r=e[t],this.g=e[t+1],this.b=e[t+2],this.a=e[t+3],this}equals(e){return e&&this.r===e.r&&this.g===e.g&&this.b===e.b&&this.a===e.a}add(e){return new n(this.r+e.r,this.g+e.g,this.b+e.b,this.a+e.a)}addToRef(e,t){return t.r=this.r+e.r,t.g=this.g+e.g,t.b=this.b+e.b,t.a=this.a+e.a,t}addInPlace(e){return this.r+=e.r,this.g+=e.g,this.b+=e.b,this.a+=e.a,this}addInPlaceFromFloats(e,t,i,r){return this.r+=e,this.g+=t,this.b+=i,this.a+=r,this}subtract(e){return new n(this.r-e.r,this.g-e.g,this.b-e.b,this.a-e.a)}subtractToRef(e,t){return t.r=this.r-e.r,t.g=this.g-e.g,t.b=this.b-e.b,t.a=this.a-e.a,t}subtractInPlace(e){return this.r-=e.r,this.g-=e.g,this.b-=e.b,this.a-=e.a,this}subtractFromFloats(e,t,i,r){return new n(this.r-e,this.g-t,this.b-i,this.a-r)}subtractFromFloatsToRef(e,t,i,r,s){return s.r=this.r-e,s.g=this.g-t,s.b=this.b-i,s.a=this.a-r,s}scale(e){return new n(this.r*e,this.g*e,this.b*e,this.a*e)}scaleInPlace(e){return this.r*=e,this.g*=e,this.b*=e,this.a*=e,this}scaleToRef(e,t){return t.r=this.r*e,t.g=this.g*e,t.b=this.b*e,t.a=this.a*e,t}scaleAndAddToRef(e,t){return t.r+=this.r*e,t.g+=this.g*e,t.b+=this.b*e,t.a+=this.a*e,t}clampToRef(e=0,t=1,i){return i.r=wt(this.r,e,t),i.g=wt(this.g,e,t),i.b=wt(this.b,e,t),i.a=wt(this.a,e,t),i}multiply(e){return new n(this.r*e.r,this.g*e.g,this.b*e.b,this.a*e.a)}multiplyToRef(e,t){return t.r=this.r*e.r,t.g=this.g*e.g,t.b=this.b*e.b,t.a=this.a*e.a,t}multiplyInPlace(e){return this.r*=e.r,this.g*=e.g,this.b*=e.b,this.a*=e.a,this}multiplyByFloats(e,t,i,r){return new n(this.r*e,this.g*t,this.b*i,this.a*r)}divide(e){throw new ReferenceError("Can not divide a color")}divideToRef(e,t){throw new ReferenceError("Can not divide a color")}divideInPlace(e){throw new ReferenceError("Can not divide a color")}minimizeInPlace(e){return this.r=Math.min(this.r,e.r),this.g=Math.min(this.g,e.g),this.b=Math.min(this.b,e.b),this.a=Math.min(this.a,e.a),this}maximizeInPlace(e){return this.r=Math.max(this.r,e.r),this.g=Math.max(this.g,e.g),this.b=Math.max(this.b,e.b),this.a=Math.max(this.a,e.a),this}minimizeInPlaceFromFloats(e,t,i,r){return this.r=Math.min(e,this.r),this.g=Math.min(t,this.g),this.b=Math.min(i,this.b),this.a=Math.min(r,this.a),this}maximizeInPlaceFromFloats(e,t,i,r){return this.r=Math.max(e,this.r),this.g=Math.max(t,this.g),this.b=Math.max(i,this.b),this.a=Math.max(r,this.a),this}floorToRef(e){throw new ReferenceError("Can not floor a color")}floor(){throw new ReferenceError("Can not floor a color")}fractToRef(e){throw new ReferenceError("Can not fract a color")}fract(){throw new ReferenceError("Can not fract a color")}negate(){throw new ReferenceError("Can not negate a color")}negateInPlace(){throw new ReferenceError("Can not negate a color")}negateToRef(e){throw new ReferenceError("Can not negate a color")}equalsWithEpsilon(e,t=Nt){return Ei(this.r,e.r,t)&&Ei(this.g,e.g,t)&&Ei(this.b,e.b,t)&&Ei(this.a,e.a,t)}equalsToFloats(e,t,i,r){return this.r===e&&this.g===t&&this.b===i&&this.a===r}toString(){return"{R: "+this.r+" G:"+this.g+" B:"+this.b+" A:"+this.a+"}"}getClassName(){return"Color4"}getHashCode(){let e=this.r*255|0;return e=e*397^(this.g*255|0),e=e*397^(this.b*255|0),e=e*397^(this.a*255|0),e}clone(){return new n().copyFrom(this)}copyFrom(e){return this.r=e.r,this.g=e.g,this.b=e.b,this.a=e.a,this}copyFromFloats(e,t,i,r){return this.r=e,this.g=t,this.b=i,this.a=r,this}set(e,t,i,r){return this.copyFromFloats(e,t,i,r)}setAll(e){return this.r=this.g=this.b=this.a=e,this}toHexString(e=!1){let t=Math.round(this.r*255),i=Math.round(this.g*255),r=Math.round(this.b*255);if(e)return"#"+Za(t)+Za(i)+Za(r);let s=Math.round(this.a*255);return"#"+Za(t)+Za(i)+Za(r)+Za(s)}fromHexString(e){return e.substring(0,1)!=="#"||e.length!==9&&e.length!==7?this:(this.r=parseInt(e.substring(1,3),16)/255,this.g=parseInt(e.substring(3,5),16)/255,this.b=parseInt(e.substring(5,7),16)/255,e.length===9&&(this.a=parseInt(e.substring(7,9),16)/255),this)}toLinearSpace(e=!1){let t=new n;return this.toLinearSpaceToRef(t,e),t}toLinearSpaceToRef(e,t=!1){return t?(e.r=Lu(this.r),e.g=Lu(this.g),e.b=Lu(this.b)):(e.r=Du(this.r),e.g=Du(this.g),e.b=Du(this.b)),e.a=this.a,this}toGammaSpace(e=!1){let t=new n;return this.toGammaSpaceToRef(t,e),t}toGammaSpaceToRef(e,t=!1){return t?(e.r=Nu(this.r),e.g=Nu(this.g),e.b=Nu(this.b)):(e.r=Ou(this.r),e.g=Ou(this.g),e.b=Ou(this.b)),e.a=this.a,this}static FromHexString(e){return e.substring(0,1)!=="#"||e.length!==9&&e.length!==7?new n(0,0,0,0):new n(0,0,0,1).fromHexString(e)}static Lerp(e,t,i){return n.LerpToRef(e,t,i,new n)}static LerpToRef(e,t,i,r){return r.r=e.r+(t.r-e.r)*i,r.g=e.g+(t.g-e.g)*i,r.b=e.b+(t.b-e.b)*i,r.a=e.a+(t.a-e.a)*i,r}static Hermite(e,t,i,r,s){let a=s*s,o=s*a,l=2*o-3*a+1,c=-2*o+3*a,f=o-2*a+s,h=o-a,d=e.r*l+i.r*c+t.r*f+r.r*h,u=e.g*l+i.g*c+t.g*f+r.g*h,m=e.b*l+i.b*c+t.b*f+r.b*h,_=e.a*l+i.a*c+t.a*f+r.a*h;return new n(d,u,m,_)}static Hermite1stDerivative(e,t,i,r,s){let a=new n;return this.Hermite1stDerivativeToRef(e,t,i,r,s,a),a}static Hermite1stDerivativeToRef(e,t,i,r,s,a){let o=s*s;a.r=(o-s)*6*e.r+(3*o-4*s+1)*t.r+(-o+s)*6*i.r+(3*o-2*s)*r.r,a.g=(o-s)*6*e.g+(3*o-4*s+1)*t.g+(-o+s)*6*i.g+(3*o-2*s)*r.g,a.b=(o-s)*6*e.b+(3*o-4*s+1)*t.b+(-o+s)*6*i.b+(3*o-2*s)*r.b,a.a=(o-s)*6*e.a+(3*o-4*s+1)*t.a+(-o+s)*6*i.a+(3*o-2*s)*r.a}static FromColor3(e,t=1){return new n(e.r,e.g,e.b,t)}static FromArray(e,t=0){return new n(e[t],e[t+1],e[t+2],e[t+3])}static FromArrayToRef(e,t=0,i){i.r=e[t],i.g=e[t+1],i.b=e[t+2],i.a=e[t+3]}static FromInts(e,t,i,r){return new n(e/255,t/255,i/255,r/255)}static CheckColors4(e,t){if(e.length===t*3){let i=[];for(let r=0;rnew lt(0,0,0,0));Ft("BABYLON.Color3",Te);Ft("BABYLON.Color4",lt)});var Qa,wu=C(()=>{Ge();Qa=class n{constructor(e,t,i,r){this.normal=new b(e,t,i),this.d=r}asArray(){return[this.normal.x,this.normal.y,this.normal.z,this.d]}clone(){return new n(this.normal.x,this.normal.y,this.normal.z,this.d)}getClassName(){return"Plane"}getHashCode(){let e=this.normal.getHashCode();return e=e*397^(this.d|0),e}normalize(){let e=Math.sqrt(this.normal.x*this.normal.x+this.normal.y*this.normal.y+this.normal.z*this.normal.z),t=0;return e!==0&&(t=1/e),this.normal.x*=t,this.normal.y*=t,this.normal.z*=t,this.d*=t,this}transform(e){let t=n._TmpMatrix;e.invertToRef(t);let i=t.m,r=this.normal.x,s=this.normal.y,a=this.normal.z,o=this.d,l=r*i[0]+s*i[1]+a*i[2]+o*i[3],c=r*i[4]+s*i[5]+a*i[6]+o*i[7],f=r*i[8]+s*i[9]+a*i[10]+o*i[11],h=r*i[12]+s*i[13]+a*i[14]+o*i[15];return new n(l,c,f,h)}dotCoordinate(e){return this.normal.x*e.x+this.normal.y*e.y+this.normal.z*e.z+this.d}copyFromPoints(e,t,i){let r=t.x-e.x,s=t.y-e.y,a=t.z-e.z,o=i.x-e.x,l=i.y-e.y,c=i.z-e.z,f=s*c-a*l,h=a*o-r*c,d=r*l-s*o,u=Math.sqrt(f*f+h*h+d*d),m;return u!==0?m=1/u:m=0,this.normal.x=f*m,this.normal.y=h*m,this.normal.z=d*m,this.d=-(this.normal.x*e.x+this.normal.y*e.y+this.normal.z*e.z),this}isFrontFacingTo(e,t){return b.Dot(this.normal,e)<=t}signedDistanceTo(e){return b.Dot(e,this.normal)+this.d}static FromArray(e){return new n(e[0],e[1],e[2],e[3])}static FromPoints(e,t,i){let r=new n(0,0,0,0);return r.copyFromPoints(e,t,i),r}static FromPositionAndNormal(e,t){let i=new n(0,0,0,0);return this.FromPositionAndNormalToRef(e,t,i)}static FromPositionAndNormalToRef(e,t,i){return i.normal.copyFrom(t),i.normal.normalize(),i.d=-e.dot(i.normal),i}static SignedDistanceToPlaneFromPositionAndNormal(e,t,i){let r=-(t.x*e.x+t.y*e.y+t.z*e.z);return b.Dot(i,t)+r}};Qa._TmpMatrix=K.Identity()});var Jc,fT=C(()=>{wu();Jc=class n{static GetPlanes(e){let t=[];for(let i=0;i<6;i++)t.push(new Qa(0,0,0,0));return n.GetPlanesToRef(e,t),t}static GetNearPlaneToRef(e,t){let i=e.m;t.normal.x=i[3]+i[2],t.normal.y=i[7]+i[6],t.normal.z=i[11]+i[10],t.d=i[15]+i[14],t.normalize()}static GetFarPlaneToRef(e,t){let i=e.m;t.normal.x=i[3]-i[2],t.normal.y=i[7]-i[6],t.normal.z=i[11]-i[10],t.d=i[15]-i[14],t.normalize()}static GetLeftPlaneToRef(e,t){let i=e.m;t.normal.x=i[3]+i[0],t.normal.y=i[7]+i[4],t.normal.z=i[11]+i[8],t.d=i[15]+i[12],t.normalize()}static GetRightPlaneToRef(e,t){let i=e.m;t.normal.x=i[3]-i[0],t.normal.y=i[7]-i[4],t.normal.z=i[11]-i[8],t.d=i[15]-i[12],t.normalize()}static GetTopPlaneToRef(e,t){let i=e.m;t.normal.x=i[3]-i[1],t.normal.y=i[7]-i[5],t.normal.z=i[11]-i[9],t.d=i[15]-i[13],t.normalize()}static GetBottomPlaneToRef(e,t){let i=e.m;t.normal.x=i[3]+i[1],t.normal.y=i[7]+i[5],t.normal.z=i[11]+i[9],t.d=i[15]+i[13],t.normalize()}static GetPlanesToRef(e,t){n.GetNearPlaneToRef(e,t[0]),n.GetFarPlaneToRef(e,t[1]),n.GetLeftPlaneToRef(e,t[2]),n.GetRightPlaneToRef(e,t[3]),n.GetTopPlaneToRef(e,t[4]),n.GetBottomPlaneToRef(e,t[5])}static IsPointInFrustum(e,t){for(let i=0;i<6;i++)if(t[i].dotCoordinate(e)<0)return!1;return!0}}});var N3,Fu,rM,Bu,Mh,Ch=C(()=>{xn();Ge();An();(function(n){n[n.CW=0]="CW",n[n.CCW=1]="CCW"})(N3||(N3={}));Fu=class n{constructor(e){this._radians=e,this._radians<0&&(this._radians+=2*Math.PI)}degrees(){return this._radians*180/Math.PI}radians(){return this._radians}static BetweenTwoPoints(e,t){let i=t.subtract(e),r=Math.atan2(i.y,i.x);return new n(r)}static BetweenTwoVectors(e,t){let i=e.lengthSquared()*t.lengthSquared();if(i===0)return new n(Math.PI/2);i=Math.sqrt(i);let r=e.dot(t)/i;r=wt(r,-1,1);let s=Math.acos(r);return new n(s)}static FromRadians(e){return new n(e)}static FromDegrees(e){return new n(e*Math.PI/180)}},rM=class{constructor(e,t,i){this.startPoint=e,this.midPoint=t,this.endPoint=i;let r=Math.pow(t.x,2)+Math.pow(t.y,2),s=(Math.pow(e.x,2)+Math.pow(e.y,2)-r)/2,a=(r-Math.pow(i.x,2)-Math.pow(i.y,2))/2,o=(e.x-t.x)*(t.y-i.y)-(t.x-i.x)*(e.y-t.y);this.centerPoint=new Ne((s*(t.y-i.y)-a*(e.y-t.y))/o,((e.x-t.x)*a-(t.x-i.x)*s)/o),this.radius=this.centerPoint.subtract(this.startPoint).length(),this.startAngle=Fu.BetweenTwoPoints(this.centerPoint,this.startPoint);let l=this.startAngle.degrees(),c=Fu.BetweenTwoPoints(this.centerPoint,this.midPoint).degrees(),f=Fu.BetweenTwoPoints(this.centerPoint,this.endPoint).degrees();c-l>180&&(c-=360),c-l<-180&&(c+=360),f-c>180&&(f-=360),f-c<-180&&(f+=360),this.orientation=c-l<0?0:1,this.angle=Fu.FromDegrees(this.orientation===0?l-f:f-l)}},Bu=class n{constructor(e,t){this._points=new Array,this._length=0,this.closed=!1,this._points.push(new Ne(e,t))}addLineTo(e,t){if(this.closed)return this;let i=new Ne(e,t),r=this._points[this._points.length-1];return this._points.push(i),this._length+=i.subtract(r).length(),this}addArcTo(e,t,i,r,s=36){if(this.closed)return this;let a=this._points[this._points.length-1],o=new Ne(e,t),l=new Ne(i,r),c=new rM(a,o,l),f=c.angle.radians()/s;c.orientation===0&&(f*=-1);let h=c.startAngle.radians()+f;for(let d=0;d(1-l)*(1-l)*c+2*l*(1-l)*f+l*l*h,o=this._points[this._points.length-1];for(let l=0;l<=s;l++){let c=l/s,f=a(c,o.x,e,i),h=a(c,o.y,t,r);this.addLineTo(f,h)}return this}addBezierCurveTo(e,t,i,r,s,a,o=36){if(this.closed)return this;let l=(f,h,d,u,m)=>(1-f)*(1-f)*(1-f)*h+3*f*(1-f)*(1-f)*d+3*f*f*(1-f)*u+f*f*f*m,c=this._points[this._points.length-1];for(let f=0;f<=o;f++){let h=f/o,d=l(h,c.x,e,i,s),u=l(h,c.y,t,r,a);this.addLineTo(d,u)}return this}isPointInside(e){let t=!1,i=this._points.length;for(let r=i-1,s=0;sNumber.EPSILON){if(c<0&&(a=this._points[s],l=-l,o=this._points[r],c=-c),e.yo.y)continue;if(e.y===a.y&&e.x===a.x)return!0;{let f=c*(e.x-a.x)-l*(e.y-a.y);if(f===0)return!0;if(f<0)continue;t=!t}}else{if(e.y!==a.y)continue;if(o.x<=e.x&&e.x<=a.x||a.x<=e.x&&e.x<=o.x)return!0}}return t}close(){return this.closed=!0,this}length(){let e=this._length;if(this.closed){let t=this._points[this._points.length-1],i=this._points[0];e+=i.subtract(t).length()}return e}area(){let e=this._points.length,t=0;for(let i=e-1,r=0;r1)return Ne.Zero();let t=e*this.length(),i=0;for(let r=0;r=i&&t<=c){let f=l.normalize(),h=t-i;return new Ne(a.x+f.x*h,a.y+f.y*h)}i=c}return Ne.Zero()}static StartingAt(e,t){return new n(e,t)}},Mh=class n{constructor(e,t=null,i,r=!1){this.path=e,this._curve=new Array,this._distances=new Array,this._tangents=new Array,this._normals=new Array,this._binormals=new Array,this._pointAtData={id:0,point:b.Zero(),previousPointArrayIndex:0,position:0,subPosition:0,interpolateReady:!1,interpolationMatrix:K.Identity()};for(let s=0;st){let c=e;e=t,t=c}let i=this.getCurve(),r=this.getPointAt(e),s=this.getPreviousPointIndexAt(e),a=this.getPointAt(t),o=this.getPreviousPointIndexAt(t)+1,l=[];return e!==0&&(s++,l.push(r)),l.push(...i.slice(s,o)),(t!==1||e===1)&&l.push(a),new n(l,this.getNormalAt(e),this._raw,this._alignTangentsWithPath)}update(e,t=null,i=!1){for(let r=0;rt+1;)t++,i=this._curve[e].subtract(this._curve[e-t]);return i}_normalVector(e,t){let i,r=e.length();if(r===0&&(r=1),t==null){let s;Ei(Math.abs(e.y)/r,1,Nt)?Ei(Math.abs(e.x)/r,1,Nt)?Ei(Math.abs(e.z)/r,1,Nt)?s=b.Zero():s=new b(0,0,1):s=new b(1,0,0):s=new b(0,-1,0),i=b.Cross(e,s)}else i=b.Cross(e,t),b.CrossToRef(i,e,i);return i.normalize(),i}_updatePointAtData(e,t=!1){if(this._pointAtData.id===e)return this._pointAtData.interpolateReady||this._updateInterpolationMatrix(),this._pointAtData;this._pointAtData.id=e;let i=this.getPoints();if(e<=0)return this._setPointAtData(0,0,i[0],0,t);if(e>=1)return this._setPointAtData(1,1,i[i.length-1],i.length-1,t);let r=i[0],s,a=0,o=e*this.length();for(let l=1;lo){let h=(a-o)/c,d=r.subtract(s),u=s.add(d.scaleInPlace(h));return this._setPointAtData(e,1-h,u,l-1,t)}r=s}return this._pointAtData}_setPointAtData(e,t,i,r,s){return this._pointAtData.point=i,this._pointAtData.position=e,this._pointAtData.subPosition=t,this._pointAtData.previousPointArrayIndex=r,this._pointAtData.interpolateReady=s,s&&this._updateInterpolationMatrix(),this._pointAtData}_updateInterpolationMatrix(){this._pointAtData.interpolationMatrix=K.Identity();let e=this._pointAtData.previousPointArrayIndex;if(e!==this._tangents.length-1){let t=e+1,i=this._tangents[e].clone(),r=this._normals[e].clone(),s=this._binormals[e].clone(),a=this._tangents[t].clone(),o=this._normals[t].clone(),l=this._binormals[t].clone(),c=ze.RotationQuaternionFromAxis(r,s,i),f=ze.RotationQuaternionFromAxis(o,l,a);ze.Slerp(c,f,this._pointAtData.subPosition).toRotationMatrix(this._pointAtData.interpolationMatrix)}}}});var Ol,hT=C(()=>{Ol=class n{constructor(e,t){this.width=e,this.height=t}toString(){return`{W: ${this.width}, H: ${this.height}}`}getClassName(){return"Size"}getHashCode(){let e=this.width|0;return e=e*397^(this.height|0),e}copyFrom(e){this.width=e.width,this.height=e.height}copyFromFloats(e,t){return this.width=e,this.height=t,this}set(e,t){return this.copyFromFloats(e,t)}multiplyByFloats(e,t){return new n(this.width*e,this.height*t)}clone(){return new n(this.width,this.height)}equals(e){return e?this.width===e.width&&this.height===e.height:!1}get surface(){return this.width*this.height}static Zero(){return new n(0,0)}add(e){return new n(this.width+e.width,this.height+e.height)}subtract(e){return new n(this.width-e.width,this.height-e.height)}scale(e){return new n(this.width*e,this.height*e)}static Lerp(e,t,i){let r=e.width+(t.width-e.width)*i,s=e.height+(t.height-e.height)*i;return new n(r,s)}}});var w3=C(()=>{Ge()});var $a,Uu=C(()=>{$a=class n{constructor(e,t,i,r){this.x=e,this.y=t,this.width=i,this.height=r}toGlobal(e,t){return new n(this.x*e,this.y*t,this.width*e,this.height*t)}toGlobalToRef(e,t,i){return i.x=this.x*e,i.y=this.y*t,i.width=this.width*e,i.height=this.height*t,this}clone(){return new n(this.x,this.y,this.width,this.height)}}});var F3=C(()=>{Pu();zt();An();fT();Ch();wu();hT();Ge();w3();Uu()});var Yo,Tie,Nl,wl,g_,Ko,v_=C(()=>{Ge();F3();Yo=[Math.sqrt(1/(4*Math.PI)),-Math.sqrt(3/(4*Math.PI)),Math.sqrt(3/(4*Math.PI)),-Math.sqrt(3/(4*Math.PI)),Math.sqrt(15/(4*Math.PI)),-Math.sqrt(15/(4*Math.PI)),Math.sqrt(5/(16*Math.PI)),-Math.sqrt(15/(4*Math.PI)),Math.sqrt(15/(16*Math.PI))],Tie=[()=>1,n=>n.y,n=>n.z,n=>n.x,n=>n.x*n.y,n=>n.y*n.z,n=>3*n.z*n.z-1,n=>n.x*n.z,n=>n.x*n.x-n.y*n.y],Nl=(n,e)=>Yo[n]*Tie[n](e),wl=[Math.PI,2*Math.PI/3,2*Math.PI/3,2*Math.PI/3,Math.PI/4,Math.PI/4,Math.PI/4,Math.PI/4,Math.PI/4],g_=class n{constructor(){this.preScaled=!1,this.l00=b.Zero(),this.l1_1=b.Zero(),this.l10=b.Zero(),this.l11=b.Zero(),this.l2_2=b.Zero(),this.l2_1=b.Zero(),this.l20=b.Zero(),this.l21=b.Zero(),this.l22=b.Zero()}addLight(e,t,i){Q.Vector3[0].set(t.r,t.g,t.b);let r=Q.Vector3[0],s=Q.Vector3[1];r.scaleToRef(i,s),s.scaleToRef(Nl(0,e),Q.Vector3[2]),this.l00.addInPlace(Q.Vector3[2]),s.scaleToRef(Nl(1,e),Q.Vector3[2]),this.l1_1.addInPlace(Q.Vector3[2]),s.scaleToRef(Nl(2,e),Q.Vector3[2]),this.l10.addInPlace(Q.Vector3[2]),s.scaleToRef(Nl(3,e),Q.Vector3[2]),this.l11.addInPlace(Q.Vector3[2]),s.scaleToRef(Nl(4,e),Q.Vector3[2]),this.l2_2.addInPlace(Q.Vector3[2]),s.scaleToRef(Nl(5,e),Q.Vector3[2]),this.l2_1.addInPlace(Q.Vector3[2]),s.scaleToRef(Nl(6,e),Q.Vector3[2]),this.l20.addInPlace(Q.Vector3[2]),s.scaleToRef(Nl(7,e),Q.Vector3[2]),this.l21.addInPlace(Q.Vector3[2]),s.scaleToRef(Nl(8,e),Q.Vector3[2]),this.l22.addInPlace(Q.Vector3[2])}scaleInPlace(e){this.l00.scaleInPlace(e),this.l1_1.scaleInPlace(e),this.l10.scaleInPlace(e),this.l11.scaleInPlace(e),this.l2_2.scaleInPlace(e),this.l2_1.scaleInPlace(e),this.l20.scaleInPlace(e),this.l21.scaleInPlace(e),this.l22.scaleInPlace(e)}convertIncidentRadianceToIrradiance(){this.l00.scaleInPlace(wl[0]),this.l1_1.scaleInPlace(wl[1]),this.l10.scaleInPlace(wl[2]),this.l11.scaleInPlace(wl[3]),this.l2_2.scaleInPlace(wl[4]),this.l2_1.scaleInPlace(wl[5]),this.l20.scaleInPlace(wl[6]),this.l21.scaleInPlace(wl[7]),this.l22.scaleInPlace(wl[8])}convertIrradianceToLambertianRadiance(){this.scaleInPlace(1/Math.PI)}preScaleForRendering(){this.preScaled=!0,this.l00.scaleInPlace(Yo[0]),this.l1_1.scaleInPlace(Yo[1]),this.l10.scaleInPlace(Yo[2]),this.l11.scaleInPlace(Yo[3]),this.l2_2.scaleInPlace(Yo[4]),this.l2_1.scaleInPlace(Yo[5]),this.l20.scaleInPlace(Yo[6]),this.l21.scaleInPlace(Yo[7]),this.l22.scaleInPlace(Yo[8])}updateFromArray(e){return b.FromArrayToRef(e[0],0,this.l00),b.FromArrayToRef(e[1],0,this.l1_1),b.FromArrayToRef(e[2],0,this.l10),b.FromArrayToRef(e[3],0,this.l11),b.FromArrayToRef(e[4],0,this.l2_2),b.FromArrayToRef(e[5],0,this.l2_1),b.FromArrayToRef(e[6],0,this.l20),b.FromArrayToRef(e[7],0,this.l21),b.FromArrayToRef(e[8],0,this.l22),this}updateFromFloatsArray(e){return b.FromFloatsToRef(e[0],e[1],e[2],this.l00),b.FromFloatsToRef(e[3],e[4],e[5],this.l1_1),b.FromFloatsToRef(e[6],e[7],e[8],this.l10),b.FromFloatsToRef(e[9],e[10],e[11],this.l11),b.FromFloatsToRef(e[12],e[13],e[14],this.l2_2),b.FromFloatsToRef(e[15],e[16],e[17],this.l2_1),b.FromFloatsToRef(e[18],e[19],e[20],this.l20),b.FromFloatsToRef(e[21],e[22],e[23],this.l21),b.FromFloatsToRef(e[24],e[25],e[26],this.l22),this}static FromArray(e){return new n().updateFromArray(e)}static FromPolynomial(e){let t=new n;return t.l00=e.xx.scale(.376127).add(e.yy.scale(.376127)).add(e.zz.scale(.376126)),t.l1_1=e.y.scale(.977204),t.l10=e.z.scale(.977204),t.l11=e.x.scale(.977204),t.l2_2=e.xy.scale(1.16538),t.l2_1=e.yz.scale(1.16538),t.l20=e.zz.scale(1.34567).subtract(e.xx.scale(.672834)).subtract(e.yy.scale(.672834)),t.l21=e.zx.scale(1.16538),t.l22=e.xx.scale(1.16538).subtract(e.yy.scale(1.16538)),t.l1_1.scaleInPlace(-1),t.l11.scaleInPlace(-1),t.l2_1.scaleInPlace(-1),t.l21.scaleInPlace(-1),t.scaleInPlace(Math.PI),t}},Ko=class n{constructor(){this.x=b.Zero(),this.y=b.Zero(),this.z=b.Zero(),this.xx=b.Zero(),this.yy=b.Zero(),this.zz=b.Zero(),this.xy=b.Zero(),this.yz=b.Zero(),this.zx=b.Zero()}get preScaledHarmonics(){return this._harmonics||(this._harmonics=g_.FromPolynomial(this)),this._harmonics.preScaled||this._harmonics.preScaleForRendering(),this._harmonics}addAmbient(e){Q.Vector3[0].copyFromFloats(e.r,e.g,e.b);let t=Q.Vector3[0];this.xx.addInPlace(t),this.yy.addInPlace(t),this.zz.addInPlace(t)}scaleInPlace(e){this.x.scaleInPlace(e),this.y.scaleInPlace(e),this.z.scaleInPlace(e),this.xx.scaleInPlace(e),this.yy.scaleInPlace(e),this.zz.scaleInPlace(e),this.yz.scaleInPlace(e),this.zx.scaleInPlace(e),this.xy.scaleInPlace(e)}updateFromHarmonics(e){return this._harmonics=e,this.x.copyFrom(e.l11),this.x.scaleInPlace(1.02333).scaleInPlace(-1),this.y.copyFrom(e.l1_1),this.y.scaleInPlace(1.02333).scaleInPlace(-1),this.z.copyFrom(e.l10),this.z.scaleInPlace(1.02333),this.xx.copyFrom(e.l00),Q.Vector3[0].copyFrom(e.l20).scaleInPlace(.247708),Q.Vector3[1].copyFrom(e.l22).scaleInPlace(.429043),this.xx.scaleInPlace(.886277).subtractInPlace(Q.Vector3[0]).addInPlace(Q.Vector3[1]),this.yy.copyFrom(e.l00),this.yy.scaleInPlace(.886277).subtractInPlace(Q.Vector3[0]).subtractInPlace(Q.Vector3[1]),this.zz.copyFrom(e.l00),Q.Vector3[0].copyFrom(e.l20).scaleInPlace(.495417),this.zz.scaleInPlace(.886277).addInPlace(Q.Vector3[0]),this.yz.copyFrom(e.l2_1),this.yz.scaleInPlace(.858086).scaleInPlace(-1),this.zx.copyFrom(e.l21),this.zx.scaleInPlace(.858086).scaleInPlace(-1),this.xy.copyFrom(e.l2_2),this.xy.scaleInPlace(.858086),this.scaleInPlace(1/Math.PI),this}static FromHarmonics(e){return new n().updateFromHarmonics(e)}static FromArray(e){let t=new n;return b.FromArrayToRef(e[0],0,t.x),b.FromArrayToRef(e[1],0,t.y),b.FromArrayToRef(e[2],0,t.z),b.FromArrayToRef(e[3],0,t.xx),b.FromArrayToRef(e[4],0,t.yy),b.FromArrayToRef(e[5],0,t.zz),b.FromArrayToRef(e[6],0,t.yz),b.FromArrayToRef(e[7],0,t.zx),b.FromArrayToRef(e[8],0,t.xy),t}}});function P(n,e,t,i){var r=arguments.length,s=r<3?e:i===null?i=Object.getOwnPropertyDescriptor(e,t):i,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(n,e,t,i);else for(var o=n.length-1;o>=0;o--)(a=n[o])&&(s=(r<3?a(s):r>3?a(e,t,s):a(e,t))||s);return r>3&&s&&Object.defineProperty(e,t,s),s}var kt=C(()=>{});function B3(n){let e=n.getClassName();return uT[e]||(uT[e]={}),uT[e]}function mT(n){let e=n.getClassName();if(dT[e])return dT[e];dT[e]={};let t=dT[e],i=n,r=e;for(;r;){let s=uT[r];for(let l in s)t[l]=s[l];let a,o=!1;do{if(a=Object.getPrototypeOf(i),!a.getClassName){o=!0;break}if(a.getClassName()!==r)break;i=a}while(a);if(o)break;r=a.getClassName(),i=a}return t}var dT,uT,nM=C(()=>{dT={},uT={}});function pa(n,e){return(t,i)=>{let r=B3(t);r[i]||(r[i]={type:n,sourceName:e})}}function Aie(n,e=null){return(t,i)=>{let r=e||"_"+i;Object.defineProperty(t,i,{get:function(){return this[r]},set:function(s){var a;typeof((a=this[r])==null?void 0:a.equals)=="function"&&this[r].equals(s)||this[r]!==s&&(this[r]=s,t[n].apply(this))},enumerable:!0,configurable:!0})}}function oe(n,e=null){return Aie(n,e)}function w(n){return pa(0,n)}function Bt(n){return pa(1,n)}function mr(n){return pa(2,n)}function Vu(n){return pa(3,n)}function Gu(n){return pa(4,n)}function Vr(n){return pa(5,n)}function pT(n){return pa(6,n)}function U3(n){return pa(7,n)}function ku(n){return pa(8,n)}function V3(n){return pa(9,n)}function G3(n){return pa(10,n)}function k3(n){return pa(11,n)}function us(n,e,t,i){let r=t.value;t.value=(...s)=>{let a=r;if(typeof _native!="undefined"&&_native[e]){let o=_native[e];i?a=(...l)=>i(...l)?o(...l):r(...l):a=o}return n[e]=a,a(...s)}}function dt(n,e=null){return(t,i)=>{let r=i;Object.defineProperty(t,e||"",{get:function(){return this[r].value},set:function(a){var o,l;typeof((l=(o=this[r])==null?void 0:o.value)==null?void 0:l.equals)=="function"&&this[r].value.equals(a)||this[r].value!==a&&(this[r].value=a,t[n].apply(this))},enumerable:!0,configurable:!0})}}var Ut=C(()=>{nM();us.filter=function(n){return(e,t,i)=>us(e,t,i,n)}});function ef(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,n=>{let e=Math.random()*16|0;return(n==="x"?e:e&3|8).toString(16)})}var E_=C(()=>{});function xie(){return typeof _native!="undefined"&&_native.XMLHttpRequest?new _native.XMLHttpRequest:new XMLHttpRequest}var br,yh=C(()=>{br=class n{constructor(){this._xhr=xie(),this._requestURL=""}static get IsCustomRequestAvailable(){return Object.keys(n.CustomRequestHeaders).length>0||n.CustomRequestModifiers.length>0}static _CleanUrl(e){return e=e.replace("file:http:","http:"),e=e.replace("file:https:","https:"),e}static _ShouldSkipRequestModifications(e){return n.SkipRequestModificationForBabylonCDN&&(e.includes("preview.babylonjs.com")||e.includes("cdn.babylonjs.com"))}static _CollectCustomizations(e,t={}){let i={...t};if(n._ShouldSkipRequestModifications(e))return{url:e,headers:i};for(let s in n.CustomRequestHeaders){let a=n.CustomRequestHeaders[s];a&&(i[s]=a)}let r={setRequestHeader:(s,a)=>{i[s]=a}};for(let s of n.CustomRequestModifiers){if(n._ShouldSkipRequestModifications(e))break;let a=s(r,e);typeof a=="string"&&(e=a)}return{url:e,headers:i}}static async FetchAsync(e,t={}){var r,s,a;let i=(r=t.method)!=null?r:"GET";if(typeof fetch!="undefined"){let{url:o,headers:l}=n._CollectCustomizations(n._CleanUrl(e),(s=t.headers)!=null?s:{});return await fetch(o,{method:i,headers:l,body:(a=t.body)!=null?a:void 0})}return await new Promise((o,l)=>{var f;let c=new n;c.responseType="arraybuffer",c.addEventListener("readystatechange",()=>{if(c.readyState===4)if(c.status>=200&&c.status<300){let h=typeof Headers!="undefined"?new Headers:void 0,d=c.getResponseHeader("Content-Type");d&&h&&h.set("Content-Type",d),o(typeof Response!="undefined"?new Response(c.response,{status:c.status,statusText:c.statusText,headers:h}):{ok:!0,status:c.status,statusText:c.statusText,headers:{get:u=>c.getResponseHeader(u)},arrayBuffer:async()=>await Promise.resolve(c.response)})}else l(new Error(`HTTP ${c.status} loading '${c.requestURL}': ${c.statusText}`))}),c.open(i,e,t.headers),c.send((f=t.body)!=null?f:null)})}get requestURL(){return this._requestURL}get onprogress(){return this._xhr.onprogress}set onprogress(e){this._xhr.onprogress=e}get readyState(){return this._xhr.readyState}get status(){return this._xhr.status}get statusText(){return this._xhr.statusText}get response(){return this._xhr.response}get responseURL(){return this._xhr.responseURL}get responseText(){return this._xhr.responseText}get responseType(){return this._xhr.responseType}set responseType(e){this._xhr.responseType=e}get timeout(){return this._xhr.timeout}set timeout(e){this._xhr.timeout=e}addEventListener(e,t,i){this._xhr.addEventListener(e,t,i)}removeEventListener(e,t,i){this._xhr.removeEventListener(e,t,i)}abort(){this._xhr.abort()}send(e){this._xhr.send(e)}open(e,t,i){let{url:r,headers:s}=n._CollectCustomizations(t,i);this._requestURL=n._CleanUrl(r),this._xhr.open(e,this._requestURL,!0);for(let a in s)this._xhr.setRequestHeader(a,s[a])}setRequestHeader(e,t){this._xhr.setRequestHeader(e,t)}getResponseHeader(e){return this._xhr.getResponseHeader(e)}};br.CustomRequestHeaders={};br.CustomRequestModifiers=new Array;br.SkipRequestModificationForBabylonCDN=!0});var tf,W3=C(()=>{tf=class{};tf.FilesToLoad={}});var _T,H3=C(()=>{_T=class{static ExponentialBackoff(e=3,t=500){return(i,r,s)=>r.status!==0||s>=e||i.indexOf("file:")!==-1?-1:Math.pow(2,s)*t}}});var Fl,_a,ms,S_=C(()=>{Fl=class extends Error{};Fl._setPrototypeOf=Object.setPrototypeOf||((n,e)=>(n.__proto__=e,n));_a={MeshInvalidPositionsError:0,UnsupportedTextureError:1e3,GLTFLoaderUnexpectedMagicError:2e3,SceneLoaderError:3e3,LoadFileError:4e3,RequestFileError:4001,ReadFileError:4002},ms=class n extends Fl{constructor(e,t,i){super(e),this.errorCode=t,this.innerError=i,this.name="RuntimeError",Fl._setPrototypeOf(this,n.prototype)}}});function Rie(n){let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",t="",i,r,s,a,o,l,c,f=0;for(;f>2,o=(i&3)<<4|r>>4,l=(r&15)<<2|s>>6,c=s&63,isNaN(r)?l=c=64:isNaN(s)&&(c=64),t+=e.charAt(a)+e.charAt(o)+e.charAt(l)+e.charAt(c);return t}function bie(n){let e=sM(n),t=e.length,i=new Uint8Array(new ArrayBuffer(t));for(let r=0;r{z3=n=>{if(typeof TextDecoder!="undefined")return new TextDecoder().decode(n);let e="";for(let t=0;t{let e=ArrayBuffer.isView(n)?new Uint8Array(n.buffer,n.byteOffset,n.byteLength):new Uint8Array(n);return typeof e.toBase64=="function"?e.toBase64():Rie(e)},sM=n=>atob(n),X3=n=>typeof Uint8Array.fromBase64=="function"?Uint8Array.fromBase64(n).buffer:bie(n)});function Iie(n,e,t,i){switch(e){case 5120:{let r=n.getInt8(t);return i&&(r=Math.max(r/127,-1)),r}case 5121:{let r=n.getUint8(t);return i&&(r=r/255),r}case 5122:{let r=n.getInt16(t,!0);return i&&(r=Math.max(r/32767,-1)),r}case 5123:{let r=n.getUint16(t,!0);return i&&(r=r/65535),r}case 5124:return n.getInt32(t,!0);case 5125:return n.getUint32(t,!0);case 5126:return n.getFloat32(t,!0);default:throw new Error(`Invalid component type ${e}`)}}function Mie(n,e,t,i,r){switch(e){case 5120:{i&&(r=Math.round(r*127)),n.setInt8(t,r);break}case 5121:{i&&(r=Math.round(r*255)),n.setUint8(t,r);break}case 5122:{i&&(r=Math.round(r*32767)),n.setInt16(t,r,!0);break}case 5123:{i&&(r=Math.round(r*65535)),n.setUint16(t,r,!0);break}case 5124:{n.setInt32(t,r,!0);break}case 5125:{n.setUint32(t,r,!0);break}case 5126:{n.setFloat32(t,r,!0);break}default:throw new Error(`Invalid component type ${e}`)}}function jo(n){switch(n){case 5120:case 5121:return 1;case 5122:case 5123:return 2;case 5124:case 5125:case 5126:return 4;default:throw new Error(`Invalid type '${n}'`)}}function aM(n){switch(n){case 5120:return Int8Array;case 5121:return Uint8Array;case 5122:return Int16Array;case 5123:return Uint16Array;case 5124:return Int32Array;case 5125:return Uint32Array;case 5126:return Float32Array;default:throw new Error(`Invalid component type '${n}'`)}}function Ph(n,e,t,i,r,s,a,o){let l=new Array(i),c=new Array(i);if(n instanceof Array){let f=e/4,h=t/4;for(let d=0;d{for(let u=0;un.length)throw new Error("Last accessed index is out of bounds.");if(_{for(let A=0;Af.byteLength)throw new Error("Last accessed byte is out of bounds.");let u=e*o;if(r{for(let g=0;g{for(let d=0;d{Pt()});function nf(n){return X3(n.split(",")[1])}var q3,zu,vT,lM,Cie,Bi,ET,j3,Xu,Dh,qo,ST,Z3,Q3,rf,$3,J3,yie,A_,Pie,Bl=C(()=>{yh();ma();hi();W3();H3();S_();T_();qS();Pi();Pt();Wo();$c();Lr();Hu();q3=new RegExp(/^data:([^,]+\/[^,]+)?;base64,/i),zu=class n extends ms{constructor(e,t){super(e,_a.LoadFileError),this.name="LoadFileError",Fl._setPrototypeOf(this,n.prototype),t instanceof br?this.request=t:this.file=t}},vT=class n extends ms{constructor(e,t){super(e,_a.RequestFileError),this.request=t,this.name="RequestFileError",Fl._setPrototypeOf(this,n.prototype)}},lM=class n extends ms{constructor(e,t){super(e,_a.ReadFileError),this.file=t,this.name="ReadFileError",Fl._setPrototypeOf(this,n.prototype)}},Cie=n=>(n=n.replace(/#/gm,"%23"),n),Bi={DefaultRetryStrategy:_T.ExponentialBackoff(),BaseUrl:"",CorsBehavior:"anonymous",PreprocessUrl:n=>n,ScriptBaseUrl:"",ScriptPreprocessUrl:n=>n,CleanUrl:Cie},ET=(n,e)=>{if(!(n&&n.indexOf("data:")===0)&&Bi.CorsBehavior)if(typeof Bi.CorsBehavior=="string"||Bi.CorsBehavior instanceof String)e.crossOrigin=Bi.CorsBehavior;else{let t=Bi.CorsBehavior(n);t&&(e.crossOrigin=t)}},j3={getRequiredSize:null},Xu=(n,e,t,i,r="",s,a=Le.LastCreatedEngine)=>{if(typeof HTMLImageElement=="undefined"&&!(a!=null&&a._features.forceBitmapOverHTMLImageElement))return t("LoadImage is only supported in web or BabylonNative environments."),null;let o,l=!1;if(n instanceof ArrayBuffer||ArrayBuffer.isView(n))if(typeof Blob!="undefined"&&typeof URL!="undefined"){let S;n instanceof ArrayBuffer?S=n:S=gT(n),o=URL.createObjectURL(new Blob([S],{type:r})),l=!0}else o=`data:${r};base64,`+Wu(n);else n instanceof Blob?(o=URL.createObjectURL(n),l=!0):(o=Bi.CleanUrl(n),o=Bi.PreprocessUrl(o));let c=S=>{if(t){let E=o||n.toString();t(`Error while trying to load image: ${E.indexOf("http")===0||E.length<=128?E:E.slice(0,128)+"..."}`,S)}};if(a!=null&&a._features.forceBitmapOverHTMLImageElement)return qo(o,S=>{a.createImageBitmap(new Blob([S],{type:r}),{premultiplyAlpha:"none",colorSpaceConversion:"none",...s}).then(E=>{e(E),l&&URL.revokeObjectURL(o)}).catch(E=>{t&&t("Error while trying to load image: "+n,E)})},void 0,i||void 0,!0,(S,E)=>{c(E)}),null;let f=new Image;if(j3.getRequiredSize){let S=j3.getRequiredSize(n);S.width&&(f.width=S.width),S.height&&(f.height=S.height)}ET(o,f);let h=[],d=()=>{for(let S of h)S.target.addEventListener(S.name,S.handler)},u=()=>{for(let S of h)S.target.removeEventListener(S.name,S.handler);h.length=0},m=()=>{u(),e(f),l&&f.src&&URL.revokeObjectURL(f.src)},_=S=>{u(),c(S),l&&f.src&&URL.revokeObjectURL(f.src)},p=S=>{if(S.blockedURI!==f.src||S.disposition==="report")return;u();let E=new Error(`CSP violation of policy ${S.effectiveDirective} ${S.blockedURI}. Current policy is ${S.originalPolicy}`);Le.UseFallbackTexture=!1,c(E),l&&f.src&&URL.revokeObjectURL(f.src),f.src=""};h.push({target:f,name:"load",handler:m}),h.push({target:f,name:"error",handler:_}),h.push({target:document,name:"securitypolicyviolation",handler:p}),d();let g=o.substring(0,5)==="blob:",v=o.substring(0,5)==="data:",x=()=>{g||v||!br.IsCustomRequestAvailable?f.src=o:qo(o,(S,E,R)=>{let I=!r&&R?R:r,y=new Blob([S],{type:I}),M=URL.createObjectURL(y);l=!0,f.src=M},void 0,i||void 0,!0,(S,E)=>{c(E)})},A=()=>{i&&i.loadImage(o,f)};if(!g&&!v&&i&&i.enableTexturesOffline)i.open(A,x);else{if(o.indexOf("file:")!==-1){let S=decodeURIComponent(o.substring(5).toLowerCase());if(tf.FilesToLoad[S]&&typeof URL!="undefined"){try{let E;try{E=URL.createObjectURL(tf.FilesToLoad[S])}catch(R){E=URL.createObjectURL(tf.FilesToLoad[S])}f.src=E,l=!0}catch(E){f.src=""}return f}}x()}return f},Dh=(n,e,t,i,r)=>{let s=new FileReader,a={onCompleteObservable:new te,abort:()=>s.abort()};return s.onloadend=()=>a.onCompleteObservable.notifyObservers(a),r&&(s.onerror=()=>{r(new lM(`Unable to read ${n.name}`,n))}),s.onload=o=>{e(o.target.result)},t&&(s.onprogress=t),i?s.readAsArrayBuffer(n):s.readAsText(n),a},qo=(n,e,t,i,r,s,a)=>{if(n.name)return Dh(n,e,t,r,s?f=>{s(void 0,f)}:void 0);let o=n;if(o.indexOf("file:")!==-1){let f=decodeURIComponent(o.substring(5).toLowerCase());f.indexOf("./")===0&&(f=f.substring(2));let h=tf.FilesToLoad[f];if(h)return Dh(h,e,t,r,s?d=>s(void 0,new zu(d.message,d.file)):void 0)}let{match:l,type:c}=$3(o);if(l){let f={onCompleteObservable:new te,abort:()=>()=>{}};try{let h=r?nf(o):J3(o);e(h,void 0,c)}catch(h){s?s(void 0,h):J.Error(h.message||"Failed to parse the Data URL")}return ja.SetImmediate(()=>{f.onCompleteObservable.notifyObservers(f)}),f}return ST(o,(f,h)=>{e(f,h==null?void 0:h.responseURL,h==null?void 0:h.getResponseHeader("content-type"))},t,i,r,s?f=>{s(f.request,new zu(f.message,f.request))}:void 0,a)},ST=(n,e,t,i,r,s,a)=>{var h;i!==null&&(i!=null||(i=(h=Le.LastCreatedScene)==null?void 0:h.offlineProvider)),n=Bi.CleanUrl(n),n=Bi.PreprocessUrl(n);let o=Bi.BaseUrl+n,l=!1,c={onCompleteObservable:new te,abort:()=>l=!0},f=()=>{let d=new br,u=null,m,_=()=>{d&&(t&&d.removeEventListener("progress",t),m&&d.removeEventListener("readystatechange",m),d.removeEventListener("loadend",p))},p=()=>{_(),c.onCompleteObservable.notifyObservers(c),c.onCompleteObservable.clear(),t=void 0,m=null,p=null,s=void 0,a=void 0,e=void 0};c.abort=()=>{l=!0,p&&p(),d&&d.readyState!==(XMLHttpRequest.DONE||4)&&d.abort(),u!==null&&(clearTimeout(u),u=null),d=null};let g=x=>{let A=x.message||"Unknown error";s&&d?s(new vT(A,d)):J.Error(A)},v=x=>{if(d){if(d.open("GET",o),a)try{a(d)}catch(A){g(A);return}r&&(d.responseType="arraybuffer"),t&&d.addEventListener("progress",t),p&&d.addEventListener("loadend",p),m=()=>{if(!(l||!d)&&d.readyState===(XMLHttpRequest.DONE||4)){if(m&&d.removeEventListener("readystatechange",m),d.status>=200&&d.status<300||d.status===0&&(!ar()||Q3())){let E=r?d.response:d.responseText;if(E!==null){try{e&&e(E,d)}catch(R){g(R)}return}}let A=Bi.DefaultRetryStrategy;if(A){let E=A(o,d,x);if(E!==-1){_(),d=new br,u=setTimeout(()=>v(x+1),E);return}}let S=new vT("Error status: "+d.status+" "+d.statusText+" - Unable to load "+o,d);s&&s(S)}},d.addEventListener("readystatechange",m),d.send()}};v(0)};if(i&&i.enableSceneOffline&&!n.startsWith("blob:")){let d=m=>{m&&m.status>400?s&&s(m):f()},u=()=>{i&&i.loadFile(Bi.BaseUrl+n,m=>{!l&&e&&e(m),c.onCompleteObservable.notifyObservers(c)},t?m=>{!l&&t&&t(m)}:void 0,d,r)};i.open(u,d)}else f();return c},Z3=n=>{let{match:e,type:t}=$3(n);if(e)return t||void 0;let i=n.lastIndexOf(".");switch(n.substring(i+1).toLowerCase()){case"glb":return"model/gltf-binary";case"bin":return"application/octet-stream";case"gltf":return"model/gltf+json";case"jpg":case"jpeg":return"image/jpeg";case"png":return"image/png";case"webp":return"image/webp";case"ktx":return"image/ktx";case"ktx2":return"image/ktx2";case"avif":return"image/avif";default:return}},Q3=()=>typeof location!="undefined"&&location.protocol==="file:",rf=n=>q3.test(n),$3=n=>{let e=q3.exec(n);return e===null||e.length===0?{match:!1,type:""}:{match:!0,type:e[0].replace("data:","").replace(";base64,","")}};J3=n=>sM(n.split(",")[1]),yie=()=>{Re._FileToolsLoadImage=Xu,xu.loadFile=qo,WI.loadFile=qo};yie();Pie=(n,e,t,i,r,s,a,o,l,c)=>{A_={DecodeBase64UrlToBinary:n,DecodeBase64UrlToString:e,DefaultRetryStrategy:t.DefaultRetryStrategy,BaseUrl:t.BaseUrl,CorsBehavior:t.CorsBehavior,PreprocessUrl:t.PreprocessUrl,IsBase64DataUrl:i,IsFileURL:r,LoadFile:s,LoadImage:a,ReadFile:o,RequestFile:l,SetCorsBehavior:c},Object.defineProperty(A_,"DefaultRetryStrategy",{get:function(){return t.DefaultRetryStrategy},set:function(f){t.DefaultRetryStrategy=f}}),Object.defineProperty(A_,"BaseUrl",{get:function(){return t.BaseUrl},set:function(f){t.BaseUrl=f}}),Object.defineProperty(A_,"PreprocessUrl",{get:function(){return t.PreprocessUrl},set:function(f){t.PreprocessUrl=f}}),Object.defineProperty(A_,"CorsBehavior",{get:function(){return t.CorsBehavior},set:function(f){t.CorsBehavior=f}})};Pie(nf,J3,Bi,rf,Q3,qo,Xu,Dh,ST,ET)});var TT,e2=C(()=>{hT();TT=class n{get wrapU(){return this._wrapU}set wrapU(e){this._wrapU=e}get wrapV(){return this._wrapV}set wrapV(e){this._wrapV=e}get coordinatesMode(){return 0}get isCube(){return this._texture?this._texture.isCube:!1}set isCube(e){this._texture&&(this._texture.isCube=e)}get is3D(){return this._texture?this._texture.is3D:!1}set is3D(e){this._texture&&(this._texture.is3D=e)}get is2DArray(){return this._texture?this._texture.is2DArray:!1}set is2DArray(e){this._texture&&(this._texture.is2DArray=e)}getClassName(){return"ThinTexture"}static _IsRenderTargetWrapper(e){return(e==null?void 0:e.shareDepth)!==void 0}constructor(e){var t,i,r;this._wrapU=1,this._wrapV=1,this.wrapR=1,this.anisotropicFilteringLevel=4,this.delayLoadState=0,this._texture=null,this._engine=null,this._cachedSize=Ol.Zero(),this._cachedBaseSize=Ol.Zero(),this._initialSamplingMode=2,this._texture=n._IsRenderTargetWrapper(e)?e.texture:e,this._texture&&(this._engine=this._texture.getEngine(),this.wrapU=(t=this._texture._cachedWrapU)!=null?t:this.wrapU,this.wrapV=(i=this._texture._cachedWrapV)!=null?i:this.wrapV,this.wrapR=(r=this._texture._cachedWrapR)!=null?r:this.wrapR)}isReady(){return this.delayLoadState===4?(this.delayLoad(),!1):this._texture?this._texture.isReady:!1}delayLoad(){}getInternalTexture(){return this._texture}getSize(){if(this._texture){if(this._texture.width)return this._cachedSize.width=this._texture.width,this._cachedSize.height=this._texture.height,this._cachedSize;if(this._texture._size)return this._cachedSize.width=this._texture._size,this._cachedSize.height=this._texture._size,this._cachedSize}return this._cachedSize}getBaseSize(){return!this.isReady()||!this._texture?(this._cachedBaseSize.width=0,this._cachedBaseSize.height=0,this._cachedBaseSize):this._texture._size?(this._cachedBaseSize.width=this._texture._size,this._cachedBaseSize.height=this._texture._size,this._cachedBaseSize):(this._cachedBaseSize.width=this._texture.baseWidth,this._cachedBaseSize.height=this._texture.baseHeight,this._cachedBaseSize)}get samplingMode(){return this._texture?this._texture.samplingMode:this._initialSamplingMode}updateSamplingMode(e,t=!1){this._texture&&this._engine&&this._engine.updateTextureSamplingMode(e,this._texture,this._texture.generateMipMaps&&t)}releaseInternalTexture(){this._texture&&(this._texture.dispose(),this._texture=null)}dispose(){this._texture&&(this.releaseInternalTexture(),this._engine=null)}}});var AT,t2=C(()=>{AT=class n{static Eval(e,t){return e.match(/\([^()]*\)/g)?e=e.replace(/\([^()]*\)/g,i=>(i=i.slice(1,i.length-1),n._HandleParenthesisContent(i,t))):e=n._HandleParenthesisContent(e,t),e==="true"?!0:e==="false"?!1:n.Eval(e,t)}static _HandleParenthesisContent(e,t){t=t||(s=>s==="true");let i,r=e.split("||");for(let s in r)if(Object.prototype.hasOwnProperty.call(r,s)){let a=n._SimplifyNegation(r[s].trim()),o=a.split("&&");if(o.length>1)for(let l=0;l(t=t.replace(/[\s]/g,()=>""),t.length%2?"!":"")),e=e.trim(),e==="!true"?e="false":e==="!false"&&(e="true"),e}}});var Zt,sf=C(()=>{t2();Zt=class n{static EnableFor(e){e._tags=e._tags||{},e.hasTags=()=>n.HasTags(e),e.addTags=t=>n.AddTagsTo(e,t),e.removeTags=t=>n.RemoveTagsFrom(e,t),e.matchesTagsQuery=t=>n.MatchesQuery(e,t)}static DisableFor(e){delete e._tags,delete e.hasTags,delete e.addTags,delete e.removeTags,delete e.matchesTagsQuery}static HasTags(e){if(!e._tags)return!1;let t=e._tags;for(let i in t)if(Object.prototype.hasOwnProperty.call(t,i))return!0;return!1}static GetTags(e,t=!0){if(!e._tags)return null;if(t){let i=[];for(let r in e._tags)Object.prototype.hasOwnProperty.call(e._tags,r)&&e._tags[r]===!0&&i.push(r);return i.join(" ")}else return e._tags}static AddTagsTo(e,t){if(!t||typeof t!="string")return;let i=t.split(" ");for(let r of i)n._AddTagTo(e,r)}static _AddTagTo(e,t){t=t.trim(),!(t===""||t==="true"||t==="false")&&(t.match(/[\s]/)||t.match(/^([!]|([|]|[&]){2})/)||(n.EnableFor(e),e._tags[t]=!0))}static RemoveTagsFrom(e,t){if(!n.HasTags(e))return;let i=t.split(" ");for(let r in i)n._RemoveTagFrom(e,i[r])}static _RemoveTagFrom(e,t){delete e._tags[t]}static MatchesQuery(e,t){return t===void 0?!0:t===""?n.HasTags(e):AT.Eval(t,i=>n.HasTags(e)&&e._tags[i])}}});var i2,tt,Er=C(()=>{ln();sf();zt();Ge();nM();i2=function(n,e,t,i={}){let r=n();Zt&&Zt.HasTags(e)&&Zt.AddTagsTo(r,Zt.GetTags(e,!0));let s=mT(r),a={};for(let o in s){let l=s[o],c=e[o],f=l.type;if(c!=null&&(o!=="uniqueId"||tt.AllowLoadingUniqueId))switch(f){case 0:case 6:case 9:case 11:typeof c.slice=="function"?r[o]=c.slice():r[o]=c;break;case 1:i.cloneTexturesOnlyOnce&&a[c.uniqueId]?r[o]=a[c.uniqueId]:(r[o]=t||c.isRenderTarget?c:c.clone(),a[c.uniqueId]=r[o]);break;case 2:case 3:case 4:case 5:case 7:case 8:case 10:case 12:r[o]=t?c:c.clone();break}}return r},tt=class n{static AppendSerializedAnimations(e,t){if(e.animations){t.animations=[];for(let i=0;i{throw Xe("ImageProcessingConfiguration")};tt._FresnelParametersParser=n=>{throw Xe("FresnelParameters")};tt._ColorCurvesParser=n=>{throw Xe("ColorCurves")};tt._TextureParser=(n,e,t)=>{throw Xe("Texture")}});var pi,x_=C(()=>{kt();Ut();hi();Ge();Pi();E_();Bl();e2();Er();pi=class n extends TT{set hasAlpha(e){this._hasAlpha!==e&&(this._hasAlpha=e,this._scene&&this._scene.markAllMaterialsAsDirty(1,t=>t.hasTexture(this)))}get hasAlpha(){return this._hasAlpha}set getAlphaFromRGB(e){this._getAlphaFromRGB!==e&&(this._getAlphaFromRGB=e,this._scene&&this._scene.markAllMaterialsAsDirty(1,t=>t.hasTexture(this)))}get getAlphaFromRGB(){return this._getAlphaFromRGB}set coordinatesIndex(e){this._coordinatesIndex!==e&&(this._coordinatesIndex=e,this._scene&&this._scene.markAllMaterialsAsDirty(1,t=>t.hasTexture(this)))}get coordinatesIndex(){return this._coordinatesIndex}set coordinatesMode(e){this._coordinatesMode!==e&&(this._coordinatesMode=e,this._scene&&this._scene.markAllMaterialsAsDirty(1,t=>t.hasTexture(this)))}get coordinatesMode(){return this._coordinatesMode}get wrapU(){return this._wrapU}set wrapU(e){this._wrapU=e}get wrapV(){return this._wrapV}set wrapV(e){this._wrapV=e}get isCube(){return this._texture?this._texture.isCube:this._isCube}set isCube(e){this._texture?this._texture.isCube=e:this._isCube=e}get is3D(){return this._texture?this._texture.is3D:!1}set is3D(e){this._texture&&(this._texture.is3D=e)}get is2DArray(){return this._texture?this._texture.is2DArray:!1}set is2DArray(e){this._texture&&(this._texture.is2DArray=e)}get gammaSpace(){if(this._texture)this._texture._gammaSpace===null&&(this._texture._gammaSpace=this._gammaSpace);else return this._gammaSpace;return this._texture._gammaSpace&&!this._texture._useSRGBBuffer}set gammaSpace(e){var t;if(this._texture){if(this._texture._gammaSpace===e)return;this._texture._gammaSpace=e}else{if(this._gammaSpace===e)return;this._gammaSpace=e}(t=this.getScene())==null||t.markAllMaterialsAsDirty(1,i=>i.hasTexture(this))}get isRGBD(){return this._texture!=null&&this._texture._isRGBD}set isRGBD(e){var t;e!==this.isRGBD&&(this._texture&&(this._texture._isRGBD=e),(t=this.getScene())==null||t.markAllMaterialsAsDirty(1,i=>i.hasTexture(this)))}get noMipmap(){return!1}get lodGenerationOffset(){return this._texture?this._texture._lodGenerationOffset:0}set lodGenerationOffset(e){this._texture&&(this._texture._lodGenerationOffset=e)}get lodGenerationScale(){return this._texture?this._texture._lodGenerationScale:0}set lodGenerationScale(e){this._texture&&(this._texture._lodGenerationScale=e)}get linearSpecularLOD(){return this._texture?this._texture._linearSpecularLOD:!1}set linearSpecularLOD(e){this._texture&&(this._texture._linearSpecularLOD=e)}get irradianceTexture(){return this._texture?this._texture._irradianceTexture:null}set irradianceTexture(e){this._texture&&(this._texture._irradianceTexture=e)}get uid(){return this._uid||(this._uid=ef()),this._uid}toString(){return this.name}getClassName(){return"BaseTexture"}set onDispose(e){this._onDisposeObserver&&this.onDisposeObservable.remove(this._onDisposeObserver),this._onDisposeObserver=this.onDisposeObservable.add(e)}get isBlocking(){return!0}get loadingError(){return this._loadingError}get errorObject(){return this._errorObject}constructor(e,t=null){super(null),this.metadata=null,this.reservedDataStore=null,this._hasAlpha=!1,this._getAlphaFromRGB=!1,this.level=1,this._coordinatesIndex=0,this.optimizeUVAllocation=!0,this._coordinatesMode=0,this.wrapR=1,this.anisotropicFilteringLevel=n.DEFAULT_ANISOTROPIC_FILTERING_LEVEL,this._isCube=!1,this._gammaSpace=!0,this.invertZ=!1,this.lodLevelInAlpha=!1,this._dominantDirection=null,this.isRenderTarget=!1,this._prefiltered=!1,this._forceSerialize=!1,this.animations=[],this.onDisposeObservable=new te,this._onDisposeObserver=null,this._scene=null,this._uid=null,this._parentContainer=null,this._loadingError=!1,e?n._IsScene(e)?this._scene=e:this._engine=e:this._scene=Le.LastCreatedScene,this._scene&&(this.uniqueId=this._scene.getUniqueId(),this._scene.addTexture(this),this._engine=this._scene.getEngine()),this._texture=t,this._uid=null}getScene(){return this._scene}_getEngine(){return this._engine}getTextureMatrix(){return K.IdentityReadOnly}getReflectionTextureMatrix(){return K.IdentityReadOnly}getRefractionTextureMatrix(){return this.getReflectionTextureMatrix()}isReadyOrNotBlocking(){return!this.isBlocking||this.isReady()||this.loadingError}scale(e){}get canRescale(){return!1}_getFromCache(e,t,i,r,s,a){let o=this._getEngine();if(!o)return null;let l=o._getUseSRGBBuffer(!!s,t),c=o.getLoadedTexturesCache();for(let f=0;f=0&&this._scene.textures.splice(e,1),this._scene.onTextureRemovedObservable.notifyObservers(this),this._scene=null,this._parentContainer){let t=this._parentContainer.textures.indexOf(this);t>-1&&this._parentContainer.textures.splice(t,1),this._parentContainer=null}}this.onDisposeObservable.notifyObservers(this),this.onDisposeObservable.clear(),this.metadata=null,super.dispose()}serialize(e=!1){if(!this.name&&!e)return null;let t=tt.Serialize(this);return tt.AppendSerializedAnimations(this,t),t}static WhenAllReady(e,t){let i=e.length;if(i===0){t();return}for(let r=0;r{--i===0&&t()}):--i===0&&t()}}}static _IsScene(e){return e.getClassName()==="Scene"}};pi.DEFAULT_ANISOTROPIC_FILTERING_LEVEL=4;P([w()],pi.prototype,"uniqueId",void 0);P([w()],pi.prototype,"name",void 0);P([w()],pi.prototype,"displayName",void 0);P([w()],pi.prototype,"metadata",void 0);P([w("hasAlpha")],pi.prototype,"_hasAlpha",void 0);P([w("getAlphaFromRGB")],pi.prototype,"_getAlphaFromRGB",void 0);P([w()],pi.prototype,"level",void 0);P([w("coordinatesIndex")],pi.prototype,"_coordinatesIndex",void 0);P([w()],pi.prototype,"optimizeUVAllocation",void 0);P([w("coordinatesMode")],pi.prototype,"_coordinatesMode",void 0);P([w()],pi.prototype,"wrapU",null);P([w()],pi.prototype,"wrapV",null);P([w()],pi.prototype,"wrapR",void 0);P([w()],pi.prototype,"anisotropicFilteringLevel",void 0);P([w()],pi.prototype,"isCube",null);P([w()],pi.prototype,"is3D",null);P([w()],pi.prototype,"is2DArray",null);P([w()],pi.prototype,"gammaSpace",null);P([w()],pi.prototype,"invertZ",void 0);P([w()],pi.prototype,"lodLevelInAlpha",void 0);P([w()],pi.prototype,"lodGenerationOffset",null);P([w()],pi.prototype,"lodGenerationScale",null);P([w()],pi.prototype,"linearSpecularLOD",null);P([Bt()],pi.prototype,"irradianceTexture",null);P([w()],pi.prototype,"isRenderTarget",void 0)});var af,Ul,cM=C(()=>{Ge();xn();v_();An();zt();af=class{constructor(e,t,i,r){this.name=e,this.worldAxisForNormal=t,this.worldAxisForFileX=i,this.worldAxisForFileY=r}},Ul=class{static _NearestPow2Floor(e){return e<=1?1:1<0?this._NearestPow2Floor(i):0,s=!e.noMipmap&&((x=e._texture)==null?void 0:x.generateMipMaps)===!0,a=r>0&&r0&&r{Promise.all([f,c,h,d,u,m]).then(([S,E,R,I,y,M])=>{let D=l;g&&(S=this._DownsampleFace(S,t,r,4),E=this._DownsampleFace(E,t,r,4),R=this._DownsampleFace(R,t,r,4),I=this._DownsampleFace(I,t,r,4),y=this._DownsampleFace(y,t,r,4),M=this._DownsampleFace(M,t,r,4),D=r);let O={size:D,right:E,left:S,up:R,down:I,front:y,back:M,format:p,type:S instanceof Float32Array?1:0,gammaSpace:_};A(this.ConvertCubeMapToSphericalPolynomial(O))})})}static _AreaElement(e,t){return Math.atan2(e*t,Math.sqrt(e*e+t*t+1))}static _DownsampleFace(e,t,i,r){let s=e instanceof Float32Array?e:Float32Array.from(e),a=i*i*r,o=new Float32Array(a),l=t/i,c=1/(l*l);for(let d=0;d0?this._NearestPow2Floor(t):0;if(i>0&&e.size>i){let m=e.format===5?4:3,_=["right","left","up","down","front","back"],p={};for(let g of _)p[g]=this._DownsampleFace(e[g],e.size,i,m);e={...e,...p,size:i}}let r=new g_,s=0,a=2/e.size,o=a,l=.5*a,c=l-1;for(let m=0;m<6;m++){let _=this._FileFaces[m],p=e[_.name],g=c,v=e.format===5?4:3;for(let x=0;xD){let N=D/V;I*=N,y*=N,M*=N}}else I=wt(I,0,D),y=wt(y,0,D),M=wt(M,0,D);let O=new Te(I,y,M);r.addLight(E,O,R),s+=R,A+=a}g+=o}}let u=4*Math.PI*6/6/s;return r.scaleInPlace(u),r.convertIncidentRadianceToIrradiance(),r.convertIrradianceToLambertianRadiance(),Ko.FromHarmonics(r)}};Ul._FileFaces=[new af("right",new b(1,0,0),new b(0,0,-1),new b(0,-1,0)),new af("left",new b(-1,0,0),new b(0,0,1),new b(0,-1,0)),new af("up",new b(0,1,0),new b(1,0,0),new b(0,0,1)),new af("down",new b(0,-1,0),new b(1,0,0),new b(0,0,-1)),new af("front",new b(0,0,1),new b(1,0,0),new b(0,-1,0)),new af("back",new b(0,0,-1),new b(-1,0,0),new b(0,-1,0))];Ul.MAX_HDRI_VALUE=4096;Ul.PRESERVE_CLAMPED_COLORS=!1});var Vl,fM=C(()=>{Pt();Vi();Vl=class{static Instantiate(e){if(this.RegisteredExternalClasses&&this.RegisteredExternalClasses[e])return this.RegisteredExternalClasses[e];let t=mn(e);if(t)return t;J.Warn(e+" not found, you may have missed an import.");let i=e.split("."),r=window||this;for(let s=0,a=i.length;s=0;){let h=n[c];h<0?h=0:h>1&&(h=1),f[c]=h*255}n=f}let s=document.createElement("canvas");s.width=i,s.height=r;let a=s.getContext("2d");if(!a)return null;let o=a.createImageData(i,r);if(o.data.set(n),a.putImageData(o,0,0),t){let c=document.createElement("canvas");c.width=i,c.height=r;let f=c.getContext("2d");return f?(f.translate(0,r),f.scale(1,-1),f.drawImage(s,0,0),c.toDataURL("image/png")):null}return s.toDataURL("image/png")}function n2(n,e=0,t=0){let i=n.getInternalTexture();if(!i)return null;let r=n._readPixelsSync(e,t);return r?r2(r,n.getSize(),i.invertY):null}async function s2(n,e=0,t=0){let i=n.getInternalTexture();if(!i)return null;let r=await n.readPixels(e,t);return r?r2(r,n.getSize(),i.invertY):null}var a2=C(()=>{});var It,Qr=C(()=>{It=!1});var ge,Gr=C(()=>{kt();Ut();hi();Ge();x_();Vi();ln();Wo();fM();wu();T_();a2();Qr();Er();ge=class n extends pi{static _CreateVideoTexture(e,t,i,r=!1,s=!1,a=n.TRILINEAR_SAMPLINGMODE,o={},l,c=5){throw Xe("VideoTexture")}get noMipmap(){return this._noMipmap}get mimeType(){return this._mimeType}set isBlocking(e){this._isBlocking=e}get isBlocking(){return this._isBlocking}get invertY(){return this._invertY}constructor(e,t,i,r,s=n.TRILINEAR_SAMPLINGMODE,a=null,o=null,l=null,c=!1,f,h,d,u,m){var R,I,y,M,D,O,V,N,F,U,W;super(t),this.url=null,this.uOffset=0,this.vOffset=0,this.uScale=1,this.vScale=1,this.uAng=0,this.vAng=0,this.wAng=0,this.uRotationCenter=.5,this.vRotationCenter=.5,this.wRotationCenter=.5,this.homogeneousRotationInUVTransform=!1,this.inspectableCustomProperties=null,this._noMipmap=!1,this._invertY=!1,this._rowGenerationMatrix=null,this._cachedTextureMatrix=null,this._projectionModeMatrix=null,this._t0=null,this._t1=null,this._t2=null,this._cachedUOffset=-1,this._cachedVOffset=-1,this._cachedUScale=0,this._cachedVScale=0,this._cachedUAng=-1,this._cachedVAng=-1,this._cachedWAng=-1,this._cachedReflectionProjectionMatrixId=-1,this._cachedURotationCenter=-1,this._cachedVRotationCenter=-1,this._cachedWRotationCenter=-1,this._cachedHomogeneousRotationInUVTransform=!1,this._cachedIdentity3x2=!0,this._cachedReflectionTextureMatrix=null,this._cachedReflectionUOffset=-1,this._cachedReflectionVOffset=-1,this._cachedReflectionUScale=0,this._cachedReflectionVScale=0,this._cachedReflectionCoordinatesMode=-1,this._buffer=null,this._deleteBuffer=!1,this._format=null,this._delayedOnLoad=null,this._delayedOnError=null,this.onLoadObservable=new te,this._isBlocking=!0,this.name=e||"",this.url=e;let _,p=!1,g=null,v=!0;typeof i=="object"&&i!==null?(_=(R=i.noMipmap)!=null?R:!1,r=(I=i.invertY)!=null?I:!It,s=(y=i.samplingMode)!=null?y:n.TRILINEAR_SAMPLINGMODE,a=(M=i.onLoad)!=null?M:null,o=(D=i.onError)!=null?D:null,l=(O=i.buffer)!=null?O:null,c=(V=i.deleteBuffer)!=null?V:!1,f=i.format,h=i.mimeType,d=i.loaderOptions,u=i.creationFlags,p=(N=i.useSRGBBuffer)!=null?N:!1,g=(F=i.internalTexture)!=null?F:null,v=(U=i.gammaSpace)!=null?U:v,m=(W=i.forcedExtension)!=null?W:m):_=!!i,this._gammaSpace=v,this._noMipmap=_,this._invertY=r===void 0?!It:r,this._initialSamplingMode=s,this._buffer=l,this._deleteBuffer=c,this._mimeType=h,this._loaderOptions=d,this._creationFlags=u,this._useSRGBBuffer=p,this._forcedExtension=m,f!==void 0&&(this._format=f);let x=this.getScene(),A=this._getEngine();if(!A)return;A.onBeforeTextureInitObservable.notifyObservers(this);let S=()=>{this._texture&&(this._texture._invertVScale&&(this.vScale*=-1,this.vOffset+=1),this._texture._cachedWrapU!==null&&(this.wrapU=this._texture._cachedWrapU,this._texture._cachedWrapU=null),this._texture._cachedWrapV!==null&&(this.wrapV=this._texture._cachedWrapV,this._texture._cachedWrapV=null),this._texture._cachedWrapR!==null&&(this.wrapR=this._texture._cachedWrapR,this._texture._cachedWrapR=null)),this.onLoadObservable.hasObservers()&&this.onLoadObservable.notifyObservers(this),a&&a(),!this.isBlocking&&x&&x.resetCachedMaterial()},E=($,q)=>{this._loadingError=!0,this._errorObject={message:$,exception:q},o&&o($,q),n.OnTextureLoadErrorObservable.notifyObservers(this)};if(!this.url&&!g){this._delayedOnLoad=S,this._delayedOnError=E;return}if(this._texture=g!=null?g:this._getFromCache(this.url,_,s,this._invertY,p,this.isCube),this._texture)if(this._texture.isReady)ja.SetImmediate(()=>S());else{let $=this._texture.onLoadedObservable.add(S);this._texture.onErrorObservable.add(q=>{var Z;E(q.message,q.exception),(Z=this._texture)==null||Z.onLoadedObservable.remove($)})}else if(!x||!x.useDelayedTextureLoading){try{this._texture=A.createTexture(this.url,_,this._invertY,x,s,S,E,this._buffer,void 0,this._format,this._forcedExtension,h,d,u,p)}catch($){throw E("error loading",$),$}c&&(this._buffer=null)}else this.delayLoadState=4,this._delayedOnLoad=S,this._delayedOnError=E}updateURL(e,t=null,i,r){this.url&&(this.releaseInternalTexture(),this.getScene().markAllMaterialsAsDirty(1,o=>o.hasTexture(this))),(!this.name||this.name.startsWith("data:"))&&(this.name=e),this.url=e,this._buffer=t,this._forcedExtension=r,this.delayLoadState=4;let s=this._delayedOnLoad,a=()=>{s?s():this.onLoadObservable.hasObservers()&&this.onLoadObservable.notifyObservers(this),i&&i()};this._delayedOnLoad=a,this.delayLoad()}delayLoad(){if(this.delayLoadState!==4)return;let e=this.getScene();if(!e)return;let t=this.url;!t&&(this.name.indexOf("://")>0||this.name.startsWith("data:"))&&(t=this.name),this.delayLoadState=1,this._texture=this._getFromCache(t,this._noMipmap,this.samplingMode,this._invertY,this._useSRGBBuffer,this.isCube),this._texture?this._delayedOnLoad&&(this._texture.isReady?ja.SetImmediate(this._delayedOnLoad):this._texture.onLoadedObservable.add(this._delayedOnLoad)):(this._texture=e.getEngine().createTexture(t,this._noMipmap,this._invertY,e,this.samplingMode,this._delayedOnLoad,this._delayedOnError,this._buffer,null,this._format,this._forcedExtension,this._mimeType,this._loaderOptions,this._creationFlags,this._useSRGBBuffer),this._deleteBuffer&&(this._buffer=null)),this._delayedOnLoad=null,this._delayedOnError=null}_prepareRowForTextureGeneration(e,t,i,r){e*=this._cachedUScale,t*=this._cachedVScale,e-=this.uRotationCenter*this._cachedUScale,t-=this.vRotationCenter*this._cachedVScale,i-=this.wRotationCenter,b.TransformCoordinatesFromFloatsToRef(e,t,i,this._rowGenerationMatrix,r),r.x+=this.uRotationCenter*this._cachedUScale+this._cachedUOffset,r.y+=this.vRotationCenter*this._cachedVScale+this._cachedVOffset,r.z+=this.wRotationCenter}getTextureMatrix(e=1){if(this.uOffset===this._cachedUOffset&&this.vOffset===this._cachedVOffset&&this.uScale*e===this._cachedUScale&&this.vScale===this._cachedVScale&&this.uAng===this._cachedUAng&&this.vAng===this._cachedVAng&&this.wAng===this._cachedWAng&&this.uRotationCenter===this._cachedURotationCenter&&this.vRotationCenter===this._cachedVRotationCenter&&this.wRotationCenter===this._cachedWRotationCenter&&this.homogeneousRotationInUVTransform===this._cachedHomogeneousRotationInUVTransform)return this._cachedTextureMatrix;this._cachedUOffset=this.uOffset,this._cachedVOffset=this.vOffset,this._cachedUScale=this.uScale*e,this._cachedVScale=this.vScale,this._cachedUAng=this.uAng,this._cachedVAng=this.vAng,this._cachedWAng=this.wAng,this._cachedURotationCenter=this.uRotationCenter,this._cachedVRotationCenter=this.vRotationCenter,this._cachedWRotationCenter=this.wRotationCenter,this._cachedHomogeneousRotationInUVTransform=this.homogeneousRotationInUVTransform,(!this._cachedTextureMatrix||!this._rowGenerationMatrix)&&(this._cachedTextureMatrix=K.Zero(),this._rowGenerationMatrix=new K,this._t0=b.Zero(),this._t1=b.Zero(),this._t2=b.Zero()),K.RotationYawPitchRollToRef(this.vAng,this.uAng,this.wAng,this._rowGenerationMatrix),this.homogeneousRotationInUVTransform?(K.TranslationToRef(-this._cachedURotationCenter,-this._cachedVRotationCenter,-this._cachedWRotationCenter,Q.Matrix[0]),K.TranslationToRef(this._cachedURotationCenter,this._cachedVRotationCenter,this._cachedWRotationCenter,Q.Matrix[1]),K.ScalingToRef(this._cachedUScale,this._cachedVScale,0,Q.Matrix[2]),K.TranslationToRef(this._cachedUOffset,this._cachedVOffset,0,Q.Matrix[3]),Q.Matrix[0].multiplyToRef(this._rowGenerationMatrix,this._cachedTextureMatrix),this._cachedTextureMatrix.multiplyToRef(Q.Matrix[1],this._cachedTextureMatrix),this._cachedTextureMatrix.multiplyToRef(Q.Matrix[2],this._cachedTextureMatrix),this._cachedTextureMatrix.multiplyToRef(Q.Matrix[3],this._cachedTextureMatrix),this._cachedTextureMatrix.setRowFromFloats(2,this._cachedTextureMatrix.m[12],this._cachedTextureMatrix.m[13],this._cachedTextureMatrix.m[14],1)):(this._prepareRowForTextureGeneration(0,0,0,this._t0),this._prepareRowForTextureGeneration(1,0,0,this._t1),this._prepareRowForTextureGeneration(0,1,0,this._t2),this._t1.subtractInPlace(this._t0),this._t2.subtractInPlace(this._t0),K.FromValuesToRef(this._t1.x,this._t1.y,this._t1.z,0,this._t2.x,this._t2.y,this._t2.z,0,this._t0.x,this._t0.y,this._t0.z,0,0,0,0,1,this._cachedTextureMatrix));let t=this.getScene();if(!t)return this._cachedTextureMatrix;let i=this._cachedIdentity3x2;return this._cachedIdentity3x2=this._cachedTextureMatrix.isIdentityAs3x2(),this.optimizeUVAllocation&&i!==this._cachedIdentity3x2&&t.markAllMaterialsAsDirty(1,r=>r.hasTexture(this)),this._cachedTextureMatrix}getReflectionTextureMatrix(){let e=this.getScene();if(!e)return this._cachedReflectionTextureMatrix;if(this.uOffset===this._cachedReflectionUOffset&&this.vOffset===this._cachedReflectionVOffset&&this.uScale===this._cachedReflectionUScale&&this.vScale===this._cachedReflectionVScale&&this.coordinatesMode===this._cachedReflectionCoordinatesMode)if(this.coordinatesMode===n.PROJECTION_MODE){if(this._cachedReflectionProjectionMatrixId===e.getProjectionMatrix().updateFlag)return this._cachedReflectionTextureMatrix}else return this._cachedReflectionTextureMatrix;this._cachedReflectionTextureMatrix||(this._cachedReflectionTextureMatrix=K.Zero()),this._projectionModeMatrix||(this._projectionModeMatrix=K.Zero());let t=this._cachedReflectionCoordinatesMode!==this.coordinatesMode;switch(this._cachedReflectionUOffset=this.uOffset,this._cachedReflectionVOffset=this.vOffset,this._cachedReflectionUScale=this.uScale,this._cachedReflectionVScale=this.vScale,this._cachedReflectionCoordinatesMode=this.coordinatesMode,this.coordinatesMode){case n.PLANAR_MODE:{K.IdentityToRef(this._cachedReflectionTextureMatrix),this._cachedReflectionTextureMatrix[0]=this.uScale,this._cachedReflectionTextureMatrix[5]=this.vScale,this._cachedReflectionTextureMatrix[12]=this.uOffset,this._cachedReflectionTextureMatrix[13]=this.vOffset;break}case n.PROJECTION_MODE:{K.FromValuesToRef(.5,0,0,0,0,-.5,0,0,0,0,0,0,.5,.5,1,1,this._projectionModeMatrix);let i=e.getProjectionMatrix();this._cachedReflectionProjectionMatrixId=i.updateFlag,i.multiplyToRef(this._projectionModeMatrix,this._cachedReflectionTextureMatrix);break}default:K.IdentityToRef(this._cachedReflectionTextureMatrix);break}return t&&e.markAllMaterialsAsDirty(1,i=>i.hasTexture(this)),this._cachedReflectionTextureMatrix}clone(){let e={noMipmap:this._noMipmap,invertY:this._invertY,samplingMode:this.samplingMode,onLoad:void 0,onError:void 0,buffer:this._texture?this._texture._buffer:void 0,deleteBuffer:this._deleteBuffer,format:this.textureFormat,mimeType:this.mimeType,loaderOptions:this._loaderOptions,creationFlags:this._creationFlags,useSRGBBuffer:this._useSRGBBuffer};return tt.Clone(()=>new n(this._texture?this._texture.url:null,this.getScene(),e),this)}serialize(){var i,r;let e=this.name;n.SerializeBuffers||this.name.startsWith("data:")&&(this.name=""),this.name.startsWith("data:")&&this.url===this.name&&(this.url="");let t=super.serialize(n._SerializeInternalTextureUniqueId);if(!t)return null;if(n.SerializeBuffers||n.ForceSerializeBuffers)if(typeof this._buffer=="string"&&this._buffer.startsWith("data:"))t.base64String=this._buffer,t.name=t.name.replace("data:","");else if(this.url&&this.url.startsWith("data:")&&this._buffer instanceof Uint8Array){let s=this.mimeType||"image/png";t.base64String=`data:${s};base64,${Wu(this._buffer)}`}else(n.ForceSerializeBuffers||this.url&&this.url.startsWith("blob:")||this._forceSerialize)&&(t.base64String=!this._engine||this._engine._features.supportSyncTextureRead?n2(this):s2(this));return t.invertY=this._invertY,t.samplingMode=this.samplingMode,t._creationFlags=this._creationFlags,t._useSRGBBuffer=this._useSRGBBuffer,n._SerializeInternalTextureUniqueId&&(t.internalTextureUniqueId=(i=this._texture)==null?void 0:i.uniqueId),t.internalTextureLabel=(r=this._texture)==null?void 0:r.label,t.noMipmap=this._noMipmap,this.name=e,t}getClassName(){return"Texture"}dispose(){super.dispose(),this.onLoadObservable.clear(),this._delayedOnLoad=null,this._delayedOnError=null,this._buffer=null}static Parse(e,t,i){if(e.customType){let c=Vl.Instantiate(e.customType).Parse(e,t,i);return e.samplingMode&&c.updateSamplingMode&&c._samplingMode&&c._samplingMode!==e.samplingMode&&c.updateSamplingMode(e.samplingMode),c}if(e.isCube&&!e.isRenderTarget)return n._CubeTextureParser(e,t,i);let r=e.internalTextureUniqueId!==void 0;if(!e.name&&!e.isRenderTarget&&!r)return null;let s;if(r){let l=t.getEngine().getLoadedTexturesCache();for(let c of l)if(c.uniqueId===e.internalTextureUniqueId){s=c;break}}let a=l=>{if(l&&l._texture&&(l._texture._cachedWrapU=null,l._texture._cachedWrapV=null,l._texture._cachedWrapR=null),e.samplingMode){let c=e.samplingMode;l&&l.samplingMode!==c&&l.updateSamplingMode(c)}if(l&&e.animations)for(let c=0;c{var c,f,h,d,u;let l=!0;if(e.noMipmap&&(l=!1),e.mirrorPlane){let m=n._CreateMirror(e.name,e.renderTargetSize,t,l);return m._waitingRenderList=e.renderList,m.mirrorPlane=Qa.FromArray(e.mirrorPlane),a(m),m}else if(e.isRenderTarget&&!e.base64String){let m=null;if(e.isCube){if(t.reflectionProbes)for(let _=0;_{a(m)}},p=e.base64String,g=p.startsWith("data:")?p.substring(5):p;m=n.CreateFromBase64String("",g,t,_),m.name=e.name}else{let _;e.name&&(e.name.indexOf("://")>0||e.name.startsWith("data:"))?_=e.name:_=i+e.name,e.url&&(e.url.startsWith("data:")||n.UseSerializedUrlIfAny)&&(_=e.url);let p={noMipmap:!l,invertY:e.invertY,samplingMode:e.samplingMode,useSRGBBuffer:(d=e._useSRGBBuffer)!=null?d:!1,creationFlags:(u=e._creationFlags)!=null?u:0,onLoad:()=>{a(m)},internalTexture:s};m=new n(_,t,p)}return m}},e,t)}static CreateFromBase64String(e,t,i,r,s,a=n.TRILINEAR_SAMPLINGMODE,o=null,l=null,c=5,f,h){return new n("data:"+t,i,r,s,a,o,l,e,!1,c,void 0,void 0,f,h)}static LoadFromDataString(e,t,i,r=!1,s,a=!0,o=n.TRILINEAR_SAMPLINGMODE,l=null,c=null,f=5,h,d){return e.substring(0,5)!=="data:"&&(e="data:"+e),new n(e,i,s,a,o,l,c,t,r,f,void 0,void 0,h,d)}};ge.SerializeBuffers=!0;ge.ForceSerializeBuffers=!1;ge.OnTextureLoadErrorObservable=new te;ge._SerializeInternalTextureUniqueId=!1;ge._CubeTextureParser=(n,e,t)=>{throw Xe("CubeTexture")};ge._CreateMirror=(n,e,t,i)=>{throw Xe("MirrorTexture")};ge._CreateRenderTargetTexture=(n,e,t,i,r)=>{throw Xe("RenderTargetTexture")};ge.NEAREST_SAMPLINGMODE=1;ge.NEAREST_NEAREST_MIPLINEAR=8;ge.BILINEAR_SAMPLINGMODE=2;ge.LINEAR_LINEAR_MIPNEAREST=11;ge.TRILINEAR_SAMPLINGMODE=3;ge.LINEAR_LINEAR_MIPLINEAR=3;ge.NEAREST_NEAREST_MIPNEAREST=4;ge.NEAREST_LINEAR_MIPNEAREST=5;ge.NEAREST_LINEAR_MIPLINEAR=6;ge.NEAREST_LINEAR=7;ge.NEAREST_NEAREST=1;ge.LINEAR_NEAREST_MIPNEAREST=9;ge.LINEAR_NEAREST_MIPLINEAR=10;ge.LINEAR_LINEAR=2;ge.LINEAR_NEAREST=12;ge.EXPLICIT_MODE=0;ge.SPHERICAL_MODE=1;ge.PLANAR_MODE=2;ge.CUBIC_MODE=3;ge.PROJECTION_MODE=4;ge.SKYBOX_MODE=5;ge.INVCUBIC_MODE=6;ge.EQUIRECTANGULAR_MODE=7;ge.FIXED_EQUIRECTANGULAR_MODE=8;ge.FIXED_EQUIRECTANGULAR_MIRRORED_MODE=9;ge.CLAMP_ADDRESSMODE=0;ge.WRAP_ADDRESSMODE=1;ge.MIRROR_ADDRESSMODE=2;ge.UseSerializedUrlIfAny=!1;P([w()],ge.prototype,"url",void 0);P([w()],ge.prototype,"uOffset",void 0);P([w()],ge.prototype,"vOffset",void 0);P([w()],ge.prototype,"uScale",void 0);P([w()],ge.prototype,"vScale",void 0);P([w()],ge.prototype,"uAng",void 0);P([w()],ge.prototype,"vAng",void 0);P([w()],ge.prototype,"wAng",void 0);P([w()],ge.prototype,"uRotationCenter",void 0);P([w()],ge.prototype,"vRotationCenter",void 0);P([w()],ge.prototype,"wRotationCenter",void 0);P([w()],ge.prototype,"homogeneousRotationInUVTransform",void 0);P([w()],ge.prototype,"isBlocking",null);Ft("BABYLON.Texture",ge);tt._TextureParser=ge.Parse});var Ja,L,Ui=C(()=>{KI();Pt();Hu();Ja=class{get isDisposed(){return this._isDisposed}constructor(e,t,i,r=0,s=!1,a=!1,o=!1,l,c){this._isAlreadyOwned=!1,this._isDisposed=!1,e&&e.getScene?this._engine=e.getScene().getEngine():this._engine=e,this._updatable=i,this._instanced=a,this._divisor=l||1,this._label=c,t instanceof xh?(this._data=null,this._buffer=t):(this._data=t,this._buffer=null),this.byteStride=o?r:r*Float32Array.BYTES_PER_ELEMENT,s||this.create()}createVertexBuffer(e,t,i,r,s,a=!1,o){let l=a?t:t*Float32Array.BYTES_PER_ELEMENT,c=r?a?r:r*Float32Array.BYTES_PER_ELEMENT:this.byteStride;return new L(this._engine,this,e,this._updatable,!0,c,s===void 0?this._instanced:s,l,i,void 0,void 0,!0,this._divisor||o)}isUpdatable(){return this._updatable}getData(){return this._data}getBuffer(){return this._buffer}getStrideSize(){return this.byteStride/Float32Array.BYTES_PER_ELEMENT}create(e=null){!e&&this._buffer||(e=e||this._data,e&&(this._buffer?this._updatable&&(this._engine.updateDynamicVertexBuffer(this._buffer,e),this._data=e):this._updatable?(this._buffer=this._engine.createDynamicVertexBuffer(e,this._label),this._data=e):this._buffer=this._engine.createVertexBuffer(e,void 0,this._label)))}_rebuild(){if(this._data)this._buffer=null,this.create(this._data);else{if(!this._buffer)return;if(this._buffer.capacity>0){this._updatable?this._buffer=this._engine.createDynamicVertexBuffer(this._buffer.capacity,this._label):this._buffer=this._engine.createVertexBuffer(this._buffer.capacity,void 0,this._label);return}J.Warn(`Missing data for buffer "${this._label}" ${this._buffer?"(uniqueId: "+this._buffer.uniqueId+")":""}. Buffer reconstruction failed.`),this._buffer=null}}update(e){this.create(e)}updateDirectly(e,t,i,r=!1){this._buffer&&this._updatable&&(this._engine.updateDynamicVertexBuffer(this._buffer,e,r?t:t*Float32Array.BYTES_PER_ELEMENT,i?i*this.byteStride:void 0),t===0&&i===void 0?this._data=e:this._data=null)}_increaseReferences(){if(this._buffer){if(!this._isAlreadyOwned){this._isAlreadyOwned=!0;return}this._buffer.references++}}dispose(){this._buffer&&this._engine._releaseBuffer(this._buffer)&&(this._isDisposed=!0,this._data=null,this._buffer=null)}},L=class n{get isDisposed(){return this._isDisposed}get instanceDivisor(){return this._instanceDivisor}set instanceDivisor(e){let t=e!=0;this._instanceDivisor=e,t!==this._instanced&&(this._instanced=t,this._computeHashCode())}get _maxVerticesCount(){let e=this.getData();return e?Array.isArray(e)?e.length/(this.byteStride/4)-this.byteOffset/4:(e.byteLength-this.byteOffset)/this.byteStride:0}constructor(e,t,i,r,s,a,o,l,c,f,h=!1,d=!1,u=1,m=!1){var g,v,x,A,S;this._isDisposed=!1;let _;if(this.engine=e,typeof r=="object"&&r!==null?(_=(g=r.updatable)!=null?g:!1,s=r.postponeInternalCreation,a=r.stride,o=r.instanced,l=r.offset,c=r.size,f=r.type,h=(v=r.normalized)!=null?v:!1,d=(x=r.useBytes)!=null?x:!1,u=(A=r.divisor)!=null?A:1,m=(S=r.takeBufferOwnership)!=null?S:!1,this._label=r.label):_=!!r,t instanceof Ja?(this._buffer=t,this._ownsBuffer=m):(this._buffer=new Ja(e,t,_,a,s,o,d,u,this._label),this._ownsBuffer=!0),this.uniqueId=n._Counter++,this._kind=i,f===void 0){let E=this.getData();this.type=E?n.GetDataType(E):n.FLOAT}else this.type=f;let p=jo(this.type);d?(this._size=c||(a?a/p:n.DeduceStride(i)),this.byteStride=a||this._buffer.byteStride||this._size*p,this.byteOffset=l||0):(this._size=c||a||n.DeduceStride(i),this.byteStride=a?a*p:this._buffer.byteStride||this._size*p,this.byteOffset=(l||0)*p),this.normalized=h,this._instanced=o!==void 0?o:!1,this._instanceDivisor=o?u:0,this._alignBuffer(),this._computeHashCode()}_computeHashCode(){this.hashCode=(this.type-5120<<0)+((this.normalized?1:0)<<3)+(this._size<<4)+((this._instanced?1:0)<<6)+(this.byteStride<<12)}_rebuild(){var e;(e=this._buffer)==null||e._rebuild()}getKind(){return this._kind}isUpdatable(){return this._buffer.isUpdatable()}getData(){return this._buffer.getData()}getFloatData(e,t){let i=this.getData();return i?oM(i,this._size,this.type,this.byteOffset,this.byteStride,this.normalized,e,t):null}getBuffer(){return this._buffer.getBuffer()}getWrapperBuffer(){return this._buffer}getStrideSize(){return this.byteStride/jo(this.type)}getOffset(){return this.byteOffset/jo(this.type)}getSize(e=!1){return e?this._size*jo(this.type):this._size}getIsInstanced(){return this._instanced}getInstanceDivisor(){return this._instanceDivisor}create(e){this._buffer.create(e),this._alignBuffer()}update(e){this._buffer.update(e),this._alignBuffer()}updateDirectly(e,t,i=!1){this._buffer.updateDirectly(e,t,void 0,i),this._alignBuffer()}dispose(){this._ownsBuffer&&this._buffer.dispose(),this._isDisposed=!0}forEach(e,t){Ph(this._buffer.getData(),this.byteOffset,this.byteStride,this._size,this.type,e,this.normalized,(i,r)=>{for(let s=0;s{for(let h=0;h{Ui();hi();Gl=class{constructor(e){this._vertexBuffers={},this._activePostProcesses=[],this.onBeforeRenderObservable=new te,this._scene=e}_prepareBuffers(){if(this._vertexBuffers[L.PositionKind])return;let e=[];e.push(1,1),e.push(-1,1),e.push(-1,-1),e.push(1,-1),this._vertexBuffers[L.PositionKind]=new L(this._scene.getEngine(),e,L.PositionKind,!1,!1,2),this._buildIndexBuffer()}_buildIndexBuffer(){let e=[];e.push(0),e.push(1),e.push(2),e.push(0),e.push(2),e.push(3),this._indexBuffer=this._scene.getEngine().createIndexBuffer(e)}_getActivePostProcesses(e){let t=this._activePostProcesses;t.length=0;for(let i=0;i{Pt();o2=(n,e,t)=>!n||n.getClassName&&n.getClassName()==="Mesh"?null:n.getClassName&&(n.getClassName()==="SubMesh"||n.getClassName()==="PhysicsBody")?n.clone(e):n.clone?n.clone():Array.isArray(n)?n.slice():t&&typeof n=="object"?{...n}:null;Zo=class{static DeepCopy(e,t,i,r,s=!1){let a=Die(e);for(let o of a){if(o[0]==="_"&&(!r||r.indexOf(o)===-1)||o.endsWith("Observable")||i&&i.indexOf(o)!==-1)continue;let l=e[o],c=typeof l;if(c!=="function")try{if(c==="object")if(l instanceof Uint8Array)t[o]=Uint8Array.from(l);else if(l instanceof Array){if(t[o]=[],l.length>0)if(typeof l[0]=="object")for(let f=0;f{hi();ma();Pt();R_();Pl();ln();yh();Pi();Bl();Wo();fM();E_();zo();de=class{static get BaseUrl(){return Bi.BaseUrl}static set BaseUrl(e){Bi.BaseUrl=e}static get CleanUrl(){return Bi.CleanUrl}static set CleanUrl(e){Bi.CleanUrl=e}static IsAbsoluteUrl(e){return e.indexOf("//")===0?!0:e.indexOf("://")===-1||e.indexOf(".")===-1||e.indexOf("/")===-1||e.indexOf(":")>e.indexOf("/")?!1:e.indexOf("://"){qo(e,s=>{i(s)},void 0,void 0,t,(s,a)=>{r(a)})})}static GetAssetUrl(e){if(!e)return"";if(vt.AssetBaseUrl&&e.startsWith(vt._DefaultAssetsUrl)){let t=vt.AssetBaseUrl.endsWith("/")?vt.AssetBaseUrl.slice(0,-1):vt.AssetBaseUrl;return e.replace(vt._DefaultAssetsUrl,t)}return e}static GetBabylonScriptURL(e,t){if(!e)return"";if(e.startsWith(vt._DefaultCdnUrl)){if(vt.ScriptBaseUrl){let i=vt.ScriptBaseUrl.endsWith("/")?vt.ScriptBaseUrl.slice(0,-1):vt.ScriptBaseUrl;e=e.replace(vt._DefaultCdnUrl,i)}else if(vt._CdnVersion){let i=`${vt._DefaultCdnUrl}/v${vt._CdnVersion}`;e.startsWith(i)||(e=e.replace(vt._DefaultCdnUrl,i))}}return e=vt.ScriptPreprocessUrl(e),t&&!vt.IsAbsoluteUrl(e)&&(e=vt.GetAbsoluteUrl(e)),e}static LoadBabylonScript(e,t,i,r){e=vt.GetBabylonScriptURL(e),vt.LoadScript(e,t,i)}static async LoadBabylonScriptAsync(e){return e=vt.GetBabylonScriptURL(e),await vt.LoadScriptAsync(e)}static _LoadScriptNative(e,t,i){let r=new Error(`[AI3D] Babylon script loading is disabled in this plugin build. Refused script URL: ${e}`);i==null||i(r.message,r)}static _LoadScriptWeb(e,t,i,r,s=!1){let a=new Error(`[AI3D] Babylon script loading is disabled in this plugin build. Refused script URL: ${e}`);i==null||i(a.message,a)}static async LoadScriptAsync(e,t){return await new Promise((i,r)=>{this.LoadScript(e,()=>{i()},(s,a)=>{r(a||new Error(s))},t)})}static ReadFileAsDataURL(e,t,i){let r=new FileReader,s={onCompleteObservable:new te,abort:()=>r.abort()};return r.onloadend=()=>{s.onCompleteObservable.notifyObservers(s)},r.onload=a=>{t(a.target.result)},r.onprogress=i,r.readAsDataURL(e),s}static ReadFile(e,t,i,r,s){return Dh(e,t,i,r,s)}static FileAsURL(e){let t=new Blob([e]);return window.URL.createObjectURL(t)}static Format(e,t=2){return e.toFixed(t)}static DeepCopy(e,t,i,r){Zo.DeepCopy(e,t,i,r)}static IsEmpty(e){for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t))return!1;return!0}static RegisterTopRootEvents(e,t){for(let i=0;i{let l=atob(this.toDataURL(a,o).split(",")[1]),c=l.length,f=new Uint8Array(c);for(let h=0;ht(s)):e.toBlob(function(s){t(s)},i,r)}static DownloadBlob(e,t){if("download"in document.createElement("a")){if(!t){let i=new Date;t="screenshot_"+((i.getFullYear()+"-"+(i.getMonth()+1)).slice(2)+"-"+i.getDate()+"_"+i.getHours()+"-"+("0"+i.getMinutes()).slice(-2))+".png"}vt.Download(e,t)}else if(e&&typeof URL!="undefined"){let i=URL.createObjectURL(e),r=window.open("");if(!r)return;let s=r.document.createElement("img");s.onload=function(){URL.revokeObjectURL(i)},s.src=i,r.document.body.appendChild(s)}}static EncodeScreenshotCanvasData(e,t,i="image/png",r,s){if(typeof r=="string"||!t)this.ToBlob(e,function(a){a&&vt.DownloadBlob(a,r),t&&t("")},i,s);else if(t){if(vt._IsOffScreenCanvas(e)){e.convertToBlob({type:i,quality:s}).then(o=>{let l=new FileReader;l.readAsDataURL(o),l.onloadend=()=>{let c=l.result;t(c)}});return}let a=e.toDataURL(i,s);t(a)}}static Download(e,t){if(typeof URL=="undefined")return;let i=window.URL.createObjectURL(e),r=document.createElement("a");document.body.appendChild(r),r.style.display="none",r.href=i,r.download=t,r.addEventListener("click",()=>{r.parentElement&&r.parentElement.removeChild(r)}),r.click(),window.URL.revokeObjectURL(i)}static BackCompatCameraNoPreventDefault(e){return typeof e[0]=="boolean"?e[0]:typeof e[1]=="boolean"?e[1]:!1}static CreateScreenshot(e,t,i,r,s="image/png",a=!1,o){throw Xe("ScreenshotTools")}static async CreateScreenshotAsync(e,t,i,r="image/png",s){throw Xe("ScreenshotTools")}static CreateScreenshotUsingRenderTarget(e,t,i,r,s="image/png",a=1,o=!1,l,c=!1,f=!1,h=!0,d,u){throw Xe("ScreenshotTools")}static async CreateScreenshotUsingRenderTargetAsync(e,t,i,r="image/png",s=1,a=!1,o,l=!1,c=!1,f=!0,h,d){throw Xe("ScreenshotTools")}static RandomId(){return ef()}static IsBase64(e){return rf(e)}static DecodeBase64(e){return nf(e)}static get errorsCount(){return J.errorsCount}static Log(e){J.Log(e)}static Warn(e){J.Warn(e)}static Error(e){J.Error(e)}static get LogCache(){return J.LogCache}static ClearLogCache(){J.ClearLogCache()}static set LogLevels(e){J.LogLevels=e}static set PerformanceLogLevel(e){var t;if((e&vt.PerformanceUserMarkLogLevel)===vt.PerformanceUserMarkLogLevel){_native!=null&&_native.enablePerformanceLogging?(_native.enablePerformanceLogging(1),vt.StartPerformanceCounter=vt._StartMarkNative,vt.EndPerformanceCounter=vt._EndMarkNative):(vt.StartPerformanceCounter=vt._StartUserMark,vt.EndPerformanceCounter=vt._EndUserMark);return}if((e&vt.PerformanceConsoleLogLevel)===vt.PerformanceConsoleLogLevel){_native!=null&&_native.enablePerformanceLogging?(_native.enablePerformanceLogging(2),vt.StartPerformanceCounter=vt._StartMarkNative,vt.EndPerformanceCounter=vt._EndMarkNative):(vt.StartPerformanceCounter=vt._StartPerformanceConsole,vt.EndPerformanceCounter=vt._EndPerformanceConsole);return}vt.StartPerformanceCounter=vt._StartPerformanceCounterDisabled,vt.EndPerformanceCounter=vt._EndPerformanceCounterDisabled,(t=_native==null?void 0:_native.disablePerformanceLogging)==null||t.call(_native)}static _StartPerformanceCounterDisabled(e,t){}static _EndPerformanceCounterDisabled(e,t){}static _StartUserMark(e,t=!0){if(!vt._Performance){if(!ar())return;vt._Performance=window.performance}!t||!vt._Performance.mark||vt._Performance.mark(e+"-Begin")}static _EndUserMark(e,t=!0){!t||!vt._Performance.mark||(vt._Performance.mark(e+"-End"),vt._Performance.measure(e,e+"-Begin",e+"-End"))}static _StartPerformanceConsole(e,t=!0){t&&(vt._StartUserMark(e,t),console.time&&console.time(e))}static _EndPerformanceConsole(e,t=!0){t&&(vt._EndUserMark(e,t),console.timeEnd(e))}static _StartMarkNative(e,t=!0){if(t&&(_native!=null&&_native.startPerformanceCounter))if(vt._NativePerformanceCounterHandles.has(e))vt.Warn(`Performance counter with name ${e} is already started.`);else{let i=_native.startPerformanceCounter(e);vt._NativePerformanceCounterHandles.set(e,i)}}static _EndMarkNative(e,t=!0){if(t&&(_native!=null&&_native.endPerformanceCounter)){let i=vt._NativePerformanceCounterHandles.get(e);i?(_native.endPerformanceCounter(i),vt._NativePerformanceCounterHandles.delete(e)):vt.Warn(`Performance counter with name ${e} was not started.`)}}static get Now(){return dr.Now}static GetClassName(e,t=!1){let i=null;return!t&&e.getClassName?i=e.getClassName():(e instanceof Object&&(i=(t?e:Object.getPrototypeOf(e)).constructor.__bjsclassName__),i||(i=typeof e)),i}static First(e,t){for(let i of e)if(t(i))return i;return null}static getFullClassName(e,t=!1){let i=null,r=null;if(!t&&e.getClassName)i=e.getClassName();else{if(e instanceof Object){let s=t?e:Object.getPrototypeOf(e);i=s.constructor.__bjsclassName__,r=s.constructor.__bjsmoduleName__}i||(i=typeof e)}return i?(r!=null?r+".":"")+i:null}static async DelayAsync(e){await new Promise(t=>{setTimeout(()=>{t()},e)})}static IsSafari(){return yl()?/^((?!chrome|android).)*safari/i.test(navigator.userAgent):!1}};vt=de;de.AssetBaseUrl="";de.UseCustomRequestHeaders=!1;de.CustomRequestHeaders=br.CustomRequestHeaders;de.GetDOMTextContent=OS;de._DefaultCdnUrl="https://cdn.babylonjs.com";de._CdnVersion="9.6.0";de._DefaultAssetsUrl="https://assets.babylonjs.com/core";de.LoadScript=typeof _native=="undefined"?vt._LoadScriptWeb:vt._LoadScriptNative;de.GetAbsoluteUrl=typeof document=="object"?n=>{let e=document.createElement("a");return e.href=n,e.href}:typeof URL=="function"&&typeof location=="object"?n=>new URL(n,location.origin).href:()=>{throw new Error("Unable to get absolute URL. Override BABYLON.Tools.GetAbsoluteUrl to a custom implementation for the current context.")};de.NoneLogLevel=J.NoneLogLevel;de.MessageLogLevel=J.MessageLogLevel;de.WarningLogLevel=J.WarningLogLevel;de.ErrorLogLevel=J.ErrorLogLevel;de.AllLogLevel=J.AllLogLevel;de.IsWindowObjectExist=ar;de.PerformanceNoneLogLevel=0;de.PerformanceUserMarkLogLevel=1;de.PerformanceConsoleLogLevel=2;de._NativePerformanceCounterHandles=new Map;de.StartPerformanceCounter=vt._StartPerformanceCounterDisabled;de.EndPerformanceCounter=vt._EndPerformanceCounterDisabled;RT=class n{constructor(e,t,i,r=0){this.iterations=e,this.index=r-1,this._done=!1,this._fn=t,this._successCallback=i}executeNext(){this._done||(this.index+1{s&&s()?o.breakLoop():setTimeout(()=>{for(let l=0;l=e)break;if(i(c),s&&s()){o.breakLoop();break}}o.executeNext()},a)},r)}};de.Mix=m_;de.IsExponentOfTwo=Rh;Le.FallbackTexture="data:image/jpg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QBmRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAAExAAIAAAAQAAAATgAAAAAAAABgAAAAAQAAAGAAAAABcGFpbnQubmV0IDQuMC41AP/bAEMABAIDAwMCBAMDAwQEBAQFCQYFBQUFCwgIBgkNCw0NDQsMDA4QFBEODxMPDAwSGBITFRYXFxcOERkbGRYaFBYXFv/bAEMBBAQEBQUFCgYGChYPDA8WFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFv/AABEIAQABAAMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APH6KKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FCiiigD6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++gooooA+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gUKKKKAPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76CiiigD5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BQooooA+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/voKKKKAPl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FCiiigD6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++gooooA+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gUKKKKAPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76CiiigD5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BQooooA+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/voKKKKAPl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FCiiigD6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++gooooA+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gUKKKKAPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76P//Z"});var or,of=C(()=>{Pt();Ci();or=class n{constructor(e,t,i=!1,r,s=!1,a){this._uniformNames=[],this._valueCache={},this._engine=e,this._noUBO=!e.supportsUniformBuffers||s,this._dynamic=i,this._name=r!=null?r:"no-name",this._data=t||[],this._uniformLocations={},this._uniformSizes={},this._uniformArraySizes={},this._uniformLocationPointer=0,this._needSync=!1,this._trackUBOsInFrame=!1,(a===void 0&&this._engine._features.trackUbosInFrame||a===!0)&&(this._buffers=[],this._bufferIndex=-1,this._bufferUpdatedLastFrame=!1,this._createBufferOnWrite=!1,this._currentFrameId=0,this._trackUBOsInFrame=!0),this._noUBO?(this.updateMatrix3x3=this._updateMatrix3x3ForEffect,this.updateMatrix2x2=this._updateMatrix2x2ForEffect,this.updateFloat=this._updateFloatForEffect,this.updateFloat2=this._updateFloat2ForEffect,this.updateFloat3=this._updateFloat3ForEffect,this.updateFloat4=this._updateFloat4ForEffect,this.updateFloatArray=this._updateFloatArrayForEffect,this.updateArray=this._updateArrayForEffect,this.updateIntArray=this._updateIntArrayForEffect,this.updateUIntArray=this._updateUIntArrayForEffect,this.updateMatrix=this._updateMatrixForEffect,this.updateMatrices=this._updateMatricesForEffect,this.updateVector3=this._updateVector3ForEffect,this.updateVector4=this._updateVector4ForEffect,this.updateColor3=this._updateColor3ForEffect,this.updateColor4=this._updateColor4ForEffect,this.updateDirectColor4=this._updateDirectColor4ForEffect,this.updateInt=this._updateIntForEffect,this.updateInt2=this._updateInt2ForEffect,this.updateInt3=this._updateInt3ForEffect,this.updateInt4=this._updateInt4ForEffect,this.updateUInt=this._updateUIntForEffect,this.updateUInt2=this._updateUInt2ForEffect,this.updateUInt3=this._updateUInt3ForEffect,this.updateUInt4=this._updateUInt4ForEffect):(this._engine._uniformBuffers.push(this),this.updateMatrix3x3=this._updateMatrix3x3ForUniform,this.updateMatrix2x2=this._updateMatrix2x2ForUniform,this.updateFloat=this._updateFloatForUniform,this.updateFloat2=this._updateFloat2ForUniform,this.updateFloat3=this._updateFloat3ForUniform,this.updateFloat4=this._updateFloat4ForUniform,this.updateFloatArray=this._updateFloatArrayForUniform,this.updateArray=this._updateArrayForUniform,this.updateIntArray=this._updateIntArrayForUniform,this.updateUIntArray=this._updateUIntArrayForUniform,this.updateMatrix=this._updateMatrixForUniform,this.updateMatrices=this._updateMatricesForUniform,this.updateVector3=this._updateVector3ForUniform,this.updateVector4=this._updateVector4ForUniform,this.updateColor3=this._updateColor3ForUniform,this.updateColor4=this._updateColor4ForUniform,this.updateDirectColor4=this._updateDirectColor4ForUniform,this.updateInt=this._updateIntForUniform,this.updateInt2=this._updateInt2ForUniform,this.updateInt3=this._updateInt3ForUniform,this.updateInt4=this._updateInt4ForUniform,this.updateUInt=this._updateUIntForUniform,this.updateUInt2=this._updateUInt2ForUniform,this.updateUInt3=this._updateUInt3ForUniform,this.updateUInt4=this._updateUInt4ForUniform)}get useUbo(){return!this._noUBO}get isSync(){return!this._needSync}isDynamic(){return this._dynamic}getData(){return this._bufferData}getBuffer(){return this._buffer}getUniformNames(){return this._uniformNames}_fillAlignment(e){let t;if(e<=2?t=e:t=4,this._uniformLocationPointer%t!==0){let i=this._uniformLocationPointer;this._uniformLocationPointer+=t-this._uniformLocationPointer%t;let r=this._uniformLocationPointer-i;for(let s=0;s0&&typeof t=="number"&&(this._uniformArraySizes[e]={strideSize:t,arraySize:i}),this._uniformLocations[e]!==void 0||(this._uniformNames.push(e),this._noUBO))return;let r;if(i>0){if(t instanceof Array)throw"addUniform should not be use with Array in UBO: "+e;if(this._fillAlignment(4),t==16)t=t*i;else{let a=(4-t)*i;t=t*i+a}r=[];for(let s=0;s1&&this._buffers[this._bufferIndex][1])if(this._buffersEqual(this._bufferData,this._buffers[this._bufferIndex][1])){this._needSync=!1,this._createBufferOnWrite=this._trackUBOsInFrame;return}else this._copyBuffer(this._bufferData,this._buffers[this._bufferIndex][1]);this._bufferUpdatedLastFrame=!0,this._engine.updateUniformBuffer(this._buffer,this._bufferData),this._needSync=!1,this._createBufferOnWrite=this._trackUBOsInFrame}}_createNewBuffer(){this._bufferIndex+10?(this._buffers.length===1?this._needSync=!this._bufferUpdatedLastFrame:this._needSync=this._bufferIndex!==0,this._bufferIndex=0,this._buffer=this._buffers[this._bufferIndex][0]):this._bufferIndex=-1)}updateUniform(e,t,i){this._checkNewFrame();let r=this._uniformLocations[e];if(r===void 0){if(this._buffer){J.Error("Cannot add an uniform after UBO has been created. uniformName="+e);return}this.addUniform(e,i),r=this._uniformLocations[e]}if(this._buffer||this.create(),this._dynamic)for(let s=0;s1&&this._buffers[t][1]&&this._bufferData.set(this._buffers[t][1]),this._valueCache={},this._currentFrameId=this._engine.frameId,!0;return!1}has(e){return this._uniformLocations[e]!==void 0}dispose(){if(this._noUBO)return;let e=this._engine._uniformBuffers,t=e.indexOf(this);if(t!==-1&&(e[t]=e[e.length-1],e.pop()),this._trackUBOsInFrame&&this._buffers)for(let i=0;i{wi=class n{constructor(e){this.length=0,this.data=new Array(e),this._id=n._GlobalId++}push(e){this.data[this.length++]=e,this.length>this.data.length&&(this.data.length*=2)}forEach(e){for(let t=0;tthis.data.length&&(this.data.length=(this.length+e.length)*2);for(let t=0;t=this.length?-1:t}contains(e){return this.indexOf(e)!==-1}};wi._GlobalId=0;eo=class extends wi{constructor(){super(...arguments),this._duplicateId=0}push(e){super.push(e),e.__smartArrayFlags||(e.__smartArrayFlags={}),e.__smartArrayFlags[this._id]=this._duplicateId}pushNoDuplicate(e){return e.__smartArrayFlags&&e.__smartArrayFlags[this._id]===this._duplicateId?!1:(this.push(e),!0)}reset(){super.reset(),this._duplicateId++}concatWithNoDuplicate(e){if(e.length!==0){this.length+e.length>this.data.length&&(this.data.length=(this.length+e.length)*2);for(let t=0;t{to();Ge();b_=class n{set opaqueSortCompareFn(e){e?this._opaqueSortCompareFn=e:this._opaqueSortCompareFn=n.PainterSortCompare,this._renderOpaque=this._renderOpaqueSorted}set alphaTestSortCompareFn(e){e?this._alphaTestSortCompareFn=e:this._alphaTestSortCompareFn=n.PainterSortCompare,this._renderAlphaTest=this._renderAlphaTestSorted}set transparentSortCompareFn(e){e?this._transparentSortCompareFn=e:this._transparentSortCompareFn=n.defaultTransparentSortCompare,this._renderTransparent=this._renderTransparentSorted}constructor(e,t,i=null,r=null,s=null){this.index=e,this._opaqueSubMeshes=new wi(256),this._transparentSubMeshes=new wi(256),this._alphaTestSubMeshes=new wi(256),this._depthOnlySubMeshes=new wi(256),this._particleSystems=new wi(256),this._spriteManagers=new wi(256),this._empty=!0,this._edgesRenderers=new eo(16),this.disableDepthPrePass=!1,this._scene=t,this.opaqueSortCompareFn=i,this.alphaTestSortCompareFn=r,this.transparentSortCompareFn=s}render(e,t,i,r,s=!0,a=!0,o=!0,l=!0,c){if(e){e(this._opaqueSubMeshes,this._alphaTestSubMeshes,this._transparentSubMeshes,this._depthOnlySubMeshes);return}let f=this._scene.getEngine();s&&this._depthOnlySubMeshes.length!==0&&(f.setColorWrite(!1),this._renderAlphaTest(this._depthOnlySubMeshes),f.setColorWrite(!0)),a&&this._opaqueSubMeshes.length!==0&&this._renderOpaque(this._opaqueSubMeshes),o&&this._alphaTestSubMeshes.length!==0&&this._renderAlphaTest(this._alphaTestSubMeshes);let h=f.getStencilBuffer();if(f.setStencilBuffer(!1),t&&this._renderSprites(),i&&this._renderParticles(r),this.onBeforeTransparentRendering&&this.onBeforeTransparentRendering(),l&&(c||this._transparentSubMeshes.length!==0||this._scene.useOrderIndependentTransparency)){if(f.setStencilBuffer(h),c)c(this._transparentSubMeshes,this);else if(this._scene.useOrderIndependentTransparency){let d=this._scene.depthPeelingRenderer.render(this._transparentSubMeshes);d.length&&this._renderTransparent(d)}else this._renderTransparent(this._transparentSubMeshes);f.setAlphaMode(0)}if(f.setStencilBuffer(!1),a&&this._edgesRenderers.length){for(let d=0;dt._alphaIndex?1:e._alphaIndext._distanceToCamera?-1:0}static frontToBackSortCompare(e,t){return e._distanceToCamerat._distanceToCamera?1:0}static PainterSortCompare(e,t){let i=e.getMesh(),r=t.getMesh();return i.material&&r.material?i.material.uniqueId-r.material.uniqueId:i.uniqueId-r.uniqueId}prepare(){this._opaqueSubMeshes.reset(),this._transparentSubMeshes.reset(),this._alphaTestSubMeshes.reset(),this._depthOnlySubMeshes.reset(),this._particleSystems.reset(),this.prepareSprites(),this._edgesRenderers.reset(),this._empty=!0}prepareSprites(){this._spriteManagers.reset()}dispose(){this._opaqueSubMeshes.dispose(),this._transparentSubMeshes.dispose(),this._alphaTestSubMeshes.dispose(),this._depthOnlySubMeshes.dispose(),this._particleSystems.dispose(),this._spriteManagers.dispose(),this._edgesRenderers.dispose()}dispatch(e,t,i){t===void 0&&(t=e.getMesh()),i===void 0&&(i=e.getMaterial()),i!=null&&(i.needAlphaBlendingForMesh(t)?this._transparentSubMeshes.push(e):i.needAlphaTestingForMesh(t)?(i.needDepthPrePass&&!this.disableDepthPrePass&&this._depthOnlySubMeshes.push(e),this._alphaTestSubMeshes.push(e)):(i.needDepthPrePass&&!this.disableDepthPrePass&&this._depthOnlySubMeshes.push(e),this._opaqueSubMeshes.push(e)),t._renderingGroup=this,t._edgesRenderer&&t.isEnabled()&&t.isVisible&&t._edgesRenderer.isEnabled&&this._edgesRenderers.pushNoDuplicate(t._edgesRenderer),this._empty=!1)}dispatchSprites(e){this._spriteManagers.push(e),this._empty=!1}dispatchParticles(e){this._particleSystems.push(e),this._empty=!1}_renderParticles(e){if(this._particleSystems.length===0)return;let t=this._scene.activeCamera;this._scene.onBeforeParticlesRenderingObservable.notifyObservers(this._scene);for(let i=0;i{l2();hM=class{},ga=class n{get disableDepthPrePass(){return this._disableDepthPrePass}set disableDepthPrePass(e){this._disableDepthPrePass=e;for(let t of this._renderingGroups)t.disableDepthPrePass=e}get maintainStateBetweenFrames(){return this._maintainStateBetweenFrames}set maintainStateBetweenFrames(e){e!==this._maintainStateBetweenFrames&&(this._maintainStateBetweenFrames=e,this._maintainStateBetweenFrames||this.restoreDispachedFlags())}restoreDispachedFlags(){for(let e of this._scene.meshes)if(e.subMeshes)for(let t of e.subMeshes)t._wasDispatched=!1;if(this._scene.spriteManagers)for(let e of this._scene.spriteManagers)e._wasDispatched=!1;for(let e of this._scene.particleSystems)e._wasDispatched=!1}constructor(e){this._useSceneAutoClearSetup=!1,this._disableDepthPrePass=!1,this._renderingGroups=new Array,this._autoClearDepthStencil={},this._customOpaqueSortCompareFn={},this._customAlphaTestSortCompareFn={},this._customTransparentSortCompareFn={},this._renderingGroupInfo=new hM,this._maintainStateBetweenFrames=!1,this._scene=e;for(let t=n.MIN_RENDERINGGROUPS;t{Kt=class{static CompareLightsPriority(e,t){return e.shadowEnabled!==t.shadowEnabled?(t.shadowEnabled?1:0)-(e.shadowEnabled?1:0):t.renderPriority-e.renderPriority}};Kt.FALLOFF_DEFAULT=0;Kt.FALLOFF_PHYSICAL=1;Kt.FALLOFF_GLTF=2;Kt.FALLOFF_STANDARD=3;Kt.LIGHTMAP_DEFAULT=0;Kt.LIGHTMAP_SPECULAR=1;Kt.LIGHTMAP_SHADOWSONLY=2;Kt.INTENSITYMODE_AUTOMATIC=0;Kt.INTENSITYMODE_LUMINOUSPOWER=1;Kt.INTENSITYMODE_LUMINOUSINTENSITY=2;Kt.INTENSITYMODE_ILLUMINANCE=3;Kt.INTENSITYMODE_LUMINANCE=4;Kt.LIGHTTYPEID_POINTLIGHT=0;Kt.LIGHTTYPEID_DIRECTIONALLIGHT=1;Kt.LIGHTTYPEID_SPOTLIGHT=2;Kt.LIGHTTYPEID_HEMISPHERICLIGHT=3;Kt.LIGHTTYPEID_RECT_AREALIGHT=4;Kt.LIGHTTYPEID_CLUSTERED_CONTAINER=5});var va,dM=C(()=>{of();hi();bT();Xo();Wo();Pt();to();I_();va=class n{get renderList(){return this._renderList}set renderList(e){this._renderList!==e&&(this._unObserveRenderList&&(this._unObserveRenderList(),this._unObserveRenderList=null),e&&(this._unObserveRenderList=lT(e,this._renderListHasChanged)),this._renderList=e)}get disableImageProcessing(){return this._disableImageProcessing}set disableImageProcessing(e){e!==this._disableImageProcessing&&(this._disableImageProcessing=e,this._scene.markAllMaterialsAsDirty(64))}get disableDepthPrePass(){return this._disableDepthPrePass}set disableDepthPrePass(e){this._disableDepthPrePass=e,this._renderingManager.disableDepthPrePass=e}get name(){return this._name}set name(e){if(this._name!==e){if(this._name=e,this._sceneUBOs)for(let t=0;tthis._checkReadiness(),()=>{if(this._freezeActiveMeshesCancel=null,e)for(let t=0;t{this._freezeActiveMeshesCancel=null,i?(J.Error("ObjectRenderer: Timeout while waiting for the renderer to be ready."),t&&J.Error(t)):(J.Error("ObjectRenderer: An unexpected error occurred while waiting for the renderer to be ready."),t&&(J.Error(t),t.stack&&J.Error(t.stack)))})}_unfreezeActiveMeshes(){var e;(e=this._freezeActiveMeshesCancel)==null||e.call(this),this._freezeActiveMeshesCancel=null;for(let t=0;t{let a=this._renderList?this._renderList.length:0;if(s===0&&a>0||a===0)for(let o of this._scene.meshes)o._markSubMeshesAsLightDirty()},this.particleSystemList=null,this.getCustomRenderList=null,this.renderMeshes=!0,this.renderDepthOnlyMeshes=!0,this.renderOpaqueMeshes=!0,this.renderAlphaTestMeshes=!0,this.renderTransparentMeshes=!0,this.renderParticles=!0,this.renderSprites=!1,this.forceLayerMaskCheck=!1,this.enableBoundingBoxRendering=!1,this.enableOutlineRendering=!0,this._disableImageProcessing=!1,this.dontSetTransformationMatrix=!1,this._disableDepthPrePass=!1,this.onBeforeRenderObservable=new te,this.onAfterRenderObservable=new te,this.onBeforeRenderingManagerRenderObservable=new te,this.onAfterRenderingManagerRenderObservable=new te,this.onInitRenderingObservable=new te,this.onFinishRenderingObservable=new te,this.onFastPathRenderObservable=new te,this._currentRefreshId=-1,this._refreshRate=1,this._currentApplyByPostProcessSetting=!1,this._activeMeshes=new wi(256),this._activeBoundingBoxes=new wi(32),this._currentFrameId=-1,this._currentSceneUBOIndex=0,this._isFrozen=!1,this._freezeActiveMeshesCancel=null,this._currentSceneCamera=null,this.name=e,this._scene=t,this._engine=this._scene.getEngine(),this._useUBO=this._engine.supportsUniformBuffers,this.renderList=[],this._renderPassIds=[],this.options={numPasses:1,doNotChangeAspectRatio:!0,enableClusteredLights:!1,...i},this._createRenderPassId(),this.renderPassId=this._renderPassIds[0],this._renderingManager=new ga(t),this._renderingManager._useSceneAutoClearSetup=!0,this.options.enableClusteredLights&&this.onInitRenderingObservable.add(()=>{for(let r of this._scene.lights)r.getTypeID()===Kt.LIGHTTYPEID_CLUSTERED_CONTAINER&&r.isSupported&&r._updateBatches(this.activeCamera).render()}),this._scene.addObjectRenderer(this)}_releaseRenderPassId(){for(let e=0;e=this._sceneUBOs.length){let s=this._sceneUBOs.length;this._sceneUBOs.push(this._createSceneUBO(`Scene ubo #${s} for ${this.name}`,t)),this._sceneUBOIsMultiview.push(t)}else this._sceneUBOIsMultiview[this._currentSceneUBOIndex]!==t&&(this._sceneUBOs[this._currentSceneUBOIndex].dispose(),this._sceneUBOs[this._currentSceneUBOIndex]=this._createSceneUBO(`Scene ubo #${this._currentSceneUBOIndex} for ${this.name}`,t),this._sceneUBOIsMultiview[this._currentSceneUBOIndex]=t);let i=this._sceneUBOs[this._currentSceneUBOIndex++];return i.unbindEffect(),i}resetRefreshCounter(){this._currentRefreshId=-1}get refreshRate(){return this._refreshRate}set refreshRate(e){this._refreshRate=e,this.resetRefreshCounter()}shouldRender(){return this._engine.snapshotRendering?!0:this._currentRefreshId===-1?(this._currentRefreshId=1,!0):this.refreshRate===this._currentRefreshId?(this._currentRefreshId=1,!0):(this._currentRefreshId++,!1)}isReadyForRendering(e,t){this.prepareRenderList(),this.initRender(e,t);let i=this._checkReadiness();return this.finishRender(),i}prepareRenderList(){let e=this._scene;if(this._waitingRenderList){if(!this.renderListPredicate){this.renderList=[];for(let t=0;t1&&(e.incrementRenderId(),e.resetCachedMaterial())}let s=this.particleSystemList||e.particleSystems;for(let a of s)a.isReady()||(i=!1);return this._engine.currentRenderPassId=t,i}_prepareRenderingManager(e=0,t=!1){var d,u;let i=this._scene,r=null,s,a,o=this.renderList?this.renderList:i.frameGraph?i.meshes:i.getActiveMeshes().data,l=this.renderList||i.frameGraph?o.length:i.getActiveMeshes().length;if(this.getCustomRenderList&&(r=this.getCustomRenderList(e,o,l)),r)s=r.length,a=this.forceLayerMaskCheck;else{if(this._defaultRenderListPrepared&&!t&&!this._engine.isWebGPU)return o;this._defaultRenderListPrepared=!0,r=o,s=l,a=!this.renderList||this.forceLayerMaskCheck}let c=i.activeCamera,f=(d=this.cameraForLOD)!=null?d:c,h=(u=i.getBoundingBoxRenderer)==null?void 0:u.call(i);if(i._activeMeshesFrozen&&this._isFrozen){if(this._renderingManager.resetSprites(),this.enableBoundingBoxRendering&&h){h.reset();for(let m=0;m{Wo();Wn=class{static GetEffect(e){return e.getPipelineContext===void 0?e.effect:e}constructor(e,t=!0){this._wasPreviouslyReady=!1,this._forceRebindOnNextCall=!0,this._wasPreviouslyUsingInstances=null,this.effect=null,this.defines=null,this.drawContext=e.createDrawContext(),t&&(this.materialContext=e.createMaterialContext())}setEffect(e,t,i=!0){var r;this.effect=e,t!==void 0&&(this.defines=t),i&&((r=this.drawContext)==null||r.reset())}dispose(e=!1){var t;if(this.effect){let i=this.effect;e?i.dispose():ja.SetImmediate(()=>{i.getEngine().onEndFrameObservable.addOnce(()=>{i.dispose()})}),this.effect=null}(t=this.drawContext)==null||t.dispose()}}});var f2={};$e(f2,{postprocessVertexShader:()=>Lie});var uM,c2,Lie,mM=C(()=>{G();uM="postprocessVertexShader",c2=`attribute vec2 position;uniform vec2 scale;varying vec2 vUV;const vec2 madd=vec2(0.5,0.5); #define CUSTOM_VERTEX_DEFINITIONS void main(void) { #define CUSTOM_VERTEX_MAIN_BEGIN vUV=(position*madd+madd)*scale;gl_Position=vec4(position,0.0,1.0); #define CUSTOM_VERTEX_MAIN_END -}`;S.ShadersStore[rM]||(S.ShadersStore[rM]=J3);fie={name:rM,shader:J3}});var t2={};et(t2,{postprocessVertexShaderWGSL:()=>hie});var sM,e2,hie,aM=C(()=>{k();sM="postprocessVertexShader",e2=`attribute position: vec2;uniform scale: vec2;varying vUV: vec2;const madd=vec2(0.5,0.5); +}`;T.ShadersStore[uM]||(T.ShadersStore[uM]=c2);Lie={name:uM,shader:c2}});var d2={};$e(d2,{postprocessVertexShaderWGSL:()=>Oie});var pM,h2,Oie,_M=C(()=>{G();pM="postprocessVertexShader",h2=`attribute position: vec2;uniform scale: vec2;varying vUV: vec2;const madd=vec2(0.5,0.5); #define CUSTOM_VERTEX_DEFINITIONS @vertex fn main(input : VertexInputs)->FragmentInputs { @@ -4155,16 +4155,16 @@ fn main(input : VertexInputs)->FragmentInputs { vertexOutputs.vUV=(vertexInputs.position*madd+madd)*uniforms.scale;vertexOutputs.position=vec4(vertexInputs.position,0.0,1.0); #define CUSTOM_VERTEX_MAIN_END } -`;S.ShadersStoreWGSL[sM]||(S.ShadersStoreWGSL[sM]=e2);hie={name:sM,shader:e2}});var oM,_T,kr,Lh=C(()=>{Ui();Nu();hi();Sh();Dh();nM();aM();oM={positions:[1,1,-1,1,-1,-1,1,-1],indices:[0,1,2,0,2,3]},_T=class{constructor(e,t=oM){var s,a;this._fullscreenViewport=new Za(0,0,1,1);let i=(s=t.positions)!=null?s:oM.positions,r=(a=t.indices)!=null?a:oM.indices;this.engine=e,this._vertexBuffers={[L.PositionKind]:new L(e,i,L.PositionKind,!1,!1,2)},this._indexBuffer=e.createIndexBuffer(r),this._indexBufferLength=r.length,this._onContextRestoredObserver=e.onContextRestoredObservable.add(()=>{this._indexBuffer=e.createIndexBuffer(r);for(let o in this._vertexBuffers)this._vertexBuffers[o]._rebuild()})}setViewport(e=this._fullscreenViewport){this.engine.setViewport(e)}bindBuffers(e){this.engine.bindBuffers(this._vertexBuffers,this._indexBuffer,e)}applyEffectWrapper(e,t=!1,i=!1){this.engine.setState(!0),this.engine.depthCullingState.depthTest=t,this.engine.stencilState.stencilTest=i,this.engine.enableEffect(e.drawWrapper),this.bindBuffers(e.effect),e.onApplyObservable.notifyObservers({})}saveStates(){this._savedStateDepthTest=this.engine.depthCullingState.depthTest,this._savedStateStencilTest=this.engine.stencilState.stencilTest}restoreStates(){this.engine.depthCullingState.depthTest=this._savedStateDepthTest,this.engine.stencilState.stencilTest=this._savedStateStencilTest}draw(){this.engine.drawElementsType(0,0,this._indexBufferLength)}_isRenderTargetTexture(e){return e.renderTarget!==void 0}render(e,t=null){if(!e.effect.isReady())return;this.saveStates(),this.setViewport();let i=t===null?null:this._isRenderTargetTexture(t)?t.renderTarget:t;i&&this.engine.bindFramebuffer(i),this.applyEffectWrapper(e),this.draw(),i&&this.engine.unBindFramebuffer(i),this.restoreStates()}dispose(){let e=this._vertexBuffers[L.PositionKind];e&&(e.dispose(),delete this._vertexBuffers[L.PositionKind]),this._indexBuffer&&this.engine._releaseBuffer(this._indexBuffer),this._onContextRestoredObserver&&(this.engine.onContextRestoredObservable.remove(this._onContextRestoredObserver),this._onContextRestoredObserver=null)}},kr=class n{static RegisterShaderCodeProcessing(e,t){if(!t){delete n._CustomShaderCodeProcessing[e!=null?e:""];return}n._CustomShaderCodeProcessing[e!=null?e:""]=t}static _GetShaderCodeProcessing(e){var t;return(t=n._CustomShaderCodeProcessing[e])!=null?t:n._CustomShaderCodeProcessing[""]}get name(){return this.options.name}set name(e){this.options.name=e}isReady(){var e,t;return(t=(e=this._drawWrapper.effect)==null?void 0:e.isReady())!=null?t:!1}get drawWrapper(){return this._drawWrapper}get effect(){return this._drawWrapper.effect}set effect(e){this._drawWrapper.effect=e}constructor(e){var i,r;this.alphaMode=0,this.onEffectCreatedObservable=new ee(void 0,!0),this.onApplyObservable=new ee,this._shadersLoaded=!1,this._webGPUReady=!1,this._importPromises=[],this.options={...e,name:e.name||"effectWrapper",engine:e.engine,uniforms:e.uniforms||e.uniformNames||[],uniformNames:void 0,samplers:e.samplers||e.samplerNames||[],samplerNames:void 0,attributeNames:e.attributeNames||["position"],uniformBuffers:e.uniformBuffers||[],defines:e.defines||"",useShaderStore:e.useShaderStore||!1,vertexUrl:e.vertexUrl||e.vertexShader||"postprocess",vertexShader:void 0,fragmentShader:e.fragmentShader||"pass",indexParameters:e.indexParameters,blockCompilation:e.blockCompilation||!1,shaderLanguage:e.shaderLanguage||0,onCompiled:e.onCompiled||void 0,extraInitializations:e.extraInitializations||void 0,extraInitializationsAsync:e.extraInitializationsAsync||void 0,useAsPostProcess:(i=e.useAsPostProcess)!=null?i:!1,allowEmptySourceTexture:(r=e.allowEmptySourceTexture)!=null?r:!1},this.options.uniformNames=this.options.uniforms,this.options.samplerNames=this.options.samplers,this.options.vertexShader=this.options.vertexUrl,this.options.useAsPostProcess&&(!this.options.allowEmptySourceTexture&&this.options.samplers.indexOf("textureSampler")===-1&&this.options.samplers.push("textureSampler"),this.options.uniforms.indexOf("scale")===-1&&this.options.uniforms.push("scale")),e.vertexUrl||e.vertexShader?this._shaderPath={vertexSource:this.options.vertexShader}:(this.options.useAsPostProcess||(this.options.uniforms.push("scale"),this.onApplyObservable.add(()=>{this.effect.setFloat2("scale",1,1)})),this._shaderPath={vertex:this.options.vertexShader}),this._shaderPath.fragmentSource=this.options.fragmentShader,this._shaderPath.spectorName=this.options.name,this.options.useShaderStore&&(this._shaderPath.fragment=this._shaderPath.fragmentSource,this._shaderPath.vertex||(this._shaderPath.vertex=this._shaderPath.vertexSource),delete this._shaderPath.fragmentSource,delete this._shaderPath.vertexSource),this.onApplyObservable.add(()=>{this.bind()}),this.options.useShaderStore||(this._onContextRestoredObserver=this.options.engine.onContextRestoredObservable.add(()=>{this.effect._pipelineContext=null,this.effect._prepareEffect()})),this._drawWrapper=new Wn(this.options.engine),this._webGPUReady=this.options.shaderLanguage===1;let t=Array.isArray(this.options.defines)?this.options.defines.join(` -`):this.options.defines;this._postConstructor(this.options.blockCompilation,t,this.options.extraInitializations)}_gatherImports(e=!1,t){}_postConstructor(e,t=null,i,r){this._importPromises.length=0,r&&this._importPromises.push(...r);let s=this.options.engine.isWebGPU&&!n.ForceGLSL;this._gatherImports(s,this._importPromises),i!==void 0&&i(s,this._importPromises),s&&this._webGPUReady&&(this.options.shaderLanguage=1),e||this.updateEffect(t)}updateEffect(e=null,t=null,i=null,r,s,a,o,l){var d,u;let c=n._GetShaderCodeProcessing(this.name);if(c!=null&&c.defineCustomBindings){let m=(d=t==null?void 0:t.slice())!=null?d:[];m.push(...this.options.uniforms);let _=(u=i==null?void 0:i.slice())!=null?u:[];_.push(...this.options.samplers),e=c.defineCustomBindings(this.name,e,m,_),t=m,i=_}this.options.defines=e||"";let f=this._shadersLoaded||this._importPromises.length===0?void 0:async()=>{await Promise.all(this._importPromises),this._shadersLoaded=!0},h;this.options.extraInitializationsAsync?h=async()=>{f==null||f(),await this.options.extraInitializationsAsync()}:h=f,this.options.useShaderStore?this._drawWrapper.effect=this.options.engine.createEffect({vertex:o!=null?o:this._shaderPath.vertex,fragment:l!=null?l:this._shaderPath.fragment},{attributes:this.options.attributeNames,uniformsNames:t||this.options.uniforms,uniformBuffersNames:this.options.uniformBuffers,samplers:i||this.options.samplers,defines:e!==null?e:"",fallbacks:null,onCompiled:s!=null?s:this.options.onCompiled,onError:a!=null?a:null,indexParameters:r||this.options.indexParameters,processCodeAfterIncludes:c!=null&&c.processCodeAfterIncludes?(m,_)=>c.processCodeAfterIncludes(this.name,m,_):null,processFinalCode:c!=null&&c.processFinalCode?(m,_)=>c.processFinalCode(this.name,m,_):null,shaderLanguage:this.options.shaderLanguage,extraInitializationsAsync:h},this.options.engine):this._drawWrapper.effect=new Ji(this._shaderPath,this.options.attributeNames,t||this.options.uniforms,i||this.options.samplerNames,this.options.engine,e,void 0,s||this.options.onCompiled,void 0,void 0,void 0,this.options.shaderLanguage,h),this.onEffectCreatedObservable.notifyObservers(this._drawWrapper.effect)}bind(e=!1){var t,i;this.options.useAsPostProcess&&!e&&(this.options.engine.setAlphaMode(this.alphaMode),this.drawWrapper.effect.setFloat2("scale",1,1)),(i=(t=n._GetShaderCodeProcessing(this.name))==null?void 0:t.bindCustomBindings)==null||i.call(t,this.name,this._drawWrapper.effect)}dispose(e=!1){this._onContextRestoredObserver&&(this.effect.getEngine().onContextRestoredObservable.remove(this._onContextRestoredObserver),this._onContextRestoredObserver=null),this.onEffectCreatedObservable.clear(),this._drawWrapper.dispose(!0)}};kr.ForceGLSL=!1;kr._CustomShaderCodeProcessing={}});var cM={};et(cM,{passPixelShader:()=>die});var lM,i2,die,fM=C(()=>{k();lM="passPixelShader",i2=`varying vec2 vUV;uniform sampler2D textureSampler; +`;T.ShadersStoreWGSL[pM]||(T.ShadersStoreWGSL[pM]=h2);Oie={name:pM,shader:h2}});var gM,IT,kr,Oh=C(()=>{Ui();Uu();hi();Th();Lh();mM();_M();gM={positions:[1,1,-1,1,-1,-1,1,-1],indices:[0,1,2,0,2,3]},IT=class{constructor(e,t=gM){var s,a;this._fullscreenViewport=new $a(0,0,1,1);let i=(s=t.positions)!=null?s:gM.positions,r=(a=t.indices)!=null?a:gM.indices;this.engine=e,this._vertexBuffers={[L.PositionKind]:new L(e,i,L.PositionKind,!1,!1,2)},this._indexBuffer=e.createIndexBuffer(r),this._indexBufferLength=r.length,this._onContextRestoredObserver=e.onContextRestoredObservable.add(()=>{this._indexBuffer=e.createIndexBuffer(r);for(let o in this._vertexBuffers)this._vertexBuffers[o]._rebuild()})}setViewport(e=this._fullscreenViewport){this.engine.setViewport(e)}bindBuffers(e){this.engine.bindBuffers(this._vertexBuffers,this._indexBuffer,e)}applyEffectWrapper(e,t=!1,i=!1){this.engine.setState(!0),this.engine.depthCullingState.depthTest=t,this.engine.stencilState.stencilTest=i,this.engine.enableEffect(e.drawWrapper),this.bindBuffers(e.effect),e.onApplyObservable.notifyObservers({})}saveStates(){this._savedStateDepthTest=this.engine.depthCullingState.depthTest,this._savedStateStencilTest=this.engine.stencilState.stencilTest}restoreStates(){this.engine.depthCullingState.depthTest=this._savedStateDepthTest,this.engine.stencilState.stencilTest=this._savedStateStencilTest}draw(){this.engine.drawElementsType(0,0,this._indexBufferLength)}_isRenderTargetTexture(e){return e.renderTarget!==void 0}render(e,t=null){if(!e.effect.isReady())return;this.saveStates(),this.setViewport();let i=t===null?null:this._isRenderTargetTexture(t)?t.renderTarget:t;i&&this.engine.bindFramebuffer(i),this.applyEffectWrapper(e),this.draw(),i&&this.engine.unBindFramebuffer(i),this.restoreStates()}dispose(){let e=this._vertexBuffers[L.PositionKind];e&&(e.dispose(),delete this._vertexBuffers[L.PositionKind]),this._indexBuffer&&this.engine._releaseBuffer(this._indexBuffer),this._onContextRestoredObserver&&(this.engine.onContextRestoredObservable.remove(this._onContextRestoredObserver),this._onContextRestoredObserver=null)}},kr=class n{static RegisterShaderCodeProcessing(e,t){if(!t){delete n._CustomShaderCodeProcessing[e!=null?e:""];return}n._CustomShaderCodeProcessing[e!=null?e:""]=t}static _GetShaderCodeProcessing(e){var t;return(t=n._CustomShaderCodeProcessing[e])!=null?t:n._CustomShaderCodeProcessing[""]}get name(){return this.options.name}set name(e){this.options.name=e}isReady(){var e,t;return(t=(e=this._drawWrapper.effect)==null?void 0:e.isReady())!=null?t:!1}get drawWrapper(){return this._drawWrapper}get effect(){return this._drawWrapper.effect}set effect(e){this._drawWrapper.effect=e}constructor(e){var i,r;this.alphaMode=0,this.onEffectCreatedObservable=new te(void 0,!0),this.onApplyObservable=new te,this._shadersLoaded=!1,this._webGPUReady=!1,this._importPromises=[],this.options={...e,name:e.name||"effectWrapper",engine:e.engine,uniforms:e.uniforms||e.uniformNames||[],uniformNames:void 0,samplers:e.samplers||e.samplerNames||[],samplerNames:void 0,attributeNames:e.attributeNames||["position"],uniformBuffers:e.uniformBuffers||[],defines:e.defines||"",useShaderStore:e.useShaderStore||!1,vertexUrl:e.vertexUrl||e.vertexShader||"postprocess",vertexShader:void 0,fragmentShader:e.fragmentShader||"pass",indexParameters:e.indexParameters,blockCompilation:e.blockCompilation||!1,shaderLanguage:e.shaderLanguage||0,onCompiled:e.onCompiled||void 0,extraInitializations:e.extraInitializations||void 0,extraInitializationsAsync:e.extraInitializationsAsync||void 0,useAsPostProcess:(i=e.useAsPostProcess)!=null?i:!1,allowEmptySourceTexture:(r=e.allowEmptySourceTexture)!=null?r:!1},this.options.uniformNames=this.options.uniforms,this.options.samplerNames=this.options.samplers,this.options.vertexShader=this.options.vertexUrl,this.options.useAsPostProcess&&(!this.options.allowEmptySourceTexture&&this.options.samplers.indexOf("textureSampler")===-1&&this.options.samplers.push("textureSampler"),this.options.uniforms.indexOf("scale")===-1&&this.options.uniforms.push("scale")),e.vertexUrl||e.vertexShader?this._shaderPath={vertexSource:this.options.vertexShader}:(this.options.useAsPostProcess||(this.options.uniforms.push("scale"),this.onApplyObservable.add(()=>{this.effect.setFloat2("scale",1,1)})),this._shaderPath={vertex:this.options.vertexShader}),this._shaderPath.fragmentSource=this.options.fragmentShader,this._shaderPath.spectorName=this.options.name,this.options.useShaderStore&&(this._shaderPath.fragment=this._shaderPath.fragmentSource,this._shaderPath.vertex||(this._shaderPath.vertex=this._shaderPath.vertexSource),delete this._shaderPath.fragmentSource,delete this._shaderPath.vertexSource),this.onApplyObservable.add(()=>{this.bind()}),this.options.useShaderStore||(this._onContextRestoredObserver=this.options.engine.onContextRestoredObservable.add(()=>{this.effect._pipelineContext=null,this.effect._prepareEffect()})),this._drawWrapper=new Wn(this.options.engine),this._webGPUReady=this.options.shaderLanguage===1;let t=Array.isArray(this.options.defines)?this.options.defines.join(` +`):this.options.defines;this._postConstructor(this.options.blockCompilation,t,this.options.extraInitializations)}_gatherImports(e=!1,t){}_postConstructor(e,t=null,i,r){this._importPromises.length=0,r&&this._importPromises.push(...r);let s=this.options.engine.isWebGPU&&!n.ForceGLSL;this._gatherImports(s,this._importPromises),i!==void 0&&i(s,this._importPromises),s&&this._webGPUReady&&(this.options.shaderLanguage=1),e||this.updateEffect(t)}updateEffect(e=null,t=null,i=null,r,s,a,o,l){var d,u;let c=n._GetShaderCodeProcessing(this.name);if(c!=null&&c.defineCustomBindings){let m=(d=t==null?void 0:t.slice())!=null?d:[];m.push(...this.options.uniforms);let _=(u=i==null?void 0:i.slice())!=null?u:[];_.push(...this.options.samplers),e=c.defineCustomBindings(this.name,e,m,_),t=m,i=_}this.options.defines=e||"";let f=this._shadersLoaded||this._importPromises.length===0?void 0:async()=>{await Promise.all(this._importPromises),this._shadersLoaded=!0},h;this.options.extraInitializationsAsync?h=async()=>{f==null||f(),await this.options.extraInitializationsAsync()}:h=f,this.options.useShaderStore?this._drawWrapper.effect=this.options.engine.createEffect({vertex:o!=null?o:this._shaderPath.vertex,fragment:l!=null?l:this._shaderPath.fragment},{attributes:this.options.attributeNames,uniformsNames:t||this.options.uniforms,uniformBuffersNames:this.options.uniformBuffers,samplers:i||this.options.samplers,defines:e!==null?e:"",fallbacks:null,onCompiled:s!=null?s:this.options.onCompiled,onError:a!=null?a:null,indexParameters:r||this.options.indexParameters,processCodeAfterIncludes:c!=null&&c.processCodeAfterIncludes?(m,_)=>c.processCodeAfterIncludes(this.name,m,_):null,processFinalCode:c!=null&&c.processFinalCode?(m,_)=>c.processFinalCode(this.name,m,_):null,shaderLanguage:this.options.shaderLanguage,extraInitializationsAsync:h},this.options.engine):this._drawWrapper.effect=new $i(this._shaderPath,this.options.attributeNames,t||this.options.uniforms,i||this.options.samplerNames,this.options.engine,e,void 0,s||this.options.onCompiled,void 0,void 0,void 0,this.options.shaderLanguage,h),this.onEffectCreatedObservable.notifyObservers(this._drawWrapper.effect)}bind(e=!1){var t,i;this.options.useAsPostProcess&&!e&&(this.options.engine.setAlphaMode(this.alphaMode),this.drawWrapper.effect.setFloat2("scale",1,1)),(i=(t=n._GetShaderCodeProcessing(this.name))==null?void 0:t.bindCustomBindings)==null||i.call(t,this.name,this._drawWrapper.effect)}dispose(e=!1){this._onContextRestoredObserver&&(this.effect.getEngine().onContextRestoredObservable.remove(this._onContextRestoredObserver),this._onContextRestoredObserver=null),this.onEffectCreatedObservable.clear(),this._drawWrapper.dispose(!0)}};kr.ForceGLSL=!1;kr._CustomShaderCodeProcessing={}});var EM={};$e(EM,{passPixelShader:()=>Nie});var vM,u2,Nie,SM=C(()=>{G();vM="passPixelShader",u2=`varying vec2 vUV;uniform sampler2D textureSampler; #define CUSTOM_FRAGMENT_DEFINITIONS void main(void) -{gl_FragColor=texture2D(textureSampler,vUV);}`;S.ShadersStore[lM]||(S.ShadersStore[lM]=i2);die={name:lM,shader:i2}});var r2={};et(r2,{Dispose:()=>dM,DumpData:()=>gT,DumpDataAsync:()=>S_,DumpFramebuffer:()=>hM,DumpTools:()=>_ie,EncodeImageAsync:()=>pie});async function uie(){var o,l;let n=(l=(o=Le.LastCreatedEngine)==null?void 0:o.createCanvas(100,100))!=null?l:new OffscreenCanvas(100,100);n instanceof OffscreenCanvas&&$.Warn("DumpData: OffscreenCanvas will be used for dumping data. This may result in lossy alpha values.");let{ThinEngine:e}=await Promise.resolve().then(()=>(hs(),$1));if(!e.IsSupported)throw new Error("DumpData: No WebGL context available. Cannot dump data.");let t={preserveDrawingBuffer:!0,depth:!1,stencil:!1,alpha:!0,premultipliedAlpha:!1,antialias:!1,failIfMajorPerformanceCaveat:!1},i=new e(n,!1,t);Le.Instances.pop(),Le.OnEnginesDisposedObservable.add(c=>{i&&c!==i&&!i.isDisposed&&Le.Instances.length===0&&dM()}),i.getCaps().parallelShaderCompile=void 0;let r=new _T(i),{passPixelShader:s}=await Promise.resolve().then(()=>(fM(),cM)),a=new kr({engine:i,name:s.name,fragmentShader:s.shader,samplerNames:["textureSampler"]});return{canvas:n,dumpEngine:{engine:i,renderer:r,wrapper:a}}}async function mie(){return sf||(sf=uie()),await sf}async function hM(n,e,t,i,r="image/png",s,a){let o=await t.readPixels(0,0,n,e),l=new Uint8Array(o.buffer);gT(n,e,l,i,r,s,!0,void 0,a)}async function S_(n,e,t,i="image/png",r,s=!1,a=!1,o){if(t instanceof Float32Array){let f=new Uint8Array(t.length),h=t.length;for(;h--;){let d=t[h];f[h]=Math.round(Ft(d)*255)}t=f}let l=await E_.EncodeImageAsync(t,n,e,i,s,o);r!==void 0&&he.DownloadBlob(l,r),l.type!==i&&$.Warn(`DumpData: The requested mimeType '${i}' is not supported. The result has mimeType '${l.type}' instead.`);let c=await l.arrayBuffer();return a?c:`data:${i};base64,${Uu(c)}`}function gT(n,e,t,i,r="image/png",s,a=!1,o=!1,l){s===void 0&&!i&&(s=""),S_(n,e,t,r,s,a,o,l).then(c=>{i&&i(c)})}function dM(){sf&&(sf==null||sf.then(n=>{n.canvas instanceof HTMLCanvasElement&&n.canvas.remove(),n.dumpEngine&&(n.dumpEngine.engine.dispose(),n.dumpEngine.renderer.dispose(),n.dumpEngine.wrapper.dispose())}),sf=null)}var sf,E_,pie,_ie,gie,uM=C(()=>{kt();Lh();Ci();xn();Pi();Pt();u_();Ut();sf=null;E_=class{static async EncodeImageAsync(e,t,i,r,s,a){let o=await mie(),l=o.dumpEngine;l.engine.setSize(t,i,!0);let c=l.engine.createRawTexture(e,t,i,5,!1,!s,1);return l.renderer.setViewport(),l.renderer.applyEffectWrapper(l.wrapper),l.wrapper.effect._bindTexture("textureSampler",c),l.renderer.draw(),c.dispose(),await new Promise((f,h)=>{he.ToBlob(o.canvas,d=>{d?f(d):h(new Error("EncodeImageAsync: Failed to convert canvas to blob."))},r,a)})}};P([us],E_,"EncodeImageAsync",null);pie=E_.EncodeImageAsync;_ie={DumpData:gT,DumpDataAsync:S_,DumpFramebuffer:hM,Dispose:dM},gie=()=>{he.DumpData=gT,he.DumpDataAsync=S_,he.DumpFramebuffer=hM};gie()});var Or,af=C(()=>{hi();Ve();Gr();uT();Wo();Sh();Pt();iM();Ji.prototype.setDepthStencilTexture=function(n,e){this._engine.setDepthStencilTexture(this._samplers[n],this._uniforms[n],e,n)};Or=class n extends ge{get renderListPredicate(){return this._objectRenderer.renderListPredicate}set renderListPredicate(e){this._objectRenderer.renderListPredicate=e}get renderList(){return this._objectRenderer.renderList}set renderList(e){this._objectRenderer.renderList=e}get particleSystemList(){return this._objectRenderer.particleSystemList}set particleSystemList(e){this._objectRenderer.particleSystemList=e}get getCustomRenderList(){return this._objectRenderer.getCustomRenderList}set getCustomRenderList(e){this._objectRenderer.getCustomRenderList=e}get renderParticles(){return this._objectRenderer.renderParticles}set renderParticles(e){this._objectRenderer.renderParticles=e}get renderSprites(){return this._objectRenderer.renderSprites}set renderSprites(e){this._objectRenderer.renderSprites=e}get enableBoundingBoxRendering(){return this._objectRenderer.enableBoundingBoxRendering}set enableBoundingBoxRendering(e){this._objectRenderer.enableBoundingBoxRendering=e}get enableOutlineRendering(){return this._objectRenderer.enableOutlineRendering}set enableOutlineRendering(e){this._objectRenderer.enableOutlineRendering=e}get forceLayerMaskCheck(){return this._objectRenderer.forceLayerMaskCheck}set forceLayerMaskCheck(e){this._objectRenderer.forceLayerMaskCheck=e}get activeCamera(){return this._objectRenderer.activeCamera}set activeCamera(e){this._objectRenderer.activeCamera=e}get cameraForLOD(){return this._objectRenderer.cameraForLOD}set cameraForLOD(e){this._objectRenderer.cameraForLOD=e}get disableImageProcessing(){return this._objectRenderer.disableImageProcessing}set disableImageProcessing(e){this._objectRenderer.disableImageProcessing=e}get customIsReadyFunction(){return this._objectRenderer.customIsReadyFunction}set customIsReadyFunction(e){this._objectRenderer.customIsReadyFunction=e}get customRenderFunction(){return this._objectRenderer.customRenderFunction}set customRenderFunction(e){this._objectRenderer.customRenderFunction=e}get postProcesses(){return this._postProcesses}get _prePassEnabled(){return!!this._prePassRenderTarget&&this._prePassRenderTarget.enabled}set onAfterUnbind(e){this._onAfterUnbindObserver&&this.onAfterUnbindObservable.remove(this._onAfterUnbindObserver),this._onAfterUnbindObserver=this.onAfterUnbindObservable.add(e)}get onBeforeRenderObservable(){return this._objectRenderer.onBeforeRenderObservable}set onBeforeRender(e){this._onBeforeRenderObserver&&this.onBeforeRenderObservable.remove(this._onBeforeRenderObserver),this._onBeforeRenderObserver=this.onBeforeRenderObservable.add(e)}get onAfterRenderObservable(){return this._objectRenderer.onAfterRenderObservable}set onAfterRender(e){this._onAfterRenderObserver&&this.onAfterRenderObservable.remove(this._onAfterRenderObserver),this._onAfterRenderObserver=this.onAfterRenderObservable.add(e)}set onClear(e){this._onClearObserver&&this.onClearObservable.remove(this._onClearObserver),this._onClearObserver=this.onClearObservable.add(e)}get _waitingRenderList(){return this._objectRenderer._waitingRenderList}set _waitingRenderList(e){this._objectRenderer._waitingRenderList=e}get renderPassId(){return this._objectRenderer.renderPassId}get renderPassIds(){return this._objectRenderer.renderPassIds}get currentRefreshId(){return this._objectRenderer.currentRefreshId}setMaterialForRendering(e,t){this._objectRenderer.setMaterialForRendering(e,t)}get isMulti(){var e,t;return(t=(e=this._renderTarget)==null?void 0:e.isMulti)!=null?t:!1}get renderTargetOptions(){return this._renderTargetOptions}get renderTarget(){return this._renderTarget}_onRatioRescale(){this._sizeRatio&&this.resize(this._initialSizeParameter)}set boundingBoxSize(e){if(this._boundingBoxSize&&this._boundingBoxSize.equals(e))return;this._boundingBoxSize=e;let t=this.getScene();t&&t.markAllMaterialsAsDirty(1)}get boundingBoxSize(){return this._boundingBoxSize}get depthStencilTexture(){var e,t;return(t=(e=this._renderTarget)==null?void 0:e._depthStencilTexture)!=null?t:null}constructor(e,t,i,r=!1,s=!0,a=0,o=!1,l=ge.TRILINEAR_SAMPLINGMODE,c=!0,f=!1,h=!1,d=5,u=!1,m,_,p=!1,g=!1){var R,I,y,M,D,O,V;let v,x=!0,A,E=!1;if(typeof r=="object"){let N=r;r=!!N.generateMipMaps,s=(R=N.doNotChangeAspectRatio)!=null?R:!0,a=(I=N.type)!=null?I:0,o=!!N.isCube,l=(y=N.samplingMode)!=null?y:ge.TRILINEAR_SAMPLINGMODE,c=(M=N.generateDepthBuffer)!=null?M:!0,f=!!N.generateStencilBuffer,h=!!N.isMulti,d=(D=N.format)!=null?D:5,u=!!N.delayAllocation,m=N.samples,_=N.creationFlags,p=!!N.noColorAttachment,g=!!N.useSRGBBuffer,v=N.colorAttachment,x=(O=N.gammaSpace)!=null?O:x,A=N.existingObjectRenderer,E=!!N.enableClusteredLights}if(super(null,i,!r,void 0,l,void 0,void 0,void 0,void 0,d),this.ignoreCameraViewport=!1,this.onBeforeBindObservable=new ee,this.onAfterUnbindObservable=new ee,this.onClearObservable=new ee,this.onResizeObservable=new ee,this._cleared=!1,this.skipInitialClear=!1,this._samples=1,this._canRescale=!0,this._renderTarget=null,this._dontDisposeObjectRenderer=!1,this.boundingBoxPosition=b.Zero(),this._disableEngineStages=!1,this._dumpToolsLoading=!1,i=this.getScene(),!i)return;let T=this.getScene().getEngine();this._gammaSpace=x,this._coordinatesMode=ge.PROJECTION_MODE,this.name=e,this.isRenderTarget=!0,this._initialSizeParameter=t,this._dontDisposeObjectRenderer=!!A,this._processSizeParameter(t),this._objectRenderer=A!=null?A:new ma(e,i,{numPasses:o?6:this.getRenderLayers()||1,doNotChangeAspectRatio:s,enableClusteredLights:E}),this._onBeforeRenderingManagerRenderObserver=this._objectRenderer.onBeforeRenderingManagerRenderObservable.add(()=>{var w;let N=this._scene;if(!this._disableEngineStages)for(let U of N._beforeRenderTargetClearStage)U.action(this,this._currentFaceIndex,this._currentLayer);if(this.onClearObservable.hasObservers()?this.onClearObservable.notifyObservers(T):this.skipInitialClear||T.clear((w=this.clearColor)!=null?w:N.clearColor,!0,!0,!0),this._doNotChangeAspectRatio||N.updateTransformMatrix(!0),!this._disableEngineStages)for(let U of N._beforeRenderTargetDrawStage)U.action(this,this._currentFaceIndex,this._currentLayer);T._debugPushGroup&&T._debugPushGroup(`Render to ${this.name} (face #${this._currentFaceIndex} layer #${this._currentLayer})`)}),this._onAfterRenderingManagerRenderObserver=this._objectRenderer.onAfterRenderingManagerRenderObservable.add(()=>{var w,U,G,J;if(T._debugPopGroup&&T._debugPopGroup(),!this._disableEngineStages)for(let Y of this._scene._afterRenderTargetDrawStage)Y.action(this,this._currentFaceIndex,this._currentLayer);let N=(U=(w=this._texture)==null?void 0:w.generateMipMaps)!=null?U:!1;if(this._texture&&(this._texture.generateMipMaps=!1),this._postProcessManager?this._postProcessManager._finalizeFrame(!1,(G=this._renderTarget)!=null?G:void 0,this._currentFaceIndex,this._postProcesses,this.ignoreCameraViewport):this._currentUseCameraPostProcess&&this._scene.postProcessManager._finalizeFrame(!1,(J=this._renderTarget)!=null?J:void 0,this._currentFaceIndex),!this._disableEngineStages)for(let Y of this._scene._afterRenderTargetPostProcessStage)Y.action(this,this._currentFaceIndex,this._currentLayer);this._texture&&(this._texture.generateMipMaps=N),this._doNotChangeAspectRatio||this._scene.updateTransformMatrix(!0),this._currentDumpForDebug&&(this._dumpTools?this._dumpTools.DumpFramebuffer(this.getRenderWidth(),this.getRenderHeight(),T):$.Error("dumpTools module is still being loaded. To speed up the process import dump tools directly in your project"))}),this._onFastPathRenderObserver=this._objectRenderer.onFastPathRenderObservable.add(()=>{this.onClearObservable.hasObservers()?this.onClearObservable.notifyObservers(T):this.skipInitialClear||T.clear(this.clearColor||this._scene.clearColor,!0,!0,!0)}),this._resizeObserver=T.onResizeObservable.add(()=>{}),this._generateMipMaps=!!r,this._doNotChangeAspectRatio=s,!h&&(this._renderTargetOptions={generateMipMaps:r,type:a,format:(V=this._format)!=null?V:void 0,samplingMode:this.samplingMode,generateDepthBuffer:c,generateStencilBuffer:f,samples:m,creationFlags:_,noColorAttachment:p,useSRGBBuffer:g,colorAttachment:v,label:this.name},this.samplingMode===ge.NEAREST_SAMPLINGMODE&&(this.wrapU=ge.CLAMP_ADDRESSMODE,this.wrapV=ge.CLAMP_ADDRESSMODE),u||(o?(this._renderTarget=i.getEngine().createRenderTargetCubeTexture(this.getRenderSize(),this._renderTargetOptions),this.coordinatesMode=ge.INVCUBIC_MODE,this._textureMatrix=K.Identity()):this._renderTarget=i.getEngine().createRenderTargetTexture(this._size,this._renderTargetOptions),this._texture=this._renderTarget.texture,m!==void 0&&(this.samples=m)))}createDepthStencilTexture(e=0,t=!0,i=!1,r=1,s=14,a){var o;(o=this._renderTarget)==null||o.createDepthStencilTexture(e,t,i,r,s,a)}_processSizeParameter(e){if(e.ratio){this._sizeRatio=e.ratio;let t=this._getEngine();this._size={width:this._bestReflectionRenderTargetDimension(t.getRenderWidth(),this._sizeRatio),height:this._bestReflectionRenderTargetDimension(t.getRenderHeight(),this._sizeRatio)}}else this._size=e}get samples(){var e,t;return(t=(e=this._renderTarget)==null?void 0:e.samples)!=null?t:this._samples}set samples(e){this._renderTarget&&(this._samples=this._renderTarget.setSamples(e))}addPostProcess(e){if(!this._postProcessManager){let t=this.getScene();if(!t)return;this._postProcessManager=new Ul(t),this._postProcesses=new Array}this._postProcesses.push(e),this._postProcesses[0].autoClear=!1}clearPostProcesses(e=!1){if(this._postProcesses){if(e)for(let t of this._postProcesses)t.dispose();this._postProcesses=[]}}removePostProcess(e){if(!this._postProcesses)return;let t=this._postProcesses.indexOf(e);t!==-1&&(this._postProcesses.splice(t,1),this._postProcesses.length>0&&(this._postProcesses[0].autoClear=!1))}resetRefreshCounter(){this._objectRenderer.resetRefreshCounter()}get refreshRate(){return this._objectRenderer.refreshRate}set refreshRate(e){this._objectRenderer.refreshRate=e}_shouldRender(){return this._objectRenderer.shouldRender()}getRenderSize(){return this.getRenderWidth()}getRenderWidth(){return this._size.width?this._size.width:this._size}getRenderHeight(){return this._size.width?this._size.height:this._size}getRenderLayers(){let e=this._size.layers;if(e)return e;let t=this._size.depth;return t||0}disableRescaling(){this._canRescale=!1}get canRescale(){return this._canRescale}scale(e){let t=Math.max(1,this.getRenderSize()*e);this.resize(t)}getReflectionTextureMatrix(){return this.isCube?this._textureMatrix:super.getReflectionTextureMatrix()}resize(e){var r;let t=this.isCube;(r=this._renderTarget)==null||r.dispose(),this._renderTarget=null;let i=this.getScene();i&&(this._processSizeParameter(e),t?this._renderTarget=i.getEngine().createRenderTargetCubeTexture(this.getRenderSize(),this._renderTargetOptions):this._renderTarget=i.getEngine().createRenderTargetTexture(this._size,this._renderTargetOptions),this._texture=this._renderTarget.texture,this._renderTargetOptions.samples!==void 0&&(this.samples=this._renderTargetOptions.samples),this.onResizeObservable.hasObservers()&&this.onResizeObservable.notifyObservers(this))}render(e=!1,t=!1){this._render(e,t)}isReadyForRendering(){this._dumpToolsLoading||(this._dumpToolsLoading=!0,Promise.resolve().then(()=>(uM(),r2)).then(t=>this._dumpTools=t)),this._objectRenderer.prepareRenderList(),this.onBeforeBindObservable.notifyObservers(this),this._objectRenderer.initRender(this.getRenderWidth(),this.getRenderHeight());let e=this._objectRenderer._checkReadiness();return this.onAfterUnbindObservable.notifyObservers(this),this._objectRenderer.finishRender(),e}_render(e=!1,t=!1){let i=this.getScene();if(!i)return;this.useCameraPostProcesses!==void 0&&(e=this.useCameraPostProcesses);let r=i.getEngine();if(r._debugPushGroup&&r._debugPushGroup(`Render to ${this.name}`),this._objectRenderer.prepareRenderList(),this.onBeforeBindObservable.notifyObservers(this),this._objectRenderer.initRender(this.getRenderWidth(),this.getRenderHeight()),(this.is2DArray||this.is3D)&&!this.isMulti)for(let s=0;s{this.onAfterRenderObservable.notifyObservers(t)})}_prepareFrame(e,t,i,r){this._postProcessManager?this._prePassEnabled||this._postProcessManager._prepareFrame(this._texture,this._postProcesses)||this._bindFrameBuffer(t,i):(!r||!e.postProcessManager._prepareFrame(this._texture))&&this._bindFrameBuffer(t,i)}_renderToTarget(e,t,i,r=0){let s=this.getScene();if(!s)return;let a=s.getEngine();this._currentFaceIndex=e,this._currentLayer=r,this._currentUseCameraPostProcess=t,this._currentDumpForDebug=i,this._prepareFrame(s,e,r,t),this._objectRenderer.render(e+r,!0),this._unbindFrameBuffer(a,e),this._texture&&this.isCube&&e===5&&a.generateMipMapsForCubemap(this._texture,!0)}setRenderingOrder(e,t=null,i=null,r=null){this._objectRenderer.setRenderingOrder(e,t,i,r)}setRenderingAutoClearDepthStencil(e,t){this._objectRenderer.setRenderingAutoClearDepthStencil(e,t)}clone(){let e=this.getSize(),t=new n(this.name,e,this.getScene(),this._renderTargetOptions.generateMipMaps,this._doNotChangeAspectRatio,this._renderTargetOptions.type,this.isCube,this._renderTargetOptions.samplingMode,this._renderTargetOptions.generateDepthBuffer,this._renderTargetOptions.generateStencilBuffer,void 0,this._renderTargetOptions.format,void 0,this._renderTargetOptions.samples);return t.hasAlpha=this.hasAlpha,t.level=this.level,t.coordinatesMode=this.coordinatesMode,this.renderList&&(t.renderList=this.renderList.slice(0)),t}serialize(){if(!this.name)return null;let e=super.serialize();if(e.renderTargetSize=this.getRenderSize(),e.renderList=[],this.renderList)for(let t=0;t=0&&e.customRenderTargets.splice(t,1);for(let r of e.cameras)t=r.customRenderTargets.indexOf(this),t>=0&&r.customRenderTargets.splice(t,1);(i=this._renderTarget)==null||i.dispose(),this._renderTarget=null,this._texture=null,super.dispose()}_rebuild(){this._objectRenderer._rebuild(),this._postProcessManager&&this._postProcessManager._rebuild()}freeRenderingGroups(){this._objectRenderer.freeRenderingGroups()}getViewCount(){return 1}};Or.REFRESHRATE_RENDER_ONCE=ma.REFRESHRATE_RENDER_ONCE;Or.REFRESHRATE_RENDER_ONEVERYFRAME=ma.REFRESHRATE_RENDER_ONEVERYFRAME;Or.REFRESHRATE_RENDER_ONEVERYTWOFRAMES=ma.REFRESHRATE_RENDER_ONEVERYTWOFRAMES;ge._CreateRenderTargetTexture=(n,e,t,i,r)=>new Or(n,e,t,i)});var Ri,Vl=C(()=>{kt();$a();hi();Ve();Sh();Ut();_r();Vi();Lr();Wo();Lh();Re.prototype.setTextureFromPostProcess=function(n,e,t){var r;let i=null;e&&(e._forcedOutputTexture?i=e._forcedOutputTexture:e._textures.data[e._currentRenderTextureInd]&&(i=e._textures.data[e._currentRenderTextureInd])),this._bindTexture(n,(r=i==null?void 0:i.texture)!=null?r:null,t)};Re.prototype.setTextureFromPostProcessOutput=function(n,e,t){var i,r;this._bindTexture(n,(r=(i=e==null?void 0:e._outputTexture)==null?void 0:i.texture)!=null?r:null,t)};Ji.prototype.setTextureFromPostProcess=function(n,e){this._engine.setTextureFromPostProcess(this._samplers[n],e,n)};Ji.prototype.setTextureFromPostProcessOutput=function(n,e){this._engine.setTextureFromPostProcessOutput(this._samplers[n],e,n)};Ri=class n{static get ForceGLSL(){return kr.ForceGLSL}static set ForceGLSL(e){kr.ForceGLSL=e}static RegisterShaderCodeProcessing(e,t){kr.RegisterShaderCodeProcessing(e,t)}get name(){return this._effectWrapper.name}set name(e){this._effectWrapper.name=e}get alphaMode(){return this._effectWrapper.alphaMode}set alphaMode(e){this._effectWrapper.alphaMode=e}get samples(){return this._samples}set samples(e){this._samples=Math.min(e,this._engine.getCaps().maxMSAASamples),this._textures.forEach(t=>{t.setSamples(this._samples)})}get shaderLanguage(){return this._shaderLanguage}getEffectName(){return this._fragmentUrl}set onActivate(e){this._onActivateObserver&&this.onActivateObservable.remove(this._onActivateObserver),e&&(this._onActivateObserver=this.onActivateObservable.add(e))}set onSizeChanged(e){this._onSizeChangedObserver&&this.onSizeChangedObservable.remove(this._onSizeChangedObserver),this._onSizeChangedObserver=this.onSizeChangedObservable.add(e)}set onApply(e){this._onApplyObserver&&this.onApplyObservable.remove(this._onApplyObserver),this._onApplyObserver=this.onApplyObservable.add(e)}set onBeforeRender(e){this._onBeforeRenderObserver&&this.onBeforeRenderObservable.remove(this._onBeforeRenderObserver),this._onBeforeRenderObserver=this.onBeforeRenderObservable.add(e)}set onAfterRender(e){this._onAfterRenderObserver&&this.onAfterRenderObservable.remove(this._onAfterRenderObserver),this._onAfterRenderObserver=this.onAfterRenderObservable.add(e)}get inputTexture(){return this._textures.data[this._currentRenderTextureInd]}set inputTexture(e){this._forcedOutputTexture=e}restoreDefaultInputTexture(){this._forcedOutputTexture&&(this._forcedOutputTexture=null,this.markTextureDirty())}getCamera(){return this._camera}get texelSize(){return this._shareOutputWithPostProcess?this._shareOutputWithPostProcess.texelSize:(this._forcedOutputTexture&&this._texelSize.copyFromFloats(1/this._forcedOutputTexture.width,1/this._forcedOutputTexture.height),this._texelSize)}constructor(e,t,i,r,s,a,o=1,l,c,f=null,h=0,d="postprocess",u,m=!1,_=5,p,g){var E,T,R,I,y,M,D,O,V,N,w,U;this._parentContainer=null,this.width=-1,this.height=-1,this.nodeMaterialSource=null,this._outputTexture=null,this.autoClear=!0,this.forceAutoClearInAlphaMode=!1,this.animations=[],this.enablePixelPerfectMode=!1,this.forceFullscreenViewport=!0,this.scaleMode=1,this.alwaysForcePOT=!1,this._samples=1,this.adaptScaleToCurrentViewport=!1,this.doNotSerialize=!1,this._webGPUReady=!1,this._reusable=!1,this._renderId=0,this.externalTextureSamplerBinding=!1,this._textures=new Fi(2),this._textureCache=[],this._currentRenderTextureInd=0,this._scaleRatio=new Ne(1,1),this._texelSize=Ne.Zero(),this.onActivateObservable=new ee,this.onSizeChangedObservable=new ee,this.onApplyObservable=new ee,this.onBeforeRenderObservable=new ee,this.onAfterRenderObservable=new ee,this.onDisposeObservable=new ee;let v=1,x=null,A;if(i&&!Array.isArray(i)){let G=i;i=(E=G.uniforms)!=null?E:null,r=(T=G.samplers)!=null?T:null,v=(R=G.size)!=null?R:1,a=(I=G.camera)!=null?I:null,o=(y=G.samplingMode)!=null?y:1,l=G.engine,c=G.reusable,f=Array.isArray(G.defines)?G.defines.join(` -`):(M=G.defines)!=null?M:null,h=(D=G.textureType)!=null?D:0,d=(O=G.vertexUrl)!=null?O:"postprocess",u=G.indexParameters,m=(V=G.blockCompilation)!=null?V:!1,_=(N=G.textureFormat)!=null?N:5,p=(w=G.shaderLanguage)!=null?w:0,x=(U=G.uniformBuffers)!=null?U:null,g=G.extraInitializations,A=G.effectWrapper}else s&&(typeof s=="number"?v=s:v={width:s.width,height:s.height});if(this._useExistingThinPostProcess=!!A,this._effectWrapper=A!=null?A:new kr({name:e,useShaderStore:!0,useAsPostProcess:!0,fragmentShader:t,engine:l||(a==null?void 0:a.getScene().getEngine()),uniforms:i,samplers:r,uniformBuffers:x,defines:f,vertexUrl:d,indexParameters:u,blockCompilation:!0,shaderLanguage:p,extraInitializations:void 0}),this.name=e,this.onEffectCreatedObservable=this._effectWrapper.onEffectCreatedObservable,a!=null?(this._camera=a,this._scene=a.getScene(),a.attachPostProcess(this),this._engine=this._scene.getEngine(),this._scene.addPostProcess(this),this.uniqueId=this._scene.getUniqueId()):l&&(this._engine=l,this._engine.postProcesses.push(this)),this._options=v,this.renderTargetSamplingMode=o||1,this._reusable=c||!1,this._textureType=h,this._textureFormat=_,this._shaderLanguage=p||0,this._samplers=r||[],this._samplers.indexOf("textureSampler")===-1&&this._samplers.push("textureSampler"),this._fragmentUrl=t,this._vertexUrl=d,this._parameters=i||[],this._parameters.indexOf("scale")===-1&&this._parameters.push("scale"),this._uniformBuffers=x||[],this._indexParameters=u,!this._useExistingThinPostProcess){this._webGPUReady=this._shaderLanguage===1;let G=[];this._gatherImports(this._engine.isWebGPU&&!n.ForceGLSL,G),this._effectWrapper._webGPUReady=this._webGPUReady,this._effectWrapper._postConstructor(m,f,g,G)}}_gatherImports(e=!1,t){e&&this._webGPUReady?t.push(Promise.all([Promise.resolve().then(()=>(aM(),t2))])):t.push(Promise.all([Promise.resolve().then(()=>(nM(),$3))]))}getClassName(){return"PostProcess"}getEngine(){return this._engine}getEffect(){return this._effectWrapper.drawWrapper.effect}shareOutputWith(e){return this._disposeTextures(),this._shareOutputWithPostProcess=e,this}useOwnOutput(){this._textures.length==0&&(this._textures=new Fi(2)),this._shareOutputWithPostProcess=null}updateEffect(e=null,t=null,i=null,r,s,a,o,l){this._effectWrapper.updateEffect(e,t,i,r,s,a,o,l),this._postProcessDefines=Array.isArray(this._effectWrapper.options.defines)?this._effectWrapper.options.defines.join(` -`):this._effectWrapper.options.defines}isReusable(){return this._reusable}markTextureDirty(){this.width=-1}_createRenderTargetTexture(e,t,i=0){for(let s=0;s=0;t--)if(e-this._textureCache[t].lastUsedRenderId>100){let i=!1;for(let r=0;r0&&this._textures.reset(),this.width=e,this.height=t;let a=null;if(i){for(let c=0;c{g.samples!==this.samples&&this._engine.updateRenderTargetTextureSampleCount(g,this.samples)}),this._flushTextureCache(),this._renderId++}return u||(u=this._getTarget()),this.enablePixelPerfectMode?(this._scaleRatio.copyFromFloats(l/f,c/h),this._engine.bindFramebuffer(u,0,l,c,this.forceFullscreenViewport)):(this._scaleRatio.copyFromFloats(1,1),this._engine.bindFramebuffer(u,0,void 0,void 0,this.forceFullscreenViewport)),(p=(_=this._engine)._debugInsertMarker)==null||p.call(_,`post process ${this.name} input`),this.onActivateObservable.notifyObservers(r),this.autoClear&&(this.alphaMode===0||this.forceAutoClearInAlphaMode)&&this._engine.clear(this.clearColor?this.clearColor:s.clearColor,s._allowPostProcessClearColor,!0,!0),this._reusable&&(this._currentRenderTextureInd=(this._currentRenderTextureInd+1)%2),u}get isSupported(){return this._effectWrapper.drawWrapper.effect.isSupported}get aspectRatio(){return this._shareOutputWithPostProcess?this._shareOutputWithPostProcess.aspectRatio:this._forcedOutputTexture?this._forcedOutputTexture.width/this._forcedOutputTexture.height:this.width/this.height}isReady(){return this._effectWrapper.isReady()}apply(){if(!this._effectWrapper.isReady())return null;this._engine.enableEffect(this._effectWrapper.drawWrapper),this._engine.setState(!1),this._engine.setDepthBuffer(!1),this._engine.setDepthWrite(!1),this.alphaConstants&&this.getEngine().setAlphaConstants(this.alphaConstants.r,this.alphaConstants.g,this.alphaConstants.b,this.alphaConstants.a),this._engine.setAlphaMode(this.alphaMode);let e;return this._shareOutputWithPostProcess?e=this._shareOutputWithPostProcess.inputTexture:this._forcedOutputTexture?e=this._forcedOutputTexture:e=this.inputTexture,this.externalTextureSamplerBinding||this._effectWrapper.drawWrapper.effect._bindTexture("textureSampler",e==null?void 0:e.texture),this._effectWrapper.drawWrapper.effect.setVector2("scale",this._scaleRatio),this.onApplyObservable.notifyObservers(this._effectWrapper.drawWrapper.effect),this._effectWrapper.bind(!0),this._effectWrapper.drawWrapper.effect}_disposeTextures(){if(this._shareOutputWithPostProcess||this._forcedOutputTexture){this._disposeTextureCache();return}this._disposeTextureCache(),this._textures.dispose()}_disposeTextureCache(){for(let e=this._textureCache.length-1;e>=0;e--)this._textureCache[e].texture.dispose();this._textureCache.length=0}setPrePassRenderer(e){return this._prePassEffectConfiguration?(this._prePassEffectConfiguration=e.addEffectConfiguration(this._prePassEffectConfiguration),this._prePassEffectConfiguration.enabled=!0,!0):!1}dispose(e){e=e||this._camera,this._useExistingThinPostProcess||this._effectWrapper.dispose(),this._disposeTextures(),this._scene&&this._scene.removePostProcess(this);let t;if(this._parentContainer&&(t=this._parentContainer.postProcesses.indexOf(this),t>-1&&this._parentContainer.postProcesses.splice(t,1),this._parentContainer=null),t=this._engine.postProcesses.indexOf(this),t!==-1&&this._engine.postProcesses.splice(t,1),this.onDisposeObservable.notifyObservers(),!!e){if(e.detachPostProcess(this),t=e._postProcesses.indexOf(this),t===0&&e._postProcesses.length>0){let i=this._camera._getFirstPostProcess();i&&i.markTextureDirty()}this.onActivateObservable.clear(),this.onAfterRenderObservable.clear(),this.onApplyObservable.clear(),this.onBeforeRenderObservable.clear(),this.onSizeChangedObservable.clear(),this.onEffectCreatedObservable.clear()}}serialize(){let e=tt.Serialize(this),t=this.getCamera()||this._scene&&this._scene.activeCamera;return e.customType="BABYLON."+this.getClassName(),e.cameraId=t?t.id:null,e.reusable=this._reusable,e.textureType=this._textureType,e.fragmentUrl=this._fragmentUrl,e.parameters=this._parameters,e.samplers=this._samplers,e.uniformBuffers=this._uniformBuffers,e.options=this._options,e.defines=this._postProcessDefines,e.textureFormat=this._textureFormat,e.vertexUrl=this._vertexUrl,e.indexParameters=this._indexParameters,e}clone(){let e=this.serialize();e._engine=this._engine,e.cameraId=null;let t=n.Parse(e,this._scene,"");return t?(t.onActivateObservable=this.onActivateObservable.clone(),t.onSizeChangedObservable=this.onSizeChangedObservable.clone(),t.onApplyObservable=this.onApplyObservable.clone(),t.onBeforeRenderObservable=this.onBeforeRenderObservable.clone(),t.onAfterRenderObservable=this.onAfterRenderObservable.clone(),t._prePassEffectConfiguration=this._prePassEffectConfiguration,t):null}static Parse(e,t,i){let r=dn(e.customType);if(!r||!r._Parse)return null;let s=t?t.getCameraById(e.cameraId):null;return r._Parse(e,s,t,i)}static _Parse(e,t,i,r){return tt.Parse(()=>new n(e.name,e.fragmentUrl,e.parameters,e.samplers,e.options,t,e.renderTargetSamplingMode,e._engine,e.reusable,e.defines,e.textureType,e.vertexUrl,e.indexParameters,!1,e.textureFormat),e,i,r)}};P([F()],Ri.prototype,"uniqueId",void 0);P([F()],Ri.prototype,"name",null);P([F()],Ri.prototype,"width",void 0);P([F()],Ri.prototype,"height",void 0);P([F()],Ri.prototype,"renderTargetSamplingMode",void 0);P([Bu()],Ri.prototype,"clearColor",void 0);P([F()],Ri.prototype,"autoClear",void 0);P([F()],Ri.prototype,"forceAutoClearInAlphaMode",void 0);P([F()],Ri.prototype,"alphaMode",null);P([F()],Ri.prototype,"alphaConstants",void 0);P([F()],Ri.prototype,"enablePixelPerfectMode",void 0);P([F()],Ri.prototype,"forceFullscreenViewport",void 0);P([F()],Ri.prototype,"scaleMode",void 0);P([F()],Ri.prototype,"alwaysForcePOT",void 0);P([F("samples")],Ri.prototype,"_samples",void 0);P([F()],Ri.prototype,"adaptScaleToCurrentViewport",void 0);wt("BABYLON.PostProcess",Ri)});var s2={};et(s2,{passPixelShaderWGSL:()=>vie});var mM,n2,vie,a2=C(()=>{k();mM="passPixelShader",n2=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_2d; +{gl_FragColor=texture2D(textureSampler,vUV);}`;T.ShadersStore[vM]||(T.ShadersStore[vM]=u2);Nie={name:vM,shader:u2}});var m2={};$e(m2,{Dispose:()=>AM,DumpData:()=>MT,DumpDataAsync:()=>C_,DumpFramebuffer:()=>TM,DumpTools:()=>Uie,EncodeImageAsync:()=>Bie});async function wie(){var o,l;let n=(l=(o=Le.LastCreatedEngine)==null?void 0:o.createCanvas(100,100))!=null?l:new OffscreenCanvas(100,100);n instanceof OffscreenCanvas&&J.Warn("DumpData: OffscreenCanvas will be used for dumping data. This may result in lossy alpha values.");let{ThinEngine:e}=await Promise.resolve().then(()=>(hs(),f3));if(!e.IsSupported)throw new Error("DumpData: No WebGL context available. Cannot dump data.");let t={preserveDrawingBuffer:!0,depth:!1,stencil:!1,alpha:!0,premultipliedAlpha:!1,antialias:!1,failIfMajorPerformanceCaveat:!1},i=new e(n,!1,t);Le.Instances.pop(),Le.OnEnginesDisposedObservable.add(c=>{i&&c!==i&&!i.isDisposed&&Le.Instances.length===0&&AM()}),i.getCaps().parallelShaderCompile=void 0;let r=new IT(i),{passPixelShader:s}=await Promise.resolve().then(()=>(SM(),EM)),a=new kr({engine:i,name:s.name,fragmentShader:s.shader,samplerNames:["textureSampler"]});return{canvas:n,dumpEngine:{engine:i,renderer:r,wrapper:a}}}async function Fie(){return lf||(lf=wie()),await lf}async function TM(n,e,t,i,r="image/png",s,a){let o=await t.readPixels(0,0,n,e),l=new Uint8Array(o.buffer);MT(n,e,l,i,r,s,!0,void 0,a)}async function C_(n,e,t,i="image/png",r,s=!1,a=!1,o){if(t instanceof Float32Array){let f=new Uint8Array(t.length),h=t.length;for(;h--;){let d=t[h];f[h]=Math.round(wt(d)*255)}t=f}let l=await M_.EncodeImageAsync(t,n,e,i,s,o);r!==void 0&&de.DownloadBlob(l,r),l.type!==i&&J.Warn(`DumpData: The requested mimeType '${i}' is not supported. The result has mimeType '${l.type}' instead.`);let c=await l.arrayBuffer();return a?c:`data:${i};base64,${Wu(c)}`}function MT(n,e,t,i,r="image/png",s,a=!1,o=!1,l){s===void 0&&!i&&(s=""),C_(n,e,t,r,s,a,o,l).then(c=>{i&&i(c)})}function AM(){lf&&(lf==null||lf.then(n=>{n.canvas instanceof HTMLCanvasElement&&n.canvas.remove(),n.dumpEngine&&(n.dumpEngine.engine.dispose(),n.dumpEngine.renderer.dispose(),n.dumpEngine.wrapper.dispose())}),lf=null)}var lf,M_,Bie,Uie,Vie,xM=C(()=>{kt();Oh();Ci();xn();Pi();Pt();T_();Ut();lf=null;M_=class{static async EncodeImageAsync(e,t,i,r,s,a){let o=await Fie(),l=o.dumpEngine;l.engine.setSize(t,i,!0);let c=l.engine.createRawTexture(e,t,i,5,!1,!s,1);return l.renderer.setViewport(),l.renderer.applyEffectWrapper(l.wrapper),l.wrapper.effect._bindTexture("textureSampler",c),l.renderer.draw(),c.dispose(),await new Promise((f,h)=>{de.ToBlob(o.canvas,d=>{d?f(d):h(new Error("EncodeImageAsync: Failed to convert canvas to blob."))},r,a)})}};P([us],M_,"EncodeImageAsync",null);Bie=M_.EncodeImageAsync;Uie={DumpData:MT,DumpDataAsync:C_,DumpFramebuffer:TM,Dispose:AM},Vie=()=>{de.DumpData=MT,de.DumpDataAsync=C_,de.DumpFramebuffer=TM};Vie()});var Or,cf=C(()=>{hi();Ge();Gr();xT();zo();Th();Pt();dM();$i.prototype.setDepthStencilTexture=function(n,e){this._engine.setDepthStencilTexture(this._samplers[n],this._uniforms[n],e,n)};Or=class n extends ge{get renderListPredicate(){return this._objectRenderer.renderListPredicate}set renderListPredicate(e){this._objectRenderer.renderListPredicate=e}get renderList(){return this._objectRenderer.renderList}set renderList(e){this._objectRenderer.renderList=e}get particleSystemList(){return this._objectRenderer.particleSystemList}set particleSystemList(e){this._objectRenderer.particleSystemList=e}get getCustomRenderList(){return this._objectRenderer.getCustomRenderList}set getCustomRenderList(e){this._objectRenderer.getCustomRenderList=e}get renderParticles(){return this._objectRenderer.renderParticles}set renderParticles(e){this._objectRenderer.renderParticles=e}get renderSprites(){return this._objectRenderer.renderSprites}set renderSprites(e){this._objectRenderer.renderSprites=e}get enableBoundingBoxRendering(){return this._objectRenderer.enableBoundingBoxRendering}set enableBoundingBoxRendering(e){this._objectRenderer.enableBoundingBoxRendering=e}get enableOutlineRendering(){return this._objectRenderer.enableOutlineRendering}set enableOutlineRendering(e){this._objectRenderer.enableOutlineRendering=e}get forceLayerMaskCheck(){return this._objectRenderer.forceLayerMaskCheck}set forceLayerMaskCheck(e){this._objectRenderer.forceLayerMaskCheck=e}get activeCamera(){return this._objectRenderer.activeCamera}set activeCamera(e){this._objectRenderer.activeCamera=e}get cameraForLOD(){return this._objectRenderer.cameraForLOD}set cameraForLOD(e){this._objectRenderer.cameraForLOD=e}get disableImageProcessing(){return this._objectRenderer.disableImageProcessing}set disableImageProcessing(e){this._objectRenderer.disableImageProcessing=e}get customIsReadyFunction(){return this._objectRenderer.customIsReadyFunction}set customIsReadyFunction(e){this._objectRenderer.customIsReadyFunction=e}get customRenderFunction(){return this._objectRenderer.customRenderFunction}set customRenderFunction(e){this._objectRenderer.customRenderFunction=e}get postProcesses(){return this._postProcesses}get _prePassEnabled(){return!!this._prePassRenderTarget&&this._prePassRenderTarget.enabled}set onAfterUnbind(e){this._onAfterUnbindObserver&&this.onAfterUnbindObservable.remove(this._onAfterUnbindObserver),this._onAfterUnbindObserver=this.onAfterUnbindObservable.add(e)}get onBeforeRenderObservable(){return this._objectRenderer.onBeforeRenderObservable}set onBeforeRender(e){this._onBeforeRenderObserver&&this.onBeforeRenderObservable.remove(this._onBeforeRenderObserver),this._onBeforeRenderObserver=this.onBeforeRenderObservable.add(e)}get onAfterRenderObservable(){return this._objectRenderer.onAfterRenderObservable}set onAfterRender(e){this._onAfterRenderObserver&&this.onAfterRenderObservable.remove(this._onAfterRenderObserver),this._onAfterRenderObserver=this.onAfterRenderObservable.add(e)}set onClear(e){this._onClearObserver&&this.onClearObservable.remove(this._onClearObserver),this._onClearObserver=this.onClearObservable.add(e)}get _waitingRenderList(){return this._objectRenderer._waitingRenderList}set _waitingRenderList(e){this._objectRenderer._waitingRenderList=e}get renderPassId(){return this._objectRenderer.renderPassId}get renderPassIds(){return this._objectRenderer.renderPassIds}get currentRefreshId(){return this._objectRenderer.currentRefreshId}setMaterialForRendering(e,t){this._objectRenderer.setMaterialForRendering(e,t)}get isMulti(){var e,t;return(t=(e=this._renderTarget)==null?void 0:e.isMulti)!=null?t:!1}get renderTargetOptions(){return this._renderTargetOptions}get renderTarget(){return this._renderTarget}_onRatioRescale(){this._sizeRatio&&this.resize(this._initialSizeParameter)}set boundingBoxSize(e){if(this._boundingBoxSize&&this._boundingBoxSize.equals(e))return;this._boundingBoxSize=e;let t=this.getScene();t&&t.markAllMaterialsAsDirty(1)}get boundingBoxSize(){return this._boundingBoxSize}get depthStencilTexture(){var e,t;return(t=(e=this._renderTarget)==null?void 0:e._depthStencilTexture)!=null?t:null}constructor(e,t,i,r=!1,s=!0,a=0,o=!1,l=ge.TRILINEAR_SAMPLINGMODE,c=!0,f=!1,h=!1,d=5,u=!1,m,_,p=!1,g=!1){var R,I,y,M,D,O,V;let v,x=!0,A,S=!1;if(typeof r=="object"){let N=r;r=!!N.generateMipMaps,s=(R=N.doNotChangeAspectRatio)!=null?R:!0,a=(I=N.type)!=null?I:0,o=!!N.isCube,l=(y=N.samplingMode)!=null?y:ge.TRILINEAR_SAMPLINGMODE,c=(M=N.generateDepthBuffer)!=null?M:!0,f=!!N.generateStencilBuffer,h=!!N.isMulti,d=(D=N.format)!=null?D:5,u=!!N.delayAllocation,m=N.samples,_=N.creationFlags,p=!!N.noColorAttachment,g=!!N.useSRGBBuffer,v=N.colorAttachment,x=(O=N.gammaSpace)!=null?O:x,A=N.existingObjectRenderer,S=!!N.enableClusteredLights}if(super(null,i,!r,void 0,l,void 0,void 0,void 0,void 0,d),this.ignoreCameraViewport=!1,this.onBeforeBindObservable=new te,this.onAfterUnbindObservable=new te,this.onClearObservable=new te,this.onResizeObservable=new te,this._cleared=!1,this.skipInitialClear=!1,this._samples=1,this._canRescale=!0,this._renderTarget=null,this._dontDisposeObjectRenderer=!1,this.boundingBoxPosition=b.Zero(),this._disableEngineStages=!1,this._dumpToolsLoading=!1,i=this.getScene(),!i)return;let E=this.getScene().getEngine();this._gammaSpace=x,this._coordinatesMode=ge.PROJECTION_MODE,this.name=e,this.isRenderTarget=!0,this._initialSizeParameter=t,this._dontDisposeObjectRenderer=!!A,this._processSizeParameter(t),this._objectRenderer=A!=null?A:new va(e,i,{numPasses:o?6:this.getRenderLayers()||1,doNotChangeAspectRatio:s,enableClusteredLights:S}),this._onBeforeRenderingManagerRenderObserver=this._objectRenderer.onBeforeRenderingManagerRenderObservable.add(()=>{var F;let N=this._scene;if(!this._disableEngineStages)for(let U of N._beforeRenderTargetClearStage)U.action(this,this._currentFaceIndex,this._currentLayer);if(this.onClearObservable.hasObservers()?this.onClearObservable.notifyObservers(E):this.skipInitialClear||E.clear((F=this.clearColor)!=null?F:N.clearColor,!0,!0,!0),this._doNotChangeAspectRatio||N.updateTransformMatrix(!0),!this._disableEngineStages)for(let U of N._beforeRenderTargetDrawStage)U.action(this,this._currentFaceIndex,this._currentLayer);E._debugPushGroup&&E._debugPushGroup(`Render to ${this.name} (face #${this._currentFaceIndex} layer #${this._currentLayer})`)}),this._onAfterRenderingManagerRenderObserver=this._objectRenderer.onAfterRenderingManagerRenderObservable.add(()=>{var F,U,W,$;if(E._debugPopGroup&&E._debugPopGroup(),!this._disableEngineStages)for(let q of this._scene._afterRenderTargetDrawStage)q.action(this,this._currentFaceIndex,this._currentLayer);let N=(U=(F=this._texture)==null?void 0:F.generateMipMaps)!=null?U:!1;if(this._texture&&(this._texture.generateMipMaps=!1),this._postProcessManager?this._postProcessManager._finalizeFrame(!1,(W=this._renderTarget)!=null?W:void 0,this._currentFaceIndex,this._postProcesses,this.ignoreCameraViewport):this._currentUseCameraPostProcess&&this._scene.postProcessManager._finalizeFrame(!1,($=this._renderTarget)!=null?$:void 0,this._currentFaceIndex),!this._disableEngineStages)for(let q of this._scene._afterRenderTargetPostProcessStage)q.action(this,this._currentFaceIndex,this._currentLayer);this._texture&&(this._texture.generateMipMaps=N),this._doNotChangeAspectRatio||this._scene.updateTransformMatrix(!0),this._currentDumpForDebug&&(this._dumpTools?this._dumpTools.DumpFramebuffer(this.getRenderWidth(),this.getRenderHeight(),E):J.Error("dumpTools module is still being loaded. To speed up the process import dump tools directly in your project"))}),this._onFastPathRenderObserver=this._objectRenderer.onFastPathRenderObservable.add(()=>{this.onClearObservable.hasObservers()?this.onClearObservable.notifyObservers(E):this.skipInitialClear||E.clear(this.clearColor||this._scene.clearColor,!0,!0,!0)}),this._resizeObserver=E.onResizeObservable.add(()=>{}),this._generateMipMaps=!!r,this._doNotChangeAspectRatio=s,!h&&(this._renderTargetOptions={generateMipMaps:r,type:a,format:(V=this._format)!=null?V:void 0,samplingMode:this.samplingMode,generateDepthBuffer:c,generateStencilBuffer:f,samples:m,creationFlags:_,noColorAttachment:p,useSRGBBuffer:g,colorAttachment:v,label:this.name},this.samplingMode===ge.NEAREST_SAMPLINGMODE&&(this.wrapU=ge.CLAMP_ADDRESSMODE,this.wrapV=ge.CLAMP_ADDRESSMODE),u||(o?(this._renderTarget=i.getEngine().createRenderTargetCubeTexture(this.getRenderSize(),this._renderTargetOptions),this.coordinatesMode=ge.INVCUBIC_MODE,this._textureMatrix=K.Identity()):this._renderTarget=i.getEngine().createRenderTargetTexture(this._size,this._renderTargetOptions),this._texture=this._renderTarget.texture,m!==void 0&&(this.samples=m)))}createDepthStencilTexture(e=0,t=!0,i=!1,r=1,s=14,a){var o;(o=this._renderTarget)==null||o.createDepthStencilTexture(e,t,i,r,s,a)}_processSizeParameter(e){if(e.ratio){this._sizeRatio=e.ratio;let t=this._getEngine();this._size={width:this._bestReflectionRenderTargetDimension(t.getRenderWidth(),this._sizeRatio),height:this._bestReflectionRenderTargetDimension(t.getRenderHeight(),this._sizeRatio)}}else this._size=e}get samples(){var e,t;return(t=(e=this._renderTarget)==null?void 0:e.samples)!=null?t:this._samples}set samples(e){this._renderTarget&&(this._samples=this._renderTarget.setSamples(e))}addPostProcess(e){if(!this._postProcessManager){let t=this.getScene();if(!t)return;this._postProcessManager=new Gl(t),this._postProcesses=new Array}this._postProcesses.push(e),this._postProcesses[0].autoClear=!1}clearPostProcesses(e=!1){if(this._postProcesses){if(e)for(let t of this._postProcesses)t.dispose();this._postProcesses=[]}}removePostProcess(e){if(!this._postProcesses)return;let t=this._postProcesses.indexOf(e);t!==-1&&(this._postProcesses.splice(t,1),this._postProcesses.length>0&&(this._postProcesses[0].autoClear=!1))}resetRefreshCounter(){this._objectRenderer.resetRefreshCounter()}get refreshRate(){return this._objectRenderer.refreshRate}set refreshRate(e){this._objectRenderer.refreshRate=e}_shouldRender(){return this._objectRenderer.shouldRender()}getRenderSize(){return this.getRenderWidth()}getRenderWidth(){return this._size.width?this._size.width:this._size}getRenderHeight(){return this._size.width?this._size.height:this._size}getRenderLayers(){let e=this._size.layers;if(e)return e;let t=this._size.depth;return t||0}disableRescaling(){this._canRescale=!1}get canRescale(){return this._canRescale}scale(e){let t=Math.max(1,this.getRenderSize()*e);this.resize(t)}getReflectionTextureMatrix(){return this.isCube?this._textureMatrix:super.getReflectionTextureMatrix()}resize(e){var r;let t=this.isCube;(r=this._renderTarget)==null||r.dispose(),this._renderTarget=null;let i=this.getScene();i&&(this._processSizeParameter(e),t?this._renderTarget=i.getEngine().createRenderTargetCubeTexture(this.getRenderSize(),this._renderTargetOptions):this._renderTarget=i.getEngine().createRenderTargetTexture(this._size,this._renderTargetOptions),this._texture=this._renderTarget.texture,this._renderTargetOptions.samples!==void 0&&(this.samples=this._renderTargetOptions.samples),this.onResizeObservable.hasObservers()&&this.onResizeObservable.notifyObservers(this))}render(e=!1,t=!1){this._render(e,t)}isReadyForRendering(){this._dumpToolsLoading||(this._dumpToolsLoading=!0,Promise.resolve().then(()=>(xM(),m2)).then(t=>this._dumpTools=t)),this._objectRenderer.prepareRenderList(),this.onBeforeBindObservable.notifyObservers(this),this._objectRenderer.initRender(this.getRenderWidth(),this.getRenderHeight());let e=this._objectRenderer._checkReadiness();return this.onAfterUnbindObservable.notifyObservers(this),this._objectRenderer.finishRender(),e}_render(e=!1,t=!1){let i=this.getScene();if(!i)return;this.useCameraPostProcesses!==void 0&&(e=this.useCameraPostProcesses);let r=i.getEngine();if(r._debugPushGroup&&r._debugPushGroup(`Render to ${this.name}`),this._objectRenderer.prepareRenderList(),this.onBeforeBindObservable.notifyObservers(this),this._objectRenderer.initRender(this.getRenderWidth(),this.getRenderHeight()),(this.is2DArray||this.is3D)&&!this.isMulti)for(let s=0;s{this.onAfterRenderObservable.notifyObservers(t)})}_prepareFrame(e,t,i,r){this._postProcessManager?this._prePassEnabled||this._postProcessManager._prepareFrame(this._texture,this._postProcesses)||this._bindFrameBuffer(t,i):(!r||!e.postProcessManager._prepareFrame(this._texture))&&this._bindFrameBuffer(t,i)}_renderToTarget(e,t,i,r=0){let s=this.getScene();if(!s)return;let a=s.getEngine();this._currentFaceIndex=e,this._currentLayer=r,this._currentUseCameraPostProcess=t,this._currentDumpForDebug=i,this._prepareFrame(s,e,r,t),this._objectRenderer.render(e+r,!0),this._unbindFrameBuffer(a,e),this._texture&&this.isCube&&e===5&&a.generateMipMapsForCubemap(this._texture,!0)}setRenderingOrder(e,t=null,i=null,r=null){this._objectRenderer.setRenderingOrder(e,t,i,r)}setRenderingAutoClearDepthStencil(e,t){this._objectRenderer.setRenderingAutoClearDepthStencil(e,t)}clone(){let e=this.getSize(),t=new n(this.name,e,this.getScene(),this._renderTargetOptions.generateMipMaps,this._doNotChangeAspectRatio,this._renderTargetOptions.type,this.isCube,this._renderTargetOptions.samplingMode,this._renderTargetOptions.generateDepthBuffer,this._renderTargetOptions.generateStencilBuffer,void 0,this._renderTargetOptions.format,void 0,this._renderTargetOptions.samples);return t.hasAlpha=this.hasAlpha,t.level=this.level,t.coordinatesMode=this.coordinatesMode,this.renderList&&(t.renderList=this.renderList.slice(0)),t}serialize(){if(!this.name)return null;let e=super.serialize();if(e.renderTargetSize=this.getRenderSize(),e.renderList=[],this.renderList)for(let t=0;t=0&&e.customRenderTargets.splice(t,1);for(let r of e.cameras)t=r.customRenderTargets.indexOf(this),t>=0&&r.customRenderTargets.splice(t,1);(i=this._renderTarget)==null||i.dispose(),this._renderTarget=null,this._texture=null,super.dispose()}_rebuild(){this._objectRenderer._rebuild(),this._postProcessManager&&this._postProcessManager._rebuild()}freeRenderingGroups(){this._objectRenderer.freeRenderingGroups()}getViewCount(){return 1}};Or.REFRESHRATE_RENDER_ONCE=va.REFRESHRATE_RENDER_ONCE;Or.REFRESHRATE_RENDER_ONEVERYFRAME=va.REFRESHRATE_RENDER_ONEVERYFRAME;Or.REFRESHRATE_RENDER_ONEVERYTWOFRAMES=va.REFRESHRATE_RENDER_ONEVERYTWOFRAMES;ge._CreateRenderTargetTexture=(n,e,t,i,r)=>new Or(n,e,t,i)});var Ri,kl=C(()=>{kt();to();hi();Ge();Th();Ut();Er();Vi();Lr();zo();Oh();Re.prototype.setTextureFromPostProcess=function(n,e,t){var r;let i=null;e&&(e._forcedOutputTexture?i=e._forcedOutputTexture:e._textures.data[e._currentRenderTextureInd]&&(i=e._textures.data[e._currentRenderTextureInd])),this._bindTexture(n,(r=i==null?void 0:i.texture)!=null?r:null,t)};Re.prototype.setTextureFromPostProcessOutput=function(n,e,t){var i,r;this._bindTexture(n,(r=(i=e==null?void 0:e._outputTexture)==null?void 0:i.texture)!=null?r:null,t)};$i.prototype.setTextureFromPostProcess=function(n,e){this._engine.setTextureFromPostProcess(this._samplers[n],e,n)};$i.prototype.setTextureFromPostProcessOutput=function(n,e){this._engine.setTextureFromPostProcessOutput(this._samplers[n],e,n)};Ri=class n{static get ForceGLSL(){return kr.ForceGLSL}static set ForceGLSL(e){kr.ForceGLSL=e}static RegisterShaderCodeProcessing(e,t){kr.RegisterShaderCodeProcessing(e,t)}get name(){return this._effectWrapper.name}set name(e){this._effectWrapper.name=e}get alphaMode(){return this._effectWrapper.alphaMode}set alphaMode(e){this._effectWrapper.alphaMode=e}get samples(){return this._samples}set samples(e){this._samples=Math.min(e,this._engine.getCaps().maxMSAASamples),this._textures.forEach(t=>{t.setSamples(this._samples)})}get shaderLanguage(){return this._shaderLanguage}getEffectName(){return this._fragmentUrl}set onActivate(e){this._onActivateObserver&&this.onActivateObservable.remove(this._onActivateObserver),e&&(this._onActivateObserver=this.onActivateObservable.add(e))}set onSizeChanged(e){this._onSizeChangedObserver&&this.onSizeChangedObservable.remove(this._onSizeChangedObserver),this._onSizeChangedObserver=this.onSizeChangedObservable.add(e)}set onApply(e){this._onApplyObserver&&this.onApplyObservable.remove(this._onApplyObserver),this._onApplyObserver=this.onApplyObservable.add(e)}set onBeforeRender(e){this._onBeforeRenderObserver&&this.onBeforeRenderObservable.remove(this._onBeforeRenderObserver),this._onBeforeRenderObserver=this.onBeforeRenderObservable.add(e)}set onAfterRender(e){this._onAfterRenderObserver&&this.onAfterRenderObservable.remove(this._onAfterRenderObserver),this._onAfterRenderObserver=this.onAfterRenderObservable.add(e)}get inputTexture(){return this._textures.data[this._currentRenderTextureInd]}set inputTexture(e){this._forcedOutputTexture=e}restoreDefaultInputTexture(){this._forcedOutputTexture&&(this._forcedOutputTexture=null,this.markTextureDirty())}getCamera(){return this._camera}get texelSize(){return this._shareOutputWithPostProcess?this._shareOutputWithPostProcess.texelSize:(this._forcedOutputTexture&&this._texelSize.copyFromFloats(1/this._forcedOutputTexture.width,1/this._forcedOutputTexture.height),this._texelSize)}constructor(e,t,i,r,s,a,o=1,l,c,f=null,h=0,d="postprocess",u,m=!1,_=5,p,g){var S,E,R,I,y,M,D,O,V,N,F,U;this._parentContainer=null,this.width=-1,this.height=-1,this.nodeMaterialSource=null,this._outputTexture=null,this.autoClear=!0,this.forceAutoClearInAlphaMode=!1,this.animations=[],this.enablePixelPerfectMode=!1,this.forceFullscreenViewport=!0,this.scaleMode=1,this.alwaysForcePOT=!1,this._samples=1,this.adaptScaleToCurrentViewport=!1,this.doNotSerialize=!1,this._webGPUReady=!1,this._reusable=!1,this._renderId=0,this.externalTextureSamplerBinding=!1,this._textures=new wi(2),this._textureCache=[],this._currentRenderTextureInd=0,this._scaleRatio=new Ne(1,1),this._texelSize=Ne.Zero(),this.onActivateObservable=new te,this.onSizeChangedObservable=new te,this.onApplyObservable=new te,this.onBeforeRenderObservable=new te,this.onAfterRenderObservable=new te,this.onDisposeObservable=new te;let v=1,x=null,A;if(i&&!Array.isArray(i)){let W=i;i=(S=W.uniforms)!=null?S:null,r=(E=W.samplers)!=null?E:null,v=(R=W.size)!=null?R:1,a=(I=W.camera)!=null?I:null,o=(y=W.samplingMode)!=null?y:1,l=W.engine,c=W.reusable,f=Array.isArray(W.defines)?W.defines.join(` +`):(M=W.defines)!=null?M:null,h=(D=W.textureType)!=null?D:0,d=(O=W.vertexUrl)!=null?O:"postprocess",u=W.indexParameters,m=(V=W.blockCompilation)!=null?V:!1,_=(N=W.textureFormat)!=null?N:5,p=(F=W.shaderLanguage)!=null?F:0,x=(U=W.uniformBuffers)!=null?U:null,g=W.extraInitializations,A=W.effectWrapper}else s&&(typeof s=="number"?v=s:v={width:s.width,height:s.height});if(this._useExistingThinPostProcess=!!A,this._effectWrapper=A!=null?A:new kr({name:e,useShaderStore:!0,useAsPostProcess:!0,fragmentShader:t,engine:l||(a==null?void 0:a.getScene().getEngine()),uniforms:i,samplers:r,uniformBuffers:x,defines:f,vertexUrl:d,indexParameters:u,blockCompilation:!0,shaderLanguage:p,extraInitializations:void 0}),this.name=e,this.onEffectCreatedObservable=this._effectWrapper.onEffectCreatedObservable,a!=null?(this._camera=a,this._scene=a.getScene(),a.attachPostProcess(this),this._engine=this._scene.getEngine(),this._scene.addPostProcess(this),this.uniqueId=this._scene.getUniqueId()):l&&(this._engine=l,this._engine.postProcesses.push(this)),this._options=v,this.renderTargetSamplingMode=o||1,this._reusable=c||!1,this._textureType=h,this._textureFormat=_,this._shaderLanguage=p||0,this._samplers=r||[],this._samplers.indexOf("textureSampler")===-1&&this._samplers.push("textureSampler"),this._fragmentUrl=t,this._vertexUrl=d,this._parameters=i||[],this._parameters.indexOf("scale")===-1&&this._parameters.push("scale"),this._uniformBuffers=x||[],this._indexParameters=u,!this._useExistingThinPostProcess){this._webGPUReady=this._shaderLanguage===1;let W=[];this._gatherImports(this._engine.isWebGPU&&!n.ForceGLSL,W),this._effectWrapper._webGPUReady=this._webGPUReady,this._effectWrapper._postConstructor(m,f,g,W)}}_gatherImports(e=!1,t){e&&this._webGPUReady?t.push(Promise.all([Promise.resolve().then(()=>(_M(),d2))])):t.push(Promise.all([Promise.resolve().then(()=>(mM(),f2))]))}getClassName(){return"PostProcess"}getEngine(){return this._engine}getEffect(){return this._effectWrapper.drawWrapper.effect}shareOutputWith(e){return this._disposeTextures(),this._shareOutputWithPostProcess=e,this}useOwnOutput(){this._textures.length==0&&(this._textures=new wi(2)),this._shareOutputWithPostProcess=null}updateEffect(e=null,t=null,i=null,r,s,a,o,l){this._effectWrapper.updateEffect(e,t,i,r,s,a,o,l),this._postProcessDefines=Array.isArray(this._effectWrapper.options.defines)?this._effectWrapper.options.defines.join(` +`):this._effectWrapper.options.defines}isReusable(){return this._reusable}markTextureDirty(){this.width=-1}_createRenderTargetTexture(e,t,i=0){for(let s=0;s=0;t--)if(e-this._textureCache[t].lastUsedRenderId>100){let i=!1;for(let r=0;r0&&this._textures.reset(),this.width=e,this.height=t;let a=null;if(i){for(let c=0;c{g.samples!==this.samples&&this._engine.updateRenderTargetTextureSampleCount(g,this.samples)}),this._flushTextureCache(),this._renderId++}return u||(u=this._getTarget()),this.enablePixelPerfectMode?(this._scaleRatio.copyFromFloats(l/f,c/h),this._engine.bindFramebuffer(u,0,l,c,this.forceFullscreenViewport)):(this._scaleRatio.copyFromFloats(1,1),this._engine.bindFramebuffer(u,0,void 0,void 0,this.forceFullscreenViewport)),(p=(_=this._engine)._debugInsertMarker)==null||p.call(_,`post process ${this.name} input`),this.onActivateObservable.notifyObservers(r),this.autoClear&&(this.alphaMode===0||this.forceAutoClearInAlphaMode)&&this._engine.clear(this.clearColor?this.clearColor:s.clearColor,s._allowPostProcessClearColor,!0,!0),this._reusable&&(this._currentRenderTextureInd=(this._currentRenderTextureInd+1)%2),u}get isSupported(){return this._effectWrapper.drawWrapper.effect.isSupported}get aspectRatio(){return this._shareOutputWithPostProcess?this._shareOutputWithPostProcess.aspectRatio:this._forcedOutputTexture?this._forcedOutputTexture.width/this._forcedOutputTexture.height:this.width/this.height}isReady(){return this._effectWrapper.isReady()}apply(){if(!this._effectWrapper.isReady())return null;this._engine.enableEffect(this._effectWrapper.drawWrapper),this._engine.setState(!1),this._engine.setDepthBuffer(!1),this._engine.setDepthWrite(!1),this.alphaConstants&&this.getEngine().setAlphaConstants(this.alphaConstants.r,this.alphaConstants.g,this.alphaConstants.b,this.alphaConstants.a),this._engine.setAlphaMode(this.alphaMode);let e;return this._shareOutputWithPostProcess?e=this._shareOutputWithPostProcess.inputTexture:this._forcedOutputTexture?e=this._forcedOutputTexture:e=this.inputTexture,this.externalTextureSamplerBinding||this._effectWrapper.drawWrapper.effect._bindTexture("textureSampler",e==null?void 0:e.texture),this._effectWrapper.drawWrapper.effect.setVector2("scale",this._scaleRatio),this.onApplyObservable.notifyObservers(this._effectWrapper.drawWrapper.effect),this._effectWrapper.bind(!0),this._effectWrapper.drawWrapper.effect}_disposeTextures(){if(this._shareOutputWithPostProcess||this._forcedOutputTexture){this._disposeTextureCache();return}this._disposeTextureCache(),this._textures.dispose()}_disposeTextureCache(){for(let e=this._textureCache.length-1;e>=0;e--)this._textureCache[e].texture.dispose();this._textureCache.length=0}setPrePassRenderer(e){return this._prePassEffectConfiguration?(this._prePassEffectConfiguration=e.addEffectConfiguration(this._prePassEffectConfiguration),this._prePassEffectConfiguration.enabled=!0,!0):!1}dispose(e){e=e||this._camera,this._useExistingThinPostProcess||this._effectWrapper.dispose(),this._disposeTextures(),this._scene&&this._scene.removePostProcess(this);let t;if(this._parentContainer&&(t=this._parentContainer.postProcesses.indexOf(this),t>-1&&this._parentContainer.postProcesses.splice(t,1),this._parentContainer=null),t=this._engine.postProcesses.indexOf(this),t!==-1&&this._engine.postProcesses.splice(t,1),this.onDisposeObservable.notifyObservers(),!!e){if(e.detachPostProcess(this),t=e._postProcesses.indexOf(this),t===0&&e._postProcesses.length>0){let i=this._camera._getFirstPostProcess();i&&i.markTextureDirty()}this.onActivateObservable.clear(),this.onAfterRenderObservable.clear(),this.onApplyObservable.clear(),this.onBeforeRenderObservable.clear(),this.onSizeChangedObservable.clear(),this.onEffectCreatedObservable.clear()}}serialize(){let e=tt.Serialize(this),t=this.getCamera()||this._scene&&this._scene.activeCamera;return e.customType="BABYLON."+this.getClassName(),e.cameraId=t?t.id:null,e.reusable=this._reusable,e.textureType=this._textureType,e.fragmentUrl=this._fragmentUrl,e.parameters=this._parameters,e.samplers=this._samplers,e.uniformBuffers=this._uniformBuffers,e.options=this._options,e.defines=this._postProcessDefines,e.textureFormat=this._textureFormat,e.vertexUrl=this._vertexUrl,e.indexParameters=this._indexParameters,e}clone(){let e=this.serialize();e._engine=this._engine,e.cameraId=null;let t=n.Parse(e,this._scene,"");return t?(t.onActivateObservable=this.onActivateObservable.clone(),t.onSizeChangedObservable=this.onSizeChangedObservable.clone(),t.onApplyObservable=this.onApplyObservable.clone(),t.onBeforeRenderObservable=this.onBeforeRenderObservable.clone(),t.onAfterRenderObservable=this.onAfterRenderObservable.clone(),t._prePassEffectConfiguration=this._prePassEffectConfiguration,t):null}static Parse(e,t,i){let r=mn(e.customType);if(!r||!r._Parse)return null;let s=t?t.getCameraById(e.cameraId):null;return r._Parse(e,s,t,i)}static _Parse(e,t,i,r){return tt.Parse(()=>new n(e.name,e.fragmentUrl,e.parameters,e.samplers,e.options,t,e.renderTargetSamplingMode,e._engine,e.reusable,e.defines,e.textureType,e.vertexUrl,e.indexParameters,!1,e.textureFormat),e,i,r)}};P([w()],Ri.prototype,"uniqueId",void 0);P([w()],Ri.prototype,"name",null);P([w()],Ri.prototype,"width",void 0);P([w()],Ri.prototype,"height",void 0);P([w()],Ri.prototype,"renderTargetSamplingMode",void 0);P([ku()],Ri.prototype,"clearColor",void 0);P([w()],Ri.prototype,"autoClear",void 0);P([w()],Ri.prototype,"forceAutoClearInAlphaMode",void 0);P([w()],Ri.prototype,"alphaMode",null);P([w()],Ri.prototype,"alphaConstants",void 0);P([w()],Ri.prototype,"enablePixelPerfectMode",void 0);P([w()],Ri.prototype,"forceFullscreenViewport",void 0);P([w()],Ri.prototype,"scaleMode",void 0);P([w()],Ri.prototype,"alwaysForcePOT",void 0);P([w("samples")],Ri.prototype,"_samples",void 0);P([w()],Ri.prototype,"adaptScaleToCurrentViewport",void 0);Ft("BABYLON.PostProcess",Ri)});var _2={};$e(_2,{passPixelShaderWGSL:()=>Gie});var RM,p2,Gie,g2=C(()=>{G();RM="passPixelShader",p2=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_2d; #define CUSTOM_FRAGMENT_DEFINITIONS @fragment -fn main(input: FragmentInputs)->FragmentOutputs {fragmentOutputs.color=textureSample(textureSampler,textureSamplerSampler,input.vUV);}`;S.ShadersStoreWGSL[mM]||(S.ShadersStoreWGSL[mM]=n2);vie={name:mM,shader:n2}});var l2={};et(l2,{passCubePixelShaderWGSL:()=>Eie});var pM,o2,Eie,c2=C(()=>{k();pM="passCubePixelShader",o2=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_cube; +fn main(input: FragmentInputs)->FragmentOutputs {fragmentOutputs.color=textureSample(textureSampler,textureSamplerSampler,input.vUV);}`;T.ShadersStoreWGSL[RM]||(T.ShadersStoreWGSL[RM]=p2);Gie={name:RM,shader:p2}});var E2={};$e(E2,{passCubePixelShaderWGSL:()=>kie});var bM,v2,kie,S2=C(()=>{G();bM="passCubePixelShader",v2=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_cube; #define CUSTOM_FRAGMENT_DEFINITIONS @fragment fn main(input: FragmentInputs)->FragmentOutputs {var uv: vec2f=input.vUV*2.0-1.0; @@ -4186,7 +4186,7 @@ fragmentOutputs.color=textureSample(textureSampler,textureSamplerSampler,vec3f(u #ifdef NEGATIVEZ fragmentOutputs.color=textureSample(textureSampler,textureSamplerSampler,vec3f(uv,-1.001)); #endif -}`;S.ShadersStoreWGSL[pM]||(S.ShadersStoreWGSL[pM]=o2);Eie={name:pM,shader:o2}});var h2={};et(h2,{passCubePixelShader:()=>Sie});var _M,f2,Sie,d2=C(()=>{k();_M="passCubePixelShader",f2=`varying vec2 vUV;uniform samplerCube textureSampler; +}`;T.ShadersStoreWGSL[bM]||(T.ShadersStoreWGSL[bM]=v2);kie={name:bM,shader:v2}});var A2={};$e(A2,{passCubePixelShader:()=>Wie});var IM,T2,Wie,x2=C(()=>{G();IM="passCubePixelShader",T2=`varying vec2 vUV;uniform samplerCube textureSampler; #define CUSTOM_FRAGMENT_DEFINITIONS void main(void) {vec2 uv=vUV*2.0-1.0; @@ -4208,8 +4208,8 @@ gl_FragColor=textureCube(textureSampler,vec3(uv,1.001)); #ifdef NEGATIVEZ gl_FragColor=textureCube(textureSampler,vec3(uv,-1.001)); #endif -}`;S.ShadersStore[_M]||(S.ShadersStore[_M]=f2);Sie={name:_M,shader:f2}});var Gl,T_,gM=C(()=>{Lh();Pi();Gl=class n extends kr{_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.all([Promise.resolve().then(()=>(a2(),s2))]))):t.push(Promise.all([Promise.resolve().then(()=>(fM(),cM))])),super._gatherImports(e,t)}constructor(e,t=null,i){let r={name:e,engine:t||Le.LastCreatedEngine,useShaderStore:!0,useAsPostProcess:!0,fragmentShader:n.FragmentUrl,...i};r.engine||(r.engine=Le.LastCreatedEngine),super(r)}};Gl.FragmentUrl="pass";T_=class n extends kr{_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.all([Promise.resolve().then(()=>(c2(),l2))]))):t.push(Promise.all([Promise.resolve().then(()=>(d2(),h2))])),super._gatherImports(e,t)}constructor(e,t=null,i){super({...i,name:e,engine:t||Le.LastCreatedEngine,useShaderStore:!0,useAsPostProcess:!0,fragmentShader:n.FragmentUrl,defines:"#define POSITIVEX"}),this._face=0}get face(){return this._face}set face(e){if(!(e<0||e>5))switch(this._face=e,this._face){case 0:this.updateEffect("#define POSITIVEX");break;case 1:this.updateEffect("#define NEGATIVEX");break;case 2:this.updateEffect("#define POSITIVEY");break;case 3:this.updateEffect("#define NEGATIVEY");break;case 4:this.updateEffect("#define POSITIVEZ");break;case 5:this.updateEffect("#define NEGATIVEZ");break}}};T_.FragmentUrl="passCube"});var Oh,vM,EM=C(()=>{kt();Vl();Lr();Vi();_r();gM();Ut();Oh=class n extends Ri{getClassName(){return"PassPostProcess"}constructor(e,t,i=null,r,s,a,o=0,l=!1){let c={size:typeof t=="number"?t:void 0,camera:i,samplingMode:r,engine:s,reusable:a,textureType:o,blockCompilation:l,...t};super(e,Gl.FragmentUrl,{effectWrapper:typeof t=="number"||!t.effectWrapper?new Gl(e,s,c):void 0,...c})}static _Parse(e,t,i,r){return tt.Parse(()=>new n(e.name,e.options,t,e.renderTargetSamplingMode,e._engine,e.reusable),e,i,r)}};wt("BABYLON.PassPostProcess",Oh);vM=class n extends Ri{get face(){return this._effectWrapper.face}set face(e){this._effectWrapper.face=e}getClassName(){return"PassCubePostProcess"}constructor(e,t,i=null,r,s,a,o=0,l=!1){let c={size:typeof t=="number"?t:void 0,camera:i,samplingMode:r,engine:s,reusable:a,textureType:o,blockCompilation:l,...t};super(e,Gl.FragmentUrl,{effectWrapper:typeof t=="number"||!t.effectWrapper?new T_(e,s,c):void 0,...c})}static _Parse(e,t,i,r){return tt.Parse(()=>new n(e.name,e.options,t,e.renderTargetSamplingMode,e._engine,e.reusable),e,i,r)}};P([F()],vM.prototype,"face",null);Re._RescalePostProcessFactory=n=>new Oh("rescale",1,null,2,n,!1,0)});function m2(n,e,t,i,r,s,a,o){let l=e.getEngine();return e.isReady=!1,r=r!=null?r:e.samplingMode,i=i!=null?i:e.type,s=s!=null?s:e.format,a=a!=null?a:e.width,o=o!=null?o:e.height,i===-1&&(i=0),new Promise(c=>{let f=new Ri("postprocess",n,null,null,1,null,r,l,!1,void 0,i,void 0,null,!1,s);f.externalTextureSamplerBinding=!0;let h=l.createRenderTargetTexture({width:a,height:o},{generateDepthBuffer:!1,generateMipMaps:!1,generateStencilBuffer:!1,samplingMode:r,type:i,format:s});f.onEffectCreatedObservable.addOnce(d=>{d.executeWhenCompiled(()=>{f.onApply=u=>{u._bindTexture("textureSampler",e),u.setFloat2("scale",1,1)},t.postProcessManager.directRender([f],h,!0),l.restoreDefaultFramebuffer(),l._releaseTexture(e),f&&f.dispose(),h._swapAndDie(e),e.type=i,e.format=5,e.isReady=!0,c(e)})})})}function Nh(n){vT||(vT=new Float32Array(1),u2=new Int32Array(vT.buffer)),vT[0]=n;let e=u2[0],t=e>>16&32768,i=e>>12&2047,r=e>>23&255;return r<103?t:r>142?(t|=31744,t|=(r==255?0:1)&&e&8388607,t):r<113?(i|=2048,t|=(i>>114-r)+(i>>113-r&1),t):(t|=r-112<<10|i>>1,t+=i&1,t)}function kl(n){let e=(n&32768)>>15,t=(n&31744)>>10,i=n&1023;return t===0?(e?-1:1)*Math.pow(2,-14)*(i/Math.pow(2,10)):t==31?i?NaN:(e?-1:1)*(1/0):(e?-1:1)*Math.pow(2,t-15)*(1+i/Math.pow(2,10))}var vT,u2,SM=C(()=>{Gr();af();EM();Vl();xn()});function AM(n){return n.split(" ").filter(e=>e!=="").map(e=>parseFloat(e))}function TM(n,e,t){for(;t.length!==e;){let i=AM(n.lines[n.index++]);t.push(...i)}}function Tie(n,e,t){let i=0,r=0,s=0,a=0,o=0,l=0;for(let g=0;g0&&!i.lines[i.index].includes("TILT=");)i.index++;i.lines[i.index].includes("INCLUDE"),i.index++;let s=AM(i.lines[i.index++]);r.numberOfLights=s[0],r.lumensPerLamp=s[1],r.candelaMultiplier=s[2],r.numberOfVerticalAngles=s[3],r.numberOfHorizontalAngles=s[4],r.photometricType=s[5],r.unitsType=s[6],r.width=s[7],r.length=s[8],r.height=s[9];let a=AM(i.lines[i.index++]);r.ballastFactor=a[0],r.fileGenerationType=a[1],r.inputWatts=a[2];for(let m=0;m0)for(let m=0;m=u)&&(_%=u*2,_>u&&(_=u*2-_)),h[p+_*l]=Tie(r,p,_)}return{width:c/2,height:1,data:h}}var _2=C(()=>{xn()});var g2={};et(g2,{_IESTextureLoader:()=>xM});var xM,v2=C(()=>{_2();xM=class{constructor(){this.supportCascades=!1}loadCubeData(){throw".ies not supported in Cube."}loadData(e,t,i){let r=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),s=p2(r);i(s.width,s.height,!!t.useMipMaps,!1,()=>{let a=t.getEngine();t.type=1,t.format=6,t._gammaSpace=!1,a._uploadDataToTextureDirectly(t,s.data)})}}});var E2={};et(E2,{_DDSTextureLoader:()=>RM});var RM,S2=C(()=>{f_();bM();RM=class{constructor(){this.supportCascades=!0}loadCubeData(e,t,i,r){let s=t.getEngine(),a,o=!1,l=1e3;if(Array.isArray(e))for(let c=0;c1)&&t.generateMipMaps,s._unpackFlipY(a.isCompressed),eo.UploadDDSLevels(s,t,f,a,o,6,-1,c),!a.isFourCC&&a.mipmapCount===1?s.generateMipMapsForCubemap(t):l=a.mipmapCount-1}else{let c=e;a=eo.GetDDSInfo(c),t.width=a.width,t.height=a.height,i&&(a.sphericalPolynomial=new Xo),o=(a.isRGB||a.isLuminance||a.mipmapCount>1)&&t.generateMipMaps,s._unpackFlipY(a.isCompressed),eo.UploadDDSLevels(s,t,c,a,o,6),!a.isFourCC&&a.mipmapCount===1?s.generateMipMapsForCubemap(t,!1):l=a.mipmapCount-1}s._setCubeMapTextureParams(t,o,l),t.isReady=!0,t.onLoadedObservable.notifyObservers(t),t.onLoadedObservable.clear(),r&&r({isDDS:!0,width:t.width,info:a,data:e,texture:t})}loadData(e,t,i){let r=eo.GetDDSInfo(e),s=(r.isRGB||r.isLuminance||r.mipmapCount>1)&&t.generateMipMaps&&Math.max(r.width,r.height)>>r.mipmapCount-1===1;i(r.width,r.height,s,r.isFourCC,()=>{eo.UploadDDSLevels(t.getEngine(),t,e,r,s,1)})}}});function T2(){let n={cTFETC1:0,cTFETC2:1,cTFBC1:2,cTFBC3:3,cTFBC4:4,cTFBC5:5,cTFBC7:6,cTFPVRTC1_4_RGB:8,cTFPVRTC1_4_RGBA:9,cTFASTC_4x4:10,cTFATC_RGB:11,cTFATC_RGBA_INTERPOLATED_ALPHA:12,cTFRGBA32:13,cTFRGB565:14,cTFBGR565:15,cTFRGBA4444:16,cTFFXT1_RGB:17,cTFPVRTC2_4_RGB:18,cTFPVRTC2_4_RGBA:19,cTFETC2_EAC_R11:20,cTFETC2_EAC_RG11:21},e=null;onmessage=a=>{if(a.data.action==="init"){if(a.data.url)try{importScripts(a.data.url)}catch(o){postMessage({action:"error",error:o})}e||(e=BASIS({wasmBinary:a.data.wasmBinary})),e!==null&&e.then(o=>{BASIS=o,o.initializeBasis(),postMessage({action:"init"})})}else if(a.data.action==="transcode"){let o=a.data.config,l=a.data.imageData,c=new BASIS.BasisFile(l),f=i(c),h=a.data.ignoreSupportedFormats?null:t(a.data.config,f),d=!1;h===null&&(d=!0,h=f.hasAlpha?n.cTFBC3:n.cTFBC1);let u=!0;c.startTranscoding()||(u=!1);let m=[];for(let _=0;_>2&3],h[x++]=f[v>>4&3],h[x]=f[v>>6&3]}}return h}}async function A2(n,e,t){return await new Promise((i,r)=>{let s=a=>{a.data.action==="init"?(n.removeEventListener("message",s),i(n)):a.data.action==="error"&&r(a.data.error||"error initializing worker")};n.addEventListener("message",s),n.postMessage({action:"init",url:t?he.GetBabylonScriptURL(t):void 0,wasmBinary:e},[e])})}var x2=C(()=>{Ci()});var Wl,of,Aie,IM,Fh,xie,Rie,bie,ST,ET,TT,MM,R2=C(()=>{Ci();Gr();ks();x2();(function(n){n[n.cTFETC1=0]="cTFETC1",n[n.cTFETC2=1]="cTFETC2",n[n.cTFBC1=2]="cTFBC1",n[n.cTFBC3=3]="cTFBC3",n[n.cTFBC4=4]="cTFBC4",n[n.cTFBC5=5]="cTFBC5",n[n.cTFBC7=6]="cTFBC7",n[n.cTFPVRTC1_4_RGB=8]="cTFPVRTC1_4_RGB",n[n.cTFPVRTC1_4_RGBA=9]="cTFPVRTC1_4_RGBA",n[n.cTFASTC_4x4=10]="cTFASTC_4x4",n[n.cTFATC_RGB=11]="cTFATC_RGB",n[n.cTFATC_RGBA_INTERPOLATED_ALPHA=12]="cTFATC_RGBA_INTERPOLATED_ALPHA",n[n.cTFRGBA32=13]="cTFRGBA32",n[n.cTFRGB565=14]="cTFRGB565",n[n.cTFBGR565=15]="cTFBGR565",n[n.cTFRGBA4444=16]="cTFRGBA4444",n[n.cTFFXT1_RGB=17]="cTFFXT1_RGB",n[n.cTFPVRTC2_4_RGB=18]="cTFPVRTC2_4_RGB",n[n.cTFPVRTC2_4_RGBA=19]="cTFPVRTC2_4_RGBA",n[n.cTFETC2_EAC_R11=20]="cTFETC2_EAC_R11",n[n.cTFETC2_EAC_RG11=21]="cTFETC2_EAC_RG11"})(Wl||(Wl={}));of={JSModuleURL:`${he._DefaultCdnUrl}/basisTranscoder/1/basis_transcoder.js`,WasmModuleURL:`${he._DefaultCdnUrl}/basisTranscoder/1/basis_transcoder.wasm`},Aie=(n,e)=>{let t;switch(n){case Wl.cTFETC1:t=36196;break;case Wl.cTFBC1:t=33776;break;case Wl.cTFBC4:t=33779;break;case Wl.cTFASTC_4x4:t=37808;break;case Wl.cTFETC2:t=37496;break;case Wl.cTFBC7:t=36492;break}if(t===void 0)throw"The chosen Basis transcoder format is not currently supported";return t},IM=null,Fh=null,xie=0,Rie=!1,bie=async()=>(IM||(IM=new Promise((n,e)=>{Fh?n(Fh):he.LoadFileAsync(he.GetBabylonScriptURL(of.WasmModuleURL)).then(t=>{if(typeof URL!="function")return e("Basis transcoder requires an environment with a URL constructor");let i=URL.createObjectURL(new Blob([`(${T2})()`],{type:"application/javascript"}));Fh=new Worker(i),A2(Fh,t,of.JSModuleURL).then(n,e)}).catch(e)})),await IM),ST=async(n,e)=>{let t=n instanceof ArrayBuffer?new Uint8Array(n):n;return await new Promise((i,r)=>{bie().then(()=>{let s=xie++,a=l=>{l.data.action==="transcode"&&l.data.id===s&&(Fh.removeEventListener("message",a),l.data.success?i(l.data):r("Transcode is not supported on this device"))};Fh.addEventListener("message",a);let o=new Uint8Array(t.byteLength);o.set(new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),Fh.postMessage({action:"transcode",id:s,imageData:o,config:e,ignoreSupportedFormats:Rie},[o.buffer])},s=>{r(s)})})},ET=(n,e)=>{var i,r;let t=(i=e._gl)==null?void 0:i.TEXTURE_2D;n.isCube&&(t=(r=e._gl)==null?void 0:r.TEXTURE_CUBE_MAP),e._bindTextureDirectly(t,n,!0)},TT=(n,e)=>{let t=n.getEngine();for(let i=0;i{t._releaseTexture(s),ET(n,t)})}else n._invertVScale=!n.invertY,n.width=r.width+3&-4,n.height=r.height+3&-4,n.samplingMode=2,ET(n,t),t._uploadDataToTextureDirectly(n,new Uint16Array(r.transcodedPixels.buffer),i,0,4,!0);else{n.width=r.width,n.height=r.height,n.generateMipMaps=e.fileInfo.images[i].levels.length>1;let s=MM.GetInternalFormatFromBasisFormat(e.format,t);n.format=s,ET(n,t);let a=e.fileInfo.images[i].levels;for(let o=0;oCM});var CM,I2=C(()=>{R2();Ci();CM=class{constructor(){this.supportCascades=!1}loadCubeData(e,t,i,r,s){if(Array.isArray(e))return;let a=t.getEngine().getCaps(),o={supportedCompressionFormats:{etc1:!!a.etc1,s3tc:!!a.s3tc,pvrtc:!!a.pvrtc,etc2:!!a.etc2,astc:!!a.astc,bc7:!!a.bptc}};ST(e,o).then(l=>{let c=l.fileInfo.images[0].levels.length>1&&t.generateMipMaps;TT(t,l),t.getEngine()._setCubeMapTextureParams(t,c),t.isReady=!0,t.onLoadedObservable.notifyObservers(t),t.onLoadedObservable.clear(),r&&r()}).catch(l=>{he.Warn("Failed to transcode Basis file, transcoding may not be supported on this device"),t.isReady=!0,s&&s(l)})}loadData(e,t,i){let r=t.getEngine().getCaps(),s={supportedCompressionFormats:{etc1:!!r.etc1,s3tc:!!r.s3tc,pvrtc:!!r.pvrtc,etc2:!!r.etc2,astc:!!r.astc,bc7:!!r.bptc}};ST(e,s).then(a=>{let o=a.fileInfo.images[0].levels[0],l=a.fileInfo.images[0].levels.length>1&&t.generateMipMaps;i(o.width,o.height,l,a.format!==-1,()=>{TT(t,a)})}).catch(a=>{he.Warn("Failed to transcode Basis file, transcoding may not be supported on this device"),he.Warn(`Failed to transcode Basis file: ${a}`),i(0,0,!1,!1,()=>{},!0)})}}});var A_,M2=C(()=>{A_=class{constructor(){this._count=0,this._data={}}copyFrom(e){this.clear(),e.forEach((t,i)=>this.add(t,i))}get(e){let t=this._data[e];if(t!==void 0)return t}getOrAddWithFactory(e,t){let i=this.get(e);return i!==void 0||(i=t(e),i&&this.add(e,i)),i}getOrAdd(e,t){let i=this.get(e);return i!==void 0?i:(this.add(e,t),t)}contains(e){return this._data[e]!==void 0}add(e,t){return this._data[e]!==void 0?!1:(this._data[e]=t,++this._count,!0)}set(e,t){return this._data[e]===void 0?!1:(this._data[e]=t,!0)}getAndRemove(e){let t=this.get(e);return t!==void 0?(delete this._data[e],--this._count,t):null}remove(e){return this.contains(e)?(delete this._data[e],--this._count,!0):!1}clear(){this._data={},this._count=0}get count(){return this._count}forEach(e){for(let t in this._data){let i=this._data[t];e(t,i)}}first(e){for(let t in this._data){let i=this._data[t],r=e(t,i);if(r)return r}return null}}});function AT(n){n.push("vCameraColorCurveNeutral","vCameraColorCurvePositive","vCameraColorCurveNegative")}var yM=C(()=>{});var Jr,C2=C(()=>{kt();Ut();Ht();_r();yM();Jr=class n{constructor(){this._dirty=!0,this._tempColor=new lt(0,0,0,0),this._globalCurve=new lt(0,0,0,0),this._highlightsCurve=new lt(0,0,0,0),this._midtonesCurve=new lt(0,0,0,0),this._shadowsCurve=new lt(0,0,0,0),this._positiveCurve=new lt(0,0,0,0),this._negativeCurve=new lt(0,0,0,0),this._globalHue=30,this._globalDensity=0,this._globalSaturation=0,this._globalExposure=0,this._highlightsHue=30,this._highlightsDensity=0,this._highlightsSaturation=0,this._highlightsExposure=0,this._midtonesHue=30,this._midtonesDensity=0,this._midtonesSaturation=0,this._midtonesExposure=0,this._shadowsHue=30,this._shadowsDensity=0,this._shadowsSaturation=0,this._shadowsExposure=0}get globalHue(){return this._globalHue}set globalHue(e){this._globalHue=e,this._dirty=!0}get globalDensity(){return this._globalDensity}set globalDensity(e){this._globalDensity=e,this._dirty=!0}get globalSaturation(){return this._globalSaturation}set globalSaturation(e){this._globalSaturation=e,this._dirty=!0}get globalExposure(){return this._globalExposure}set globalExposure(e){this._globalExposure=e,this._dirty=!0}get highlightsHue(){return this._highlightsHue}set highlightsHue(e){this._highlightsHue=e,this._dirty=!0}get highlightsDensity(){return this._highlightsDensity}set highlightsDensity(e){this._highlightsDensity=e,this._dirty=!0}get highlightsSaturation(){return this._highlightsSaturation}set highlightsSaturation(e){this._highlightsSaturation=e,this._dirty=!0}get highlightsExposure(){return this._highlightsExposure}set highlightsExposure(e){this._highlightsExposure=e,this._dirty=!0}get midtonesHue(){return this._midtonesHue}set midtonesHue(e){this._midtonesHue=e,this._dirty=!0}get midtonesDensity(){return this._midtonesDensity}set midtonesDensity(e){this._midtonesDensity=e,this._dirty=!0}get midtonesSaturation(){return this._midtonesSaturation}set midtonesSaturation(e){this._midtonesSaturation=e,this._dirty=!0}get midtonesExposure(){return this._midtonesExposure}set midtonesExposure(e){this._midtonesExposure=e,this._dirty=!0}get shadowsHue(){return this._shadowsHue}set shadowsHue(e){this._shadowsHue=e,this._dirty=!0}get shadowsDensity(){return this._shadowsDensity}set shadowsDensity(e){this._shadowsDensity=e,this._dirty=!0}get shadowsSaturation(){return this._shadowsSaturation}set shadowsSaturation(e){this._shadowsSaturation=e,this._dirty=!0}get shadowsExposure(){return this._shadowsExposure}set shadowsExposure(e){this._shadowsExposure=e,this._dirty=!0}getClassName(){return"ColorCurves"}static Bind(e,t,i="vCameraColorCurvePositive",r="vCameraColorCurveNeutral",s="vCameraColorCurveNegative"){e._dirty&&(e._dirty=!1,e._getColorGradingDataToRef(e._globalHue,e._globalDensity,e._globalSaturation,e._globalExposure,e._globalCurve),e._getColorGradingDataToRef(e._highlightsHue,e._highlightsDensity,e._highlightsSaturation,e._highlightsExposure,e._tempColor),e._tempColor.multiplyToRef(e._globalCurve,e._highlightsCurve),e._getColorGradingDataToRef(e._midtonesHue,e._midtonesDensity,e._midtonesSaturation,e._midtonesExposure,e._tempColor),e._tempColor.multiplyToRef(e._globalCurve,e._midtonesCurve),e._getColorGradingDataToRef(e._shadowsHue,e._shadowsDensity,e._shadowsSaturation,e._shadowsExposure,e._tempColor),e._tempColor.multiplyToRef(e._globalCurve,e._shadowsCurve),e._highlightsCurve.subtractToRef(e._midtonesCurve,e._positiveCurve),e._midtonesCurve.subtractToRef(e._shadowsCurve,e._negativeCurve)),t&&(t.setFloat4(i,e._positiveCurve.r,e._positiveCurve.g,e._positiveCurve.b,e._positiveCurve.a),t.setFloat4(r,e._midtonesCurve.r,e._midtonesCurve.g,e._midtonesCurve.b,e._midtonesCurve.a),t.setFloat4(s,e._negativeCurve.r,e._negativeCurve.g,e._negativeCurve.b,e._negativeCurve.a))}_getColorGradingDataToRef(e,t,i,r,s){e!=null&&(e=n._Clamp(e,0,360),t=n._Clamp(t,-100,100),i=n._Clamp(i,-100,100),r=n._Clamp(r,-100,100),t=n._ApplyColorGradingSliderNonlinear(t),t*=.5,r=n._ApplyColorGradingSliderNonlinear(r),t<0&&(t*=-1,e=(e+180)%360),n._FromHSBToRef(e,t,50+.25*r,s),s.scaleToRef(2,s),s.a=1+.01*i)}static _ApplyColorGradingSliderNonlinear(e){e/=100;let t=Math.abs(e);return t=Math.pow(t,2),e<0&&(t*=-1),t*=100,t}static _FromHSBToRef(e,t,i,r){let s=n._Clamp(e,0,360),a=n._Clamp(t/100,0,1),o=n._Clamp(i/100,0,1);if(a===0)r.r=o,r.g=o,r.b=o;else{s/=60;let l=Math.floor(s),c=s-l,f=o*(1-a),h=o*(1-a*c),d=o*(1-a*(1-c));switch(l){case 0:r.r=o,r.g=d,r.b=f;break;case 1:r.r=h,r.g=o,r.b=f;break;case 2:r.r=f,r.g=o,r.b=d;break;case 3:r.r=f,r.g=h,r.b=o;break;case 4:r.r=d,r.g=f,r.b=o;break;default:r.r=o,r.g=f,r.b=h;break}}r.a=1}static _Clamp(e,t,i){return Math.min(Math.max(e,t),i)}clone(){return tt.Clone(()=>new n,this)}serialize(){return tt.Serialize(this)}static Parse(e){return tt.Parse(()=>new n,e,null,null)}};Jr.PrepareUniforms=AT;P([F()],Jr.prototype,"_globalHue",void 0);P([F()],Jr.prototype,"_globalDensity",void 0);P([F()],Jr.prototype,"_globalSaturation",void 0);P([F()],Jr.prototype,"_globalExposure",void 0);P([F()],Jr.prototype,"_highlightsHue",void 0);P([F()],Jr.prototype,"_highlightsDensity",void 0);P([F()],Jr.prototype,"_highlightsSaturation",void 0);P([F()],Jr.prototype,"_highlightsExposure",void 0);P([F()],Jr.prototype,"_midtonesHue",void 0);P([F()],Jr.prototype,"_midtonesDensity",void 0);P([F()],Jr.prototype,"_midtonesSaturation",void 0);P([F()],Jr.prototype,"_midtonesExposure",void 0);tt._ColorCurvesParser=Jr.Parse});function y2(n,e){e.EXPOSURE&&n.push("exposureLinear"),e.CONTRAST&&n.push("contrast"),e.COLORGRADING&&n.push("colorTransformSettings"),(e.VIGNETTE||e.DITHER)&&n.push("vInverseScreenSize"),e.VIGNETTE&&(n.push("vignetteSettings1"),n.push("vignetteSettings2")),e.COLORCURVES&&AT(n),e.DITHER&&n.push("ditherIntensity")}function P2(n,e){e.COLORGRADING&&n.push("txColorTransform")}var D2=C(()=>{yM()});var Wt,x_=C(()=>{kt();Ut();hi();Ht();C2();Wo();_r();D2();Vi();Wt=class n{constructor(){this.colorCurves=new Jr,this._colorCurvesEnabled=!1,this._colorGradingEnabled=!1,this._colorGradingWithGreenDepth=!0,this._colorGradingBGR=!0,this._exposure=1,this._toneMappingEnabled=!1,this._toneMappingType=n.TONEMAPPING_STANDARD,this._contrast=1,this.vignetteStretch=0,this.vignetteCenterX=0,this.vignetteCenterY=0,this.vignetteWeight=1.5,this.vignetteColor=new lt(0,0,0,0),this.vignetteCameraFov=.5,this._vignetteBlendMode=n.VIGNETTEMODE_MULTIPLY,this._vignetteEnabled=!1,this._ditheringEnabled=!1,this._ditheringIntensity=1/255,this._skipFinalColorClamp=!1,this._applyByPostProcess=!1,this._isEnabled=!0,this.outputTextureWidth=0,this.outputTextureHeight=0,this.onUpdateParameters=new ee}get colorCurvesEnabled(){return this._colorCurvesEnabled}set colorCurvesEnabled(e){this._colorCurvesEnabled!==e&&(this._colorCurvesEnabled=e,this._updateParameters())}get colorGradingTexture(){return this._colorGradingTexture}set colorGradingTexture(e){this._colorGradingTexture!==e&&(this._colorGradingTexture=e,this._updateParameters())}get colorGradingEnabled(){return this._colorGradingEnabled}set colorGradingEnabled(e){this._colorGradingEnabled!==e&&(this._colorGradingEnabled=e,this._updateParameters())}get colorGradingWithGreenDepth(){return this._colorGradingWithGreenDepth}set colorGradingWithGreenDepth(e){this._colorGradingWithGreenDepth!==e&&(this._colorGradingWithGreenDepth=e,this._updateParameters())}get colorGradingBGR(){return this._colorGradingBGR}set colorGradingBGR(e){this._colorGradingBGR!==e&&(this._colorGradingBGR=e,this._updateParameters())}get exposure(){return this._exposure}set exposure(e){this._exposure!==e&&(this._exposure=e,this._updateParameters())}get toneMappingEnabled(){return this._toneMappingEnabled}set toneMappingEnabled(e){this._toneMappingEnabled!==e&&(this._toneMappingEnabled=e,this._updateParameters())}get toneMappingType(){return this._toneMappingType}set toneMappingType(e){this._toneMappingType!==e&&(this._toneMappingType=e,this._updateParameters())}get contrast(){return this._contrast}set contrast(e){this._contrast!==e&&(this._contrast=e,this._updateParameters())}get vignetteCentreY(){return this.vignetteCenterY}set vignetteCentreY(e){this.vignetteCenterY=e}get vignetteCentreX(){return this.vignetteCenterX}set vignetteCentreX(e){this.vignetteCenterX=e}get vignetteBlendMode(){return this._vignetteBlendMode}set vignetteBlendMode(e){this._vignetteBlendMode!==e&&(this._vignetteBlendMode=e,this._updateParameters())}get vignetteEnabled(){return this._vignetteEnabled}set vignetteEnabled(e){this._vignetteEnabled!==e&&(this._vignetteEnabled=e,this._updateParameters())}get ditheringEnabled(){return this._ditheringEnabled}set ditheringEnabled(e){this._ditheringEnabled!==e&&(this._ditheringEnabled=e,this._updateParameters())}get ditheringIntensity(){return this._ditheringIntensity}set ditheringIntensity(e){this._ditheringIntensity!==e&&(this._ditheringIntensity=e,this._updateParameters())}get skipFinalColorClamp(){return this._skipFinalColorClamp}set skipFinalColorClamp(e){this._skipFinalColorClamp!==e&&(this._skipFinalColorClamp=e,this._updateParameters())}get applyByPostProcess(){return this._applyByPostProcess}set applyByPostProcess(e){this._applyByPostProcess!==e&&(this._applyByPostProcess=e,this._updateParameters())}get isEnabled(){return this._isEnabled}set isEnabled(e){this._isEnabled!==e&&(this._isEnabled=e,this._updateParameters())}_updateParameters(){this.onUpdateParameters.notifyObservers(this)}getClassName(){return"ImageProcessingConfiguration"}prepareDefines(e,t=!1){if(t!==this.applyByPostProcess||!this._isEnabled){e.VIGNETTE=!1,e.TONEMAPPING=0,e.CONTRAST=!1,e.EXPOSURE=!1,e.COLORCURVES=!1,e.COLORGRADING=!1,e.COLORGRADING3D=!1,e.DITHER=!1,e.IMAGEPROCESSING=!1,e.SKIPFINALCOLORCLAMP=this.skipFinalColorClamp,e.IMAGEPROCESSINGPOSTPROCESS=this.applyByPostProcess&&this._isEnabled;return}if(e.VIGNETTE=this.vignetteEnabled,e.VIGNETTEBLENDMODEMULTIPLY=this.vignetteBlendMode===n._VIGNETTEMODE_MULTIPLY,e.VIGNETTEBLENDMODEOPAQUE=!e.VIGNETTEBLENDMODEMULTIPLY,!this._toneMappingEnabled)e.TONEMAPPING=0;else switch(this._toneMappingType){case n.TONEMAPPING_KHR_PBR_NEUTRAL:e.TONEMAPPING=3;break;case n.TONEMAPPING_ACES:e.TONEMAPPING=2;break;default:e.TONEMAPPING=1;break}e.CONTRAST=this.contrast!==1,e.EXPOSURE=this.exposure!==1,e.COLORCURVES=this.colorCurvesEnabled&&!!this.colorCurves,e.COLORGRADING=this.colorGradingEnabled&&!!this.colorGradingTexture,e.COLORGRADING?e.COLORGRADING3D=this.colorGradingTexture.is3D:e.COLORGRADING3D=!1,e.SAMPLER3DGREENDEPTH=this.colorGradingWithGreenDepth,e.SAMPLER3DBGRMAP=this.colorGradingBGR,e.DITHER=this._ditheringEnabled,e.IMAGEPROCESSINGPOSTPROCESS=this.applyByPostProcess,e.SKIPFINALCOLORCLAMP=this.skipFinalColorClamp,e.IMAGEPROCESSING=e.VIGNETTE||!!e.TONEMAPPING||e.CONTRAST||e.EXPOSURE||e.COLORCURVES||e.COLORGRADING||e.DITHER}isReady(){return!this.colorGradingEnabled||!this.colorGradingTexture||this.colorGradingTexture.isReady()}bind(e,t){if(this._colorCurvesEnabled&&this.colorCurves&&Jr.Bind(this.colorCurves,e),this._vignetteEnabled||this._ditheringEnabled){let i=1/(this.outputTextureWidth||e.getEngine().getRenderWidth()),r=1/(this.outputTextureHeight||e.getEngine().getRenderHeight());if(e.setFloat2("vInverseScreenSize",i,r),this._ditheringEnabled&&e.setFloat("ditherIntensity",.5*this._ditheringIntensity),this._vignetteEnabled){let s=t!=null?t:r/i,a=Math.tan(this.vignetteCameraFov*.5),o=a*s,l=Math.sqrt(o*a);o=a_(o,l,this.vignetteStretch),a=a_(a,l,this.vignetteStretch),e.setFloat4("vignetteSettings1",o,a,-o*this.vignetteCenterX,-a*this.vignetteCenterY);let c=-2*this.vignetteWeight;e.setFloat4("vignetteSettings2",this.vignetteColor.r,this.vignetteColor.g,this.vignetteColor.b,c)}}if(e.setFloat("exposureLinear",this.exposure),e.setFloat("contrast",this.contrast),this.colorGradingTexture){e.setTexture("txColorTransform",this.colorGradingTexture);let i=this.colorGradingTexture.getSize().height;e.setFloat4("colorTransformSettings",(i-1)/i,.5/i,i,this.colorGradingTexture.level)}}clone(){return tt.Clone(()=>new n,this)}serialize(){return tt.Serialize(this)}static Parse(e){let t=tt.Parse(()=>new n,e,null,null);return e.vignetteCentreX!==void 0&&(t.vignetteCenterX=e.vignetteCentreX),e.vignetteCentreY!==void 0&&(t.vignetteCenterY=e.vignetteCentreY),t}static get VIGNETTEMODE_MULTIPLY(){return this._VIGNETTEMODE_MULTIPLY}static get VIGNETTEMODE_OPAQUE(){return this._VIGNETTEMODE_OPAQUE}};Wt.TONEMAPPING_STANDARD=0;Wt.TONEMAPPING_ACES=1;Wt.TONEMAPPING_KHR_PBR_NEUTRAL=2;Wt.PrepareUniforms=y2;Wt.PrepareSamplers=P2;Wt._VIGNETTEMODE_MULTIPLY=0;Wt._VIGNETTEMODE_OPAQUE=1;P([M3()],Wt.prototype,"colorCurves",void 0);P([F()],Wt.prototype,"_colorCurvesEnabled",void 0);P([Bt("colorGradingTexture")],Wt.prototype,"_colorGradingTexture",void 0);P([F()],Wt.prototype,"_colorGradingEnabled",void 0);P([F()],Wt.prototype,"_colorGradingWithGreenDepth",void 0);P([F()],Wt.prototype,"_colorGradingBGR",void 0);P([F()],Wt.prototype,"_exposure",void 0);P([F()],Wt.prototype,"_toneMappingEnabled",void 0);P([F()],Wt.prototype,"_toneMappingType",void 0);P([F()],Wt.prototype,"_contrast",void 0);P([F()],Wt.prototype,"vignetteStretch",void 0);P([F()],Wt.prototype,"vignetteCenterX",void 0);P([F()],Wt.prototype,"vignetteCenterY",void 0);P([F()],Wt.prototype,"vignetteWeight",void 0);P([Bu()],Wt.prototype,"vignetteColor",void 0);P([F()],Wt.prototype,"vignetteCameraFov",void 0);P([F()],Wt.prototype,"_vignetteBlendMode",void 0);P([F()],Wt.prototype,"_vignetteEnabled",void 0);P([F()],Wt.prototype,"_ditheringEnabled",void 0);P([F()],Wt.prototype,"_ditheringIntensity",void 0);P([F()],Wt.prototype,"_skipFinalColorClamp",void 0);P([F()],Wt.prototype,"_applyByPostProcess",void 0);P([F()],Wt.prototype,"_isEnabled",void 0);P([F()],Wt.prototype,"outputTextureWidth",void 0);P([F()],Wt.prototype,"outputTextureHeight",void 0);tt._ImageProcessingConfigurationParser=Wt.Parse;wt("BABYLON.ImageProcessingConfiguration",Wt)});var Hn,R_=C(()=>{Ve();Ui();Hn=class{constructor(){this.hit=!1,this.distance=0,this.pickedPoint=null,this.pickedMesh=null,this.bu=0,this.bv=0,this.faceId=-1,this.subMeshFaceId=-1,this.subMeshId=0,this.pickedSprite=null,this.thinInstanceIndex=-1,this.ray=null,this.originMesh=null,this.aimTransform=null,this.gripTransform=null}getNormal(e=!1,t=!0){if(!this.pickedMesh||t&&!this.pickedMesh.isVerticesDataPresent(L.NormalKind))return null;let i=this.pickedMesh.getIndices();(i==null?void 0:i.length)===0&&(i=null);let r,s=Z.Vector3[0],a=Z.Vector3[1],o=Z.Vector3[2];if(t){let c=this.pickedMesh.getVerticesData(L.NormalKind),f=i?b.FromArrayToRef(c,i[this.faceId*3]*3,s):s.copyFromFloats(c[this.faceId*3*3],c[this.faceId*3*3+1],c[this.faceId*3*3+2]),h=i?b.FromArrayToRef(c,i[this.faceId*3+1]*3,a):a.copyFromFloats(c[(this.faceId*3+1)*3],c[(this.faceId*3+1)*3+1],c[(this.faceId*3+1)*3+2]),d=i?b.FromArrayToRef(c,i[this.faceId*3+2]*3,o):o.copyFromFloats(c[(this.faceId*3+2)*3],c[(this.faceId*3+2)*3+1],c[(this.faceId*3+2)*3+2]);f=f.scale(this.bu),h=h.scale(this.bv),d=d.scale(1-this.bu-this.bv),r=new b(f.x+h.x+d.x,f.y+h.y+d.y,f.z+h.z+d.z)}else{let c=this.pickedMesh.getVerticesData(L.PositionKind),f=i?b.FromArrayToRef(c,i[this.faceId*3]*3,s):s.copyFromFloats(c[this.faceId*3*3],c[this.faceId*3*3+1],c[this.faceId*3*3+2]),h=i?b.FromArrayToRef(c,i[this.faceId*3+1]*3,a):a.copyFromFloats(c[(this.faceId*3+1)*3],c[(this.faceId*3+1)*3+1],c[(this.faceId*3+1)*3+2]),d=i?b.FromArrayToRef(c,i[this.faceId*3+2]*3,o):o.copyFromFloats(c[(this.faceId*3+2)*3],c[(this.faceId*3+2)*3+1],c[(this.faceId*3+2)*3+2]),u=f.subtract(h),m=d.subtract(h);r=b.Cross(u,m)}let l=(c,f)=>{if(this.thinInstanceIndex!==-1){let d=c._thinInstanceDataStorage.matrixData,u=this.thinInstanceIndex<<4;if(d&&d.length>u){let m=Z.Matrix[0];K.FromArrayToRef(d,u,m),b.TransformNormalToRef(f,m,f)}}let h=c.getWorldMatrix();c.nonUniformScaling&&(Z.Matrix[0].copyFrom(h),h=Z.Matrix[0],h.setTranslationFromFloats(0,0,0),h.invert(),h.transposeToRef(Z.Matrix[1]),h=Z.Matrix[1]),b.TransformNormalToRef(f,h,f)};if(e&&l(this.pickedMesh,r),this.ray){let c=Z.Vector3[0].copyFrom(r);e||l(this.pickedMesh,c),b.Dot(c,this.ray.direction)>0&&r.negateInPlace()}return r.normalize(),r}getTextureCoordinates(e=L.UVKind){if(!this.pickedMesh||!this.pickedMesh.isVerticesDataPresent(e))return null;let t=this.pickedMesh.getIndices();if(!t)return null;let i=this.pickedMesh.getVerticesData(e);if(!i)return null;let r=Ne.FromArray(i,t[this.faceId*3]*2),s=Ne.FromArray(i,t[this.faceId*3+1]*2),a=Ne.FromArray(i,t[this.faceId*3+2]*2);return r=r.scale(this.bu),s=s.scale(this.bv),a=a.scale(1-this.bu-this.bv),new Ne(r.x+s.x+a.x,r.y+s.y+a.y)}}});var $r,PM=C(()=>{$r=class n{constructor(e,t,i,r,s,a){this.source=e,this.pointerX=t,this.pointerY=i,this.meshUnderPointer=r,this.sourceEvent=s,this.additionalData=a}static CreateNew(e,t,i){let r=e.getScene();return new n(e,r.pointerX,r.pointerY,r.meshUnderPointer||e,t,i)}static CreateNewFromSprite(e,t,i,r){return new n(e,t.pointerX,t.pointerY,t.meshUnderPointer,i,r)}static CreateNewFromScene(e,t){return new n(null,e.pointerX,e.pointerY,e.meshUnderPointer,t)}static CreateNewFromPrimitive(e,t,i,r){return new n(e,t.x,t.y,null,i,r)}}});function b_(n,e,t){let i=t.asArray(),r=e.asArray();for(let s=0;s<16;s++)i[s]=r[s];return i[12]-=n.x,i[13]-=n.y,i[14]-=n.z,t.markAsUpdated(),t}function F2(n,e,t){return l_(e,_a),b_(n,_a,ga),l_(ga,t),t}function xT(n,e,t){if(!va.eyeAtCamera)return F2(n,e,t);let i=t.asArray(),r=e.asArray();for(let s=0;s<16;s++)i[s]=r[s];return i[12]=0,i[13]=0,i[14]=0,t.markAsUpdated(),t}function DM(n,e,t,i){return Rh(xT(n,e,i),t,i),i}function w2(n,e,t,i,r){for(let s=0;s{Sh();Ve();Y0();nf();pa=new K,_a=new K,ga=new K,va={getScene:()=>{},eyeAtCamera:!0};I_=or,LM=Ji,B2=I_.prototype._updateMatrixForUniform,U2=Ji.prototype.setMatrix});var Qe,er,Wu=C(()=>{Qe=class{};Qe.NAME_EFFECTLAYER="EffectLayer";Qe.NAME_LAYER="Layer";Qe.NAME_LENSFLARESYSTEM="LensFlareSystem";Qe.NAME_BOUNDINGBOXRENDERER="BoundingBoxRenderer";Qe.NAME_PARTICLESYSTEM="ParticleSystem";Qe.NAME_GAMEPAD="Gamepad";Qe.NAME_SIMPLIFICATIONQUEUE="SimplificationQueue";Qe.NAME_GEOMETRYBUFFERRENDERER="GeometryBufferRenderer";Qe.NAME_PREPASSRENDERER="PrePassRenderer";Qe.NAME_DEPTHRENDERER="DepthRenderer";Qe.NAME_DEPTHPEELINGRENDERER="DepthPeelingRenderer";Qe.NAME_POSTPROCESSRENDERPIPELINEMANAGER="PostProcessRenderPipelineManager";Qe.NAME_SPRITE="Sprite";Qe.NAME_SUBSURFACE="SubSurface";Qe.NAME_OUTLINERENDERER="Outline";Qe.NAME_PROCEDURALTEXTURE="ProceduralTexture";Qe.NAME_SHADOWGENERATOR="ShadowGenerator";Qe.NAME_OCTREE="Octree";Qe.NAME_PHYSICSENGINE="PhysicsEngine";Qe.NAME_AUDIO="Audio";Qe.NAME_FLUIDRENDERER="FluidRenderer";Qe.NAME_IBLCDFGENERATOR="iblCDFGenerator";Qe.NAME_CLUSTEREDLIGHTING="ClusteredLighting";Qe.STEP_ISREADYFORMESH_EFFECTLAYER=0;Qe.STEP_ISREADYFORMESH_DEPTHRENDERER=1;Qe.STEP_BEFOREEVALUATEACTIVEMESH_BOUNDINGBOXRENDERER=0;Qe.STEP_EVALUATESUBMESH_BOUNDINGBOXRENDERER=0;Qe.STEP_PREACTIVEMESH_BOUNDINGBOXRENDERER=0;Qe.STEP_CAMERADRAWRENDERTARGET_EFFECTLAYER=1;Qe.STEP_BEFORECAMERADRAW_PREPASS=0;Qe.STEP_BEFORECAMERADRAW_EFFECTLAYER=1;Qe.STEP_BEFORECAMERADRAW_LAYER=2;Qe.STEP_BEFORERENDERTARGETDRAW_PREPASS=0;Qe.STEP_BEFORERENDERTARGETDRAW_LAYER=1;Qe.STEP_BEFORERENDERINGMESH_PREPASS=0;Qe.STEP_BEFORERENDERINGMESH_OUTLINE=1;Qe.STEP_AFTERRENDERINGMESH_PREPASS=0;Qe.STEP_AFTERRENDERINGMESH_OUTLINE=1;Qe.STEP_AFTERRENDERINGGROUPDRAW_EFFECTLAYER_DRAW=0;Qe.STEP_AFTERRENDERINGGROUPDRAW_BOUNDINGBOXRENDERER=1;Qe.STEP_BEFORECAMERAUPDATE_SIMPLIFICATIONQUEUE=0;Qe.STEP_BEFORECLEAR_PROCEDURALTEXTURE=0;Qe.STEP_BEFORECLEAR_PREPASS=1;Qe.STEP_BEFORERENDERTARGETCLEAR_PREPASS=0;Qe.STEP_AFTERRENDERTARGETDRAW_PREPASS=0;Qe.STEP_AFTERRENDERTARGETDRAW_LAYER=1;Qe.STEP_AFTERCAMERADRAW_PREPASS=0;Qe.STEP_AFTERCAMERADRAW_EFFECTLAYER=1;Qe.STEP_AFTERCAMERADRAW_LENSFLARESYSTEM=2;Qe.STEP_AFTERCAMERADRAW_EFFECTLAYER_DRAW=3;Qe.STEP_AFTERCAMERADRAW_LAYER=4;Qe.STEP_AFTERCAMERADRAW_FLUIDRENDERER=5;Qe.STEP_AFTERCAMERAPOSTPROCESS_LAYER=0;Qe.STEP_AFTERRENDERTARGETPOSTPROCESS_LAYER=0;Qe.STEP_AFTERRENDER_AUDIO=0;Qe.STEP_GATHERRENDERTARGETS_DEPTHRENDERER=0;Qe.STEP_GATHERRENDERTARGETS_GEOMETRYBUFFERRENDERER=1;Qe.STEP_GATHERRENDERTARGETS_SHADOWGENERATOR=2;Qe.STEP_GATHERRENDERTARGETS_POSTPROCESSRENDERPIPELINEMANAGER=3;Qe.STEP_GATHERACTIVECAMERARENDERTARGETS_DEPTHRENDERER=0;Qe.STEP_GATHERACTIVECAMERARENDERTARGETS_FLUIDRENDERER=1;Qe.STEP_GATHERACTIVECAMERARENDERTARGETS_CLUSTEREDLIGHTING=2;Qe.STEP_POINTERMOVE_SPRITE=0;Qe.STEP_POINTERDOWN_SPRITE=0;Qe.STEP_POINTERUP_SPRITE=0;er=class n extends Array{constructor(e){super(...e)}static Create(){return Object.create(n.prototype)}registerStep(e,t,i){let r=0,s;for(;r{Ve();it=class{};it.POINTERDOWN=1;it.POINTERUP=2;it.POINTERMOVE=4;it.POINTERWHEEL=8;it.POINTERPICK=16;it.POINTERTAP=32;it.POINTERDOUBLETAP=64;RT=class{constructor(e,t){this.type=e,this.event=t}},bT=class extends RT{constructor(e,t,i,r){super(e,t),this.ray=null,this.originalPickingInfo=null,this.skipOnPointerObservable=!1,this.localPosition=new Ne(i,r)}},Ea=class extends RT{get pickInfo(){return this._pickInfo||this._generatePickInfo(),this._pickInfo}constructor(e,t,i,r=null){super(e,t),this._pickInfo=i,this._inputManager=r}_generatePickInfo(){this._inputManager&&(this._pickInfo=this._inputManager._pickMove(this.event),this._inputManager._setRayOnPointerInfo(this._pickInfo,this.event),this._inputManager=null)}}});var Hl,k2=C(()=>{Hl=class n{constructor(){this.hoverCursor="",this.actions=[],this.isRecursive=!1,this.disposeWhenUnowned=!0}static get HasTriggers(){for(let e in n.Triggers)if(Object.prototype.hasOwnProperty.call(n.Triggers,e))return!0;return!1}static get HasPickTriggers(){for(let e in n.Triggers)if(Object.prototype.hasOwnProperty.call(n.Triggers,e)){let t=parseInt(e);if(t>=1&&t<=7)return!0}return!1}static HasSpecificTrigger(e){for(let t in n.Triggers)if(Object.prototype.hasOwnProperty.call(n.Triggers,t)&&parseInt(t)===e)return!0;return!1}};Hl.Triggers={}});var io,Hu,C_,IT=C(()=>{io=class{};io.KEYDOWN=1;io.KEYUP=2;Hu=class{constructor(e,t){this.type=e,this.event=t}},C_=class extends Hu{get skipOnPointerObservable(){return this.skipOnKeyboardObservable}set skipOnPointerObservable(e){this.skipOnKeyboardObservable=e}constructor(e,t){super(e,t),this.type=e,this.event=t,this.skipOnKeyboardObservable=!1}}});var qe,Et,W2,H2,z2,X2,Y2,wh=C(()=>{(function(n){n[n.Generic=0]="Generic",n[n.Keyboard=1]="Keyboard",n[n.Mouse=2]="Mouse",n[n.Touch=3]="Touch",n[n.DualShock=4]="DualShock",n[n.Xbox=5]="Xbox",n[n.Switch=6]="Switch",n[n.DualSense=7]="DualSense"})(qe||(qe={}));(function(n){n[n.Horizontal=0]="Horizontal",n[n.Vertical=1]="Vertical",n[n.LeftClick=2]="LeftClick",n[n.MiddleClick=3]="MiddleClick",n[n.RightClick=4]="RightClick",n[n.BrowserBack=5]="BrowserBack",n[n.BrowserForward=6]="BrowserForward",n[n.MouseWheelX=7]="MouseWheelX",n[n.MouseWheelY=8]="MouseWheelY",n[n.MouseWheelZ=9]="MouseWheelZ",n[n.Move=12]="Move"})(Et||(Et={}));(function(n){n[n.Horizontal=0]="Horizontal",n[n.Vertical=1]="Vertical",n[n.LeftClick=2]="LeftClick",n[n.MiddleClick=3]="MiddleClick",n[n.RightClick=4]="RightClick",n[n.BrowserBack=5]="BrowserBack",n[n.BrowserForward=6]="BrowserForward",n[n.MouseWheelX=7]="MouseWheelX",n[n.MouseWheelY=8]="MouseWheelY",n[n.MouseWheelZ=9]="MouseWheelZ",n[n.DeltaHorizontal=10]="DeltaHorizontal",n[n.DeltaVertical=11]="DeltaVertical"})(W2||(W2={}));(function(n){n[n.Cross=0]="Cross",n[n.Circle=1]="Circle",n[n.Square=2]="Square",n[n.Triangle=3]="Triangle",n[n.L1=4]="L1",n[n.R1=5]="R1",n[n.L2=6]="L2",n[n.R2=7]="R2",n[n.Share=8]="Share",n[n.Options=9]="Options",n[n.L3=10]="L3",n[n.R3=11]="R3",n[n.DPadUp=12]="DPadUp",n[n.DPadDown=13]="DPadDown",n[n.DPadLeft=14]="DPadLeft",n[n.DPadRight=15]="DPadRight",n[n.Home=16]="Home",n[n.TouchPad=17]="TouchPad",n[n.LStickXAxis=18]="LStickXAxis",n[n.LStickYAxis=19]="LStickYAxis",n[n.RStickXAxis=20]="RStickXAxis",n[n.RStickYAxis=21]="RStickYAxis"})(H2||(H2={}));(function(n){n[n.Cross=0]="Cross",n[n.Circle=1]="Circle",n[n.Square=2]="Square",n[n.Triangle=3]="Triangle",n[n.L1=4]="L1",n[n.R1=5]="R1",n[n.L2=6]="L2",n[n.R2=7]="R2",n[n.Create=8]="Create",n[n.Options=9]="Options",n[n.L3=10]="L3",n[n.R3=11]="R3",n[n.DPadUp=12]="DPadUp",n[n.DPadDown=13]="DPadDown",n[n.DPadLeft=14]="DPadLeft",n[n.DPadRight=15]="DPadRight",n[n.Home=16]="Home",n[n.TouchPad=17]="TouchPad",n[n.LStickXAxis=18]="LStickXAxis",n[n.LStickYAxis=19]="LStickYAxis",n[n.RStickXAxis=20]="RStickXAxis",n[n.RStickYAxis=21]="RStickYAxis"})(z2||(z2={}));(function(n){n[n.A=0]="A",n[n.B=1]="B",n[n.X=2]="X",n[n.Y=3]="Y",n[n.LB=4]="LB",n[n.RB=5]="RB",n[n.LT=6]="LT",n[n.RT=7]="RT",n[n.Back=8]="Back",n[n.Start=9]="Start",n[n.LS=10]="LS",n[n.RS=11]="RS",n[n.DPadUp=12]="DPadUp",n[n.DPadDown=13]="DPadDown",n[n.DPadLeft=14]="DPadLeft",n[n.DPadRight=15]="DPadRight",n[n.Home=16]="Home",n[n.LStickXAxis=17]="LStickXAxis",n[n.LStickYAxis=18]="LStickYAxis",n[n.RStickXAxis=19]="RStickXAxis",n[n.RStickYAxis=20]="RStickYAxis"})(X2||(X2={}));(function(n){n[n.B=0]="B",n[n.A=1]="A",n[n.Y=2]="Y",n[n.X=3]="X",n[n.L=4]="L",n[n.R=5]="R",n[n.ZL=6]="ZL",n[n.ZR=7]="ZR",n[n.Minus=8]="Minus",n[n.Plus=9]="Plus",n[n.LS=10]="LS",n[n.RS=11]="RS",n[n.DPadUp=12]="DPadUp",n[n.DPadDown=13]="DPadDown",n[n.DPadLeft=14]="DPadLeft",n[n.DPadRight=15]="DPadRight",n[n.Home=16]="Home",n[n.Capture=17]="Capture",n[n.LStickXAxis=18]="LStickXAxis",n[n.LStickYAxis=19]="LStickYAxis",n[n.RStickXAxis=20]="RStickXAxis",n[n.RStickYAxis=21]="RStickYAxis"})(Y2||(Y2={}))});var K2,ro,MT=C(()=>{(function(n){n[n.PointerMove=0]="PointerMove",n[n.PointerDown=1]="PointerDown",n[n.PointerUp=2]="PointerUp"})(K2||(K2={}));ro=class{};ro.DOM_DELTA_PIXEL=0;ro.DOM_DELTA_LINE=1;ro.DOM_DELTA_PAGE=2});var no,NM=C(()=>{MT();wh();no=class{static CreateDeviceEvent(e,t,i,r,s,a,o){switch(e){case qe.Keyboard:return this._CreateKeyboardEvent(i,r,s,a);case qe.Mouse:if(i===Et.MouseWheelX||i===Et.MouseWheelY||i===Et.MouseWheelZ)return this._CreateWheelEvent(e,t,i,r,s,a);case qe.Touch:return this._CreatePointerEvent(e,t,i,r,s,a,o);default:throw`Unable to generate event for device ${qe[e]}`}}static _CreatePointerEvent(e,t,i,r,s,a,o){let l=this._CreateMouseEvent(e,t,i,r,s,a);e===qe.Mouse?(l.deviceType=qe.Mouse,l.pointerId=1,l.pointerType="mouse"):(l.deviceType=qe.Touch,l.pointerId=o!=null?o:t,l.pointerType="touch");let c=0;return c+=s.pollInput(e,t,Et.LeftClick),c+=s.pollInput(e,t,Et.RightClick)*2,c+=s.pollInput(e,t,Et.MiddleClick)*4,l.buttons=c,i===Et.Move?l.type="pointermove":i>=Et.LeftClick&&i<=Et.RightClick&&(l.type=r===1?"pointerdown":"pointerup",l.button=i-2),l}static _CreateWheelEvent(e,t,i,r,s,a){let o=this._CreateMouseEvent(e,t,i,r,s,a);switch(o.pointerId=1,o.type="wheel",o.deltaMode=ro.DOM_DELTA_PIXEL,o.deltaX=0,o.deltaY=0,o.deltaZ=0,i){case Et.MouseWheelX:o.deltaX=r;break;case Et.MouseWheelY:o.deltaY=r;break;case Et.MouseWheelZ:o.deltaZ=r;break}return o}static _CreateMouseEvent(e,t,i,r,s,a){let o=this._CreateEvent(a),l=s.pollInput(e,t,Et.Horizontal),c=s.pollInput(e,t,Et.Vertical);return a?(o.movementX=0,o.movementY=0,o.offsetX=o.movementX-a.getBoundingClientRect().x,o.offsetY=o.movementY-a.getBoundingClientRect().y):(o.movementX=s.pollInput(e,t,10),o.movementY=s.pollInput(e,t,11),o.offsetX=0,o.offsetY=0),this._CheckNonCharacterKeys(o,s),o.clientX=l,o.clientY=c,o.x=l,o.y=c,o.deviceType=e,o.deviceSlot=t,o.inputIndex=i,o}static _CreateKeyboardEvent(e,t,i,r){let s=this._CreateEvent(r);return this._CheckNonCharacterKeys(s,i),s.deviceType=qe.Keyboard,s.deviceSlot=0,s.inputIndex=e,s.type=t===1?"keydown":"keyup",s.key=String.fromCharCode(e),s.keyCode=e,s}static _CheckNonCharacterKeys(e,t){let i=t.isDeviceAvailable(qe.Keyboard),r=i&&t.pollInput(qe.Keyboard,0,18)===1,s=i&&t.pollInput(qe.Keyboard,0,17)===1,a=i&&(t.pollInput(qe.Keyboard,0,91)===1||t.pollInput(qe.Keyboard,0,92)===1||t.pollInput(qe.Keyboard,0,93)===1),o=i&&t.pollInput(qe.Keyboard,0,16)===1;e.altKey=r,e.ctrlKey=s,e.metaKey=a,e.shiftKey=o}static _CreateEvent(e){let t={};return t.preventDefault=()=>{},t.target=e,t}}});var CT,j2=C(()=>{NM();wh();CT=class{constructor(e,t,i){this._nativeInput=_native.DeviceInputSystem?new _native.DeviceInputSystem(e,t,(r,s,a,o)=>{let l=no.CreateDeviceEvent(r,s,a,o,this);i(r,s,l)}):this._createDummyNativeInput()}pollInput(e,t,i){return this._nativeInput.pollInput(e,t,i)}isDeviceAvailable(e){return e===qe.Mouse||e===qe.Touch}dispose(){this._nativeInput.dispose()}_createDummyNativeInput(){return{pollInput:()=>0,isDeviceAvailable:()=>!1,dispose:()=>{}}}}});var q2,Z2,yT,Q2=C(()=>{fa();Ci();NM();wh();q2=255,Z2=Object.keys(Et).length/2,yT=class{constructor(e,t,i,r){this._inputs=[],this._keyboardActive=!1,this._pointerActive=!1,this._usingSafari=he.IsSafari(),this._usingMacOs=Ml()&&/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform),this._keyboardDownEvent=s=>{},this._keyboardUpEvent=s=>{},this._keyboardBlurEvent=s=>{},this._pointerMoveEvent=s=>{},this._pointerDownEvent=s=>{},this._pointerUpEvent=s=>{},this._pointerCancelEvent=s=>{},this._pointerCancelTouch=s=>{},this._pointerLeaveEvent=s=>{},this._pointerWheelEvent=s=>{},this._pointerBlurEvent=s=>{},this._pointerMacOsChromeOutEvent=s=>{},this._eventsAttached=!1,this._mouseId=-1,this._isUsingFirefox=Ml()&&navigator.userAgent&&navigator.userAgent.indexOf("Firefox")!==-1,this._isUsingChromium=Ml()&&navigator.userAgent&&navigator.userAgent.indexOf("Chrome")!==-1,this._maxTouchPoints=0,this._pointerInputClearObserver=null,this._gamepadConnectedEvent=s=>{},this._gamepadDisconnectedEvent=s=>{},this._eventPrefix=he.GetPointerPrefix(e),this._engine=e,this._onDeviceConnected=t,this._onDeviceDisconnected=i,this._onInputChanged=r,this._mouseId=this._isUsingFirefox?0:1,this._enableEvents(),this._usingMacOs&&(this._metaKeys=[]),this._engine._onEngineViewChanged||(this._engine._onEngineViewChanged=()=>{this._enableEvents()})}pollInput(e,t,i){let r=this._inputs[e][t];if(!r)throw`Unable to find device ${qe[e]}`;e>=qe.DualShock&&e<=qe.DualSense&&this._updateDevice(e,t,i);let s=r[i];if(s===void 0)throw`Unable to find input ${i} for device ${qe[e]} in slot ${t}`;return i===Et.Move&&he.Warn("Unable to provide information for PointerInput.Move. Try using PointerInput.Horizontal or PointerInput.Vertical for move data."),s}isDeviceAvailable(e){return this._inputs[e]!==void 0}dispose(){this._onDeviceConnected=()=>{},this._onDeviceDisconnected=()=>{},this._onInputChanged=()=>{},delete this._engine._onEngineViewChanged,this._elementToAttachTo&&this._disableEvents()}_enableEvents(){let e=this==null?void 0:this._engine.getInputElement();if(e&&(!this._eventsAttached||this._elementToAttachTo!==e)){if(this._disableEvents(),this._inputs){for(let t of this._inputs)if(t)for(let i in t){let r=+i,s=t[r];if(s)for(let a=0;a{this._keyboardActive||(this._keyboardActive=!0,this._registerDevice(qe.Keyboard,0,q2));let t=this._inputs[qe.Keyboard][0];if(t){t[e.keyCode]=1;let i=e;i.inputIndex=e.keyCode,this._usingMacOs&&e.metaKey&&e.key!=="Meta"&&(this._metaKeys.includes(e.keyCode)||this._metaKeys.push(e.keyCode)),this._onInputChanged(qe.Keyboard,0,i)}},this._keyboardUpEvent=e=>{this._keyboardActive||(this._keyboardActive=!0,this._registerDevice(qe.Keyboard,0,q2));let t=this._inputs[qe.Keyboard][0];if(t){t[e.keyCode]=0;let i=e;if(i.inputIndex=e.keyCode,this._usingMacOs&&e.key==="Meta"&&this._metaKeys.length>0){for(let r of this._metaKeys){let s=no.CreateDeviceEvent(qe.Keyboard,0,r,0,this,this._elementToAttachTo);t[r]=0,this._onInputChanged(qe.Keyboard,0,s)}this._metaKeys.splice(0,this._metaKeys.length)}this._onInputChanged(qe.Keyboard,0,i)}},this._keyboardBlurEvent=()=>{if(this._keyboardActive){let e=this._inputs[qe.Keyboard][0];for(let t=0;t{let r=this._getPointerType(i),s=r===qe.Mouse?0:this._activeTouchIds.indexOf(i.pointerId);if(r===qe.Touch&&s===-1){let o=this._activeTouchIds.indexOf(-1);if(o>=0)s=o,this._activeTouchIds[o]=i.pointerId,this._onDeviceConnected(r,s);else{he.Warn(`Max number of touches exceeded. Ignoring touches in excess of ${this._maxTouchPoints}`);return}}this._inputs[r]||(this._inputs[r]={}),this._inputs[r][s]||this._addPointerDevice(r,s,i.clientX,i.clientY);let a=this._inputs[r][s];if(a){let o=i;o.inputIndex=Et.Move,a[Et.Horizontal]=i.clientX,a[Et.Vertical]=i.clientY,r===qe.Touch&&a[Et.LeftClick]===0&&(a[Et.LeftClick]=1),i.pointerId===void 0&&(i.pointerId=this._mouseId),this._onInputChanged(r,s,o),!this._usingSafari&&i.button!==-1&&(o.inputIndex=i.button+2,a[i.button+2]=a[i.button+2]?0:1,this._onInputChanged(r,s,o))}},this._pointerDownEvent=i=>{let r=this._getPointerType(i),s=r===qe.Mouse?0:i.pointerId;if(r===qe.Touch){let o=this._activeTouchIds.indexOf(i.pointerId);if(o===-1&&(o=this._activeTouchIds.indexOf(-1)),o>=0)s=o,this._activeTouchIds[o]=i.pointerId;else{he.Warn(`Max number of touches exceeded. Ignoring touches in excess of ${this._maxTouchPoints}`);return}}this._inputs[r]||(this._inputs[r]={}),this._inputs[r][s]?r===qe.Touch&&this._onDeviceConnected(r,s):this._addPointerDevice(r,s,i.clientX,i.clientY);let a=this._inputs[r][s];if(a){let o=a[Et.Horizontal],l=a[Et.Vertical];if(r===qe.Mouse){if(i.pointerId===void 0&&(i.pointerId=this._mouseId),!document.pointerLockElement)try{this._elementToAttachTo.setPointerCapture(this._mouseId)}catch(f){}}else if(i.pointerId&&!document.pointerLockElement)try{this._elementToAttachTo.setPointerCapture(i.pointerId)}catch(f){}a[Et.Horizontal]=i.clientX,a[Et.Vertical]=i.clientY,a[i.button+2]=1;let c=i;c.inputIndex=i.button+2,this._onInputChanged(r,s,c),(o!==i.clientX||l!==i.clientY)&&(c.inputIndex=Et.Move,this._onInputChanged(r,s,c))}},this._pointerUpEvent=i=>{var c,f,h,d,u;let r=this._getPointerType(i),s=r===qe.Mouse?0:this._activeTouchIds.indexOf(i.pointerId);if(r===qe.Touch){if(s===-1)return;this._activeTouchIds[s]=-1}let a=(c=this._inputs[r])==null?void 0:c[s],o=i.button,l=a&&a[o+2]!==0;if(!l&&this._isUsingFirefox&&this._usingMacOs&&a&&(o=o===2?0:2,l=a[o+2]!==0),l){let m=a[Et.Horizontal],_=a[Et.Vertical];a[Et.Horizontal]=i.clientX,a[Et.Vertical]=i.clientY,a[o+2]=0;let p=i;i.pointerId===void 0&&(i.pointerId=this._mouseId),(m!==i.clientX||_!==i.clientY)&&(p.inputIndex=Et.Move,this._onInputChanged(r,s,p)),p.inputIndex=o+2,r===qe.Mouse&&this._mouseId>=0&&((h=(f=this._elementToAttachTo).hasPointerCapture)!=null&&h.call(f,this._mouseId))?this._elementToAttachTo.releasePointerCapture(this._mouseId):i.pointerId&&((u=(d=this._elementToAttachTo).hasPointerCapture)!=null&&u.call(d,i.pointerId))&&this._elementToAttachTo.releasePointerCapture(i.pointerId),this._onInputChanged(r,s,p),r===qe.Touch&&this._onDeviceDisconnected(r,s)}},this._pointerCancelTouch=i=>{var a,o;let r=this._activeTouchIds.indexOf(i);if(r===-1)return;(o=(a=this._elementToAttachTo).hasPointerCapture)!=null&&o.call(a,i)&&this._elementToAttachTo.releasePointerCapture(i),this._inputs[qe.Touch][r][Et.LeftClick]=0;let s=no.CreateDeviceEvent(qe.Touch,r,Et.LeftClick,0,this,this._elementToAttachTo,i);this._onInputChanged(qe.Touch,r,s),this._activeTouchIds[r]=-1,this._onDeviceDisconnected(qe.Touch,r)},this._pointerCancelEvent=i=>{var r,s;if(i.pointerType==="mouse"){let a=this._inputs[qe.Mouse][0];this._mouseId>=0&&((s=(r=this._elementToAttachTo).hasPointerCapture)!=null&&s.call(r,this._mouseId))&&this._elementToAttachTo.releasePointerCapture(this._mouseId);for(let o=Et.LeftClick;o<=Et.BrowserForward;o++)if(a[o]===1){a[o]=0;let l=no.CreateDeviceEvent(qe.Mouse,0,o,0,this,this._elementToAttachTo);this._onInputChanged(qe.Mouse,0,l)}}else this._pointerCancelTouch(i.pointerId)},this._pointerLeaveEvent=i=>{i.pointerType==="pen"&&this._pointerCancelTouch(i.pointerId)},this._wheelEventName="onwheel"in document.createElement("div")?"wheel":document.onmousewheel!==void 0?"mousewheel":"DOMMouseScroll";let e=!1,t=function(){};try{let i=Object.defineProperty({},"passive",{get:function(){e=!0}});this._elementToAttachTo.addEventListener("test",t,i),this._elementToAttachTo.removeEventListener("test",t,i)}catch(i){}this._pointerBlurEvent=()=>{var i,r,s,a,o;if(this.isDeviceAvailable(qe.Mouse)){let l=this._inputs[qe.Mouse][0];this._mouseId>=0&&((r=(i=this._elementToAttachTo).hasPointerCapture)!=null&&r.call(i,this._mouseId))&&this._elementToAttachTo.releasePointerCapture(this._mouseId);for(let c=Et.LeftClick;c<=Et.BrowserForward;c++)if(l[c]===1){l[c]=0;let f=no.CreateDeviceEvent(qe.Mouse,0,c,0,this,this._elementToAttachTo);this._onInputChanged(qe.Mouse,0,f)}}if(this.isDeviceAvailable(qe.Touch)){let l=this._inputs[qe.Touch];for(let c=0;c{let r=qe.Mouse,s=0;this._inputs[r]||(this._inputs[r]=[]),this._inputs[r][s]||(this._pointerActive=!0,this._registerDevice(r,s,Z2));let a=this._inputs[r][s];if(a){a[Et.MouseWheelX]=i.deltaX||0,a[Et.MouseWheelY]=i.deltaY||i.wheelDelta||0,a[Et.MouseWheelZ]=i.deltaZ||0;let o=i;i.pointerId===void 0&&(i.pointerId=this._mouseId),a[Et.MouseWheelX]!==0&&(o.inputIndex=Et.MouseWheelX,this._onInputChanged(r,s,o)),a[Et.MouseWheelY]!==0&&(o.inputIndex=Et.MouseWheelY,this._onInputChanged(r,s,o)),a[Et.MouseWheelZ]!==0&&(o.inputIndex=Et.MouseWheelZ,this._onInputChanged(r,s,o))}},this._usingMacOs&&this._isUsingChromium&&(this._pointerMacOsChromeOutEvent=i=>{i.buttons>1&&this._pointerCancelEvent(i)},this._elementToAttachTo.addEventListener("lostpointercapture",this._pointerMacOsChromeOutEvent)),this._elementToAttachTo.addEventListener(this._eventPrefix+"move",this._pointerMoveEvent),this._elementToAttachTo.addEventListener(this._eventPrefix+"down",this._pointerDownEvent),this._elementToAttachTo.addEventListener(this._eventPrefix+"up",this._pointerUpEvent),this._elementToAttachTo.addEventListener(this._eventPrefix+"cancel",this._pointerCancelEvent),this._elementToAttachTo.addEventListener(this._eventPrefix+"leave",this._pointerLeaveEvent),this._elementToAttachTo.addEventListener("blur",this._pointerBlurEvent),this._elementToAttachTo.addEventListener(this._wheelEventName,this._pointerWheelEvent,e?{passive:!1}:!1),this._pointerInputClearObserver=this._engine.onEndFrameObservable.add(()=>{if(this.isDeviceAvailable(qe.Mouse)){let i=this._inputs[qe.Mouse][0];i[Et.MouseWheelX]=0,i[Et.MouseWheelY]=0,i[Et.MouseWheelZ]=0}})}_handleGamepadActions(){this._gamepadConnectedEvent=e=>{this._addGamePad(e.gamepad)},this._gamepadDisconnectedEvent=e=>{if(this._gamepads){let t=this._getGamepadDeviceType(e.gamepad.id),i=e.gamepad.index;this._unregisterDevice(t,i),delete this._gamepads[i]}},window.addEventListener("gamepadconnected",this._gamepadConnectedEvent),window.addEventListener("gamepaddisconnected",this._gamepadDisconnectedEvent)}_updateDevice(e,t,i){let r=navigator.getGamepads()[t];if(r&&e===this._gamepads[t]){let s=this._inputs[e][t];i>=r.buttons.length?s[i]=r.axes[i-r.buttons.length].valueOf():s[i]=r.buttons[i].value}}_getGamepadDeviceType(e){return e.indexOf("054c")!==-1?e.indexOf("0ce6")!==-1?qe.DualSense:qe.DualShock:e.indexOf("Xbox One")!==-1||e.search("Xbox 360")!==-1||e.search("xinput")!==-1?qe.Xbox:e.indexOf("057e")!==-1?qe.Switch:qe.Generic}_getPointerType(e){let t=qe.Mouse;return(e.pointerType==="touch"||e.pointerType==="pen"||e.touches)&&(t=qe.Touch),t}}});var y_,J2=C(()=>{hi();y_=class{constructor(e,t,i=0){this.deviceType=t,this.deviceSlot=i,this.onInputChangedObservable=new ee,this._deviceInputSystem=e}getInput(e){return this._deviceInputSystem.pollInput(this.deviceType,this.deviceSlot,e)}}});var PT,$2=C(()=>{wh();j2();Q2();J2();PT=class{constructor(e){this._registeredManagers=new Array,this._refCount=0,this.registerManager=a=>{for(let o=0;o{let o=this._registeredManagers.indexOf(a);o>-1&&this._registeredManagers.splice(o,1)};let t=Object.keys(qe).length/2;this._devices=new Array(t);let i=(a,o)=>{this._devices[a]||(this._devices[a]=new Array),this._devices[a][o]||(this._devices[a][o]=o);for(let l of this._registeredManagers){let c=new y_(this._deviceInputSystem,a,o);l._addDevice(c)}},r=(a,o)=>{var l;(l=this._devices[a])!=null&&l[o]&&delete this._devices[a][o];for(let c of this._registeredManagers)c._removeDevice(a,o)},s=(a,o,l)=>{if(l)for(let c of this._registeredManagers)c._onInputChanged(a,o,l)};typeof _native!="undefined"?this._deviceInputSystem=new CT(i,r,s):this._deviceInputSystem=new yT(e,i,r,s)}dispose(){this._deviceInputSystem.dispose()}}});var DT,eB=C(()=>{wh();hi();$2();DT=class{getDeviceSource(e,t){if(t===void 0){if(this._firstDevice[e]===void 0)return null;t=this._firstDevice[e]}return!this._devices[e]||this._devices[e][t]===void 0?null:this._devices[e][t]}getDeviceSources(e){return this._devices[e]?this._devices[e].filter(t=>!!t):[]}constructor(e){let t=Object.keys(qe).length/2;this._devices=new Array(t),this._firstDevice=new Array(t),this._engine=e,this._engine._deviceSourceManager||(this._engine._deviceSourceManager=new PT(e)),this._engine._deviceSourceManager._refCount++,this.onDeviceConnectedObservable=new ee(i=>{for(let r of this._devices)if(r)for(let s of r)s&&this.onDeviceConnectedObservable.notifyObserver(i,s)}),this.onDeviceDisconnectedObservable=new ee,this._engine._deviceSourceManager.registerManager(this),this._onDisposeObserver=e.onDisposeObservable.add(()=>{this.dispose()})}dispose(){this.onDeviceConnectedObservable.clear(),this.onDeviceDisconnectedObservable.clear(),this._engine._deviceSourceManager&&(this._engine._deviceSourceManager.unregisterManager(this),--this._engine._deviceSourceManager._refCount<1&&(this._engine._deviceSourceManager.dispose(),delete this._engine._deviceSourceManager)),this._engine.onDisposeObservable.remove(this._onDisposeObserver)}_addDevice(e){this._devices[e.deviceType]||(this._devices[e.deviceType]=[]),this._devices[e.deviceType][e.deviceSlot]||(this._devices[e.deviceType][e.deviceSlot]=e,this._updateFirstDevices(e.deviceType)),this.onDeviceConnectedObservable.notifyObservers(e)}_removeDevice(e,t){var r,s;let i=(r=this._devices[e])==null?void 0:r[t];this.onDeviceDisconnectedObservable.notifyObservers(i),(s=this._devices[e])!=null&&s[t]&&delete this._devices[e][t],this._updateFirstDevices(e)}_onInputChanged(e,t,i){var r,s;(s=(r=this._devices[e])==null?void 0:r[t])==null||s.onInputChangedObservable.notifyObservers(i)}_updateFirstDevices(e){switch(e){case qe.Keyboard:case qe.Mouse:this._firstDevice[e]=0;break;case qe.Touch:case qe.DualSense:case qe.DualShock:case qe.Xbox:case qe.Switch:case qe.Generic:{delete this._firstDevice[e];let t=this._devices[e];if(t){for(let i=0;i{Bh=class{};Bh._IsPickingAvailable=!1});var LT,Rn,tB=C(()=>{to();k2();R_();Ve();PM();IT();wh();eB();Pi();FM();LT=class{constructor(){this._singleClick=!1,this._doubleClick=!1,this._hasSwiped=!1,this._ignore=!1}get singleClick(){return this._singleClick}get doubleClick(){return this._doubleClick}get hasSwiped(){return this._hasSwiped}get ignore(){return this._ignore}set singleClick(e){this._singleClick=e}set doubleClick(e){this._doubleClick=e}set hasSwiped(e){this._hasSwiped=e}set ignore(e){this._ignore=e}},Rn=class n{constructor(e){this._alreadyAttached=!1,this._meshPickProceed=!1,this._currentPickResult=null,this._previousPickResult=null,this._activePointerIds=new Array,this._activePointerIdsCount=0,this._doubleClickOccured=!1,this._isSwiping=!1,this._swipeButtonPressed=-1,this._skipPointerTap=!1,this._isMultiTouchGesture=!1,this._pointerX=0,this._pointerY=0,this._startingPointerPosition=new Ne(0,0),this._previousStartingPointerPosition=new Ne(0,0),this._startingPointerTime=0,this._previousStartingPointerTime=0,this._pointerCaptures={},this._meshUnderPointerId={},this._movePointerInfo=null,this._cameraObserverCount=0,this._delayedClicks=[null,null,null,null,null],this._deviceSourceManager=null,this._scene=e||Le.LastCreatedScene,this._scene}get meshUnderPointer(){return this._movePointerInfo&&(this._movePointerInfo._generatePickInfo(),this._movePointerInfo=null),this._pointerOverMesh}getMeshUnderPointerByPointerId(e){return this._meshUnderPointerId[e]||null}get unTranslatedPointer(){return new Ne(this._unTranslatedPointerX,this._unTranslatedPointerY)}get pointerX(){return this._pointerX}set pointerX(e){this._pointerX=e}get pointerY(){return this._pointerY}set pointerY(e){this._pointerY=e}_updatePointerPosition(e){let t=this._scene.getEngine().getInputElementClientRect();t&&(this._pointerX=e.clientX-t.left,this._pointerY=e.clientY-t.top,this._unTranslatedPointerX=this._pointerX,this._unTranslatedPointerY=this._pointerY)}_processPointerMove(e,t){let i=this._scene,r=i.getEngine(),s=r.getInputElement();s&&(s.tabIndex=r.canvasTabIndex,i.doNotHandleCursors||(s.style.cursor=i.defaultCursor)),this._setCursorAndPointerOverMesh(e,t,i);for(let l of i._pointerMoveStage){e=e||this._pickMove(t);let c=!!(e!=null&&e.pickedMesh);e=l.action(this._unTranslatedPointerX,this._unTranslatedPointerY,e,c,s)}let a=t.inputIndex>=Et.MouseWheelX&&t.inputIndex<=Et.MouseWheelZ?it.POINTERWHEEL:it.POINTERMOVE;i.onPointerMove&&(e=e||this._pickMove(t),i.onPointerMove(t,e,a));let o;e?(o=new Ea(a,t,e),this._setRayOnPointerInfo(e,t)):(o=new Ea(a,t,null,this),this._movePointerInfo=o),i.onPointerObservable.hasObservers()&&i.onPointerObservable.notifyObservers(o,a)}_setRayOnPointerInfo(e,t){let i=this._scene;e&&Bh._IsPickingAvailable&&(e.ray||(e.ray=i.createPickingRay(t.offsetX,t.offsetY,K.Identity(),i.activeCamera)))}_addCameraPointerObserver(e,t){return this._cameraObserverCount++,this._scene.onPointerObservable.add(e,t)}_removeCameraPointerObserver(e){return this._cameraObserverCount--,this._scene.onPointerObservable.remove(e)}_checkForPicking(){return!!(this._scene.onPointerObservable.observers.length>this._cameraObserverCount||this._scene.onPointerPick)}_checkPrePointerObservable(e,t,i){let r=this._scene,s=new bT(i,t,this._unTranslatedPointerX,this._unTranslatedPointerY);return e&&(s.originalPickingInfo=e,s.ray=e.ray,t.pointerType==="xr-near"&&e.originMesh&&(s.nearInteractionPickingInfo=e)),r.onPrePointerObservable.notifyObservers(s,i),!!s.skipOnPointerObservable}_pickMove(e){let t=this._scene,i=t.pick(this._unTranslatedPointerX,this._unTranslatedPointerY,t.pointerMovePredicate,t.pointerMoveFastCheck,t.cameraToUseForPointers,t.pointerMoveTrianglePredicate);return this._setCursorAndPointerOverMesh(i,e,t),i}_setCursorAndPointerOverMesh(e,t,i){let s=i.getEngine().getInputElement();if(e!=null&&e.pickedMesh){if(this.setPointerOverMesh(e.pickedMesh,t.pointerId,e,t),!i.doNotHandleCursors&&s&&this._pointerOverMesh){let a=this._pointerOverMesh._getActionManagerForTrigger();a&&a.hasPointerTriggers&&(s.style.cursor=a.hoverCursor||i.hoverCursor)}}else this.setPointerOverMesh(null,t.pointerId,e,t)}simulatePointerMove(e,t){let i=new PointerEvent("pointermove",t);i.inputIndex=Et.Move,!this._checkPrePointerObservable(e,i,it.POINTERMOVE)&&this._processPointerMove(e,i)}simulatePointerDown(e,t){let i=new PointerEvent("pointerdown",t);i.inputIndex=i.button+2,!this._checkPrePointerObservable(e,i,it.POINTERDOWN)&&this._processPointerDown(e,i)}_processPointerDown(e,t){let i=this._scene;if(e!=null&&e.pickedMesh){this._pickedDownMesh=e.pickedMesh;let a=e.pickedMesh._getActionManagerForTrigger();if(a){if(a.hasPickTriggers)switch(a.processTrigger(5,new $r(e.pickedMesh,i.pointerX,i.pointerY,e.pickedMesh,t,e)),t.button){case 0:a.processTrigger(2,new $r(e.pickedMesh,i.pointerX,i.pointerY,e.pickedMesh,t,e));break;case 1:a.processTrigger(4,new $r(e.pickedMesh,i.pointerX,i.pointerY,e.pickedMesh,t,e));break;case 2:a.processTrigger(3,new $r(e.pickedMesh,i.pointerX,i.pointerY,e.pickedMesh,t,e));break}a.hasSpecificTrigger(8)&&window.setTimeout(()=>{let o=i.pick(this._unTranslatedPointerX,this._unTranslatedPointerY,l=>l.isPickable&&l.isVisible&&l.isReady()&&l.actionManager&&l.actionManager.hasSpecificTrigger(8)&&l===this._pickedDownMesh,!1,i.cameraToUseForPointers);o!=null&&o.pickedMesh&&a&&this._activePointerIdsCount!==0&&Date.now()-this._startingPointerTime>n.LongPressDelay&&!this._isPointerSwiping()&&(this._startingPointerTime=0,a.processTrigger(8,$r.CreateNew(o.pickedMesh,t)))},n.LongPressDelay)}}else for(let a of i._pointerDownStage)e=a.action(this._unTranslatedPointerX,this._unTranslatedPointerY,e,t,!1);let r,s=it.POINTERDOWN;e?(i.onPointerDown&&i.onPointerDown(t,e,s),r=new Ea(s,t,e),this._setRayOnPointerInfo(e,t)):r=new Ea(s,t,null,this),i.onPointerObservable.hasObservers()&&i.onPointerObservable.notifyObservers(r,s)}_isPointerSwiping(){return this._isSwiping}simulatePointerUp(e,t,i){let r=new PointerEvent("pointerup",t);r.inputIndex=Et.Move;let s=new LT;i?s.doubleClick=!0:s.singleClick=!0,!this._checkPrePointerObservable(e,r,it.POINTERUP)&&this._processPointerUp(e,r,s)}_processPointerUp(e,t,i){let r=this._scene;if(e!=null&&e.pickedMesh){if(this._pickedUpMesh=e.pickedMesh,this._pickedDownMesh===this._pickedUpMesh&&(r.onPointerPick&&r.onPointerPick(t,e),i.singleClick&&!i.ignore&&r.onPointerObservable.observers.length>this._cameraObserverCount)){let a=it.POINTERPICK,o=new Ea(a,t,e);this._setRayOnPointerInfo(e,t),r.onPointerObservable.notifyObservers(o,a)}let s=e.pickedMesh._getActionManagerForTrigger();if(s&&!i.ignore){s.processTrigger(7,$r.CreateNew(e.pickedMesh,t,e)),!i.hasSwiped&&i.singleClick&&s.processTrigger(1,$r.CreateNew(e.pickedMesh,t,e));let a=e.pickedMesh._getActionManagerForTrigger(6);i.doubleClick&&a&&a.processTrigger(6,$r.CreateNew(e.pickedMesh,t,e))}}else if(!i.ignore)for(let s of r._pointerUpStage)e=s.action(this._unTranslatedPointerX,this._unTranslatedPointerY,e,t,i.doubleClick);if(this._pickedDownMesh&&this._pickedDownMesh!==this._pickedUpMesh){let s=this._pickedDownMesh._getActionManagerForTrigger(16);s&&s.processTrigger(16,$r.CreateNew(this._pickedDownMesh,t))}if(!i.ignore){let s=new Ea(it.POINTERUP,t,e);if(this._setRayOnPointerInfo(e,t),r.onPointerObservable.notifyObservers(s,it.POINTERUP),r.onPointerUp&&r.onPointerUp(t,e,it.POINTERUP),!i.hasSwiped&&!this._skipPointerTap&&!this._isMultiTouchGesture){let a=0;if(i.singleClick?a=it.POINTERTAP:i.doubleClick&&(a=it.POINTERDOUBLETAP),a){let o=new Ea(a,t,e);r.onPointerObservable.hasObservers()&&r.onPointerObservable.hasSpecificMask(a)&&r.onPointerObservable.notifyObservers(o,a)}}}}isPointerCaptured(e=0){return this._pointerCaptures[e]}attachControl(e=!0,t=!0,i=!0,r=null){let s=this._scene,a=s.getEngine();r||(r=a.getInputElement()),this._alreadyAttached&&this.detachControl(),r&&(this._alreadyAttachedTo=r),this._deviceSourceManager=new DT(a),this._initActionManager=o=>{if(!this._meshPickProceed){let l=s.skipPointerUpPicking||s._registeredActions===0&&!this._checkForPicking()&&!s.onPointerUp?null:s.pick(this._unTranslatedPointerX,this._unTranslatedPointerY,s.pointerUpPredicate,s.pointerUpFastCheck,s.cameraToUseForPointers,s.pointerUpTrianglePredicate);this._currentPickResult=l,l&&(o=l.hit&&l.pickedMesh?l.pickedMesh._getActionManagerForTrigger():null),this._meshPickProceed=!0}return o},this._delayedSimpleClick=(o,l,c)=>{if((Date.now()-this._previousStartingPointerTime>n.DoubleClickDelay&&!this._doubleClickOccured||o!==this._previousButtonPressed)&&(this._doubleClickOccured=!1,l.singleClick=!0,l.ignore=!1,this._delayedClicks[o])){let f=this._delayedClicks[o].evt,h=it.POINTERTAP,d=new Ea(h,f,this._currentPickResult);s.onPointerObservable.hasObservers()&&s.onPointerObservable.hasSpecificMask(h)&&s.onPointerObservable.notifyObservers(d,h),this._delayedClicks[o]=null}},this._initClickEvent=(o,l,c,f)=>{var _,p;let h=new LT;this._currentPickResult=null;let d=null,u=o.hasSpecificMask(it.POINTERPICK)||l.hasSpecificMask(it.POINTERPICK)||o.hasSpecificMask(it.POINTERTAP)||l.hasSpecificMask(it.POINTERTAP)||o.hasSpecificMask(it.POINTERDOUBLETAP)||l.hasSpecificMask(it.POINTERDOUBLETAP);!u&&Hl&&(d=this._initActionManager(d,h),d&&(u=d.hasPickTriggers));let m=!1;if(u=u&&!this._isMultiTouchGesture,u){let g=c.button;if(h.hasSwiped=this._isPointerSwiping(),!h.hasSwiped){let v=!n.ExclusiveDoubleClickMode;if(v||(v=!o.hasSpecificMask(it.POINTERDOUBLETAP)&&!l.hasSpecificMask(it.POINTERDOUBLETAP),v&&!Hl.HasSpecificTrigger(6)&&(d=this._initActionManager(d,h),d&&(v=!d.hasSpecificTrigger(6)))),v)(Date.now()-this._previousStartingPointerTime>n.DoubleClickDelay||g!==this._previousButtonPressed)&&(h.singleClick=!0,f(h,this._currentPickResult),m=!0);else{let A={evt:c,clickInfo:h,timeoutId:window.setTimeout(this._delayedSimpleClick.bind(this,g,h,f),n.DoubleClickDelay)};this._delayedClicks[g]=A}let x=o.hasSpecificMask(it.POINTERDOUBLETAP)||l.hasSpecificMask(it.POINTERDOUBLETAP);!x&&Hl.HasSpecificTrigger(6)&&(d=this._initActionManager(d,h),d&&(x=d.hasSpecificTrigger(6))),x&&(g===this._previousButtonPressed&&Date.now()-this._previousStartingPointerTime{if(this._updatePointerPosition(o),!this._isSwiping&&this._swipeButtonPressed!==-1&&(this._isSwiping=Math.abs(this._startingPointerPosition.x-this._pointerX)>n.DragMovementThreshold||Math.abs(this._startingPointerPosition.y-this._pointerY)>n.DragMovementThreshold),a.isPointerLock&&a._verifyPointerLock(),this._checkPrePointerObservable(null,o,o.inputIndex>=Et.MouseWheelX&&o.inputIndex<=Et.MouseWheelZ?it.POINTERWHEEL:it.POINTERMOVE)||!s.cameraToUseForPointers&&!s.activeCamera)return;if(s.skipPointerMovePicking){this._processPointerMove(new Hn,o);return}s.pointerMovePredicate||(s.pointerMovePredicate=c=>c.isPickable&&c.isVisible&&c.isReady()&&c.isEnabled()&&(c.enablePointerMoveEvents||s.constantlyUpdateMeshUnderPointer||c._getActionManagerForTrigger()!==null)&&(!s.cameraToUseForPointers||(s.cameraToUseForPointers.layerMask&c.layerMask)!==0));let l=s._registeredActions>0||s.constantlyUpdateMeshUnderPointer?this._pickMove(o):null;this._processPointerMove(l,o)},this._onPointerDown=o=>{var f;let l=this._activePointerIds.indexOf(-1);if(l===-1?this._activePointerIds.push(o.pointerId):this._activePointerIds[l]=o.pointerId,this._activePointerIdsCount++,this._pickedDownMesh=null,this._meshPickProceed=!1,n.ExclusiveDoubleClickMode){for(let h=0;hh.isPickable&&h.isVisible&&h.isReady()&&h.isEnabled()&&(!s.cameraToUseForPointers||(s.cameraToUseForPointers.layerMask&h.layerMask)!==0)),this._pickedDownMesh=null;let c;s.skipPointerDownPicking||s._registeredActions===0&&!this._checkForPicking()&&!s.onPointerDown?c=new Hn:c=s.pick(this._unTranslatedPointerX,this._unTranslatedPointerY,s.pointerDownPredicate,s.pointerDownFastCheck,s.cameraToUseForPointers,s.pointerDownTrianglePredicate),this._processPointerDown(c,o)},this._onPointerUp=o=>{let l=this._activePointerIds.indexOf(o.pointerId);l!==-1&&(this._activePointerIds[l]=-1,this._activePointerIdsCount--,this._pickedUpMesh=null,this._meshPickProceed=!1,this._updatePointerPosition(o),s.preventDefaultOnPointerUp&&r&&(o.preventDefault(),r.focus()),this._initClickEvent(s.onPrePointerObservable,s.onPointerObservable,o,(c,f)=>{if(s.onPrePointerObservable.hasObservers()&&(this._skipPointerTap=!1,!c.ignore)){if(this._checkPrePointerObservable(null,o,it.POINTERUP)){this._swipeButtonPressed===o.button&&(this._isSwiping=!1,this._swipeButtonPressed=-1),o.buttons===0&&(this._pointerCaptures[o.pointerId]=!1);return}c.hasSwiped||(c.singleClick&&s.onPrePointerObservable.hasSpecificMask(it.POINTERTAP)&&this._checkPrePointerObservable(null,o,it.POINTERTAP)&&(this._skipPointerTap=!0),c.doubleClick&&s.onPrePointerObservable.hasSpecificMask(it.POINTERDOUBLETAP)&&this._checkPrePointerObservable(null,o,it.POINTERDOUBLETAP)&&(this._skipPointerTap=!0))}if(!this._pointerCaptures[o.pointerId]){this._swipeButtonPressed===o.button&&(this._isSwiping=!1,this._swipeButtonPressed=-1);return}o.buttons===0&&(this._pointerCaptures[o.pointerId]=!1),!(!s.cameraToUseForPointers&&!s.activeCamera)&&(s.pointerUpPredicate||(s.pointerUpPredicate=h=>h.isPickable&&h.isVisible&&h.isReady()&&h.isEnabled()&&(!s.cameraToUseForPointers||(s.cameraToUseForPointers.layerMask&h.layerMask)!==0)),!this._meshPickProceed&&(Hl&&Hl.HasTriggers||this._checkForPicking()||s.onPointerUp)&&this._initActionManager(null,c),f||(f=this._currentPickResult),this._processPointerUp(f,o,c),this._previousPickResult=this._currentPickResult,this._swipeButtonPressed===o.button&&(this._isSwiping=!1,this._swipeButtonPressed=-1))}))},this._onKeyDown=o=>{let l=io.KEYDOWN;if(s.onPreKeyboardObservable.hasObservers()){let c=new C_(l,o);if(s.onPreKeyboardObservable.notifyObservers(c,l),c.skipOnKeyboardObservable)return}if(s.onKeyboardObservable.hasObservers()){let c=new Hu(l,o);s.onKeyboardObservable.notifyObservers(c,l)}s.actionManager&&s.actionManager.processTrigger(14,$r.CreateNewFromScene(s,o))},this._onKeyUp=o=>{let l=io.KEYUP;if(s.onPreKeyboardObservable.hasObservers()){let c=new C_(l,o);if(s.onPreKeyboardObservable.notifyObservers(c,l),c.skipOnKeyboardObservable)return}if(s.onKeyboardObservable.hasObservers()){let c=new Hu(l,o);s.onKeyboardObservable.notifyObservers(c,l)}s.actionManager&&s.actionManager.processTrigger(15,$r.CreateNewFromScene(s,o))},this._deviceSourceManager.onDeviceConnectedObservable.add(o=>{o.deviceType===qe.Mouse?o.onInputChangedObservable.add(l=>{this._originMouseEvent=l,l.inputIndex===Et.LeftClick||l.inputIndex===Et.MiddleClick||l.inputIndex===Et.RightClick||l.inputIndex===Et.BrowserBack||l.inputIndex===Et.BrowserForward?t&&o.getInput(l.inputIndex)===1?this._onPointerDown(l):e&&o.getInput(l.inputIndex)===0&&this._onPointerUp(l):i&&(l.inputIndex===Et.Move?this._onPointerMove(l):(l.inputIndex===Et.MouseWheelX||l.inputIndex===Et.MouseWheelY||l.inputIndex===Et.MouseWheelZ)&&this._onPointerMove(l))}):o.deviceType===qe.Touch?o.onInputChangedObservable.add(l=>{l.inputIndex===Et.LeftClick&&(t&&o.getInput(l.inputIndex)===1?(this._onPointerDown(l),this._activePointerIdsCount>1&&(this._isMultiTouchGesture=!0)):e&&o.getInput(l.inputIndex)===0&&(this._onPointerUp(l),this._activePointerIdsCount===0&&(this._isMultiTouchGesture=!1))),i&&l.inputIndex===Et.Move&&this._onPointerMove(l)}):o.deviceType===qe.Keyboard&&o.onInputChangedObservable.add(l=>{l.type==="keydown"?this._onKeyDown(l):l.type==="keyup"&&this._onKeyUp(l)})}),this._alreadyAttached=!0}detachControl(){this._alreadyAttached&&(this._deviceSourceManager.dispose(),this._deviceSourceManager=null,this._alreadyAttachedTo&&!this._scene.doNotHandleCursors&&(this._alreadyAttachedTo.style.cursor=this._scene.defaultCursor),this._alreadyAttached=!1,this._alreadyAttachedTo=null)}setPointerOverMesh(e,t=0,i,r){if(this._meshUnderPointerId[t]===e&&(!e||!e._internalAbstractMeshDataInfo._pointerOverDisableMeshTesting))return;let s=this._meshUnderPointerId[t],a;s&&(a=s._getActionManagerForTrigger(10),a&&a.processTrigger(10,new $r(s,this._pointerX,this._pointerY,e,r,{pointerId:t}))),e?(this._meshUnderPointerId[t]=e,this._pointerOverMesh=e,a=e._getActionManagerForTrigger(9),a&&a.processTrigger(9,new $r(e,this._pointerX,this._pointerY,e,r,{pointerId:t,pickResult:i}))):(delete this._meshUnderPointerId[t],this._pointerOverMesh=null),this._scene.onMeshUnderPointerUpdatedObservable.hasObservers()&&this._scene.onMeshUnderPointerUpdatedObservable.notifyObservers({mesh:e,pointerId:t})}getPointerOverMesh(){return this.meshUnderPointer}_invalidateMesh(e){this._pointerOverMesh===e&&(this._pointerOverMesh=null),this._pickedDownMesh===e&&(this._pickedDownMesh=null),this._pickedUpMesh===e&&(this._pickedUpMesh=null);for(let t in this._meshUnderPointerId)this._meshUnderPointerId[t]===e&&delete this._meshUnderPointerId[t]}};Rn.DragMovementThreshold=10;Rn.LongPressDelay=500;Rn.DoubleClickDelay=300;Rn.ExclusiveDoubleClickMode=!1});var qo,wM=C(()=>{Cl();qo=class n{get min(){return this._min}get max(){return this._max}get average(){return this._average}get lastSecAverage(){return this._lastSecAverage}get current(){return this._current}get total(){return this._totalAccumulated}get count(){return this._totalValueCount}constructor(){this._startMonitoringTime=0,this._min=0,this._max=0,this._average=0,this._lastSecAverage=0,this._current=0,this._totalValueCount=0,this._totalAccumulated=0,this._lastSecAccumulated=0,this._lastSecTime=0,this._lastSecValueCount=0}fetchNewFrame(){this._totalValueCount++,this._current=0,this._lastSecValueCount++}addCount(e,t){n.Enabled&&(this._current+=e,t&&this._fetchResult())}beginMonitoring(){n.Enabled&&(this._startMonitoringTime=fr.Now)}endMonitoring(e=!0){if(!n.Enabled)return;e&&this.fetchNewFrame();let t=fr.Now;this._current=t-this._startMonitoringTime,e&&this._fetchResult()}endFrame(){this._fetchResult()}_fetchResult(){this._totalAccumulated+=this._current,this._lastSecAccumulated+=this._current,this._min=Math.min(this._min,this._current),this._max=Math.max(this._max,this._current),this._average=this._totalAccumulated/this._totalValueCount;let e=fr.Now;e-this._lastSecTime>1e3&&(this._lastSecAverage=this._lastSecAccumulated/this._lastSecValueCount,this._lastSecTime=e,this._lastSecAccumulated=0,this._lastSecValueCount=0)}};qo.Enabled=!0});var zl,OT=C(()=>{zl=class{static get UniqueId(){let e=this._UniqueIdCounter;return this._UniqueIdCounter++,e}};zl._UniqueIdCounter=1});var NT,iB=C(()=>{NT=class{constructor(){this.pointerDownFastCheck=!1,this.pointerUpFastCheck=!1,this.pointerMoveFastCheck=!1,this.skipPointerMovePicking=!1,this.skipPointerDownPicking=!1,this.skipPointerUpPicking=!1}}});var Iie,Mie,rB,Qt,ps=C(()=>{Ci();Cl();hi();$a();M2();tf();Ve();x_();nf();R_();PM();uT();M_();pT();Wu();fa();Pi();an();tB();wM();Ht();eT();OT();Fl();v_();Ho();iB();Pt();Vi();Go();Iie=new Mi,Mie=new Mi;(function(n){n[n.BackwardCompatible=0]="BackwardCompatible",n[n.Intermediate=1]="Intermediate",n[n.Aggressive=2]="Aggressive"})(rB||(rB={}));Qt=class n{static DefaultMaterialFactory(e){throw Xe("StandardMaterial")}static CollisionCoordinatorFactory(){throw Xe("DefaultCollisionCoordinator")}get clearColor(){return this._clearColor}set clearColor(e){e!==this._clearColor&&(this._clearColor=e,this.onClearColorChangedObservable.notifyObservers(this._clearColor))}get imageProcessingConfiguration(){return this._imageProcessingConfiguration}get performancePriority(){return this._performancePriority}set performancePriority(e){if(e!==this._performancePriority){switch(this._performancePriority=e,e){case 0:this.skipFrustumClipping=!1,this._renderingManager.maintainStateBetweenFrames=!1,this.skipPointerMovePicking=!1,this.autoClear=!0;break;case 1:this.skipFrustumClipping=!1,this._renderingManager.maintainStateBetweenFrames=!1,this.skipPointerMovePicking=!0,this.autoClear=!1;break;case 2:this.skipFrustumClipping=!0,this._renderingManager.maintainStateBetweenFrames=!0,this.skipPointerMovePicking=!0,this.autoClear=!1;break}this.onScenePerformancePriorityChangedObservable.notifyObservers(e)}}set forceWireframe(e){this._forceWireframe!==e&&(this._forceWireframe=e,this.markAllMaterialsAsDirty(16))}get forceWireframe(){return this._forceWireframe}set skipFrustumClipping(e){this._skipFrustumClipping!==e&&(this._skipFrustumClipping=e)}get skipFrustumClipping(){return this._skipFrustumClipping}set forcePointsCloud(e){this._forcePointsCloud!==e&&(this._forcePointsCloud=e,this.markAllMaterialsAsDirty(16))}get forcePointsCloud(){return this._forcePointsCloud}get environmentTexture(){return this._environmentTexture}set environmentTexture(e){this._environmentTexture!==e&&(this._environmentTexture=e,this.onEnvironmentTextureChangedObservable.notifyObservers(e),this.markAllMaterialsAsDirty(1))}getNodes(){let e=[];e=e.concat(this.meshes),e=e.concat(this.lights),e=e.concat(this.cameras),e=e.concat(this.transformNodes);for(let t of this.skeletons)e=e.concat(t.bones);return e}get animationPropertiesOverride(){return this._animationPropertiesOverride}set animationPropertiesOverride(e){this._animationPropertiesOverride=e}set onDispose(e){this._onDisposeObserver&&this.onDisposeObservable.remove(this._onDisposeObserver),this._onDisposeObserver=this.onDisposeObservable.add(e)}set beforeRender(e){this._onBeforeRenderObserver&&this.onBeforeRenderObservable.remove(this._onBeforeRenderObserver),e&&(this._onBeforeRenderObserver=this.onBeforeRenderObservable.add(e))}set afterRender(e){this._onAfterRenderObserver&&this.onAfterRenderObservable.remove(this._onAfterRenderObserver),e&&(this._onAfterRenderObserver=this.onAfterRenderObservable.add(e))}set beforeCameraRender(e){this._onBeforeCameraRenderObserver&&this.onBeforeCameraRenderObservable.remove(this._onBeforeCameraRenderObserver),this._onBeforeCameraRenderObserver=this.onBeforeCameraRenderObservable.add(e)}set afterCameraRender(e){this._onAfterCameraRenderObserver&&this.onAfterCameraRenderObservable.remove(this._onAfterCameraRenderObserver),this._onAfterCameraRenderObserver=this.onAfterCameraRenderObservable.add(e)}get pointerDownPredicate(){return this._pointerPickingConfiguration.pointerDownPredicate}set pointerDownPredicate(e){this._pointerPickingConfiguration.pointerDownPredicate=e}get pointerUpPredicate(){return this._pointerPickingConfiguration.pointerUpPredicate}set pointerUpPredicate(e){this._pointerPickingConfiguration.pointerUpPredicate=e}get pointerMovePredicate(){return this._pointerPickingConfiguration.pointerMovePredicate}set pointerMovePredicate(e){this._pointerPickingConfiguration.pointerMovePredicate=e}get pointerDownFastCheck(){return this._pointerPickingConfiguration.pointerDownFastCheck}set pointerDownFastCheck(e){this._pointerPickingConfiguration.pointerDownFastCheck=e}get pointerUpFastCheck(){return this._pointerPickingConfiguration.pointerUpFastCheck}set pointerUpFastCheck(e){this._pointerPickingConfiguration.pointerUpFastCheck=e}get pointerMoveFastCheck(){return this._pointerPickingConfiguration.pointerMoveFastCheck}set pointerMoveFastCheck(e){this._pointerPickingConfiguration.pointerMoveFastCheck=e}get skipPointerMovePicking(){return this._pointerPickingConfiguration.skipPointerMovePicking}set skipPointerMovePicking(e){this._pointerPickingConfiguration.skipPointerMovePicking=e}get skipPointerDownPicking(){return this._pointerPickingConfiguration.skipPointerDownPicking}set skipPointerDownPicking(e){this._pointerPickingConfiguration.skipPointerDownPicking=e}get skipPointerUpPicking(){return this._pointerPickingConfiguration.skipPointerUpPicking}set skipPointerUpPicking(e){this._pointerPickingConfiguration.skipPointerUpPicking=e}get unTranslatedPointer(){return this._inputManager.unTranslatedPointer}static get DragMovementThreshold(){return Rn.DragMovementThreshold}static set DragMovementThreshold(e){Rn.DragMovementThreshold=e}static get LongPressDelay(){return Rn.LongPressDelay}static set LongPressDelay(e){Rn.LongPressDelay=e}static get DoubleClickDelay(){return Rn.DoubleClickDelay}static set DoubleClickDelay(e){Rn.DoubleClickDelay=e}static get ExclusiveDoubleClickMode(){return Rn.ExclusiveDoubleClickMode}static set ExclusiveDoubleClickMode(e){Rn.ExclusiveDoubleClickMode=e}get _eyePosition(){var e,t,i;return(i=(t=this._forcedViewPosition)!=null?t:(e=this.activeCamera)==null?void 0:e.globalPosition)!=null?i:b.ZeroReadOnly}bindEyePosition(e,t="vEyePosition",i=!1){let r=this._eyePosition,s=this.useRightHandedSystem===(this._mirroredCameraPosition!=null),a=this.floatingOriginOffset,o=Iie.set(r.x,r.y,r.z,s?-1:1),l=o.subtractFromFloatsToRef(a.x,a.y,a.z,0,Mie);return e&&(i?e.setFloat3(t,l.x,l.y,l.z):e.setVector4(t,l)),o}finalizeSceneUbo(){let e=this.getSceneUniformBuffer(),t=this.bindEyePosition(null),i=this.floatingOriginOffset;return e.updateFloat4("vEyePosition",t.x-i.x,t.y-i.y,t.z-i.z,t.w),e.update(),e}set useRightHandedSystem(e){this._useRightHandedSystem!==e&&(this._useRightHandedSystem=e,this.markAllMaterialsAsDirty(16))}get useRightHandedSystem(){return this._useRightHandedSystem}setStepId(e){this._currentStepId=e}getStepId(){return this._currentStepId}getInternalStep(){return this._currentInternalStep}set fogEnabled(e){this._fogEnabled!==e&&(this._fogEnabled=e,this.markAllMaterialsAsDirty(16))}get fogEnabled(){return this._fogEnabled}set fogMode(e){this._fogMode!==e&&(this._fogMode=e,this.markAllMaterialsAsDirty(16))}get fogMode(){return this._fogMode}get prePass(){return!!this.prePassRenderer&&this.prePassRenderer.defaultRT.enabled}set shadowsEnabled(e){this._shadowsEnabled!==e&&(this._shadowsEnabled=e,this.markAllMaterialsAsDirty(2))}get shadowsEnabled(){return this._shadowsEnabled}set lightsEnabled(e){this._lightsEnabled!==e&&(this._lightsEnabled=e,this.markAllMaterialsAsDirty(2))}get lightsEnabled(){return this._lightsEnabled}get activeCameras(){return this._activeCameras}set activeCameras(e){this._unObserveActiveCameras&&(this._unObserveActiveCameras(),this._unObserveActiveCameras=null),e&&(this._unObserveActiveCameras=JS(e,()=>{this.onActiveCamerasChanged.notifyObservers(this)})),this._activeCameras=e}get activeCamera(){return this._activeCamera}set activeCamera(e){e!==this._activeCamera&&(this._activeCamera=e,this.onActiveCameraChanged.notifyObservers(this))}get _hasDefaultMaterial(){return n.DefaultMaterialFactory!==n._OriginalDefaultMaterialFactory}get defaultMaterial(){return this._defaultMaterial||(this._defaultMaterial=n.DefaultMaterialFactory(this)),this._defaultMaterial}set defaultMaterial(e){this._defaultMaterial=e}set texturesEnabled(e){this._texturesEnabled!==e&&(this._texturesEnabled=e,this.markAllMaterialsAsDirty(1))}get texturesEnabled(){return this._texturesEnabled}get frameGraph(){return this._frameGraph}set frameGraph(e){if(this._frameGraph){this._frameGraph=e,e||(this.customRenderFunction=this._currentCustomRenderFunction);return}this._frameGraph=e,e&&(this._currentCustomRenderFunction=this.customRenderFunction,this.customRenderFunction=this._renderWithFrameGraph,this.activeCamera=null)}set skeletonsEnabled(e){this._skeletonsEnabled!==e&&(this._skeletonsEnabled=e,this.markAllMaterialsAsDirty(8))}get skeletonsEnabled(){return this._skeletonsEnabled}get collisionCoordinator(){return this._collisionCoordinator||(this._collisionCoordinator=n.CollisionCoordinatorFactory(),this._collisionCoordinator.init(this)),this._collisionCoordinator}get renderingManager(){return this._renderingManager}get frustumPlanes(){return this._frustumPlanes}_registerTransientComponents(){if(this._transientComponents.length>0){for(let e of this._transientComponents)e.register();this._transientComponents.length=0}}_addComponent(e){this._components.push(e),this._transientComponents.push(e);let t=e;t.addFromContainer&&t.serialize&&this._serializableComponents.push(t)}_getComponent(e){for(let t of this._components)if(t.name===e)return t;return null}get uniqueId(){return this._uniqueId}constructor(e,t){this._inputManager=new Rn(this),this.cameraToUseForPointers=null,this._isScene=!0,this._blockEntityCollection=!1,this.autoClear=!0,this.autoClearDepthAndStencil=!0,this._clearColor=new lt(.2,.2,.3,1),this.onClearColorChangedObservable=new ee,this.ambientColor=new Te(0,0,0),this.environmentIntensity=1,this.iblIntensity=1,this._performancePriority=0,this.onScenePerformancePriorityChangedObservable=new ee,this._forceWireframe=!1,this._skipFrustumClipping=!1,this._forcePointsCloud=!1,this.rootNodes=[],this.cameras=[],this.lights=[],this.meshes=[],this.skeletons=[],this.particleSystems=[],this.animations=[],this.animationGroups=[],this.multiMaterials=[],this.materials=[],this.morphTargetManagers=[],this.geometries=[],this.transformNodes=[],this.actionManagers=[],this.objectRenderers=[],this.textures=[],this._environmentTexture=null,this.postProcesses=[],this.effectLayers=[],this.sounds=null,this.layers=[],this.lensFlareSystems=[],this.proceduralTextures=[],this.animationsEnabled=!0,this._animationPropertiesOverride=null,this.useConstantAnimationDeltaTime=!1,this.constantlyUpdateMeshUnderPointer=!1,this.hoverCursor="pointer",this.defaultCursor="",this.doNotHandleCursors=!1,this.preventDefaultOnPointerDown=!0,this.preventDefaultOnPointerUp=!0,this.metadata=null,this.reservedDataStore=null,this.disableOfflineSupportExceptionRules=[],this.onDisposeObservable=new ee,this._onDisposeObserver=null,this.onBeforeRenderObservable=new ee,this._onBeforeRenderObserver=null,this.onAfterRenderObservable=new ee,this.onAfterRenderCameraObservable=new ee,this._onAfterRenderObserver=null,this.onBeforeAnimationsObservable=new ee,this.onAfterAnimationsObservable=new ee,this.onBeforeDrawPhaseObservable=new ee,this.onAfterDrawPhaseObservable=new ee,this.onReadyObservable=new ee,this.onBeforeCameraRenderObservable=new ee,this._onBeforeCameraRenderObserver=null,this.onAfterCameraRenderObservable=new ee,this._onAfterCameraRenderObserver=null,this.onBeforeActiveMeshesEvaluationObservable=new ee,this.onAfterActiveMeshesEvaluationObservable=new ee,this.onBeforeParticlesRenderingObservable=new ee,this.onAfterParticlesRenderingObservable=new ee,this.onDataLoadedObservable=new ee,this.onNewCameraAddedObservable=new ee,this.onCameraRemovedObservable=new ee,this.onNewLightAddedObservable=new ee,this.onLightRemovedObservable=new ee,this.onNewGeometryAddedObservable=new ee,this.onGeometryRemovedObservable=new ee,this.onNewTransformNodeAddedObservable=new ee,this.onTransformNodeRemovedObservable=new ee,this.onNewMeshAddedObservable=new ee,this.onMeshRemovedObservable=new ee,this.onNewSkeletonAddedObservable=new ee,this.onSkeletonRemovedObservable=new ee,this.onNewParticleSystemAddedObservable=new ee,this.onParticleSystemRemovedObservable=new ee,this.onNewAnimationGroupAddedObservable=new ee,this.onAnimationGroupRemovedObservable=new ee,this.onNewMaterialAddedObservable=new ee,this.onNewMultiMaterialAddedObservable=new ee,this.onMaterialRemovedObservable=new ee,this.onMultiMaterialRemovedObservable=new ee,this.onNewTextureAddedObservable=new ee,this.onTextureRemovedObservable=new ee,this.onNewFrameGraphAddedObservable=new ee,this.onFrameGraphRemovedObservable=new ee,this.onNewObjectRendererAddedObservable=new ee,this.onObjectRendererRemovedObservable=new ee,this.onNewPostProcessAddedObservable=new ee,this.onPostProcessRemovedObservable=new ee,this.onNewEffectLayerAddedObservable=new ee,this.onEffectLayerRemovedObservable=new ee,this.onBeforeRenderTargetsRenderObservable=new ee,this.onAfterRenderTargetsRenderObservable=new ee,this.onBeforeStepObservable=new ee,this.onAfterStepObservable=new ee,this.onActiveCameraChanged=new ee,this.onActiveCamerasChanged=new ee,this.onBeforeRenderingGroupObservable=new ee,this.onAfterRenderingGroupObservable=new ee,this.onMeshImportedObservable=new ee,this.onAnimationFileImportedObservable=new ee,this.onEnvironmentTextureChangedObservable=new ee,this.onMeshUnderPointerUpdatedObservable=new ee,this._registeredForLateAnimationBindings=new Ja(256),this._pointerPickingConfiguration=new NT,this.onPrePointerObservable=new ee,this.onPointerObservable=new ee,this.onPreKeyboardObservable=new ee,this.onKeyboardObservable=new ee,this._useRightHandedSystem=!1,this._timeAccumulator=0,this._currentStepId=0,this._currentInternalStep=0,this._fogEnabled=!0,this._fogMode=n.FOGMODE_NONE,this.fogColor=new Te(.2,.2,.3),this.fogDensity=.1,this.fogStart=0,this.fogEnd=1e3,this.needsPreviousWorldMatrices=!1,this._shadowsEnabled=!0,this._lightsEnabled=!0,this._unObserveActiveCameras=null,this._texturesEnabled=!0,this._frameGraph=null,this.frameGraphs=[],this.physicsEnabled=!0,this.particlesEnabled=!0,this.spritesEnabled=!0,this._skeletonsEnabled=!0,this.lensFlaresEnabled=!0,this.collisionsEnabled=!0,this.gravity=new b(0,-9.807,0),this.postProcessesEnabled=!0,this.renderTargetsEnabled=!0,this.dumpNextRenderTargets=!1,this.customRenderTargets=[],this.importedMeshesFiles=[],this.probesEnabled=!0,this._meshesForIntersections=new Ja(256),this.proceduralTexturesEnabled=!0,this._totalVertices=new qo,this._activeIndices=new qo,this._activeParticles=new qo,this._activeBones=new qo,this._animationTime=0,this.animationTimeScale=1,this._renderId=0,this._frameId=0,this._executeWhenReadyTimeoutId=null,this._intermediateRendering=!1,this._defaultFrameBufferCleared=!1,this._viewUpdateFlag=-1,this._projectionUpdateFlag=-1,this._toBeDisposed=new Array(256),this._activeRequests=new Array,this._pendingData=[],this._isDisposed=!1,this._isReadyChecks=[],this.dispatchAllSubMeshesOfActiveMeshes=!1,this._activeMeshes=new Fi(256),this._processedMaterials=new Fi(256),this._renderTargets=new Ja(256),this._materialsRenderTargets=new Ja(256),this._activeParticleSystems=new Fi(256),this._activeSkeletons=new Ja(32),this._softwareSkinnedMeshes=new Ja(32),this._activeAnimatables=new Array,this._transformMatrix=K.Zero(),this.requireLightSorting=!1,this._components=[],this._serializableComponents=[],this._transientComponents=[],this._beforeCameraUpdateStage=er.Create(),this._beforeClearStage=er.Create(),this._beforeRenderTargetClearStage=er.Create(),this._gatherRenderTargetsStage=er.Create(),this._gatherActiveCameraRenderTargetsStage=er.Create(),this._isReadyForMeshStage=er.Create(),this._beforeEvaluateActiveMeshStage=er.Create(),this._evaluateSubMeshStage=er.Create(),this._preActiveMeshStage=er.Create(),this._cameraDrawRenderTargetStage=er.Create(),this._beforeCameraDrawStage=er.Create(),this._beforeRenderTargetDrawStage=er.Create(),this._beforeRenderingGroupDrawStage=er.Create(),this._beforeRenderingMeshStage=er.Create(),this._afterRenderingMeshStage=er.Create(),this._afterRenderingGroupDrawStage=er.Create(),this._afterCameraDrawStage=er.Create(),this._afterCameraPostProcessStage=er.Create(),this._afterRenderTargetDrawStage=er.Create(),this._afterRenderTargetPostProcessStage=er.Create(),this._afterRenderStage=er.Create(),this._pointerMoveStage=er.Create(),this._pointerDownStage=er.Create(),this._pointerUpStage=er.Create(),this._geometriesByUniqueId=null,this._uniqueId=0,this._defaultMeshCandidates={data:[],length:0},this._defaultSubMeshCandidates={data:[],length:0},this.onReadyTimeoutObservable=new ee,this.onReadyTimeoutDuration=120*1e3,this._timeoutChecksStartTime=0,this._floatingOriginScene=void 0,this._preventFreeActiveMeshesAndRenderingGroups=!1,this._activeMeshesFrozen=!1,this._activeMeshesFrozenButKeepClipping=!1,this._skipEvaluateActiveMeshesCompletely=!1,this._freezeActiveMeshesCancel=null,this._useCurrentFrameBuffer=!1,this._allowPostProcessClearColor=!0,this.getDeterministicFrameTime=()=>this._engine.getTimeStep(),this._getFloatingOriginScene=()=>this._floatingOriginScene,this._registeredActions=0,this._blockMaterialDirtyMechanism=!1,this._perfCollector=null,this.activeCameras=[],this._uniqueId=this.getUniqueId();let i={useGeometryUniqueIdsMap:!0,useMaterialMeshMap:!0,useClonedMeshMap:!0,virtual:!1,defaultCameraLayerMask:268435455,defaultRenderableLayerMask:268435455,...t};this.defaultCameraLayerMask=i.defaultCameraLayerMask,this.defaultRenderableLayerMask=i.defaultRenderableLayerMask,e=this._engine=e||Le.LastCreatedEngine,i.virtual?e._virtualScenes.push(this):(Le._LastCreatedScene=this,e.scenes.push(this)),(e.getCreationOptions().useLargeWorldRendering||t!=null&&t.useFloatingOrigin)&&(G2(),this._floatingOriginScene=this,va.getScene=this._getFloatingOriginScene),this._uid=null,this._renderingManager=new ua(this),Ul&&(this.postProcessManager=new Ul(this)),ar()&&this.attachControl(),this._createUbo(),Wt&&(this._imageProcessingConfiguration=new Wt),this.setDefaultCandidateProviders(),i.useGeometryUniqueIdsMap&&(this._geometriesByUniqueId={}),this.useMaterialMeshMap=i.useMaterialMeshMap,this.useClonedMeshMap=i.useClonedMeshMap,(!t||!t.virtual)&&e.onNewSceneAddedObservable.notifyObservers(this)}getClassName(){return"Scene"}_getDefaultMeshCandidates(){return this._defaultMeshCandidates.data=this.meshes,this._defaultMeshCandidates.length=this.meshes.length,this._defaultMeshCandidates}_getDefaultSubMeshCandidates(e){return this._defaultSubMeshCandidates.data=e.subMeshes,this._defaultSubMeshCandidates.length=e.subMeshes.length,this._defaultSubMeshCandidates}setDefaultCandidateProviders(){this.getActiveMeshCandidates=()=>this._getDefaultMeshCandidates(),this.getActiveSubMeshCandidates=e=>this._getDefaultSubMeshCandidates(e),this.getIntersectingSubMeshCandidates=(e,t)=>this._getDefaultSubMeshCandidates(e),this.getCollidingSubMeshCandidates=(e,t)=>this._getDefaultSubMeshCandidates(e)}get meshUnderPointer(){return this._inputManager.meshUnderPointer}get pointerX(){return this._inputManager.pointerX}set pointerX(e){this._inputManager.pointerX=e}get pointerY(){return this._inputManager.pointerY}set pointerY(e){this._inputManager.pointerY=e}getCachedMaterial(){return this._cachedMaterial}getCachedEffect(){return this._cachedEffect}getCachedVisibility(){return this._cachedVisibility}isCachedMaterialInvalid(e,t,i=1){return this._cachedEffect!==t||this._cachedMaterial!==e||this._cachedVisibility!==i}getEngine(){return this._engine}getTotalVertices(){return this._totalVertices.current}get totalVerticesPerfCounter(){return this._totalVertices}getActiveIndices(){return this._activeIndices.current}get totalActiveIndicesPerfCounter(){return this._activeIndices}getActiveParticles(){return this._activeParticles.current}get activeParticlesPerfCounter(){return this._activeParticles}getActiveBones(){return this._activeBones.current}get activeBonesPerfCounter(){return this._activeBones}getActiveMeshes(){return this._activeMeshes}getAnimationRatio(){return this._animationRatio!==void 0?this._animationRatio:1}getRenderId(){return this._renderId}getFrameId(){return this._frameId}incrementRenderId(){this._renderId++}_createUbo(){this.setSceneUniformBuffer(this.createSceneUniformBuffer())}simulatePointerMove(e,t){return this._inputManager.simulatePointerMove(e,t),this}simulatePointerDown(e,t){return this._inputManager.simulatePointerDown(e,t),this}simulatePointerUp(e,t,i){return this._inputManager.simulatePointerUp(e,t,i),this}isPointerCaptured(e=0){return this._inputManager.isPointerCaptured(e)}attachControl(e=!0,t=!0,i=!0){this._inputManager.attachControl(e,t,i)}detachControl(){this._inputManager.detachControl()}isReady(e=!0){var a,o,l;if(this._isDisposed)return!1;let t,i=this.getEngine(),r=i.currentRenderPassId;i.currentRenderPassId=(o=(a=this.activeCamera)==null?void 0:a.renderPassId)!=null?o:r;let s=!0;for(this._pendingData.length>0&&(s=!1),(l=this.prePassRenderer)==null||l.update(),this.useOrderIndependentTransparency&&this.depthPeelingRenderer&&s&&(s=this.depthPeelingRenderer.isReady()),e&&(this._processedMaterials.reset(),this._materialsRenderTargets.reset()),t=0;t0;for(let d of this._isReadyForMeshStage)d.action(c,f)||(s=!1);if(!e)continue;let h=c.material||this.defaultMaterial;if(h)if(h._storeEffectOnSubMeshes)for(let d of c.subMeshes){let u=d.getMaterial();u&&u.hasRenderTargetTextures&&u.getRenderTargetTextures!=null&&this._processedMaterials.indexOf(u)===-1&&(this._processedMaterials.push(u),this._materialsRenderTargets.concatWithNoDuplicate(u.getRenderTargetTextures()))}else h.hasRenderTargetTextures&&h.getRenderTargetTextures!=null&&this._processedMaterials.indexOf(h)===-1&&(this._processedMaterials.push(h),this._materialsRenderTargets.concatWithNoDuplicate(h.getRenderTargetTextures()))}if(e){for(t=0;t0)for(let c of this.activeCameras)c.isReady(!0)||(s=!1);else this.activeCamera&&(this.activeCamera.isReady(!0)||(s=!1));for(let c of this.particleSystems)c.isReady()||(s=!1);if(this.proceduralTexturesEnabled)for(let c of this.proceduralTextures)c.isReady()||(s=!1);if(this.layers)for(let c of this.layers)c.isReady()||(s=!1);if(this.effectLayers)for(let c of this.effectLayers)c.isLayerReady()||(s=!1);for(let c of this._isReadyChecks)c.isReady()||(s=!1);return i.areAllEffectsReady()||(s=!1),i.currentRenderPassId=r,s}resetCachedMaterial(){this._cachedMaterial=null,this._cachedEffect=null,this._cachedVisibility=null}registerBeforeRender(e){this.onBeforeRenderObservable.add(e)}unregisterBeforeRender(e){this.onBeforeRenderObservable.removeCallback(e)}registerAfterRender(e){this.onAfterRenderObservable.add(e)}unregisterAfterRender(e){this.onAfterRenderObservable.removeCallback(e)}_executeOnceBeforeRender(e){let t=()=>{e(),setTimeout(()=>{this.unregisterBeforeRender(t)})};this.registerBeforeRender(t)}executeOnceBeforeRender(e,t){t!==void 0?setTimeout(()=>{this._executeOnceBeforeRender(e)},t):this._executeOnceBeforeRender(e)}addPendingData(e){this._pendingData.push(e)}removePendingData(e){let t=this.isLoading,i=this._pendingData.indexOf(e);i!==-1&&this._pendingData.splice(i,1),t&&!this.isLoading&&this.onDataLoadedObservable.notifyObservers(this)}getWaitingItemsCount(){return this._pendingData.length}get isLoading(){return this._pendingData.length>0}addIsReadyCheck(e){this._isReadyChecks.indexOf(e)===-1&&this._isReadyChecks.push(e)}removeIsReadyCheck(e){let t=this._isReadyChecks.indexOf(e);t!==-1&&this._isReadyChecks.splice(t,1)}executeWhenReady(e,t=!1){this.onReadyObservable.addOnce(e),this._executeWhenReadyTimeoutId===null&&this._checkIsReady(t)}async whenReadyAsync(e=!1){return await new Promise(t=>{this.executeWhenReady(()=>{t()},e)})}_clearReadynessChecksData(){this._timeoutChecksStartTime=0,this.onReadyTimeoutObservable.clear(),this.onReadyObservable.clear(),this._executeWhenReadyTimeoutId=null}_checkIsReady(e=!1){if(this._registerTransientComponents(),this._timeoutChecksStartTime===0)this._timeoutChecksStartTime=fr.Now;else if(this.onReadyTimeoutDuration>0&&fr.Now-this._timeoutChecksStartTime>this.onReadyTimeoutDuration){this.onReadyTimeoutObservable.notifyObservers(this),this._clearReadynessChecksData();return}if(this.isReady(e)){this.onReadyObservable.notifyObservers(this),this._clearReadynessChecksData();return}if(this._isDisposed){this._clearReadynessChecksData();return}this._executeWhenReadyTimeoutId=setTimeout(()=>{this.incrementRenderId(),this._checkIsReady(e)},100)}get animatables(){return this._activeAnimatables}resetLastAnimationTimeFrame(){this._animationTimeLast=fr.Now}getViewMatrix(){return this._viewMatrix}getProjectionMatrix(){return this._projectionMatrix}getInverseProjectionMatrix(){return this._inverseProjectionMatrix}getTransformMatrix(){return this._transformMatrix}setTransformMatrix(e,t,i,r){this._multiviewSceneUboIsActive=!!(i&&r&&this._multiviewSceneUbo),!(this._viewUpdateFlag===e.updateFlag&&this._projectionUpdateFlag===t.updateFlag)&&(this._viewUpdateFlag=e.updateFlag,this._projectionUpdateFlag=t.updateFlag,this._viewMatrix=e,this._projectionMatrix=t,this._inverseProjectionMatrix||(this._inverseProjectionMatrix=new K),this._projectionMatrix.invertToRef(this._inverseProjectionMatrix),this._viewMatrix.multiplyToRef(this._projectionMatrix,this._transformMatrix),this._frustumPlanes?Zc.GetPlanesToRef(this._transformMatrix,this._frustumPlanes):this._frustumPlanes=Zc.GetPlanes(this._transformMatrix),this._multiviewSceneUboIsActive&&this._multiviewSceneUbo.useUbo?this._updateMultiviewUbo(i,r):this._sceneUbo.useUbo&&(this._sceneUbo.updateMatrix("viewProjection",this._transformMatrix),this._sceneUbo.updateMatrix("view",this._viewMatrix),this._sceneUbo.updateMatrix("projection",this._projectionMatrix),this._sceneUbo.updateMatrix("inverseProjection",this._inverseProjectionMatrix)))}getSceneUniformBuffer(){return this._multiviewSceneUboIsActive&&this._multiviewSceneUbo?this._multiviewSceneUbo:this._sceneUbo}createSceneUniformBuffer(e,t){let i=typeof t=="boolean"?t:t==null?void 0:t.trackUBOsInFrame,r=new or(this._engine,void 0,!1,e!=null?e:"scene",void 0,i);return r.addUniform("viewProjection",16),r.addUniform("view",16),r.addUniform("projection",16),r.addUniform("vEyePosition",4),r.addUniform("inverseProjection",16),r}setSceneUniformBuffer(e){this._sceneUbo=e,this._viewUpdateFlag=-1,this._projectionUpdateFlag=-1}get floatingOriginMode(){return this._floatingOriginScene!==void 0}get floatingOriginOffset(){return this.floatingOriginMode?this._eyePosition:b.ZeroReadOnly}getUniqueId(){return zl.UniqueId}addMesh(e,t=!1){if(!this._blockEntityCollection&&(this.meshes.push(e),e._resyncLightSources(),e.parent||e._addToSceneRootNodes(),he.SetImmediate(()=>{this.onNewMeshAddedObservable.notifyObservers(e)}),t)){let i=e.getChildMeshes();for(let r of i)this.addMesh(r)}}removeMesh(e,t=!1){let i=this.meshes.indexOf(e);if(i!==-1&&(this.meshes.splice(i,1),e.parent||e._removeFromSceneRootNodes()),this._inputManager._invalidateMesh(e),this.onMeshRemovedObservable.notifyObservers(e),t){let r=e.getChildMeshes();for(let s of r)this.removeMesh(s)}return i}addTransformNode(e){this._blockEntityCollection||e.getScene()===this&&e._indexInSceneTransformNodesArray!==-1||(e._indexInSceneTransformNodesArray=this.transformNodes.length,this.transformNodes.push(e),e.parent||e._addToSceneRootNodes(),this.onNewTransformNodeAddedObservable.notifyObservers(e))}removeTransformNode(e){let t=e._indexInSceneTransformNodesArray;if(t!==-1){if(t!==this.transformNodes.length-1){let i=this.transformNodes[this.transformNodes.length-1];this.transformNodes[t]=i,i._indexInSceneTransformNodesArray=t}e._indexInSceneTransformNodesArray=-1,this.transformNodes.pop(),e.parent||e._removeFromSceneRootNodes()}return this.onTransformNodeRemovedObservable.notifyObservers(e),t}removeSkeleton(e){let t=this.skeletons.indexOf(e);return t!==-1&&(this.skeletons.splice(t,1),this.onSkeletonRemovedObservable.notifyObservers(e),this._executeActiveContainerCleanup(this._activeSkeletons)),t}removeMorphTargetManager(e){let t=this.morphTargetManagers.indexOf(e);return t!==-1&&this.morphTargetManagers.splice(t,1),t}removeLight(e){let t=this.lights.indexOf(e);if(t!==-1){for(let i of this.meshes)i._removeLightSource(e,!1);this.lights.splice(t,1),this.sortLightsByPriority(),e.parent||e._removeFromSceneRootNodes(),this.onLightRemovedObservable.notifyObservers(e)}return t}removeCamera(e){let t=this.cameras.indexOf(e);if(t!==-1&&(this.cameras.splice(t,1),e.parent||e._removeFromSceneRootNodes()),this.activeCameras){let i=this.activeCameras.indexOf(e);i!==-1&&this.activeCameras.splice(i,1)}return this.activeCamera===e&&(this.cameras.length>0?this.activeCamera=this.cameras[0]:this.activeCamera=null),this.onCameraRemovedObservable.notifyObservers(e),t}removeParticleSystem(e){let t=this.particleSystems.indexOf(e);return t!==-1&&(this.particleSystems.splice(t,1),this._executeActiveContainerCleanup(this._activeParticleSystems)),this.onParticleSystemRemovedObservable.notifyObservers(e),t}removeAnimation(e){let t=this.animations.indexOf(e);return t!==-1&&this.animations.splice(t,1),t}stopAnimation(e,t,i){}removeAnimationGroup(e){let t=this.animationGroups.indexOf(e);return t!==-1&&this.animationGroups.splice(t,1),this.onAnimationGroupRemovedObservable.notifyObservers(e),t}removeMultiMaterial(e){let t=this.multiMaterials.indexOf(e);return t!==-1&&this.multiMaterials.splice(t,1),this.onMultiMaterialRemovedObservable.notifyObservers(e),t}removeMaterial(e){let t=e._indexInSceneMaterialArray;if(t!==-1&&t{this.onNewLightAddedObservable.notifyObservers(e)})}}sortLightsByPriority(){this.requireLightSorting&&this.lights.sort(Yt.CompareLightsPriority)}addCamera(e){this._blockEntityCollection||(this.cameras.push(e),he.SetImmediate(()=>{this.onNewCameraAddedObservable.notifyObservers(e)}),e.parent||e._addToSceneRootNodes())}addSkeleton(e){this._blockEntityCollection||(this.skeletons.push(e),he.SetImmediate(()=>{this.onNewSkeletonAddedObservable.notifyObservers(e)}))}addParticleSystem(e){this._blockEntityCollection||(this.particleSystems.push(e),he.SetImmediate(()=>{this.onNewParticleSystemAddedObservable.notifyObservers(e)}))}addAnimation(e){this._blockEntityCollection||this.animations.push(e)}addAnimationGroup(e){this._blockEntityCollection||(this.animationGroups.push(e),he.SetImmediate(()=>{this.onNewAnimationGroupAddedObservable.notifyObservers(e)}))}addMultiMaterial(e){this._blockEntityCollection||(this.multiMaterials.push(e),he.SetImmediate(()=>{this.onNewMultiMaterialAddedObservable.notifyObservers(e)}))}addMaterial(e){this._blockEntityCollection||e.getScene()===this&&e._indexInSceneMaterialArray!==-1||(e._indexInSceneMaterialArray=this.materials.length,this.materials.push(e),he.SetImmediate(()=>{this.onNewMaterialAddedObservable.notifyObservers(e)}))}addMorphTargetManager(e){this._blockEntityCollection||this.morphTargetManagers.push(e)}addGeometry(e){this._blockEntityCollection||(this._geometriesByUniqueId&&(this._geometriesByUniqueId[e.uniqueId]=this.geometries.length),this.geometries.push(e))}addActionManager(e){this.actionManagers.push(e)}addTexture(e){this._blockEntityCollection||(this.textures.push(e),this.onNewTextureAddedObservable.notifyObservers(e))}addFrameGraph(e){this.frameGraphs.push(e),he.SetImmediate(()=>{this.onNewFrameGraphAddedObservable.notifyObservers(e)})}addObjectRenderer(e){this.objectRenderers.push(e),he.SetImmediate(()=>{this.onNewObjectRendererAddedObservable.notifyObservers(e)})}addPostProcess(e){this._blockEntityCollection||(this.postProcesses.push(e),he.SetImmediate(()=>{this.onNewPostProcessAddedObservable.notifyObservers(e)}))}addEffectLayer(e){this._blockEntityCollection||(this.effectLayers.push(e),he.SetImmediate(()=>{this.onNewEffectLayerAddedObservable.notifyObservers(e)}))}switchActiveCamera(e,t=!0){this._engine.getInputElement()&&(this.activeCamera&&this.activeCamera.detachControl(),this.activeCamera=e,t&&e.attachControl())}setActiveCameraById(e){let t=this.getCameraById(e);return t?(this.activeCamera=t,t):null}setActiveCameraByName(e){let t=this.getCameraByName(e);return t?(this.activeCamera=t,t):null}getAnimationGroupByName(e){for(let t=0;ti.uniqueId===e)}getMaterialById(e,t=!1){return this._getMaterial(t,i=>i.id===e)}getMaterialByName(e,t=!1){return this._getMaterial(t,i=>i.name===e)}getLastMaterialById(e,t=!1){for(let i=this.materials.length-1;i>=0;i--)if(this.materials[i].id===e)return this.materials[i];if(t){for(let i=this.multiMaterials.length-1;i>=0;i--)if(this.multiMaterials[i].id===e)return this.multiMaterials[i]}return null}getTextureByUniqueId(e){for(let t=0;t{this.onNewGeometryAddedObservable.notifyObservers(e)}),!0)}removeGeometry(e){let t;if(this._geometriesByUniqueId){if(t=this._geometriesByUniqueId[e.uniqueId],t===void 0)return!1}else if(t=this.geometries.indexOf(e),t<0)return!1;if(t!==this.geometries.length-1){let i=this.geometries[this.geometries.length-1];i&&(this.geometries[t]=i,this._geometriesByUniqueId&&(this._geometriesByUniqueId[i.uniqueId]=t))}return this._geometriesByUniqueId&&(this._geometriesByUniqueId[e.uniqueId]=void 0),this.geometries.pop(),this.onGeometryRemovedObservable.notifyObservers(e),!0}getGeometries(){return this.geometries}getMeshById(e){for(let t=0;t=0;t--)if(this.meshes[t].id===e)return this.meshes[t];return null}getLastTransformNodeById(e){for(let t=this.transformNodes.length-1;t>=0;t--)if(this.transformNodes[t].id===e)return this.transformNodes[t];return null}getLastEntryById(e){let t;for(t=this.meshes.length-1;t>=0;t--)if(this.meshes[t].id===e)return this.meshes[t];for(t=this.transformNodes.length-1;t>=0;t--)if(this.transformNodes[t].id===e)return this.transformNodes[t];for(t=this.cameras.length-1;t>=0;t--)if(this.cameras[t].id===e)return this.cameras[t];for(t=this.lights.length-1;t>=0;t--)if(this.lights[t].id===e)return this.lights[t];for(t=this.skeletons.length-1;t>=0;t--){let i=this.skeletons[t];for(let r=i.bones.length-1;r>=0;r--)if(i.bones[r].id===e)return i.bones[r]}return null}getNodeById(e){let t=this.getMeshById(e);if(t)return t;let i=this.getTransformNodeById(e);if(i)return i;let r=this.getLightById(e);if(r)return r;let s=this.getCameraById(e);if(s)return s;let a=this.getBoneById(e);return a||null}getNodeByName(e){let t=this.getMeshByName(e);if(t)return t;let i=this.getTransformNodeByName(e);if(i)return i;let r=this.getLightByName(e);if(r)return r;let s=this.getCameraByName(e);if(s)return s;let a=this.getBoneByName(e);return a||null}getMeshByName(e){for(let t=0;t=0;t--)if(this.skeletons[t].id===e)return this.skeletons[t];return null}getSkeletonByUniqueId(e){for(let t=0;t{let o=!0,l=!0;for(let c of a)o&&(o=c.objectRenderer._isFrozen),l&&(l=c.objectRenderer._freezeActiveMeshesCancel!==null);if(o)return!0;if(!l)throw new Error("Freezing active meshes was cancelled");return!1},()=>{this._freezeActiveMeshesCancel=null,this._activeMeshesFrozen=!0,this._activeMeshesFrozenButKeepClipping=s,this._skipEvaluateActiveMeshesCompletely=e,t==null||t()},(o,l)=>{if(this._freezeActiveMeshesCancel=null,this.unfreezeActiveMeshes(),l){let c="Scene: Timeout while waiting for meshes to be frozen.";i?i(c):($.Error(c),o&&$.Error(o))}else{let c="Scene: An unexpected error occurred while trying to freeze active meshes.";i?i(c):($.Error(c),o&&($.Error(o),o.stack&&$.Error(o.stack)))}}),this}return this.executeWhenReady(()=>{if(!this.activeCamera){i&&i("No active camera found");return}if(this._frustumPlanes||this.updateTransformMatrix(),this._evaluateActiveMeshes(),this._activeMeshesFrozen=!0,this._activeMeshesFrozenButKeepClipping=s,this._skipEvaluateActiveMeshesCompletely=e,r)for(let a=0;ae.dispose())}_evaluateActiveMeshes(){var i;if(this._engine.snapshotRendering&&this._engine.snapshotRenderingMode===1){this._activeMeshes.length>0&&((i=this.activeCamera)==null||i._activeMeshes.reset(),this._activeMeshes.reset(),this._renderingManager.reset(),this._processedMaterials.reset(),this._activeParticleSystems.reset(),this._activeSkeletons.reset(),this._softwareSkinnedMeshes.reset());return}if(this._activeMeshesFrozen&&this._activeMeshes.length){if(!this._skipEvaluateActiveMeshesCompletely){let r=this._activeMeshes.length;for(let s=0;s0&&(s.layerMask&this.activeCamera.layerMask)!==0&&(this._skipFrustumClipping||s.alwaysSelectAsActiveMesh||s.isInFrustum(this._frustumPlanes)))){this._activeMeshes.push(s),this.activeCamera._activeMeshes.push(s),o!==s&&o._activate(this._renderId,!1);for(let l of this._preActiveMeshStage)l.action(s);s._activate(this._renderId,!1)&&(s.isAnInstance?s._internalAbstractMeshDataInfo._actAsRegularMesh&&(o=s):o._internalAbstractMeshDataInfo._onlyForInstances=!1,o._internalAbstractMeshDataInfo._isActive=!0,this._activeMesh(s,o)),s._postActivate()}}if(this.onAfterActiveMeshesEvaluationObservable.notifyObservers(this),this.particlesEnabled){this.onBeforeParticlesRenderingObservable.notifyObservers(this);for(let r=0;r0){let r=this.getActiveSubMeshCandidates(t),s=r.length;i=i||s===1;for(let a=0;a0&&this._renderTargets.concatWithNoDuplicate(e.customRenderTargets),t&&t.customRenderTargets&&t.customRenderTargets.length>0&&this._renderTargets.concatWithNoDuplicate(t.customRenderTargets),this.environmentTexture&&this.environmentTexture.isRenderTarget&&this._renderTargets.pushNoDuplicate(this.environmentTexture);for(let d of this._gatherActiveCameraRenderTargetsStage)d.action(this._renderTargets);let s=!1;if(this.renderTargetsEnabled){this._intermediateRendering=!0;let d;if(this._renderTargets.length>0){he.StartPerformanceCounter("Render targets",this._renderTargets.length>0);let u=(f=this.getBoundingBoxRenderer)==null?void 0:f.call(this);for(let m=0;m0?u.renderList.data.slice():[],d.length=u.renderList.length),_.render(p,this.dumpNextRenderTargets),s=!0}}u&&d&&(u.renderList.data=d,u.renderList.length=d.length),he.EndPerformanceCounter("Render targets",this._renderTargets.length>0),this._renderId++}if(this._cameraDrawRenderTargetStage.length>0){let u=(h=this.getBoundingBoxRenderer)==null?void 0:h.call(this);u&&!d&&(d=u.renderList.length>0?u.renderList.data.slice():[],d.length=u.renderList.length);for(let m of this._cameraDrawRenderTargetStage)s=m.action(this.activeCamera)||s;u&&d&&(u.renderList.data=d,u.renderList.length=d.length)}this._intermediateRendering=!1}s&&!this.prePass&&(this._bindFrameBuffer(this._activeCamera,!1),this.updateTransformMatrix()),this.onAfterRenderTargetsRenderObservable.notifyObservers(this),this.postProcessManager&&!e._multiviewTexture&&!this.prePass&&this.postProcessManager._prepareFrame();for(let d of this._beforeCameraDrawStage)d.action(this.activeCamera);this.onBeforeDrawPhaseObservable.notifyObservers(this);let a=r.snapshotRendering&&r.snapshotRenderingMode===1;a&&this.finalizeSceneUbo(),this._renderingManager.render(null,null,!0,!a),this.onAfterDrawPhaseObservable.notifyObservers(this);for(let d of this._afterCameraDrawStage)d.action(this.activeCamera);if(this.postProcessManager&&!e._multiviewTexture){let d=e.outputRenderTarget?e.outputRenderTarget.renderTarget:void 0;this.postProcessManager._finalizeFrame(e.isIntermediate,d)}for(let d of this._afterCameraPostProcessStage)d.action(this.activeCamera);this._renderTargets.reset(),this.onAfterCameraRenderObservable.notifyObservers(this.activeCamera)}_processSubCameras(e,t=!0){if(e.cameraRigMode===0||e._renderingMultiview){e._renderingMultiview&&!this._multiviewSceneUbo&&this._createMultiviewUbo(),this._renderForCamera(e,void 0,t),this.onAfterRenderCameraObservable.notifyObservers(e);return}if(e._useMultiviewToSingleView)this._renderMultiviewToSingleView(e);else{this.onBeforeCameraRenderObservable.notifyObservers(e);for(let i=0;i-1&&(r.trigger===13&&r._executeCurrent($r.CreateNew(t,void 0,a)),(!t.actionManager.hasSpecificTrigger(13,c=>{let f=c.mesh?c.mesh:c;return a===f})||r.trigger===13)&&t._intersectionsInProgress.splice(l,1))}}}}_advancePhysicsEngineStep(e){}_animate(e){}animate(){if(this._engine.isDeterministicLockStep()){let e=Math.max(n.MinDeltaTime,Math.min(this._engine.getDeltaTime(),n.MaxDeltaTime))+this._timeAccumulator,t=this._engine.getTimeStep(),i=1e3/t/1e3,r=0,s=this._engine.getLockstepMaxSteps(),a=Math.floor(e/t);for(a=Math.min(a,s);e>0&&r0);for(let l=0;l0),this._renderId++}this.onAfterRenderTargetsRenderObservable.notifyObservers(this);for(let l of this._beforeClearStage)l.action();if(this._engine.snapshotRendering&&this._engine.snapshotRenderingMode===1)this._activeParticleSystems.reset(),this._activeSkeletons.reset(),this._softwareSkinnedMeshes.reset();else{let l=this.getActiveMeshCandidates(),c=l.length;if(this._activeMeshesFrozen){if(!this._skipEvaluateActiveMeshesCompletely)for(let f=0;f0)for(let a=0;a0);for(let o=0;o0),this._renderId++}this._engine.currentRenderPassId=(s=a==null?void 0:a.renderPassId)!=null?s:0,this.activeCamera=a,this._activeCamera&&this._activeCamera.cameraRigMode!==22&&!this.prePass&&this._bindFrameBuffer(this._activeCamera,!1),this.onAfterRenderTargetsRenderObservable.notifyObservers(this);for(let o of this._beforeClearStage)o.action();this._clearFrameBuffer(this.activeCamera);for(let o of this._gatherRenderTargetsStage)o.action(this._renderTargets);if(this.activeCameras&&this.activeCameras.length>0)for(let o=0;o0);else{if(!this.activeCamera)throw new Error("No camera defined");this._processSubCameras(this.activeCamera,!!this.activeCamera.outputRenderTarget)}}this._checkIntersections();for(let a of this._afterRenderStage)a.action();if(this.afterRender&&this.afterRender(),this.onAfterRenderObservable.notifyObservers(this),this._toBeDisposed.length){for(let a=0;as.dispose(!0)),this._disposeList(this.transformNodes,s=>s.dispose(!0));let i=this.cameras;this._disposeList(i),this._disposeList(this.particleSystems),this._disposeList(this.postProcesses),this._disposeList(this.textures),this._disposeList(this.morphTargetManagers),this._disposeList(this.frameGraphs),this._sceneUbo.dispose(),this._multiviewSceneUbo&&this._multiviewSceneUbo.dispose(),this.postProcessManager.dispose(),this._disposeList(this._components);let r=this._engine.scenes.indexOf(this);if(r>-1&&this._engine.scenes.splice(r,1),this._floatingOriginScene=void 0,this._engine.scenes.length===0&&V2(),Le._LastCreatedScene===this){Le._LastCreatedScene=null;let s=Le.Instances.length-1;for(;s>=0;){let a=Le.Instances[s];if(a.scenes.length>0){Le._LastCreatedScene=a.scenes[this._engine.scenes.length-1];break}s--}}r=this._engine._virtualScenes.indexOf(this),r>-1&&this._engine._virtualScenes.splice(r,1),this._engine.wipeCaches(!0),this.onDisposeObservable.clear(),this.onBeforeRenderObservable.clear(),this.onAfterRenderObservable.clear(),this.onBeforeRenderTargetsRenderObservable.clear(),this.onAfterRenderTargetsRenderObservable.clear(),this.onAfterStepObservable.clear(),this.onBeforeStepObservable.clear(),this.onBeforeActiveMeshesEvaluationObservable.clear(),this.onAfterActiveMeshesEvaluationObservable.clear(),this.onBeforeParticlesRenderingObservable.clear(),this.onAfterParticlesRenderingObservable.clear(),this.onBeforeDrawPhaseObservable.clear(),this.onAfterDrawPhaseObservable.clear(),this.onBeforeAnimationsObservable.clear(),this.onAfterAnimationsObservable.clear(),this.onDataLoadedObservable.clear(),this.onBeforeRenderingGroupObservable.clear(),this.onAfterRenderingGroupObservable.clear(),this.onMeshImportedObservable.clear(),this.onBeforeCameraRenderObservable.clear(),this.onAfterCameraRenderObservable.clear(),this.onAfterRenderCameraObservable.clear(),this.onReadyObservable.clear(),this.onNewCameraAddedObservable.clear(),this.onCameraRemovedObservable.clear(),this.onNewLightAddedObservable.clear(),this.onLightRemovedObservable.clear(),this.onNewGeometryAddedObservable.clear(),this.onGeometryRemovedObservable.clear(),this.onNewTransformNodeAddedObservable.clear(),this.onTransformNodeRemovedObservable.clear(),this.onNewMeshAddedObservable.clear(),this.onMeshRemovedObservable.clear(),this.onNewSkeletonAddedObservable.clear(),this.onSkeletonRemovedObservable.clear(),this.onNewMaterialAddedObservable.clear(),this.onNewMultiMaterialAddedObservable.clear(),this.onMaterialRemovedObservable.clear(),this.onMultiMaterialRemovedObservable.clear(),this.onNewTextureAddedObservable.clear(),this.onTextureRemovedObservable.clear(),this.onNewFrameGraphAddedObservable.clear(),this.onFrameGraphRemovedObservable.clear(),this.onNewObjectRendererAddedObservable.clear(),this.onObjectRendererRemovedObservable.clear(),this.onPrePointerObservable.clear(),this.onPointerObservable.clear(),this.onPreKeyboardObservable.clear(),this.onKeyboardObservable.clear(),this.onActiveCameraChanged.clear(),this.onScenePerformancePriorityChangedObservable.clear(),this.onClearColorChangedObservable.clear(),this.onEnvironmentTextureChangedObservable.clear(),this.onMeshUnderPointerUpdatedObservable.clear(),this._isDisposed=!0}_disposeList(e,t){let i=e.slice(0);t=t!=null?t:(r=>r.dispose());for(let r of i)t(r);e.length=0}get isDisposed(){return this._isDisposed}clearCachedVertexData(){for(let e=0;e!0);let r=this.meshes.filter(e);for(let s of r){if(s.computeWorldMatrix(!0),!s.subMeshes||s.subMeshes.length===0||s.infiniteDistance)continue;let a=s.getBoundingInfo(),o=a.boundingBox.minimumWorld,l=a.boundingBox.maximumWorld;b.CheckExtends(o,t,i),b.CheckExtends(l,t,i)}return t.x===Number.MAX_VALUE?{min:b.Zero(),max:b.Zero()}:{min:t,max:i}}createPickingRay(e,t,i,r,s=!1){throw Xe("Ray")}createPickingRayToRef(e,t,i,r,s,a=!1,o=!1){throw Xe("Ray")}createPickingRayInCameraSpace(e,t,i){throw Xe("Ray")}createPickingRayInCameraSpaceToRef(e,t,i,r){throw Xe("Ray")}pick(e,t,i,r,s,a){let o=Xe("Ray",!0);return o&&$.Warn(o),new Hn}pickWithBoundingInfo(e,t,i,r,s){let a=Xe("Ray",!0);return a&&$.Warn(a),new Hn}pickWithRay(e,t,i,r){throw Xe("Ray")}multiPick(e,t,i,r,s){throw Xe("Ray")}multiPickWithRay(e,t,i){throw Xe("Ray")}setPointerOverMesh(e,t,i){this._inputManager.setPointerOverMesh(e,t,i)}getPointerOverMesh(){return this._inputManager.getPointerOverMesh()}_rebuildGeometries(){for(let e of this.geometries)e._rebuild();for(let e of this.meshes)e._rebuild();this.postProcessManager&&this.postProcessManager._rebuild();for(let e of this._components)e.rebuild();for(let e of this.particleSystems)e.rebuild();if(this.spriteManagers)for(let e of this.spriteManagers)e.rebuild()}_rebuildTextures(){for(let e of this.textures)e._rebuild(!0);this.markAllMaterialsAsDirty(1)}_getByTags(e,t,i){if(t===void 0)return e;let r=[];for(let s in e){let a=e[s];qt&&qt.MatchesQuery(a,t)&&(!i||i(a))&&r.push(a)}return r}getMeshesByTags(e,t){return this._getByTags(this.meshes,e,t)}getCamerasByTags(e,t){return this._getByTags(this.cameras,e,t)}getLightsByTags(e,t){return this._getByTags(this.lights,e,t)}getMaterialByTags(e,t){return this._getByTags(this.materials,e,t).concat(this._getByTags(this.multiMaterials,e,t))}getTransformNodesByTags(e,t){return this._getByTags(this.transformNodes,e,t)}setRenderingOrder(e,t=null,i=null,r=null){this._renderingManager.setRenderingOrder(e,t,i,r)}setRenderingAutoClearDepthStencil(e,t,i=!0,r=!0){this._renderingManager.setRenderingAutoClearDepthStencil(e,t,i,r)}getAutoClearDepthStencilSetup(e){return this._renderingManager.getAutoClearDepthStencilSetup(e)}_forceBlockMaterialDirtyMechanism(e){this._blockMaterialDirtyMechanism=e}get blockMaterialDirtyMechanism(){return this._blockMaterialDirtyMechanism}set blockMaterialDirtyMechanism(e){this._blockMaterialDirtyMechanism!==e&&(this._blockMaterialDirtyMechanism=e,e||this.markAllMaterialsAsDirty(127))}markAllMaterialsAsDirty(e,t){if(!this._blockMaterialDirtyMechanism)for(let i of this.materials)t&&!t(i)||i.markAsDirty(e)}_loadFile(e,t,i,r,s,a,o){let l=Ko(e,t,i,r?this.offlineProvider:void 0,s,a,o);return this._activeRequests.push(l),l.onCompleteObservable.add(c=>{this._activeRequests.splice(this._activeRequests.indexOf(c),1)}),l}async _loadFileAsync(e,t,i,r,s){return await new Promise((a,o)=>{this._loadFile(e,l=>{a(l)},t,i,r,(l,c)=>{o(c)},s)})}_requestFile(e,t,i,r,s,a,o){let l=fT(e,t,i,r?this.offlineProvider:void 0,s,a,o);return this._activeRequests.push(l),l.onCompleteObservable.add(c=>{this._activeRequests.splice(this._activeRequests.indexOf(c),1)}),l}async _requestFileAsync(e,t,i,r,s){return await new Promise((a,o)=>{this._requestFile(e,l=>{a(l)},t,i,r,l=>{o(l)},s)})}_readFile(e,t,i,r,s){let a=Ph(e,t,i,r,s);return this._activeRequests.push(a),a.onCompleteObservable.add(o=>{this._activeRequests.splice(this._activeRequests.indexOf(o),1)}),a}async _readFileAsync(e,t,i){return await new Promise((r,s)=>{this._readFile(e,a=>{r(a)},t,i,a=>{s(a)})})}getPerfCollector(){throw Xe("performanceViewerSceneExtension")}setActiveCameraByID(e){return this.setActiveCameraById(e)}getMaterialByID(e){return this.getMaterialById(e)}getLastMaterialByID(e){return this.getLastMaterialById(e)}getTextureByUniqueID(e){return this.getTextureByUniqueId(e)}getCameraByID(e){return this.getCameraById(e)}getCameraByUniqueID(e){return this.getCameraByUniqueId(e)}getBoneByID(e){return this.getBoneById(e)}getLightByID(e){return this.getLightById(e)}getLightByUniqueID(e){return this.getLightByUniqueId(e)}getParticleSystemByID(e){return this.getParticleSystemById(e)}getGeometryByID(e){return this.getGeometryById(e)}getMeshByID(e){return this.getMeshById(e)}getMeshByUniqueID(e){return this.getMeshByUniqueId(e)}getLastMeshByID(e){return this.getLastMeshById(e)}getMeshesByID(e){return this.getMeshesById(e)}getTransformNodeByID(e){return this.getTransformNodeById(e)}getTransformNodeByUniqueID(e){return this.getTransformNodeByUniqueId(e)}getTransformNodesByID(e){return this.getTransformNodesById(e)}getNodeByID(e){return this.getNodeById(e)}getLastEntryByID(e){return this.getLastEntryById(e)}getLastSkeletonByID(e){return this.getLastSkeletonById(e)}};Qt.FOGMODE_NONE=0;Qt.FOGMODE_EXP=1;Qt.FOGMODE_EXP2=2;Qt.FOGMODE_LINEAR=3;Qt.MinDeltaTime=1;Qt.MaxDeltaTime=1e3;Qt._OriginalDefaultMaterialFactory=Qt.DefaultMaterialFactory;wt("BABYLON.Scene",Qt)});var nB,Cie,Sa=C(()=>{k();nB="helperFunctions",Cie=`const PI: f32=3.141592653589793;const TWO_PI: f32=6.283185307179586;const HALF_PI: f32=1.5707963267948966;const RECIPROCAL_PI: f32=0.3183098861837907;const RECIPROCAL_PI2: f32=0.15915494309189535;const RECIPROCAL_PI4: f32=0.07957747154594767;const HALF_MIN: f32=5.96046448e-08; +}`;T.ShadersStore[IM]||(T.ShadersStore[IM]=T2);Wie={name:IM,shader:T2}});var Wl,y_,MM=C(()=>{Oh();Pi();Wl=class n extends kr{_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.all([Promise.resolve().then(()=>(g2(),_2))]))):t.push(Promise.all([Promise.resolve().then(()=>(SM(),EM))])),super._gatherImports(e,t)}constructor(e,t=null,i){let r={name:e,engine:t||Le.LastCreatedEngine,useShaderStore:!0,useAsPostProcess:!0,fragmentShader:n.FragmentUrl,...i};r.engine||(r.engine=Le.LastCreatedEngine),super(r)}};Wl.FragmentUrl="pass";y_=class n extends kr{_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.all([Promise.resolve().then(()=>(S2(),E2))]))):t.push(Promise.all([Promise.resolve().then(()=>(x2(),A2))])),super._gatherImports(e,t)}constructor(e,t=null,i){super({...i,name:e,engine:t||Le.LastCreatedEngine,useShaderStore:!0,useAsPostProcess:!0,fragmentShader:n.FragmentUrl,defines:"#define POSITIVEX"}),this._face=0}get face(){return this._face}set face(e){if(!(e<0||e>5))switch(this._face=e,this._face){case 0:this.updateEffect("#define POSITIVEX");break;case 1:this.updateEffect("#define NEGATIVEX");break;case 2:this.updateEffect("#define POSITIVEY");break;case 3:this.updateEffect("#define NEGATIVEY");break;case 4:this.updateEffect("#define POSITIVEZ");break;case 5:this.updateEffect("#define NEGATIVEZ");break}}};y_.FragmentUrl="passCube"});var Nh,CM,yM=C(()=>{kt();kl();Lr();Vi();Er();MM();Ut();Nh=class n extends Ri{getClassName(){return"PassPostProcess"}constructor(e,t,i=null,r,s,a,o=0,l=!1){let c={size:typeof t=="number"?t:void 0,camera:i,samplingMode:r,engine:s,reusable:a,textureType:o,blockCompilation:l,...t};super(e,Wl.FragmentUrl,{effectWrapper:typeof t=="number"||!t.effectWrapper?new Wl(e,s,c):void 0,...c})}static _Parse(e,t,i,r){return tt.Parse(()=>new n(e.name,e.options,t,e.renderTargetSamplingMode,e._engine,e.reusable),e,i,r)}};Ft("BABYLON.PassPostProcess",Nh);CM=class n extends Ri{get face(){return this._effectWrapper.face}set face(e){this._effectWrapper.face=e}getClassName(){return"PassCubePostProcess"}constructor(e,t,i=null,r,s,a,o=0,l=!1){let c={size:typeof t=="number"?t:void 0,camera:i,samplingMode:r,engine:s,reusable:a,textureType:o,blockCompilation:l,...t};super(e,Wl.FragmentUrl,{effectWrapper:typeof t=="number"||!t.effectWrapper?new y_(e,s,c):void 0,...c})}static _Parse(e,t,i,r){return tt.Parse(()=>new n(e.name,e.options,t,e.renderTargetSamplingMode,e._engine,e.reusable),e,i,r)}};P([w()],CM.prototype,"face",null);Re._RescalePostProcessFactory=n=>new Nh("rescale",1,null,2,n,!1,0)});function b2(n,e,t,i,r,s,a,o){let l=e.getEngine();return e.isReady=!1,r=r!=null?r:e.samplingMode,i=i!=null?i:e.type,s=s!=null?s:e.format,a=a!=null?a:e.width,o=o!=null?o:e.height,i===-1&&(i=0),new Promise(c=>{let f=new Ri("postprocess",n,null,null,1,null,r,l,!1,void 0,i,void 0,null,!1,s);f.externalTextureSamplerBinding=!0;let h=l.createRenderTargetTexture({width:a,height:o},{generateDepthBuffer:!1,generateMipMaps:!1,generateStencilBuffer:!1,samplingMode:r,type:i,format:s});f.onEffectCreatedObservable.addOnce(d=>{d.executeWhenCompiled(()=>{f.onApply=u=>{u._bindTexture("textureSampler",e),u.setFloat2("scale",1,1)},t.postProcessManager.directRender([f],h,!0),l.restoreDefaultFramebuffer(),l._releaseTexture(e),f&&f.dispose(),h._swapAndDie(e),e.type=i,e.format=5,e.isReady=!0,c(e)})})})}function wh(n){CT||(CT=new Float32Array(1),R2=new Int32Array(CT.buffer)),CT[0]=n;let e=R2[0],t=e>>16&32768,i=e>>12&2047,r=e>>23&255;return r<103?t:r>142?(t|=31744,t|=(r==255?0:1)&&e&8388607,t):r<113?(i|=2048,t|=(i>>114-r)+(i>>113-r&1),t):(t|=r-112<<10|i>>1,t+=i&1,t)}function Hl(n){let e=(n&32768)>>15,t=(n&31744)>>10,i=n&1023;return t===0?(e?-1:1)*Math.pow(2,-14)*(i/Math.pow(2,10)):t==31?i?NaN:(e?-1:1)*(1/0):(e?-1:1)*Math.pow(2,t-15)*(1+i/Math.pow(2,10))}var CT,R2,PM=C(()=>{Gr();cf();yM();kl();xn()});function LM(n){return n.split(" ").filter(e=>e!=="").map(e=>parseFloat(e))}function DM(n,e,t){for(;t.length!==e;){let i=LM(n.lines[n.index++]);t.push(...i)}}function Hie(n,e,t){let i=0,r=0,s=0,a=0,o=0,l=0;for(let g=0;g0&&!i.lines[i.index].includes("TILT=");)i.index++;i.lines[i.index].includes("INCLUDE"),i.index++;let s=LM(i.lines[i.index++]);r.numberOfLights=s[0],r.lumensPerLamp=s[1],r.candelaMultiplier=s[2],r.numberOfVerticalAngles=s[3],r.numberOfHorizontalAngles=s[4],r.photometricType=s[5],r.unitsType=s[6],r.width=s[7],r.length=s[8],r.height=s[9];let a=LM(i.lines[i.index++]);r.ballastFactor=a[0],r.fileGenerationType=a[1],r.inputWatts=a[2];for(let m=0;m0)for(let m=0;m=u)&&(_%=u*2,_>u&&(_=u*2-_)),h[p+_*l]=Hie(r,p,_)}return{width:c/2,height:1,data:h}}var M2=C(()=>{xn()});var C2={};$e(C2,{_IESTextureLoader:()=>OM});var OM,y2=C(()=>{M2();OM=class{constructor(){this.supportCascades=!1}loadCubeData(){throw".ies not supported in Cube."}loadData(e,t,i){let r=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),s=I2(r);i(s.width,s.height,!!t.useMipMaps,!1,()=>{let a=t.getEngine();t.type=1,t.format=6,t._gammaSpace=!1,a._uploadDataToTextureDirectly(t,s.data)})}}});var P2={};$e(P2,{_DDSTextureLoader:()=>NM});var NM,D2=C(()=>{v_();wM();NM=class{constructor(){this.supportCascades=!0}loadCubeData(e,t,i,r){let s=t.getEngine(),a,o=!1,l=1e3;if(Array.isArray(e))for(let c=0;c1)&&t.generateMipMaps,s._unpackFlipY(a.isCompressed),io.UploadDDSLevels(s,t,f,a,o,6,-1,c),!a.isFourCC&&a.mipmapCount===1?s.generateMipMapsForCubemap(t):l=a.mipmapCount-1}else{let c=e;a=io.GetDDSInfo(c),t.width=a.width,t.height=a.height,i&&(a.sphericalPolynomial=new Ko),o=(a.isRGB||a.isLuminance||a.mipmapCount>1)&&t.generateMipMaps,s._unpackFlipY(a.isCompressed),io.UploadDDSLevels(s,t,c,a,o,6),!a.isFourCC&&a.mipmapCount===1?s.generateMipMapsForCubemap(t,!1):l=a.mipmapCount-1}s._setCubeMapTextureParams(t,o,l),t.isReady=!0,t.onLoadedObservable.notifyObservers(t),t.onLoadedObservable.clear(),r&&r({isDDS:!0,width:t.width,info:a,data:e,texture:t})}loadData(e,t,i){let r=io.GetDDSInfo(e),s=(r.isRGB||r.isLuminance||r.mipmapCount>1)&&t.generateMipMaps&&Math.max(r.width,r.height)>>r.mipmapCount-1===1;i(r.width,r.height,s,r.isFourCC,()=>{io.UploadDDSLevels(t.getEngine(),t,e,r,s,1)})}}});function L2(){let n={cTFETC1:0,cTFETC2:1,cTFBC1:2,cTFBC3:3,cTFBC4:4,cTFBC5:5,cTFBC7:6,cTFPVRTC1_4_RGB:8,cTFPVRTC1_4_RGBA:9,cTFASTC_4x4:10,cTFATC_RGB:11,cTFATC_RGBA_INTERPOLATED_ALPHA:12,cTFRGBA32:13,cTFRGB565:14,cTFBGR565:15,cTFRGBA4444:16,cTFFXT1_RGB:17,cTFPVRTC2_4_RGB:18,cTFPVRTC2_4_RGBA:19,cTFETC2_EAC_R11:20,cTFETC2_EAC_RG11:21},e=null;onmessage=a=>{if(a.data.action==="init"){if(a.data.url)try{importScripts(a.data.url)}catch(o){postMessage({action:"error",error:o})}e||(e=BASIS({wasmBinary:a.data.wasmBinary})),e!==null&&e.then(o=>{BASIS=o,o.initializeBasis(),postMessage({action:"init"})})}else if(a.data.action==="transcode"){let o=a.data.config,l=a.data.imageData,c=new BASIS.BasisFile(l),f=i(c),h=a.data.ignoreSupportedFormats?null:t(a.data.config,f),d=!1;h===null&&(d=!0,h=f.hasAlpha?n.cTFBC3:n.cTFBC1);let u=!0;c.startTranscoding()||(u=!1);let m=[];for(let _=0;_>2&3],h[x++]=f[v>>4&3],h[x]=f[v>>6&3]}}return h}}async function O2(n,e,t){return await new Promise((i,r)=>{let s=a=>{a.data.action==="init"?(n.removeEventListener("message",s),i(n)):a.data.action==="error"&&r(a.data.error||"error initializing worker")};n.addEventListener("message",s),n.postMessage({action:"init",url:t?de.GetBabylonScriptURL(t):void 0,wasmBinary:e},[e])})}var N2=C(()=>{Ci()});var zl,ff,zie,FM,Fh,Xie,Yie,Kie,PT,yT,DT,BM,w2=C(()=>{Ci();Gr();Ws();N2();(function(n){n[n.cTFETC1=0]="cTFETC1",n[n.cTFETC2=1]="cTFETC2",n[n.cTFBC1=2]="cTFBC1",n[n.cTFBC3=3]="cTFBC3",n[n.cTFBC4=4]="cTFBC4",n[n.cTFBC5=5]="cTFBC5",n[n.cTFBC7=6]="cTFBC7",n[n.cTFPVRTC1_4_RGB=8]="cTFPVRTC1_4_RGB",n[n.cTFPVRTC1_4_RGBA=9]="cTFPVRTC1_4_RGBA",n[n.cTFASTC_4x4=10]="cTFASTC_4x4",n[n.cTFATC_RGB=11]="cTFATC_RGB",n[n.cTFATC_RGBA_INTERPOLATED_ALPHA=12]="cTFATC_RGBA_INTERPOLATED_ALPHA",n[n.cTFRGBA32=13]="cTFRGBA32",n[n.cTFRGB565=14]="cTFRGB565",n[n.cTFBGR565=15]="cTFBGR565",n[n.cTFRGBA4444=16]="cTFRGBA4444",n[n.cTFFXT1_RGB=17]="cTFFXT1_RGB",n[n.cTFPVRTC2_4_RGB=18]="cTFPVRTC2_4_RGB",n[n.cTFPVRTC2_4_RGBA=19]="cTFPVRTC2_4_RGBA",n[n.cTFETC2_EAC_R11=20]="cTFETC2_EAC_R11",n[n.cTFETC2_EAC_RG11=21]="cTFETC2_EAC_RG11"})(zl||(zl={}));ff={JSModuleURL:`${de._DefaultCdnUrl}/basisTranscoder/1/basis_transcoder.js`,WasmModuleURL:`${de._DefaultCdnUrl}/basisTranscoder/1/basis_transcoder.wasm`},zie=(n,e)=>{let t;switch(n){case zl.cTFETC1:t=36196;break;case zl.cTFBC1:t=33776;break;case zl.cTFBC4:t=33779;break;case zl.cTFASTC_4x4:t=37808;break;case zl.cTFETC2:t=37496;break;case zl.cTFBC7:t=36492;break}if(t===void 0)throw"The chosen Basis transcoder format is not currently supported";return t},FM=null,Fh=null,Xie=0,Yie=!1,Kie=async()=>(FM||(FM=new Promise((n,e)=>{Fh?n(Fh):de.LoadFileAsync(de.GetBabylonScriptURL(ff.WasmModuleURL)).then(t=>{if(typeof URL!="function")return e("Basis transcoder requires an environment with a URL constructor");let i=URL.createObjectURL(new Blob([`(${L2})()`],{type:"application/javascript"}));Fh=new Worker(i),O2(Fh,t,ff.JSModuleURL).then(n,e)}).catch(e)})),await FM),PT=async(n,e)=>{let t=n instanceof ArrayBuffer?new Uint8Array(n):n;return await new Promise((i,r)=>{Kie().then(()=>{let s=Xie++,a=l=>{l.data.action==="transcode"&&l.data.id===s&&(Fh.removeEventListener("message",a),l.data.success?i(l.data):r("Transcode is not supported on this device"))};Fh.addEventListener("message",a);let o=new Uint8Array(t.byteLength);o.set(new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),Fh.postMessage({action:"transcode",id:s,imageData:o,config:e,ignoreSupportedFormats:Yie},[o.buffer])},s=>{r(s)})})},yT=(n,e)=>{var i,r;let t=(i=e._gl)==null?void 0:i.TEXTURE_2D;n.isCube&&(t=(r=e._gl)==null?void 0:r.TEXTURE_CUBE_MAP),e._bindTextureDirectly(t,n,!0)},DT=(n,e)=>{let t=n.getEngine();for(let i=0;i{t._releaseTexture(s),yT(n,t)})}else n._invertVScale=!n.invertY,n.width=r.width+3&-4,n.height=r.height+3&-4,n.samplingMode=2,yT(n,t),t._uploadDataToTextureDirectly(n,new Uint16Array(r.transcodedPixels.buffer),i,0,4,!0);else{n.width=r.width,n.height=r.height,n.generateMipMaps=e.fileInfo.images[i].levels.length>1;let s=BM.GetInternalFormatFromBasisFormat(e.format,t);n.format=s,yT(n,t);let a=e.fileInfo.images[i].levels;for(let o=0;oUM});var UM,B2=C(()=>{w2();Ci();UM=class{constructor(){this.supportCascades=!1}loadCubeData(e,t,i,r,s){if(Array.isArray(e))return;let a=t.getEngine().getCaps(),o={supportedCompressionFormats:{etc1:!!a.etc1,s3tc:!!a.s3tc,pvrtc:!!a.pvrtc,etc2:!!a.etc2,astc:!!a.astc,bc7:!!a.bptc}};PT(e,o).then(l=>{let c=l.fileInfo.images[0].levels.length>1&&t.generateMipMaps;DT(t,l),t.getEngine()._setCubeMapTextureParams(t,c),t.isReady=!0,t.onLoadedObservable.notifyObservers(t),t.onLoadedObservable.clear(),r&&r()}).catch(l=>{de.Warn("Failed to transcode Basis file, transcoding may not be supported on this device"),t.isReady=!0,s&&s(l)})}loadData(e,t,i){let r=t.getEngine().getCaps(),s={supportedCompressionFormats:{etc1:!!r.etc1,s3tc:!!r.s3tc,pvrtc:!!r.pvrtc,etc2:!!r.etc2,astc:!!r.astc,bc7:!!r.bptc}};PT(e,s).then(a=>{let o=a.fileInfo.images[0].levels[0],l=a.fileInfo.images[0].levels.length>1&&t.generateMipMaps;i(o.width,o.height,l,a.format!==-1,()=>{DT(t,a)})}).catch(a=>{de.Warn("Failed to transcode Basis file, transcoding may not be supported on this device"),de.Warn(`Failed to transcode Basis file: ${a}`),i(0,0,!1,!1,()=>{},!0)})}}});var P_,U2=C(()=>{P_=class{constructor(){this._count=0,this._data={}}copyFrom(e){this.clear(),e.forEach((t,i)=>this.add(t,i))}get(e){let t=this._data[e];if(t!==void 0)return t}getOrAddWithFactory(e,t){let i=this.get(e);return i!==void 0||(i=t(e),i&&this.add(e,i)),i}getOrAdd(e,t){let i=this.get(e);return i!==void 0?i:(this.add(e,t),t)}contains(e){return this._data[e]!==void 0}add(e,t){return this._data[e]!==void 0?!1:(this._data[e]=t,++this._count,!0)}set(e,t){return this._data[e]===void 0?!1:(this._data[e]=t,!0)}getAndRemove(e){let t=this.get(e);return t!==void 0?(delete this._data[e],--this._count,t):null}remove(e){return this.contains(e)?(delete this._data[e],--this._count,!0):!1}clear(){this._data={},this._count=0}get count(){return this._count}forEach(e){for(let t in this._data){let i=this._data[t];e(t,i)}}first(e){for(let t in this._data){let i=this._data[t],r=e(t,i);if(r)return r}return null}}});function LT(n){n.push("vCameraColorCurveNeutral","vCameraColorCurvePositive","vCameraColorCurveNegative")}var VM=C(()=>{});var $r,V2=C(()=>{kt();Ut();zt();Er();VM();$r=class n{constructor(){this._dirty=!0,this._tempColor=new lt(0,0,0,0),this._globalCurve=new lt(0,0,0,0),this._highlightsCurve=new lt(0,0,0,0),this._midtonesCurve=new lt(0,0,0,0),this._shadowsCurve=new lt(0,0,0,0),this._positiveCurve=new lt(0,0,0,0),this._negativeCurve=new lt(0,0,0,0),this._globalHue=30,this._globalDensity=0,this._globalSaturation=0,this._globalExposure=0,this._highlightsHue=30,this._highlightsDensity=0,this._highlightsSaturation=0,this._highlightsExposure=0,this._midtonesHue=30,this._midtonesDensity=0,this._midtonesSaturation=0,this._midtonesExposure=0,this._shadowsHue=30,this._shadowsDensity=0,this._shadowsSaturation=0,this._shadowsExposure=0}get globalHue(){return this._globalHue}set globalHue(e){this._globalHue=e,this._dirty=!0}get globalDensity(){return this._globalDensity}set globalDensity(e){this._globalDensity=e,this._dirty=!0}get globalSaturation(){return this._globalSaturation}set globalSaturation(e){this._globalSaturation=e,this._dirty=!0}get globalExposure(){return this._globalExposure}set globalExposure(e){this._globalExposure=e,this._dirty=!0}get highlightsHue(){return this._highlightsHue}set highlightsHue(e){this._highlightsHue=e,this._dirty=!0}get highlightsDensity(){return this._highlightsDensity}set highlightsDensity(e){this._highlightsDensity=e,this._dirty=!0}get highlightsSaturation(){return this._highlightsSaturation}set highlightsSaturation(e){this._highlightsSaturation=e,this._dirty=!0}get highlightsExposure(){return this._highlightsExposure}set highlightsExposure(e){this._highlightsExposure=e,this._dirty=!0}get midtonesHue(){return this._midtonesHue}set midtonesHue(e){this._midtonesHue=e,this._dirty=!0}get midtonesDensity(){return this._midtonesDensity}set midtonesDensity(e){this._midtonesDensity=e,this._dirty=!0}get midtonesSaturation(){return this._midtonesSaturation}set midtonesSaturation(e){this._midtonesSaturation=e,this._dirty=!0}get midtonesExposure(){return this._midtonesExposure}set midtonesExposure(e){this._midtonesExposure=e,this._dirty=!0}get shadowsHue(){return this._shadowsHue}set shadowsHue(e){this._shadowsHue=e,this._dirty=!0}get shadowsDensity(){return this._shadowsDensity}set shadowsDensity(e){this._shadowsDensity=e,this._dirty=!0}get shadowsSaturation(){return this._shadowsSaturation}set shadowsSaturation(e){this._shadowsSaturation=e,this._dirty=!0}get shadowsExposure(){return this._shadowsExposure}set shadowsExposure(e){this._shadowsExposure=e,this._dirty=!0}getClassName(){return"ColorCurves"}static Bind(e,t,i="vCameraColorCurvePositive",r="vCameraColorCurveNeutral",s="vCameraColorCurveNegative"){e._dirty&&(e._dirty=!1,e._getColorGradingDataToRef(e._globalHue,e._globalDensity,e._globalSaturation,e._globalExposure,e._globalCurve),e._getColorGradingDataToRef(e._highlightsHue,e._highlightsDensity,e._highlightsSaturation,e._highlightsExposure,e._tempColor),e._tempColor.multiplyToRef(e._globalCurve,e._highlightsCurve),e._getColorGradingDataToRef(e._midtonesHue,e._midtonesDensity,e._midtonesSaturation,e._midtonesExposure,e._tempColor),e._tempColor.multiplyToRef(e._globalCurve,e._midtonesCurve),e._getColorGradingDataToRef(e._shadowsHue,e._shadowsDensity,e._shadowsSaturation,e._shadowsExposure,e._tempColor),e._tempColor.multiplyToRef(e._globalCurve,e._shadowsCurve),e._highlightsCurve.subtractToRef(e._midtonesCurve,e._positiveCurve),e._midtonesCurve.subtractToRef(e._shadowsCurve,e._negativeCurve)),t&&(t.setFloat4(i,e._positiveCurve.r,e._positiveCurve.g,e._positiveCurve.b,e._positiveCurve.a),t.setFloat4(r,e._midtonesCurve.r,e._midtonesCurve.g,e._midtonesCurve.b,e._midtonesCurve.a),t.setFloat4(s,e._negativeCurve.r,e._negativeCurve.g,e._negativeCurve.b,e._negativeCurve.a))}_getColorGradingDataToRef(e,t,i,r,s){e!=null&&(e=n._Clamp(e,0,360),t=n._Clamp(t,-100,100),i=n._Clamp(i,-100,100),r=n._Clamp(r,-100,100),t=n._ApplyColorGradingSliderNonlinear(t),t*=.5,r=n._ApplyColorGradingSliderNonlinear(r),t<0&&(t*=-1,e=(e+180)%360),n._FromHSBToRef(e,t,50+.25*r,s),s.scaleToRef(2,s),s.a=1+.01*i)}static _ApplyColorGradingSliderNonlinear(e){e/=100;let t=Math.abs(e);return t=Math.pow(t,2),e<0&&(t*=-1),t*=100,t}static _FromHSBToRef(e,t,i,r){let s=n._Clamp(e,0,360),a=n._Clamp(t/100,0,1),o=n._Clamp(i/100,0,1);if(a===0)r.r=o,r.g=o,r.b=o;else{s/=60;let l=Math.floor(s),c=s-l,f=o*(1-a),h=o*(1-a*c),d=o*(1-a*(1-c));switch(l){case 0:r.r=o,r.g=d,r.b=f;break;case 1:r.r=h,r.g=o,r.b=f;break;case 2:r.r=f,r.g=o,r.b=d;break;case 3:r.r=f,r.g=h,r.b=o;break;case 4:r.r=d,r.g=f,r.b=o;break;default:r.r=o,r.g=f,r.b=h;break}}r.a=1}static _Clamp(e,t,i){return Math.min(Math.max(e,t),i)}clone(){return tt.Clone(()=>new n,this)}serialize(){return tt.Serialize(this)}static Parse(e){return tt.Parse(()=>new n,e,null,null)}};$r.PrepareUniforms=LT;P([w()],$r.prototype,"_globalHue",void 0);P([w()],$r.prototype,"_globalDensity",void 0);P([w()],$r.prototype,"_globalSaturation",void 0);P([w()],$r.prototype,"_globalExposure",void 0);P([w()],$r.prototype,"_highlightsHue",void 0);P([w()],$r.prototype,"_highlightsDensity",void 0);P([w()],$r.prototype,"_highlightsSaturation",void 0);P([w()],$r.prototype,"_highlightsExposure",void 0);P([w()],$r.prototype,"_midtonesHue",void 0);P([w()],$r.prototype,"_midtonesDensity",void 0);P([w()],$r.prototype,"_midtonesSaturation",void 0);P([w()],$r.prototype,"_midtonesExposure",void 0);tt._ColorCurvesParser=$r.Parse});function G2(n,e){e.EXPOSURE&&n.push("exposureLinear"),e.CONTRAST&&n.push("contrast"),e.COLORGRADING&&n.push("colorTransformSettings"),(e.VIGNETTE||e.DITHER)&&n.push("vInverseScreenSize"),e.VIGNETTE&&(n.push("vignetteSettings1"),n.push("vignetteSettings2")),e.COLORCURVES&<(n),e.DITHER&&n.push("ditherIntensity")}function k2(n,e){e.COLORGRADING&&n.push("txColorTransform")}var W2=C(()=>{VM()});var Wt,D_=C(()=>{kt();Ut();hi();zt();V2();zo();Er();W2();Vi();Wt=class n{constructor(){this.colorCurves=new $r,this._colorCurvesEnabled=!1,this._colorGradingEnabled=!1,this._colorGradingWithGreenDepth=!0,this._colorGradingBGR=!0,this._exposure=1,this._toneMappingEnabled=!1,this._toneMappingType=n.TONEMAPPING_STANDARD,this._contrast=1,this.vignetteStretch=0,this.vignetteCenterX=0,this.vignetteCenterY=0,this.vignetteWeight=1.5,this.vignetteColor=new lt(0,0,0,0),this.vignetteCameraFov=.5,this._vignetteBlendMode=n.VIGNETTEMODE_MULTIPLY,this._vignetteEnabled=!1,this._ditheringEnabled=!1,this._ditheringIntensity=1/255,this._skipFinalColorClamp=!1,this._applyByPostProcess=!1,this._isEnabled=!0,this.outputTextureWidth=0,this.outputTextureHeight=0,this.onUpdateParameters=new te}get colorCurvesEnabled(){return this._colorCurvesEnabled}set colorCurvesEnabled(e){this._colorCurvesEnabled!==e&&(this._colorCurvesEnabled=e,this._updateParameters())}get colorGradingTexture(){return this._colorGradingTexture}set colorGradingTexture(e){this._colorGradingTexture!==e&&(this._colorGradingTexture=e,this._updateParameters())}get colorGradingEnabled(){return this._colorGradingEnabled}set colorGradingEnabled(e){this._colorGradingEnabled!==e&&(this._colorGradingEnabled=e,this._updateParameters())}get colorGradingWithGreenDepth(){return this._colorGradingWithGreenDepth}set colorGradingWithGreenDepth(e){this._colorGradingWithGreenDepth!==e&&(this._colorGradingWithGreenDepth=e,this._updateParameters())}get colorGradingBGR(){return this._colorGradingBGR}set colorGradingBGR(e){this._colorGradingBGR!==e&&(this._colorGradingBGR=e,this._updateParameters())}get exposure(){return this._exposure}set exposure(e){this._exposure!==e&&(this._exposure=e,this._updateParameters())}get toneMappingEnabled(){return this._toneMappingEnabled}set toneMappingEnabled(e){this._toneMappingEnabled!==e&&(this._toneMappingEnabled=e,this._updateParameters())}get toneMappingType(){return this._toneMappingType}set toneMappingType(e){this._toneMappingType!==e&&(this._toneMappingType=e,this._updateParameters())}get contrast(){return this._contrast}set contrast(e){this._contrast!==e&&(this._contrast=e,this._updateParameters())}get vignetteCentreY(){return this.vignetteCenterY}set vignetteCentreY(e){this.vignetteCenterY=e}get vignetteCentreX(){return this.vignetteCenterX}set vignetteCentreX(e){this.vignetteCenterX=e}get vignetteBlendMode(){return this._vignetteBlendMode}set vignetteBlendMode(e){this._vignetteBlendMode!==e&&(this._vignetteBlendMode=e,this._updateParameters())}get vignetteEnabled(){return this._vignetteEnabled}set vignetteEnabled(e){this._vignetteEnabled!==e&&(this._vignetteEnabled=e,this._updateParameters())}get ditheringEnabled(){return this._ditheringEnabled}set ditheringEnabled(e){this._ditheringEnabled!==e&&(this._ditheringEnabled=e,this._updateParameters())}get ditheringIntensity(){return this._ditheringIntensity}set ditheringIntensity(e){this._ditheringIntensity!==e&&(this._ditheringIntensity=e,this._updateParameters())}get skipFinalColorClamp(){return this._skipFinalColorClamp}set skipFinalColorClamp(e){this._skipFinalColorClamp!==e&&(this._skipFinalColorClamp=e,this._updateParameters())}get applyByPostProcess(){return this._applyByPostProcess}set applyByPostProcess(e){this._applyByPostProcess!==e&&(this._applyByPostProcess=e,this._updateParameters())}get isEnabled(){return this._isEnabled}set isEnabled(e){this._isEnabled!==e&&(this._isEnabled=e,this._updateParameters())}_updateParameters(){this.onUpdateParameters.notifyObservers(this)}getClassName(){return"ImageProcessingConfiguration"}prepareDefines(e,t=!1){if(t!==this.applyByPostProcess||!this._isEnabled){e.VIGNETTE=!1,e.TONEMAPPING=0,e.CONTRAST=!1,e.EXPOSURE=!1,e.COLORCURVES=!1,e.COLORGRADING=!1,e.COLORGRADING3D=!1,e.DITHER=!1,e.IMAGEPROCESSING=!1,e.SKIPFINALCOLORCLAMP=this.skipFinalColorClamp,e.IMAGEPROCESSINGPOSTPROCESS=this.applyByPostProcess&&this._isEnabled;return}if(e.VIGNETTE=this.vignetteEnabled,e.VIGNETTEBLENDMODEMULTIPLY=this.vignetteBlendMode===n._VIGNETTEMODE_MULTIPLY,e.VIGNETTEBLENDMODEOPAQUE=!e.VIGNETTEBLENDMODEMULTIPLY,!this._toneMappingEnabled)e.TONEMAPPING=0;else switch(this._toneMappingType){case n.TONEMAPPING_KHR_PBR_NEUTRAL:e.TONEMAPPING=3;break;case n.TONEMAPPING_ACES:e.TONEMAPPING=2;break;default:e.TONEMAPPING=1;break}e.CONTRAST=this.contrast!==1,e.EXPOSURE=this.exposure!==1,e.COLORCURVES=this.colorCurvesEnabled&&!!this.colorCurves,e.COLORGRADING=this.colorGradingEnabled&&!!this.colorGradingTexture,e.COLORGRADING?e.COLORGRADING3D=this.colorGradingTexture.is3D:e.COLORGRADING3D=!1,e.SAMPLER3DGREENDEPTH=this.colorGradingWithGreenDepth,e.SAMPLER3DBGRMAP=this.colorGradingBGR,e.DITHER=this._ditheringEnabled,e.IMAGEPROCESSINGPOSTPROCESS=this.applyByPostProcess,e.SKIPFINALCOLORCLAMP=this.skipFinalColorClamp,e.IMAGEPROCESSING=e.VIGNETTE||!!e.TONEMAPPING||e.CONTRAST||e.EXPOSURE||e.COLORCURVES||e.COLORGRADING||e.DITHER}isReady(){return!this.colorGradingEnabled||!this.colorGradingTexture||this.colorGradingTexture.isReady()}bind(e,t){if(this._colorCurvesEnabled&&this.colorCurves&&$r.Bind(this.colorCurves,e),this._vignetteEnabled||this._ditheringEnabled){let i=1/(this.outputTextureWidth||e.getEngine().getRenderWidth()),r=1/(this.outputTextureHeight||e.getEngine().getRenderHeight());if(e.setFloat2("vInverseScreenSize",i,r),this._ditheringEnabled&&e.setFloat("ditherIntensity",.5*this._ditheringIntensity),this._vignetteEnabled){let s=t!=null?t:r/i,a=Math.tan(this.vignetteCameraFov*.5),o=a*s,l=Math.sqrt(o*a);o=m_(o,l,this.vignetteStretch),a=m_(a,l,this.vignetteStretch),e.setFloat4("vignetteSettings1",o,a,-o*this.vignetteCenterX,-a*this.vignetteCenterY);let c=-2*this.vignetteWeight;e.setFloat4("vignetteSettings2",this.vignetteColor.r,this.vignetteColor.g,this.vignetteColor.b,c)}}if(e.setFloat("exposureLinear",this.exposure),e.setFloat("contrast",this.contrast),this.colorGradingTexture){e.setTexture("txColorTransform",this.colorGradingTexture);let i=this.colorGradingTexture.getSize().height;e.setFloat4("colorTransformSettings",(i-1)/i,.5/i,i,this.colorGradingTexture.level)}}clone(){return tt.Clone(()=>new n,this)}serialize(){return tt.Serialize(this)}static Parse(e){let t=tt.Parse(()=>new n,e,null,null);return e.vignetteCentreX!==void 0&&(t.vignetteCenterX=e.vignetteCentreX),e.vignetteCentreY!==void 0&&(t.vignetteCenterY=e.vignetteCentreY),t}static get VIGNETTEMODE_MULTIPLY(){return this._VIGNETTEMODE_MULTIPLY}static get VIGNETTEMODE_OPAQUE(){return this._VIGNETTEMODE_OPAQUE}};Wt.TONEMAPPING_STANDARD=0;Wt.TONEMAPPING_ACES=1;Wt.TONEMAPPING_KHR_PBR_NEUTRAL=2;Wt.PrepareUniforms=G2;Wt.PrepareSamplers=k2;Wt._VIGNETTEMODE_MULTIPLY=0;Wt._VIGNETTEMODE_OPAQUE=1;P([U3()],Wt.prototype,"colorCurves",void 0);P([w()],Wt.prototype,"_colorCurvesEnabled",void 0);P([Bt("colorGradingTexture")],Wt.prototype,"_colorGradingTexture",void 0);P([w()],Wt.prototype,"_colorGradingEnabled",void 0);P([w()],Wt.prototype,"_colorGradingWithGreenDepth",void 0);P([w()],Wt.prototype,"_colorGradingBGR",void 0);P([w()],Wt.prototype,"_exposure",void 0);P([w()],Wt.prototype,"_toneMappingEnabled",void 0);P([w()],Wt.prototype,"_toneMappingType",void 0);P([w()],Wt.prototype,"_contrast",void 0);P([w()],Wt.prototype,"vignetteStretch",void 0);P([w()],Wt.prototype,"vignetteCenterX",void 0);P([w()],Wt.prototype,"vignetteCenterY",void 0);P([w()],Wt.prototype,"vignetteWeight",void 0);P([ku()],Wt.prototype,"vignetteColor",void 0);P([w()],Wt.prototype,"vignetteCameraFov",void 0);P([w()],Wt.prototype,"_vignetteBlendMode",void 0);P([w()],Wt.prototype,"_vignetteEnabled",void 0);P([w()],Wt.prototype,"_ditheringEnabled",void 0);P([w()],Wt.prototype,"_ditheringIntensity",void 0);P([w()],Wt.prototype,"_skipFinalColorClamp",void 0);P([w()],Wt.prototype,"_applyByPostProcess",void 0);P([w()],Wt.prototype,"_isEnabled",void 0);P([w()],Wt.prototype,"outputTextureWidth",void 0);P([w()],Wt.prototype,"outputTextureHeight",void 0);tt._ImageProcessingConfigurationParser=Wt.Parse;Ft("BABYLON.ImageProcessingConfiguration",Wt)});var Hn,L_=C(()=>{Ge();Ui();Hn=class{constructor(){this.hit=!1,this.distance=0,this.pickedPoint=null,this.pickedMesh=null,this.bu=0,this.bv=0,this.faceId=-1,this.subMeshFaceId=-1,this.subMeshId=0,this.pickedSprite=null,this.thinInstanceIndex=-1,this.ray=null,this.originMesh=null,this.aimTransform=null,this.gripTransform=null}getNormal(e=!1,t=!0){if(!this.pickedMesh||t&&!this.pickedMesh.isVerticesDataPresent(L.NormalKind))return null;let i=this.pickedMesh.getIndices();(i==null?void 0:i.length)===0&&(i=null);let r,s=Q.Vector3[0],a=Q.Vector3[1],o=Q.Vector3[2];if(t){let c=this.pickedMesh.getVerticesData(L.NormalKind),f=i?b.FromArrayToRef(c,i[this.faceId*3]*3,s):s.copyFromFloats(c[this.faceId*3*3],c[this.faceId*3*3+1],c[this.faceId*3*3+2]),h=i?b.FromArrayToRef(c,i[this.faceId*3+1]*3,a):a.copyFromFloats(c[(this.faceId*3+1)*3],c[(this.faceId*3+1)*3+1],c[(this.faceId*3+1)*3+2]),d=i?b.FromArrayToRef(c,i[this.faceId*3+2]*3,o):o.copyFromFloats(c[(this.faceId*3+2)*3],c[(this.faceId*3+2)*3+1],c[(this.faceId*3+2)*3+2]);f=f.scale(this.bu),h=h.scale(this.bv),d=d.scale(1-this.bu-this.bv),r=new b(f.x+h.x+d.x,f.y+h.y+d.y,f.z+h.z+d.z)}else{let c=this.pickedMesh.getVerticesData(L.PositionKind),f=i?b.FromArrayToRef(c,i[this.faceId*3]*3,s):s.copyFromFloats(c[this.faceId*3*3],c[this.faceId*3*3+1],c[this.faceId*3*3+2]),h=i?b.FromArrayToRef(c,i[this.faceId*3+1]*3,a):a.copyFromFloats(c[(this.faceId*3+1)*3],c[(this.faceId*3+1)*3+1],c[(this.faceId*3+1)*3+2]),d=i?b.FromArrayToRef(c,i[this.faceId*3+2]*3,o):o.copyFromFloats(c[(this.faceId*3+2)*3],c[(this.faceId*3+2)*3+1],c[(this.faceId*3+2)*3+2]),u=f.subtract(h),m=d.subtract(h);r=b.Cross(u,m)}let l=(c,f)=>{if(this.thinInstanceIndex!==-1){let d=c._thinInstanceDataStorage.matrixData,u=this.thinInstanceIndex<<4;if(d&&d.length>u){let m=Q.Matrix[0];K.FromArrayToRef(d,u,m),b.TransformNormalToRef(f,m,f)}}let h=c.getWorldMatrix();c.nonUniformScaling&&(Q.Matrix[0].copyFrom(h),h=Q.Matrix[0],h.setTranslationFromFloats(0,0,0),h.invert(),h.transposeToRef(Q.Matrix[1]),h=Q.Matrix[1]),b.TransformNormalToRef(f,h,f)};if(e&&l(this.pickedMesh,r),this.ray){let c=Q.Vector3[0].copyFrom(r);e||l(this.pickedMesh,c),b.Dot(c,this.ray.direction)>0&&r.negateInPlace()}return r.normalize(),r}getTextureCoordinates(e=L.UVKind){if(!this.pickedMesh||!this.pickedMesh.isVerticesDataPresent(e))return null;let t=this.pickedMesh.getIndices();if(!t)return null;let i=this.pickedMesh.getVerticesData(e);if(!i)return null;let r=Ne.FromArray(i,t[this.faceId*3]*2),s=Ne.FromArray(i,t[this.faceId*3+1]*2),a=Ne.FromArray(i,t[this.faceId*3+2]*2);return r=r.scale(this.bu),s=s.scale(this.bv),a=a.scale(1-this.bu-this.bv),new Ne(r.x+s.x+a.x,r.y+s.y+a.y)}}});var Jr,GM=C(()=>{Jr=class n{constructor(e,t,i,r,s,a){this.source=e,this.pointerX=t,this.pointerY=i,this.meshUnderPointer=r,this.sourceEvent=s,this.additionalData=a}static CreateNew(e,t,i){let r=e.getScene();return new n(e,r.pointerX,r.pointerY,r.meshUnderPointer||e,t,i)}static CreateNewFromSprite(e,t,i,r){return new n(e,t.pointerX,t.pointerY,t.meshUnderPointer,i,r)}static CreateNewFromScene(e,t){return new n(null,e.pointerX,e.pointerY,e.meshUnderPointer,t)}static CreateNewFromPrimitive(e,t,i,r){return new n(e,t.x,t.y,null,i,r)}}});function O_(n,e,t){let i=t.asArray(),r=e.asArray();for(let s=0;s<16;s++)i[s]=r[s];return i[12]-=n.x,i[13]-=n.y,i[14]-=n.z,t.markAsUpdated(),t}function Y2(n,e,t){return __(e,Sa),O_(n,Sa,Ta),__(Ta,t),t}function OT(n,e,t){if(!Aa.eyeAtCamera)return Y2(n,e,t);let i=t.asArray(),r=e.asArray();for(let s=0;s<16;s++)i[s]=r[s];return i[12]=0,i[13]=0,i[14]=0,t.markAsUpdated(),t}function kM(n,e,t,i){return bh(OT(n,e,i),t,i),i}function K2(n,e,t,i,r){for(let s=0;s{Th();Ge();iM();of();Ea=new K,Sa=new K,Ta=new K,Aa={getScene:()=>{},eyeAtCamera:!0};N_=or,WM=$i,j2=N_.prototype._updateMatrixForUniform,q2=$i.prototype.setMatrix});var Qe,er,Yu=C(()=>{Qe=class{};Qe.NAME_EFFECTLAYER="EffectLayer";Qe.NAME_LAYER="Layer";Qe.NAME_LENSFLARESYSTEM="LensFlareSystem";Qe.NAME_BOUNDINGBOXRENDERER="BoundingBoxRenderer";Qe.NAME_PARTICLESYSTEM="ParticleSystem";Qe.NAME_GAMEPAD="Gamepad";Qe.NAME_SIMPLIFICATIONQUEUE="SimplificationQueue";Qe.NAME_GEOMETRYBUFFERRENDERER="GeometryBufferRenderer";Qe.NAME_PREPASSRENDERER="PrePassRenderer";Qe.NAME_DEPTHRENDERER="DepthRenderer";Qe.NAME_DEPTHPEELINGRENDERER="DepthPeelingRenderer";Qe.NAME_POSTPROCESSRENDERPIPELINEMANAGER="PostProcessRenderPipelineManager";Qe.NAME_SPRITE="Sprite";Qe.NAME_SUBSURFACE="SubSurface";Qe.NAME_OUTLINERENDERER="Outline";Qe.NAME_PROCEDURALTEXTURE="ProceduralTexture";Qe.NAME_SHADOWGENERATOR="ShadowGenerator";Qe.NAME_OCTREE="Octree";Qe.NAME_PHYSICSENGINE="PhysicsEngine";Qe.NAME_AUDIO="Audio";Qe.NAME_FLUIDRENDERER="FluidRenderer";Qe.NAME_IBLCDFGENERATOR="iblCDFGenerator";Qe.NAME_CLUSTEREDLIGHTING="ClusteredLighting";Qe.STEP_ISREADYFORMESH_EFFECTLAYER=0;Qe.STEP_ISREADYFORMESH_DEPTHRENDERER=1;Qe.STEP_BEFOREEVALUATEACTIVEMESH_BOUNDINGBOXRENDERER=0;Qe.STEP_EVALUATESUBMESH_BOUNDINGBOXRENDERER=0;Qe.STEP_PREACTIVEMESH_BOUNDINGBOXRENDERER=0;Qe.STEP_CAMERADRAWRENDERTARGET_EFFECTLAYER=1;Qe.STEP_BEFORECAMERADRAW_PREPASS=0;Qe.STEP_BEFORECAMERADRAW_EFFECTLAYER=1;Qe.STEP_BEFORECAMERADRAW_LAYER=2;Qe.STEP_BEFORERENDERTARGETDRAW_PREPASS=0;Qe.STEP_BEFORERENDERTARGETDRAW_LAYER=1;Qe.STEP_BEFORERENDERINGMESH_PREPASS=0;Qe.STEP_BEFORERENDERINGMESH_OUTLINE=1;Qe.STEP_AFTERRENDERINGMESH_PREPASS=0;Qe.STEP_AFTERRENDERINGMESH_OUTLINE=1;Qe.STEP_AFTERRENDERINGGROUPDRAW_EFFECTLAYER_DRAW=0;Qe.STEP_AFTERRENDERINGGROUPDRAW_BOUNDINGBOXRENDERER=1;Qe.STEP_BEFORECAMERAUPDATE_SIMPLIFICATIONQUEUE=0;Qe.STEP_BEFORECLEAR_PROCEDURALTEXTURE=0;Qe.STEP_BEFORECLEAR_PREPASS=1;Qe.STEP_BEFORERENDERTARGETCLEAR_PREPASS=0;Qe.STEP_AFTERRENDERTARGETDRAW_PREPASS=0;Qe.STEP_AFTERRENDERTARGETDRAW_LAYER=1;Qe.STEP_AFTERCAMERADRAW_PREPASS=0;Qe.STEP_AFTERCAMERADRAW_EFFECTLAYER=1;Qe.STEP_AFTERCAMERADRAW_LENSFLARESYSTEM=2;Qe.STEP_AFTERCAMERADRAW_EFFECTLAYER_DRAW=3;Qe.STEP_AFTERCAMERADRAW_LAYER=4;Qe.STEP_AFTERCAMERADRAW_FLUIDRENDERER=5;Qe.STEP_AFTERCAMERAPOSTPROCESS_LAYER=0;Qe.STEP_AFTERRENDERTARGETPOSTPROCESS_LAYER=0;Qe.STEP_AFTERRENDER_AUDIO=0;Qe.STEP_GATHERRENDERTARGETS_DEPTHRENDERER=0;Qe.STEP_GATHERRENDERTARGETS_GEOMETRYBUFFERRENDERER=1;Qe.STEP_GATHERRENDERTARGETS_SHADOWGENERATOR=2;Qe.STEP_GATHERRENDERTARGETS_POSTPROCESSRENDERPIPELINEMANAGER=3;Qe.STEP_GATHERACTIVECAMERARENDERTARGETS_DEPTHRENDERER=0;Qe.STEP_GATHERACTIVECAMERARENDERTARGETS_FLUIDRENDERER=1;Qe.STEP_GATHERACTIVECAMERARENDERTARGETS_CLUSTEREDLIGHTING=2;Qe.STEP_POINTERMOVE_SPRITE=0;Qe.STEP_POINTERDOWN_SPRITE=0;Qe.STEP_POINTERUP_SPRITE=0;er=class n extends Array{constructor(e){super(...e)}static Create(){return Object.create(n.prototype)}registerStep(e,t,i){let r=0,s;for(;r{Ge();it=class{};it.POINTERDOWN=1;it.POINTERUP=2;it.POINTERMOVE=4;it.POINTERWHEEL=8;it.POINTERPICK=16;it.POINTERTAP=32;it.POINTERDOUBLETAP=64;NT=class{constructor(e,t){this.type=e,this.event=t}},wT=class extends NT{constructor(e,t,i,r){super(e,t),this.ray=null,this.originalPickingInfo=null,this.skipOnPointerObservable=!1,this.localPosition=new Ne(i,r)}},xa=class extends NT{get pickInfo(){return this._pickInfo||this._generatePickInfo(),this._pickInfo}constructor(e,t,i,r=null){super(e,t),this._pickInfo=i,this._inputManager=r}_generatePickInfo(){this._inputManager&&(this._pickInfo=this._inputManager._pickMove(this.event),this._inputManager._setRayOnPointerInfo(this._pickInfo,this.event),this._inputManager=null)}}});var Xl,$2=C(()=>{Xl=class n{constructor(){this.hoverCursor="",this.actions=[],this.isRecursive=!1,this.disposeWhenUnowned=!0}static get HasTriggers(){for(let e in n.Triggers)if(Object.prototype.hasOwnProperty.call(n.Triggers,e))return!0;return!1}static get HasPickTriggers(){for(let e in n.Triggers)if(Object.prototype.hasOwnProperty.call(n.Triggers,e)){let t=parseInt(e);if(t>=1&&t<=7)return!0}return!1}static HasSpecificTrigger(e){for(let t in n.Triggers)if(Object.prototype.hasOwnProperty.call(n.Triggers,t)&&parseInt(t)===e)return!0;return!1}};Xl.Triggers={}});var no,Ku,F_,FT=C(()=>{no=class{};no.KEYDOWN=1;no.KEYUP=2;Ku=class{constructor(e,t){this.type=e,this.event=t}},F_=class extends Ku{get skipOnPointerObservable(){return this.skipOnKeyboardObservable}set skipOnPointerObservable(e){this.skipOnKeyboardObservable=e}constructor(e,t){super(e,t),this.type=e,this.event=t,this.skipOnKeyboardObservable=!1}}});var qe,Et,J2,eB,tB,iB,rB,Bh=C(()=>{(function(n){n[n.Generic=0]="Generic",n[n.Keyboard=1]="Keyboard",n[n.Mouse=2]="Mouse",n[n.Touch=3]="Touch",n[n.DualShock=4]="DualShock",n[n.Xbox=5]="Xbox",n[n.Switch=6]="Switch",n[n.DualSense=7]="DualSense"})(qe||(qe={}));(function(n){n[n.Horizontal=0]="Horizontal",n[n.Vertical=1]="Vertical",n[n.LeftClick=2]="LeftClick",n[n.MiddleClick=3]="MiddleClick",n[n.RightClick=4]="RightClick",n[n.BrowserBack=5]="BrowserBack",n[n.BrowserForward=6]="BrowserForward",n[n.MouseWheelX=7]="MouseWheelX",n[n.MouseWheelY=8]="MouseWheelY",n[n.MouseWheelZ=9]="MouseWheelZ",n[n.Move=12]="Move"})(Et||(Et={}));(function(n){n[n.Horizontal=0]="Horizontal",n[n.Vertical=1]="Vertical",n[n.LeftClick=2]="LeftClick",n[n.MiddleClick=3]="MiddleClick",n[n.RightClick=4]="RightClick",n[n.BrowserBack=5]="BrowserBack",n[n.BrowserForward=6]="BrowserForward",n[n.MouseWheelX=7]="MouseWheelX",n[n.MouseWheelY=8]="MouseWheelY",n[n.MouseWheelZ=9]="MouseWheelZ",n[n.DeltaHorizontal=10]="DeltaHorizontal",n[n.DeltaVertical=11]="DeltaVertical"})(J2||(J2={}));(function(n){n[n.Cross=0]="Cross",n[n.Circle=1]="Circle",n[n.Square=2]="Square",n[n.Triangle=3]="Triangle",n[n.L1=4]="L1",n[n.R1=5]="R1",n[n.L2=6]="L2",n[n.R2=7]="R2",n[n.Share=8]="Share",n[n.Options=9]="Options",n[n.L3=10]="L3",n[n.R3=11]="R3",n[n.DPadUp=12]="DPadUp",n[n.DPadDown=13]="DPadDown",n[n.DPadLeft=14]="DPadLeft",n[n.DPadRight=15]="DPadRight",n[n.Home=16]="Home",n[n.TouchPad=17]="TouchPad",n[n.LStickXAxis=18]="LStickXAxis",n[n.LStickYAxis=19]="LStickYAxis",n[n.RStickXAxis=20]="RStickXAxis",n[n.RStickYAxis=21]="RStickYAxis"})(eB||(eB={}));(function(n){n[n.Cross=0]="Cross",n[n.Circle=1]="Circle",n[n.Square=2]="Square",n[n.Triangle=3]="Triangle",n[n.L1=4]="L1",n[n.R1=5]="R1",n[n.L2=6]="L2",n[n.R2=7]="R2",n[n.Create=8]="Create",n[n.Options=9]="Options",n[n.L3=10]="L3",n[n.R3=11]="R3",n[n.DPadUp=12]="DPadUp",n[n.DPadDown=13]="DPadDown",n[n.DPadLeft=14]="DPadLeft",n[n.DPadRight=15]="DPadRight",n[n.Home=16]="Home",n[n.TouchPad=17]="TouchPad",n[n.LStickXAxis=18]="LStickXAxis",n[n.LStickYAxis=19]="LStickYAxis",n[n.RStickXAxis=20]="RStickXAxis",n[n.RStickYAxis=21]="RStickYAxis"})(tB||(tB={}));(function(n){n[n.A=0]="A",n[n.B=1]="B",n[n.X=2]="X",n[n.Y=3]="Y",n[n.LB=4]="LB",n[n.RB=5]="RB",n[n.LT=6]="LT",n[n.RT=7]="RT",n[n.Back=8]="Back",n[n.Start=9]="Start",n[n.LS=10]="LS",n[n.RS=11]="RS",n[n.DPadUp=12]="DPadUp",n[n.DPadDown=13]="DPadDown",n[n.DPadLeft=14]="DPadLeft",n[n.DPadRight=15]="DPadRight",n[n.Home=16]="Home",n[n.LStickXAxis=17]="LStickXAxis",n[n.LStickYAxis=18]="LStickYAxis",n[n.RStickXAxis=19]="RStickXAxis",n[n.RStickYAxis=20]="RStickYAxis"})(iB||(iB={}));(function(n){n[n.B=0]="B",n[n.A=1]="A",n[n.Y=2]="Y",n[n.X=3]="X",n[n.L=4]="L",n[n.R=5]="R",n[n.ZL=6]="ZL",n[n.ZR=7]="ZR",n[n.Minus=8]="Minus",n[n.Plus=9]="Plus",n[n.LS=10]="LS",n[n.RS=11]="RS",n[n.DPadUp=12]="DPadUp",n[n.DPadDown=13]="DPadDown",n[n.DPadLeft=14]="DPadLeft",n[n.DPadRight=15]="DPadRight",n[n.Home=16]="Home",n[n.Capture=17]="Capture",n[n.LStickXAxis=18]="LStickXAxis",n[n.LStickYAxis=19]="LStickYAxis",n[n.RStickXAxis=20]="RStickXAxis",n[n.RStickYAxis=21]="RStickYAxis"})(rB||(rB={}))});var nB,so,BT=C(()=>{(function(n){n[n.PointerMove=0]="PointerMove",n[n.PointerDown=1]="PointerDown",n[n.PointerUp=2]="PointerUp"})(nB||(nB={}));so=class{};so.DOM_DELTA_PIXEL=0;so.DOM_DELTA_LINE=1;so.DOM_DELTA_PAGE=2});var ao,zM=C(()=>{BT();Bh();ao=class{static CreateDeviceEvent(e,t,i,r,s,a,o){switch(e){case qe.Keyboard:return this._CreateKeyboardEvent(i,r,s,a);case qe.Mouse:if(i===Et.MouseWheelX||i===Et.MouseWheelY||i===Et.MouseWheelZ)return this._CreateWheelEvent(e,t,i,r,s,a);case qe.Touch:return this._CreatePointerEvent(e,t,i,r,s,a,o);default:throw`Unable to generate event for device ${qe[e]}`}}static _CreatePointerEvent(e,t,i,r,s,a,o){let l=this._CreateMouseEvent(e,t,i,r,s,a);e===qe.Mouse?(l.deviceType=qe.Mouse,l.pointerId=1,l.pointerType="mouse"):(l.deviceType=qe.Touch,l.pointerId=o!=null?o:t,l.pointerType="touch");let c=0;return c+=s.pollInput(e,t,Et.LeftClick),c+=s.pollInput(e,t,Et.RightClick)*2,c+=s.pollInput(e,t,Et.MiddleClick)*4,l.buttons=c,i===Et.Move?l.type="pointermove":i>=Et.LeftClick&&i<=Et.RightClick&&(l.type=r===1?"pointerdown":"pointerup",l.button=i-2),l}static _CreateWheelEvent(e,t,i,r,s,a){let o=this._CreateMouseEvent(e,t,i,r,s,a);switch(o.pointerId=1,o.type="wheel",o.deltaMode=so.DOM_DELTA_PIXEL,o.deltaX=0,o.deltaY=0,o.deltaZ=0,i){case Et.MouseWheelX:o.deltaX=r;break;case Et.MouseWheelY:o.deltaY=r;break;case Et.MouseWheelZ:o.deltaZ=r;break}return o}static _CreateMouseEvent(e,t,i,r,s,a){let o=this._CreateEvent(a),l=s.pollInput(e,t,Et.Horizontal),c=s.pollInput(e,t,Et.Vertical);return a?(o.movementX=0,o.movementY=0,o.offsetX=o.movementX-a.getBoundingClientRect().x,o.offsetY=o.movementY-a.getBoundingClientRect().y):(o.movementX=s.pollInput(e,t,10),o.movementY=s.pollInput(e,t,11),o.offsetX=0,o.offsetY=0),this._CheckNonCharacterKeys(o,s),o.clientX=l,o.clientY=c,o.x=l,o.y=c,o.deviceType=e,o.deviceSlot=t,o.inputIndex=i,o}static _CreateKeyboardEvent(e,t,i,r){let s=this._CreateEvent(r);return this._CheckNonCharacterKeys(s,i),s.deviceType=qe.Keyboard,s.deviceSlot=0,s.inputIndex=e,s.type=t===1?"keydown":"keyup",s.key=String.fromCharCode(e),s.keyCode=e,s}static _CheckNonCharacterKeys(e,t){let i=t.isDeviceAvailable(qe.Keyboard),r=i&&t.pollInput(qe.Keyboard,0,18)===1,s=i&&t.pollInput(qe.Keyboard,0,17)===1,a=i&&(t.pollInput(qe.Keyboard,0,91)===1||t.pollInput(qe.Keyboard,0,92)===1||t.pollInput(qe.Keyboard,0,93)===1),o=i&&t.pollInput(qe.Keyboard,0,16)===1;e.altKey=r,e.ctrlKey=s,e.metaKey=a,e.shiftKey=o}static _CreateEvent(e){let t={};return t.preventDefault=()=>{},t.target=e,t}}});var UT,sB=C(()=>{zM();Bh();UT=class{constructor(e,t,i){this._nativeInput=_native.DeviceInputSystem?new _native.DeviceInputSystem(e,t,(r,s,a,o)=>{let l=ao.CreateDeviceEvent(r,s,a,o,this);i(r,s,l)}):this._createDummyNativeInput()}pollInput(e,t,i){return this._nativeInput.pollInput(e,t,i)}isDeviceAvailable(e){return e===qe.Mouse||e===qe.Touch}dispose(){this._nativeInput.dispose()}_createDummyNativeInput(){return{pollInput:()=>0,isDeviceAvailable:()=>!1,dispose:()=>{}}}}});var aB,oB,VT,lB=C(()=>{ma();Ci();zM();Bh();aB=255,oB=Object.keys(Et).length/2,VT=class{constructor(e,t,i,r){this._inputs=[],this._keyboardActive=!1,this._pointerActive=!1,this._usingSafari=de.IsSafari(),this._usingMacOs=yl()&&/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform),this._keyboardDownEvent=s=>{},this._keyboardUpEvent=s=>{},this._keyboardBlurEvent=s=>{},this._pointerMoveEvent=s=>{},this._pointerDownEvent=s=>{},this._pointerUpEvent=s=>{},this._pointerCancelEvent=s=>{},this._pointerCancelTouch=s=>{},this._pointerLeaveEvent=s=>{},this._pointerWheelEvent=s=>{},this._pointerBlurEvent=s=>{},this._pointerMacOsChromeOutEvent=s=>{},this._eventsAttached=!1,this._mouseId=-1,this._isUsingFirefox=yl()&&navigator.userAgent&&navigator.userAgent.indexOf("Firefox")!==-1,this._isUsingChromium=yl()&&navigator.userAgent&&navigator.userAgent.indexOf("Chrome")!==-1,this._maxTouchPoints=0,this._pointerInputClearObserver=null,this._gamepadConnectedEvent=s=>{},this._gamepadDisconnectedEvent=s=>{},this._eventPrefix=de.GetPointerPrefix(e),this._engine=e,this._onDeviceConnected=t,this._onDeviceDisconnected=i,this._onInputChanged=r,this._mouseId=this._isUsingFirefox?0:1,this._enableEvents(),this._usingMacOs&&(this._metaKeys=[]),this._engine._onEngineViewChanged||(this._engine._onEngineViewChanged=()=>{this._enableEvents()})}pollInput(e,t,i){let r=this._inputs[e][t];if(!r)throw`Unable to find device ${qe[e]}`;e>=qe.DualShock&&e<=qe.DualSense&&this._updateDevice(e,t,i);let s=r[i];if(s===void 0)throw`Unable to find input ${i} for device ${qe[e]} in slot ${t}`;return i===Et.Move&&de.Warn("Unable to provide information for PointerInput.Move. Try using PointerInput.Horizontal or PointerInput.Vertical for move data."),s}isDeviceAvailable(e){return this._inputs[e]!==void 0}dispose(){this._onDeviceConnected=()=>{},this._onDeviceDisconnected=()=>{},this._onInputChanged=()=>{},delete this._engine._onEngineViewChanged,this._elementToAttachTo&&this._disableEvents()}_enableEvents(){let e=this==null?void 0:this._engine.getInputElement();if(e&&(!this._eventsAttached||this._elementToAttachTo!==e)){if(this._disableEvents(),this._inputs){for(let t of this._inputs)if(t)for(let i in t){let r=+i,s=t[r];if(s)for(let a=0;a{this._keyboardActive||(this._keyboardActive=!0,this._registerDevice(qe.Keyboard,0,aB));let t=this._inputs[qe.Keyboard][0];if(t){t[e.keyCode]=1;let i=e;i.inputIndex=e.keyCode,this._usingMacOs&&e.metaKey&&e.key!=="Meta"&&(this._metaKeys.includes(e.keyCode)||this._metaKeys.push(e.keyCode)),this._onInputChanged(qe.Keyboard,0,i)}},this._keyboardUpEvent=e=>{this._keyboardActive||(this._keyboardActive=!0,this._registerDevice(qe.Keyboard,0,aB));let t=this._inputs[qe.Keyboard][0];if(t){t[e.keyCode]=0;let i=e;if(i.inputIndex=e.keyCode,this._usingMacOs&&e.key==="Meta"&&this._metaKeys.length>0){for(let r of this._metaKeys){let s=ao.CreateDeviceEvent(qe.Keyboard,0,r,0,this,this._elementToAttachTo);t[r]=0,this._onInputChanged(qe.Keyboard,0,s)}this._metaKeys.splice(0,this._metaKeys.length)}this._onInputChanged(qe.Keyboard,0,i)}},this._keyboardBlurEvent=()=>{if(this._keyboardActive){let e=this._inputs[qe.Keyboard][0];for(let t=0;t{let r=this._getPointerType(i),s=r===qe.Mouse?0:this._activeTouchIds.indexOf(i.pointerId);if(r===qe.Touch&&s===-1){let o=this._activeTouchIds.indexOf(-1);if(o>=0)s=o,this._activeTouchIds[o]=i.pointerId,this._onDeviceConnected(r,s);else{de.Warn(`Max number of touches exceeded. Ignoring touches in excess of ${this._maxTouchPoints}`);return}}this._inputs[r]||(this._inputs[r]={}),this._inputs[r][s]||this._addPointerDevice(r,s,i.clientX,i.clientY);let a=this._inputs[r][s];if(a){let o=i;o.inputIndex=Et.Move,a[Et.Horizontal]=i.clientX,a[Et.Vertical]=i.clientY,r===qe.Touch&&a[Et.LeftClick]===0&&(a[Et.LeftClick]=1),i.pointerId===void 0&&(i.pointerId=this._mouseId),this._onInputChanged(r,s,o),!this._usingSafari&&i.button!==-1&&(o.inputIndex=i.button+2,a[i.button+2]=a[i.button+2]?0:1,this._onInputChanged(r,s,o))}},this._pointerDownEvent=i=>{let r=this._getPointerType(i),s=r===qe.Mouse?0:i.pointerId;if(r===qe.Touch){let o=this._activeTouchIds.indexOf(i.pointerId);if(o===-1&&(o=this._activeTouchIds.indexOf(-1)),o>=0)s=o,this._activeTouchIds[o]=i.pointerId;else{de.Warn(`Max number of touches exceeded. Ignoring touches in excess of ${this._maxTouchPoints}`);return}}this._inputs[r]||(this._inputs[r]={}),this._inputs[r][s]?r===qe.Touch&&this._onDeviceConnected(r,s):this._addPointerDevice(r,s,i.clientX,i.clientY);let a=this._inputs[r][s];if(a){let o=a[Et.Horizontal],l=a[Et.Vertical];if(r===qe.Mouse){if(i.pointerId===void 0&&(i.pointerId=this._mouseId),!document.pointerLockElement)try{this._elementToAttachTo.setPointerCapture(this._mouseId)}catch(f){}}else if(i.pointerId&&!document.pointerLockElement)try{this._elementToAttachTo.setPointerCapture(i.pointerId)}catch(f){}a[Et.Horizontal]=i.clientX,a[Et.Vertical]=i.clientY,a[i.button+2]=1;let c=i;c.inputIndex=i.button+2,this._onInputChanged(r,s,c),(o!==i.clientX||l!==i.clientY)&&(c.inputIndex=Et.Move,this._onInputChanged(r,s,c))}},this._pointerUpEvent=i=>{var c,f,h,d,u;let r=this._getPointerType(i),s=r===qe.Mouse?0:this._activeTouchIds.indexOf(i.pointerId);if(r===qe.Touch){if(s===-1)return;this._activeTouchIds[s]=-1}let a=(c=this._inputs[r])==null?void 0:c[s],o=i.button,l=a&&a[o+2]!==0;if(!l&&this._isUsingFirefox&&this._usingMacOs&&a&&(o=o===2?0:2,l=a[o+2]!==0),l){let m=a[Et.Horizontal],_=a[Et.Vertical];a[Et.Horizontal]=i.clientX,a[Et.Vertical]=i.clientY,a[o+2]=0;let p=i;i.pointerId===void 0&&(i.pointerId=this._mouseId),(m!==i.clientX||_!==i.clientY)&&(p.inputIndex=Et.Move,this._onInputChanged(r,s,p)),p.inputIndex=o+2,r===qe.Mouse&&this._mouseId>=0&&((h=(f=this._elementToAttachTo).hasPointerCapture)!=null&&h.call(f,this._mouseId))?this._elementToAttachTo.releasePointerCapture(this._mouseId):i.pointerId&&((u=(d=this._elementToAttachTo).hasPointerCapture)!=null&&u.call(d,i.pointerId))&&this._elementToAttachTo.releasePointerCapture(i.pointerId),this._onInputChanged(r,s,p),r===qe.Touch&&this._onDeviceDisconnected(r,s)}},this._pointerCancelTouch=i=>{var a,o;let r=this._activeTouchIds.indexOf(i);if(r===-1)return;(o=(a=this._elementToAttachTo).hasPointerCapture)!=null&&o.call(a,i)&&this._elementToAttachTo.releasePointerCapture(i),this._inputs[qe.Touch][r][Et.LeftClick]=0;let s=ao.CreateDeviceEvent(qe.Touch,r,Et.LeftClick,0,this,this._elementToAttachTo,i);this._onInputChanged(qe.Touch,r,s),this._activeTouchIds[r]=-1,this._onDeviceDisconnected(qe.Touch,r)},this._pointerCancelEvent=i=>{var r,s;if(i.pointerType==="mouse"){let a=this._inputs[qe.Mouse][0];this._mouseId>=0&&((s=(r=this._elementToAttachTo).hasPointerCapture)!=null&&s.call(r,this._mouseId))&&this._elementToAttachTo.releasePointerCapture(this._mouseId);for(let o=Et.LeftClick;o<=Et.BrowserForward;o++)if(a[o]===1){a[o]=0;let l=ao.CreateDeviceEvent(qe.Mouse,0,o,0,this,this._elementToAttachTo);this._onInputChanged(qe.Mouse,0,l)}}else this._pointerCancelTouch(i.pointerId)},this._pointerLeaveEvent=i=>{i.pointerType==="pen"&&this._pointerCancelTouch(i.pointerId)},this._wheelEventName="onwheel"in document.createElement("div")?"wheel":document.onmousewheel!==void 0?"mousewheel":"DOMMouseScroll";let e=!1,t=function(){};try{let i=Object.defineProperty({},"passive",{get:function(){e=!0}});this._elementToAttachTo.addEventListener("test",t,i),this._elementToAttachTo.removeEventListener("test",t,i)}catch(i){}this._pointerBlurEvent=()=>{var i,r,s,a,o;if(this.isDeviceAvailable(qe.Mouse)){let l=this._inputs[qe.Mouse][0];this._mouseId>=0&&((r=(i=this._elementToAttachTo).hasPointerCapture)!=null&&r.call(i,this._mouseId))&&this._elementToAttachTo.releasePointerCapture(this._mouseId);for(let c=Et.LeftClick;c<=Et.BrowserForward;c++)if(l[c]===1){l[c]=0;let f=ao.CreateDeviceEvent(qe.Mouse,0,c,0,this,this._elementToAttachTo);this._onInputChanged(qe.Mouse,0,f)}}if(this.isDeviceAvailable(qe.Touch)){let l=this._inputs[qe.Touch];for(let c=0;c{let r=qe.Mouse,s=0;this._inputs[r]||(this._inputs[r]=[]),this._inputs[r][s]||(this._pointerActive=!0,this._registerDevice(r,s,oB));let a=this._inputs[r][s];if(a){a[Et.MouseWheelX]=i.deltaX||0,a[Et.MouseWheelY]=i.deltaY||i.wheelDelta||0,a[Et.MouseWheelZ]=i.deltaZ||0;let o=i;i.pointerId===void 0&&(i.pointerId=this._mouseId),a[Et.MouseWheelX]!==0&&(o.inputIndex=Et.MouseWheelX,this._onInputChanged(r,s,o)),a[Et.MouseWheelY]!==0&&(o.inputIndex=Et.MouseWheelY,this._onInputChanged(r,s,o)),a[Et.MouseWheelZ]!==0&&(o.inputIndex=Et.MouseWheelZ,this._onInputChanged(r,s,o))}},this._usingMacOs&&this._isUsingChromium&&(this._pointerMacOsChromeOutEvent=i=>{i.buttons>1&&this._pointerCancelEvent(i)},this._elementToAttachTo.addEventListener("lostpointercapture",this._pointerMacOsChromeOutEvent)),this._elementToAttachTo.addEventListener(this._eventPrefix+"move",this._pointerMoveEvent),this._elementToAttachTo.addEventListener(this._eventPrefix+"down",this._pointerDownEvent),this._elementToAttachTo.addEventListener(this._eventPrefix+"up",this._pointerUpEvent),this._elementToAttachTo.addEventListener(this._eventPrefix+"cancel",this._pointerCancelEvent),this._elementToAttachTo.addEventListener(this._eventPrefix+"leave",this._pointerLeaveEvent),this._elementToAttachTo.addEventListener("blur",this._pointerBlurEvent),this._elementToAttachTo.addEventListener(this._wheelEventName,this._pointerWheelEvent,e?{passive:!1}:!1),this._pointerInputClearObserver=this._engine.onEndFrameObservable.add(()=>{if(this.isDeviceAvailable(qe.Mouse)){let i=this._inputs[qe.Mouse][0];i[Et.MouseWheelX]=0,i[Et.MouseWheelY]=0,i[Et.MouseWheelZ]=0}})}_handleGamepadActions(){this._gamepadConnectedEvent=e=>{this._addGamePad(e.gamepad)},this._gamepadDisconnectedEvent=e=>{if(this._gamepads){let t=this._getGamepadDeviceType(e.gamepad.id),i=e.gamepad.index;this._unregisterDevice(t,i),delete this._gamepads[i]}},window.addEventListener("gamepadconnected",this._gamepadConnectedEvent),window.addEventListener("gamepaddisconnected",this._gamepadDisconnectedEvent)}_updateDevice(e,t,i){let r=navigator.getGamepads()[t];if(r&&e===this._gamepads[t]){let s=this._inputs[e][t];i>=r.buttons.length?s[i]=r.axes[i-r.buttons.length].valueOf():s[i]=r.buttons[i].value}}_getGamepadDeviceType(e){return e.indexOf("054c")!==-1?e.indexOf("0ce6")!==-1?qe.DualSense:qe.DualShock:e.indexOf("Xbox One")!==-1||e.search("Xbox 360")!==-1||e.search("xinput")!==-1?qe.Xbox:e.indexOf("057e")!==-1?qe.Switch:qe.Generic}_getPointerType(e){let t=qe.Mouse;return(e.pointerType==="touch"||e.pointerType==="pen"||e.touches)&&(t=qe.Touch),t}}});var B_,cB=C(()=>{hi();B_=class{constructor(e,t,i=0){this.deviceType=t,this.deviceSlot=i,this.onInputChangedObservable=new te,this._deviceInputSystem=e}getInput(e){return this._deviceInputSystem.pollInput(this.deviceType,this.deviceSlot,e)}}});var GT,fB=C(()=>{Bh();sB();lB();cB();GT=class{constructor(e){this._registeredManagers=new Array,this._refCount=0,this.registerManager=a=>{for(let o=0;o{let o=this._registeredManagers.indexOf(a);o>-1&&this._registeredManagers.splice(o,1)};let t=Object.keys(qe).length/2;this._devices=new Array(t);let i=(a,o)=>{this._devices[a]||(this._devices[a]=new Array),this._devices[a][o]||(this._devices[a][o]=o);for(let l of this._registeredManagers){let c=new B_(this._deviceInputSystem,a,o);l._addDevice(c)}},r=(a,o)=>{var l;(l=this._devices[a])!=null&&l[o]&&delete this._devices[a][o];for(let c of this._registeredManagers)c._removeDevice(a,o)},s=(a,o,l)=>{if(l)for(let c of this._registeredManagers)c._onInputChanged(a,o,l)};typeof _native!="undefined"?this._deviceInputSystem=new UT(i,r,s):this._deviceInputSystem=new VT(e,i,r,s)}dispose(){this._deviceInputSystem.dispose()}}});var kT,hB=C(()=>{Bh();hi();fB();kT=class{getDeviceSource(e,t){if(t===void 0){if(this._firstDevice[e]===void 0)return null;t=this._firstDevice[e]}return!this._devices[e]||this._devices[e][t]===void 0?null:this._devices[e][t]}getDeviceSources(e){return this._devices[e]?this._devices[e].filter(t=>!!t):[]}constructor(e){let t=Object.keys(qe).length/2;this._devices=new Array(t),this._firstDevice=new Array(t),this._engine=e,this._engine._deviceSourceManager||(this._engine._deviceSourceManager=new GT(e)),this._engine._deviceSourceManager._refCount++,this.onDeviceConnectedObservable=new te(i=>{for(let r of this._devices)if(r)for(let s of r)s&&this.onDeviceConnectedObservable.notifyObserver(i,s)}),this.onDeviceDisconnectedObservable=new te,this._engine._deviceSourceManager.registerManager(this),this._onDisposeObserver=e.onDisposeObservable.add(()=>{this.dispose()})}dispose(){this.onDeviceConnectedObservable.clear(),this.onDeviceDisconnectedObservable.clear(),this._engine._deviceSourceManager&&(this._engine._deviceSourceManager.unregisterManager(this),--this._engine._deviceSourceManager._refCount<1&&(this._engine._deviceSourceManager.dispose(),delete this._engine._deviceSourceManager)),this._engine.onDisposeObservable.remove(this._onDisposeObserver)}_addDevice(e){this._devices[e.deviceType]||(this._devices[e.deviceType]=[]),this._devices[e.deviceType][e.deviceSlot]||(this._devices[e.deviceType][e.deviceSlot]=e,this._updateFirstDevices(e.deviceType)),this.onDeviceConnectedObservable.notifyObservers(e)}_removeDevice(e,t){var r,s;let i=(r=this._devices[e])==null?void 0:r[t];this.onDeviceDisconnectedObservable.notifyObservers(i),(s=this._devices[e])!=null&&s[t]&&delete this._devices[e][t],this._updateFirstDevices(e)}_onInputChanged(e,t,i){var r,s;(s=(r=this._devices[e])==null?void 0:r[t])==null||s.onInputChangedObservable.notifyObservers(i)}_updateFirstDevices(e){switch(e){case qe.Keyboard:case qe.Mouse:this._firstDevice[e]=0;break;case qe.Touch:case qe.DualSense:case qe.DualShock:case qe.Xbox:case qe.Switch:case qe.Generic:{delete this._firstDevice[e];let t=this._devices[e];if(t){for(let i=0;i{Uh=class{};Uh._IsPickingAvailable=!1});var WT,Rn,dB=C(()=>{ro();$2();L_();Ge();GM();FT();Bh();hB();Pi();XM();WT=class{constructor(){this._singleClick=!1,this._doubleClick=!1,this._hasSwiped=!1,this._ignore=!1}get singleClick(){return this._singleClick}get doubleClick(){return this._doubleClick}get hasSwiped(){return this._hasSwiped}get ignore(){return this._ignore}set singleClick(e){this._singleClick=e}set doubleClick(e){this._doubleClick=e}set hasSwiped(e){this._hasSwiped=e}set ignore(e){this._ignore=e}},Rn=class n{constructor(e){this._alreadyAttached=!1,this._meshPickProceed=!1,this._currentPickResult=null,this._previousPickResult=null,this._activePointerIds=new Array,this._activePointerIdsCount=0,this._doubleClickOccured=!1,this._isSwiping=!1,this._swipeButtonPressed=-1,this._skipPointerTap=!1,this._isMultiTouchGesture=!1,this._pointerX=0,this._pointerY=0,this._startingPointerPosition=new Ne(0,0),this._previousStartingPointerPosition=new Ne(0,0),this._startingPointerTime=0,this._previousStartingPointerTime=0,this._pointerCaptures={},this._meshUnderPointerId={},this._movePointerInfo=null,this._cameraObserverCount=0,this._delayedClicks=[null,null,null,null,null],this._deviceSourceManager=null,this._scene=e||Le.LastCreatedScene,this._scene}get meshUnderPointer(){return this._movePointerInfo&&(this._movePointerInfo._generatePickInfo(),this._movePointerInfo=null),this._pointerOverMesh}getMeshUnderPointerByPointerId(e){return this._meshUnderPointerId[e]||null}get unTranslatedPointer(){return new Ne(this._unTranslatedPointerX,this._unTranslatedPointerY)}get pointerX(){return this._pointerX}set pointerX(e){this._pointerX=e}get pointerY(){return this._pointerY}set pointerY(e){this._pointerY=e}_updatePointerPosition(e){let t=this._scene.getEngine().getInputElementClientRect();t&&(this._pointerX=e.clientX-t.left,this._pointerY=e.clientY-t.top,this._unTranslatedPointerX=this._pointerX,this._unTranslatedPointerY=this._pointerY)}_processPointerMove(e,t){let i=this._scene,r=i.getEngine(),s=r.getInputElement();s&&(s.tabIndex=r.canvasTabIndex,i.doNotHandleCursors||(s.style.cursor=i.defaultCursor)),this._setCursorAndPointerOverMesh(e,t,i);for(let l of i._pointerMoveStage){e=e||this._pickMove(t);let c=!!(e!=null&&e.pickedMesh);e=l.action(this._unTranslatedPointerX,this._unTranslatedPointerY,e,c,s)}let a=t.inputIndex>=Et.MouseWheelX&&t.inputIndex<=Et.MouseWheelZ?it.POINTERWHEEL:it.POINTERMOVE;i.onPointerMove&&(e=e||this._pickMove(t),i.onPointerMove(t,e,a));let o;e?(o=new xa(a,t,e),this._setRayOnPointerInfo(e,t)):(o=new xa(a,t,null,this),this._movePointerInfo=o),i.onPointerObservable.hasObservers()&&i.onPointerObservable.notifyObservers(o,a)}_setRayOnPointerInfo(e,t){let i=this._scene;e&&Uh._IsPickingAvailable&&(e.ray||(e.ray=i.createPickingRay(t.offsetX,t.offsetY,K.Identity(),i.activeCamera)))}_addCameraPointerObserver(e,t){return this._cameraObserverCount++,this._scene.onPointerObservable.add(e,t)}_removeCameraPointerObserver(e){return this._cameraObserverCount--,this._scene.onPointerObservable.remove(e)}_checkForPicking(){return!!(this._scene.onPointerObservable.observers.length>this._cameraObserverCount||this._scene.onPointerPick)}_checkPrePointerObservable(e,t,i){let r=this._scene,s=new wT(i,t,this._unTranslatedPointerX,this._unTranslatedPointerY);return e&&(s.originalPickingInfo=e,s.ray=e.ray,t.pointerType==="xr-near"&&e.originMesh&&(s.nearInteractionPickingInfo=e)),r.onPrePointerObservable.notifyObservers(s,i),!!s.skipOnPointerObservable}_pickMove(e){let t=this._scene,i=t.pick(this._unTranslatedPointerX,this._unTranslatedPointerY,t.pointerMovePredicate,t.pointerMoveFastCheck,t.cameraToUseForPointers,t.pointerMoveTrianglePredicate);return this._setCursorAndPointerOverMesh(i,e,t),i}_setCursorAndPointerOverMesh(e,t,i){let s=i.getEngine().getInputElement();if(e!=null&&e.pickedMesh){if(this.setPointerOverMesh(e.pickedMesh,t.pointerId,e,t),!i.doNotHandleCursors&&s&&this._pointerOverMesh){let a=this._pointerOverMesh._getActionManagerForTrigger();a&&a.hasPointerTriggers&&(s.style.cursor=a.hoverCursor||i.hoverCursor)}}else this.setPointerOverMesh(null,t.pointerId,e,t)}simulatePointerMove(e,t){let i=new PointerEvent("pointermove",t);i.inputIndex=Et.Move,!this._checkPrePointerObservable(e,i,it.POINTERMOVE)&&this._processPointerMove(e,i)}simulatePointerDown(e,t){let i=new PointerEvent("pointerdown",t);i.inputIndex=i.button+2,!this._checkPrePointerObservable(e,i,it.POINTERDOWN)&&this._processPointerDown(e,i)}_processPointerDown(e,t){let i=this._scene;if(e!=null&&e.pickedMesh){this._pickedDownMesh=e.pickedMesh;let a=e.pickedMesh._getActionManagerForTrigger();if(a){if(a.hasPickTriggers)switch(a.processTrigger(5,new Jr(e.pickedMesh,i.pointerX,i.pointerY,e.pickedMesh,t,e)),t.button){case 0:a.processTrigger(2,new Jr(e.pickedMesh,i.pointerX,i.pointerY,e.pickedMesh,t,e));break;case 1:a.processTrigger(4,new Jr(e.pickedMesh,i.pointerX,i.pointerY,e.pickedMesh,t,e));break;case 2:a.processTrigger(3,new Jr(e.pickedMesh,i.pointerX,i.pointerY,e.pickedMesh,t,e));break}a.hasSpecificTrigger(8)&&window.setTimeout(()=>{let o=i.pick(this._unTranslatedPointerX,this._unTranslatedPointerY,l=>l.isPickable&&l.isVisible&&l.isReady()&&l.actionManager&&l.actionManager.hasSpecificTrigger(8)&&l===this._pickedDownMesh,!1,i.cameraToUseForPointers);o!=null&&o.pickedMesh&&a&&this._activePointerIdsCount!==0&&Date.now()-this._startingPointerTime>n.LongPressDelay&&!this._isPointerSwiping()&&(this._startingPointerTime=0,a.processTrigger(8,Jr.CreateNew(o.pickedMesh,t)))},n.LongPressDelay)}}else for(let a of i._pointerDownStage)e=a.action(this._unTranslatedPointerX,this._unTranslatedPointerY,e,t,!1);let r,s=it.POINTERDOWN;e?(i.onPointerDown&&i.onPointerDown(t,e,s),r=new xa(s,t,e),this._setRayOnPointerInfo(e,t)):r=new xa(s,t,null,this),i.onPointerObservable.hasObservers()&&i.onPointerObservable.notifyObservers(r,s)}_isPointerSwiping(){return this._isSwiping}simulatePointerUp(e,t,i){let r=new PointerEvent("pointerup",t);r.inputIndex=Et.Move;let s=new WT;i?s.doubleClick=!0:s.singleClick=!0,!this._checkPrePointerObservable(e,r,it.POINTERUP)&&this._processPointerUp(e,r,s)}_processPointerUp(e,t,i){let r=this._scene;if(e!=null&&e.pickedMesh){if(this._pickedUpMesh=e.pickedMesh,this._pickedDownMesh===this._pickedUpMesh&&(r.onPointerPick&&r.onPointerPick(t,e),i.singleClick&&!i.ignore&&r.onPointerObservable.observers.length>this._cameraObserverCount)){let a=it.POINTERPICK,o=new xa(a,t,e);this._setRayOnPointerInfo(e,t),r.onPointerObservable.notifyObservers(o,a)}let s=e.pickedMesh._getActionManagerForTrigger();if(s&&!i.ignore){s.processTrigger(7,Jr.CreateNew(e.pickedMesh,t,e)),!i.hasSwiped&&i.singleClick&&s.processTrigger(1,Jr.CreateNew(e.pickedMesh,t,e));let a=e.pickedMesh._getActionManagerForTrigger(6);i.doubleClick&&a&&a.processTrigger(6,Jr.CreateNew(e.pickedMesh,t,e))}}else if(!i.ignore)for(let s of r._pointerUpStage)e=s.action(this._unTranslatedPointerX,this._unTranslatedPointerY,e,t,i.doubleClick);if(this._pickedDownMesh&&this._pickedDownMesh!==this._pickedUpMesh){let s=this._pickedDownMesh._getActionManagerForTrigger(16);s&&s.processTrigger(16,Jr.CreateNew(this._pickedDownMesh,t))}if(!i.ignore){let s=new xa(it.POINTERUP,t,e);if(this._setRayOnPointerInfo(e,t),r.onPointerObservable.notifyObservers(s,it.POINTERUP),r.onPointerUp&&r.onPointerUp(t,e,it.POINTERUP),!i.hasSwiped&&!this._skipPointerTap&&!this._isMultiTouchGesture){let a=0;if(i.singleClick?a=it.POINTERTAP:i.doubleClick&&(a=it.POINTERDOUBLETAP),a){let o=new xa(a,t,e);r.onPointerObservable.hasObservers()&&r.onPointerObservable.hasSpecificMask(a)&&r.onPointerObservable.notifyObservers(o,a)}}}}isPointerCaptured(e=0){return this._pointerCaptures[e]}attachControl(e=!0,t=!0,i=!0,r=null){let s=this._scene,a=s.getEngine();r||(r=a.getInputElement()),this._alreadyAttached&&this.detachControl(),r&&(this._alreadyAttachedTo=r),this._deviceSourceManager=new kT(a),this._initActionManager=o=>{if(!this._meshPickProceed){let l=s.skipPointerUpPicking||s._registeredActions===0&&!this._checkForPicking()&&!s.onPointerUp?null:s.pick(this._unTranslatedPointerX,this._unTranslatedPointerY,s.pointerUpPredicate,s.pointerUpFastCheck,s.cameraToUseForPointers,s.pointerUpTrianglePredicate);this._currentPickResult=l,l&&(o=l.hit&&l.pickedMesh?l.pickedMesh._getActionManagerForTrigger():null),this._meshPickProceed=!0}return o},this._delayedSimpleClick=(o,l,c)=>{if((Date.now()-this._previousStartingPointerTime>n.DoubleClickDelay&&!this._doubleClickOccured||o!==this._previousButtonPressed)&&(this._doubleClickOccured=!1,l.singleClick=!0,l.ignore=!1,this._delayedClicks[o])){let f=this._delayedClicks[o].evt,h=it.POINTERTAP,d=new xa(h,f,this._currentPickResult);s.onPointerObservable.hasObservers()&&s.onPointerObservable.hasSpecificMask(h)&&s.onPointerObservable.notifyObservers(d,h),this._delayedClicks[o]=null}},this._initClickEvent=(o,l,c,f)=>{var _,p;let h=new WT;this._currentPickResult=null;let d=null,u=o.hasSpecificMask(it.POINTERPICK)||l.hasSpecificMask(it.POINTERPICK)||o.hasSpecificMask(it.POINTERTAP)||l.hasSpecificMask(it.POINTERTAP)||o.hasSpecificMask(it.POINTERDOUBLETAP)||l.hasSpecificMask(it.POINTERDOUBLETAP);!u&&Xl&&(d=this._initActionManager(d,h),d&&(u=d.hasPickTriggers));let m=!1;if(u=u&&!this._isMultiTouchGesture,u){let g=c.button;if(h.hasSwiped=this._isPointerSwiping(),!h.hasSwiped){let v=!n.ExclusiveDoubleClickMode;if(v||(v=!o.hasSpecificMask(it.POINTERDOUBLETAP)&&!l.hasSpecificMask(it.POINTERDOUBLETAP),v&&!Xl.HasSpecificTrigger(6)&&(d=this._initActionManager(d,h),d&&(v=!d.hasSpecificTrigger(6)))),v)(Date.now()-this._previousStartingPointerTime>n.DoubleClickDelay||g!==this._previousButtonPressed)&&(h.singleClick=!0,f(h,this._currentPickResult),m=!0);else{let A={evt:c,clickInfo:h,timeoutId:window.setTimeout(this._delayedSimpleClick.bind(this,g,h,f),n.DoubleClickDelay)};this._delayedClicks[g]=A}let x=o.hasSpecificMask(it.POINTERDOUBLETAP)||l.hasSpecificMask(it.POINTERDOUBLETAP);!x&&Xl.HasSpecificTrigger(6)&&(d=this._initActionManager(d,h),d&&(x=d.hasSpecificTrigger(6))),x&&(g===this._previousButtonPressed&&Date.now()-this._previousStartingPointerTime{if(this._updatePointerPosition(o),!this._isSwiping&&this._swipeButtonPressed!==-1&&(this._isSwiping=Math.abs(this._startingPointerPosition.x-this._pointerX)>n.DragMovementThreshold||Math.abs(this._startingPointerPosition.y-this._pointerY)>n.DragMovementThreshold),a.isPointerLock&&a._verifyPointerLock(),this._checkPrePointerObservable(null,o,o.inputIndex>=Et.MouseWheelX&&o.inputIndex<=Et.MouseWheelZ?it.POINTERWHEEL:it.POINTERMOVE)||!s.cameraToUseForPointers&&!s.activeCamera)return;if(s.skipPointerMovePicking){this._processPointerMove(new Hn,o);return}s.pointerMovePredicate||(s.pointerMovePredicate=c=>c.isPickable&&c.isVisible&&c.isReady()&&c.isEnabled()&&(c.enablePointerMoveEvents||s.constantlyUpdateMeshUnderPointer||c._getActionManagerForTrigger()!==null)&&(!s.cameraToUseForPointers||(s.cameraToUseForPointers.layerMask&c.layerMask)!==0));let l=s._registeredActions>0||s.constantlyUpdateMeshUnderPointer?this._pickMove(o):null;this._processPointerMove(l,o)},this._onPointerDown=o=>{var f;let l=this._activePointerIds.indexOf(-1);if(l===-1?this._activePointerIds.push(o.pointerId):this._activePointerIds[l]=o.pointerId,this._activePointerIdsCount++,this._pickedDownMesh=null,this._meshPickProceed=!1,n.ExclusiveDoubleClickMode){for(let h=0;hh.isPickable&&h.isVisible&&h.isReady()&&h.isEnabled()&&(!s.cameraToUseForPointers||(s.cameraToUseForPointers.layerMask&h.layerMask)!==0)),this._pickedDownMesh=null;let c;s.skipPointerDownPicking||s._registeredActions===0&&!this._checkForPicking()&&!s.onPointerDown?c=new Hn:c=s.pick(this._unTranslatedPointerX,this._unTranslatedPointerY,s.pointerDownPredicate,s.pointerDownFastCheck,s.cameraToUseForPointers,s.pointerDownTrianglePredicate),this._processPointerDown(c,o)},this._onPointerUp=o=>{let l=this._activePointerIds.indexOf(o.pointerId);l!==-1&&(this._activePointerIds[l]=-1,this._activePointerIdsCount--,this._pickedUpMesh=null,this._meshPickProceed=!1,this._updatePointerPosition(o),s.preventDefaultOnPointerUp&&r&&(o.preventDefault(),r.focus()),this._initClickEvent(s.onPrePointerObservable,s.onPointerObservable,o,(c,f)=>{if(s.onPrePointerObservable.hasObservers()&&(this._skipPointerTap=!1,!c.ignore)){if(this._checkPrePointerObservable(null,o,it.POINTERUP)){this._swipeButtonPressed===o.button&&(this._isSwiping=!1,this._swipeButtonPressed=-1),o.buttons===0&&(this._pointerCaptures[o.pointerId]=!1);return}c.hasSwiped||(c.singleClick&&s.onPrePointerObservable.hasSpecificMask(it.POINTERTAP)&&this._checkPrePointerObservable(null,o,it.POINTERTAP)&&(this._skipPointerTap=!0),c.doubleClick&&s.onPrePointerObservable.hasSpecificMask(it.POINTERDOUBLETAP)&&this._checkPrePointerObservable(null,o,it.POINTERDOUBLETAP)&&(this._skipPointerTap=!0))}if(!this._pointerCaptures[o.pointerId]){this._swipeButtonPressed===o.button&&(this._isSwiping=!1,this._swipeButtonPressed=-1);return}o.buttons===0&&(this._pointerCaptures[o.pointerId]=!1),!(!s.cameraToUseForPointers&&!s.activeCamera)&&(s.pointerUpPredicate||(s.pointerUpPredicate=h=>h.isPickable&&h.isVisible&&h.isReady()&&h.isEnabled()&&(!s.cameraToUseForPointers||(s.cameraToUseForPointers.layerMask&h.layerMask)!==0)),!this._meshPickProceed&&(Xl&&Xl.HasTriggers||this._checkForPicking()||s.onPointerUp)&&this._initActionManager(null,c),f||(f=this._currentPickResult),this._processPointerUp(f,o,c),this._previousPickResult=this._currentPickResult,this._swipeButtonPressed===o.button&&(this._isSwiping=!1,this._swipeButtonPressed=-1))}))},this._onKeyDown=o=>{let l=no.KEYDOWN;if(s.onPreKeyboardObservable.hasObservers()){let c=new F_(l,o);if(s.onPreKeyboardObservable.notifyObservers(c,l),c.skipOnKeyboardObservable)return}if(s.onKeyboardObservable.hasObservers()){let c=new Ku(l,o);s.onKeyboardObservable.notifyObservers(c,l)}s.actionManager&&s.actionManager.processTrigger(14,Jr.CreateNewFromScene(s,o))},this._onKeyUp=o=>{let l=no.KEYUP;if(s.onPreKeyboardObservable.hasObservers()){let c=new F_(l,o);if(s.onPreKeyboardObservable.notifyObservers(c,l),c.skipOnKeyboardObservable)return}if(s.onKeyboardObservable.hasObservers()){let c=new Ku(l,o);s.onKeyboardObservable.notifyObservers(c,l)}s.actionManager&&s.actionManager.processTrigger(15,Jr.CreateNewFromScene(s,o))},this._deviceSourceManager.onDeviceConnectedObservable.add(o=>{o.deviceType===qe.Mouse?o.onInputChangedObservable.add(l=>{this._originMouseEvent=l,l.inputIndex===Et.LeftClick||l.inputIndex===Et.MiddleClick||l.inputIndex===Et.RightClick||l.inputIndex===Et.BrowserBack||l.inputIndex===Et.BrowserForward?t&&o.getInput(l.inputIndex)===1?this._onPointerDown(l):e&&o.getInput(l.inputIndex)===0&&this._onPointerUp(l):i&&(l.inputIndex===Et.Move?this._onPointerMove(l):(l.inputIndex===Et.MouseWheelX||l.inputIndex===Et.MouseWheelY||l.inputIndex===Et.MouseWheelZ)&&this._onPointerMove(l))}):o.deviceType===qe.Touch?o.onInputChangedObservable.add(l=>{l.inputIndex===Et.LeftClick&&(t&&o.getInput(l.inputIndex)===1?(this._onPointerDown(l),this._activePointerIdsCount>1&&(this._isMultiTouchGesture=!0)):e&&o.getInput(l.inputIndex)===0&&(this._onPointerUp(l),this._activePointerIdsCount===0&&(this._isMultiTouchGesture=!1))),i&&l.inputIndex===Et.Move&&this._onPointerMove(l)}):o.deviceType===qe.Keyboard&&o.onInputChangedObservable.add(l=>{l.type==="keydown"?this._onKeyDown(l):l.type==="keyup"&&this._onKeyUp(l)})}),this._alreadyAttached=!0}detachControl(){this._alreadyAttached&&(this._deviceSourceManager.dispose(),this._deviceSourceManager=null,this._alreadyAttachedTo&&!this._scene.doNotHandleCursors&&(this._alreadyAttachedTo.style.cursor=this._scene.defaultCursor),this._alreadyAttached=!1,this._alreadyAttachedTo=null)}setPointerOverMesh(e,t=0,i,r){if(this._meshUnderPointerId[t]===e&&(!e||!e._internalAbstractMeshDataInfo._pointerOverDisableMeshTesting))return;let s=this._meshUnderPointerId[t],a;s&&(a=s._getActionManagerForTrigger(10),a&&a.processTrigger(10,new Jr(s,this._pointerX,this._pointerY,e,r,{pointerId:t}))),e?(this._meshUnderPointerId[t]=e,this._pointerOverMesh=e,a=e._getActionManagerForTrigger(9),a&&a.processTrigger(9,new Jr(e,this._pointerX,this._pointerY,e,r,{pointerId:t,pickResult:i}))):(delete this._meshUnderPointerId[t],this._pointerOverMesh=null),this._scene.onMeshUnderPointerUpdatedObservable.hasObservers()&&this._scene.onMeshUnderPointerUpdatedObservable.notifyObservers({mesh:e,pointerId:t})}getPointerOverMesh(){return this.meshUnderPointer}_invalidateMesh(e){this._pointerOverMesh===e&&(this._pointerOverMesh=null),this._pickedDownMesh===e&&(this._pickedDownMesh=null),this._pickedUpMesh===e&&(this._pickedUpMesh=null);for(let t in this._meshUnderPointerId)this._meshUnderPointerId[t]===e&&delete this._meshUnderPointerId[t]}};Rn.DragMovementThreshold=10;Rn.LongPressDelay=500;Rn.DoubleClickDelay=300;Rn.ExclusiveDoubleClickMode=!1});var Qo,YM=C(()=>{Pl();Qo=class n{get min(){return this._min}get max(){return this._max}get average(){return this._average}get lastSecAverage(){return this._lastSecAverage}get current(){return this._current}get total(){return this._totalAccumulated}get count(){return this._totalValueCount}constructor(){this._startMonitoringTime=0,this._min=0,this._max=0,this._average=0,this._lastSecAverage=0,this._current=0,this._totalValueCount=0,this._totalAccumulated=0,this._lastSecAccumulated=0,this._lastSecTime=0,this._lastSecValueCount=0}fetchNewFrame(){this._totalValueCount++,this._current=0,this._lastSecValueCount++}addCount(e,t){n.Enabled&&(this._current+=e,t&&this._fetchResult())}beginMonitoring(){n.Enabled&&(this._startMonitoringTime=dr.Now)}endMonitoring(e=!0){if(!n.Enabled)return;e&&this.fetchNewFrame();let t=dr.Now;this._current=t-this._startMonitoringTime,e&&this._fetchResult()}endFrame(){this._fetchResult()}_fetchResult(){this._totalAccumulated+=this._current,this._lastSecAccumulated+=this._current,this._min=Math.min(this._min,this._current),this._max=Math.max(this._max,this._current),this._average=this._totalAccumulated/this._totalValueCount;let e=dr.Now;e-this._lastSecTime>1e3&&(this._lastSecAverage=this._lastSecAccumulated/this._lastSecValueCount,this._lastSecTime=e,this._lastSecAccumulated=0,this._lastSecValueCount=0)}};Qo.Enabled=!0});var Yl,HT=C(()=>{Yl=class{static get UniqueId(){let e=this._UniqueIdCounter;return this._UniqueIdCounter++,e}};Yl._UniqueIdCounter=1});var zT,uB=C(()=>{zT=class{constructor(){this.pointerDownFastCheck=!1,this.pointerUpFastCheck=!1,this.pointerMoveFastCheck=!1,this.skipPointerMovePicking=!1,this.skipPointerDownPicking=!1,this.skipPointerUpPicking=!1}}});var jie,qie,mB,Qt,ps=C(()=>{Ci();Pl();hi();to();U2();sf();Ge();D_();of();L_();GM();xT();w_();bT();Yu();ma();Pi();ln();dB();YM();zt();fT();HT();Bl();I_();Xo();uB();Pt();Vi();Wo();jie=new Mi,qie=new Mi;(function(n){n[n.BackwardCompatible=0]="BackwardCompatible",n[n.Intermediate=1]="Intermediate",n[n.Aggressive=2]="Aggressive"})(mB||(mB={}));Qt=class n{static DefaultMaterialFactory(e){throw Xe("StandardMaterial")}static CollisionCoordinatorFactory(){throw Xe("DefaultCollisionCoordinator")}get clearColor(){return this._clearColor}set clearColor(e){e!==this._clearColor&&(this._clearColor=e,this.onClearColorChangedObservable.notifyObservers(this._clearColor))}get imageProcessingConfiguration(){return this._imageProcessingConfiguration}get performancePriority(){return this._performancePriority}set performancePriority(e){if(e!==this._performancePriority){switch(this._performancePriority=e,e){case 0:this.skipFrustumClipping=!1,this._renderingManager.maintainStateBetweenFrames=!1,this.skipPointerMovePicking=!1,this.autoClear=!0;break;case 1:this.skipFrustumClipping=!1,this._renderingManager.maintainStateBetweenFrames=!1,this.skipPointerMovePicking=!0,this.autoClear=!1;break;case 2:this.skipFrustumClipping=!0,this._renderingManager.maintainStateBetweenFrames=!0,this.skipPointerMovePicking=!0,this.autoClear=!1;break}this.onScenePerformancePriorityChangedObservable.notifyObservers(e)}}set forceWireframe(e){this._forceWireframe!==e&&(this._forceWireframe=e,this.markAllMaterialsAsDirty(16))}get forceWireframe(){return this._forceWireframe}set skipFrustumClipping(e){this._skipFrustumClipping!==e&&(this._skipFrustumClipping=e)}get skipFrustumClipping(){return this._skipFrustumClipping}set forcePointsCloud(e){this._forcePointsCloud!==e&&(this._forcePointsCloud=e,this.markAllMaterialsAsDirty(16))}get forcePointsCloud(){return this._forcePointsCloud}get environmentTexture(){return this._environmentTexture}set environmentTexture(e){this._environmentTexture!==e&&(this._environmentTexture=e,this.onEnvironmentTextureChangedObservable.notifyObservers(e),this.markAllMaterialsAsDirty(1))}getNodes(){let e=[];e=e.concat(this.meshes),e=e.concat(this.lights),e=e.concat(this.cameras),e=e.concat(this.transformNodes);for(let t of this.skeletons)e=e.concat(t.bones);return e}get animationPropertiesOverride(){return this._animationPropertiesOverride}set animationPropertiesOverride(e){this._animationPropertiesOverride=e}set onDispose(e){this._onDisposeObserver&&this.onDisposeObservable.remove(this._onDisposeObserver),this._onDisposeObserver=this.onDisposeObservable.add(e)}set beforeRender(e){this._onBeforeRenderObserver&&this.onBeforeRenderObservable.remove(this._onBeforeRenderObserver),e&&(this._onBeforeRenderObserver=this.onBeforeRenderObservable.add(e))}set afterRender(e){this._onAfterRenderObserver&&this.onAfterRenderObservable.remove(this._onAfterRenderObserver),e&&(this._onAfterRenderObserver=this.onAfterRenderObservable.add(e))}set beforeCameraRender(e){this._onBeforeCameraRenderObserver&&this.onBeforeCameraRenderObservable.remove(this._onBeforeCameraRenderObserver),this._onBeforeCameraRenderObserver=this.onBeforeCameraRenderObservable.add(e)}set afterCameraRender(e){this._onAfterCameraRenderObserver&&this.onAfterCameraRenderObservable.remove(this._onAfterCameraRenderObserver),this._onAfterCameraRenderObserver=this.onAfterCameraRenderObservable.add(e)}get pointerDownPredicate(){return this._pointerPickingConfiguration.pointerDownPredicate}set pointerDownPredicate(e){this._pointerPickingConfiguration.pointerDownPredicate=e}get pointerUpPredicate(){return this._pointerPickingConfiguration.pointerUpPredicate}set pointerUpPredicate(e){this._pointerPickingConfiguration.pointerUpPredicate=e}get pointerMovePredicate(){return this._pointerPickingConfiguration.pointerMovePredicate}set pointerMovePredicate(e){this._pointerPickingConfiguration.pointerMovePredicate=e}get pointerDownFastCheck(){return this._pointerPickingConfiguration.pointerDownFastCheck}set pointerDownFastCheck(e){this._pointerPickingConfiguration.pointerDownFastCheck=e}get pointerUpFastCheck(){return this._pointerPickingConfiguration.pointerUpFastCheck}set pointerUpFastCheck(e){this._pointerPickingConfiguration.pointerUpFastCheck=e}get pointerMoveFastCheck(){return this._pointerPickingConfiguration.pointerMoveFastCheck}set pointerMoveFastCheck(e){this._pointerPickingConfiguration.pointerMoveFastCheck=e}get skipPointerMovePicking(){return this._pointerPickingConfiguration.skipPointerMovePicking}set skipPointerMovePicking(e){this._pointerPickingConfiguration.skipPointerMovePicking=e}get skipPointerDownPicking(){return this._pointerPickingConfiguration.skipPointerDownPicking}set skipPointerDownPicking(e){this._pointerPickingConfiguration.skipPointerDownPicking=e}get skipPointerUpPicking(){return this._pointerPickingConfiguration.skipPointerUpPicking}set skipPointerUpPicking(e){this._pointerPickingConfiguration.skipPointerUpPicking=e}get unTranslatedPointer(){return this._inputManager.unTranslatedPointer}static get DragMovementThreshold(){return Rn.DragMovementThreshold}static set DragMovementThreshold(e){Rn.DragMovementThreshold=e}static get LongPressDelay(){return Rn.LongPressDelay}static set LongPressDelay(e){Rn.LongPressDelay=e}static get DoubleClickDelay(){return Rn.DoubleClickDelay}static set DoubleClickDelay(e){Rn.DoubleClickDelay=e}static get ExclusiveDoubleClickMode(){return Rn.ExclusiveDoubleClickMode}static set ExclusiveDoubleClickMode(e){Rn.ExclusiveDoubleClickMode=e}get _eyePosition(){var e,t,i;return(i=(t=this._forcedViewPosition)!=null?t:(e=this.activeCamera)==null?void 0:e.globalPosition)!=null?i:b.ZeroReadOnly}bindEyePosition(e,t="vEyePosition",i=!1){let r=this._eyePosition,s=this.useRightHandedSystem===(this._mirroredCameraPosition!=null),a=this.floatingOriginOffset,o=jie.set(r.x,r.y,r.z,s?-1:1),l=o.subtractFromFloatsToRef(a.x,a.y,a.z,0,qie);return e&&(i?e.setFloat3(t,l.x,l.y,l.z):e.setVector4(t,l)),o}finalizeSceneUbo(){let e=this.getSceneUniformBuffer(),t=this.bindEyePosition(null),i=this.floatingOriginOffset;return e.updateFloat4("vEyePosition",t.x-i.x,t.y-i.y,t.z-i.z,t.w),e.update(),e}set useRightHandedSystem(e){this._useRightHandedSystem!==e&&(this._useRightHandedSystem=e,this.markAllMaterialsAsDirty(16))}get useRightHandedSystem(){return this._useRightHandedSystem}setStepId(e){this._currentStepId=e}getStepId(){return this._currentStepId}getInternalStep(){return this._currentInternalStep}set fogEnabled(e){this._fogEnabled!==e&&(this._fogEnabled=e,this.markAllMaterialsAsDirty(16))}get fogEnabled(){return this._fogEnabled}set fogMode(e){this._fogMode!==e&&(this._fogMode=e,this.markAllMaterialsAsDirty(16))}get fogMode(){return this._fogMode}get prePass(){return!!this.prePassRenderer&&this.prePassRenderer.defaultRT.enabled}set shadowsEnabled(e){this._shadowsEnabled!==e&&(this._shadowsEnabled=e,this.markAllMaterialsAsDirty(2))}get shadowsEnabled(){return this._shadowsEnabled}set lightsEnabled(e){this._lightsEnabled!==e&&(this._lightsEnabled=e,this.markAllMaterialsAsDirty(2))}get lightsEnabled(){return this._lightsEnabled}get activeCameras(){return this._activeCameras}set activeCameras(e){this._unObserveActiveCameras&&(this._unObserveActiveCameras(),this._unObserveActiveCameras=null),e&&(this._unObserveActiveCameras=lT(e,()=>{this.onActiveCamerasChanged.notifyObservers(this)})),this._activeCameras=e}get activeCamera(){return this._activeCamera}set activeCamera(e){e!==this._activeCamera&&(this._activeCamera=e,this.onActiveCameraChanged.notifyObservers(this))}get _hasDefaultMaterial(){return n.DefaultMaterialFactory!==n._OriginalDefaultMaterialFactory}get defaultMaterial(){return this._defaultMaterial||(this._defaultMaterial=n.DefaultMaterialFactory(this)),this._defaultMaterial}set defaultMaterial(e){this._defaultMaterial=e}set texturesEnabled(e){this._texturesEnabled!==e&&(this._texturesEnabled=e,this.markAllMaterialsAsDirty(1))}get texturesEnabled(){return this._texturesEnabled}get frameGraph(){return this._frameGraph}set frameGraph(e){if(this._frameGraph){this._frameGraph=e,e||(this.customRenderFunction=this._currentCustomRenderFunction);return}this._frameGraph=e,e&&(this._currentCustomRenderFunction=this.customRenderFunction,this.customRenderFunction=this._renderWithFrameGraph,this.activeCamera=null)}set skeletonsEnabled(e){this._skeletonsEnabled!==e&&(this._skeletonsEnabled=e,this.markAllMaterialsAsDirty(8))}get skeletonsEnabled(){return this._skeletonsEnabled}get collisionCoordinator(){return this._collisionCoordinator||(this._collisionCoordinator=n.CollisionCoordinatorFactory(),this._collisionCoordinator.init(this)),this._collisionCoordinator}get renderingManager(){return this._renderingManager}get frustumPlanes(){return this._frustumPlanes}_registerTransientComponents(){if(this._transientComponents.length>0){for(let e of this._transientComponents)e.register();this._transientComponents.length=0}}_addComponent(e){this._components.push(e),this._transientComponents.push(e);let t=e;t.addFromContainer&&t.serialize&&this._serializableComponents.push(t)}_getComponent(e){for(let t of this._components)if(t.name===e)return t;return null}get uniqueId(){return this._uniqueId}constructor(e,t){this._inputManager=new Rn(this),this.cameraToUseForPointers=null,this._isScene=!0,this._blockEntityCollection=!1,this.autoClear=!0,this.autoClearDepthAndStencil=!0,this._clearColor=new lt(.2,.2,.3,1),this.onClearColorChangedObservable=new te,this.ambientColor=new Te(0,0,0),this.environmentIntensity=1,this.iblIntensity=1,this._performancePriority=0,this.onScenePerformancePriorityChangedObservable=new te,this._forceWireframe=!1,this._skipFrustumClipping=!1,this._forcePointsCloud=!1,this.rootNodes=[],this.cameras=[],this.lights=[],this.meshes=[],this.skeletons=[],this.particleSystems=[],this.animations=[],this.animationGroups=[],this.multiMaterials=[],this.materials=[],this.morphTargetManagers=[],this.geometries=[],this.transformNodes=[],this.actionManagers=[],this.objectRenderers=[],this.textures=[],this._environmentTexture=null,this.postProcesses=[],this.effectLayers=[],this.sounds=null,this.layers=[],this.lensFlareSystems=[],this.proceduralTextures=[],this.animationsEnabled=!0,this._animationPropertiesOverride=null,this.useConstantAnimationDeltaTime=!1,this.constantlyUpdateMeshUnderPointer=!1,this.hoverCursor="pointer",this.defaultCursor="",this.doNotHandleCursors=!1,this.preventDefaultOnPointerDown=!0,this.preventDefaultOnPointerUp=!0,this.metadata=null,this.reservedDataStore=null,this.disableOfflineSupportExceptionRules=[],this.onDisposeObservable=new te,this._onDisposeObserver=null,this.onBeforeRenderObservable=new te,this._onBeforeRenderObserver=null,this.onAfterRenderObservable=new te,this.onAfterRenderCameraObservable=new te,this._onAfterRenderObserver=null,this.onBeforeAnimationsObservable=new te,this.onAfterAnimationsObservable=new te,this.onBeforeDrawPhaseObservable=new te,this.onAfterDrawPhaseObservable=new te,this.onReadyObservable=new te,this.onBeforeCameraRenderObservable=new te,this._onBeforeCameraRenderObserver=null,this.onAfterCameraRenderObservable=new te,this._onAfterCameraRenderObserver=null,this.onBeforeActiveMeshesEvaluationObservable=new te,this.onAfterActiveMeshesEvaluationObservable=new te,this.onBeforeParticlesRenderingObservable=new te,this.onAfterParticlesRenderingObservable=new te,this.onDataLoadedObservable=new te,this.onNewCameraAddedObservable=new te,this.onCameraRemovedObservable=new te,this.onNewLightAddedObservable=new te,this.onLightRemovedObservable=new te,this.onNewGeometryAddedObservable=new te,this.onGeometryRemovedObservable=new te,this.onNewTransformNodeAddedObservable=new te,this.onTransformNodeRemovedObservable=new te,this.onNewMeshAddedObservable=new te,this.onMeshRemovedObservable=new te,this.onNewSkeletonAddedObservable=new te,this.onSkeletonRemovedObservable=new te,this.onNewParticleSystemAddedObservable=new te,this.onParticleSystemRemovedObservable=new te,this.onNewAnimationGroupAddedObservable=new te,this.onAnimationGroupRemovedObservable=new te,this.onNewMaterialAddedObservable=new te,this.onNewMultiMaterialAddedObservable=new te,this.onMaterialRemovedObservable=new te,this.onMultiMaterialRemovedObservable=new te,this.onNewTextureAddedObservable=new te,this.onTextureRemovedObservable=new te,this.onNewFrameGraphAddedObservable=new te,this.onFrameGraphRemovedObservable=new te,this.onNewObjectRendererAddedObservable=new te,this.onObjectRendererRemovedObservable=new te,this.onNewPostProcessAddedObservable=new te,this.onPostProcessRemovedObservable=new te,this.onNewEffectLayerAddedObservable=new te,this.onEffectLayerRemovedObservable=new te,this.onBeforeRenderTargetsRenderObservable=new te,this.onAfterRenderTargetsRenderObservable=new te,this.onBeforeStepObservable=new te,this.onAfterStepObservable=new te,this.onActiveCameraChanged=new te,this.onActiveCamerasChanged=new te,this.onBeforeRenderingGroupObservable=new te,this.onAfterRenderingGroupObservable=new te,this.onMeshImportedObservable=new te,this.onAnimationFileImportedObservable=new te,this.onEnvironmentTextureChangedObservable=new te,this.onMeshUnderPointerUpdatedObservable=new te,this._registeredForLateAnimationBindings=new eo(256),this._pointerPickingConfiguration=new zT,this.onPrePointerObservable=new te,this.onPointerObservable=new te,this.onPreKeyboardObservable=new te,this.onKeyboardObservable=new te,this._useRightHandedSystem=!1,this._timeAccumulator=0,this._currentStepId=0,this._currentInternalStep=0,this._fogEnabled=!0,this._fogMode=n.FOGMODE_NONE,this.fogColor=new Te(.2,.2,.3),this.fogDensity=.1,this.fogStart=0,this.fogEnd=1e3,this.needsPreviousWorldMatrices=!1,this._shadowsEnabled=!0,this._lightsEnabled=!0,this._unObserveActiveCameras=null,this._texturesEnabled=!0,this._frameGraph=null,this.frameGraphs=[],this.physicsEnabled=!0,this.particlesEnabled=!0,this.spritesEnabled=!0,this._skeletonsEnabled=!0,this.lensFlaresEnabled=!0,this.collisionsEnabled=!0,this.gravity=new b(0,-9.807,0),this.postProcessesEnabled=!0,this.renderTargetsEnabled=!0,this.dumpNextRenderTargets=!1,this.customRenderTargets=[],this.importedMeshesFiles=[],this.probesEnabled=!0,this._meshesForIntersections=new eo(256),this.proceduralTexturesEnabled=!0,this._totalVertices=new Qo,this._activeIndices=new Qo,this._activeParticles=new Qo,this._activeBones=new Qo,this._animationTime=0,this.animationTimeScale=1,this._renderId=0,this._frameId=0,this._executeWhenReadyTimeoutId=null,this._intermediateRendering=!1,this._defaultFrameBufferCleared=!1,this._viewUpdateFlag=-1,this._projectionUpdateFlag=-1,this._toBeDisposed=new Array(256),this._activeRequests=new Array,this._pendingData=[],this._isDisposed=!1,this._isReadyChecks=[],this.dispatchAllSubMeshesOfActiveMeshes=!1,this._activeMeshes=new wi(256),this._processedMaterials=new wi(256),this._renderTargets=new eo(256),this._materialsRenderTargets=new eo(256),this._activeParticleSystems=new wi(256),this._activeSkeletons=new eo(32),this._softwareSkinnedMeshes=new eo(32),this._activeAnimatables=new Array,this._transformMatrix=K.Zero(),this.requireLightSorting=!1,this._components=[],this._serializableComponents=[],this._transientComponents=[],this._beforeCameraUpdateStage=er.Create(),this._beforeClearStage=er.Create(),this._beforeRenderTargetClearStage=er.Create(),this._gatherRenderTargetsStage=er.Create(),this._gatherActiveCameraRenderTargetsStage=er.Create(),this._isReadyForMeshStage=er.Create(),this._beforeEvaluateActiveMeshStage=er.Create(),this._evaluateSubMeshStage=er.Create(),this._preActiveMeshStage=er.Create(),this._cameraDrawRenderTargetStage=er.Create(),this._beforeCameraDrawStage=er.Create(),this._beforeRenderTargetDrawStage=er.Create(),this._beforeRenderingGroupDrawStage=er.Create(),this._beforeRenderingMeshStage=er.Create(),this._afterRenderingMeshStage=er.Create(),this._afterRenderingGroupDrawStage=er.Create(),this._afterCameraDrawStage=er.Create(),this._afterCameraPostProcessStage=er.Create(),this._afterRenderTargetDrawStage=er.Create(),this._afterRenderTargetPostProcessStage=er.Create(),this._afterRenderStage=er.Create(),this._pointerMoveStage=er.Create(),this._pointerDownStage=er.Create(),this._pointerUpStage=er.Create(),this._geometriesByUniqueId=null,this._uniqueId=0,this._defaultMeshCandidates={data:[],length:0},this._defaultSubMeshCandidates={data:[],length:0},this.onReadyTimeoutObservable=new te,this.onReadyTimeoutDuration=120*1e3,this._timeoutChecksStartTime=0,this._floatingOriginScene=void 0,this._preventFreeActiveMeshesAndRenderingGroups=!1,this._activeMeshesFrozen=!1,this._activeMeshesFrozenButKeepClipping=!1,this._skipEvaluateActiveMeshesCompletely=!1,this._freezeActiveMeshesCancel=null,this._useCurrentFrameBuffer=!1,this._allowPostProcessClearColor=!0,this.getDeterministicFrameTime=()=>this._engine.getTimeStep(),this._getFloatingOriginScene=()=>this._floatingOriginScene,this._registeredActions=0,this._blockMaterialDirtyMechanism=!1,this._perfCollector=null,this.activeCameras=[],this._uniqueId=this.getUniqueId();let i={useGeometryUniqueIdsMap:!0,useMaterialMeshMap:!0,useClonedMeshMap:!0,virtual:!1,defaultCameraLayerMask:268435455,defaultRenderableLayerMask:268435455,...t};this.defaultCameraLayerMask=i.defaultCameraLayerMask,this.defaultRenderableLayerMask=i.defaultRenderableLayerMask,e=this._engine=e||Le.LastCreatedEngine,i.virtual?e._virtualScenes.push(this):(Le._LastCreatedScene=this,e.scenes.push(this)),(e.getCreationOptions().useLargeWorldRendering||t!=null&&t.useFloatingOrigin)&&(Q2(),this._floatingOriginScene=this,Aa.getScene=this._getFloatingOriginScene),this._uid=null,this._renderingManager=new ga(this),Gl&&(this.postProcessManager=new Gl(this)),ar()&&this.attachControl(),this._createUbo(),Wt&&(this._imageProcessingConfiguration=new Wt),this.setDefaultCandidateProviders(),i.useGeometryUniqueIdsMap&&(this._geometriesByUniqueId={}),this.useMaterialMeshMap=i.useMaterialMeshMap,this.useClonedMeshMap=i.useClonedMeshMap,(!t||!t.virtual)&&e.onNewSceneAddedObservable.notifyObservers(this)}getClassName(){return"Scene"}_getDefaultMeshCandidates(){return this._defaultMeshCandidates.data=this.meshes,this._defaultMeshCandidates.length=this.meshes.length,this._defaultMeshCandidates}_getDefaultSubMeshCandidates(e){return this._defaultSubMeshCandidates.data=e.subMeshes,this._defaultSubMeshCandidates.length=e.subMeshes.length,this._defaultSubMeshCandidates}setDefaultCandidateProviders(){this.getActiveMeshCandidates=()=>this._getDefaultMeshCandidates(),this.getActiveSubMeshCandidates=e=>this._getDefaultSubMeshCandidates(e),this.getIntersectingSubMeshCandidates=(e,t)=>this._getDefaultSubMeshCandidates(e),this.getCollidingSubMeshCandidates=(e,t)=>this._getDefaultSubMeshCandidates(e)}get meshUnderPointer(){return this._inputManager.meshUnderPointer}get pointerX(){return this._inputManager.pointerX}set pointerX(e){this._inputManager.pointerX=e}get pointerY(){return this._inputManager.pointerY}set pointerY(e){this._inputManager.pointerY=e}getCachedMaterial(){return this._cachedMaterial}getCachedEffect(){return this._cachedEffect}getCachedVisibility(){return this._cachedVisibility}isCachedMaterialInvalid(e,t,i=1){return this._cachedEffect!==t||this._cachedMaterial!==e||this._cachedVisibility!==i}getEngine(){return this._engine}getTotalVertices(){return this._totalVertices.current}get totalVerticesPerfCounter(){return this._totalVertices}getActiveIndices(){return this._activeIndices.current}get totalActiveIndicesPerfCounter(){return this._activeIndices}getActiveParticles(){return this._activeParticles.current}get activeParticlesPerfCounter(){return this._activeParticles}getActiveBones(){return this._activeBones.current}get activeBonesPerfCounter(){return this._activeBones}getActiveMeshes(){return this._activeMeshes}getAnimationRatio(){return this._animationRatio!==void 0?this._animationRatio:1}getRenderId(){return this._renderId}getFrameId(){return this._frameId}incrementRenderId(){this._renderId++}_createUbo(){this.setSceneUniformBuffer(this.createSceneUniformBuffer())}simulatePointerMove(e,t){return this._inputManager.simulatePointerMove(e,t),this}simulatePointerDown(e,t){return this._inputManager.simulatePointerDown(e,t),this}simulatePointerUp(e,t,i){return this._inputManager.simulatePointerUp(e,t,i),this}isPointerCaptured(e=0){return this._inputManager.isPointerCaptured(e)}attachControl(e=!0,t=!0,i=!0){this._inputManager.attachControl(e,t,i)}detachControl(){this._inputManager.detachControl()}isReady(e=!0){var a,o,l;if(this._isDisposed)return!1;let t,i=this.getEngine(),r=i.currentRenderPassId;i.currentRenderPassId=(o=(a=this.activeCamera)==null?void 0:a.renderPassId)!=null?o:r;let s=!0;for(this._pendingData.length>0&&(s=!1),(l=this.prePassRenderer)==null||l.update(),this.useOrderIndependentTransparency&&this.depthPeelingRenderer&&s&&(s=this.depthPeelingRenderer.isReady()),e&&(this._processedMaterials.reset(),this._materialsRenderTargets.reset()),t=0;t0;for(let d of this._isReadyForMeshStage)d.action(c,f)||(s=!1);if(!e)continue;let h=c.material||this.defaultMaterial;if(h)if(h._storeEffectOnSubMeshes)for(let d of c.subMeshes){let u=d.getMaterial();u&&u.hasRenderTargetTextures&&u.getRenderTargetTextures!=null&&this._processedMaterials.indexOf(u)===-1&&(this._processedMaterials.push(u),this._materialsRenderTargets.concatWithNoDuplicate(u.getRenderTargetTextures()))}else h.hasRenderTargetTextures&&h.getRenderTargetTextures!=null&&this._processedMaterials.indexOf(h)===-1&&(this._processedMaterials.push(h),this._materialsRenderTargets.concatWithNoDuplicate(h.getRenderTargetTextures()))}if(e){for(t=0;t0)for(let c of this.activeCameras)c.isReady(!0)||(s=!1);else this.activeCamera&&(this.activeCamera.isReady(!0)||(s=!1));for(let c of this.particleSystems)c.isReady()||(s=!1);if(this.proceduralTexturesEnabled)for(let c of this.proceduralTextures)c.isReady()||(s=!1);if(this.layers)for(let c of this.layers)c.isReady()||(s=!1);if(this.effectLayers)for(let c of this.effectLayers)c.isLayerReady()||(s=!1);for(let c of this._isReadyChecks)c.isReady()||(s=!1);return i.areAllEffectsReady()||(s=!1),i.currentRenderPassId=r,s}resetCachedMaterial(){this._cachedMaterial=null,this._cachedEffect=null,this._cachedVisibility=null}registerBeforeRender(e){this.onBeforeRenderObservable.add(e)}unregisterBeforeRender(e){this.onBeforeRenderObservable.removeCallback(e)}registerAfterRender(e){this.onAfterRenderObservable.add(e)}unregisterAfterRender(e){this.onAfterRenderObservable.removeCallback(e)}_executeOnceBeforeRender(e){let t=()=>{e(),setTimeout(()=>{this.unregisterBeforeRender(t)})};this.registerBeforeRender(t)}executeOnceBeforeRender(e,t){t!==void 0?setTimeout(()=>{this._executeOnceBeforeRender(e)},t):this._executeOnceBeforeRender(e)}addPendingData(e){this._pendingData.push(e)}removePendingData(e){let t=this.isLoading,i=this._pendingData.indexOf(e);i!==-1&&this._pendingData.splice(i,1),t&&!this.isLoading&&this.onDataLoadedObservable.notifyObservers(this)}getWaitingItemsCount(){return this._pendingData.length}get isLoading(){return this._pendingData.length>0}addIsReadyCheck(e){this._isReadyChecks.indexOf(e)===-1&&this._isReadyChecks.push(e)}removeIsReadyCheck(e){let t=this._isReadyChecks.indexOf(e);t!==-1&&this._isReadyChecks.splice(t,1)}executeWhenReady(e,t=!1){this.onReadyObservable.addOnce(e),this._executeWhenReadyTimeoutId===null&&this._checkIsReady(t)}async whenReadyAsync(e=!1){return await new Promise(t=>{this.executeWhenReady(()=>{t()},e)})}_clearReadynessChecksData(){this._timeoutChecksStartTime=0,this.onReadyTimeoutObservable.clear(),this.onReadyObservable.clear(),this._executeWhenReadyTimeoutId=null}_checkIsReady(e=!1){if(this._registerTransientComponents(),this._timeoutChecksStartTime===0)this._timeoutChecksStartTime=dr.Now;else if(this.onReadyTimeoutDuration>0&&dr.Now-this._timeoutChecksStartTime>this.onReadyTimeoutDuration){this.onReadyTimeoutObservable.notifyObservers(this),this._clearReadynessChecksData();return}if(this.isReady(e)){this.onReadyObservable.notifyObservers(this),this._clearReadynessChecksData();return}if(this._isDisposed){this._clearReadynessChecksData();return}this._executeWhenReadyTimeoutId=setTimeout(()=>{this.incrementRenderId(),this._checkIsReady(e)},100)}get animatables(){return this._activeAnimatables}resetLastAnimationTimeFrame(){this._animationTimeLast=dr.Now}getViewMatrix(){return this._viewMatrix}getProjectionMatrix(){return this._projectionMatrix}getInverseProjectionMatrix(){return this._inverseProjectionMatrix}getTransformMatrix(){return this._transformMatrix}setTransformMatrix(e,t,i,r){this._multiviewSceneUboIsActive=!!(i&&r&&this._multiviewSceneUbo),!(this._viewUpdateFlag===e.updateFlag&&this._projectionUpdateFlag===t.updateFlag)&&(this._viewUpdateFlag=e.updateFlag,this._projectionUpdateFlag=t.updateFlag,this._viewMatrix=e,this._projectionMatrix=t,this._inverseProjectionMatrix||(this._inverseProjectionMatrix=new K),this._projectionMatrix.invertToRef(this._inverseProjectionMatrix),this._viewMatrix.multiplyToRef(this._projectionMatrix,this._transformMatrix),this._frustumPlanes?Jc.GetPlanesToRef(this._transformMatrix,this._frustumPlanes):this._frustumPlanes=Jc.GetPlanes(this._transformMatrix),this._multiviewSceneUboIsActive&&this._multiviewSceneUbo.useUbo?this._updateMultiviewUbo(i,r):this._sceneUbo.useUbo&&(this._sceneUbo.updateMatrix("viewProjection",this._transformMatrix),this._sceneUbo.updateMatrix("view",this._viewMatrix),this._sceneUbo.updateMatrix("projection",this._projectionMatrix),this._sceneUbo.updateMatrix("inverseProjection",this._inverseProjectionMatrix)))}getSceneUniformBuffer(){return this._multiviewSceneUboIsActive&&this._multiviewSceneUbo?this._multiviewSceneUbo:this._sceneUbo}createSceneUniformBuffer(e,t){let i=typeof t=="boolean"?t:t==null?void 0:t.trackUBOsInFrame,r=new or(this._engine,void 0,!1,e!=null?e:"scene",void 0,i);return r.addUniform("viewProjection",16),r.addUniform("view",16),r.addUniform("projection",16),r.addUniform("vEyePosition",4),r.addUniform("inverseProjection",16),r}setSceneUniformBuffer(e){this._sceneUbo=e,this._viewUpdateFlag=-1,this._projectionUpdateFlag=-1}get floatingOriginMode(){return this._floatingOriginScene!==void 0}get floatingOriginOffset(){return this.floatingOriginMode?this._eyePosition:b.ZeroReadOnly}getUniqueId(){return Yl.UniqueId}addMesh(e,t=!1){if(!this._blockEntityCollection&&(this.meshes.push(e),e._resyncLightSources(),e.parent||e._addToSceneRootNodes(),de.SetImmediate(()=>{this.onNewMeshAddedObservable.notifyObservers(e)}),t)){let i=e.getChildMeshes();for(let r of i)this.addMesh(r)}}removeMesh(e,t=!1){let i=this.meshes.indexOf(e);if(i!==-1&&(this.meshes.splice(i,1),e.parent||e._removeFromSceneRootNodes()),this._inputManager._invalidateMesh(e),this.onMeshRemovedObservable.notifyObservers(e),t){let r=e.getChildMeshes();for(let s of r)this.removeMesh(s)}return i}addTransformNode(e){this._blockEntityCollection||e.getScene()===this&&e._indexInSceneTransformNodesArray!==-1||(e._indexInSceneTransformNodesArray=this.transformNodes.length,this.transformNodes.push(e),e.parent||e._addToSceneRootNodes(),this.onNewTransformNodeAddedObservable.notifyObservers(e))}removeTransformNode(e){let t=e._indexInSceneTransformNodesArray;if(t!==-1){if(t!==this.transformNodes.length-1){let i=this.transformNodes[this.transformNodes.length-1];this.transformNodes[t]=i,i._indexInSceneTransformNodesArray=t}e._indexInSceneTransformNodesArray=-1,this.transformNodes.pop(),e.parent||e._removeFromSceneRootNodes()}return this.onTransformNodeRemovedObservable.notifyObservers(e),t}removeSkeleton(e){let t=this.skeletons.indexOf(e);return t!==-1&&(this.skeletons.splice(t,1),this.onSkeletonRemovedObservable.notifyObservers(e),this._executeActiveContainerCleanup(this._activeSkeletons)),t}removeMorphTargetManager(e){let t=this.morphTargetManagers.indexOf(e);return t!==-1&&this.morphTargetManagers.splice(t,1),t}removeLight(e){let t=this.lights.indexOf(e);if(t!==-1){for(let i of this.meshes)i._removeLightSource(e,!1);this.lights.splice(t,1),this.sortLightsByPriority(),e.parent||e._removeFromSceneRootNodes(),this.onLightRemovedObservable.notifyObservers(e)}return t}removeCamera(e){let t=this.cameras.indexOf(e);if(t!==-1&&(this.cameras.splice(t,1),e.parent||e._removeFromSceneRootNodes()),this.activeCameras){let i=this.activeCameras.indexOf(e);i!==-1&&this.activeCameras.splice(i,1)}return this.activeCamera===e&&(this.cameras.length>0?this.activeCamera=this.cameras[0]:this.activeCamera=null),this.onCameraRemovedObservable.notifyObservers(e),t}removeParticleSystem(e){let t=this.particleSystems.indexOf(e);return t!==-1&&(this.particleSystems.splice(t,1),this._executeActiveContainerCleanup(this._activeParticleSystems)),this.onParticleSystemRemovedObservable.notifyObservers(e),t}removeAnimation(e){let t=this.animations.indexOf(e);return t!==-1&&this.animations.splice(t,1),t}stopAnimation(e,t,i){}removeAnimationGroup(e){let t=this.animationGroups.indexOf(e);return t!==-1&&this.animationGroups.splice(t,1),this.onAnimationGroupRemovedObservable.notifyObservers(e),t}removeMultiMaterial(e){let t=this.multiMaterials.indexOf(e);return t!==-1&&this.multiMaterials.splice(t,1),this.onMultiMaterialRemovedObservable.notifyObservers(e),t}removeMaterial(e){let t=e._indexInSceneMaterialArray;if(t!==-1&&t{this.onNewLightAddedObservable.notifyObservers(e)})}}sortLightsByPriority(){this.requireLightSorting&&this.lights.sort(Kt.CompareLightsPriority)}addCamera(e){this._blockEntityCollection||(this.cameras.push(e),de.SetImmediate(()=>{this.onNewCameraAddedObservable.notifyObservers(e)}),e.parent||e._addToSceneRootNodes())}addSkeleton(e){this._blockEntityCollection||(this.skeletons.push(e),de.SetImmediate(()=>{this.onNewSkeletonAddedObservable.notifyObservers(e)}))}addParticleSystem(e){this._blockEntityCollection||(this.particleSystems.push(e),de.SetImmediate(()=>{this.onNewParticleSystemAddedObservable.notifyObservers(e)}))}addAnimation(e){this._blockEntityCollection||this.animations.push(e)}addAnimationGroup(e){this._blockEntityCollection||(this.animationGroups.push(e),de.SetImmediate(()=>{this.onNewAnimationGroupAddedObservable.notifyObservers(e)}))}addMultiMaterial(e){this._blockEntityCollection||(this.multiMaterials.push(e),de.SetImmediate(()=>{this.onNewMultiMaterialAddedObservable.notifyObservers(e)}))}addMaterial(e){this._blockEntityCollection||e.getScene()===this&&e._indexInSceneMaterialArray!==-1||(e._indexInSceneMaterialArray=this.materials.length,this.materials.push(e),de.SetImmediate(()=>{this.onNewMaterialAddedObservable.notifyObservers(e)}))}addMorphTargetManager(e){this._blockEntityCollection||this.morphTargetManagers.push(e)}addGeometry(e){this._blockEntityCollection||(this._geometriesByUniqueId&&(this._geometriesByUniqueId[e.uniqueId]=this.geometries.length),this.geometries.push(e))}addActionManager(e){this.actionManagers.push(e)}addTexture(e){this._blockEntityCollection||(this.textures.push(e),this.onNewTextureAddedObservable.notifyObservers(e))}addFrameGraph(e){this.frameGraphs.push(e),de.SetImmediate(()=>{this.onNewFrameGraphAddedObservable.notifyObservers(e)})}addObjectRenderer(e){this.objectRenderers.push(e),de.SetImmediate(()=>{this.onNewObjectRendererAddedObservable.notifyObservers(e)})}addPostProcess(e){this._blockEntityCollection||(this.postProcesses.push(e),de.SetImmediate(()=>{this.onNewPostProcessAddedObservable.notifyObservers(e)}))}addEffectLayer(e){this._blockEntityCollection||(this.effectLayers.push(e),de.SetImmediate(()=>{this.onNewEffectLayerAddedObservable.notifyObservers(e)}))}switchActiveCamera(e,t=!0){this._engine.getInputElement()&&(this.activeCamera&&this.activeCamera.detachControl(),this.activeCamera=e,t&&e.attachControl())}setActiveCameraById(e){let t=this.getCameraById(e);return t?(this.activeCamera=t,t):null}setActiveCameraByName(e){let t=this.getCameraByName(e);return t?(this.activeCamera=t,t):null}getAnimationGroupByName(e){for(let t=0;ti.uniqueId===e)}getMaterialById(e,t=!1){return this._getMaterial(t,i=>i.id===e)}getMaterialByName(e,t=!1){return this._getMaterial(t,i=>i.name===e)}getLastMaterialById(e,t=!1){for(let i=this.materials.length-1;i>=0;i--)if(this.materials[i].id===e)return this.materials[i];if(t){for(let i=this.multiMaterials.length-1;i>=0;i--)if(this.multiMaterials[i].id===e)return this.multiMaterials[i]}return null}getTextureByUniqueId(e){for(let t=0;t{this.onNewGeometryAddedObservable.notifyObservers(e)}),!0)}removeGeometry(e){let t;if(this._geometriesByUniqueId){if(t=this._geometriesByUniqueId[e.uniqueId],t===void 0)return!1}else if(t=this.geometries.indexOf(e),t<0)return!1;if(t!==this.geometries.length-1){let i=this.geometries[this.geometries.length-1];i&&(this.geometries[t]=i,this._geometriesByUniqueId&&(this._geometriesByUniqueId[i.uniqueId]=t))}return this._geometriesByUniqueId&&(this._geometriesByUniqueId[e.uniqueId]=void 0),this.geometries.pop(),this.onGeometryRemovedObservable.notifyObservers(e),!0}getGeometries(){return this.geometries}getMeshById(e){for(let t=0;t=0;t--)if(this.meshes[t].id===e)return this.meshes[t];return null}getLastTransformNodeById(e){for(let t=this.transformNodes.length-1;t>=0;t--)if(this.transformNodes[t].id===e)return this.transformNodes[t];return null}getLastEntryById(e){let t;for(t=this.meshes.length-1;t>=0;t--)if(this.meshes[t].id===e)return this.meshes[t];for(t=this.transformNodes.length-1;t>=0;t--)if(this.transformNodes[t].id===e)return this.transformNodes[t];for(t=this.cameras.length-1;t>=0;t--)if(this.cameras[t].id===e)return this.cameras[t];for(t=this.lights.length-1;t>=0;t--)if(this.lights[t].id===e)return this.lights[t];for(t=this.skeletons.length-1;t>=0;t--){let i=this.skeletons[t];for(let r=i.bones.length-1;r>=0;r--)if(i.bones[r].id===e)return i.bones[r]}return null}getNodeById(e){let t=this.getMeshById(e);if(t)return t;let i=this.getTransformNodeById(e);if(i)return i;let r=this.getLightById(e);if(r)return r;let s=this.getCameraById(e);if(s)return s;let a=this.getBoneById(e);return a||null}getNodeByName(e){let t=this.getMeshByName(e);if(t)return t;let i=this.getTransformNodeByName(e);if(i)return i;let r=this.getLightByName(e);if(r)return r;let s=this.getCameraByName(e);if(s)return s;let a=this.getBoneByName(e);return a||null}getMeshByName(e){for(let t=0;t=0;t--)if(this.skeletons[t].id===e)return this.skeletons[t];return null}getSkeletonByUniqueId(e){for(let t=0;t{let o=!0,l=!0;for(let c of a)o&&(o=c.objectRenderer._isFrozen),l&&(l=c.objectRenderer._freezeActiveMeshesCancel!==null);if(o)return!0;if(!l)throw new Error("Freezing active meshes was cancelled");return!1},()=>{this._freezeActiveMeshesCancel=null,this._activeMeshesFrozen=!0,this._activeMeshesFrozenButKeepClipping=s,this._skipEvaluateActiveMeshesCompletely=e,t==null||t()},(o,l)=>{if(this._freezeActiveMeshesCancel=null,this.unfreezeActiveMeshes(),l){let c="Scene: Timeout while waiting for meshes to be frozen.";i?i(c):(J.Error(c),o&&J.Error(o))}else{let c="Scene: An unexpected error occurred while trying to freeze active meshes.";i?i(c):(J.Error(c),o&&(J.Error(o),o.stack&&J.Error(o.stack)))}}),this}return this.executeWhenReady(()=>{if(!this.activeCamera){i&&i("No active camera found");return}if(this._frustumPlanes||this.updateTransformMatrix(),this._evaluateActiveMeshes(),this._activeMeshesFrozen=!0,this._activeMeshesFrozenButKeepClipping=s,this._skipEvaluateActiveMeshesCompletely=e,r)for(let a=0;ae.dispose())}_evaluateActiveMeshes(){var i;if(this._engine.snapshotRendering&&this._engine.snapshotRenderingMode===1){this._activeMeshes.length>0&&((i=this.activeCamera)==null||i._activeMeshes.reset(),this._activeMeshes.reset(),this._renderingManager.reset(),this._processedMaterials.reset(),this._activeParticleSystems.reset(),this._activeSkeletons.reset(),this._softwareSkinnedMeshes.reset());return}if(this._activeMeshesFrozen&&this._activeMeshes.length){if(!this._skipEvaluateActiveMeshesCompletely){let r=this._activeMeshes.length;for(let s=0;s0&&(s.layerMask&this.activeCamera.layerMask)!==0&&(this._skipFrustumClipping||s.alwaysSelectAsActiveMesh||s.isInFrustum(this._frustumPlanes)))){this._activeMeshes.push(s),this.activeCamera._activeMeshes.push(s),o!==s&&o._activate(this._renderId,!1);for(let l of this._preActiveMeshStage)l.action(s);s._activate(this._renderId,!1)&&(s.isAnInstance?s._internalAbstractMeshDataInfo._actAsRegularMesh&&(o=s):o._internalAbstractMeshDataInfo._onlyForInstances=!1,o._internalAbstractMeshDataInfo._isActive=!0,this._activeMesh(s,o)),s._postActivate()}}if(this.onAfterActiveMeshesEvaluationObservable.notifyObservers(this),this.particlesEnabled){this.onBeforeParticlesRenderingObservable.notifyObservers(this);for(let r=0;r0){let r=this.getActiveSubMeshCandidates(t),s=r.length;i=i||s===1;for(let a=0;a0&&this._renderTargets.concatWithNoDuplicate(e.customRenderTargets),t&&t.customRenderTargets&&t.customRenderTargets.length>0&&this._renderTargets.concatWithNoDuplicate(t.customRenderTargets),this.environmentTexture&&this.environmentTexture.isRenderTarget&&this._renderTargets.pushNoDuplicate(this.environmentTexture);for(let d of this._gatherActiveCameraRenderTargetsStage)d.action(this._renderTargets);let s=!1;if(this.renderTargetsEnabled){this._intermediateRendering=!0;let d;if(this._renderTargets.length>0){de.StartPerformanceCounter("Render targets",this._renderTargets.length>0);let u=(f=this.getBoundingBoxRenderer)==null?void 0:f.call(this);for(let m=0;m0?u.renderList.data.slice():[],d.length=u.renderList.length),_.render(p,this.dumpNextRenderTargets),s=!0}}u&&d&&(u.renderList.data=d,u.renderList.length=d.length),de.EndPerformanceCounter("Render targets",this._renderTargets.length>0),this._renderId++}if(this._cameraDrawRenderTargetStage.length>0){let u=(h=this.getBoundingBoxRenderer)==null?void 0:h.call(this);u&&!d&&(d=u.renderList.length>0?u.renderList.data.slice():[],d.length=u.renderList.length);for(let m of this._cameraDrawRenderTargetStage)s=m.action(this.activeCamera)||s;u&&d&&(u.renderList.data=d,u.renderList.length=d.length)}this._intermediateRendering=!1}s&&!this.prePass&&(this._bindFrameBuffer(this._activeCamera,!1),this.updateTransformMatrix()),this.onAfterRenderTargetsRenderObservable.notifyObservers(this),this.postProcessManager&&!e._multiviewTexture&&!this.prePass&&this.postProcessManager._prepareFrame();for(let d of this._beforeCameraDrawStage)d.action(this.activeCamera);this.onBeforeDrawPhaseObservable.notifyObservers(this);let a=r.snapshotRendering&&r.snapshotRenderingMode===1;a&&this.finalizeSceneUbo(),this._renderingManager.render(null,null,!0,!a),this.onAfterDrawPhaseObservable.notifyObservers(this);for(let d of this._afterCameraDrawStage)d.action(this.activeCamera);if(this.postProcessManager&&!e._multiviewTexture){let d=e.outputRenderTarget?e.outputRenderTarget.renderTarget:void 0;this.postProcessManager._finalizeFrame(e.isIntermediate,d)}for(let d of this._afterCameraPostProcessStage)d.action(this.activeCamera);this._renderTargets.reset(),this.onAfterCameraRenderObservable.notifyObservers(this.activeCamera)}_processSubCameras(e,t=!0){if(e.cameraRigMode===0||e._renderingMultiview){e._renderingMultiview&&!this._multiviewSceneUbo&&this._createMultiviewUbo(),this._renderForCamera(e,void 0,t),this.onAfterRenderCameraObservable.notifyObservers(e);return}if(e._useMultiviewToSingleView)this._renderMultiviewToSingleView(e);else{this.onBeforeCameraRenderObservable.notifyObservers(e);for(let i=0;i-1&&(r.trigger===13&&r._executeCurrent(Jr.CreateNew(t,void 0,a)),(!t.actionManager.hasSpecificTrigger(13,c=>{let f=c.mesh?c.mesh:c;return a===f})||r.trigger===13)&&t._intersectionsInProgress.splice(l,1))}}}}_advancePhysicsEngineStep(e){}_animate(e){}animate(){if(this._engine.isDeterministicLockStep()){let e=Math.max(n.MinDeltaTime,Math.min(this._engine.getDeltaTime(),n.MaxDeltaTime))+this._timeAccumulator,t=this._engine.getTimeStep(),i=1e3/t/1e3,r=0,s=this._engine.getLockstepMaxSteps(),a=Math.floor(e/t);for(a=Math.min(a,s);e>0&&r0);for(let l=0;l0),this._renderId++}this.onAfterRenderTargetsRenderObservable.notifyObservers(this);for(let l of this._beforeClearStage)l.action();if(this._engine.snapshotRendering&&this._engine.snapshotRenderingMode===1)this._activeParticleSystems.reset(),this._activeSkeletons.reset(),this._softwareSkinnedMeshes.reset();else{let l=this.getActiveMeshCandidates(),c=l.length;if(this._activeMeshesFrozen){if(!this._skipEvaluateActiveMeshesCompletely)for(let f=0;f0)for(let a=0;a0);for(let o=0;o0),this._renderId++}this._engine.currentRenderPassId=(s=a==null?void 0:a.renderPassId)!=null?s:0,this.activeCamera=a,this._activeCamera&&this._activeCamera.cameraRigMode!==22&&!this.prePass&&this._bindFrameBuffer(this._activeCamera,!1),this.onAfterRenderTargetsRenderObservable.notifyObservers(this);for(let o of this._beforeClearStage)o.action();this._clearFrameBuffer(this.activeCamera);for(let o of this._gatherRenderTargetsStage)o.action(this._renderTargets);if(this.activeCameras&&this.activeCameras.length>0)for(let o=0;o0);else{if(!this.activeCamera)throw new Error("No camera defined");this._processSubCameras(this.activeCamera,!!this.activeCamera.outputRenderTarget)}}this._checkIntersections();for(let a of this._afterRenderStage)a.action();if(this.afterRender&&this.afterRender(),this.onAfterRenderObservable.notifyObservers(this),this._toBeDisposed.length){for(let a=0;as.dispose(!0)),this._disposeList(this.transformNodes,s=>s.dispose(!0));let i=this.cameras;this._disposeList(i),this._disposeList(this.particleSystems),this._disposeList(this.postProcesses),this._disposeList(this.textures),this._disposeList(this.morphTargetManagers),this._disposeList(this.frameGraphs),this._sceneUbo.dispose(),this._multiviewSceneUbo&&this._multiviewSceneUbo.dispose(),this.postProcessManager.dispose(),this._disposeList(this._components);let r=this._engine.scenes.indexOf(this);if(r>-1&&this._engine.scenes.splice(r,1),this._floatingOriginScene=void 0,this._engine.scenes.length===0&&Z2(),Le._LastCreatedScene===this){Le._LastCreatedScene=null;let s=Le.Instances.length-1;for(;s>=0;){let a=Le.Instances[s];if(a.scenes.length>0){Le._LastCreatedScene=a.scenes[this._engine.scenes.length-1];break}s--}}r=this._engine._virtualScenes.indexOf(this),r>-1&&this._engine._virtualScenes.splice(r,1),this._engine.wipeCaches(!0),this.onDisposeObservable.clear(),this.onBeforeRenderObservable.clear(),this.onAfterRenderObservable.clear(),this.onBeforeRenderTargetsRenderObservable.clear(),this.onAfterRenderTargetsRenderObservable.clear(),this.onAfterStepObservable.clear(),this.onBeforeStepObservable.clear(),this.onBeforeActiveMeshesEvaluationObservable.clear(),this.onAfterActiveMeshesEvaluationObservable.clear(),this.onBeforeParticlesRenderingObservable.clear(),this.onAfterParticlesRenderingObservable.clear(),this.onBeforeDrawPhaseObservable.clear(),this.onAfterDrawPhaseObservable.clear(),this.onBeforeAnimationsObservable.clear(),this.onAfterAnimationsObservable.clear(),this.onDataLoadedObservable.clear(),this.onBeforeRenderingGroupObservable.clear(),this.onAfterRenderingGroupObservable.clear(),this.onMeshImportedObservable.clear(),this.onBeforeCameraRenderObservable.clear(),this.onAfterCameraRenderObservable.clear(),this.onAfterRenderCameraObservable.clear(),this.onReadyObservable.clear(),this.onNewCameraAddedObservable.clear(),this.onCameraRemovedObservable.clear(),this.onNewLightAddedObservable.clear(),this.onLightRemovedObservable.clear(),this.onNewGeometryAddedObservable.clear(),this.onGeometryRemovedObservable.clear(),this.onNewTransformNodeAddedObservable.clear(),this.onTransformNodeRemovedObservable.clear(),this.onNewMeshAddedObservable.clear(),this.onMeshRemovedObservable.clear(),this.onNewSkeletonAddedObservable.clear(),this.onSkeletonRemovedObservable.clear(),this.onNewMaterialAddedObservable.clear(),this.onNewMultiMaterialAddedObservable.clear(),this.onMaterialRemovedObservable.clear(),this.onMultiMaterialRemovedObservable.clear(),this.onNewTextureAddedObservable.clear(),this.onTextureRemovedObservable.clear(),this.onNewFrameGraphAddedObservable.clear(),this.onFrameGraphRemovedObservable.clear(),this.onNewObjectRendererAddedObservable.clear(),this.onObjectRendererRemovedObservable.clear(),this.onPrePointerObservable.clear(),this.onPointerObservable.clear(),this.onPreKeyboardObservable.clear(),this.onKeyboardObservable.clear(),this.onActiveCameraChanged.clear(),this.onScenePerformancePriorityChangedObservable.clear(),this.onClearColorChangedObservable.clear(),this.onEnvironmentTextureChangedObservable.clear(),this.onMeshUnderPointerUpdatedObservable.clear(),this._isDisposed=!0}_disposeList(e,t){let i=e.slice(0);t=t!=null?t:(r=>r.dispose());for(let r of i)t(r);e.length=0}get isDisposed(){return this._isDisposed}clearCachedVertexData(){for(let e=0;e!0);let r=this.meshes.filter(e);for(let s of r){if(s.computeWorldMatrix(!0),!s.subMeshes||s.subMeshes.length===0||s.infiniteDistance)continue;let a=s.getBoundingInfo(),o=a.boundingBox.minimumWorld,l=a.boundingBox.maximumWorld;b.CheckExtends(o,t,i),b.CheckExtends(l,t,i)}return t.x===Number.MAX_VALUE?{min:b.Zero(),max:b.Zero()}:{min:t,max:i}}createPickingRay(e,t,i,r,s=!1){throw Xe("Ray")}createPickingRayToRef(e,t,i,r,s,a=!1,o=!1){throw Xe("Ray")}createPickingRayInCameraSpace(e,t,i){throw Xe("Ray")}createPickingRayInCameraSpaceToRef(e,t,i,r){throw Xe("Ray")}pick(e,t,i,r,s,a){let o=Xe("Ray",!0);return o&&J.Warn(o),new Hn}pickWithBoundingInfo(e,t,i,r,s){let a=Xe("Ray",!0);return a&&J.Warn(a),new Hn}pickWithRay(e,t,i,r){throw Xe("Ray")}multiPick(e,t,i,r,s){throw Xe("Ray")}multiPickWithRay(e,t,i){throw Xe("Ray")}setPointerOverMesh(e,t,i){this._inputManager.setPointerOverMesh(e,t,i)}getPointerOverMesh(){return this._inputManager.getPointerOverMesh()}_rebuildGeometries(){for(let e of this.geometries)e._rebuild();for(let e of this.meshes)e._rebuild();this.postProcessManager&&this.postProcessManager._rebuild();for(let e of this._components)e.rebuild();for(let e of this.particleSystems)e.rebuild();if(this.spriteManagers)for(let e of this.spriteManagers)e.rebuild()}_rebuildTextures(){for(let e of this.textures)e._rebuild(!0);this.markAllMaterialsAsDirty(1)}_getByTags(e,t,i){if(t===void 0)return e;let r=[];for(let s in e){let a=e[s];Zt&&Zt.MatchesQuery(a,t)&&(!i||i(a))&&r.push(a)}return r}getMeshesByTags(e,t){return this._getByTags(this.meshes,e,t)}getCamerasByTags(e,t){return this._getByTags(this.cameras,e,t)}getLightsByTags(e,t){return this._getByTags(this.lights,e,t)}getMaterialByTags(e,t){return this._getByTags(this.materials,e,t).concat(this._getByTags(this.multiMaterials,e,t))}getTransformNodesByTags(e,t){return this._getByTags(this.transformNodes,e,t)}setRenderingOrder(e,t=null,i=null,r=null){this._renderingManager.setRenderingOrder(e,t,i,r)}setRenderingAutoClearDepthStencil(e,t,i=!0,r=!0){this._renderingManager.setRenderingAutoClearDepthStencil(e,t,i,r)}getAutoClearDepthStencilSetup(e){return this._renderingManager.getAutoClearDepthStencilSetup(e)}_forceBlockMaterialDirtyMechanism(e){this._blockMaterialDirtyMechanism=e}get blockMaterialDirtyMechanism(){return this._blockMaterialDirtyMechanism}set blockMaterialDirtyMechanism(e){this._blockMaterialDirtyMechanism!==e&&(this._blockMaterialDirtyMechanism=e,e||this.markAllMaterialsAsDirty(127))}markAllMaterialsAsDirty(e,t){if(!this._blockMaterialDirtyMechanism)for(let i of this.materials)t&&!t(i)||i.markAsDirty(e)}_loadFile(e,t,i,r,s,a,o){let l=qo(e,t,i,r?this.offlineProvider:void 0,s,a,o);return this._activeRequests.push(l),l.onCompleteObservable.add(c=>{this._activeRequests.splice(this._activeRequests.indexOf(c),1)}),l}async _loadFileAsync(e,t,i,r,s){return await new Promise((a,o)=>{this._loadFile(e,l=>{a(l)},t,i,r,(l,c)=>{o(c)},s)})}_requestFile(e,t,i,r,s,a,o){let l=ST(e,t,i,r?this.offlineProvider:void 0,s,a,o);return this._activeRequests.push(l),l.onCompleteObservable.add(c=>{this._activeRequests.splice(this._activeRequests.indexOf(c),1)}),l}async _requestFileAsync(e,t,i,r,s){return await new Promise((a,o)=>{this._requestFile(e,l=>{a(l)},t,i,r,l=>{o(l)},s)})}_readFile(e,t,i,r,s){let a=Dh(e,t,i,r,s);return this._activeRequests.push(a),a.onCompleteObservable.add(o=>{this._activeRequests.splice(this._activeRequests.indexOf(o),1)}),a}async _readFileAsync(e,t,i){return await new Promise((r,s)=>{this._readFile(e,a=>{r(a)},t,i,a=>{s(a)})})}getPerfCollector(){throw Xe("performanceViewerSceneExtension")}setActiveCameraByID(e){return this.setActiveCameraById(e)}getMaterialByID(e){return this.getMaterialById(e)}getLastMaterialByID(e){return this.getLastMaterialById(e)}getTextureByUniqueID(e){return this.getTextureByUniqueId(e)}getCameraByID(e){return this.getCameraById(e)}getCameraByUniqueID(e){return this.getCameraByUniqueId(e)}getBoneByID(e){return this.getBoneById(e)}getLightByID(e){return this.getLightById(e)}getLightByUniqueID(e){return this.getLightByUniqueId(e)}getParticleSystemByID(e){return this.getParticleSystemById(e)}getGeometryByID(e){return this.getGeometryById(e)}getMeshByID(e){return this.getMeshById(e)}getMeshByUniqueID(e){return this.getMeshByUniqueId(e)}getLastMeshByID(e){return this.getLastMeshById(e)}getMeshesByID(e){return this.getMeshesById(e)}getTransformNodeByID(e){return this.getTransformNodeById(e)}getTransformNodeByUniqueID(e){return this.getTransformNodeByUniqueId(e)}getTransformNodesByID(e){return this.getTransformNodesById(e)}getNodeByID(e){return this.getNodeById(e)}getLastEntryByID(e){return this.getLastEntryById(e)}getLastSkeletonByID(e){return this.getLastSkeletonById(e)}};Qt.FOGMODE_NONE=0;Qt.FOGMODE_EXP=1;Qt.FOGMODE_EXP2=2;Qt.FOGMODE_LINEAR=3;Qt.MinDeltaTime=1;Qt.MaxDeltaTime=1e3;Qt._OriginalDefaultMaterialFactory=Qt.DefaultMaterialFactory;Ft("BABYLON.Scene",Qt)});var pB,Zie,Ra=C(()=>{G();pB="helperFunctions",Zie=`const PI: f32=3.141592653589793;const TWO_PI: f32=6.283185307179586;const HALF_PI: f32=1.5707963267948966;const RECIPROCAL_PI: f32=0.3183098861837907;const RECIPROCAL_PI2: f32=0.15915494309189535;const RECIPROCAL_PI4: f32=0.07957747154594767;const HALF_MIN: f32=5.96046448e-08; const LinearEncodePowerApprox: f32=2.2;const GammaEncodePowerApprox: f32=1.0/LinearEncodePowerApprox;const LuminanceEncodeApprox: vec3f=vec3f(0.2126,0.7152,0.0722);const Epsilon:f32=0.0000001;fn square(x: f32)->f32 {return x*x;} fn saturate(x: f32)->f32 {return clamp(x,0.0,1.0);} fn saturateVec3(x: vec3f)->vec3f {return clamp(x,vec3f(),vec3f(1.0));} @@ -4295,11 +4295,11 @@ fn max3(v: vec3f)->f32 {return max(v.x,max(v.y,v.z));} fn uint2float(i: u32)->f32 {return bitcast(0x3F800000u | (i>>9u))-1.0;} fn plasticSequence(rstate: u32)->vec2f {return vec2f(uint2float(rstate*3242174889u), uint2float(rstate*2447445414u));} -`;S.IncludesShadersStoreWGSL[nB]||(S.IncludesShadersStoreWGSL[nB]=Cie)});var UM={};et(UM,{rgbdDecodePixelShaderWGSL:()=>yie});var BM,sB,yie,VM=C(()=>{k();Sa();BM="rgbdDecodePixelShader",sB=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_2d; +`;T.IncludesShadersStoreWGSL[pB]||(T.IncludesShadersStoreWGSL[pB]=Zie)});var jM={};$e(jM,{rgbdDecodePixelShaderWGSL:()=>Qie});var KM,_B,Qie,qM=C(()=>{G();Ra();KM="rgbdDecodePixelShader",_B=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_2d; #include #define CUSTOM_FRAGMENT_DEFINITIONS @fragment -fn main(input: FragmentInputs)->FragmentOutputs {fragmentOutputs.color=vec4f(fromRGBD(textureSample(textureSampler,textureSamplerSampler,input.vUV)),1.0);}`;S.ShadersStoreWGSL[BM]||(S.ShadersStoreWGSL[BM]=sB);yie={name:BM,shader:sB}});var aB,Pie,Ta=C(()=>{k();aB="helperFunctions",Pie=`const float PI=3.141592653589793;const float TWO_PI=6.283185307179586;const float HALF_PI=1.5707963267948966;const float RECIPROCAL_PI=0.3183098861837907;const float RECIPROCAL_PI2=0.15915494309189535;const float RECIPROCAL_PI4=0.07957747154594767;const float HALF_MIN=5.96046448e-08; +fn main(input: FragmentInputs)->FragmentOutputs {fragmentOutputs.color=vec4f(fromRGBD(textureSample(textureSampler,textureSamplerSampler,input.vUV)),1.0);}`;T.ShadersStoreWGSL[KM]||(T.ShadersStoreWGSL[KM]=_B);Qie={name:KM,shader:_B}});var gB,$ie,ba=C(()=>{G();gB="helperFunctions",$ie=`const float PI=3.141592653589793;const float TWO_PI=6.283185307179586;const float HALF_PI=1.5707963267948966;const float RECIPROCAL_PI=0.3183098861837907;const float RECIPROCAL_PI2=0.15915494309189535;const float RECIPROCAL_PI4=0.07957747154594767;const float HALF_MIN=5.96046448e-08; const float LinearEncodePowerApprox=2.2;const float GammaEncodePowerApprox=1.0/LinearEncodePowerApprox;const vec3 LuminanceEncodeApprox=vec3(0.2126,0.7152,0.0722);const float Epsilon=0.0000001; #define saturate(x) clamp(x,0.0,1.0) #define absEps(x) abs(x)+Epsilon @@ -4417,28 +4417,28 @@ float uint2float(uint i) {return uintBitsToFloat(0x3F800000u | (i>>9u))-1.0;} vec2 plasticSequence(const uint rstate) {return vec2(uint2float(rstate*3242174889u), uint2float(rstate*2447445414u));} #endif -`;S.IncludesShadersStore[aB]||(S.IncludesShadersStore[aB]=Pie)});var kM={};et(kM,{rgbdDecodePixelShader:()=>Die});var GM,oB,Die,WM=C(()=>{k();Ta();GM="rgbdDecodePixelShader",oB=`varying vec2 vUV;uniform sampler2D textureSampler; +`;T.IncludesShadersStore[gB]||(T.IncludesShadersStore[gB]=$ie)});var QM={};$e(QM,{rgbdDecodePixelShader:()=>Jie});var ZM,vB,Jie,$M=C(()=>{G();ba();ZM="rgbdDecodePixelShader",vB=`varying vec2 vUV;uniform sampler2D textureSampler; #include #define CUSTOM_FRAGMENT_DEFINITIONS void main(void) -{gl_FragColor=vec4(fromRGBD(texture2D(textureSampler,vUV)),1.0);}`;S.ShadersStore[GM]||(S.ShadersStore[GM]=oB);Die={name:GM,shader:oB}});var cB={};et(cB,{rgbdEncodePixelShader:()=>Lie});var HM,lB,Lie,fB=C(()=>{k();Ta();HM="rgbdEncodePixelShader",lB=`varying vec2 vUV;uniform sampler2D textureSampler; +{gl_FragColor=vec4(fromRGBD(texture2D(textureSampler,vUV)),1.0);}`;T.ShadersStore[ZM]||(T.ShadersStore[ZM]=vB);Jie={name:ZM,shader:vB}});var SB={};$e(SB,{rgbdEncodePixelShader:()=>ere});var JM,EB,ere,TB=C(()=>{G();ba();JM="rgbdEncodePixelShader",EB=`varying vec2 vUV;uniform sampler2D textureSampler; #include #define CUSTOM_FRAGMENT_DEFINITIONS void main(void) -{gl_FragColor=toRGBD(texture2D(textureSampler,vUV).rgb);}`;S.ShadersStore[HM]||(S.ShadersStore[HM]=lB);Lie={name:HM,shader:lB}});var dB={};et(dB,{rgbdEncodePixelShaderWGSL:()=>Oie});var zM,hB,Oie,uB=C(()=>{k();Sa();zM="rgbdEncodePixelShader",hB=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_2d; +{gl_FragColor=toRGBD(texture2D(textureSampler,vUV).rgb);}`;T.ShadersStore[JM]||(T.ShadersStore[JM]=EB);ere={name:JM,shader:EB}});var xB={};$e(xB,{rgbdEncodePixelShaderWGSL:()=>tre});var eC,AB,tre,RB=C(()=>{G();Ra();eC="rgbdEncodePixelShader",AB=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_2d; #include #define CUSTOM_FRAGMENT_DEFINITIONS @fragment -fn main(input: FragmentInputs)->FragmentOutputs {fragmentOutputs.color=toRGBD(textureSample(textureSampler,textureSamplerSampler,input.vUV).rgb);}`;S.ShadersStoreWGSL[zM]||(S.ShadersStoreWGSL[zM]=hB);Oie={name:zM,shader:hB}});var zu,XM=C(()=>{Vl();SM();zu=class{static ExpandRGBDTexture(e){let t=e._texture;if(!t||!e.isRGBD)return;let i=t.getEngine(),r=i.getCaps(),s=t.isReady,a=!1;r.textureHalfFloatRender&&r.textureHalfFloatLinearFiltering?(a=!0,t.type=2):r.textureFloatRender&&r.textureFloatLinearFiltering&&(a=!0,t.type=1),a&&(t.isReady=!1,t._isRGBD=!1,t.invertY=!1);let o=async()=>{let l=i.isWebGPU,c=l?1:0;t.isReady=!1,l?await Promise.resolve().then(()=>(VM(),UM)):await Promise.resolve().then(()=>(WM(),kM));let f=new Ri("rgbdDecode","rgbdDecode",null,null,1,null,3,i,!1,void 0,t.type,void 0,null,!1,void 0,c);f.externalTextureSamplerBinding=!0;let h=i.createRenderTargetTexture(t.width,{generateDepthBuffer:!1,generateMipMaps:!1,generateStencilBuffer:!1,samplingMode:t.samplingMode,type:t.type,format:5});f.onEffectCreatedObservable.addOnce(d=>{d.executeWhenCompiled(()=>{f.onApply=u=>{u._bindTexture("textureSampler",t),u.setFloat2("scale",1,1)},e.getScene().postProcessManager.directRender([f],h,!0),i.restoreDefaultFramebuffer(),i._releaseTexture(t),f&&f.dispose(),h._swapAndDie(t),t.isReady=!0})})};a&&(s?o():e.onLoadObservable.addOnce(o))}static async EncodeTextureToRGBD(e,t,i=0){return t.getEngine().isWebGPU?await Promise.resolve().then(()=>(uB(),dB)):await Promise.resolve().then(()=>(fB(),cB)),await m2("rgbdEncode",e,t,i,1,5)}}});var YM=C(()=>{$0();p_();pi.prototype._sphericalPolynomialTargetSize=0;pi.prototype.forceSphericalPolynomialsRecompute=function(){this._texture&&(this._texture._sphericalPolynomial=null,this._texture._sphericalPolynomialPromise=null,this._texture._sphericalPolynomialComputed=!1)};Object.defineProperty(pi.prototype,"sphericalPolynomial",{get:function(){if(this._texture){if(this._texture._sphericalPolynomial||this._texture._sphericalPolynomialComputed)return this._texture._sphericalPolynomial;if(this._texture.isReady)return this._texture._sphericalPolynomialPromise||(this._texture._sphericalPolynomialPromise=wl.ConvertCubeMapTextureToSphericalPolynomial(this),this._texture._sphericalPolynomialPromise===null?this._texture._sphericalPolynomialComputed=!0:this._texture._sphericalPolynomialPromise.then(n=>{this._texture._sphericalPolynomial=n,this._texture._sphericalPolynomialComputed=!0})),null}return null},set:function(n){this._texture&&(this._texture._sphericalPolynomial=n)},enumerable:!0,configurable:!0})});function gB(n){let e=new DataView(n.buffer,n.byteOffset,n.byteLength),t=0;for(let a=0;amB)throw new Error(`Unsupported babylon environment map version "${n.version}". Latest supported version is "${mB}".`);return n.version===2||(n={...n,version:2,imageType:FT}),n}function Nie(n,e){e=P_(e);let t=e.specular,i=Math.log2(e.width);if(i=Math.round(i)+1,t.mipmaps.length!==6*i)throw new Error(`Unsupported specular mipmaps number "${t.mipmaps.length}"`);let r=new Array(i);for(let s=0;s{if(t){let u=e.createTexture(null,!0,!0,null,1,null,m=>{d(m)},n);i==null||i.onEffectCreatedObservable.addOnce(m=>{m.executeWhenCompiled(()=>{i.externalTextureSamplerBinding=!0,i.onApply=_=>{_._bindTexture("textureSampler",u),_.setFloat2("scale",1,e._features.needsInvertingBitmap&&n instanceof ImageBitmap?-1:1)},e.scenes.length&&(e.scenes[0].postProcessManager.directRender([i],c,!0,s,a),e.restoreDefaultFramebuffer(),u.dispose(),URL.revokeObjectURL(r),h())})})}else{if(e._uploadImageToTexture(f,n,s,a),o){let u=l[a];u&&e._uploadImageToTexture(u._texture,n,s,0)}h()}})}async function wie(n,e,t=FT){let i=n.getEngine();n.format=5,n.type=0,n.generateMipMaps=!0,n._cachedAnisotropicFilteringLevel=null,i.updateTextureSamplingMode(3,n),await EB(n,e,!0,t),n.isReady=!0}async function Bie(n,e,t,i=FT,r=null){let s=n.getEngine(),a=new wi(s,5),o=new pi(s,a);n._irradianceTexture=o,o._dominantDirection=r,a.isCube=!0,a.format=5,a.type=0,a.generateMipMaps=!0,a._cachedAnisotropicFilteringLevel=null,a.generateMipMaps=!0,a.width=t,a.height=t,s.updateTextureSamplingMode(3,a),await EB(a,[e],!1,i),s.generateMipMapsForCubemap(a),a.isReady=!0}async function EB(n,e,t,i=FT){if(!he.IsExponentOfTwo(n.width))throw new Error("Texture size must be a power of two");let r=v3(n.width)+1,s=n.getEngine(),a=!1,o=!1,l=null,c=null,f=null,h=s.getCaps();h.textureLOD?s._features.supportRenderAndCopyToLodForFloatTextures?h.textureHalfFloatRender&&h.textureHalfFloatLinearFiltering?(a=!0,n.type=2):h.textureFloatRender&&h.textureFloatLinearFiltering&&(a=!0,n.type=1):a=!1:(a=!1,o=t);let d=0;if(a)s.isWebGPU?(d=1,await Promise.resolve().then(()=>(VM(),UM))):await Promise.resolve().then(()=>(WM(),kM)),l=new Ri("rgbdDecode","rgbdDecode",null,null,1,null,3,s,!1,void 0,n.type,void 0,null,!1,void 0,d),n._isRGBD=!1,n.invertY=!1,c=s.createRenderTargetCubeTexture(n.width,{generateDepthBuffer:!1,generateMipMaps:!0,generateStencilBuffer:!1,samplingMode:3,type:n.type,format:5});else if(n._isRGBD=!0,n.invertY=!0,o){f={};let _=n._lodGenerationScale,p=n._lodGenerationOffset;for(let g=0;g<3;g++){let x=1-g/2,A=p,E=(r-1)*_+p,T=A+(E-A)*x,R=Math.round(Math.min(Math.max(T,0),E)),I=new wi(s,2);I.isCube=!0,I.invertY=!0,I.generateMipMaps=!1,s.updateTextureSamplingMode(2,I);let y=new pi(null);switch(y._isCube=!0,y._texture=I,f[R]=y,g){case 0:n._lodTextureLow=y;break;case 1:n._lodTextureMid=y;break;case 2:n._lodTextureHigh=y;break}}}let u=[];for(let m=0;mawait _B(E,s,a,l,x,_,m,o,f,c,n));else{let E=new Image;E.src=x,A=new Promise((T,R)=>{E.onload=()=>{_B(E,s,a,l,x,_,m,o,f,c,n).then(()=>T()).catch(I=>{R(I)})},E.onerror=I=>{R(I)}})}u.push(A)}if(await Promise.all(u),e.length{Ci();Ve();xn();f_();ks();p_();ps();Vl();Pt();XM();uM();YM();Vu();FT="image/png",mB=2,pB=[134,22,135,150,246,214,150,54]});var AB={};et(AB,{_ENVTextureLoader:()=>KM});var KM,xB=C(()=>{TB();KM=class{constructor(){this.supportCascades=!1}loadCubeData(e,t,i,r,s){if(Array.isArray(e))return;let a=gB(e);if(a){t.width=a.width,t.height=a.width;try{SB(t,a),vB(t,e,a).then(()=>{t.isReady=!0,t.onLoadedObservable.notifyObservers(t),t.onLoadedObservable.clear(),r&&r()},o=>{s==null||s("Can not upload environment levels",o)})}catch(o){s==null||s("Can not upload environment file",o)}}else s&&s("Can not parse the environment file",null)}loadData(){throw".env not supported in 2d."}}});var Xl,RB=C(()=>{Ve();Xl=class{static ConvertPanoramaToCubemap(e,t,i,r,s=!1,a=!0){if(!e)throw"ConvertPanoramaToCubemap: input cannot be null";let o;if(e.length!=t*i*3){if(e.length!=t*i*4)throw"ConvertPanoramaToCubemap: input size is wrong";o=4}else o=3;let l=this.CreateCubemapTexture(r,this.FACE_FRONT,e,t,i,s,a,o),c=this.CreateCubemapTexture(r,this.FACE_BACK,e,t,i,s,a,o),f=this.CreateCubemapTexture(r,this.FACE_LEFT,e,t,i,s,a,o),h=this.CreateCubemapTexture(r,this.FACE_RIGHT,e,t,i,s,a,o),d=this.CreateCubemapTexture(r,this.FACE_UP,e,t,i,s,a,o),u=this.CreateCubemapTexture(r,this.FACE_DOWN,e,t,i,s,a,o);return{front:l,back:c,left:f,right:h,up:d,down:u,size:r,type:1,format:4,gammaSpace:!1}}static CreateCubemapTexture(e,t,i,r,s,a,o,l){let c=new ArrayBuffer(e*e*4*3),f=new Float32Array(c),h=a?Math.max(1,Math.round(r/4/e)):1,d=1/h,u=d*d,m=t[1].subtract(t[0]).scale(d/e),_=t[3].subtract(t[2]).scale(d/e),p=1/e,g=0;for(let v=0;vMath.PI;)o-=2*Math.PI;let c=o/Math.PI,f=l/Math.PI;c=c*.5+.5;let h=Math.round(c*i);h<0?h=0:h>=i&&(h=i-1);let d=Math.round(f*r);d<0?d=0:d>=r&&(d=r-1);let u=a?r-d-1:d,m=t[u*i*s+h*s+0],_=t[u*i*s+h*s+1],p=t[u*i*s+h*s+2];return{r:m,g:_,b:p}}};Xl.FACE_LEFT=[new b(-1,-1,-1),new b(1,-1,-1),new b(-1,1,-1),new b(1,1,-1)];Xl.FACE_RIGHT=[new b(1,-1,1),new b(-1,-1,1),new b(1,1,1),new b(-1,1,1)];Xl.FACE_FRONT=[new b(1,-1,-1),new b(1,-1,1),new b(1,1,-1),new b(1,1,1)];Xl.FACE_BACK=[new b(-1,-1,1),new b(-1,-1,-1),new b(-1,1,1),new b(-1,1,-1)];Xl.FACE_DOWN=[new b(1,1,-1),new b(1,1,1),new b(-1,1,-1),new b(-1,1,1)];Xl.FACE_UP=[new b(-1,-1,-1),new b(-1,-1,1),new b(1,-1,-1),new b(1,-1,1)]});function Uie(n,e){return e>1023?n*Math.pow(2,1023)*Math.pow(2,e-1023):e<-1074?n*Math.pow(2,-1074)*Math.pow(2,e+1074):n*Math.pow(2,e)}function bB(n,e,t,i,r,s){r>0?(r=Uie(1,r-136),n[s+0]=e*r,n[s+1]=t*r,n[s+2]=i*r):(n[s+0]=0,n[s+1]=0,n[s+2]=0)}function jM(n,e){let t="",i;for(let r=e;r32767)throw"HDR Bad header format, unsupported size";return r+=e.length+1,{height:l,width:o,dataPosition:r}}function MB(n,e){return Vie(n,e)}function Vie(n,e){let t=e.height,i=e.width,r,s,a,o,l,c=e.dataPosition,f,h,d,u=new ArrayBuffer(i*4),m=new Uint8Array(u),_=new ArrayBuffer(e.width*e.height*4*3),p=new Float32Array(_);for(;t>0;){if(r=n[c++],s=n[c++],a=n[c++],o=n[c++],r!=2||s!=2||a&128||e.width<8||e.width>32767)return Gie(n,e);if((a<<8|o)!=i)throw"HDR Bad header format, wrong scan line width";for(f=0,d=0;d<4;d++)for(h=(d+1)*i;f128){if(l=r-128,l==0||l>h-f)throw"HDR Bad Format, bad scanline data (run)";for(;l-- >0;)m[f++]=s}else{if(l=r,l==0||l>h-f)throw"HDR Bad Format, bad scanline data (non-run)";if(m[f++]=s,--l>0)for(let g=0;g0;){for(l=0;l{RB()});var yB={};et(yB,{_HDRTextureLoader:()=>qM});var qM,PB=C(()=>{CB();qM=class{constructor(){this.supportCascades=!1}loadCubeData(){throw".hdr not supported in Cube."}loadData(e,t,i){let r=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),s=IB(r),a=MB(r,s),o=s.width*s.height,l=new Float32Array(o*4);for(let c=0;c{let c=t.getEngine();t.type=1,t.format=5,t._gammaSpace=!1,c._uploadDataToTextureDirectly(t,l)})}}});var so,DB=C(()=>{Pt();so=class n{constructor(e,t){if(this.data=e,this.isInvalid=!1,!n.IsValid(e)){this.isInvalid=!0,$.Error("texture missing KTX identifier");return}let i=Uint32Array.BYTES_PER_ELEMENT,r=new DataView(this.data.buffer,this.data.byteOffset+12,13*i),a=r.getUint32(0,!0)===67305985;if(this.glType=r.getUint32(1*i,a),this.glTypeSize=r.getUint32(2*i,a),this.glFormat=r.getUint32(3*i,a),this.glInternalFormat=r.getUint32(4*i,a),this.glBaseInternalFormat=r.getUint32(5*i,a),this.pixelWidth=r.getUint32(6*i,a),this.pixelHeight=r.getUint32(7*i,a),this.pixelDepth=r.getUint32(8*i,a),this.numberOfArrayElements=r.getUint32(9*i,a),this.numberOfFaces=r.getUint32(10*i,a),this.numberOfMipmapLevels=r.getUint32(11*i,a),this.bytesOfKeyValueData=r.getUint32(12*i,a),this.glType!==0){$.Error("only compressed formats currently supported"),this.isInvalid=!0;return}else this.numberOfMipmapLevels=Math.max(1,this.numberOfMipmapLevels);if(this.pixelHeight===0||this.pixelDepth!==0){$.Error("only 2D textures currently supported"),this.isInvalid=!0;return}if(this.numberOfArrayElements!==0){$.Error("texture arrays not currently supported"),this.isInvalid=!0;return}if(this.numberOfFaces!==t){$.Error("number of faces expected"+t+", but found "+this.numberOfFaces),this.isInvalid=!0;return}this.loadType=n.COMPRESSED_2D}uploadLevels(e,t){switch(this.loadType){case n.COMPRESSED_2D:this._upload2DCompressedLevels(e,t);break;case n.TEX_2D:case n.COMPRESSED_3D:case n.TEX_3D:}}_upload2DCompressedLevels(e,t){let i=n.HEADER_LEN+this.bytesOfKeyValueData,r=this.pixelWidth,s=this.pixelHeight,a=t?this.numberOfMipmapLevels:1;for(let o=0;o=12){let t=new Uint8Array(e.buffer,e.byteOffset,12);if(t[0]===171&&t[1]===75&&t[2]===84&&t[3]===88&&t[4]===32&&t[5]===49&&t[6]===49&&t[7]===187&&t[8]===13&&t[9]===10&&t[10]===26&&t[11]===10)return!0}return!1}};so.HEADER_LEN=64;so.COMPRESSED_2D=0;so.COMPRESSED_3D=1;so.TEX_2D=2;so.TEX_3D=3});var ZM,D_,LB=C(()=>{ZM=class{constructor(e){this._pendingActions=new Array,this._workerInfos=e.map(t=>({workerPromise:Promise.resolve(t),idle:!0}))}dispose(){for(let e of this._workerInfos)e.workerPromise.then(t=>{t.terminate()});this._workerInfos.length=0,this._pendingActions.length=0}push(e){this._executeOnIdleWorker(e)||this._pendingActions.push(e)}_executeOnIdleWorker(e){for(let t of this._workerInfos)if(t.idle)return this._execute(t,e),!0;return!1}_execute(e,t){e.idle=!1,e.workerPromise.then(i=>{t(i,()=>{let r=this._pendingActions.shift();r?this._execute(e,r):e.idle=!0})})}},D_=class n extends ZM{constructor(e,t,i=n.DefaultOptions){super([]),this._maxWorkers=e,this._createWorkerAsync=t,this._options=i}push(e){if(!this._executeOnIdleWorker(e))if(this._workerInfos.length{t(i,()=>{r(),e.idle&&(e.timeoutId=setTimeout(()=>{e.workerPromise.then(a=>{a.terminate()});let s=this._workerInfos.indexOf(e);s!==-1&&this._workerInfos.splice(s,1)},this._options.idleTimeElapsedBeforeRelease))})})}};D_.DefaultOptions={idleTimeElapsedBeforeRelease:1e3}});var OB,Xu,NB,FB=C(()=>{(function(n){n[n.ETC1S=0]="ETC1S",n[n.UASTC4x4=1]="UASTC4x4"})(OB||(OB={}));(function(n){n[n.ASTC_4X4_RGBA=0]="ASTC_4X4_RGBA",n[n.ASTC_4x4_RGBA=0]="ASTC_4x4_RGBA",n[n.BC7_RGBA=1]="BC7_RGBA",n[n.BC3_RGBA=2]="BC3_RGBA",n[n.BC1_RGB=3]="BC1_RGB",n[n.PVRTC1_4_RGBA=4]="PVRTC1_4_RGBA",n[n.PVRTC1_4_RGB=5]="PVRTC1_4_RGB",n[n.ETC2_RGBA=6]="ETC2_RGBA",n[n.ETC1_RGB=7]="ETC1_RGB",n[n.RGBA32=8]="RGBA32",n[n.R8=9]="R8",n[n.RG8=10]="RG8"})(Xu||(Xu={}));(function(n){n[n.COMPRESSED_RGBA_BPTC_UNORM_EXT=36492]="COMPRESSED_RGBA_BPTC_UNORM_EXT",n[n.COMPRESSED_RGBA_ASTC_4X4_KHR=37808]="COMPRESSED_RGBA_ASTC_4X4_KHR",n[n.COMPRESSED_RGB_S3TC_DXT1_EXT=33776]="COMPRESSED_RGB_S3TC_DXT1_EXT",n[n.COMPRESSED_RGBA_S3TC_DXT5_EXT=33779]="COMPRESSED_RGBA_S3TC_DXT5_EXT",n[n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG=35842]="COMPRESSED_RGBA_PVRTC_4BPPV1_IMG",n[n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG=35840]="COMPRESSED_RGB_PVRTC_4BPPV1_IMG",n[n.COMPRESSED_RGBA8_ETC2_EAC=37496]="COMPRESSED_RGBA8_ETC2_EAC",n[n.COMPRESSED_RGB8_ETC2=37492]="COMPRESSED_RGB8_ETC2",n[n.COMPRESSED_RGB_ETC1_WEBGL=36196]="COMPRESSED_RGB_ETC1_WEBGL",n[n.RGBA8Format=32856]="RGBA8Format",n[n.R8Format=33321]="R8Format",n[n.RG8Format=33323]="RG8Format"})(NB||(NB={}))});function L_(n,e){let t=(e==null?void 0:e.jsDecoderModule)||KTX2DECODER;n&&(n.wasmBaseUrl&&(t.Transcoder.WasmBaseUrl=n.wasmBaseUrl),n.wasmUASTCToASTC&&(t.LiteTranscoder_UASTC_ASTC.WasmModuleURL=n.wasmUASTCToASTC),n.wasmUASTCToBC7&&(t.LiteTranscoder_UASTC_BC7.WasmModuleURL=n.wasmUASTCToBC7),n.wasmUASTCToRGBA_UNORM&&(t.LiteTranscoder_UASTC_RGBA_UNORM.WasmModuleURL=n.wasmUASTCToRGBA_UNORM),n.wasmUASTCToRGBA_SRGB&&(t.LiteTranscoder_UASTC_RGBA_SRGB.WasmModuleURL=n.wasmUASTCToRGBA_SRGB),n.wasmUASTCToR8_UNORM&&(t.LiteTranscoder_UASTC_R8_UNORM.WasmModuleURL=n.wasmUASTCToR8_UNORM),n.wasmUASTCToRG8_UNORM&&(t.LiteTranscoder_UASTC_RG8_UNORM.WasmModuleURL=n.wasmUASTCToRG8_UNORM),n.jsMSCTranscoder&&(t.MSCTranscoder.JSModuleURL=n.jsMSCTranscoder),n.wasmMSCTranscoder&&(t.MSCTranscoder.WasmModuleURL=n.wasmMSCTranscoder),n.wasmZSTDDecoder&&(t.ZSTDDecoder.WasmModuleURL=n.wasmZSTDDecoder)),e&&(e.wasmUASTCToASTC&&(t.LiteTranscoder_UASTC_ASTC.WasmBinary=e.wasmUASTCToASTC),e.wasmUASTCToBC7&&(t.LiteTranscoder_UASTC_BC7.WasmBinary=e.wasmUASTCToBC7),e.wasmUASTCToRGBA_UNORM&&(t.LiteTranscoder_UASTC_RGBA_UNORM.WasmBinary=e.wasmUASTCToRGBA_UNORM),e.wasmUASTCToRGBA_SRGB&&(t.LiteTranscoder_UASTC_RGBA_SRGB.WasmBinary=e.wasmUASTCToRGBA_SRGB),e.wasmUASTCToR8_UNORM&&(t.LiteTranscoder_UASTC_R8_UNORM.WasmBinary=e.wasmUASTCToR8_UNORM),e.wasmUASTCToRG8_UNORM&&(t.LiteTranscoder_UASTC_RG8_UNORM.WasmBinary=e.wasmUASTCToRG8_UNORM),e.jsMSCTranscoder&&(t.MSCTranscoder.JSModule=e.jsMSCTranscoder),e.wasmMSCTranscoder&&(t.MSCTranscoder.WasmBinary=e.wasmMSCTranscoder),e.wasmZSTDDecoder&&(t.ZSTDDecoder.WasmBinary=e.wasmZSTDDecoder))}function wB(n){typeof n=="undefined"&&typeof KTX2DECODER!="undefined"&&(n=KTX2DECODER);let e;onmessage=t=>{if(t.data)switch(t.data.action){case"init":{let i=t.data.urls;i&&(i.jsDecoderModule&&typeof n=="undefined"&&(importScripts(i.jsDecoderModule),n=KTX2DECODER),L_(i)),t.data.wasmBinaries&&L_(void 0,{...t.data.wasmBinaries,jsDecoderModule:n}),e=new n.KTX2Decoder,postMessage({action:"init"});break}case"setDefaultDecoderOptions":{n.KTX2Decoder.DefaultDecoderOptions=t.data.options;break}case"decode":e.decode(t.data.data,t.data.caps,t.data.options).then(i=>{let r=[];for(let s=0;s{postMessage({action:"decoded",success:!1,msg:i})});break}}}async function BB(n,e,t){return await new Promise((i,r)=>{let s=o=>{n.removeEventListener("error",s),n.removeEventListener("message",a),r(o)},a=o=>{o.data.action==="init"&&(n.removeEventListener("error",s),n.removeEventListener("message",a),i(n))};n.addEventListener("error",s),n.addEventListener("message",a),n.postMessage({action:"init",urls:t,wasmBinaries:e})})}var UB=C(()=>{});var QM,Yl,VB=C(()=>{LB();Ci();FB();UB();QM=class{constructor(){this._isDirty=!0,this._useRGBAIfOnlyBC1BC3AvailableWhenUASTC=!0,this._ktx2DecoderOptions={}}get isDirty(){return this._isDirty}get useRGBAIfASTCBC7NotAvailableWhenUASTC(){return this._useRGBAIfASTCBC7NotAvailableWhenUASTC}set useRGBAIfASTCBC7NotAvailableWhenUASTC(e){this._useRGBAIfASTCBC7NotAvailableWhenUASTC!==e&&(this._useRGBAIfASTCBC7NotAvailableWhenUASTC=e,this._isDirty=!0)}get useRGBAIfOnlyBC1BC3AvailableWhenUASTC(){return this._useRGBAIfOnlyBC1BC3AvailableWhenUASTC}set useRGBAIfOnlyBC1BC3AvailableWhenUASTC(e){this._useRGBAIfOnlyBC1BC3AvailableWhenUASTC!==e&&(this._useRGBAIfOnlyBC1BC3AvailableWhenUASTC=e,this._isDirty=!0)}get forceRGBA(){return this._forceRGBA}set forceRGBA(e){this._forceRGBA!==e&&(this._forceRGBA=e,this._isDirty=!0)}get forceR8(){return this._forceR8}set forceR8(e){this._forceR8!==e&&(this._forceR8=e,this._isDirty=!0)}get forceRG8(){return this._forceRG8}set forceRG8(e){this._forceRG8!==e&&(this._forceRG8=e,this._isDirty=!0)}get bypassTranscoders(){return this._bypassTranscoders}set bypassTranscoders(e){this._bypassTranscoders!==e&&(this._bypassTranscoders=e,this._isDirty=!0)}_getKTX2DecoderOptions(){if(!this._isDirty)return this._ktx2DecoderOptions;this._isDirty=!1;let e={};return this._useRGBAIfASTCBC7NotAvailableWhenUASTC!==void 0&&(e.useRGBAIfASTCBC7NotAvailableWhenUASTC=this._useRGBAIfASTCBC7NotAvailableWhenUASTC),this._forceRGBA!==void 0&&(e.forceRGBA=this._forceRGBA),this._forceR8!==void 0&&(e.forceR8=this._forceR8),this._forceRG8!==void 0&&(e.forceRG8=this._forceRG8),this._bypassTranscoders!==void 0&&(e.bypassTranscoders=this._bypassTranscoders),this.useRGBAIfOnlyBC1BC3AvailableWhenUASTC&&(e.transcodeFormatDecisionTree={UASTC:{transcodeFormat:[Xu.BC1_RGB,Xu.BC3_RGBA],yes:{transcodeFormat:Xu.RGBA32,engineFormat:32856,roundToMultiple4:!1}}}),this._ktx2DecoderOptions=e,e}},Yl=class n{static GetDefaultNumWorkers(){return typeof navigator!="object"||!navigator.hardwareConcurrency?1:Math.min(Math.floor(navigator.hardwareConcurrency*.5),4)}static _Initialize(e){if(n._WorkerPoolPromise||n._DecoderModulePromise)return;let t={wasmBaseUrl:he.ScriptBaseUrl,jsDecoderModule:he.GetBabylonScriptURL(this.URLConfig.jsDecoderModule,!0),wasmUASTCToASTC:he.GetBabylonScriptURL(this.URLConfig.wasmUASTCToASTC,!0),wasmUASTCToBC7:he.GetBabylonScriptURL(this.URLConfig.wasmUASTCToBC7,!0),wasmUASTCToRGBA_UNORM:he.GetBabylonScriptURL(this.URLConfig.wasmUASTCToRGBA_UNORM,!0),wasmUASTCToRGBA_SRGB:he.GetBabylonScriptURL(this.URLConfig.wasmUASTCToRGBA_SRGB,!0),wasmUASTCToR8_UNORM:he.GetBabylonScriptURL(this.URLConfig.wasmUASTCToR8_UNORM,!0),wasmUASTCToRG8_UNORM:he.GetBabylonScriptURL(this.URLConfig.wasmUASTCToRG8_UNORM,!0),jsMSCTranscoder:he.GetBabylonScriptURL(this.URLConfig.jsMSCTranscoder,!0),wasmMSCTranscoder:he.GetBabylonScriptURL(this.URLConfig.wasmMSCTranscoder,!0),wasmZSTDDecoder:he.GetBabylonScriptURL(this.URLConfig.wasmZSTDDecoder,!0)};e&&typeof Worker=="function"&&typeof URL!="undefined"?n._WorkerPoolPromise=new Promise(i=>{let r=`${L_}(${wB})()`,s=URL.createObjectURL(new Blob([r],{type:"application/javascript"}));i(new D_(e,async()=>await BB(new Worker(s),void 0,t)))}):typeof n._KTX2DecoderModule=="undefined"?n._DecoderModulePromise=he.LoadBabylonScriptAsync(t.jsDecoderModule).then(()=>(n._KTX2DecoderModule=KTX2DECODER,n._KTX2DecoderModule.MSCTranscoder.UseFromWorkerThread=!1,n._KTX2DecoderModule.WASMMemoryManager.LoadBinariesFromCurrentThread=!0,L_(t,n._KTX2DecoderModule),new n._KTX2DecoderModule.KTX2Decoder)):(n._KTX2DecoderModule.MSCTranscoder.UseFromWorkerThread=!1,n._KTX2DecoderModule.WASMMemoryManager.LoadBinariesFromCurrentThread=!0,n._DecoderModulePromise=Promise.resolve(new n._KTX2DecoderModule.KTX2Decoder))}constructor(e,t=n.DefaultNumWorkers){var r,s;this._engine=e;let i=typeof t=="object"&&t.workerPool||n.WorkerPool;if(i)n._WorkerPoolPromise=Promise.resolve(i);else{typeof t=="object"?n._KTX2DecoderModule=(r=t==null?void 0:t.binariesAndModulesContainer)==null?void 0:r.jsDecoderModule:typeof KTX2DECODER!="undefined"&&(n._KTX2DecoderModule=KTX2DECODER);let a=typeof t=="number"?t:(s=t.numWorkers)!=null?s:n.DefaultNumWorkers;n._Initialize(a)}}async _uploadAsync(e,t,i){let r=this._engine.getCaps(),s={astc:!!r.astc,bptc:!!r.bptc,s3tc:!!r.s3tc,pvrtc:!!r.pvrtc,etc2:!!r.etc2,etc1:!!r.etc1};if(n._WorkerPoolPromise){let a=await n._WorkerPoolPromise;return await new Promise((o,l)=>{a.push((c,f)=>{let h=m=>{c.removeEventListener("error",h),c.removeEventListener("message",d),l(m),f()},d=m=>{if(m.data.action==="decoded"){if(c.removeEventListener("error",h),c.removeEventListener("message",d),!m.data.success)l({message:m.data.msg});else try{this._createTexture(m.data.decodedData,t,i),o()}catch(_){l({message:_})}f()}};c.addEventListener("error",h),c.addEventListener("message",d),c.postMessage({action:"setDefaultDecoderOptions",options:n.DefaultDecoderOptions._getKTX2DecoderOptions()});let u=new Uint8Array(e.byteLength);u.set(new Uint8Array(e.buffer,e.byteOffset,e.byteLength)),c.postMessage({action:"decode",data:u,caps:s,options:i},[u.buffer])})})}else if(n._DecoderModulePromise){let a=await n._DecoderModulePromise;return n.DefaultDecoderOptions.isDirty&&(n._KTX2DecoderModule.KTX2Decoder.DefaultDecoderOptions=n.DefaultDecoderOptions._getKTX2DecoderOptions()),await new Promise((o,l)=>{a.decode(e,r).then(c=>{this._createTexture(c,t),o()}).catch(c=>{l({message:c})})})}throw new Error("KTX2 decoder module is not available")}_createTexture(e,t,i){this._engine._bindTextureDirectly(3553,t),i&&(i.transcodedFormat=e.transcodedFormat,i.isInGammaSpace=e.isInGammaSpace,i.hasAlpha=e.hasAlpha,i.transcoderName=e.transcoderName);let s=!0;switch(e.transcodedFormat){case 32856:t.type=0,t.format=5;break;case 33321:t.type=0,t.format=6;break;case 33323:t.type=0,t.format=7;break;default:t.format=e.transcodedFormat,s=!1;break}if(t._gammaSpace=e.isInGammaSpace,t.generateMipMaps=e.mipmaps.length>1,t.width=e.mipmaps[0].width,t.height=e.mipmaps[0].height,e.errors)throw new Error("KTX2 container - could not transcode the data. "+e.errors);for(let a=0;a=12){let t=new Uint8Array(e.buffer,e.byteOffset,12);if(t[0]===171&&t[1]===75&&t[2]===84&&t[3]===88&&t[4]===32&&t[5]===50&&t[6]===48&&t[7]===187&&t[8]===13&&t[9]===10&&t[10]===26&&t[11]===10)return!0}return!1}};Yl.URLConfig={jsDecoderModule:"https://cdn.babylonjs.com/babylon.ktx2Decoder.js",wasmUASTCToASTC:null,wasmUASTCToBC7:null,wasmUASTCToRGBA_UNORM:null,wasmUASTCToRGBA_SRGB:null,wasmUASTCToR8_UNORM:null,wasmUASTCToRG8_UNORM:null,jsMSCTranscoder:null,wasmMSCTranscoder:null,wasmZSTDDecoder:null};Yl.DefaultNumWorkers=Yl.GetDefaultNumWorkers();Yl.DefaultDecoderOptions=new QM});var $M={};et($M,{_KTXTextureLoader:()=>JM});function kie(n){switch(n){case 35916:return 33776;case 35918:return 33778;case 35919:return 33779;case 37493:return 37492;case 37497:return 37496;case 37495:return 37494;case 37840:return 37808;case 37841:return 37809;case 37842:return 37810;case 37843:return 37811;case 37844:return 37812;case 37845:return 37813;case 37846:return 37814;case 37847:return 37815;case 37848:return 37816;case 37849:return 37817;case 37850:return 37818;case 37851:return 37819;case 37852:return 37820;case 37853:return 37821;case 36493:return 36492}return null}var JM,eC=C(()=>{DB();VB();Pt();JM=class{constructor(){this.supportCascades=!1}loadCubeData(e,t,i,r){if(Array.isArray(e))return;t._invertVScale=!t.invertY;let s=t.getEngine(),a=new so(e,6),o=a.numberOfMipmapLevels>1&&t.generateMipMaps;s._unpackFlipY(!0),a.uploadLevels(t,t.generateMipMaps),t.width=a.pixelWidth,t.height=a.pixelHeight,s._setCubeMapTextureParams(t,o,a.numberOfMipmapLevels-1),t.isReady=!0,t.onLoadedObservable.notifyObservers(t),t.onLoadedObservable.clear(),r&&r()}loadData(e,t,i,r){if(so.IsValid(e)){t._invertVScale=!t.invertY;let s=new so(e,1),a=kie(s.glInternalFormat);a?(t.format=a,t._useSRGBBuffer=t.getEngine()._getUseSRGBBuffer(!0,t.generateMipMaps),t._gammaSpace=!0):t.format=s.glInternalFormat,i(s.pixelWidth,s.pixelHeight,t.generateMipMaps,!0,()=>{s.uploadLevels(t,t.generateMipMaps)},s.isInvalid)}else Yl.IsValid(e)?new Yl(t.getEngine())._uploadAsync(e,t,r).then(()=>{i(t.width,t.height,t.generateMipMaps,!0,()=>{},!1)},a=>{$.Warn(`Failed to load KTX2 texture data: ${a.message}`),i(0,0,!1,!1,()=>{},!0)}):($.Error("texture missing KTX identifier"),i(0,0,!1,!1,()=>{},!0))}}});function wT(n){let e=0;return{id_length:n[e++],colormap_type:n[e++],image_type:n[e++],colormap_index:n[e++]|n[e++]<<8,colormap_length:n[e++]|n[e++]<<8,colormap_size:n[e++],origin:[n[e++]|n[e++]<<8,n[e++]|n[e++]<<8],width:n[e++]|n[e++]<<8,height:n[e++]|n[e++]<<8,pixel_size:n[e++],flags:n[e]}}function tC(n,e){if(e.length<19){$.Error("Unable to load TGA file - Not enough data to contain header");return}let t=18,i=wT(e);if(i.id_length+t>e.length){$.Error("Unable to load TGA file - Not enough data");return}t+=i.id_length;let r=!1,s=!1,a=!1;switch(i.image_type){case Xie:r=!0;case Wie:s=!0;break;case Yie:r=!0;case Hie:break;case Kie:r=!0;case zie:a=!0;break}let o,l=i.pixel_size>>3,c=i.width*i.height*l,f;if(s&&(f=e.subarray(t,t+=i.colormap_length*(i.colormap_size>>3))),r){o=new Uint8Array(c);let A,E,T,R=0,I=new Uint8Array(l);for(;t>qie){default:case Jie:h=0,u=1,p=i.width,d=0,m=1,_=i.height;break;case Zie:h=0,u=1,p=i.width,d=i.height-1,m=-1,_=-1;break;case $ie:h=i.width-1,u=-1,p=-1,d=0,m=1,_=i.height;break;case Qie:h=i.width-1,u=-1,p=-1,d=i.height-1,m=-1,_=-1;break}let g="_getImageData"+(a?"Grey":"")+i.pixel_size+"bits",v=are[g](i,f,o,d,m,_,h,u,p);n.getEngine()._uploadDataToTextureDirectly(n,v)}function ere(n,e,t,i,r,s,a,o,l){let c=t,f=e,h=n.width,d=n.height,u,m=0,_,p,g=new Uint8Array(h*d*4);for(p=i;p!==s;p+=r)for(_=a;_!==l;_+=o,m++)u=c[m],g[(_+h*p)*4+3]=255,g[(_+h*p)*4+2]=f[u*3+0],g[(_+h*p)*4+1]=f[u*3+1],g[(_+h*p)*4+0]=f[u*3+2];return g}function tre(n,e,t,i,r,s,a,o,l){let c=t,f=n.width,h=n.height,d,u=0,m,_,p=new Uint8Array(f*h*4);for(_=i;_!==s;_+=r)for(m=a;m!==l;m+=o,u+=2){d=c[u+0]+(c[u+1]<<8);let g=((d&31744)>>10)*255/31|0,v=((d&992)>>5)*255/31|0,x=(d&31)*255/31|0;p[(m+f*_)*4+0]=g,p[(m+f*_)*4+1]=v,p[(m+f*_)*4+2]=x,p[(m+f*_)*4+3]=d&32768?0:255}return p}function ire(n,e,t,i,r,s,a,o,l){let c=t,f=n.width,h=n.height,d=0,u,m,_=new Uint8Array(f*h*4);for(m=i;m!==s;m+=r)for(u=a;u!==l;u+=o,d+=3)_[(u+f*m)*4+3]=255,_[(u+f*m)*4+2]=c[d+0],_[(u+f*m)*4+1]=c[d+1],_[(u+f*m)*4+0]=c[d+2];return _}function rre(n,e,t,i,r,s,a,o,l){let c=t,f=n.width,h=n.height,d=0,u,m,_=new Uint8Array(f*h*4);for(m=i;m!==s;m+=r)for(u=a;u!==l;u+=o,d+=4)_[(u+f*m)*4+2]=c[d+0],_[(u+f*m)*4+1]=c[d+1],_[(u+f*m)*4+0]=c[d+2],_[(u+f*m)*4+3]=c[d+3];return _}function nre(n,e,t,i,r,s,a,o,l){let c=t,f=n.width,h=n.height,d,u=0,m,_,p=new Uint8Array(f*h*4);for(_=i;_!==s;_+=r)for(m=a;m!==l;m+=o,u++)d=c[u],p[(m+f*_)*4+0]=d,p[(m+f*_)*4+1]=d,p[(m+f*_)*4+2]=d,p[(m+f*_)*4+3]=255;return p}function sre(n,e,t,i,r,s,a,o,l){let c=t,f=n.width,h=n.height,d=0,u,m,_=new Uint8Array(f*h*4);for(m=i;m!==s;m+=r)for(u=a;u!==l;u+=o,d+=2)_[(u+f*m)*4+0]=c[d+0],_[(u+f*m)*4+1]=c[d+0],_[(u+f*m)*4+2]=c[d+0],_[(u+f*m)*4+3]=c[d+1];return _}var Wie,Hie,zie,Xie,Yie,Kie,jie,qie,Zie,Qie,Jie,$ie,are,GB=C(()=>{Pt();Wie=1,Hie=2,zie=3,Xie=9,Yie=10,Kie=11,jie=48,qie=4,Zie=0,Qie=1,Jie=2,$ie=3;are={GetTGAHeader:wT,UploadContent:tC,_getImageData8bits:ere,_getImageData16bits:tre,_getImageData24bits:ire,_getImageData32bits:rre,_getImageDataGrey8bits:nre,_getImageDataGrey16bits:sre}});var kB={};et(kB,{_TGATextureLoader:()=>iC});var iC,WB=C(()=>{GB();iC=class{constructor(){this.supportCascades=!1}loadCubeData(){throw".env not supported in Cube."}loadData(e,t,i){let r=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),s=wT(r);i(s.width,s.height,t.generateMipMaps,!1,()=>{tC(t,r)})}}});var O_=C(()=>{});function lre(){let n=new ArrayBuffer(4),e=new Float32Array(n),t=new Uint32Array(n),i=new Uint32Array(512),r=new Uint32Array(512);for(let l=0;l<256;++l){let c=l-127;c<-27?(i[l]=0,i[l|256]=32768,r[l]=24,r[l|256]=24):c<-14?(i[l]=1024>>-c-14,i[l|256]=1024>>-c-14|32768,r[l]=-c-1,r[l|256]=-c-1):c<=15?(i[l]=c+15<<10,i[l|256]=c+15<<10|32768,r[l]=13,r[l|256]=13):c<128?(i[l]=31744,i[l|256]=64512,r[l]=24,r[l|256]=24):(i[l]=31744,i[l|256]=64512,r[l]=13,r[l|256]=13)}let s=new Uint32Array(2048),a=new Uint32Array(64),o=new Uint32Array(64);for(let l=1;l<1024;++l){let c=l<<13,f=0;for(;(c&8388608)===0;)c<<=1,f-=8388608;c&=-8388609,f+=947912704,s[l]=c|f}for(let l=1024;l<2048;++l)s[l]=939524096+(l-1024<<13);for(let l=1;l<31;++l)a[l]=l<<23;a[31]=1199570944,a[32]=2147483648;for(let l=33;l<63;++l)a[l]=2147483648+(l-32<<23);a[63]=3347054592;for(let l=1;l<64;++l)l!==32&&(o[l]=1024);return{floatView:e,uint32View:t,baseTable:i,shiftTable:r,mantissaTable:s,exponentTable:a,offsetTable:o}}function VT(n,e){let t=new Uint8Array(n),i=0;for(;t[e.value+i]!=0;)i+=1;let r=new TextDecoder().decode(t.slice(e.value,e.value+i));return e.value=e.value+i+1,r}function ao(n,e){let t=n.getInt32(e.value,!0);return e.value+=4,t}function Ws(n,e){let t=n.getUint32(e.value,!0);return e.value+=4,t}function N_(n,e){let t=n.getUint8(e.value);return e.value+=1,t}function Yu(n,e){let t=n.getUint16(e.value,!0);return e.value+=2,t}function nC(n,e){let t=n[e.value];return e.value+=1,t}function XB(n,e){let t;return"getBigInt64"in DataView.prototype?t=Number(n.getBigInt64(e.value,!0)):t=n.getUint32(e.value+4,!0)+Number(n.getUint32(e.value,!0)<<32),e.value+=8,t}function mn(n,e){let t=n.getFloat32(e.value,!0);return e.value+=4,t}function YB(n,e){return cre(Yu(n,e))}function cre(n){let e=(n&31744)>>10,t=n&1023;return(n>>15?-1:1)*(e?e===31?t?NaN:1/0:Math.pow(2,e-15)*(1+t/1024):6103515625e-14*(t/1024))}function fre(n){if(Math.abs(n)>65504)throw new Error("Value out of range.Consider using float instead of half-float.");n=Ft(n,-65504,65504),BT.floatView[0]=n;let e=BT.uint32View[0],t=e>>23&511;return BT.baseTable[t]+((e&8388607)>>BT.shiftTable[t])}function KB(n,e){return fre(mn(n,e))}function hre(n,e,t){let i=new TextDecoder().decode(new Uint8Array(n).slice(e.value,e.value+t));return e.value=e.value+t,i}function dre(n,e){let t=ao(n,e),i=Ws(n,e);return[t,i]}function ure(n,e){let t=Ws(n,e),i=Ws(n,e);return[t,i]}function mre(n,e){let t=mn(n,e),i=mn(n,e);return[t,i]}function pre(n,e){let t=mn(n,e),i=mn(n,e),r=mn(n,e);return[t,i,r]}function _re(n,e,t){let i=e.value,r=[];for(;e.values||(e[r++]=n[t++],r>s));)e[r++]=n[i++]}var Zo,rC,BT,F_=C(()=>{xn();O_();(function(n){n[n.NO_COMPRESSION=0]="NO_COMPRESSION",n[n.RLE_COMPRESSION=1]="RLE_COMPRESSION",n[n.ZIPS_COMPRESSION=2]="ZIPS_COMPRESSION",n[n.ZIP_COMPRESSION=3]="ZIP_COMPRESSION",n[n.PIZ_COMPRESSION=4]="PIZ_COMPRESSION",n[n.PXR24_COMPRESSION=5]="PXR24_COMPRESSION"})(Zo||(Zo={}));(function(n){n[n.INCREASING_Y=0]="INCREASING_Y",n[n.DECREASING_Y=1]="DECREASING_Y"})(rC||(rC={}));BT=lre()});function oC(n,e){if(n.getUint32(0,!0)!=Tre)throw new Error("Incorrect OpenEXR format");let t=n.getUint8(4),i=n.getUint8(5),r={singleTile:!!(i&2),longName:!!(i&4),deepFormat:!!(i&8),multiPart:!!(i&16)};e.value=8;let s={},a=!0;for(;a;){let o=VT(n.buffer,e);if(!o)a=!1;else{let l=VT(n.buffer,e),c=Ws(n,e),f=jB(n,e,l,c);f===void 0?$.Warn(`Unknown header attribute type ${l}'.`):s[o]=f}}if((i&-5)!=0)throw new Error("Unsupported file format");return{version:t,spec:r,...s}}var Tre,qB=C(()=>{Pt();F_();Tre=20000630});function rU(n,e){let t=0;for(let r=0;r<65536;++r)(r==0||n[r>>3]&1<<(r&7))&&(e[t++]=r);let i=t-1;for(;t<65536;)e[t++]=0;return i}function bre(n){for(let e=0;e<16384;e++)n[e]={},n[e].len=0,n[e].lit=0,n[e].p=null}function $B(n,e,t,i,r){for(;t>t&(1<>i;if(c=new Uint8Array([c])[0],o.value+c>l)return null;let f=a[o.value-1];for(;c-- >0;)a[o.value++]=f}else if(o.value0;--t){let i=e+w_[t]>>1;w_[t]=e,e=i}for(let t=0;t<65537;++t){let i=n[t];i>0&&(n[t]=i|w_[i]++<<6)}}function Mre(n,e,t,i,r,s){let a=e,o=0,l=0;for(;i<=r;i++){if(a.value-e.value>t)return;let c=$B(6,o,l,n,a),f=c.l;if(o=c.c,l=c.lc,s[i]=f,f==63){if(a.value-e.value>t)throw new Error("Error in HufUnpackEncTable");c=$B(8,o,l,n,a);let h=c.l+6;if(o=c.c,l=c.lc,i+h>r+1)throw new Error("Error in HufUnpackEncTable");for(;h--;)s[i++]=0;i--}else if(f>=59){let h=f-59+2;if(i+h>r+1)throw new Error("Error in HufUnpackEncTable");for(;h--;)s[i++]=0;i--}}Ire(s)}function nU(n){return n&63}function sU(n){return n>>6}function Cre(n,e,t,i){for(;e<=t;e++){let r=sU(n[e]),s=nU(n[e]);if(r>>s)throw new Error("Invalid table entry");if(s>14){let a=i[r>>s-14];if(a.len)throw new Error("Invalid table entry");if(a.lit++,a.p){let o=a.p;a.p=new Array(a.lit);for(let l=0;l0;o--){let l=i[(r<<14-s)+a];if(l.len||l.p)throw new Error("Invalid table entry");l.len=s,l.lit=e,a++}}}return!0}function yre(n,e,t,i,r,s,a,o,l){let c=0,f=0,h=a,d=Math.trunc(i.value+(r+7)/8);for(;i.value=14;){let _=c>>f-14&16383,p=e[_];if(p.len){f-=p.len;let g=lC(p.lit,s,c,f,t,i,o,l,h);g&&(c=g.c,f=g.lc)}else{if(!p.p)throw new Error("hufDecode issues");let g;for(g=0;g=v&&sU(n[p.p[g]])==(c>>f-v&(1<>=u,f-=u;f>0;){let m=e[c<<14-f&16383];if(m.len){f-=m.len;let _=lC(m.lit,s,c,f,t,i,o,l,h);_&&(c=_.c,f=_.lc)}else throw new Error("HufDecode issues")}return!0}function aU(n,e,t,i,r,s){let a={value:0},o=t.value,l=Ws(e,t),c=Ws(e,t);t.value+=4;let f=Ws(e,t);if(t.value+=4,l<0||l>=65537||c<0||c>=65537)throw new Error("Wrong HUF_ENCSIZE");let h=new Array(65537),d=new Array(16384);bre(d);let u=i-(t.value-o);if(Mre(n,t,u,l,c,h),f>8*(i-(t.value-o)))throw new Error("Wrong hufUncompress");Cre(h,l,c,d),yre(h,d,n,t,f,c,s,r,a)}function fC(n){return n&65535}function eU(n){let e=fC(n);return e>32767?e-65536:e}function Ku(n,e){let t=eU(n),r=eU(e),s=t+(r&1)+(r>>1),a=s,o=s-r;return{a,b:o}}function ju(n,e){let t=fC(n),i=fC(e),r=t-(i>>1)&JB;return{a:i+r-Rre&JB,b:r}}function oU(n,e,t,i,r,s,a){let o=a<16384,l=t>r?r:t,c=1,f,h;for(;c<=l;)c<<=1;for(c>>=1,f=c,c>>=1;c>=1;){h=0;let d=h+s*(r-f),u=s*c,m=s*f,_=i*c,p=i*f,g,v,x,A;for(;h<=d;h+=m){let E=h,T=h+i*(t-f);for(;E<=T;E+=p){let R=E+_,I=E+u,y=I+_;if(o){let M=Ku(n[E+e],n[I+e]);g=M.a,x=M.b,M=Ku(n[R+e],n[y+e]),v=M.a,A=M.b,M=Ku(g,v),n[E+e]=M.a,n[R+e]=M.b,M=Ku(x,A),n[I+e]=M.a,n[y+e]=M.b}else{let M=ju(n[E+e],n[I+e]);g=M.a,x=M.b,M=ju(n[R+e],n[y+e]),v=M.a,A=M.b,M=ju(g,v),n[E+e]=M.a,n[R+e]=M.b,M=ju(x,A),n[I+e]=M.a,n[y+e]=M.b}}if(t&c){let R=E+u,I;o?I=Ku(n[E+e],n[R+e]):I=ju(n[E+e],n[R+e]),g=I.a,n[R+e]=I.b,n[E+e]=g}}if(r&c){let E=h,T=h+i*(t-f);for(;E<=T;E+=p){let R=E+_,I;o?I=Ku(n[E+e],n[R+e]):I=ju(n[E+e],n[R+e]),g=I.a,n[R+e]=I.b,n[E+e]=g}}f=c,c>>=1}return h}function lU(n,e,t){for(let i=0;i{F_();O_();iU=16,Rre=1<0;){let s=r.getInt8(i++);if(s<0){let a=-s;e-=a+1;for(let o=0;o{});function hC(n){return new DataView(n.array.buffer,n.offset.value,n.size)}function uU(n){let e=n.viewer.buffer.slice(n.offset.value,n.offset.value+n.size),t=new Uint8Array(fU(e)),i=new Uint8Array(t.length);return sC(t),aC(t,i),new DataView(i.buffer)}function dC(n){let e=n.array.slice(n.offset.value,n.offset.value+n.size),t=fflate.unzlibSync(e),i=new Uint8Array(t.length);return sC(t),aC(t,i),new DataView(i.buffer)}function mU(n){let e=n.array.slice(n.offset.value,n.offset.value+n.size),t=fflate.unzlibSync(e),i=n.lines*n.channels*n.width,r=n.type==1?new Uint16Array(i):new Uint32Array(i),s=0,a=0,o=new Array(4);for(let l=0;l=8192)throw new Error("Wrong PIZ_COMPRESSION BITMAP_SIZE");if(o<=l)for(let m=0;m{cU();hU();F_();O_()});var Aa,Qo,uC=C(()=>{(function(n){n[n.Float=0]="Float",n[n.HalfFloat=1]="HalfFloat"})(Aa||(Aa={}));Qo=class{};Qo.DefaultOutputType=Aa.HalfFloat;Qo.FFLATEUrl="https://unpkg.com/fflate@0.8.2"});async function mC(n,e,t,i){let r={size:0,viewer:e,array:new Uint8Array(e.buffer),offset:t,width:n.dataWindow.xMax-n.dataWindow.xMin+1,height:n.dataWindow.yMax-n.dataWindow.yMin+1,channels:n.channels.length,channelLineOffsets:{},scanOrder:()=>0,bytesPerLine:0,outLineWidth:0,lines:0,scanlineBlockSize:0,inputSize:null,type:0,uncompress:null,getter:()=>0,format:5,outputChannels:0,decodeChannels:{},blockCount:null,byteArray:null,linearSpace:!1,textureType:0};switch(n.compression){case Zo.NO_COMPRESSION:r.lines=1,r.uncompress=hC;break;case Zo.RLE_COMPRESSION:r.lines=1,r.uncompress=uU;break;case Zo.ZIPS_COMPRESSION:r.lines=1,r.uncompress=dC,await he.LoadScriptAsync(Qo.FFLATEUrl);break;case Zo.ZIP_COMPRESSION:r.lines=16,r.uncompress=dC,await he.LoadScriptAsync(Qo.FFLATEUrl);break;case Zo.PIZ_COMPRESSION:r.lines=32,r.uncompress=pU;break;case Zo.PXR24_COMPRESSION:r.lines=16,r.uncompress=mU,await he.LoadScriptAsync(Qo.FFLATEUrl);break;default:throw new Error(Zo[n.compression]+" is unsupported")}r.scanlineBlockSize=r.lines;let s={};for(let c of n.channels)switch(c.name){case"R":case"G":case"B":case"A":s[c.name]=!0,r.type=c.pixelType;break;case"Y":s[c.name]=!0,r.type=c.pixelType;break;default:break}let a=!1;if(s.R&&s.G&&s.B&&s.A)r.outputChannels=4,r.decodeChannels={R:0,G:1,B:2,A:3};else if(s.R&&s.G&&s.B)a=!0,r.outputChannels=4,r.decodeChannels={R:0,G:1,B:2,A:3};else if(s.R&&s.G)r.outputChannels=2,r.decodeChannels={R:0,G:1};else if(s.R)r.outputChannels=1,r.decodeChannels={R:0};else if(s.Y)r.outputChannels=1,r.decodeChannels={Y:0};else throw new Error("EXRLoader.parse: file contains unsupported data channels.");if(r.type===1)switch(i){case Aa.Float:r.getter=YB,r.inputSize=2;break;case Aa.HalfFloat:r.getter=Yu,r.inputSize=2;break}else if(r.type===2)switch(i){case Aa.Float:r.getter=mn,r.inputSize=4;break;case Aa.HalfFloat:r.getter=KB,r.inputSize=4}else throw new Error("Unsupported pixelType "+r.type+" for "+n.compression);r.blockCount=r.height/r.scanlineBlockSize;for(let c=0;cc:r.scanOrder=c=>r.height-1-c,r.outputChannels==4?(r.format=5,r.linearSpace=!0):(r.format=6,r.linearSpace=!1),r}function pC(n,e,t,i){let r={value:0};for(let s=0;sn.height?n.height-a:n.scanlineBlockSize;let l=n.size=n.height)continue;let d=c*n.bytesPerLine,u=(n.height-1-h)*n.outLineWidth;for(let m=0;m{F_();_U();O_();Ci();uC()});var vU={};et(vU,{ReadExrDataAsync:()=>Pre,_ExrTextureLoader:()=>_C});async function Pre(n){let e=new DataView(n),t={value:0},i=oC(e,t);try{let r=await mC(i,e,t,Aa.Float);return pC(r,i,e,t),r.byteArray?{width:i.dataWindow.xMax-i.dataWindow.xMin+1,height:i.dataWindow.yMax-i.dataWindow.yMin+1,data:new Float32Array(r.byteArray)}:($.Error("Failed to decode EXR data: No byte array available."),{width:0,height:0,data:null})}catch(r){$.Error("Failed to load EXR data: ",r)}return{width:0,height:0,data:null}}var _C,EU=C(()=>{qB();gU();uC();Pt();_C=class{constructor(){this.supportCascades=!1}loadCubeData(e,t,i,r,s){throw".exr not supported in Cube."}loadData(e,t,i){let r=new DataView(e.buffer),s={value:0},a=oC(r,s);mC(a,r,s,Qo.DefaultOutputType).then(o=>{pC(o,a,r,s);let l=a.dataWindow.xMax-a.dataWindow.xMin+1,c=a.dataWindow.yMax-a.dataWindow.yMin+1;i(l,c,t.generateMipMaps,!1,()=>{let f=t.getEngine();t.format=a.format,t.type=o.textureType,t.invertY=!1,t._gammaSpace=!a.linearSpace,o.byteArray&&f._uploadDataToTextureDirectly(t,o.byteArray,0,0,void 0,!0)})}).catch(o=>{$.Error("Failed to load EXR texture: ",o)})}}});function Kl(n,e){Dre(n)&&$.Warn(`Extension with the name '${n}' already exists`),kT.set(n,e)}function Dre(n){return kT.delete(n)}function WT(n,e){(e==="image/ktx"||e==="image/ktx2")&&(n=".ktx"),kT.has(n)||(n.endsWith(".ies")&&Kl(".ies",async()=>await Promise.resolve().then(()=>(v2(),g2)).then(i=>new i._IESTextureLoader)),n.endsWith(".dds")&&Kl(".dds",async()=>await Promise.resolve().then(()=>(S2(),E2)).then(i=>new i._DDSTextureLoader)),n.endsWith(".basis")&&Kl(".basis",async()=>await Promise.resolve().then(()=>(I2(),b2)).then(i=>new i._BasisTextureLoader)),n.endsWith(".env")&&Kl(".env",async()=>await Promise.resolve().then(()=>(xB(),AB)).then(i=>new i._ENVTextureLoader)),n.endsWith(".hdr")&&Kl(".hdr",async()=>await Promise.resolve().then(()=>(PB(),yB)).then(i=>new i._HDRTextureLoader)),(n.endsWith(".ktx")||n.endsWith(".ktx2"))&&(Kl(".ktx",async()=>await Promise.resolve().then(()=>(eC(),$M)).then(i=>new i._KTXTextureLoader)),Kl(".ktx2",async()=>await Promise.resolve().then(()=>(eC(),$M)).then(i=>new i._KTXTextureLoader))),n.endsWith(".tga")&&Kl(".tga",async()=>await Promise.resolve().then(()=>(WB(),kB)).then(i=>new i._TGATextureLoader)),n.endsWith(".exr")&&Kl(".exr",async()=>await Promise.resolve().then(()=>(EU(),vU)).then(i=>new i._ExrTextureLoader)));let t=kT.get(n);return t?Promise.resolve(t(e)):null}var kT,gC=C(()=>{Pt();kT=new Map});function SU(n){let e=n.split("?")[0],t=e.lastIndexOf(".");return t>-1?e.substring(t).toLowerCase():""}var TU=C(()=>{});var AU=C(()=>{ks();Pt();Fl();h_();Lr();gC();TU();Re.prototype._partialLoadFile=function(n,e,t,i,r=null){let s=o=>{t[e]=o,t._internalCount++,t._internalCount===6&&i(t)},a=(o,l)=>{r&&o&&r(o.status+" "+o.statusText,l)};this._loadFile(n,s,void 0,void 0,!0,a)};Re.prototype._cascadeLoadFiles=function(n,e,t,i=null){let r=[];r._internalCount=0;for(let s=0;s<6;s++)this._partialLoadFile(t[s],s,r,e,i)};Re.prototype._cascadeLoadImgs=function(n,e,t,i,r=null,s){let a=[];a._internalCount=0;for(let o=0;o<6;o++)this._partialLoadImg(i[o],o,a,n,e,t,r,s)};Re.prototype._partialLoadImg=function(n,e,t,i,r,s,a=null,o){let l=Qc();ku(n,h=>{t[e]=h,t._internalCount++,i&&i.removePendingData(l),t._internalCount===6&&s&&s(r,t)},(h,d)=>{i&&i.removePendingData(l),a&&a(h,d)},i?i.offlineProvider:null,o),i&&i.addPendingData(l)};Re.prototype.createCubeTextureBase=function(n,e,t,i,r=null,s=null,a,o=null,l=!1,c=0,f=0,h=null,d=null,u=null,m=!1,_=null){let p=h||new wi(this,7);p.isCube=!0,p.url=n,p.generateMipMaps=!i,p._lodGenerationScale=c,p._lodGenerationOffset=f,p._useSRGBBuffer=!!m&&this._caps.supportSRGBBuffers&&(this.version>1||this.isWebGPU||!!i),p!==h&&(p.label=n.substring(0,60)),this._doNotHandleContextLost||(p._extension=o,p._files=t,p._buffer=_);let g=n;this._transformTextureUrl&&!h&&(n=this._transformTextureUrl(n));let v=o!=null?o:SU(n),x=WT(v),A=(T,R)=>{p.dispose(),s?s(T,R):T&&$.Warn(T)},E=(T,R)=>{n===g?T&&A(T.status+" "+T.statusText,R):($.Warn(`Failed to load ${n}, falling back to the ${g}`),this.createCubeTextureBase(g,e,t,!!i,r,A,a,o,l,c,f,p,d,u,m,_))};if(x)x.then(T=>{let R=I=>{d&&d(p,I),T.loadCubeData(I,p,l,r,(y,M)=>{A(y,M)})};_?R(_):t&&t.length===6?T.supportCascades?this._cascadeLoadFiles(e,I=>R(I.map(y=>new Uint8Array(y))),t,A):A("Textures type does not support cascades."):this._loadFile(n,I=>R(new Uint8Array(I)),void 0,e?e.offlineProvider||null:void 0,!0,E)});else{if(!t||t.length===0)throw new Error("Cannot load cubemap because files were not defined, or the correct loader was not found.");this._cascadeLoadImgs(e,p,(T,R)=>{u&&u(T,R)},t,A)}return this._internalTexturesCache.push(p),p}});var VU={};et(VU,{DDSTools:()=>eo});function HT(n){return n.charCodeAt(0)+(n.charCodeAt(1)<<8)+(n.charCodeAt(2)<<16)+(n.charCodeAt(3)<<24)}function Ore(n){return String.fromCharCode(n&255,n>>8&255,n>>16&255,n>>24&255)}var Lre,xU,RU,bU,IU,MU,CU,yU,PU,vC,DU,LU,OU,NU,Nre,EC,Fre,wre,FU,wU,SC,BU,TC,UU,Bre,Ure,Vre,Gre,kre,Wre,Hre,eo,bM=C(()=>{xn();Pt();$0();SM();AU();Lre=542327876,xU=131072,RU=512,bU=4,IU=64,MU=131072;CU=HT("DXT1"),yU=HT("DXT3"),PU=HT("DXT5"),vC=HT("DX10"),DU=113,LU=116,OU=2,NU=10,Nre=88,EC=31,Fre=0,wre=1,FU=2,wU=3,SC=4,BU=7,TC=20,UU=21,Bre=22,Ure=23,Vre=24,Gre=25,kre=26,Wre=28,Hre=32,eo=class n{static GetDDSInfo(e){let t=new Int32Array(e.buffer,e.byteOffset,EC),i=new Int32Array(e.buffer,e.byteOffset,EC+4),r=1;t[FU]&xU&&(r=Math.max(1,t[BU]));let s=t[UU],a=s===vC?i[Hre]:0,o=0;switch(s){case DU:o=2;break;case LU:o=1;break;case vC:if(a===NU){o=2;break}if(a===OU){o=1;break}}return{width:t[SC],height:t[wU],mipmapCount:r,isFourCC:(t[TC]&bU)===bU,isRGB:(t[TC]&IU)===IU,isLuminance:(t[TC]&MU)===MU,isCube:(t[Wre]&RU)===RU,isCompressed:s===CU||s===yU||s===PU,dxgiFormat:a,textureType:o}}static _GetHalfFloatAsFloatRGBAArrayBuffer(e,t,i,r,s,a){let o=new Float32Array(r),l=new Uint16Array(s,i),c=0;for(let f=0;f>8)}static _GetRGBArrayBuffer(e,t,i,r,s,a,o,l){let c=new Uint8Array(r),f=new Uint8Array(s,i),h=0;for(let d=0;d0?r.sphericalPolynomial=wl.ConvertCubeMapToSphericalPolynomial({size:d[SC],right:f[0],left:f[1],up:f[2],down:f[3],front:f[4],back:f[5],format:5,type:1,gammaSpace:!1}):r.sphericalPolynomial=void 0}};eo.StoreLODInAlphaChannel=!1});var GU=C(()=>{hs();ks();Pt();f_();p_();bt.prototype.createPrefilteredCubeTexture=function(n,e,t,i,r=null,s=null,a,o=null,l=!0){let c=async f=>{var g;if(!f){r&&r(null);return}let h=f.texture;if(l?f.info.sphericalPolynomial&&(h._sphericalPolynomial=f.info.sphericalPolynomial):h._sphericalPolynomial=(g=h._sphericalPolynomial)!=null?g:new Xo,h._source=9,this.getCaps().textureLOD){r&&r(h);return}let d=3,u=this._gl,m=f.width;if(!m)return;let{DDSTools:_}=await Promise.resolve().then(()=>(bM(),VU)),p=[];for(let v=0;v{hs();KS();bt.prototype.createUniformBuffer=function(n,e){let t=this._gl.createBuffer();if(!t)throw new Error("Unable to create uniform buffer");let i=new ko(t);return this.bindUniformBuffer(i),n instanceof Float32Array?this._gl.bufferData(this._gl.UNIFORM_BUFFER,n,this._gl.STATIC_DRAW):this._gl.bufferData(this._gl.UNIFORM_BUFFER,new Float32Array(n),this._gl.STATIC_DRAW),this.bindUniformBuffer(null),i.references=1,i};bt.prototype.createDynamicUniformBuffer=function(n,e){let t=this._gl.createBuffer();if(!t)throw new Error("Unable to create dynamic uniform buffer");let i=new ko(t);return this.bindUniformBuffer(i),n instanceof Float32Array?this._gl.bufferData(this._gl.UNIFORM_BUFFER,n,this._gl.DYNAMIC_DRAW):this._gl.bufferData(this._gl.UNIFORM_BUFFER,new Float32Array(n),this._gl.DYNAMIC_DRAW),this.bindUniformBuffer(null),i.references=1,i};bt.prototype.updateUniformBuffer=function(n,e,t,i){this.bindUniformBuffer(n),t===void 0&&(t=0),i===void 0?e instanceof Float32Array?this._gl.bufferSubData(this._gl.UNIFORM_BUFFER,t,e):this._gl.bufferSubData(this._gl.UNIFORM_BUFFER,t,new Float32Array(e)):e instanceof Float32Array?this._gl.bufferSubData(this._gl.UNIFORM_BUFFER,0,e.subarray(t,t+i)):this._gl.bufferSubData(this._gl.UNIFORM_BUFFER,0,new Float32Array(e).subarray(t,t+i)),this.bindUniformBuffer(null)};bt.prototype.bindUniformBuffer=function(n){this._gl.bindBuffer(this._gl.UNIFORM_BUFFER,n?n.underlyingResource:null)};bt.prototype.bindUniformBufferBase=function(n,e,t){this._gl.bindBufferBase(this._gl.UNIFORM_BUFFER,e,n?n.underlyingResource:null)};bt.prototype.bindUniformBlock=function(n,e,t){let i=n.program,r=this._gl.getUniformBlockIndex(i,e);r!==4294967295&&this._gl.uniformBlockBinding(i,r,t)}});var WU=C(()=>{fa();Lr();Re.prototype.displayLoadingUI=function(){if(!ar())return;let n=this.loadingScreen;n&&n.displayLoadingUI()};Re.prototype.hideLoadingUI=function(){if(!ar())return;let n=this._loadingScreen;n&&n.hideLoadingUI()};Object.defineProperty(Re.prototype,"loadingScreen",{get:function(){return!this._loadingScreen&&this._renderingCanvas&&(this._loadingScreen=Re.DefaultLoadingScreenFactory(this._renderingCanvas)),this._loadingScreen},set:function(n){this._loadingScreen=n},enumerable:!0,configurable:!0});Object.defineProperty(Re.prototype,"loadingUIText",{set:function(n){this.loadingScreen.loadingUIText=n},enumerable:!0,configurable:!0});Object.defineProperty(Re.prototype,"loadingUIBackgroundColor",{set:function(n){this.loadingScreen.loadingUIBackgroundColor=n},enumerable:!0,configurable:!0})});var HU=C(()=>{Lr();Re.prototype.getInputElement=function(){return this._renderingCanvas};Re.prototype.getRenderingCanvasClientRect=function(){return this._renderingCanvas?this._renderingCanvas.getBoundingClientRect():null};Re.prototype.getInputElementClientRect=function(){return this._renderingCanvas?this.getInputElement().getBoundingClientRect():null};Re.prototype.getAspectRatio=function(n,e=!1){let t=n.viewport;return this.getRenderWidth(e)*t.width/(this.getRenderHeight(e)*t.height)};Re.prototype.getScreenAspectRatio=function(){return this.getRenderWidth(!0)/this.getRenderHeight(!0)};Re.prototype._verifyPointerLock=function(){var n;(n=this._onPointerLockChange)==null||n.call(this)}});var AC=C(()=>{Lr();Re.prototype.setAlphaEquation=function(n,e=0){if(this._alphaEquation[e]!==n){switch(n){case 0:this._alphaState.setAlphaEquationParameters(32774,32774,e);break;case 1:this._alphaState.setAlphaEquationParameters(32778,32778,e);break;case 2:this._alphaState.setAlphaEquationParameters(32779,32779,e);break;case 3:this._alphaState.setAlphaEquationParameters(32776,32776,e);break;case 4:this._alphaState.setAlphaEquationParameters(32775,32775,e);break;case 5:this._alphaState.setAlphaEquationParameters(32775,32774,e);break}this._alphaEquation[e]=n}}});var zU=C(()=>{Lr();AC();Re.prototype.getInputElement=function(){return this._renderingCanvas};Re.prototype.getDepthFunction=function(){return this._depthCullingState.depthFunc};Re.prototype.setDepthFunction=function(n){this._depthCullingState.depthFunc=n};Re.prototype.setDepthFunctionToGreater=function(){this.setDepthFunction(516)};Re.prototype.setDepthFunctionToGreaterOrEqual=function(){this.setDepthFunction(518)};Re.prototype.setDepthFunctionToLess=function(){this.setDepthFunction(513)};Re.prototype.setDepthFunctionToLessOrEqual=function(){this.setDepthFunction(515)};Re.prototype.getDepthWrite=function(){return this._depthCullingState.depthMask};Re.prototype.setDepthWrite=function(n){this._depthCullingState.depthMask=n};Re.prototype.setAlphaConstants=function(n,e,t,i){this._alphaState.setAlphaBlendConstants(n,e,t,i)};Re.prototype.getAlphaMode=function(n=0){return this._alphaMode[n]};Re.prototype.getAlphaEquation=function(n=0){return this._alphaEquation[n]}});var XU=C(()=>{Lr();AC();Re.prototype.getStencilBuffer=function(){return this._stencilState.stencilTest};Re.prototype.setStencilBuffer=function(n){this._stencilState.stencilTest=n};Re.prototype.getStencilMask=function(){return this._stencilState.stencilMask};Re.prototype.setStencilMask=function(n){this._stencilState.stencilMask=n};Re.prototype.getStencilFunction=function(){return this._stencilState.stencilFunc};Re.prototype.getStencilBackFunction=function(){return this._stencilState.stencilBackFunc};Re.prototype.getStencilFunctionReference=function(){return this._stencilState.stencilFuncRef};Re.prototype.getStencilFunctionMask=function(){return this._stencilState.stencilFuncMask};Re.prototype.setStencilFunction=function(n){this._stencilState.stencilFunc=n};Re.prototype.setStencilBackFunction=function(n){this._stencilState.stencilBackFunc=n};Re.prototype.setStencilFunctionReference=function(n){this._stencilState.stencilFuncRef=n};Re.prototype.setStencilFunctionMask=function(n){this._stencilState.stencilFuncMask=n};Re.prototype.getStencilOperationFail=function(){return this._stencilState.stencilOpStencilFail};Re.prototype.getStencilBackOperationFail=function(){return this._stencilState.stencilBackOpStencilFail};Re.prototype.getStencilOperationDepthFail=function(){return this._stencilState.stencilOpDepthFail};Re.prototype.getStencilBackOperationDepthFail=function(){return this._stencilState.stencilBackOpDepthFail};Re.prototype.getStencilOperationPass=function(){return this._stencilState.stencilOpStencilDepthPass};Re.prototype.getStencilBackOperationPass=function(){return this._stencilState.stencilBackOpStencilDepthPass};Re.prototype.setStencilOperationFail=function(n){this._stencilState.stencilOpStencilFail=n};Re.prototype.setStencilBackOperationFail=function(n){this._stencilState.stencilBackOpStencilFail=n};Re.prototype.setStencilOperationDepthFail=function(n){this._stencilState.stencilOpDepthFail=n};Re.prototype.setStencilBackOperationDepthFail=function(n){this._stencilState.stencilBackOpDepthFail=n};Re.prototype.setStencilOperationPass=function(n){this._stencilState.stencilOpStencilDepthPass=n};Re.prototype.setStencilBackOperationPass=function(n){this._stencilState.stencilBackOpStencilDepthPass=n};Re.prototype.cacheStencilState=function(){this._cachedStencilBuffer=this.getStencilBuffer(),this._cachedStencilFunction=this.getStencilFunction(),this._cachedStencilMask=this.getStencilMask(),this._cachedStencilOperationPass=this.getStencilOperationPass(),this._cachedStencilOperationFail=this.getStencilOperationFail(),this._cachedStencilOperationDepthFail=this.getStencilOperationDepthFail(),this._cachedStencilReference=this.getStencilFunctionReference()};Re.prototype.restoreStencilState=function(){this.setStencilFunction(this._cachedStencilFunction),this.setStencilMask(this._cachedStencilMask),this.setStencilBuffer(this._cachedStencilBuffer),this.setStencilOperationPass(this._cachedStencilOperationPass),this.setStencilOperationFail(this._cachedStencilOperationFail),this.setStencilOperationDepthFail(this._cachedStencilOperationDepthFail),this.setStencilFunctionReference(this._cachedStencilReference)}});var YU=C(()=>{Lr();Re.prototype.getRenderPassNames=function(){return this._renderPassNames};Re.prototype.getCurrentRenderPassName=function(){return this._renderPassNames[this.currentRenderPassId]};Re.prototype.createRenderPassId=function(n){let e=++Re._RenderPassIdCounter;return this._renderPassNames[e]=n!=null?n:"NONAME",e};Re.prototype.releaseRenderPassId=function(n){this._renderPassNames[n]=void 0;for(let e=0;e{Lr();Re.prototype._loadFileAsync=async function(n,e,t){return await new Promise((i,r)=>{this._loadFile(n,s=>{i(s)},void 0,e,t,(s,a)=>{r(a)})})}});var jU=C(()=>{gC();Lr();Re.GetCompatibleTextureLoader=WT});function zre(n){!n||!n.setAttribute||(n.setAttribute("touch-action","none"),n.style.touchAction="none",n.style.webkitTapHighlightColor="transparent")}function qU(n,e,t){n._onCanvasFocus=()=>{n.onCanvasFocusObservable.notifyObservers(n)},n._onCanvasBlur=()=>{n.onCanvasBlurObservable.notifyObservers(n)},n._onCanvasContextMenu=r=>{n.disableContextMenu&&r.preventDefault()},e.addEventListener("focus",n._onCanvasFocus),e.addEventListener("blur",n._onCanvasBlur),e.addEventListener("contextmenu",n._onCanvasContextMenu),n._onBlur=()=>{n.disablePerformanceMonitorInBackground&&n.performanceMonitor.disable(),n._windowIsBackground=!0},n._onFocus=()=>{n.disablePerformanceMonitorInBackground&&n.performanceMonitor.enable(),n._windowIsBackground=!1},n._onCanvasPointerOut=r=>{document.elementFromPoint(r.clientX,r.clientY)!==e&&n.onCanvasPointerOutObservable.notifyObservers(r)};let i=n.getHostWindow();i&&typeof i.addEventListener=="function"&&(i.addEventListener("blur",n._onBlur),i.addEventListener("focus",n._onFocus)),e.addEventListener("pointerout",n._onCanvasPointerOut),t.doNotHandleTouchAction||zre(e),!Re.audioEngine&&t.audioEngine&&Re.AudioEngineFactory&&(Re.audioEngine=Re.AudioEngineFactory(n.getRenderingCanvas(),n.getAudioContext(),n.getAudioDestination())),jc()&&(n._onFullscreenChange=()=>{n.isFullscreen=!!document.fullscreenElement,n.isFullscreen&&n._pointerLockRequested&&e&&xC(e)},document.addEventListener("fullscreenchange",n._onFullscreenChange,!1),document.addEventListener("webkitfullscreenchange",n._onFullscreenChange,!1),n._onPointerLockChange=()=>{n.isPointerLock=document.pointerLockElement===e},document.addEventListener("pointerlockchange",n._onPointerLockChange,!1),document.addEventListener("webkitpointerlockchange",n._onPointerLockChange,!1)),n.enableOfflineSupport=Re.OfflineProviderFactory!==void 0,n._deterministicLockstep=!!t.deterministicLockstep,n._lockstepMaxSteps=t.lockstepMaxSteps||0,n._timeStep=t.timeStep||1/60}function ZU(n,e){Le.Instances.length===1&&Re.audioEngine&&(Re.audioEngine.dispose(),Re.audioEngine=null);let t=n.getHostWindow();t&&typeof t.removeEventListener=="function"&&(t.removeEventListener("blur",n._onBlur),t.removeEventListener("focus",n._onFocus)),e&&(e.removeEventListener("focus",n._onCanvasFocus),e.removeEventListener("blur",n._onCanvasBlur),e.removeEventListener("pointerout",n._onCanvasPointerOut),e.removeEventListener("contextmenu",n._onCanvasContextMenu)),jc()&&(document.removeEventListener("fullscreenchange",n._onFullscreenChange),document.removeEventListener("mozfullscreenchange",n._onFullscreenChange),document.removeEventListener("webkitfullscreenchange",n._onFullscreenChange),document.removeEventListener("msfullscreenchange",n._onFullscreenChange),document.removeEventListener("pointerlockchange",n._onPointerLockChange),document.removeEventListener("mspointerlockchange",n._onPointerLockChange),document.removeEventListener("mozpointerlockchange",n._onPointerLockChange),document.removeEventListener("webkitpointerlockchange",n._onPointerLockChange))}function QU(n){let e=document.createElement("span");e.textContent="Hg",e.style.font=n;let t=document.createElement("div");t.style.display="inline-block",t.style.width="1px",t.style.height="0px",t.style.verticalAlign="bottom";let i=document.createElement("div");i.style.whiteSpace="nowrap",i.appendChild(e),i.appendChild(t),document.body.appendChild(i);let r,s;try{s=t.getBoundingClientRect().top-e.getBoundingClientRect().top,t.style.verticalAlign="baseline",r=t.getBoundingClientRect().top-e.getBoundingClientRect().top}finally{document.body.removeChild(i)}return{ascent:r,height:s,descent:s-r}}async function JU(n,e,t){return await new Promise((i,r)=>{let s=new Image;s.onload=()=>{s.decode().then(()=>{n.createImageBitmap(s,t).then(a=>{i(a)})})},s.onerror=()=>{r(`Error loading image ${s.src}`)},s.src=e})}function $U(n,e,t,i){let s=n.createCanvas(t,i).getContext("2d");if(!s)throw new Error("Unable to get 2d context for resizeImageBitmap");return s.drawImage(e,0,0),s.getImageData(0,0,t,i).data}function eV(n){let e=n.requestFullscreen||n.webkitRequestFullscreen;e&&e.call(n)}function tV(){let n=document;document.exitFullscreen?document.exitFullscreen():n.webkitCancelFullScreen&&n.webkitCancelFullScreen()}function xC(n){if(n.requestPointerLock){let e=n.requestPointerLock();e instanceof Promise?e.then(()=>{n.focus()}).catch(()=>{}):n.focus()}}function iV(){document.exitPointerLock&&document.exitPointerLock()}var rV=C(()=>{fa();Lr();Pi()});var we,RC=C(()=>{ks();Pi();hs();e3();KS();Pt();V0();t3();s3();a3();o3();l3();h3();d3();u3();GU();kU();WU();HU();zU();XU();YU();H0();KU();jU();Lr();rV();wM();Go();we=class n extends bt{static get NpmPackage(){return Re.NpmPackage}static get Version(){return Re.Version}static get Instances(){return Le.Instances}static get LastCreatedEngine(){return Le.LastCreatedEngine}static get LastCreatedScene(){return Le.LastCreatedScene}static DefaultLoadingScreenFactory(e){return Re.DefaultLoadingScreenFactory(e)}get _supportsHardwareTextureRescaling(){return!!n._RescalePostProcessFactory}_measureFps(){this._performanceMonitor.sampleFrame(),this._fps=this._performanceMonitor.averageFPS,this._deltaTime=this._performanceMonitor.instantaneousFrameTime||0}get performanceMonitor(){return this._performanceMonitor}constructor(e,t,i,r=!1){super(e,t,i,r),this.customAnimationFrameRequester=null,this._performanceMonitor=new qS,this._drawCalls=new qo,e&&(this._features.supportRenderPasses=!0)}_initGLContext(){super._initGLContext(),this._rescalePostProcess=null}_sharedInit(e){super._sharedInit(e),qU(this,e,this._creationOptions)}resizeImageBitmap(e,t,i){return $U(this,e,t,i)}async _createImageBitmapFromSource(e,t){return await JU(this,e,t)}switchFullscreen(e){this.isFullscreen?this.exitFullscreen():this.enterFullscreen(e)}enterFullscreen(e){this.isFullscreen||(this._pointerLockRequested=e,this._renderingCanvas&&eV(this._renderingCanvas))}exitFullscreen(){this.isFullscreen&&tV()}setDitheringState(e){e?this._gl.enable(this._gl.DITHER):this._gl.disable(this._gl.DITHER)}setRasterizerState(e){e?this._gl.disable(this._gl.RASTERIZER_DISCARD):this._gl.enable(this._gl.RASTERIZER_DISCARD)}setDirectViewport(e,t,i,r){let s=this._cachedViewport;return this._cachedViewport=null,this._viewport(e,t,i,r),s}scissorClear(e,t,i,r,s){this.enableScissor(e,t,i,r),this.clear(s,!0,!0,!0),this.disableScissor()}enableScissor(e,t,i,r){let s=this._gl;s.enable(s.SCISSOR_TEST),s.scissor(e,t,i,r)}disableScissor(){let e=this._gl;e.disable(e.SCISSOR_TEST)}getVertexShaderSource(e){let t=this._gl.getAttachedShaders(e);return t?this._gl.getShaderSource(t[0]):null}getFragmentShaderSource(e){let t=this._gl.getAttachedShaders(e);return t?this._gl.getShaderSource(t[1]):null}set framebufferDimensionsObject(e){this._framebufferDimensionsObject=e,this._framebufferDimensionsObject&&this.onResizeObservable.notifyObservers(this)}_rebuildBuffers(){for(let e of this.scenes)e.resetCachedMaterial(),e._rebuildGeometries();for(let e of this._virtualScenes)e.resetCachedMaterial(),e._rebuildGeometries();super._rebuildBuffers()}getFontOffset(e){return QU(e)}_cancelFrame(){if(this.customAnimationFrameRequester){if(this._frameHandler!==0){this._frameHandler=0;let{cancelAnimationFrame:e}=this.customAnimationFrameRequester;e&&e(this.customAnimationFrameRequester.requestID)}}else super._cancelFrame()}_renderLoop(e){this._processFrame(e),this._activeRenderLoops.length>0&&this._frameHandler===0&&(this.customAnimationFrameRequester?(this.customAnimationFrameRequester.requestID=this._queueNewFrame(this.customAnimationFrameRequester.renderFunction||this._boundRenderFunction,this.customAnimationFrameRequester),this._frameHandler=this.customAnimationFrameRequester.requestID):this._frameHandler=this._queueNewFrame(this._boundRenderFunction,this.getHostWindow()))}enterPointerlock(){this._renderingCanvas&&xC(this._renderingCanvas)}exitPointerlock(){iV()}beginFrame(){this._measureFps(),super.beginFrame()}_deletePipelineContext(e){let t=e;t&&t.program&&t.transformFeedback&&(this.deleteTransformFeedback(t.transformFeedback),t.transformFeedback=null),super._deletePipelineContext(e)}createShaderProgram(e,t,i,r,s,a=null){s=s||this._gl,this.onBeforeShaderCompilationObservable.notifyObservers(this);let o=super.createShaderProgram(e,t,i,r,s,a);return this.onAfterShaderCompilationObservable.notifyObservers(this),o}_createShaderProgram(e,t,i,r,s=null){let a=r.createProgram();if(e.program=a,!a)throw new Error("Unable to create program");if(r.attachShader(a,t),r.attachShader(a,i),this.webGLVersion>1&&s){let o=this.createTransformFeedback();this.bindTransformFeedback(o),this.setTranformFeedbackVaryings(a,s),e.transformFeedback=o}return r.linkProgram(a),this.webGLVersion>1&&s&&this.bindTransformFeedback(null),e.context=r,e.vertexShader=t,e.fragmentShader=i,e.isParallelCompiled||this._finalizePipelineContext(e),a}_releaseTexture(e){super._releaseTexture(e)}_releaseRenderTargetWrapper(e){super._releaseRenderTargetWrapper(e);for(let t of this.scenes){for(let i of t.postProcesses)i._outputTexture===e&&(i._outputTexture=null);for(let i of t.cameras)for(let r of i._postProcesses)r&&r._outputTexture===e&&(r._outputTexture=null)}}_rescaleTexture(e,t,i,r,s){this._gl.texParameteri(this._gl.TEXTURE_2D,this._gl.TEXTURE_MAG_FILTER,this._gl.LINEAR),this._gl.texParameteri(this._gl.TEXTURE_2D,this._gl.TEXTURE_MIN_FILTER,this._gl.LINEAR),this._gl.texParameteri(this._gl.TEXTURE_2D,this._gl.TEXTURE_WRAP_S,this._gl.CLAMP_TO_EDGE),this._gl.texParameteri(this._gl.TEXTURE_2D,this._gl.TEXTURE_WRAP_T,this._gl.CLAMP_TO_EDGE);let a=this.createRenderTargetTexture({width:t.width,height:t.height},{generateMipMaps:!1,type:0,samplingMode:2,generateDepthBuffer:!1,generateStencilBuffer:!1});if(!this._rescalePostProcess&&n._RescalePostProcessFactory&&(this._rescalePostProcess=n._RescalePostProcessFactory(this)),this._rescalePostProcess){this._rescalePostProcess.externalTextureSamplerBinding=!0;let o=()=>{this._rescalePostProcess.onApply=function(f){f._bindTexture("textureSampler",e)};let c=i;c||(c=this.scenes[this.scenes.length-1]),c.postProcessManager.directRender([this._rescalePostProcess],a,!0),this._bindTextureDirectly(this._gl.TEXTURE_2D,t,!0),this._gl.copyTexImage2D(this._gl.TEXTURE_2D,0,r,0,0,t.width,t.height,0),this.unBindFramebuffer(a),a.dispose(),s&&s()},l=this._rescalePostProcess.getEffect();l?l.executeWhenCompiled(o):this._rescalePostProcess.onEffectCreatedObservable.addOnce(c=>{c.executeWhenCompiled(o)})}}wrapWebGLTexture(e,t=!1,i=3,r=0,s=0){let a=new xu(e,this._gl),o=new wi(this,0,!0);return o._hardwareTexture=a,o.baseWidth=r,o.baseHeight=s,o.width=r,o.height=s,o.isReady=!0,o.useMipMaps=t,this.updateTextureSamplingMode(i,o),o}_uploadImageToTexture(e,t,i=0,r=0){let s=this._gl,a=this._getWebGLTextureType(e.type),o=this._getInternalFormat(e.format),l=this._getRGBABufferInternalSizedFormat(e.type,o),c=e.isCube?s.TEXTURE_CUBE_MAP:s.TEXTURE_2D;this._bindTextureDirectly(c,e,!0),this._unpackFlipY(e.invertY);let f=s.TEXTURE_2D;e.isCube&&(f=s.TEXTURE_CUBE_MAP_POSITIVE_X+i),s.texImage2D(f,r,l,o,a,t),this._bindTextureDirectly(c,null,!0)}updateTextureComparisonFunction(e,t){if(this.webGLVersion===1){$.Error("WebGL 1 does not support texture comparison.");return}let i=this._gl;e.isCube?(this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP,e,!0),t===0?(i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_COMPARE_FUNC,515),i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_COMPARE_MODE,i.NONE)):(i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_COMPARE_FUNC,t),i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_COMPARE_MODE,i.COMPARE_REF_TO_TEXTURE)),this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP,null)):(this._bindTextureDirectly(this._gl.TEXTURE_2D,e,!0),t===0?(i.texParameteri(i.TEXTURE_2D,i.TEXTURE_COMPARE_FUNC,515),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_COMPARE_MODE,i.NONE)):(i.texParameteri(i.TEXTURE_2D,i.TEXTURE_COMPARE_FUNC,t),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_COMPARE_MODE,i.COMPARE_REF_TO_TEXTURE)),this._bindTextureDirectly(this._gl.TEXTURE_2D,null)),e._comparisonFunction=t}createInstancesBuffer(e){let t=this._gl.createBuffer();if(!t)throw new Error("Unable to create instance buffer");let i=new ko(t);return i.capacity=e,this.bindArrayBuffer(i),this._gl.bufferData(this._gl.ARRAY_BUFFER,e,this._gl.DYNAMIC_DRAW),i.references=1,i}deleteInstancesBuffer(e){this._gl.deleteBuffer(e)}async _clientWaitAsync(e,t=0,i=10){let r=this._gl;return await new Promise((s,a)=>{Vo(()=>{let o=r.clientWaitSync(e,t,0);if(o==r.WAIT_FAILED)throw new Error("clientWaitSync failed");return o!=r.TIMEOUT_EXPIRED},s,a,i)})}_readPixelsAsync(e,t,i,r,s,a,o){if(this._webGLVersion<2)throw new Error("_readPixelsAsync only work on WebGL2+");let l=this._gl,c=l.createBuffer();l.bindBuffer(l.PIXEL_PACK_BUFFER,c),l.bufferData(l.PIXEL_PACK_BUFFER,o.byteLength,l.STREAM_READ),l.readPixels(e,t,i,r,s,a,0),l.bindBuffer(l.PIXEL_PACK_BUFFER,null);let f=l.fenceSync(l.SYNC_GPU_COMMANDS_COMPLETE,0);return f?(l.flush(),this._clientWaitAsync(f,0,10).then(()=>(l.deleteSync(f),l.bindBuffer(l.PIXEL_PACK_BUFFER,c),l.getBufferSubData(l.PIXEL_PACK_BUFFER,0,o),l.bindBuffer(l.PIXEL_PACK_BUFFER,null),l.deleteBuffer(c),o))):null}dispose(){this.hideLoadingUI(),this._rescalePostProcess&&this._rescalePostProcess.dispose(),ZU(this,this._renderingCanvas),super.dispose()}};we.ALPHA_DISABLE=0;we.ALPHA_ADD=1;we.ALPHA_COMBINE=2;we.ALPHA_SUBTRACT=3;we.ALPHA_MULTIPLY=4;we.ALPHA_MAXIMIZED=5;we.ALPHA_ONEONE=6;we.ALPHA_PREMULTIPLIED=7;we.ALPHA_PREMULTIPLIED_PORTERDUFF=8;we.ALPHA_INTERPOLATE=9;we.ALPHA_SCREENMODE=10;we.DELAYLOADSTATE_NONE=0;we.DELAYLOADSTATE_LOADED=1;we.DELAYLOADSTATE_LOADING=2;we.DELAYLOADSTATE_NOTLOADED=4;we.NEVER=512;we.ALWAYS=519;we.LESS=513;we.EQUAL=514;we.LEQUAL=515;we.GREATER=516;we.GEQUAL=518;we.NOTEQUAL=517;we.KEEP=7680;we.REPLACE=7681;we.INCR=7682;we.DECR=7683;we.INVERT=5386;we.INCR_WRAP=34055;we.DECR_WRAP=34056;we.TEXTURE_CLAMP_ADDRESSMODE=0;we.TEXTURE_WRAP_ADDRESSMODE=1;we.TEXTURE_MIRROR_ADDRESSMODE=2;we.TEXTUREFORMAT_ALPHA=0;we.TEXTUREFORMAT_LUMINANCE=1;we.TEXTUREFORMAT_LUMINANCE_ALPHA=2;we.TEXTUREFORMAT_RGB=4;we.TEXTUREFORMAT_RGBA=5;we.TEXTUREFORMAT_RED=6;we.TEXTUREFORMAT_R=6;we.TEXTUREFORMAT_R16_UNORM=33322;we.TEXTUREFORMAT_RG16_UNORM=33324;we.TEXTUREFORMAT_RGB16_UNORM=32852;we.TEXTUREFORMAT_RGBA16_UNORM=32859;we.TEXTUREFORMAT_R16_SNORM=36760;we.TEXTUREFORMAT_RG16_SNORM=36761;we.TEXTUREFORMAT_RGB16_SNORM=36762;we.TEXTUREFORMAT_RGBA16_SNORM=36763;we.TEXTUREFORMAT_RG=7;we.TEXTUREFORMAT_RED_INTEGER=8;we.TEXTUREFORMAT_R_INTEGER=8;we.TEXTUREFORMAT_RG_INTEGER=9;we.TEXTUREFORMAT_RGB_INTEGER=10;we.TEXTUREFORMAT_RGBA_INTEGER=11;we.TEXTURETYPE_UNSIGNED_BYTE=0;we.TEXTURETYPE_UNSIGNED_INT=0;we.TEXTURETYPE_FLOAT=1;we.TEXTURETYPE_HALF_FLOAT=2;we.TEXTURETYPE_BYTE=3;we.TEXTURETYPE_SHORT=4;we.TEXTURETYPE_UNSIGNED_SHORT=5;we.TEXTURETYPE_INT=6;we.TEXTURETYPE_UNSIGNED_INTEGER=7;we.TEXTURETYPE_UNSIGNED_SHORT_4_4_4_4=8;we.TEXTURETYPE_UNSIGNED_SHORT_5_5_5_1=9;we.TEXTURETYPE_UNSIGNED_SHORT_5_6_5=10;we.TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV=11;we.TEXTURETYPE_UNSIGNED_INT_24_8=12;we.TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV=13;we.TEXTURETYPE_UNSIGNED_INT_5_9_9_9_REV=14;we.TEXTURETYPE_FLOAT_32_UNSIGNED_INT_24_8_REV=15;we.TEXTURE_NEAREST_SAMPLINGMODE=1;we.TEXTURE_BILINEAR_SAMPLINGMODE=2;we.TEXTURE_TRILINEAR_SAMPLINGMODE=3;we.TEXTURE_NEAREST_NEAREST_MIPLINEAR=8;we.TEXTURE_LINEAR_LINEAR_MIPNEAREST=11;we.TEXTURE_LINEAR_LINEAR_MIPLINEAR=3;we.TEXTURE_NEAREST_NEAREST_MIPNEAREST=4;we.TEXTURE_NEAREST_LINEAR_MIPNEAREST=5;we.TEXTURE_NEAREST_LINEAR_MIPLINEAR=6;we.TEXTURE_NEAREST_LINEAR=7;we.TEXTURE_NEAREST_NEAREST=1;we.TEXTURE_LINEAR_NEAREST_MIPNEAREST=9;we.TEXTURE_LINEAR_NEAREST_MIPLINEAR=10;we.TEXTURE_LINEAR_LINEAR=2;we.TEXTURE_LINEAR_NEAREST=12;we.TEXTURE_EXPLICIT_MODE=0;we.TEXTURE_SPHERICAL_MODE=1;we.TEXTURE_PLANAR_MODE=2;we.TEXTURE_CUBIC_MODE=3;we.TEXTURE_PROJECTION_MODE=4;we.TEXTURE_SKYBOX_MODE=5;we.TEXTURE_INVCUBIC_MODE=6;we.TEXTURE_EQUIRECTANGULAR_MODE=7;we.TEXTURE_FIXED_EQUIRECTANGULAR_MODE=8;we.TEXTURE_FIXED_EQUIRECTANGULAR_MIRRORED_MODE=9;we.SCALEMODE_FLOOR=1;we.SCALEMODE_NEAREST=2;we.SCALEMODE_CEILING=3});var bC,_i,Hs=C(()=>{kt();Ve();Ut();hi();Pi();an();_r();bC=class{constructor(){this._doNotSerialize=!1,this._isDisposed=!1,this._sceneRootNodesIndex=-1,this._isEnabled=!0,this._isParentEnabled=!0,this._isReady=!0,this._onEnabledStateChangedObservable=new ee,this._onClonedObservable=new ee,this._inheritVisibility=!1,this._isVisible=!0}},_i=class n{static AddNodeConstructor(e,t){this._NodeConstructors[e]=t}static Construct(e,t,i,r){let s=this._NodeConstructors[e];return s?s(t,i,r):null}set accessibilityTag(e){this._accessibilityTag=e,this.onAccessibilityTagChangedObservable.notifyObservers(e)}get accessibilityTag(){return this._accessibilityTag}get doNotSerialize(){return this._nodeDataStorage._doNotSerialize?!0:this._parentNode?this._parentNode.doNotSerialize:!1}set doNotSerialize(e){this._nodeDataStorage._doNotSerialize=e}isDisposed(){return this._nodeDataStorage._isDisposed}set parent(e){if(this._parentNode===e)return;let t=this._parentNode;if(this._parentNode&&this._parentNode._children!==void 0&&this._parentNode._children!==null){let i=this._parentNode._children.indexOf(this);i!==-1&&this._parentNode._children.splice(i,1),!e&&!this._nodeDataStorage._isDisposed&&this._addToSceneRootNodes()}this._parentNode=e,this._isDirty=!0,this._parentNode&&((this._parentNode._children===void 0||this._parentNode._children===null)&&(this._parentNode._children=new Array),this._parentNode._children.push(this),t||this._removeFromSceneRootNodes()),this._syncParentEnabledState()}get parent(){return this._parentNode}get inheritVisibility(){return this._nodeDataStorage._inheritVisibility}set inheritVisibility(e){this._nodeDataStorage._inheritVisibility=e}get isVisible(){return this.inheritVisibility&&this._parentNode&&!this._parentNode.isVisible?!1:this._nodeDataStorage._isVisible}set isVisible(e){this._nodeDataStorage._isVisible=e}_serializeAsParent(e){e.parentId=this.uniqueId}_addToSceneRootNodes(){this._nodeDataStorage._sceneRootNodesIndex===-1&&(this._nodeDataStorage._sceneRootNodesIndex=this._scene.rootNodes.length,this._scene.rootNodes.push(this))}_removeFromSceneRootNodes(){if(this._nodeDataStorage._sceneRootNodesIndex!==-1){let e=this._scene.rootNodes,t=e.length-1;e[this._nodeDataStorage._sceneRootNodesIndex]=e[t],e[this._nodeDataStorage._sceneRootNodesIndex]._nodeDataStorage._sceneRootNodesIndex=this._nodeDataStorage._sceneRootNodesIndex,this._scene.rootNodes.pop(),this._nodeDataStorage._sceneRootNodesIndex=-1}}get animationPropertiesOverride(){return this._animationPropertiesOverride?this._animationPropertiesOverride:this._scene.animationPropertiesOverride}set animationPropertiesOverride(e){this._animationPropertiesOverride=e}getClassName(){return"Node"}set onDispose(e){this._onDisposeObserver&&this.onDisposeObservable.remove(this._onDisposeObserver),this._onDisposeObserver=this.onDisposeObservable.add(e)}get onEnabledStateChangedObservable(){return this._nodeDataStorage._onEnabledStateChangedObservable}get onClonedObservable(){return this._nodeDataStorage._onClonedObservable}constructor(e,t=null,i=!0){this._isDirty=!1,this._nodeDataStorage=new bC,this.state="",this.metadata=null,this.reservedDataStore=null,this._accessibilityTag=null,this.onAccessibilityTagChangedObservable=new ee,this._parentContainer=null,this.animations=[],this._ranges={},this.onReady=null,this._currentRenderId=-1,this._parentUpdateId=-1,this._childUpdateId=-1,this._waitingParentId=null,this._waitingParentInstanceIndex=null,this._waitingParsedUniqueId=null,this._cache={},this._parentNode=null,this._children=null,this._worldMatrix=K.Identity(),this._worldMatrixDeterminant=0,this._worldMatrixDeterminantIsDirty=!0,this._animationPropertiesOverride=null,this._isNode=!0,this.onDisposeObservable=new ee,this._onDisposeObserver=null,this._behaviors=new Array,this.name=e,this.id=e,this._scene=t||Le.LastCreatedScene,this.uniqueId=this._scene.getUniqueId(),this._initCache(),i&&this._addToSceneRootNodes()}getScene(){return this._scene}getEngine(){return this._scene.getEngine()}addBehavior(e,t=!1){return this._behaviors.indexOf(e)!==-1?this:(e.init(),this._scene.isLoading&&!t?this._scene.onDataLoadedObservable.addOnce(()=>{this._behaviors.includes(e)&&e.attach(this)}):e.attach(this),this._behaviors.push(e),this)}removeBehavior(e){let t=this._behaviors.indexOf(e);return t===-1?this:(this._behaviors[t].detach(),this._behaviors.splice(t,1),this)}get behaviors(){return this._behaviors}getBehaviorByName(e){for(let t of this._behaviors)if(t.name===e)return t;return null}getWorldMatrix(){return this._currentRenderId!==this._scene.getRenderId()&&this.computeWorldMatrix(),this._worldMatrix}_getWorldMatrixDeterminant(){return this._worldMatrixDeterminantIsDirty&&(this._worldMatrixDeterminantIsDirty=!1,this._worldMatrixDeterminant=this._worldMatrix.determinant()),this._worldMatrixDeterminant}get worldMatrixFromCache(){return this._worldMatrix}_initCache(){this._cache={}}updateCache(e){!e&&this.isSynchronized()||this._updateCache()}_getActionManagerForTrigger(e,t=!0){return this.parent?this.parent._getActionManagerForTrigger(e,!1):null}_updateCache(e){}_isSynchronized(){return!0}_markSyncedWithParent(){this._parentNode&&(this._parentUpdateId=this._parentNode._childUpdateId)}isSynchronizedWithParent(){return this._parentNode?this._parentNode._isDirty||this._parentUpdateId!==this._parentNode._childUpdateId?!1:this._parentNode.isSynchronized():!0}isSynchronized(){return this._parentNode&&!this.isSynchronizedWithParent()?!1:this._isSynchronized()}isReady(e=!1){return this._nodeDataStorage._isReady}markAsDirty(e){return this._currentRenderId=Number.MAX_VALUE,this._isDirty=!0,this}isEnabled(e=!0){return e===!1?this._nodeDataStorage._isEnabled:this._nodeDataStorage._isEnabled?this._nodeDataStorage._isParentEnabled:!1}_syncParentEnabledState(){if(this._nodeDataStorage._isParentEnabled=this._parentNode?this._parentNode.isEnabled():!0,this._children)for(let e of this._children)e._syncParentEnabledState()}setEnabled(e){this._nodeDataStorage._isEnabled!==e&&(this._nodeDataStorage._isEnabled=e,this._syncParentEnabledState(),this._nodeDataStorage._onEnabledStateChangedObservable.notifyObservers(e))}isDescendantOf(e){return this.parent?this.parent===e?!0:this.parent.isDescendantOf(e):!1}_getDescendants(e,t=!1,i){if(this._children)for(let r=0;r(!t||t(r))&&r.cullingStrategy!==void 0),i}getChildren(e,t=!0){return this.getDescendants(t,e)}_setReady(e){if(e!==this._nodeDataStorage._isReady){if(!e){this._nodeDataStorage._isReady=!1;return}this.onReady&&this.onReady(this),this._nodeDataStorage._isReady=!0}}getAnimationByName(e){for(let t=0;tnew n(e,this.getScene()),this);if(t&&(r.parent=t),!i){let s=this.getDescendants(!0);for(let a=0;a{throw Xe("AnimationRange")};_i._NodeConstructors={};P([F()],_i.prototype,"name",void 0);P([F()],_i.prototype,"id",void 0);P([F()],_i.prototype,"uniqueId",void 0);P([F()],_i.prototype,"state",void 0);P([F()],_i.prototype,"metadata",void 0)});function IC(n,e,t){try{let i=n.next();i.done?e(i):i.value?i.value.then(()=>{i.value=void 0,e(i)},t):e(i)}catch(i){t(i)}}function nV(n=25){let e;return(t,i,r)=>{let s=performance.now();e===void 0||s-e>n?(e=s,setTimeout(()=>{IC(t,i,r)},0)):IC(t,i,r)}}function sV(n,e,t,i,r){let s=()=>{let a,o=l=>{l.done?t(l.value):a===void 0?a=!0:s()};do a=void 0,!r||!r.aborted?e(n,o,i):i(new Error("Aborted")),a===void 0&&(a=!1);while(a)};s()}function U_(n,e){let t;return sV(n,IC,i=>t=i,i=>{throw i},e),t}async function aV(n,e,t){return await new Promise((i,r)=>{sV(n,e,i,r,t)})}function oV(n,e){return(...t)=>U_(n(...t),e)}var MC=C(()=>{});var ut,Jo=C(()=>{kt();Ut();$a();Ci();hi();Ve();Hs();Pt();Vi();an();Nu();eT();_r();ut=class n extends _i{get position(){return this._position}set position(e){this._position=e}set upVector(e){this._upVector=e}get upVector(){return this._upVector}get screenArea(){var i,r,s,a;let e,t;if(this.mode===n.PERSPECTIVE_CAMERA)this.fovMode===n.FOVMODE_VERTICAL_FIXED?(t=this.minZ*2*Math.tan(this.fov/2),e=this.getEngine().getAspectRatio(this)*t):(e=this.minZ*2*Math.tan(this.fov/2),t=e/this.getEngine().getAspectRatio(this));else{let o=this.getEngine().getRenderWidth()/2,l=this.getEngine().getRenderHeight()/2;e=((i=this.orthoRight)!=null?i:o)-((r=this.orthoLeft)!=null?r:-o),t=((s=this.orthoTop)!=null?s:l)-((a=this.orthoBottom)!=null?a:-l)}return e*t}set orthoLeft(e){this._orthoLeft=e;for(let t of this._rigCameras)t.orthoLeft=e}get orthoLeft(){return this._orthoLeft}set orthoRight(e){this._orthoRight=e;for(let t of this._rigCameras)t.orthoRight=e}get orthoRight(){return this._orthoRight}set orthoBottom(e){this._orthoBottom=e;for(let t of this._rigCameras)t.orthoBottom=e}get orthoBottom(){return this._orthoBottom}set orthoTop(e){this._orthoTop=e;for(let t of this._rigCameras)t.orthoTop=e}get orthoTop(){return this._orthoTop}setFocalLength(e,t=36){this.fov=2*Math.atan(t/(2*e))}set mode(e){this._mode=e;for(let t of this._rigCameras)t.mode=e}get mode(){return this._mode}get hasMoved(){return this._hasMoved}constructor(e,t,i,r=!0){super(e,i,!1),this._position=b.Zero(),this._upVector=b.Up(),this.oblique=null,this._orthoLeft=null,this._orthoRight=null,this._orthoBottom=null,this._orthoTop=null,this.fov=.8,this.projectionPlaneTilt=0,this.minZ=1,this.maxZ=1e4,this.inertia=.9,this._mode=n.PERSPECTIVE_CAMERA,this.isIntermediate=!1,this.viewport=new Za(0,0,1,1),this.layerMask=268435455,this.fovMode=n.FOVMODE_VERTICAL_FIXED,this.cameraRigMode=n.RIG_MODE_NONE,this.ignoreCameraMaxZ=!1,this.customRenderTargets=[],this.outputRenderTarget=null,this.onViewMatrixChangedObservable=new ee,this.onProjectionMatrixChangedObservable=new ee,this.onAfterCheckInputsObservable=new ee,this.onRestoreStateObservable=new ee,this.isRigCamera=!1,this._hasMoved=!1,this._rigCameras=new Array,this._skipRendering=!1,this._projectionMatrix=new K,this._postProcesses=new Array,this._activeMeshes=new Fi(256),this._globalPosition=b.Zero(),this._computedViewMatrix=K.Identity(),this._doNotComputeProjectionMatrix=!1,this._transformMatrix=K.Zero(),this._refreshFrustumPlanes=!0,this._absoluteRotation=ze.Identity(),this._isCamera=!0,this._isLeftCamera=!1,this._isRightCamera=!1,this.layerMask=this.getScene().defaultCameraLayerMask,this.getScene().addCamera(this),r&&!this.getScene().activeCamera&&(this.getScene().activeCamera=this),this.position=t,this.renderPassId=this.getScene().getEngine().createRenderPassId(`Camera ${e}`)}storeState(){return this._stateStored=!0,this._storedFov=this.fov,this}hasStateStored(){return!!this._stateStored}_restoreStateValues(){return this._stateStored?(this.fov=this._storedFov,!0):!1}restoreState(){return this._restoreStateValues()?(this.onRestoreStateObservable.notifyObservers(this),!0):!1}getClassName(){return"Camera"}toString(e){let t="Name: "+this.name;if(t+=", type: "+this.getClassName(),this.animations)for(let i=0;i-1?($.Error("You're trying to reuse a post process not defined as reusable."),0):(t==null||t<0?this._postProcesses.push(e):this._postProcesses[t]===null?this._postProcesses[t]=e:this._postProcesses.splice(t,0,e),this._cascadePostProcessesToRigCams(),this._scene.prePassRenderer&&this._scene.prePassRenderer.markAsDirty(),this._postProcesses.indexOf(e))}detachPostProcess(e){let t=this._postProcesses.indexOf(e);t!==-1&&(this._postProcesses[t]=null),this._scene.prePassRenderer&&this._scene.prePassRenderer.markAsDirty(),this._cascadePostProcessesToRigCams()}getWorldMatrix(){return this._isSynchronizedViewMatrix()?this._worldMatrix:(this.getViewMatrix(),this._worldMatrix)}_getViewMatrix(){return K.Identity()}getViewMatrix(e){return!e&&this._isSynchronizedViewMatrix()?this._computedViewMatrix:(this._hasMoved=!0,this.updateCache(),this._computedViewMatrix=this._getViewMatrix(),this._currentRenderId=this.getScene().getRenderId(),this._childUpdateId++,this._refreshFrustumPlanes=!0,this._cameraRigParams&&this._cameraRigParams.vrPreViewMatrix&&this._computedViewMatrix.multiplyToRef(this._cameraRigParams.vrPreViewMatrix,this._computedViewMatrix),this.parent&&this.parent.onViewMatrixChangedObservable&&this.parent.onViewMatrixChangedObservable.notifyObservers(this.parent),this.onViewMatrixChangedObservable.notifyObservers(this),this._computedViewMatrix.invertToRef(this._worldMatrix),this._worldMatrix.getTranslationToRef(this._globalPosition),this._computedViewMatrix)}freezeProjectionMatrix(e){this._doNotComputeProjectionMatrix=!0,e!==void 0&&(this._projectionMatrix=e)}unfreezeProjectionMatrix(){this._doNotComputeProjectionMatrix=!1}getProjectionMatrix(e){var a,o,l,c,f,h,d,u,m,_,p,g,v,x,A,E,T,R,I;if(this._doNotComputeProjectionMatrix||!e&&this._isSynchronizedProjectionMatrix())return this._projectionMatrix;let t=this.ignoreCameraMaxZ?0:this.maxZ;this._cache.mode=this.mode,this._cache.minZ=this.minZ,this._cache.maxZ=t,this._refreshFrustumPlanes=!0;let i=this.getEngine(),r=this.getScene(),s=i.useReverseDepthBuffer;if(this.mode===n.PERSPECTIVE_CAMERA){this._cache.fov=this.fov,this._cache.fovMode=this.fovMode,this._cache.aspectRatio=i.getAspectRatio(this),this._cache.projectionPlaneTilt=this.projectionPlaneTilt,this.minZ<=0&&(this.minZ=.1);let y;r.useRightHandedSystem?y=K.PerspectiveFovRHToRef:y=K.PerspectiveFovLHToRef,y(this.fov,i.getAspectRatio(this),s?t:this.minZ,s?this.minZ:t,this._projectionMatrix,this.fovMode===n.FOVMODE_VERTICAL_FIXED,i.isNDCHalfZRange,this.projectionPlaneTilt,s)}else{let y=i.getRenderWidth()/2,M=i.getRenderHeight()/2;r.useRightHandedSystem?this.oblique?K.ObliqueOffCenterRHToRef((a=this.orthoLeft)!=null?a:-y,(o=this.orthoRight)!=null?o:y,(l=this.orthoBottom)!=null?l:-M,(c=this.orthoTop)!=null?c:M,s?t:this.minZ,s?this.minZ:t,this.oblique.length,this.oblique.angle,this._computeObliqueDistance(this.oblique.offset),this._projectionMatrix,i.isNDCHalfZRange):K.OrthoOffCenterRHToRef((f=this.orthoLeft)!=null?f:-y,(h=this.orthoRight)!=null?h:y,(d=this.orthoBottom)!=null?d:-M,(u=this.orthoTop)!=null?u:M,s?t:this.minZ,s?this.minZ:t,this._projectionMatrix,i.isNDCHalfZRange):this.oblique?K.ObliqueOffCenterLHToRef((m=this.orthoLeft)!=null?m:-y,(_=this.orthoRight)!=null?_:y,(p=this.orthoBottom)!=null?p:-M,(g=this.orthoTop)!=null?g:M,s?t:this.minZ,s?this.minZ:t,this.oblique.length,this.oblique.angle,this._computeObliqueDistance(this.oblique.offset),this._projectionMatrix,i.isNDCHalfZRange):K.OrthoOffCenterLHToRef((v=this.orthoLeft)!=null?v:-y,(x=this.orthoRight)!=null?x:y,(A=this.orthoBottom)!=null?A:-M,(E=this.orthoTop)!=null?E:M,s?t:this.minZ,s?this.minZ:t,this._projectionMatrix,i.isNDCHalfZRange),this._cache.orthoLeft=this.orthoLeft,this._cache.orthoRight=this.orthoRight,this._cache.orthoBottom=this.orthoBottom,this._cache.orthoTop=this.orthoTop,this._cache.obliqueAngle=(T=this.oblique)==null?void 0:T.angle,this._cache.obliqueLength=(R=this.oblique)==null?void 0:R.length,this._cache.obliqueOffset=(I=this.oblique)==null?void 0:I.offset,this._cache.renderWidth=i.getRenderWidth(),this._cache.renderHeight=i.getRenderHeight()}return this.onProjectionMatrixChangedObservable.notifyObservers(this),this._projectionMatrix}getTransformationMatrix(){return this._computedViewMatrix.multiplyToRef(this._projectionMatrix,this._transformMatrix),this._transformMatrix}_computeObliqueDistance(e){let t=this,i=this;return(t.radius||(i.target?b.Distance(this.position,i.target):this.position.length()))+e}_updateFrustumPlanes(){this._refreshFrustumPlanes&&(this.getTransformationMatrix(),this._frustumPlanes?Zc.GetPlanesToRef(this._transformMatrix,this._frustumPlanes):this._frustumPlanes=Zc.GetPlanes(this._transformMatrix),this._refreshFrustumPlanes=!1)}isInFrustum(e,t=!1){if(this._updateFrustumPlanes(),t&&this.rigCameras.length>0){let i=!1;for(let r of this.rigCameras)r._updateFrustumPlanes(),i=i||e.isInFrustum(r._frustumPlanes);return i}else return e.isInFrustum(this._frustumPlanes)}isCompletelyInFrustum(e){return this._updateFrustumPlanes(),e.isCompletelyInFrustum(this._frustumPlanes)}getForwardRay(e=100,t,i){throw Xe("Ray")}getForwardRayToRef(e,t=100,i,r){throw Xe("Ray")}dispose(e,t=!1){for(this.onViewMatrixChangedObservable.clear(),this.onProjectionMatrixChangedObservable.clear(),this.onAfterCheckInputsObservable.clear(),this.onRestoreStateObservable.clear(),this.inputs&&this.inputs.clear(),this.getScene().stopAnimation(this),this.getScene().removeCamera(this);this._rigCameras.length>0;){let r=this._rigCameras.pop();r&&r.dispose()}if(this._parentContainer){let r=this._parentContainer.cameras.indexOf(this);r>-1&&this._parentContainer.cameras.splice(r,1),this._parentContainer=null}if(this._rigPostProcess)this._rigPostProcess.dispose(this),this._rigPostProcess=null,this._postProcesses.length=0;else if(this.cameraRigMode!==n.RIG_MODE_NONE)this._rigPostProcess=null,this._postProcesses.length=0;else{let r=this._postProcesses.length;for(;--r>=0;){let s=this._postProcesses[r];s&&s.dispose(this)}}let i=this.customRenderTargets.length;for(;--i>=0;)this.customRenderTargets[i].dispose();this.customRenderTargets.length=0,this._activeMeshes.dispose(),this.getScene().getEngine().releaseRenderPassId(this.renderPassId),super.dispose(e,t)}get isLeftCamera(){return this._isLeftCamera}get isRightCamera(){return this._isRightCamera}get leftCamera(){return this._rigCameras.length<1?null:this._rigCameras[0]}get rightCamera(){return this._rigCameras.length<2?null:this._rigCameras[1]}getLeftTarget(){return this._rigCameras.length<1?null:this._rigCameras[0].getTarget()}getRightTarget(){return this._rigCameras.length<2?null:this._rigCameras[1].getTarget()}setCameraRigMode(e,t){if(this.cameraRigMode!==e){for(;this._rigCameras.length>0;){let i=this._rigCameras.pop();i&&i.dispose()}if(this.cameraRigMode=e,this._cameraRigParams={},this._cameraRigParams.interaxialDistance=t.interaxialDistance||.0637,this._cameraRigParams.stereoHalfAngle=he.ToRadians(this._cameraRigParams.interaxialDistance/.0637),this.cameraRigMode!==n.RIG_MODE_NONE){let i=this.createRigCamera(this.name+"_L",0);i&&(i._isLeftCamera=!0);let r=this.createRigCamera(this.name+"_R",1);r&&(r._isRightCamera=!0),i&&r&&(this._rigCameras.push(i),this._rigCameras.push(r))}this._setRigMode(t),this._cascadePostProcessesToRigCams(),this.update()}}_setRigMode(e){}_getVRProjectionMatrix(){return K.PerspectiveFovLHToRef(this._cameraRigParams.vrMetrics.aspectRatioFov,this._cameraRigParams.vrMetrics.aspectRatio,this.minZ,this.ignoreCameraMaxZ?0:this.maxZ,this._cameraRigParams.vrWorkMatrix,!0,this.getEngine().isNDCHalfZRange),this._cameraRigParams.vrWorkMatrix.multiplyToRef(this._cameraRigParams.vrHMatrix,this._projectionMatrix),this._projectionMatrix}setCameraRigParameter(e,t){this._cameraRigParams||(this._cameraRigParams={}),this._cameraRigParams[e]=t,e==="interaxialDistance"&&(this._cameraRigParams.stereoHalfAngle=he.ToRadians(t/.0637))}createRigCamera(e,t){return null}_updateRigCameras(){for(let e=0;en._CreateDefaultParsedCamera(t,i))}computeWorldMatrix(){return this.getWorldMatrix()}static Parse(e,t){let i=e.type,r=n.GetConstructorFromName(i,e.name,t,e.interaxial_distance,e.isStereoscopicSideBySide),s=tt.Parse(r,e,t);if(e.parentId!==void 0&&(s._waitingParentId=e.parentId),e.parentInstanceIndex!==void 0&&(s._waitingParentInstanceIndex=e.parentInstanceIndex),s.inputs&&(s.inputs.parse(e),s._setupInputs()),e.upVector&&(s.upVector=b.FromArray(e.upVector)),s.setPosition&&(s.position.copyFromFloats(0,0,0),s.setPosition(b.FromArray(e.position))),e.target&&s.setTarget&&s.setTarget(b.FromArray(e.target)),e.cameraRigMode){let a=e.interaxial_distance?{interaxialDistance:e.interaxial_distance}:{};s.setCameraRigMode(e.cameraRigMode,a)}if(e.animations){for(let a=0;a{throw Xe("UniversalCamera")};ut.PERSPECTIVE_CAMERA=0;ut.ORTHOGRAPHIC_CAMERA=1;ut.FOVMODE_VERTICAL_FIXED=0;ut.FOVMODE_HORIZONTAL_FIXED=1;ut.RIG_MODE_NONE=0;ut.RIG_MODE_STEREOSCOPIC_ANAGLYPH=10;ut.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL=11;ut.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED=12;ut.RIG_MODE_STEREOSCOPIC_OVERUNDER=13;ut.RIG_MODE_STEREOSCOPIC_INTERLACED=14;ut.RIG_MODE_VR=20;ut.RIG_MODE_CUSTOM=22;ut.ForceAttachControlToAlwaysPreventDefault=!1;P([Vr("position")],ut.prototype,"_position",void 0);P([Vr("upVector")],ut.prototype,"_upVector",void 0);P([F()],ut.prototype,"orthoLeft",null);P([F()],ut.prototype,"orthoRight",null);P([F()],ut.prototype,"orthoBottom",null);P([F()],ut.prototype,"orthoTop",null);P([F()],ut.prototype,"fov",void 0);P([F()],ut.prototype,"projectionPlaneTilt",void 0);P([F()],ut.prototype,"minZ",void 0);P([F()],ut.prototype,"maxZ",void 0);P([F()],ut.prototype,"inertia",void 0);P([F()],ut.prototype,"mode",null);P([F()],ut.prototype,"layerMask",void 0);P([F()],ut.prototype,"fovMode",void 0);P([F()],ut.prototype,"cameraRigMode",void 0);P([F()],ut.prototype,"interaxialDistance",void 0);P([F()],ut.prototype,"isStereoscopicSideBySide",void 0);P([F()],ut.prototype,"ignoreCameraMaxZ",void 0)});var Vh,CC=C(()=>{Vh=class{constructor(e,t,i){this.bu=e,this.bv=t,this.distance=i,this.faceId=0,this.subMeshId=0,this._internalSubMeshId=0}}});var cf,yC=C(()=>{Ho();Ve();An();cf=class n{constructor(e,t,i){this.vectors=on(8,b.Zero),this.center=b.Zero(),this.centerWorld=b.Zero(),this.extendSize=b.Zero(),this.extendSizeWorld=b.Zero(),this.directions=on(3,b.Zero),this.vectorsWorld=on(8,b.Zero),this.minimumWorld=b.Zero(),this.maximumWorld=b.Zero(),this.minimum=b.Zero(),this.maximum=b.Zero(),this._drawWrapperFront=null,this._drawWrapperBack=null,this.reConstruct(e,t,i)}reConstruct(e,t,i){let r=e.x,s=e.y,a=e.z,o=t.x,l=t.y,c=t.z,f=this.vectors;this.minimum.copyFromFloats(r,s,a),this.maximum.copyFromFloats(o,l,c),f[0].copyFromFloats(r,s,a),f[1].copyFromFloats(o,l,c),f[2].copyFromFloats(o,s,a),f[3].copyFromFloats(r,l,a),f[4].copyFromFloats(r,s,c),f[5].copyFromFloats(o,l,a),f[6].copyFromFloats(r,l,c),f[7].copyFromFloats(o,s,c),t.addToRef(e,this.center).scaleInPlace(.5),t.subtractToRef(e,this.extendSize).scaleInPlace(.5),this._worldMatrix=i||K.IdentityReadOnly,this._update(this._worldMatrix)}scale(e){let t=n._TmpVector3,i=this.maximum.subtractToRef(this.minimum,t[0]),r=i.length();i.normalizeFromLength(r);let s=r*e,a=i.scaleInPlace(s*.5),o=this.center.subtractToRef(a,t[1]),l=this.center.addToRef(a,t[2]);return this.reConstruct(o,l,this._worldMatrix),this}getWorldMatrix(){return this._worldMatrix}_update(e){let t=this.minimumWorld,i=this.maximumWorld,r=this.directions,s=this.vectorsWorld,a=this.vectors;if(e.isIdentity()){t.copyFrom(this.minimum),i.copyFrom(this.maximum);for(let o=0;o<8;++o)s[o].copyFrom(a[o]);this.extendSizeWorld.copyFrom(this.extendSize),this.centerWorld.copyFrom(this.center)}else{t.setAll(Number.MAX_VALUE),i.setAll(-Number.MAX_VALUE);for(let o=0;o<8;++o){let l=s[o];b.TransformCoordinatesToRef(a[o],e,l),t.minimizeInPlace(l),i.maximizeInPlace(l)}i.subtractToRef(t,this.extendSizeWorld).scaleInPlace(.5),i.addToRef(t,this.centerWorld).scaleInPlace(.5)}b.FromArrayToRef(e.m,0,r[0]),b.FromArrayToRef(e.m,4,r[1]),b.FromArrayToRef(e.m,8,r[2]),this._worldMatrix=e}isInFrustum(e){return n.IsInFrustum(this.vectorsWorld,e)}isCompletelyInFrustum(e){return n.IsCompletelyInFrustum(this.vectorsWorld,e)}intersectsPoint(e){let t=this.minimumWorld,i=this.maximumWorld,r=t.x,s=t.y,a=t.z,o=i.x,l=i.y,c=i.z,f=e.x,h=e.y,d=e.z,u=-Nt;return!(o-ff-r||l-hh-s||c-dd-a)}intersectsSphere(e){return n.IntersectsSphere(this.minimumWorld,this.maximumWorld,e.centerWorld,e.radiusWorld)}intersectsMinMax(e,t){let i=this.minimumWorld,r=this.maximumWorld,s=i.x,a=i.y,o=i.z,l=r.x,c=r.y,f=r.z,h=e.x,d=e.y,u=e.z,m=t.x,_=t.y,p=t.z;return!(lm||c_||fp)}dispose(){var e,t;(e=this._drawWrapperFront)==null||e.dispose(),(t=this._drawWrapperBack)==null||t.dispose()}static Intersects(e,t){return e.intersectsMinMax(t.minimumWorld,t.maximumWorld)}static IntersectsSphere(e,t,i,r){let s=n._TmpVector3[0];return b.ClampToRef(i,e,t,s),b.DistanceSquared(i,s)<=r*r}static IsCompletelyInFrustum(e,t){for(let i=0;i<6;++i){let r=t[i];for(let s=0;s<8;++s)if(r.dotCoordinate(e[s])<0)return!1}return!0}static IsInFrustum(e,t){for(let i=0;i<6;++i){let r=!0,s=t[i];for(let a=0;a<8;++a)if(s.dotCoordinate(e[a])>=0){r=!1;break}if(r)return!1}return!0}};cf._TmpVector3=on(3,b.Zero)});var qu,lV=C(()=>{Ho();Ve();qu=class n{constructor(e,t,i){this.center=b.Zero(),this.centerWorld=b.Zero(),this.minimum=b.Zero(),this.maximum=b.Zero(),this.reConstruct(e,t,i)}reConstruct(e,t,i){this.minimum.copyFrom(e),this.maximum.copyFrom(t);let r=b.Distance(e,t);t.addToRef(e,this.center).scaleInPlace(.5),this.radius=r*.5,this._update(i||K.IdentityReadOnly)}scale(e){let t=this.radius*e,i=n._TmpVector3,r=i[0].setAll(t),s=this.center.subtractToRef(r,i[1]),a=this.center.addToRef(r,i[2]);return this.reConstruct(s,a,this._worldMatrix),this}getWorldMatrix(){return this._worldMatrix}_update(e){if(e.isIdentity())this.centerWorld.copyFrom(this.center),this.radiusWorld=this.radius;else{b.TransformCoordinatesToRef(this.center,e,this.centerWorld);let t=n._TmpVector3[0];b.TransformNormalFromFloatsToRef(1,1,1,e,t),this.radiusWorld=Math.max(Math.abs(t.x),Math.abs(t.y),Math.abs(t.z))*this.radius}}isInFrustum(e){let t=this.centerWorld,i=this.radiusWorld;for(let r=0;r<6;r++)if(e[r].dotCoordinate(t)<=-i)return!1;return!0}isCenterInFrustum(e){let t=this.centerWorld;for(let i=0;i<6;i++)if(e[i].dotCoordinate(t)<0)return!1;return!0}intersectsPoint(e){let t=b.DistanceSquared(this.centerWorld,e);return!(this.radiusWorld*this.radiusWorld{Ho();Ve();yC();lV();PC={min:0,max:0},DC={min:0,max:0},cV=(n,e,t)=>{let i=b.Dot(e.centerWorld,n),r=Math.abs(b.Dot(e.directions[0],n))*e.extendSize.x,s=Math.abs(b.Dot(e.directions[1],n))*e.extendSize.y,a=Math.abs(b.Dot(e.directions[2],n))*e.extendSize.z,o=r+s+a;t.min=i-o,t.max=i+o},zn=(n,e,t)=>(cV(n,e,PC),cV(n,t,DC),!(PC.min>DC.max||DC.min>PC.max)),ln=class n{constructor(e,t,i){this._isLocked=!1,this.boundingBox=new cf(e,t,i),this.boundingSphere=new qu(e,t,i)}reConstruct(e,t,i){this.boundingBox.reConstruct(e,t,i),this.boundingSphere.reConstruct(e,t,i)}get minimum(){return this.boundingBox.minimum}get maximum(){return this.boundingBox.maximum}get isLocked(){return this._isLocked}set isLocked(e){this._isLocked=e}update(e){this._isLocked||(this.boundingBox._update(e),this.boundingSphere._update(e))}centerOn(e,t){let i=n._TmpVector3[0].copyFrom(e).subtractInPlace(t),r=n._TmpVector3[1].copyFrom(e).addInPlace(t);return this.boundingBox.reConstruct(i,r,this.boundingBox.getWorldMatrix()),this.boundingSphere.reConstruct(i,r,this.boundingBox.getWorldMatrix()),this}encapsulate(e){let t=b.Minimize(this.minimum,e),i=b.Maximize(this.maximum,e);return this.reConstruct(t,i,this.boundingBox.getWorldMatrix()),this}encapsulateBoundingInfo(e){let t=Z.Matrix[0];this.boundingBox.getWorldMatrix().invertToRef(t);let i=Z.Vector3[0];return b.TransformCoordinatesToRef(e.boundingBox.minimumWorld,t,i),this.encapsulate(i),b.TransformCoordinatesToRef(e.boundingBox.maximumWorld,t,i),this.encapsulate(i),this}scale(e){return this.boundingBox.scale(e),this.boundingSphere.scale(e),this}isInFrustum(e,t=0){return(t===2||t===3)&&this.boundingSphere.isCenterInFrustum(e)?!0:this.boundingSphere.isInFrustum(e)?t===1||t===3?!0:this.boundingBox.isInFrustum(e):!1}get diagonalLength(){let e=this.boundingBox;return e.maximumWorld.subtractToRef(e.minimumWorld,n._TmpVector3[0]).length()}isCompletelyInFrustum(e){return this.boundingBox.isCompletelyInFrustum(e)}_checkCollision(e){return e._canDoCollision(this.boundingSphere.centerWorld,this.boundingSphere.radiusWorld,this.boundingBox.minimumWorld,this.boundingBox.maximumWorld)}intersectsPoint(e){return!(!this.boundingSphere.centerWorld||!this.boundingSphere.intersectsPoint(e)||!this.boundingBox.intersectsPoint(e))}intersects(e,t){if(!qu.Intersects(this.boundingSphere,e.boundingSphere)||!cf.Intersects(this.boundingBox,e.boundingBox))return!1;if(!t)return!0;let i=this.boundingBox,r=e.boundingBox;return!(!zn(i.directions[0],i,r)||!zn(i.directions[1],i,r)||!zn(i.directions[2],i,r)||!zn(r.directions[0],i,r)||!zn(r.directions[1],i,r)||!zn(r.directions[2],i,r)||!zn(b.Cross(i.directions[0],r.directions[0]),i,r)||!zn(b.Cross(i.directions[0],r.directions[1]),i,r)||!zn(b.Cross(i.directions[0],r.directions[2]),i,r)||!zn(b.Cross(i.directions[1],r.directions[0]),i,r)||!zn(b.Cross(i.directions[1],r.directions[1]),i,r)||!zn(b.Cross(i.directions[1],r.directions[2]),i,r)||!zn(b.Cross(i.directions[2],r.directions[0]),i,r)||!zn(b.Cross(i.directions[2],r.directions[1]),i,r)||!zn(b.Cross(i.directions[2],r.directions[2]),i,r))}};ln._TmpVector3=on(2,b.Zero)});function fV(n,e,t,i,r=null){let s=new b(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),a=new b(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE);return Qu.extractMinAndMaxIndexed(n,e,t,i,s,a),r&&(s.x-=s.x*r.x+r.y,s.y-=s.y*r.x+r.y,s.z-=s.z*r.x+r.y,a.x+=a.x*r.x+r.y,a.y+=a.y*r.x+r.y,a.z+=a.z*r.x+r.y),{minimum:s,maximum:a}}function zT(n,e,t,i=null,r){let s=new b(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),a=new b(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE);return r||(r=3),Qu.extractMinAndMax(n,e,t,r,s,a),i&&(s.x-=s.x*i.x+i.y,s.y-=s.y*i.x+i.y,s.z-=s.z*i.x+i.y,a.x+=a.x*i.x+i.y,a.y+=a.y*i.x+i.y,a.z+=a.z*i.x+i.y),{minimum:s,maximum:a}}var Qu,XT=C(()=>{kt();Ve();Ut();Qu=class{static extractMinAndMaxIndexed(e,t,i,r,s,a){for(let o=i;o!Array.isArray(n[0])&&!Array.isArray(n[1]))],Qu,"extractMinAndMaxIndexed",null);P([us.filter((...n)=>!Array.isArray(n[0]))],Qu,"extractMinAndMax",null)});var _s,V_=C(()=>{Ui();CC();Zu();XT();Dh();_s=class n{get materialDefines(){var t;let e=this._mainDrawWrapperOverride?this._mainDrawWrapperOverride.defines:(t=this._getDrawWrapper())==null?void 0:t.defines;return typeof e=="string"?null:e}set materialDefines(e){var i;let t=(i=this._mainDrawWrapperOverride)!=null?i:this._getDrawWrapper(void 0,!0);t.defines=e}_getDrawWrapper(e,t=!1){e=e!=null?e:this._engine.currentRenderPassId;let i=this._drawWrappers[e];return!i&&t&&(this._drawWrappers[e]=i=new Wn(this._mesh.getScene().getEngine())),i}_removeDrawWrapper(e,t=!0,i=!1){var r;t&&((r=this._drawWrappers[e])==null||r.dispose(i)),this._drawWrappers[e]=void 0}get effect(){var e,t;return this._mainDrawWrapperOverride?this._mainDrawWrapperOverride.effect:(t=(e=this._getDrawWrapper())==null?void 0:e.effect)!=null?t:null}get _drawWrapper(){var e;return(e=this._mainDrawWrapperOverride)!=null?e:this._getDrawWrapper(void 0,!0)}get _drawWrapperOverride(){return this._mainDrawWrapperOverride}_setMainDrawWrapperOverride(e){this._mainDrawWrapperOverride=e}setEffect(e,t=null,i,r=!0){let s=this._drawWrapper;s.setEffect(e,t,r),i!==void 0&&(s.materialContext=i),e||(s.defines=null,s.materialContext=void 0)}resetDrawCache(e,t=!1){if(this._drawWrappers)if(e!==void 0){this._removeDrawWrapper(e,!0,t);return}else for(let i of this._drawWrappers)i==null||i.dispose(t);this._drawWrappers=[]}static AddToMesh(e,t,i,r,s,a,o,l=!0){return new n(e,t,i,r,s,a,o,l)}constructor(e,t,i,r,s,a,o,l=!0,c=!0){this.materialIndex=e,this.verticesStart=t,this.verticesCount=i,this.indexStart=r,this.indexCount=s,this._mainDrawWrapperOverride=null,this._linesIndexCount=0,this._linesIndexBuffer=null,this._lastColliderWorldVertices=null,this._lastColliderTransformMatrix=null,this._wasDispatched=!1,this._renderId=0,this._alphaIndex=0,this._distanceToCamera=0,this._currentMaterial=null,this._mesh=a,this._renderingMesh=o||a,c&&a.subMeshes.push(this),this._engine=this._mesh.getScene().getEngine(),this.resetDrawCache(),this._trianglePlanes=[],this._id=a.subMeshes.length-1,l&&(this.refreshBoundingInfo(),a.computeWorldMatrix(!0))}get IsGlobal(){return this.verticesStart===0&&this.verticesCount===this._mesh.getTotalVertices()&&this.indexStart===0&&this.indexCount===this._mesh.getTotalIndices()}getBoundingInfo(){return this.IsGlobal||this._mesh.hasThinInstances?this._mesh.getBoundingInfo():this._boundingInfo}setBoundingInfo(e){return this._boundingInfo=e,this}getMesh(){return this._mesh}getRenderingMesh(){return this._renderingMesh}getReplacementMesh(){return this._mesh._internalAbstractMeshDataInfo._actAsRegularMesh?this._mesh:null}getEffectiveMesh(){let e=this._mesh._internalAbstractMeshDataInfo._actAsRegularMesh?this._mesh:null;return e||this._renderingMesh}getMaterial(e=!0){var i;let t=(i=this._renderingMesh.getMaterialForRenderPass(this._engine.currentRenderPassId))!=null?i:this._renderingMesh.material;if(t){if(this._isMultiMaterial(t)){let r=t.getSubMaterial(this.materialIndex);return this._currentMaterial!==r&&(this._currentMaterial=r,this.resetDrawCache()),r}}else return e&&this._mesh.getScene()._hasDefaultMaterial?this._mesh.getScene().defaultMaterial:null;return t}_isMultiMaterial(e){return e.getSubMaterial!==void 0}refreshBoundingInfo(e=null){if(this._lastColliderWorldVertices=null,this.IsGlobal||!this._renderingMesh||!this._renderingMesh.geometry)return this;if(e||(e=this._renderingMesh.getVerticesData(L.PositionKind)),!e)return this._boundingInfo=this._mesh.getBoundingInfo(),this;let t=this._renderingMesh.getIndices(),i;if(this.indexStart===0&&this.indexCount===t.length){let r=this._renderingMesh.getBoundingInfo();i={minimum:r.minimum.clone(),maximum:r.maximum.clone()}}else i=fV(e,t,this.indexStart,this.indexCount,this._renderingMesh.geometry.boundingBias);return this._boundingInfo?this._boundingInfo.reConstruct(i.minimum,i.maximum):this._boundingInfo=new ln(i.minimum,i.maximum),this}_checkCollision(e){return this.getBoundingInfo()._checkCollision(e)}updateBoundingInfo(e){let t=this.getBoundingInfo();return t||(this.refreshBoundingInfo(),t=this.getBoundingInfo()),t&&t.update(e),this}isInFrustum(e){let t=this.getBoundingInfo();return t?t.isInFrustum(e,this._mesh.cullingStrategy):!1}isCompletelyInFrustum(e){let t=this.getBoundingInfo();return t?t.isCompletelyInFrustum(e):!1}render(e){return this._renderingMesh.render(this,e,this._mesh._internalAbstractMeshDataInfo._actAsRegularMesh?this._mesh:void 0),this}_getLinesIndexBuffer(e,t){if(!this._linesIndexBuffer){let i=Math.floor(this.indexCount/3)*6,s=this.verticesStart+this.verticesCount>65535?new Uint32Array(i):new Uint16Array(i),a=0;if(e.length===0)for(let o=this.indexStart;ol&&(l=d)}return new n(e,o,l-o+1,t,i,r,s,a)}}});var G_,Ie,lr=C(()=>{kt();Ve();Ui();an();Ht();Pt();Ut();MC();d_();V_();G_=class{},Ie=class n{constructor(){this.uniqueId=0,this.metadata={},this._applyTo=oV(this._applyToCoroutine.bind(this)),this.uniqueId=n._UniqueIdGenerator,n._UniqueIdGenerator++}set(e,t){switch(e.length||$.Warn(`Setting vertex data kind '${t}' with an empty array`),t){case L.PositionKind:this.positions=e;break;case L.NormalKind:this.normals=e;break;case L.TangentKind:this.tangents=e;break;case L.UVKind:this.uvs=e;break;case L.UV2Kind:this.uvs2=e;break;case L.UV3Kind:this.uvs3=e;break;case L.UV4Kind:this.uvs4=e;break;case L.UV5Kind:this.uvs5=e;break;case L.UV6Kind:this.uvs6=e;break;case L.ColorKind:this.colors=e;break;case L.MatricesIndicesKind:this.matricesIndices=e;break;case L.MatricesWeightsKind:this.matricesWeights=e;break;case L.MatricesIndicesExtraKind:this.matricesIndicesExtra=e;break;case L.MatricesWeightsExtraKind:this.matricesWeightsExtra=e;break}}applyToMesh(e,t){return this._applyTo(e,t,!1),this}applyToGeometry(e,t){return this._applyTo(e,t,!1),this}updateMesh(e){return this._update(e),this}updateGeometry(e){return this._update(e),this}*_applyToCoroutine(e,t=!1,i){if(this.positions&&(e.setVerticesData(L.PositionKind,this.positions,t),i&&(yield)),this.normals&&(e.setVerticesData(L.NormalKind,this.normals,t),i&&(yield)),this.tangents&&(e.setVerticesData(L.TangentKind,this.tangents,t),i&&(yield)),this.uvs&&(e.setVerticesData(L.UVKind,this.uvs,t),i&&(yield)),this.uvs2&&(e.setVerticesData(L.UV2Kind,this.uvs2,t),i&&(yield)),this.uvs3&&(e.setVerticesData(L.UV3Kind,this.uvs3,t),i&&(yield)),this.uvs4&&(e.setVerticesData(L.UV4Kind,this.uvs4,t),i&&(yield)),this.uvs5&&(e.setVerticesData(L.UV5Kind,this.uvs5,t),i&&(yield)),this.uvs6&&(e.setVerticesData(L.UV6Kind,this.uvs6,t),i&&(yield)),this.colors){let r=this.positions&&this.colors.length===this.positions.length?3:4;e.setVerticesData(L.ColorKind,this.colors,t,r),this.hasVertexAlpha&&e.hasVertexAlpha!==void 0&&(e.hasVertexAlpha=!0),i&&(yield)}if(this.matricesIndices&&(e.setVerticesData(L.MatricesIndicesKind,this.matricesIndices,t),i&&(yield)),this.matricesWeights&&(e.setVerticesData(L.MatricesWeightsKind,this.matricesWeights,t),i&&(yield)),this.matricesIndicesExtra&&(e.setVerticesData(L.MatricesIndicesExtraKind,this.matricesIndicesExtra,t),i&&(yield)),this.matricesWeightsExtra&&(e.setVerticesData(L.MatricesWeightsExtraKind,this.matricesWeightsExtra,t),i&&(yield)),this.indices?(e.setIndices(this.indices,null,t),i&&(yield)):e.setIndices([],null),e.subMeshes&&this.materialInfos&&this.materialInfos.length>1){let r=e;r.subMeshes=[];for(let s of this.materialInfos)new _s(s.materialIndex,s.verticesStart,s.verticesCount,s.indexStart,s.indexCount,r)}return this}_update(e,t,i){return this.positions&&e.updateVerticesData(L.PositionKind,this.positions,t,i),this.normals&&e.updateVerticesData(L.NormalKind,this.normals,t,i),this.tangents&&e.updateVerticesData(L.TangentKind,this.tangents,t,i),this.uvs&&e.updateVerticesData(L.UVKind,this.uvs,t,i),this.uvs2&&e.updateVerticesData(L.UV2Kind,this.uvs2,t,i),this.uvs3&&e.updateVerticesData(L.UV3Kind,this.uvs3,t,i),this.uvs4&&e.updateVerticesData(L.UV4Kind,this.uvs4,t,i),this.uvs5&&e.updateVerticesData(L.UV5Kind,this.uvs5,t,i),this.uvs6&&e.updateVerticesData(L.UV6Kind,this.uvs6,t,i),this.colors&&e.updateVerticesData(L.ColorKind,this.colors,t,i),this.matricesIndices&&e.updateVerticesData(L.MatricesIndicesKind,this.matricesIndices,t,i),this.matricesWeights&&e.updateVerticesData(L.MatricesWeightsKind,this.matricesWeights,t,i),this.matricesIndicesExtra&&e.updateVerticesData(L.MatricesIndicesExtraKind,this.matricesIndicesExtra,t,i),this.matricesWeightsExtra&&e.updateVerticesData(L.MatricesWeightsExtraKind,this.matricesWeightsExtra,t,i),this.indices&&e.setIndices(this.indices,null),this}static _TransformVector3Coordinates(e,t,i=0,r=e.length){let s=Z.Vector3[0],a=Z.Vector3[1];for(let o=i;o({vertexData:o})):[{vertexData:e}];return U_(this._mergeCoroutine(void 0,a,t,!1,i,r,s))}*_mergeCoroutine(e,t,i=!1,r,s,a=!1,o=!1){var u,m,_,p;this._validate();let l=t.map(g=>g.vertexData),c=this;if(o)for(let g of l)g&&(g._validate(),!this.normals&&g.normals&&(this.normals=new Float32Array(this.positions.length)),!this.tangents&&g.tangents&&(this.tangents=new Float32Array(this.positions.length/3*4)),!this.uvs&&g.uvs&&(this.uvs=new Float32Array(this.positions.length/3*2)),!this.uvs2&&g.uvs2&&(this.uvs2=new Float32Array(this.positions.length/3*2)),!this.uvs3&&g.uvs3&&(this.uvs3=new Float32Array(this.positions.length/3*2)),!this.uvs4&&g.uvs4&&(this.uvs4=new Float32Array(this.positions.length/3*2)),!this.uvs5&&g.uvs5&&(this.uvs5=new Float32Array(this.positions.length/3*2)),!this.uvs6&&g.uvs6&&(this.uvs6=new Float32Array(this.positions.length/3*2)),!this.colors&&g.colors&&(this.colors=new Float32Array(this.positions.length/3*4),this.colors.fill(1)),!this.matricesIndices&&g.matricesIndices&&(this.matricesIndices=new Float32Array(this.positions.length/3*4)),!this.matricesWeights&&g.matricesWeights&&(this.matricesWeights=new Float32Array(this.positions.length/3*4)),!this.matricesIndicesExtra&&g.matricesIndicesExtra&&(this.matricesIndicesExtra=new Float32Array(this.positions.length/3*4)),!this.matricesWeightsExtra&&g.matricesWeightsExtra&&(this.matricesWeightsExtra=new Float32Array(this.positions.length/3*4)));for(let g of l)if(g){if(o)this.normals&&!g.normals&&(g.normals=new Float32Array(g.positions.length)),this.tangents&&!g.tangents&&(g.tangents=new Float32Array(g.positions.length/3*4)),this.uvs&&!g.uvs&&(g.uvs=new Float32Array(g.positions.length/3*2)),this.uvs2&&!g.uvs2&&(g.uvs2=new Float32Array(g.positions.length/3*2)),this.uvs3&&!g.uvs3&&(g.uvs3=new Float32Array(g.positions.length/3*2)),this.uvs4&&!g.uvs4&&(g.uvs4=new Float32Array(g.positions.length/3*2)),this.uvs5&&!g.uvs5&&(g.uvs5=new Float32Array(g.positions.length/3*2)),this.uvs6&&!g.uvs6&&(g.uvs6=new Float32Array(g.positions.length/3*2)),this.colors&&!g.colors&&(g.colors=new Float32Array(g.positions.length/3*4),g.colors.fill(1)),this.matricesIndices&&!g.matricesIndices&&(g.matricesIndices=new Float32Array(g.positions.length/3*4)),this.matricesWeights&&!g.matricesWeights&&(g.matricesWeights=new Float32Array(g.positions.length/3*4)),this.matricesIndicesExtra&&!g.matricesIndicesExtra&&(g.matricesIndicesExtra=new Float32Array(g.positions.length/3*4)),this.matricesWeightsExtra&&!g.matricesWeightsExtra&&(g.matricesWeightsExtra=new Float32Array(g.positions.length/3*4));else if(g._validate(),!this.normals!=!g.normals||!this.tangents!=!g.tangents||!this.uvs!=!g.uvs||!this.uvs2!=!g.uvs2||!this.uvs3!=!g.uvs3||!this.uvs4!=!g.uvs4||!this.uvs5!=!g.uvs5||!this.uvs6!=!g.uvs6||!this.colors!=!g.colors||!this.matricesIndices!=!g.matricesIndices||!this.matricesWeights!=!g.matricesWeights||!this.matricesIndicesExtra!=!g.matricesIndicesExtra||!this.matricesWeightsExtra!=!g.matricesWeightsExtra)throw new Error("Cannot merge vertex data that do not have the same set of attributes")}if(a){let g,v=0,x=0,A=[],E=null,T=[];for(let I of this.splitBasedOnMaterialID())T.push({vertexData:I,transform:e});for(let I of t)if(I.vertexData)for(let y of I.vertexData.splitBasedOnMaterialID())T.push({vertexData:y,transform:I.transform});T.sort((I,y)=>{let M=I.vertexData.materialInfos?I.vertexData.materialInfos[0].materialIndex:0,D=y.vertexData.materialInfos?y.vertexData.materialInfos[0].materialIndex:0;return M>D?1:M===D?0:-1});for(let I of T){let y=I.vertexData;if(y.materialInfos?g=y.materialInfos[0].materialIndex:g=0,E&&E.materialIndex===g)E.indexCount+=y.indices.length,E.verticesCount+=y.positions.length/3;else{let M=new G_;M.materialIndex=g,M.indexStart=v,M.indexCount=y.indices.length,M.verticesStart=x,M.verticesCount=y.positions.length/3,A.push(M),E=M}v+=y.indices.length,x+=y.positions.length/3}let R=T.splice(0,1)[0];c=R.vertexData,e=R.transform,l=T.map(I=>I.vertexData),t=T,this.materialInfos=A}let f=l.reduce((g,v)=>{var x,A;return g+((A=(x=v.indices)==null?void 0:x.length)!=null?A:0)},(m=(u=c.indices)==null?void 0:u.length)!=null?m:0),d=s||l.some(g=>g.indices===c.indices)?(_=c.indices)==null?void 0:_.slice():c.indices;if(f>0){let g=(p=d==null?void 0:d.length)!=null?p:0;if(d||(d=new Array(f)),d.length!==f){if(Array.isArray(d))d.length=f;else{let x=i||d instanceof Uint32Array?new Uint32Array(f):new Uint16Array(f);x.set(d),d=x}e&&e.determinant()<0&&n._FlipFaces(d,0,g)}let v=c.positions?c.positions.length/3:0;for(let{vertexData:x,transform:A}of t)if(x.indices){for(let E=0;E[g.vertexData.positions,g.transform])),r&&(yield),c.normals&&(this.normals=n._MergeElement(L.NormalKind,c.normals,e,t.map(g=>[g.vertexData.normals,g.transform])),r&&(yield)),c.tangents&&(this.tangents=n._MergeElement(L.TangentKind,c.tangents,e,t.map(g=>[g.vertexData.tangents,g.transform])),r&&(yield)),c.uvs&&(this.uvs=n._MergeElement(L.UVKind,c.uvs,e,t.map(g=>[g.vertexData.uvs,g.transform])),r&&(yield)),c.uvs2&&(this.uvs2=n._MergeElement(L.UV2Kind,c.uvs2,e,t.map(g=>[g.vertexData.uvs2,g.transform])),r&&(yield)),c.uvs3&&(this.uvs3=n._MergeElement(L.UV3Kind,c.uvs3,e,t.map(g=>[g.vertexData.uvs3,g.transform])),r&&(yield)),c.uvs4&&(this.uvs4=n._MergeElement(L.UV4Kind,c.uvs4,e,t.map(g=>[g.vertexData.uvs4,g.transform])),r&&(yield)),c.uvs5&&(this.uvs5=n._MergeElement(L.UV5Kind,c.uvs5,e,t.map(g=>[g.vertexData.uvs5,g.transform])),r&&(yield)),c.uvs6&&(this.uvs6=n._MergeElement(L.UV6Kind,c.uvs6,e,t.map(g=>[g.vertexData.uvs6,g.transform])),r&&(yield)),c.colors&&(this.colors=n._MergeElement(L.ColorKind,c.colors,e,t.map(g=>[g.vertexData.colors,g.transform])),(c.hasVertexAlpha!==void 0||t.some(g=>g.vertexData.hasVertexAlpha!==void 0))&&(this.hasVertexAlpha=c.hasVertexAlpha||t.some(g=>g.vertexData.hasVertexAlpha)),r&&(yield)),c.matricesIndices&&(this.matricesIndices=n._MergeElement(L.MatricesIndicesKind,c.matricesIndices,e,t.map(g=>[g.vertexData.matricesIndices,g.transform])),r&&(yield)),c.matricesWeights&&(this.matricesWeights=n._MergeElement(L.MatricesWeightsKind,c.matricesWeights,e,t.map(g=>[g.vertexData.matricesWeights,g.transform])),r&&(yield)),c.matricesIndicesExtra&&(this.matricesIndicesExtra=n._MergeElement(L.MatricesIndicesExtraKind,c.matricesIndicesExtra,e,t.map(g=>[g.vertexData.matricesIndicesExtra,g.transform])),r&&(yield)),c.matricesWeightsExtra&&(this.matricesWeightsExtra=n._MergeElement(L.MatricesWeightsExtraKind,c.matricesWeightsExtra,e,t.map(g=>[g.vertexData.matricesWeightsExtra,g.transform]))),this}static _MergeElement(e,t,i,r){let s=r.filter(l=>l[0]!==null&&l[0]!==void 0);if(!t&&s.length==0)return t;if(!t)return this._MergeElement(e,s[0][0],s[0][1],s.slice(1));let a=s.reduce((l,c)=>l+c[0].length,t.length),o=e===L.PositionKind?n._TransformVector3Coordinates:e===L.NormalKind?n._TransformVector3Normals:e===L.TangentKind?n._TransformVector4Normals:()=>{};if(t instanceof Float32Array){let l=new Float32Array(a);l.set(t),i&&o(l,i,0,t.length);let c=t.length;for(let[f,h]of s)l.set(f,c),h&&o(l,h,c,f.length),c+=f.length;return l}else{let l=new Array(a);for(let f=0;f{let a=L.DeduceStride(r);if(s.length%a!==0)throw new Error("The "+r+"s array count must be a multiple of "+a);return s.length/a},t=e(L.PositionKind,this.positions),i=(r,s)=>{let a=e(r,s);if(a!==t)throw new Error("The "+r+"s element count ("+a+") does not match the positions count ("+t+")")};this.normals&&i(L.NormalKind,this.normals),this.tangents&&i(L.TangentKind,this.tangents),this.uvs&&i(L.UVKind,this.uvs),this.uvs2&&i(L.UV2Kind,this.uvs2),this.uvs3&&i(L.UV3Kind,this.uvs3),this.uvs4&&i(L.UV4Kind,this.uvs4),this.uvs5&&i(L.UV5Kind,this.uvs5),this.uvs6&&i(L.UV6Kind,this.uvs6),this.colors&&i(L.ColorKind,this.colors),this.matricesIndices&&i(L.MatricesIndicesKind,this.matricesIndices),this.matricesWeights&&i(L.MatricesWeightsKind,this.matricesWeights),this.matricesIndicesExtra&&i(L.MatricesIndicesExtraKind,this.matricesIndicesExtra),this.matricesWeightsExtra&&i(L.MatricesWeightsExtraKind,this.matricesWeightsExtra)}clone(){let e=this.serialize();return n.Parse(e)}serialize(){let e={};if(this.positions&&(e.positions=Array.from(this.positions)),this.normals&&(e.normals=Array.from(this.normals)),this.tangents&&(e.tangents=Array.from(this.tangents)),this.uvs&&(e.uvs=Array.from(this.uvs)),this.uvs2&&(e.uvs2=Array.from(this.uvs2)),this.uvs3&&(e.uvs3=Array.from(this.uvs3)),this.uvs4&&(e.uvs4=Array.from(this.uvs4)),this.uvs5&&(e.uvs5=Array.from(this.uvs5)),this.uvs6&&(e.uvs6=Array.from(this.uvs6)),this.colors&&(e.colors=Array.from(this.colors),e.hasVertexAlpha=this.hasVertexAlpha),this.matricesIndices&&(e.matricesIndices=Array.from(this.matricesIndices),e.matricesIndicesExpanded=!0),this.matricesWeights&&(e.matricesWeights=Array.from(this.matricesWeights)),this.matricesIndicesExtra&&(e.matricesIndicesExtra=Array.from(this.matricesIndicesExtra),e.matricesIndicesExtraExpanded=!0),this.matricesWeightsExtra&&(e.matricesWeightsExtra=Array.from(this.matricesWeightsExtra)),e.indices=this.indices?Array.from(this.indices):[],this.materialInfos){e.materialInfos=[];for(let t of this.materialInfos){let i={indexStart:t.indexStart,indexCount:t.indexCount,materialIndex:t.materialIndex,verticesStart:t.verticesStart,verticesCount:t.verticesCount};e.materialInfos.push(i)}}return e}static ExtractFromMesh(e,t,i){return n._ExtractFrom(e,t,i)}static ExtractFromGeometry(e,t,i){return n._ExtractFrom(e,t,i)}static _ExtractFrom(e,t,i){let r=new n;if(e.isVerticesDataPresent(L.PositionKind)&&(r.positions=e.getVerticesData(L.PositionKind,t,i)),e.isVerticesDataPresent(L.NormalKind)&&(r.normals=e.getVerticesData(L.NormalKind,t,i)),e.isVerticesDataPresent(L.TangentKind)&&(r.tangents=e.getVerticesData(L.TangentKind,t,i)),e.isVerticesDataPresent(L.UVKind)&&(r.uvs=e.getVerticesData(L.UVKind,t,i)),e.isVerticesDataPresent(L.UV2Kind)&&(r.uvs2=e.getVerticesData(L.UV2Kind,t,i)),e.isVerticesDataPresent(L.UV3Kind)&&(r.uvs3=e.getVerticesData(L.UV3Kind,t,i)),e.isVerticesDataPresent(L.UV4Kind)&&(r.uvs4=e.getVerticesData(L.UV4Kind,t,i)),e.isVerticesDataPresent(L.UV5Kind)&&(r.uvs5=e.getVerticesData(L.UV5Kind,t,i)),e.isVerticesDataPresent(L.UV6Kind)&&(r.uvs6=e.getVerticesData(L.UV6Kind,t,i)),e.isVerticesDataPresent(L.ColorKind)){let s=e.geometry||e,a=s.getVertexBuffer(L.ColorKind),o=s.getVerticesData(L.ColorKind,t,i);if(a.getSize()===3){let l=new Float32Array(o.length*4/3);for(let c=0,f=0;c!Array.isArray(n[0]))],Ie,"_TransformVector3Coordinates",null);P([us.filter((...n)=>!Array.isArray(n[0]))],Ie,"_TransformVector3Normals",null);P([us.filter((...n)=>!Array.isArray(n[0]))],Ie,"_TransformVector4Normals",null);P([us.filter((...n)=>!Array.isArray(n[0]))],Ie,"_FlipFaces",null)});var Wr,YT=C(()=>{Wr=class n{static get ForceFullSceneLoadingForIncremental(){return n._ForceFullSceneLoadingForIncremental}static set ForceFullSceneLoadingForIncremental(e){n._ForceFullSceneLoadingForIncremental=e}static get ShowLoadingScreen(){return n._ShowLoadingScreen}static set ShowLoadingScreen(e){n._ShowLoadingScreen=e}static get loggingLevel(){return n._LoggingLevel}static set loggingLevel(e){n._LoggingLevel=e}static get CleanBoneMatrixWeights(){return n._CleanBoneMatrixWeights}static set CleanBoneMatrixWeights(e){n._CleanBoneMatrixWeights=e}};Wr._ForceFullSceneLoadingForIncremental=!1;Wr._ShowLoadingScreen=!0;Wr._CleanBoneMatrixWeights=!1;Wr._LoggingLevel=0});var cn,KT=C(()=>{Ve();Ht();lr();Ui();V_();YT();Zu();Ci();tf();XT();Pi();Qr();Vu();cn=class n{get boundingBias(){return this._boundingBias}set boundingBias(e){this._boundingBias?this._boundingBias.copyFrom(e):this._boundingBias=e.clone(),this._updateBoundingInfo(!0,null)}static CreateGeometryForMesh(e){let t=new n(n.RandomId(),e.getScene());return t.applyToMesh(e),t}get meshes(){return this._meshes}constructor(e,t,i,r=!1,s=null,a=null){this.delayLoadState=0,this._totalVertices=0,this._isDisposed=!1,this._extend={minimum:new b(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE),maximum:new b(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE)},this._indexBufferIsUpdatable=!1,this._positionsCache=[],this._parentContainer=null,this.useBoundingInfoFromGeometry=!1,this._scene=t||Le.LastCreatedScene,this._scene&&(this.id=e,this.uniqueId=this._scene.getUniqueId(),this._engine=this._scene.getEngine(),this._meshes=[],this._vertexBuffers={},this._indices=[],this._updatable=r,a!==null&&(this._totalVertices=a),i?this.setAllVerticesData(i,r):a===null&&(this._totalVertices=0),this._engine.getCaps().vertexArrayObject&&(this._vertexArrayObjects={}),s&&(this.applyToMesh(s),s.computeWorldMatrix(!0)))}get extend(){return this._extend}getScene(){return this._scene}getEngine(){return this._engine}isReady(){return this.delayLoadState===1||this.delayLoadState===0}get doNotSerialize(){for(let e=0;e{t._rebuild()})}setAllVerticesData(e,t){e.applyToGeometry(this,t),this._notifyUpdate()}setVerticesData(e,t,i=!1,r){i&&Array.isArray(t)&&(t=new Float32Array(t));let s=new L(this._engine,t,e,{updatable:i,postponeInternalCreation:this._meshes.length===0,stride:r,label:"Geometry_"+this.id+"_"+e});this.setVerticesBuffer(s)}removeVerticesData(e){this._vertexBuffers[e]&&(this._vertexBuffers[e].dispose(),delete this._vertexBuffers[e]),this._vertexArrayObjects&&this._disposeVertexArrayObjects()}setVerticesBuffer(e,t=null,i=!0){let r=e.getKind();this._vertexBuffers[r]&&i&&this._vertexBuffers[r].dispose(),e._buffer&&e._ownsBuffer&&e._buffer._increaseReferences(),this._vertexBuffers[r]=e;let s=this._meshes,a=s.length;if(r===L.PositionKind){this._totalVertices=t!=null?t:e._maxVerticesCount,this._updateExtend(this.useBoundingInfoFromGeometry&&this._boundingInfo?null:e.getFloatData(this._totalVertices)),this._resetPointsArrayCache();let o=this._extend&&this._extend.minimum||new b(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE),l=this._extend&&this._extend.maximum||new b(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE);for(let c=0;c65535:e.is32Bits=r;for(let s of this._meshes)s._createGlobalSubMesh(!0),s.synchronizeInstances();this._notifyUpdate()}setIndices(e,t=null,i=!1,r=!1){this._indexBuffer&&this._engine._releaseBuffer(this._indexBuffer),this._indices=e,this._indexBufferIsUpdatable=i,this._meshes.length!==0&&this._indices&&(this._indexBuffer=this._engine.createIndexBuffer(this._indices,i,"Geometry_"+this.id+"_IndexBuffer")),t!=null&&(this._totalVertices=t);for(let s of this._meshes)s._createGlobalSubMesh(!r),s.synchronizeInstances();this._notifyUpdate()}getTotalIndices(){return this.isReady()?this._totalIndices!==void 0?this._totalIndices:this._indices.length:0}getIndices(e,t){if(!this.isReady())return null;let i=this._indices;return!t&&(!e||this._meshes.length===1)?i:i.slice()}getIndexBuffer(){return this.isReady()?this._indexBuffer:null}_releaseVertexArrayObject(e=null){!e||!this._vertexArrayObjects||this._vertexArrayObjects[e.key]&&(this._engine.releaseVertexArrayObject(this._vertexArrayObjects[e.key]),delete this._vertexArrayObjects[e.key])}releaseForMesh(e,t){let i=this._meshes,r=i.indexOf(e);r!==-1&&(i.splice(r,1),this._vertexArrayObjects&&e._invalidateInstanceVertexArrayObject(),e._geometry=null,i.length===0&&t&&this.dispose())}applyToMesh(e){if(e._geometry===this)return;let t=e._geometry;t&&t.releaseForMesh(e),this._vertexArrayObjects&&e._invalidateInstanceVertexArrayObject();let i=this._meshes;e._geometry=this,e._internalAbstractMeshDataInfo._positions=null,this._scene.pushGeometry(this),i.push(e),this.isReady()?this._applyToMesh(e):this._boundingInfo&&e.setBoundingInfo(this._boundingInfo)}_updateExtend(e=null){if(this.useBoundingInfoFromGeometry&&this._boundingInfo)this._extend={minimum:this._boundingInfo.minimum.clone(),maximum:this._boundingInfo.maximum.clone()};else{if(!e&&(e=this.getVerticesData(L.PositionKind),!e))return;this._extend=zT(e,0,this._totalVertices,this.boundingBias,3)}}_applyToMesh(e){for(let t in this._vertexBuffers){let i=this._vertexBuffers[t];i._buffer.getBuffer()||i.create(),t===L.PositionKind&&(this._extend||this._updateExtend(),e.buildBoundingInfo(this._extend.minimum,this._extend.maximum),e._createGlobalSubMesh(e.isUnIndexed),e._updateBoundingInfo())}!this._indexBuffer&&this._indices&&this._indices.length>0&&(this._indexBuffer=this._engine.createIndexBuffer(this._indices,this._updatable,"Geometry_"+this.id+"_IndexBuffer")),e._syncGeometryWithMorphTargetManager(),e.synchronizeInstances()}_notifyUpdate(e){this.onGeometryUpdated&&this.onGeometryUpdated(this,e),this._vertexArrayObjects&&this._disposeVertexArrayObjects();for(let t of this._meshes)t._markSubMeshesAsAttributesDirty()}load(e,t){if(this.delayLoadState!==2){if(this.isReady()){t&&t();return}this.delayLoadState=2,this._queueLoad(e,t)}}_queueLoad(e,t){this.delayLoadingFile&&(e.addPendingData(this),e._loadFile(this.delayLoadingFile,i=>{if(!this._delayLoadingFunction)return;this._delayLoadingFunction(JSON.parse(i),this),this.delayLoadState=1,this._delayInfo=[],e.removePendingData(this);let r=this._meshes,s=r.length;for(let a=0;a0){for(let r=0;r0){for(let r=0;r0){for(let r=0;r-1&&this._parentContainer.geometries.splice(r,1),this._parentContainer=null}this._isDisposed=!0}copy(e){let t=new n(e,this._scene),i=this.getIndices(void 0,!0);i&&t.setIndices(i);let r=!1,s;for(s in this._vertexBuffers){let a=this.getVertexBuffer(s),o=a.getData();if(!o)continue;let l=a.isUpdatable(),c=a.getSize(),{type:f,byteOffset:h,byteStride:d,normalized:u}=a;r=r||l;let m=this._totalVertices;if(a.getIsInstanced()){let g;o instanceof Array?g=o.length*4:g=o.byteLength,m=g/d}let _=F3(o,c,f,h,d,m,!0),p=new L(this._engine,_,s,{updatable:l,useBytes:!1,stride:c,size:c,offset:0,type:f,normalized:u,takeBufferOwnership:!0,instanced:a.getIsInstanced()});t.setVerticesBuffer(p,m)}t._updatable=r,t.delayLoadState=this.delayLoadState,t.delayLoadingFile=this.delayLoadingFile,t._delayLoadingFunction=this._delayLoadingFunction;for(s in this._delayInfo)t._delayInfo=t._delayInfo||[],t._delayInfo.push(s);return t._boundingInfo=new ln(this._extend.minimum,this._extend.maximum),t}serialize(){let e={};return e.id=this.id,e.uniqueId=this.uniqueId,e.updatable=this._updatable,qt&&qt.HasTags(this)&&(e.tags=qt.GetTags(this)),e}_toNumberArray(e){return Array.isArray(e)?e:Array.prototype.slice.call(e)}clearCachedData(){this._totalIndices=this._indices.length,this._indices=[],this._resetPointsArrayCache();for(let e in this._vertexBuffers)Object.prototype.hasOwnProperty.call(this._vertexBuffers,e)&&(this._vertexBuffers[e]._buffer._data=null)}serializeVerticeData(){let e=this.serialize();return this.isVerticesDataPresent(L.PositionKind)&&(e.positions=this._toNumberArray(this.getVerticesData(L.PositionKind)),this.isVertexBufferUpdatable(L.PositionKind)&&(e.positionsUpdatable=!0)),this.isVerticesDataPresent(L.NormalKind)&&(e.normals=this._toNumberArray(this.getVerticesData(L.NormalKind)),this.isVertexBufferUpdatable(L.NormalKind)&&(e.normalsUpdatable=!0)),this.isVerticesDataPresent(L.TangentKind)&&(e.tangents=this._toNumberArray(this.getVerticesData(L.TangentKind)),this.isVertexBufferUpdatable(L.TangentKind)&&(e.tangentsUpdatable=!0)),this.isVerticesDataPresent(L.UVKind)&&(e.uvs=this._toNumberArray(this.getVerticesData(L.UVKind)),this.isVertexBufferUpdatable(L.UVKind)&&(e.uvsUpdatable=!0)),this.isVerticesDataPresent(L.UV2Kind)&&(e.uvs2=this._toNumberArray(this.getVerticesData(L.UV2Kind)),this.isVertexBufferUpdatable(L.UV2Kind)&&(e.uvs2Updatable=!0)),this.isVerticesDataPresent(L.UV3Kind)&&(e.uvs3=this._toNumberArray(this.getVerticesData(L.UV3Kind)),this.isVertexBufferUpdatable(L.UV3Kind)&&(e.uvs3Updatable=!0)),this.isVerticesDataPresent(L.UV4Kind)&&(e.uvs4=this._toNumberArray(this.getVerticesData(L.UV4Kind)),this.isVertexBufferUpdatable(L.UV4Kind)&&(e.uvs4Updatable=!0)),this.isVerticesDataPresent(L.UV5Kind)&&(e.uvs5=this._toNumberArray(this.getVerticesData(L.UV5Kind)),this.isVertexBufferUpdatable(L.UV5Kind)&&(e.uvs5Updatable=!0)),this.isVerticesDataPresent(L.UV6Kind)&&(e.uvs6=this._toNumberArray(this.getVerticesData(L.UV6Kind)),this.isVertexBufferUpdatable(L.UV6Kind)&&(e.uvs6Updatable=!0)),this.isVerticesDataPresent(L.ColorKind)&&(e.colors=this._toNumberArray(this.getVerticesData(L.ColorKind)),this.isVertexBufferUpdatable(L.ColorKind)&&(e.colorsUpdatable=!0)),this.isVerticesDataPresent(L.MatricesIndicesKind)&&(e.matricesIndices=this._toNumberArray(this.getVerticesData(L.MatricesIndicesKind)),e.matricesIndicesExpanded=!0,this.isVertexBufferUpdatable(L.MatricesIndicesKind)&&(e.matricesIndicesUpdatable=!0)),this.isVerticesDataPresent(L.MatricesWeightsKind)&&(e.matricesWeights=this._toNumberArray(this.getVerticesData(L.MatricesWeightsKind)),this.isVertexBufferUpdatable(L.MatricesWeightsKind)&&(e.matricesWeightsUpdatable=!0)),e.indices=this._toNumberArray(this.getIndices()),e}static ExtractFromMesh(e,t){let i=e._geometry;return i?i.copy(t):null}static RandomId(){return he.RandomId()}static _GetGeometryByLoadedUniqueId(e,t){for(let i=0;i0){let o=new Float32Array(e,a.positionsAttrDesc.offset,a.positionsAttrDesc.count);t.setVerticesData(L.PositionKind,o,!1)}if(a.normalsAttrDesc&&a.normalsAttrDesc.count>0){let o=new Float32Array(e,a.normalsAttrDesc.offset,a.normalsAttrDesc.count);t.setVerticesData(L.NormalKind,o,!1)}if(a.tangetsAttrDesc&&a.tangetsAttrDesc.count>0){let o=new Float32Array(e,a.tangetsAttrDesc.offset,a.tangetsAttrDesc.count);t.setVerticesData(L.TangentKind,o,!1)}if(a.uvsAttrDesc&&a.uvsAttrDesc.count>0){let o=new Float32Array(e,a.uvsAttrDesc.offset,a.uvsAttrDesc.count);if(It)for(let l=1;l0){let o=new Float32Array(e,a.uvs2AttrDesc.offset,a.uvs2AttrDesc.count);if(It)for(let l=1;l0){let o=new Float32Array(e,a.uvs3AttrDesc.offset,a.uvs3AttrDesc.count);if(It)for(let l=1;l0){let o=new Float32Array(e,a.uvs4AttrDesc.offset,a.uvs4AttrDesc.count);if(It)for(let l=1;l0){let o=new Float32Array(e,a.uvs5AttrDesc.offset,a.uvs5AttrDesc.count);if(It)for(let l=1;l0){let o=new Float32Array(e,a.uvs6AttrDesc.offset,a.uvs6AttrDesc.count);if(It)for(let l=1;l0){let o=new Float32Array(e,a.colorsAttrDesc.offset,a.colorsAttrDesc.count);t.setVerticesData(L.ColorKind,o,!1,a.colorsAttrDesc.stride)}if(a.matricesIndicesAttrDesc&&a.matricesIndicesAttrDesc.count>0){let o=new Int32Array(e,a.matricesIndicesAttrDesc.offset,a.matricesIndicesAttrDesc.count),l=[];for(let c=0;c>8),l.push((f&16711680)>>16),l.push(f>>24&255)}t.setVerticesData(L.MatricesIndicesKind,l,!1)}if(a.matricesIndicesExtraAttrDesc&&a.matricesIndicesExtraAttrDesc.count>0){let o=new Int32Array(e,a.matricesIndicesExtraAttrDesc.offset,a.matricesIndicesExtraAttrDesc.count),l=[];for(let c=0;c>8),l.push((f&16711680)>>16),l.push(f>>24&255)}t.setVerticesData(L.MatricesIndicesExtraKind,l,!1)}if(a.matricesWeightsAttrDesc&&a.matricesWeightsAttrDesc.count>0){let o=new Float32Array(e,a.matricesWeightsAttrDesc.offset,a.matricesWeightsAttrDesc.count);t.setVerticesData(L.MatricesWeightsKind,o,!1)}if(a.indicesAttrDesc&&a.indicesAttrDesc.count>0){let o=new Int32Array(e,a.indicesAttrDesc.offset,a.indicesAttrDesc.count);t.setIndices(o,null)}if(a.subMeshesAttrDesc&&a.subMeshesAttrDesc.count>0){let o=new Int32Array(e,a.subMeshesAttrDesc.offset,a.subMeshesAttrDesc.count*5);t.subMeshes=[];for(let l=0;l>8),a.push((l&16711680)>>16),a.push(l>>24&255)}t.setVerticesData(L.MatricesIndicesKind,a,e.matricesIndices._updatable||e.matricesIndicesUpdatable)}else delete e.matricesIndices._isExpanded,delete e.matricesIndicesExpanded,t.setVerticesData(L.MatricesIndicesKind,e.matricesIndices,e.matricesIndices._updatable||e.matricesIndicesUpdatable);if(e.matricesIndicesExtra)if(e.matricesIndicesExtraExpanded||e.matricesIndicesExtra._isExpanded)delete e.matricesIndices._isExpanded,delete e.matricesIndicesExtraExpanded,t.setVerticesData(L.MatricesIndicesExtraKind,e.matricesIndicesExtra,e.matricesIndicesExtra._updatable||e.matricesIndicesExtraUpdatable);else{let a=[];for(let o=0;o>8),a.push((l&16711680)>>16),a.push(l>>24&255)}t.setVerticesData(L.MatricesIndicesExtraKind,a,e.matricesIndicesExtra._updatable||e.matricesIndicesExtraUpdatable)}e.matricesWeights&&(n._CleanMatricesWeights(e,t),t.setVerticesData(L.MatricesWeightsKind,e.matricesWeights,e.matricesWeights._updatable)),e.matricesWeightsExtra&&t.setVerticesData(L.MatricesWeightsExtraKind,e.matricesWeightsExtra,e.matricesWeights._updatable),t.setIndices(e.indices,null)}if(e.subMeshes){t.subMeshes=[];for(let a=0;a-1){let h=t.getScene().getLastSkeletonById(e.skeletonId);if(!h)return;r=h.bones.length}else return;let s=t.getVerticesData(L.MatricesIndicesKind),a=t.getVerticesData(L.MatricesIndicesExtraKind),o=e.matricesWeights,l=e.matricesWeightsExtra,c=e.numBoneInfluencer,f=o.length;for(let h=0;hc-1)&&(u=c-1),d>.001){let m=1/d;for(let _=0;_<4;_++)o[h+_]*=m;if(l)for(let _=0;_<4;_++)l[h+_]*=m}else u>=4?(l[h+u-4]=1-d,a[h+u-4]=r):(o[h+u]=1-d,s[h+u]=r)}t.setVerticesData(L.MatricesIndicesKind,s),e.matricesWeightsExtra&&t.setVerticesData(L.MatricesIndicesExtraKind,a)}static Parse(e,t,i){let r=new n(e.id,t,void 0,e.updatable);return r._loadedUniqueId=e.uniqueId,qt&&qt.AddTagsTo(r,e.tags),e.delayLoadingFile?(r.delayLoadState=4,r.delayLoadingFile=i+e.delayLoadingFile,r._boundingInfo=new ln(b.FromArray(e.boundingBoxMinimum),b.FromArray(e.boundingBoxMaximum)),r._delayInfo=[],e.hasUVs&&r._delayInfo.push(L.UVKind),e.hasUVs2&&r._delayInfo.push(L.UV2Kind),e.hasUVs3&&r._delayInfo.push(L.UV3Kind),e.hasUVs4&&r._delayInfo.push(L.UV4Kind),e.hasUVs5&&r._delayInfo.push(L.UV5Kind),e.hasUVs6&&r._delayInfo.push(L.UV6Kind),e.hasColors&&r._delayInfo.push(L.ColorKind),e.hasMatricesIndices&&r._delayInfo.push(L.MatricesIndicesKind),e.hasMatricesWeights&&r._delayInfo.push(L.MatricesWeightsKind),r._delayLoadingFunction=Ie.ImportVertexData):Ie.ImportVertexData(e,r),t.pushGeometry(r,!0),r}}});var Jt,Gh=C(()=>{kt();Ut();_r();hi();Ve();Hs();Vi();Jt=class n extends _i{get billboardMode(){return this._billboardMode}set billboardMode(e){this._billboardMode!==e&&(this._billboardMode=e,this._cache.useBillboardPosition=(this._billboardMode&n.BILLBOARDMODE_USE_POSITION)!==0)}get infiniteDistance(){return this._infiniteDistance}set infiniteDistance(e){this._infiniteDistance!==e&&(this._infiniteDistance=e)}constructor(e,t=null,i=!0){super(e,t,!1),this._forward=new b(0,0,1),this._up=new b(0,1,0),this._right=new b(1,0,0),this._position=b.Zero(),this._rotation=b.Zero(),this._rotationQuaternion=null,this._scaling=b.One(),this._transformToBoneReferal=null,this._isAbsoluteSynced=!1,this._billboardMode=n.BILLBOARDMODE_NONE,this.scalingDeterminant=1,this._infiniteDistance=!1,this.ignoreNonUniformScaling=!1,this.reIntegrateRotationIntoRotationQuaternion=!1,this._poseMatrix=null,this._localMatrix=K.Zero(),this._usePivotMatrix=!1,this._absolutePosition=b.Zero(),this._absoluteScaling=b.Zero(),this._absoluteRotationQuaternion=ze.Identity(),this._pivotMatrix=K.Identity(),this._postMultiplyPivotMatrix=!1,this._isWorldMatrixFrozen=!1,this._indexInSceneTransformNodesArray=-1,this.onAfterWorldMatrixUpdateObservable=new ee,this._nonUniformScaling=!1,i&&this.getScene().addTransformNode(this)}getClassName(){return"TransformNode"}get position(){return this._position}set position(e){this._position=e,this._markAsDirtyInternal()}isUsingPivotMatrix(){return this._usePivotMatrix}isUsingPostMultiplyPivotMatrix(){return this._postMultiplyPivotMatrix}get rotation(){return this._rotation}set rotation(e){this._rotation=e,this._rotationQuaternion=null,this._markAsDirtyInternal()}get scaling(){return this._scaling}set scaling(e){this._scaling=e,this._markAsDirtyInternal()}get rotationQuaternion(){return this._rotationQuaternion}set rotationQuaternion(e){this._rotationQuaternion=e,e&&this._rotation.setAll(0),this._markAsDirtyInternal()}_markAsDirtyInternal(){this._isDirty||(this._isDirty=!0,this.customMarkAsDirty&&this.customMarkAsDirty())}get forward(){return b.TransformNormalFromFloatsToRef(0,0,this.getScene().useRightHandedSystem?-1:1,this.getWorldMatrix(),this._forward),this._forward.normalize()}get up(){return b.TransformNormalFromFloatsToRef(0,1,0,this.getWorldMatrix(),this._up),this._up.normalize()}get right(){return b.TransformNormalFromFloatsToRef(this.getScene().useRightHandedSystem?-1:1,0,0,this.getWorldMatrix(),this._right),this._right.normalize()}updatePoseMatrix(e){return this._poseMatrix?(this._poseMatrix.copyFrom(e),this):(this._poseMatrix=e.clone(),this)}getPoseMatrix(){return this._poseMatrix||(this._poseMatrix=K.Identity()),this._poseMatrix}_isSynchronized(){let e=this._cache;return!(this._billboardMode!==e.billboardMode||this._billboardMode!==n.BILLBOARDMODE_NONE||e.pivotMatrixUpdated||this._infiniteDistance||this._position._isDirty||this._scaling._isDirty||this._rotationQuaternion&&this._rotationQuaternion._isDirty||this._rotation._isDirty)}_initCache(){super._initCache();let e=this._cache;e.localMatrixUpdated=!1,e.billboardMode=-1,e.infiniteDistance=!1,e.useBillboardPosition=!1}get absolutePosition(){return this.getAbsolutePosition()}get absoluteScaling(){return this._syncAbsoluteScalingAndRotation(),this._absoluteScaling}get absoluteRotationQuaternion(){return this._syncAbsoluteScalingAndRotation(),this._absoluteRotationQuaternion}setPreTransformMatrix(e){return this.setPivotMatrix(e,!1)}setPivotMatrix(e,t=!0){return this._pivotMatrix.copyFrom(e),this._usePivotMatrix=!this._pivotMatrix.isIdentity(),this._cache.pivotMatrixUpdated=!0,this._postMultiplyPivotMatrix=t,this._postMultiplyPivotMatrix&&(this._pivotMatrixInverse?this._pivotMatrix.invertToRef(this._pivotMatrixInverse):this._pivotMatrixInverse=K.Invert(this._pivotMatrix)),this}getPivotMatrix(){return this._pivotMatrix}instantiateHierarchy(e=null,t,i){let r=this.clone("Clone of "+(this.name||this.id),e||this.parent,!0);r&&i&&i(this,r);for(let s of this.getChildTransformNodes(!0))s.instantiateHierarchy(r,t,i);return r}freezeWorldMatrix(e=null,t=!1){return e?t?(this._rotation.setAll(0),this._rotationQuaternion=this._rotationQuaternion||ze.Identity(),e.decompose(this._scaling,this._rotationQuaternion,this._position),this.computeWorldMatrix(!0)):(this._worldMatrix=e,this._absolutePosition.copyFromFloats(this._worldMatrix.m[12],this._worldMatrix.m[13],this._worldMatrix.m[14]),this._afterComputeWorldMatrix()):(this._isWorldMatrixFrozen=!1,this.computeWorldMatrix(!0)),this._isDirty=!1,this._isWorldMatrixFrozen=!0,this}unfreezeWorldMatrix(){return this._isWorldMatrixFrozen=!1,this.computeWorldMatrix(!0),this}get isWorldMatrixFrozen(){return this._isWorldMatrixFrozen}getAbsolutePosition(){return this.computeWorldMatrix(),this._absolutePosition}setAbsolutePosition(e){if(!e)return this;let t,i,r;if(e.x===void 0){if(arguments.length<3)return this;t=arguments[0],i=arguments[1],r=arguments[2]}else t=e.x,i=e.y,r=e.z;if(this.parent){let s=Z.Matrix[0];this.parent.getWorldMatrix().invertToRef(s),b.TransformCoordinatesFromFloatsToRef(t,i,r,s,this.position)}else this.position.x=t,this.position.y=i,this.position.z=r;return this._absolutePosition.copyFrom(e),this}setPositionWithLocalVector(e){return this.computeWorldMatrix(),this.position=b.TransformNormal(e,this._localMatrix),this}getPositionExpressedInLocalSpace(){this.computeWorldMatrix();let e=Z.Matrix[0];return this._localMatrix.invertToRef(e),b.TransformNormal(this.position,e)}locallyTranslate(e){return this.computeWorldMatrix(!0),this.position=b.TransformCoordinates(e,this._localMatrix),this}lookAt(e,t=0,i=0,r=0,s=0){let a=n._LookAtVectorCache,o=s===0?this.position:this.getAbsolutePosition();if(e.subtractToRef(o,a),this.setDirection(a,t,i,r),s===1&&this.parent)if(this.rotationQuaternion){let l=Z.Matrix[0];this.rotationQuaternion.toRotationMatrix(l);let c=Z.Matrix[1];this.parent.getWorldMatrix().getRotationMatrixToRef(c),c.invert(),l.multiplyToRef(c,l),this.rotationQuaternion.fromRotationMatrix(l)}else{let l=Z.Quaternion[0];ze.FromEulerVectorToRef(this.rotation,l);let c=Z.Matrix[0];l.toRotationMatrix(c);let f=Z.Matrix[1];this.parent.getWorldMatrix().getRotationMatrixToRef(f),f.invert(),c.multiplyToRef(f,c),l.fromRotationMatrix(c),l.toEulerAnglesToRef(this.rotation)}return this}getDirection(e){let t=b.Zero();return this.getDirectionToRef(e,t),t}getDirectionToRef(e,t){return b.TransformNormalToRef(e,this.getWorldMatrix(),t),this}setDirection(e,t=0,i=0,r=0){let s=-Math.atan2(e.z,e.x)+Math.PI/2,a=Math.sqrt(e.x*e.x+e.z*e.z),o=-Math.atan2(e.y,a);return this.rotationQuaternion?ze.RotationYawPitchRollToRef(s+t,o+i,r,this.rotationQuaternion):(this.rotation.x=o+i,this.rotation.y=s+t,this.rotation.z=r),this}setPivotPoint(e,t=0){this.getScene().getRenderId()==0&&this.computeWorldMatrix(!0);let i=this.getWorldMatrix();if(t==1){let r=Z.Matrix[0];i.invertToRef(r),e=b.TransformCoordinates(e,r)}return this.setPivotMatrix(K.Translation(-e.x,-e.y,-e.z),!0)}getPivotPoint(){let e=b.Zero();return this.getPivotPointToRef(e),e}getPivotPointToRef(e){return e.x=-this._pivotMatrix.m[12],e.y=-this._pivotMatrix.m[13],e.z=-this._pivotMatrix.m[14],this}getAbsolutePivotPoint(){let e=b.Zero();return this.getAbsolutePivotPointToRef(e),e}getAbsolutePivotPointToRef(e){return this.getPivotPointToRef(e),b.TransformCoordinatesToRef(e,this.getWorldMatrix(),e),this}markAsDirty(e){if(this._isDirty)return this;if(this._children)for(let t of this._children)t.markAsDirty(e);return super.markAsDirty(e)}setParent(e,t=!1,i=!1){if(!e&&!this.parent)return this;let r=Z.Quaternion[0],s=Z.Vector3[0],a=Z.Vector3[1],o=Z.Matrix[1];K.IdentityToRef(o);let l=Z.Matrix[0];this.computeWorldMatrix(!0);let c=this.rotationQuaternion;return c||(c=n._TmpRotation,ze.RotationYawPitchRollToRef(this._rotation.y,this._rotation.x,this._rotation.z,c)),K.ComposeToRef(this.scaling,c,this.position,l),this.parent&&l.multiplyToRef(this.parent.computeWorldMatrix(!0),l),e&&(e.computeWorldMatrix(!0).invertToRef(o),l.multiplyToRef(o,l)),l.decompose(a,r,s,t?this:void 0),this.rotationQuaternion?this.rotationQuaternion.copyFrom(r):r.toEulerAnglesToRef(this.rotation),this.scaling.copyFrom(a),this.position.copyFrom(s),this.parent=e,i&&this.setPivotMatrix(K.Identity()),this}addChild(e,t=!1){return e.setParent(this,t),this}removeChild(e,t=!1){return e.parent!==this?this:(e.setParent(null,t),this)}get nonUniformScaling(){return this._nonUniformScaling}_updateNonUniformScalingState(e){return this._nonUniformScaling===e?!1:(this._nonUniformScaling=e,!0)}attachToBone(e,t){return this._currentParentWhenAttachingToBone=this.parent,this._transformToBoneReferal=t,this.parent=e,e.getSkeleton().prepare(!0),e.getFinalMatrix().determinant()<0&&(this.scalingDeterminant*=-1),this}detachFromBone(e=!1){return this.parent?(this.parent.getWorldMatrix().determinant()<0&&(this.scalingDeterminant*=-1),this._transformToBoneReferal=null,e?this.parent=this._currentParentWhenAttachingToBone:this.parent=null,this):(e&&(this.parent=this._currentParentWhenAttachingToBone),this)}rotate(e,t,i){e.normalize(),this.rotationQuaternion||(this.rotationQuaternion=this.rotation.toQuaternion(),this.rotation.setAll(0));let r;if(!i||i===0)r=ze.RotationAxisToRef(e,t,n._RotationAxisCache),this.rotationQuaternion.multiplyToRef(r,this.rotationQuaternion);else{if(this.parent){let s=this.parent.getWorldMatrix(),a=Z.Matrix[0];s.invertToRef(a),e=b.TransformNormal(e,a),s.determinant()<0&&(t*=-1)}r=ze.RotationAxisToRef(e,t,n._RotationAxisCache),r.multiplyToRef(this.rotationQuaternion,this.rotationQuaternion)}return this}rotateAround(e,t,i){t.normalize(),this.rotationQuaternion||(this.rotationQuaternion=ze.RotationYawPitchRoll(this.rotation.y,this.rotation.x,this.rotation.z),this.rotation.setAll(0));let r=Z.Vector3[0],s=Z.Vector3[1],a=Z.Vector3[2],o=Z.Quaternion[0],l=Z.Matrix[0],c=Z.Matrix[1],f=Z.Matrix[2],h=Z.Matrix[3];return e.subtractToRef(this.position,r),K.TranslationToRef(r.x,r.y,r.z,l),K.TranslationToRef(-r.x,-r.y,-r.z,c),K.RotationAxisToRef(t,i,f),c.multiplyToRef(f,h),h.multiplyToRef(l,h),h.decompose(s,o,a),this.position.addInPlace(a),o.multiplyToRef(this.rotationQuaternion,this.rotationQuaternion),this}translate(e,t,i){let r=e.scale(t);if(!i||i===0){let s=this.getPositionExpressedInLocalSpace().add(r);this.setPositionWithLocalVector(s)}else this.setAbsolutePosition(this.getAbsolutePosition().add(r));return this}addRotation(e,t,i){let r;this.rotationQuaternion?r=this.rotationQuaternion:(r=Z.Quaternion[1],ze.RotationYawPitchRollToRef(this.rotation.y,this.rotation.x,this.rotation.z,r));let s=Z.Quaternion[0];return ze.RotationYawPitchRollToRef(t,e,i,s),r.multiplyInPlace(s),this.rotationQuaternion||r.toEulerAnglesToRef(this.rotation),this}_getEffectiveParent(){return this.parent}isWorldMatrixCameraDependent(){return this._infiniteDistance&&!this.parent||this._billboardMode!==n.BILLBOARDMODE_NONE}computeWorldMatrix(e=!1,t=null){if(this._isWorldMatrixFrozen&&!this._isDirty)return this._worldMatrix;let i=this.getScene().getRenderId();if(!this._isDirty&&!e&&(this._currentRenderId===i||this.isSynchronized()))return this._currentRenderId=i,this._worldMatrix;t=t||this.getScene().activeCamera,this._updateCache();let r=this._cache;r.pivotMatrixUpdated=!1,r.billboardMode=this.billboardMode,r.infiniteDistance=this.infiniteDistance,r.parent=this._parentNode,this._currentRenderId=i,this._childUpdateId+=1,this._isDirty=!1,this._position._isDirty=!1,this._rotation._isDirty=!1,this._scaling._isDirty=!1;let s=this._getEffectiveParent(),a=n._TmpScaling,o=this._position;if(this._infiniteDistance&&!this.parent&&t){let f=t.getWorldMatrix().m;o=n._TmpTranslation,o.copyFromFloats(this._position.x+f[12],this._position.y+f[13],this._position.z+f[14])}a.copyFromFloats(this._scaling.x*this.scalingDeterminant,this._scaling.y*this.scalingDeterminant,this._scaling.z*this.scalingDeterminant);let l;if(this._rotationQuaternion?(this._rotationQuaternion._isDirty=!1,l=this._rotationQuaternion,this.reIntegrateRotationIntoRotationQuaternion&&this.rotation.lengthSquared()&&(this._rotationQuaternion.multiplyInPlace(ze.RotationYawPitchRoll(this._rotation.y,this._rotation.x,this._rotation.z)),this._rotation.copyFromFloats(0,0,0))):(l=n._TmpRotation,ze.RotationYawPitchRollToRef(this._rotation.y,this._rotation.x,this._rotation.z,l)),this._usePivotMatrix){let c=Z.Matrix[1];K.ScalingToRef(a.x,a.y,a.z,c);let f=Z.Matrix[0];l.toRotationMatrix(f),this._pivotMatrix.multiplyToRef(c,Z.Matrix[4]),Z.Matrix[4].multiplyToRef(f,this._localMatrix),this._postMultiplyPivotMatrix&&this._localMatrix.multiplyToRef(this._pivotMatrixInverse,this._localMatrix),this._localMatrix.addTranslationFromFloats(o.x,o.y,o.z)}else K.ComposeToRef(a,l,o,this._localMatrix);if(s&&s.getWorldMatrix){if(e&&s.computeWorldMatrix(e),this.billboardMode){if(this._transformToBoneReferal){let d=this.parent;d.getSkeleton().prepare(),d.getFinalMatrix().multiplyToRef(this._transformToBoneReferal.getWorldMatrix(),Z.Matrix[7])}else Z.Matrix[7].copyFrom(s.getWorldMatrix());let c=Z.Vector3[5],f=Z.Vector3[6],h=Z.Quaternion[0];Z.Matrix[7].decompose(f,h,c),K.ScalingToRef(f.x,f.y,f.z,Z.Matrix[7]),Z.Matrix[7].setTranslation(c),n.BillboardUseParentOrientation&&(this._position.applyRotationQuaternionToRef(h,c),this._localMatrix.setTranslation(c)),this._localMatrix.multiplyToRef(Z.Matrix[7],this._worldMatrix)}else if(this._transformToBoneReferal){let c=this.parent;c.getSkeleton().prepare(),this._localMatrix.multiplyToRef(c.getFinalMatrix(),Z.Matrix[6]),Z.Matrix[6].multiplyToRef(this._transformToBoneReferal.getWorldMatrix(),this._worldMatrix)}else this._localMatrix.multiplyToRef(s.getWorldMatrix(),this._worldMatrix);this._markSyncedWithParent()}else this._worldMatrix.copyFrom(this._localMatrix);if(t&&this.billboardMode)if(r.useBillboardPosition){let c=Z.Vector3[0];this._worldMatrix.getTranslationToRef(c);let f=t.globalPosition;this._worldMatrix.invertToRef(Z.Matrix[1]);let h=Z.Vector3[1];b.TransformCoordinatesToRef(f,Z.Matrix[1],h),h.normalize();let d=-Math.atan2(h.z,h.x)+Math.PI/2,u=Math.sqrt(h.x*h.x+h.z*h.z),m=-Math.atan2(h.y,u);if(ze.RotationYawPitchRollToRef(d,m,0,Z.Quaternion[0]),(this.billboardMode&n.BILLBOARDMODE_ALL)!==n.BILLBOARDMODE_ALL){let _=Z.Vector3[1];Z.Quaternion[0].toEulerAnglesToRef(_),(this.billboardMode&n.BILLBOARDMODE_X)!==n.BILLBOARDMODE_X&&(_.x=0),(this.billboardMode&n.BILLBOARDMODE_Y)!==n.BILLBOARDMODE_Y&&(_.y=0),(this.billboardMode&n.BILLBOARDMODE_Z)!==n.BILLBOARDMODE_Z&&(_.z=0),K.RotationYawPitchRollToRef(_.y,_.x,_.z,Z.Matrix[0])}else K.FromQuaternionToRef(Z.Quaternion[0],Z.Matrix[0]);this._worldMatrix.setTranslationFromFloats(0,0,0),this._worldMatrix.multiplyToRef(Z.Matrix[0],this._worldMatrix),this._worldMatrix.setTranslation(Z.Vector3[0])}else{let c=Z.Vector3[0];this._worldMatrix.getTranslationToRef(c),Z.Matrix[1].copyFrom(t.getViewMatrix());let f=this.getScene().useRightHandedSystem;if(f&&Z.Matrix[1].multiplyToRef(n._TmpRHRestore,Z.Matrix[1]),Z.Matrix[1].setTranslationFromFloats(0,0,0),Z.Matrix[1].invertToRef(Z.Matrix[0]),(this.billboardMode&n.BILLBOARDMODE_ALL)!==n.BILLBOARDMODE_ALL){Z.Matrix[0].decompose(void 0,Z.Quaternion[0],void 0);let h=Z.Vector3[1];Z.Quaternion[0].toEulerAnglesToRef(h),(this.billboardMode&n.BILLBOARDMODE_X)!==n.BILLBOARDMODE_X&&(h.x=0),(this.billboardMode&n.BILLBOARDMODE_Y)!==n.BILLBOARDMODE_Y&&(h.y=0),(this.billboardMode&n.BILLBOARDMODE_Z)!==n.BILLBOARDMODE_Z&&(h.z=0),f&&(h.y+=Math.PI),K.RotationYawPitchRollToRef(h.y,h.x,h.z,Z.Matrix[0])}this._worldMatrix.setTranslationFromFloats(0,0,0),this._worldMatrix.multiplyToRef(Z.Matrix[0],this._worldMatrix),this._worldMatrix.setTranslation(Z.Vector3[0])}return this.ignoreNonUniformScaling?this._updateNonUniformScalingState(!1):this._scaling.isNonUniformWithinEpsilon(1e-6)?this._updateNonUniformScalingState(!0):s&&s._nonUniformScaling?this._updateNonUniformScalingState(s._nonUniformScaling):this._updateNonUniformScalingState(!1),this._afterComputeWorldMatrix(),this._absolutePosition.copyFromFloats(this._worldMatrix.m[12],this._worldMatrix.m[13],this._worldMatrix.m[14]),this._isAbsoluteSynced=!1,this.onAfterWorldMatrixUpdateObservable.notifyObservers(this),this._poseMatrix||(this._poseMatrix=K.Invert(this._worldMatrix)),this._worldMatrixDeterminantIsDirty=!0,this._worldMatrix}resetLocalMatrix(e=!0){if(this.computeWorldMatrix(),e){let t=this.getChildren();for(let i=0;inew n(e,this.getScene()),this);if(r.name=e,r.id=e,t&&(r.parent=t),!i){let s=this.getDescendants(!0);for(let a=0;anew n(e.name,t),e,t,i);if(e.localMatrix?r.setPreTransformMatrix(K.FromArray(e.localMatrix)):e.pivotMatrix&&r.setPivotMatrix(K.FromArray(e.pivotMatrix)),r.setEnabled(e.isEnabled),r._waitingParsedUniqueId=e.uniqueId,e.parentId!==void 0&&(r._waitingParentId=e.parentId),e.parentInstanceIndex!==void 0&&(r._waitingParentInstanceIndex=e.parentInstanceIndex),e.freezeWorldMatrix&&(r._waitingFreezeWorldMatrix=e.freezeWorldMatrix),e.animations){for(let s=0;s(!t||t(r))&&r instanceof n),i}dispose(e,t=!1){if(this.getScene().stopAnimation(this),this.getScene().removeTransformNode(this),this._parentContainer){let i=this._parentContainer.transformNodes.indexOf(this);i>-1&&this._parentContainer.transformNodes.splice(i,1),this._parentContainer=null}if(this.onAfterWorldMatrixUpdateObservable.clear(),e){let i=this.getChildTransformNodes(!0);for(let r of i)r.parent=null,r.computeWorldMatrix(!0)}super.dispose(e,t)}normalizeToUnitCube(e=!0,t=!1,i){let r=null,s=null;t&&(this.rotationQuaternion?(s=this.rotationQuaternion.clone(),this.rotationQuaternion.copyFromFloats(0,0,0,1)):this.rotation&&(r=this.rotation.clone(),this.rotation.copyFromFloats(0,0,0)));let a=this.getHierarchyBoundingVectors(e,i),o=a.max.subtract(a.min),l=Math.max(o.x,o.y,o.z);if(l===0)return this;let c=1/l;return this.scaling.scaleInPlace(c),t&&(this.rotationQuaternion&&s?this.rotationQuaternion.copyFrom(s):this.rotation&&r&&this.rotation.copyFrom(r)),this}_syncAbsoluteScalingAndRotation(){this._isAbsoluteSynced||(this._worldMatrix.decompose(this._absoluteScaling,this._absoluteRotationQuaternion),this._isAbsoluteSynced=!0)}};Jt.BILLBOARDMODE_NONE=0;Jt.BILLBOARDMODE_X=1;Jt.BILLBOARDMODE_Y=2;Jt.BILLBOARDMODE_Z=4;Jt.BILLBOARDMODE_ALL=7;Jt.BILLBOARDMODE_USE_POSITION=128;Jt.BillboardUseParentOrientation=!1;Jt._TmpRotation=ze.Zero();Jt._TmpScaling=b.Zero();Jt._TmpTranslation=b.Zero();Jt._TmpRHRestore=K.Scaling(1,1,-1);Jt._LookAtVectorCache=new b(0,0,0);Jt._RotationAxisCache=new ze;P([Vr("position")],Jt.prototype,"_position",void 0);P([Vr("rotation")],Jt.prototype,"_rotation",void 0);P([y3("rotationQuaternion")],Jt.prototype,"_rotationQuaternion",void 0);P([Vr("scaling")],Jt.prototype,"_scaling",void 0);P([F("billboardMode")],Jt.prototype,"_billboardMode",void 0);P([F()],Jt.prototype,"scalingDeterminant",void 0);P([F("infiniteDistance")],Jt.prototype,"_infiniteDistance",void 0);P([F()],Jt.prototype,"ignoreNonUniformScaling",void 0);P([F()],Jt.prototype,"reIntegrateRotationIntoRotationQuaternion",void 0)});var jT,hV=C(()=>{Ve();jT=class{constructor(){this._checkCollisions=!1,this._collisionMask=-1,this._collisionGroup=-1,this._surroundingMeshes=null,this._collider=null,this._oldPositionForCollisions=new b(0,0,0),this._diffPositionForCollisions=new b(0,0,0),this._collisionResponse=!0}}});function dV(n){return Math.floor(n/8)}function uV(n){return 1<{qT=class{constructor(e){this.size=e,this._byteArray=new Uint8Array(Math.ceil(this.size/8))}get(e){if(e>=this.size)throw new RangeError("Bit index out of range");let t=dV(e),i=uV(e);return(this._byteArray[t]&i)!==0}set(e,t){if(e>=this.size)throw new RangeError("Bit index out of range");let i=dV(e),r=uV(e);t?this._byteArray[i]|=r:this._byteArray[i]&=~r}}});var pV={};et(pV,{OptimizeIndices:()=>Xre});function Xre(n){let e=[],t=n.length/3;for(let l=0;l{let c=[l];for(;c.length>0;){let f=c.pop();if(!r.get(f)){r.set(f,!0),s.push(e[f]);for(let h of e[f]){let d=i.get(h);if(!d)return;for(let u of d)r.get(u)||c.push(u)}}}};for(let l=0;l{mV()});function Yre(n,e,t){let i;switch(e){case L.PositionKind:i=r=>r.getPositions();break;case L.NormalKind:i=r=>r.getNormals();break;case L.TangentKind:i=r=>r.getTangents();break;case L.UVKind:i=r=>r.getUVs();break;case L.UV2Kind:i=r=>r.getUV2s();break;case L.ColorKind:i=r=>r.getColors();break;default:return}for(let r=0;r0&&(K.FromFloat32ArrayToRefScaled(t,Math.floor(i[d+u]*16),m,c),l.addToSelf(c));if(s&&a)for(u=0;u<4;u++)m=a[d+u],m>0&&(K.FromFloat32ArrayToRefScaled(t,Math.floor(s[d+u]*16),m,c),l.addToSelf(c));f(n[h],n[h+1],n[h+2],l,o),o.toArray(n,h)}}var LC,OC,ur,Ju=C(()=>{kt();hi();Ve();Ui();lr();Gh();R_();Zu();nf();hV();an();XT();Ht();An();Iu();Vi();Ut();Lr();LC=class{constructor(){this.facetNb=0,this.partitioningSubdivisions=10,this.partitioningBBoxRatio=1.01,this.facetDataEnabled=!1,this.facetParameters={},this.bbSize=b.Zero(),this.subDiv={max:1,X:1,Y:1,Z:1},this.facetDepthSort=!1,this.facetDepthSortEnabled=!1}},OC=class{constructor(){this._hasVertexAlpha=!1,this._useVertexColors=!0,this._numBoneInfluencers=4,this._applyFog=!0,this._receiveShadows=!1,this._facetData=new LC,this._visibility=1,this._skeleton=null,this._layerMask=268435455,this._computeBonesUsingShaders=!0,this._isActive=!1,this._onlyForInstances=!1,this._isActiveIntermediate=!1,this._onlyForInstancesIntermediate=!1,this._actAsRegularMesh=!1,this._currentLOD=new Map,this._collisionRetryCount=3,this._morphTargetManager=null,this._renderingGroupId=0,this._bakedVertexAnimationManager=null,this._material=null,this._positions=null,this._pointerOverDisableMeshTesting=!1,this._meshCollisionData=new jT,this._enableDistantPicking=!1,this._rawBoundingInfo=null,this._sideOrientationHint=!1,this._wasActiveLastFrame=!1}},ur=class n extends Jt{static get BILLBOARDMODE_NONE(){return Jt.BILLBOARDMODE_NONE}static get BILLBOARDMODE_X(){return Jt.BILLBOARDMODE_X}static get BILLBOARDMODE_Y(){return Jt.BILLBOARDMODE_Y}static get BILLBOARDMODE_Z(){return Jt.BILLBOARDMODE_Z}static get BILLBOARDMODE_ALL(){return Jt.BILLBOARDMODE_ALL}static get BILLBOARDMODE_USE_POSITION(){return Jt.BILLBOARDMODE_USE_POSITION}get facetNb(){return this._internalAbstractMeshDataInfo._facetData.facetNb}get partitioningSubdivisions(){return this._internalAbstractMeshDataInfo._facetData.partitioningSubdivisions}set partitioningSubdivisions(e){this._internalAbstractMeshDataInfo._facetData.partitioningSubdivisions=e}get partitioningBBoxRatio(){return this._internalAbstractMeshDataInfo._facetData.partitioningBBoxRatio}set partitioningBBoxRatio(e){this._internalAbstractMeshDataInfo._facetData.partitioningBBoxRatio=e}get mustDepthSortFacets(){return this._internalAbstractMeshDataInfo._facetData.facetDepthSort}set mustDepthSortFacets(e){this._internalAbstractMeshDataInfo._facetData.facetDepthSort=e}get facetDepthSortFrom(){return this._internalAbstractMeshDataInfo._facetData.facetDepthSortFrom}set facetDepthSortFrom(e){this._internalAbstractMeshDataInfo._facetData.facetDepthSortFrom=e}get collisionRetryCount(){return this._internalAbstractMeshDataInfo._collisionRetryCount}set collisionRetryCount(e){this._internalAbstractMeshDataInfo._collisionRetryCount=e}get isFacetDataEnabled(){return this._internalAbstractMeshDataInfo._facetData.facetDataEnabled}get morphTargetManager(){return this._internalAbstractMeshDataInfo._morphTargetManager}set morphTargetManager(e){this._internalAbstractMeshDataInfo._morphTargetManager!==e&&(this._internalAbstractMeshDataInfo._morphTargetManager=e,this._syncGeometryWithMorphTargetManager())}get bakedVertexAnimationManager(){return this._internalAbstractMeshDataInfo._bakedVertexAnimationManager}set bakedVertexAnimationManager(e){this._internalAbstractMeshDataInfo._bakedVertexAnimationManager!==e&&(this._internalAbstractMeshDataInfo._bakedVertexAnimationManager=e,this._markSubMeshesAsAttributesDirty())}_syncGeometryWithMorphTargetManager(){}_updateNonUniformScalingState(e){return super._updateNonUniformScalingState(e)?(this._markSubMeshesAsMiscDirty(),!0):!1}get rawBoundingInfo(){return this._internalAbstractMeshDataInfo._rawBoundingInfo}set rawBoundingInfo(e){this._internalAbstractMeshDataInfo._rawBoundingInfo=e}set onCollide(e){this._internalAbstractMeshDataInfo._meshCollisionData._onCollideObserver&&this.onCollideObservable.remove(this._internalAbstractMeshDataInfo._meshCollisionData._onCollideObserver),this._internalAbstractMeshDataInfo._meshCollisionData._onCollideObserver=this.onCollideObservable.add(e)}set onCollisionPositionChange(e){this._internalAbstractMeshDataInfo._meshCollisionData._onCollisionPositionChangeObserver&&this.onCollisionPositionChangeObservable.remove(this._internalAbstractMeshDataInfo._meshCollisionData._onCollisionPositionChangeObserver),this._internalAbstractMeshDataInfo._meshCollisionData._onCollisionPositionChangeObserver=this.onCollisionPositionChangeObservable.add(e)}get visibility(){return this._internalAbstractMeshDataInfo._visibility}set visibility(e){if(this._internalAbstractMeshDataInfo._visibility===e)return;let t=this._internalAbstractMeshDataInfo._visibility;this._internalAbstractMeshDataInfo._visibility=e,(t===1&&e!==1||t!==1&&e===1)&&this._markSubMeshesAsDirty(i=>{i.markAsMiscDirty(),i.markAsPrePassDirty()})}get pointerOverDisableMeshTesting(){return this._internalAbstractMeshDataInfo._pointerOverDisableMeshTesting}set pointerOverDisableMeshTesting(e){this._internalAbstractMeshDataInfo._pointerOverDisableMeshTesting=e}get renderingGroupId(){return this._internalAbstractMeshDataInfo._renderingGroupId}set renderingGroupId(e){this._internalAbstractMeshDataInfo._renderingGroupId=e}get material(){return this._internalAbstractMeshDataInfo._material}set material(e){this._setMaterial(e)}_setMaterial(e){this._internalAbstractMeshDataInfo._material!==e&&(this._internalAbstractMeshDataInfo._material&&this._internalAbstractMeshDataInfo._material.meshMap&&(this._internalAbstractMeshDataInfo._material.meshMap[this.uniqueId]=void 0),this._internalAbstractMeshDataInfo._material=e,e&&e.meshMap&&(e.meshMap[this.uniqueId]=this),this.onMaterialChangedObservable.hasObservers()&&this.onMaterialChangedObservable.notifyObservers(this),this.subMeshes&&(this.resetDrawCache(void 0,e==null),this._unBindEffect()))}getMaterialForRenderPass(e){var t;return(t=this._internalAbstractMeshDataInfo._materialForRenderPass)==null?void 0:t[e]}setMaterialForRenderPass(e,t){var r;this.resetDrawCache(e),this._internalAbstractMeshDataInfo._materialForRenderPass||(this._internalAbstractMeshDataInfo._materialForRenderPass=[]);let i=this._internalAbstractMeshDataInfo._materialForRenderPass[e];(r=i==null?void 0:i.meshMap)!=null&&r[this.uniqueId]&&(i.meshMap[this.uniqueId]=void 0),this._internalAbstractMeshDataInfo._materialForRenderPass[e]=t,t&&t.meshMap&&(t.meshMap[this.uniqueId]=this)}get receiveShadows(){return this._internalAbstractMeshDataInfo._receiveShadows}set receiveShadows(e){this._internalAbstractMeshDataInfo._receiveShadows!==e&&(this._internalAbstractMeshDataInfo._receiveShadows=e,this._markSubMeshesAsLightDirty())}get hasVertexAlpha(){return this._internalAbstractMeshDataInfo._hasVertexAlpha}set hasVertexAlpha(e){this._internalAbstractMeshDataInfo._hasVertexAlpha!==e&&(this._internalAbstractMeshDataInfo._hasVertexAlpha=e,this._markSubMeshesAsAttributesDirty(),this._markSubMeshesAsMiscDirty())}get useVertexColors(){return this._internalAbstractMeshDataInfo._useVertexColors}set useVertexColors(e){this._internalAbstractMeshDataInfo._useVertexColors!==e&&(this._internalAbstractMeshDataInfo._useVertexColors=e,this._markSubMeshesAsAttributesDirty())}get computeBonesUsingShaders(){return this._internalAbstractMeshDataInfo._computeBonesUsingShaders}set computeBonesUsingShaders(e){this._internalAbstractMeshDataInfo._computeBonesUsingShaders!==e&&(this._internalAbstractMeshDataInfo._computeBonesUsingShaders=e,this._markSubMeshesAsAttributesDirty())}get numBoneInfluencers(){return this._internalAbstractMeshDataInfo._numBoneInfluencers}set numBoneInfluencers(e){this._internalAbstractMeshDataInfo._numBoneInfluencers!==e&&(this._internalAbstractMeshDataInfo._numBoneInfluencers=e,this._markSubMeshesAsAttributesDirty())}get applyFog(){return this._internalAbstractMeshDataInfo._applyFog}set applyFog(e){this._internalAbstractMeshDataInfo._applyFog!==e&&(this._internalAbstractMeshDataInfo._applyFog=e,this._markSubMeshesAsMiscDirty())}get enableDistantPicking(){return this._internalAbstractMeshDataInfo._enableDistantPicking}set enableDistantPicking(e){this._internalAbstractMeshDataInfo._enableDistantPicking=e}get layerMask(){return this._internalAbstractMeshDataInfo._layerMask}set layerMask(e){e!==this._internalAbstractMeshDataInfo._layerMask&&(this._internalAbstractMeshDataInfo._layerMask=e,this._resyncLightSources())}get collisionMask(){return this._internalAbstractMeshDataInfo._meshCollisionData._collisionMask}set collisionMask(e){this._internalAbstractMeshDataInfo._meshCollisionData._collisionMask=isNaN(e)?-1:e}get collisionResponse(){return this._internalAbstractMeshDataInfo._meshCollisionData._collisionResponse}set collisionResponse(e){this._internalAbstractMeshDataInfo._meshCollisionData._collisionResponse=e}get collisionGroup(){return this._internalAbstractMeshDataInfo._meshCollisionData._collisionGroup}set collisionGroup(e){this._internalAbstractMeshDataInfo._meshCollisionData._collisionGroup=isNaN(e)?-1:e}get surroundingMeshes(){return this._internalAbstractMeshDataInfo._meshCollisionData._surroundingMeshes}set surroundingMeshes(e){this._internalAbstractMeshDataInfo._meshCollisionData._surroundingMeshes=e}get lightSources(){return this._lightSources}set skeleton(e){let t=this._internalAbstractMeshDataInfo._skeleton;t&&t.needInitialSkinMatrix&&t._unregisterMeshWithPoseMatrix(this),e&&e.needInitialSkinMatrix&&e._registerMeshWithPoseMatrix(this),this._internalAbstractMeshDataInfo._skeleton=e,this._internalAbstractMeshDataInfo._skeleton||(this._bonesTransformMatrices=null),this._markSubMeshesAsAttributesDirty()}get skeleton(){return this._internalAbstractMeshDataInfo._skeleton}constructor(e,t=null){switch(super(e,t,!1),this._internalAbstractMeshDataInfo=new OC,this._waitingMaterialId=null,this._waitingMorphTargetManagerId=null,this._waitingSkeletonId=null,this._waitingSkeletonUniqueId=null,this.cullingStrategy=n.CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY,this.onCollideObservable=new ee,this.onCollisionPositionChangeObservable=new ee,this.onMaterialChangedObservable=new ee,this.definedFacingForward=!0,this._occlusionQuery=null,this._renderingGroup=null,this.alphaIndex=Number.MAX_VALUE,this.isPickable=n.DefaultIsPickable,this.isNearPickable=!1,this.isNearGrabbable=!1,this.showSubMeshesBoundingBox=!1,this.isBlocker=!1,this.enablePointerMoveEvents=!1,this.outlineColor=Te.Red(),this.outlineWidth=.02,this.overlayColor=Te.Red(),this.overlayAlpha=.5,this.useOctreeForRenderingSelection=!0,this.useOctreeForPicking=!0,this.useOctreeForCollisions=!0,this.alwaysSelectAsActiveMesh=!1,this.doNotSyncBoundingInfo=!1,this.actionManager=null,this.ellipsoid=new b(.5,1,.5),this.ellipsoidOffset=new b(0,0,0),this.edgesWidth=1,this.edgesColor=new lt(1,0,0,1),this._edgesRenderer=null,this._masterMesh=null,this._boundingInfo=null,this._boundingInfoIsDirty=!0,this._renderId=0,this._intersectionsInProgress=new Array,this._unIndexed=!1,this._lightSources=new Array,this._waitingData={lods:null,actions:null,freezeWorldMatrix:null},this._bonesTransformMatrices=null,this._transformMatrixTexture=null,this.onRebuildObservable=new ee,this._onCollisionPositionChange=(i,r,s=null)=>{r.subtractToRef(this._internalAbstractMeshDataInfo._meshCollisionData._oldPositionForCollisions,this._internalAbstractMeshDataInfo._meshCollisionData._diffPositionForCollisions),this._internalAbstractMeshDataInfo._meshCollisionData._diffPositionForCollisions.length()>Re.CollisionsEpsilon&&this.position.addInPlace(this._internalAbstractMeshDataInfo._meshCollisionData._diffPositionForCollisions),s&&this.onCollideObservable.notifyObservers(s),this.onCollisionPositionChangeObservable.notifyObservers(this.position)},t=this.getScene(),this.layerMask=t.defaultRenderableLayerMask,t.addMesh(this),this._resyncLightSources(),this._uniformBuffer=new or(this.getScene().getEngine(),void 0,void 0,e,!this.getScene().getEngine().isWebGPU),this._buildUniformLayout(),t.performancePriority){case 2:this.doNotSyncBoundingInfo=!0;case 1:this.alwaysSelectAsActiveMesh=!0,this.isPickable=!1;break}}_buildUniformLayout(){this._uniformBuffer.addUniform("world",16),this._uniformBuffer.addUniform("visibility",1),this._uniformBuffer.create()}transferToEffect(e){let t=this._uniformBuffer;t.updateMatrix("world",e),t.updateFloat("visibility",this._internalAbstractMeshDataInfo._visibility),t.update()}getMeshUniformBuffer(){return this._uniformBuffer}getClassName(){return"AbstractMesh"}toString(e){let t="Name: "+this.name+", isInstance: "+(this.getClassName()==="InstancedMesh"?"YES":"NO");t+=", # of submeshes: "+(this.subMeshes?this.subMeshes.length:0);let i=this._internalAbstractMeshDataInfo._skeleton;return i&&(t+=", skeleton: "+i.name),e&&(t+=", billboard mode: "+["NONE","X","Y",null,"Z",null,null,"ALL"][this.billboardMode],t+=", freeze wrld mat: "+(this._isWorldMatrixFrozen||this._waitingData.freezeWorldMatrix?"YES":"NO")),t}_getEffectiveParent(){return this._masterMesh&&this.billboardMode!==Jt.BILLBOARDMODE_NONE?this._masterMesh:super._getEffectiveParent()}_getActionManagerForTrigger(e,t=!0){if(this.actionManager&&(t||this.actionManager.isRecursive))if(e){if(this.actionManager.hasSpecificTrigger(e))return this.actionManager}else return this.actionManager;return this.parent?this.parent._getActionManagerForTrigger(e,!1):null}_releaseRenderPassId(e){}_rebuild(e=!1){if(this.onRebuildObservable.notifyObservers(this),this._occlusionQuery!==null&&(this._occlusionQuery=null),!!this.subMeshes){for(let t of this.subMeshes)t._rebuild();this.resetDrawCache()}}_resyncLightSources(){this._lightSources.length=0;for(let e of this.getScene().lights)e.isEnabled()&&e.canAffectMesh(this)&&this._lightSources.push(e);this._markSubMeshesAsLightDirty()}_resyncLightSource(e){let t=e.isEnabled()&&e.canAffectMesh(this),i=this._lightSources.indexOf(e),r=!1;if(i===-1){if(!t)return;this._lightSources.push(e)}else{if(t)return;r=!0,this._lightSources.splice(i,1)}this._markSubMeshesAsLightDirty(r)}_unBindEffect(){for(let e of this.subMeshes)e.setEffect(null)}_removeLightSource(e,t){let i=this._lightSources.indexOf(e);i!==-1&&(this._lightSources.splice(i,1),this._markSubMeshesAsLightDirty(t))}_markSubMeshesAsDirty(e){if(this.subMeshes)for(let t of this.subMeshes)for(let i=0;it.markAsLightDirty(e))}_markSubMeshesAsAttributesDirty(){this._markSubMeshesAsDirty(e=>e.markAsAttributesDirty())}_markSubMeshesAsMiscDirty(){this._markSubMeshesAsDirty(e=>e.markAsMiscDirty())}markAsDirty(e){return this._currentRenderId=Number.MAX_VALUE,super.markAsDirty(e),this._isDirty=!0,this}resetDrawCache(e,t=!1){if(this.subMeshes)for(let i of this.subMeshes)i.resetDrawCache(e,t)}get isBlocked(){return!1}getLOD(e){return this}getTotalVertices(){return 0}getTotalIndices(){return 0}getIndices(){return null}getVerticesData(e){return null}setVerticesData(e,t,i,r){return this}updateVerticesData(e,t,i,r){return this}setIndices(e,t){return this}isVerticesDataPresent(e){return!1}getBoundingInfo(){return this._masterMesh?this._masterMesh.getBoundingInfo():(this._boundingInfoIsDirty&&(this._boundingInfoIsDirty=!1,this._updateBoundingInfo()),this._boundingInfo)}getRawBoundingInfo(){var e;return(e=this.rawBoundingInfo)!=null?e:this.getBoundingInfo()}setBoundingInfo(e){return this._boundingInfo=e,this}get hasBoundingInfo(){return this._boundingInfo!==null}buildBoundingInfo(e,t,i){return this._boundingInfo=new ln(e,t,i),this._boundingInfo}normalizeToUnitCube(e=!0,t=!1,i){return super.normalizeToUnitCube(e,t,i)}get useBones(){return this.skeleton&&this.getScene().skeletonsEnabled&&this.isVerticesDataPresent(L.MatricesIndicesKind)&&this.isVerticesDataPresent(L.MatricesWeightsKind)}_preActivate(){}_preActivateForIntermediateRendering(e){}_activate(e,t){return this._renderId=e,!0}_postActivate(){}_freeze(){}_unFreeze(){}getWorldMatrix(){return this._masterMesh&&this.billboardMode===Jt.BILLBOARDMODE_NONE?this._masterMesh.getWorldMatrix():super.getWorldMatrix()}_getWorldMatrixDeterminant(){return this._masterMesh?this._masterMesh._getWorldMatrixDeterminant():super._getWorldMatrixDeterminant()}get isAnInstance(){return!1}get hasInstances(){return!1}get hasThinInstances(){return!1}movePOV(e,t,i){return this.position.addInPlace(this.calcMovePOV(e,t,i)),this}calcMovePOV(e,t,i){let r=new K;(this.rotationQuaternion?this.rotationQuaternion:ze.RotationYawPitchRoll(this.rotation.y,this.rotation.x,this.rotation.z)).toRotationMatrix(r);let a=b.Zero(),o=this.definedFacingForward?-1:1;return b.TransformCoordinatesFromFloatsToRef(e*o,t,i*o,r,a),a}rotatePOV(e,t,i){return this.rotation.addInPlace(this.calcRotatePOV(e,t,i)),this}calcRotatePOV(e,t,i){let r=this.definedFacingForward?1:-1;return new b(e*r,t,i*r)}_refreshBoundingInfo(e,t){if(e){let i=zT(e,0,this.getTotalVertices(),t);this._boundingInfo?this._boundingInfo.reConstruct(i.minimum,i.maximum):this._boundingInfo=new ln(i.minimum,i.maximum)}if(this.subMeshes)for(let i=0;i{if(r){let o=r._vertexData||(r._vertexData={});return o[a]||this.copyVerticesData(a,o),o[a]}return this.getVerticesData(a)};if(t||(t=s(i)),!t)return null;if(r?(r._outputData?r._outputData.set(t):r._outputData=new Float32Array(t),t=r._outputData):(e.applyMorph&&this.morphTargetManager||e.applySkeleton&&this.skeleton)&&(t=t.slice()),e.applyMorph&&this.morphTargetManager&&Yre(t,i,this.morphTargetManager),e.applySkeleton&&this.skeleton){let a=s(L.MatricesIndicesKind),o=s(L.MatricesWeightsKind);if(o&&a){let l=this.numBoneInfluencers>4,c=l?s(L.MatricesIndicesExtraKind):null,f=l?s(L.MatricesWeightsExtraKind):null,h=this.skeleton.getTransformMatrices(this);n._ApplySkeleton(t,i,h,a,o,c,f)}}if(e.updatePositionsArray!==!1&&i===L.PositionKind){let a=this._internalAbstractMeshDataInfo._positions||[],o=a.length;if(a.length=t.length/3,o1||!r.IsGlobal)&&r.updateBoundingInfo(e)}return this}_afterComputeWorldMatrix(){this.doNotSyncBoundingInfo||(this._boundingInfoIsDirty=!0)}isInFrustum(e){return this.getBoundingInfo().isInFrustum(e,this.cullingStrategy)}isCompletelyInFrustum(e){return this.getBoundingInfo().isCompletelyInFrustum(e)}intersectsMesh(e,t=!1,i){let r=this.getBoundingInfo(),s=e.getBoundingInfo();if(r.intersects(s,t))return!0;if(i){for(let a of this.getChildMeshes())if(a.intersectsMesh(e,t,!0))return!0}return!1}intersectsPoint(e){return this.getBoundingInfo().intersectsPoint(e)}get checkCollisions(){return this._internalAbstractMeshDataInfo._meshCollisionData._checkCollisions}set checkCollisions(e){this._internalAbstractMeshDataInfo._meshCollisionData._checkCollisions=e}get collider(){return this._internalAbstractMeshDataInfo._meshCollisionData._collider}moveWithCollisions(e,t=!0){this.getAbsolutePosition().addToRef(this.ellipsoidOffset,this._internalAbstractMeshDataInfo._meshCollisionData._oldPositionForCollisions);let r=this.getScene().collisionCoordinator;return this._internalAbstractMeshDataInfo._meshCollisionData._collider||(this._internalAbstractMeshDataInfo._meshCollisionData._collider=r.createCollider()),this._internalAbstractMeshDataInfo._meshCollisionData._collider._radius=this.ellipsoid,r.getNewPosition(this._internalAbstractMeshDataInfo._meshCollisionData._oldPositionForCollisions,e,this._internalAbstractMeshDataInfo._meshCollisionData._collider,this.collisionRetryCount,this,this._onCollisionPositionChange,this.uniqueId,t),this}_collideForSubMesh(e,t,i){var r;if(this._generatePointsArray(),!this._positions)return this;if(!e._lastColliderWorldVertices||!e._lastColliderTransformMatrix.equals(t)){e._lastColliderTransformMatrix=t.clone(),e._lastColliderWorldVertices=[],e._trianglePlanes=[];let s=e.verticesStart,a=e.verticesStart+e.verticesCount;for(let o=s;o1&&!a._checkCollision(e)||this._collideForSubMesh(a,t,e)}return this}_shouldConvertRHS(){return!1}_checkCollision(e){if(!this.getBoundingInfo()._checkCollision(e))return this;let t=Z.Matrix[0],i=Z.Matrix[1];return K.ScalingToRef(1/e._radius.x,1/e._radius.y,1/e._radius.z,t),this.worldMatrixFromCache.multiplyToRef(t,i),this._processCollisionsForSubMeshes(e,i),this}_generatePointsArray(){return!1}intersects(e,t,i,r=!1,s,a=!1){let o=new Hn,l=this.getClassName(),c=l==="InstancedLinesMesh"||l==="LinesMesh"||l==="GreasedLineMesh"?this.intersectionThreshold:0,f=this.getBoundingInfo();if(!this.subMeshes||!a&&(!e.intersectsSphere(f.boundingSphere,c)||!e.intersectsBox(f.boundingBox,c)))return o;if(r)return o.hit=!a,o.pickedMesh=a?null:this,o.distance=a?0:b.Distance(e.origin,f.boundingSphere.center),o.subMeshId=0,o;if(!this._generatePointsArray())return o;let h=null,d=this._scene.getIntersectingSubMeshCandidates(this,e),u=d.length,m=!1;for(let _=0;_1&&!a&&!p.canIntersects(e))continue;let g=p.intersects(e,this._positions,this.getIndices(),t,i);if(g&&(t||!h||g.distanceo!==this&&o.actionManager===this.actionManager)&&this.actionManager.dispose(),this.actionManager=null),this._internalAbstractMeshDataInfo._skeleton=null,this._transformMatrixTexture&&(this._transformMatrixTexture.dispose(),this._transformMatrixTexture=null),i=0;i-1&&this._parentContainer.meshes.splice(o,1),this._parentContainer=null}if(t&&this.material&&(this.material.getClassName()==="MultiMaterial"?this.material.dispose(!1,!0,!0):this.material.dispose(!1,!0)),!e)for(i=0;i65535){l=!0;break}l?e.depthSortedIndices=new Uint32Array(i):e.depthSortedIndices=new Uint16Array(i)}if(e.facetDepthSortFunction=function(l,c){return c.sqDistance-l.sqDistance},!e.facetDepthSortFrom){let l=this.getScene().activeCamera;e.facetDepthSortFrom=l?l.position:b.Zero()}e.depthSortedFacets=[];for(let l=0;lNt?s.maximum.x-s.minimum.x:Nt,e.bbSize.y=s.maximum.y-s.minimum.y>Nt?s.maximum.y-s.minimum.y:Nt,e.bbSize.z=s.maximum.z-s.minimum.z>Nt?s.maximum.z-s.minimum.z:Nt;let a=e.bbSize.x>e.bbSize.y?e.bbSize.x:e.bbSize.y;if(a=a>e.bbSize.z?a:e.bbSize.z,e.subDiv.max=e.partitioningSubdivisions,e.subDiv.X=Math.floor(e.subDiv.max*e.bbSize.x/a),e.subDiv.Y=Math.floor(e.subDiv.max*e.bbSize.y/a),e.subDiv.Z=Math.floor(e.subDiv.max*e.bbSize.z/a),e.subDiv.X=e.subDiv.X<1?1:e.subDiv.X,e.subDiv.Y=e.subDiv.Y<1?1:e.subDiv.Y,e.subDiv.Z=e.subDiv.Z<1?1:e.subDiv.Z,e.facetParameters.facetNormals=this.getFacetLocalNormals(),e.facetParameters.facetPositions=this.getFacetLocalPositions(),e.facetParameters.facetPartitioning=this.getFacetLocalPartitioning(),e.facetParameters.bInfo=s,e.facetParameters.bbSize=e.bbSize,e.facetParameters.subDiv=e.subDiv,e.facetParameters.ratio=this.partitioningBBoxRatio,e.facetParameters.depthSort=e.facetDepthSort,e.facetDepthSort&&e.facetDepthSortEnabled&&(this.computeWorldMatrix(!0),this._worldMatrix.invertToRef(e.invertedMatrix),b.TransformCoordinatesToRef(e.facetDepthSortFrom,e.invertedMatrix,e.facetDepthSortOrigin),e.facetParameters.distanceTo=e.facetDepthSortOrigin),e.facetParameters.depthSortedFacets=e.depthSortedFacets,r&&Ie.ComputeNormals(t,i,r,e.facetParameters),e.facetDepthSort&&e.facetDepthSortEnabled){e.depthSortedFacets.sort(e.facetDepthSortFunction);let l=e.depthSortedIndices.length/3|0;for(let c=0;cs.subDiv.max||o<0||o>s.subDiv.max||l<0||l>s.subDiv.max?null:s.facetPartitioning[a+s.subDiv.max*o+s.subDiv.max*s.subDiv.max*l]}getClosestFacetAtCoordinates(e,t,i,r,s=!1,a=!0){let o=this.getWorldMatrix(),l=Z.Matrix[5];o.invertToRef(l);let c=Z.Vector3[8];b.TransformCoordinatesFromFloatsToRef(e,t,i,l,c);let f=this.getClosestFacetAtLocalCoordinates(c.x,c.y,c.z,r,s,a);return r&&b.TransformCoordinatesFromFloatsToRef(r.x,r.y,r.z,o,r),f}getClosestFacetAtLocalCoordinates(e,t,i,r,s=!1,a=!0){let o=null,l,c,f,h,d,u,m,_,p=this.getFacetLocalPositions(),g=this.getFacetLocalNormals(),v=this.getFacetsAtLocalCoordinates(e,t,i);if(!v)return null;let x=Number.MAX_VALUE,A,E,T,R;for(let I=0;I=0||s&&!a&&h<=0)&&(h=T.x*R.x+T.y*R.y+T.z*R.z,d=-(T.x*e+T.y*t+T.z*i-h)/(T.x*T.x+T.y*T.y+T.z*T.z),u=e+T.x*d,m=t+T.y*d,_=i+T.z*d,l=u-e,c=m-t,f=_-i,A=l*l+c*c+f*f,A(_V(),pV));return t(e),this.setIndices(e,this.getTotalVertices()),this}alignWithNormal(e,t){t||(t=ds.Y);let i=Z.Vector3[0],r=Z.Vector3[1];return b.CrossToRef(t,e,r),b.CrossToRef(e,r,i),this.rotationQuaternion?ze.RotationQuaternionFromAxisToRef(i,e,r,this.rotationQuaternion):b.RotationFromAxisToRef(i,e,r,this.rotation),this}_checkOcclusionQuery(e=!1){return!1}disableEdgesRendering(){throw Xe("EdgesRenderer")}enableEdgesRendering(e,t,i){throw Xe("EdgesRenderer")}getConnectedParticleSystems(){return this._scene.particleSystems.filter(e=>e.emitter===this)}};ur.OCCLUSION_TYPE_NONE=0;ur.OCCLUSION_TYPE_OPTIMISTIC=1;ur.OCCLUSION_TYPE_STRICT=2;ur.OCCLUSION_ALGORITHM_TYPE_ACCURATE=0;ur.OCCLUSION_ALGORITHM_TYPE_CONSERVATIVE=1;ur.CULLINGSTRATEGY_STANDARD=0;ur.CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY=1;ur.CULLINGSTRATEGY_OPTIMISTIC_INCLUSION=2;ur.CULLINGSTRATEGY_OPTIMISTIC_INCLUSION_THEN_BSPHERE_ONLY=3;ur.DefaultIsPickable=!0;P([us.filter((...n)=>!Array.isArray(n[0])&&!Array.isArray(n[3])&&!Array.isArray(n[4])&&!Array.isArray(n[5])&&!Array.isArray(n[6]))],ur,"_ApplySkeleton",null);wt("BABYLON.AbstractMesh",ur)});var bn,gV=C(()=>{kt();_r();Ut();bn=class{constructor(){this.reset()}reset(){this.enabled=!1,this.mask=255,this.funcRef=1,this.funcMask=255,this.func=519,this.opStencilFail=7680,this.opDepthFail=7680,this.opStencilDepthPass=7681,this.backFunc=519,this.backOpStencilFail=7680,this.backOpDepthFail=7680,this.backOpStencilDepthPass=7681}get func(){return this._func}set func(e){this._func=e}get backFunc(){return this._backFunc}set backFunc(e){this._backFunc=e}get funcRef(){return this._funcRef}set funcRef(e){this._funcRef=e}get funcMask(){return this._funcMask}set funcMask(e){this._funcMask=e}get opStencilFail(){return this._opStencilFail}set opStencilFail(e){this._opStencilFail=e}get opDepthFail(){return this._opDepthFail}set opDepthFail(e){this._opDepthFail=e}get opStencilDepthPass(){return this._opStencilDepthPass}set opStencilDepthPass(e){this._opStencilDepthPass=e}get backOpStencilFail(){return this._backOpStencilFail}set backOpStencilFail(e){this._backOpStencilFail=e}get backOpDepthFail(){return this._backOpDepthFail}set backOpDepthFail(e){this._backOpDepthFail=e}get backOpStencilDepthPass(){return this._backOpStencilDepthPass}set backOpStencilDepthPass(e){this._backOpStencilDepthPass=e}get mask(){return this._mask}set mask(e){this._mask=e}get enabled(){return this._enabled}set enabled(e){this._enabled=e}getClassName(){return"MaterialStencilState"}copyTo(e){tt.Clone(()=>e,this)}serialize(){return tt.Serialize(this)}parse(e,t,i){tt.Parse(()=>this,e,t,i)}};P([F()],bn.prototype,"func",null);P([F()],bn.prototype,"backFunc",null);P([F()],bn.prototype,"funcRef",null);P([F()],bn.prototype,"funcMask",null);P([F()],bn.prototype,"opStencilFail",null);P([F()],bn.prototype,"opDepthFail",null);P([F()],bn.prototype,"opStencilDepthPass",null);P([F()],bn.prototype,"backOpStencilFail",null);P([F()],bn.prototype,"backOpDepthFail",null);P([F()],bn.prototype,"backOpStencilDepthPass",null);P([F()],bn.prototype,"mask",null);P([F()],bn.prototype,"enabled",null)});function In(n){n.indexOf("vClipPlane")===-1&&n.push("vClipPlane"),n.indexOf("vClipPlane2")===-1&&n.push("vClipPlane2"),n.indexOf("vClipPlane3")===-1&&n.push("vClipPlane3"),n.indexOf("vClipPlane4")===-1&&n.push("vClipPlane4"),n.indexOf("vClipPlane5")===-1&&n.push("vClipPlane5"),n.indexOf("vClipPlane6")===-1&&n.push("vClipPlane6")}function $o(n,e,t){var c,f,h,d,u,m;let i=!!((c=n.clipPlane)!=null?c:e.clipPlane),r=!!((f=n.clipPlane2)!=null?f:e.clipPlane2),s=!!((h=n.clipPlane3)!=null?h:e.clipPlane3),a=!!((d=n.clipPlane4)!=null?d:e.clipPlane4),o=!!((u=n.clipPlane5)!=null?u:e.clipPlane5),l=!!((m=n.clipPlane6)!=null?m:e.clipPlane6);i&&t.push("#define CLIPPLANE"),r&&t.push("#define CLIPPLANE2"),s&&t.push("#define CLIPPLANE3"),a&&t.push("#define CLIPPLANE4"),o&&t.push("#define CLIPPLANE5"),l&&t.push("#define CLIPPLANE6")}function vV(n,e,t){var f,h,d,u,m,_;let i=!1,r=!!((f=n.clipPlane)!=null?f:e.clipPlane),s=!!((h=n.clipPlane2)!=null?h:e.clipPlane2),a=!!((d=n.clipPlane3)!=null?d:e.clipPlane3),o=!!((u=n.clipPlane4)!=null?u:e.clipPlane4),l=!!((m=n.clipPlane5)!=null?m:e.clipPlane5),c=!!((_=n.clipPlane6)!=null?_:e.clipPlane6);return t.CLIPPLANE!==r&&(t.CLIPPLANE=r,i=!0),t.CLIPPLANE2!==s&&(t.CLIPPLANE2=s,i=!0),t.CLIPPLANE3!==a&&(t.CLIPPLANE3=a,i=!0),t.CLIPPLANE4!==o&&(t.CLIPPLANE4=o,i=!0),t.CLIPPLANE5!==l&&(t.CLIPPLANE5=l,i=!0),t.CLIPPLANE6!==c&&(t.CLIPPLANE6=c,i=!0),i}function Mn(n,e,t){var r,s,a,o,l,c;let i=(r=e.clipPlane)!=null?r:t.clipPlane;$u(n,"vClipPlane",i),i=(s=e.clipPlane2)!=null?s:t.clipPlane2,$u(n,"vClipPlane2",i),i=(a=e.clipPlane3)!=null?a:t.clipPlane3,$u(n,"vClipPlane3",i),i=(o=e.clipPlane4)!=null?o:t.clipPlane4,$u(n,"vClipPlane4",i),i=(l=e.clipPlane5)!=null?l:t.clipPlane5,$u(n,"vClipPlane5",i),i=(c=e.clipPlane6)!=null?c:t.clipPlane6,$u(n,"vClipPlane6",i)}function $u(n,e,t){var i;if(t){let r=((i=va.getScene())==null?void 0:i.floatingOriginOffset)||b.ZeroReadOnly;n.setFloat4(e,t.normal.x,t.normal.y,t.normal.z,t.d+b.Dot(t.normal,r))}}var el=C(()=>{M_();Ve()});var le,xa=C(()=>{Lr();le=class{static get DiffuseTextureEnabled(){return this._DiffuseTextureEnabled}static set DiffuseTextureEnabled(e){this._DiffuseTextureEnabled!==e&&(this._DiffuseTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get BaseWeightTextureEnabled(){return this._BaseWeightTextureEnabled}static set BaseWeightTextureEnabled(e){this._BaseWeightTextureEnabled!==e&&(this._BaseWeightTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get BaseDiffuseRoughnessTextureEnabled(){return this._BaseDiffuseRoughnessTextureEnabled}static set BaseDiffuseRoughnessTextureEnabled(e){this._BaseDiffuseRoughnessTextureEnabled!==e&&(this._BaseDiffuseRoughnessTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get DetailTextureEnabled(){return this._DetailTextureEnabled}static set DetailTextureEnabled(e){this._DetailTextureEnabled!==e&&(this._DetailTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get DecalMapEnabled(){return this._DecalMapEnabled}static set DecalMapEnabled(e){this._DecalMapEnabled!==e&&(this._DecalMapEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get AmbientTextureEnabled(){return this._AmbientTextureEnabled}static set AmbientTextureEnabled(e){this._AmbientTextureEnabled!==e&&(this._AmbientTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get OpacityTextureEnabled(){return this._OpacityTextureEnabled}static set OpacityTextureEnabled(e){this._OpacityTextureEnabled!==e&&(this._OpacityTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get ReflectionTextureEnabled(){return this._ReflectionTextureEnabled}static set ReflectionTextureEnabled(e){this._ReflectionTextureEnabled!==e&&(this._ReflectionTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get EmissiveTextureEnabled(){return this._EmissiveTextureEnabled}static set EmissiveTextureEnabled(e){this._EmissiveTextureEnabled!==e&&(this._EmissiveTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get SpecularTextureEnabled(){return this._SpecularTextureEnabled}static set SpecularTextureEnabled(e){this._SpecularTextureEnabled!==e&&(this._SpecularTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get BumpTextureEnabled(){return this._BumpTextureEnabled}static set BumpTextureEnabled(e){this._BumpTextureEnabled!==e&&(this._BumpTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get LightmapTextureEnabled(){return this._LightmapTextureEnabled}static set LightmapTextureEnabled(e){this._LightmapTextureEnabled!==e&&(this._LightmapTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get RefractionTextureEnabled(){return this._RefractionTextureEnabled}static set RefractionTextureEnabled(e){this._RefractionTextureEnabled!==e&&(this._RefractionTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get ColorGradingTextureEnabled(){return this._ColorGradingTextureEnabled}static set ColorGradingTextureEnabled(e){this._ColorGradingTextureEnabled!==e&&(this._ColorGradingTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get FresnelEnabled(){return this._FresnelEnabled}static set FresnelEnabled(e){this._FresnelEnabled!==e&&(this._FresnelEnabled=e,Re.MarkAllMaterialsAsDirty(4))}static get ClearCoatTextureEnabled(){return this._ClearCoatTextureEnabled}static set ClearCoatTextureEnabled(e){this._ClearCoatTextureEnabled!==e&&(this._ClearCoatTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get ClearCoatBumpTextureEnabled(){return this._ClearCoatBumpTextureEnabled}static set ClearCoatBumpTextureEnabled(e){this._ClearCoatBumpTextureEnabled!==e&&(this._ClearCoatBumpTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get ClearCoatTintTextureEnabled(){return this._ClearCoatTintTextureEnabled}static set ClearCoatTintTextureEnabled(e){this._ClearCoatTintTextureEnabled!==e&&(this._ClearCoatTintTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get SheenTextureEnabled(){return this._SheenTextureEnabled}static set SheenTextureEnabled(e){this._SheenTextureEnabled!==e&&(this._SheenTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get AnisotropicTextureEnabled(){return this._AnisotropicTextureEnabled}static set AnisotropicTextureEnabled(e){this._AnisotropicTextureEnabled!==e&&(this._AnisotropicTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get ThicknessTextureEnabled(){return this._ThicknessTextureEnabled}static set ThicknessTextureEnabled(e){this._ThicknessTextureEnabled!==e&&(this._ThicknessTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get RefractionIntensityTextureEnabled(){return this._ThicknessTextureEnabled}static set RefractionIntensityTextureEnabled(e){this._RefractionIntensityTextureEnabled!==e&&(this._RefractionIntensityTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get TranslucencyIntensityTextureEnabled(){return this._TranslucencyIntensityTextureEnabled}static set TranslucencyIntensityTextureEnabled(e){this._TranslucencyIntensityTextureEnabled!==e&&(this._TranslucencyIntensityTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get TranslucencyColorTextureEnabled(){return this._TranslucencyColorTextureEnabled}static set TranslucencyColorTextureEnabled(e){this._TranslucencyColorTextureEnabled!==e&&(this._TranslucencyColorTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get IridescenceTextureEnabled(){return this._IridescenceTextureEnabled}static set IridescenceTextureEnabled(e){this._IridescenceTextureEnabled!==e&&(this._IridescenceTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}};le._DiffuseTextureEnabled=!0;le._BaseWeightTextureEnabled=!0;le._BaseDiffuseRoughnessTextureEnabled=!0;le._DetailTextureEnabled=!0;le._DecalMapEnabled=!0;le._AmbientTextureEnabled=!0;le._OpacityTextureEnabled=!0;le._ReflectionTextureEnabled=!0;le._EmissiveTextureEnabled=!0;le._SpecularTextureEnabled=!0;le._BumpTextureEnabled=!0;le._LightmapTextureEnabled=!0;le._RefractionTextureEnabled=!0;le._ColorGradingTextureEnabled=!0;le._FresnelEnabled=!0;le._ClearCoatTextureEnabled=!0;le._ClearCoatBumpTextureEnabled=!0;le._ClearCoatTintTextureEnabled=!0;le._SheenTextureEnabled=!0;le._AnisotropicTextureEnabled=!0;le._ThicknessTextureEnabled=!0;le._RefractionIntensityTextureEnabled=!0;le._TranslucencyIntensityTextureEnabled=!0;le._TranslucencyColorTextureEnabled=!0;le._IridescenceTextureEnabled=!0});function ff(n,e,t){if(!n||n.LOGARITHMICDEPTH||n.indexOf&&n.indexOf("LOGARITHMICDEPTH")>=0){let i=t.activeCamera;i.mode===1&&$.Error("Logarithmic depth is not compatible with orthographic cameras!",20),e.setFloat("logarithmicDepthConstant",2/(Math.log(i.maxZ+1)/Math.LN2))}}var EV=C(()=>{Pt()});function hf(n,e,t,i=!1){t&&n.fogEnabled&&(!e||e.applyFog)&&n.fogMode!==0&&(t.setFloat4("vFogInfos",n.fogMode,n.fogStart,n.fogEnd,n.fogDensity),i?(n.fogColor.toLinearSpaceToRef(SV,n.getEngine().useExactSrgbConversions),t.setColor3("vFogColor",SV)):t.setColor3("vFogColor",n.fogColor))}function tl(n,e,t,i,r,s,a,o,l,c){let f=n.numMaxInfluencers||n.numInfluencers;return f<=0?0:(e.push("#define MORPHTARGETS"),n.hasPositions&&e.push("#define MORPHTARGETTEXTURE_HASPOSITIONS"),n.hasNormals&&e.push("#define MORPHTARGETTEXTURE_HASNORMALS"),n.hasTangents&&e.push("#define MORPHTARGETTEXTURE_HASTANGENTS"),n.hasUVs&&e.push("#define MORPHTARGETTEXTURE_HASUVS"),n.hasUV2s&&e.push("#define MORPHTARGETTEXTURE_HASUV2S"),n.hasColors&&e.push("#define MORPHTARGETTEXTURE_HASCOLORS"),n.supportsPositions&&r&&e.push("#define MORPHTARGETS_POSITION"),n.supportsNormals&&s&&e.push("#define MORPHTARGETS_NORMAL"),n.supportsTangents&&a&&e.push("#define MORPHTARGETS_TANGENT"),n.supportsUVs&&o&&e.push("#define MORPHTARGETS_UV"),n.supportsUV2s&&l&&e.push("#define MORPHTARGETS_UV2"),n.supportsColors&&c&&e.push("#define MORPHTARGETS_COLOR"),e.push("#define NUM_MORPH_INFLUENCERS "+f),n.isUsingTextureForTargets&&e.push("#define MORPHTARGETS_TEXTURE"),kh.NUM_MORPH_INFLUENCERS=f,kh.NORMAL=s,kh.TANGENT=a,kh.UV=o,kh.UV2=l,kh.COLOR=c,Wh(t,i,kh,r),f)}function Wh(n,e,t,i=!0){let r=t.NUM_MORPH_INFLUENCERS;if(r>0&&Le.LastCreatedEngine){let s=Le.LastCreatedEngine.getCaps().maxVertexAttribs,a=e.morphTargetManager;if(a!=null&&a.isUsingTextureForTargets)return;let o=a&&a.supportsPositions&&i,l=a&&a.supportsNormals&&t.NORMAL,c=a&&a.supportsTangents&&t.TANGENT,f=a&&a.supportsUVs&&t.UV1,h=a&&a.supportsUV2s&&t.UV2,d=a&&a.supportsColors&&t.VERTEXCOLOR;for(let u=0;us&&$.Error("Cannot add more vertex attributes for mesh "+e.name)}}function oo(n,e=!1){n.push("world0"),n.push("world1"),n.push("world2"),n.push("world3"),e&&(n.push("previousWorld0"),n.push("previousWorld1"),n.push("previousWorld2"),n.push("previousWorld3"))}function Cn(n,e){let t=n.morphTargetManager;!n||!t||e.setFloatArray("morphTargetInfluences",t.influences)}function df(n,e){e.bindToEffect(n,"Scene")}function em(n,e,t,i,r=null,s=!1,a=!1,o=!1,l=!1,c=!1,f=!1,h=0){if(n.texturesEnabled&&r&&le.ReflectionTextureEnabled){if(t.updateMatrix("reflectionMatrix",r.getReflectionTextureMatrix()),t.updateFloat2("vReflectionInfos",r.level*n.iblIntensity,h),o&&r.boundingBoxSize){let d=r;t.updateVector3("vReflectionPosition",d.boundingBoxPosition),t.updateVector3("vReflectionSize",d.boundingBoxSize)}if(s){let d=r.getSize().width;t.updateFloat2("vReflectionFilteringInfo",d,Math.log2(d))}if(c&&!e.USEIRRADIANCEMAP){let d=r.sphericalPolynomial;if(e.USESPHERICALFROMREFLECTIONMAP&&d)if(e.SPHERICAL_HARMONICS){let u=d.preScaledHarmonics;t.updateVector3("vSphericalL00",u.l00),t.updateVector3("vSphericalL1_1",u.l1_1),t.updateVector3("vSphericalL10",u.l10),t.updateVector3("vSphericalL11",u.l11),t.updateVector3("vSphericalL2_2",u.l2_2),t.updateVector3("vSphericalL2_1",u.l2_1),t.updateVector3("vSphericalL20",u.l20),t.updateVector3("vSphericalL21",u.l21),t.updateVector3("vSphericalL22",u.l22)}else t.updateFloat3("vSphericalX",d.x.x,d.x.y,d.x.z),t.updateFloat3("vSphericalY",d.y.x,d.y.y,d.y.z),t.updateFloat3("vSphericalZ",d.z.x,d.z.y,d.z.z),t.updateFloat3("vSphericalXX_ZZ",d.xx.x-d.zz.x,d.xx.y-d.zz.y,d.xx.z-d.zz.z),t.updateFloat3("vSphericalYY_ZZ",d.yy.x-d.zz.x,d.yy.y-d.zz.y,d.yy.z-d.zz.z),t.updateFloat3("vSphericalZZ",d.zz.x,d.zz.y,d.zz.z),t.updateFloat3("vSphericalXY",d.xy.x,d.xy.y,d.xy.z),t.updateFloat3("vSphericalYZ",d.yz.x,d.yz.y,d.yz.z),t.updateFloat3("vSphericalZX",d.zx.x,d.zx.y,d.zx.z)}else l&&e.USEIRRADIANCEMAP&&e.USE_IRRADIANCE_DOMINANT_DIRECTION&&r.irradianceTexture&&t.updateVector3("vReflectionDominantDirection",r.irradianceTexture._dominantDirection);a&&t.updateFloat3("vReflectionMicrosurfaceInfos",r.getSize().width,r.lodGenerationScale,r.lodGenerationOffset)}f&&t.updateColor3("vReflectionColor",i)}function ZT(n,e,t,i=null,r=!1){if(i&&le.ReflectionTextureEnabled){e.LODBASEDMICROSFURACE?t.setTexture("reflectionSampler",i):(t.setTexture("reflectionSampler",i._lodTextureMid||i),t.setTexture("reflectionSamplerLow",i._lodTextureLow||i),t.setTexture("reflectionSamplerHigh",i._lodTextureHigh||i)),e.USEIRRADIANCEMAP&&t.setTexture("irradianceSampler",i.irradianceTexture);let s=n.iblCdfGenerator;r&&s&&t.setTexture("icdfSampler",s.getIcdfTexture())}}function ri(n,e,t){e._needUVs=!0,e[t]=!0,n.optimizeUVAllocation&&n.getTextureMatrix().isIdentityAs3x2()?(e[t+"DIRECTUV"]=n.coordinatesIndex+1,e["MAINUV"+(n.coordinatesIndex+1)]=!0):e[t+"DIRECTUV"]=0}function ni(n,e,t){let i=n.getTextureMatrix();e.updateMatrix(t+"Matrix",i)}function tm(n,e,t){t.BAKED_VERTEX_ANIMATION_TEXTURE&&t.INSTANCES&&n.push("bakedVertexAnimationSettingsInstanced")}function jre(n,e){return e.set(n),e}function gs(n,e,t){if(!(!e||!n)&&(n.computeBonesUsingShaders&&e._bonesComputationForcedToCPU&&(n.computeBonesUsingShaders=!1),n.useBones&&n.computeBonesUsingShaders&&n.skeleton)){let i=n.skeleton;if(i.isUsingTextureForMatrices&&e.getUniformIndex("boneTextureInfo")>-1){let r=i.getTransformMatrixTexture(n);e.setTexture("boneSampler",r),e.setFloat2("boneTextureInfo",i._textureWidth,i._textureHeight)}else{let r=i.getTransformMatrices(n);r&&(e.setMatrices("mBones",r),t&&n.getScene().prePassRenderer&&n.getScene().prePassRenderer.getIndex(2)&&(t.previousBones[n.uniqueId]||(t.previousBones[n.uniqueId]=r.slice()),e.setMatrices("mPreviousBones",t.previousBones[n.uniqueId]),jre(r,t.previousBones[n.uniqueId])))}}}function qre(n,e,t,i,r,s=!0){n._bindLight(e,t,i,r,s)}function im(n,e,t,i,r=4){let s=Math.min(e.lightSources.length,r);for(let a=0;a0&&(i.addCPUSkinningFallback(0,e),n.push("matricesIndices"),n.push("matricesWeights"),t.NUM_BONE_INFLUENCERS>4&&(n.push("matricesIndicesExtra"),n.push("matricesWeightsExtra")))}function nm(n,e){(e.INSTANCES||e.THIN_INSTANCES)&&oo(n,!!e.PREPASS_VELOCITY),e.INSTANCESCOLOR&&n.push("instanceColor")}function sm(n,e,t=4,i=0){let r=0;for(let s=0;s0&&(r=i+s,e.addFallback(r,"LIGHT"+s)),n.SHADOWS||(n["SHADOW"+s]&&e.addFallback(i,"SHADOW"+s),n["SHADOWPCF"+s]&&e.addFallback(i,"SHADOWPCF"+s),n["SHADOWPCSS"+s]&&e.addFallback(i,"SHADOWPCSS"+s),n["SHADOWPOISSON"+s]&&e.addFallback(i,"SHADOWPOISSON"+s),n["SHADOWESM"+s]&&e.addFallback(i,"SHADOWESM"+s),n["SHADOWCLOSEESM"+s]&&e.addFallback(i,"SHADOWCLOSEESM"+s));return r}function Zre(n,e){return e.fogEnabled&&n.applyFog&&e.fogMode!==0}function am(n,e,t,i,r,s,a,o=!1,l=!1,c,f){var h;if(a._areMiscDirty){a.LOGARITHMICDEPTH=t,a.POINTSIZE=i,a.FOG=r&&Zre(n,e),a.NONUNIFORMSCALING=n.nonUniformScaling,a.ALPHATEST=s,a.DECAL_AFTER_DETAIL=o,a.USE_VERTEX_PULLING=l,a.RIGHT_HANDED=e.useRightHandedSystem;let d=(h=c==null?void 0:c.geometry)==null?void 0:h.getIndexBuffer(),u=c?c.isUnIndexed:!1;a.VERTEX_PULLING_USE_INDEX_BUFFER=!!d&&!u,a.VERTEX_PULLING_INDEX_BUFFER_32BITS=d&&!u?d.is32Bits:!1,a.VERTEXOUTPUT_INVARIANT=!!f}}function om(n,e,t,i=!1){if(!n.lightsEnabled||i)return!0;let r=e.lightSources,s=Math.min(r.length,t);for(let a=0;a0?(t.NUM_SAMPLES=""+r,a._features.needTypeSuffixInShaderConstants&&(t.NUM_SAMPLES=t.NUM_SAMPLES+"u"),t.REALTIME_FILTERING=!0,n.iblCdfGenerator&&(t.IBL_CDF_FILTERING=!0)):t.REALTIME_FILTERING=!1,t.INVERTCUBICMAP=e.coordinatesMode===ge.INVCUBIC_MODE,t.REFLECTIONMAP_3D=e.isCube,t.REFLECTIONMAP_OPPOSITEZ=t.REFLECTIONMAP_3D&&n.useRightHandedSystem?!e.invertZ:e.invertZ,t.REFLECTIONMAP_CUBIC=!1,t.REFLECTIONMAP_EXPLICIT=!1,t.REFLECTIONMAP_PLANAR=!1,t.REFLECTIONMAP_PROJECTION=!1,t.REFLECTIONMAP_SKYBOX=!1,t.REFLECTIONMAP_SPHERICAL=!1,t.REFLECTIONMAP_EQUIRECTANGULAR=!1,t.REFLECTIONMAP_EQUIRECTANGULAR_FIXED=!1,t.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED=!1,e.coordinatesMode){case ge.EXPLICIT_MODE:t.REFLECTIONMAP_EXPLICIT=!0;break;case ge.PLANAR_MODE:t.REFLECTIONMAP_PLANAR=!0;break;case ge.PROJECTION_MODE:t.REFLECTIONMAP_PROJECTION=!0;break;case ge.SKYBOX_MODE:t.REFLECTIONMAP_SKYBOX=!0;break;case ge.SPHERICAL_MODE:t.REFLECTIONMAP_SPHERICAL=!0;break;case ge.EQUIRECTANGULAR_MODE:t.REFLECTIONMAP_EQUIRECTANGULAR=!0;break;case ge.FIXED_EQUIRECTANGULAR_MODE:t.REFLECTIONMAP_EQUIRECTANGULAR_FIXED=!0;break;case ge.FIXED_EQUIRECTANGULAR_MIRRORED_MODE:t.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED=!0;break;case ge.CUBIC_MODE:case ge.INVCUBIC_MODE:default:t.REFLECTIONMAP_CUBIC=!0,t.USE_LOCAL_REFLECTIONMAP_CUBIC=!!e.boundingBoxSize;break}e.coordinatesMode!==ge.SKYBOX_MODE&&(e.irradianceTexture?(t.USEIRRADIANCEMAP=!0,t.USESPHERICALFROMREFLECTIONMAP=!1,t.USESPHERICALINVERTEX=!1,e.irradianceTexture._dominantDirection?t.USE_IRRADIANCE_DOMINANT_DIRECTION=!0:t.USE_IRRADIANCE_DOMINANT_DIRECTION=!1):e.isCube&&(t.USESPHERICALFROMREFLECTIONMAP=!0,t.USEIRRADIANCEMAP=!1,t.USE_IRRADIANCE_DOMINANT_DIRECTION=!1,t.USESPHERICALINVERTEX=s))}else t.REFLECTION=!1,t.REFLECTIONMAP_3D=!1,t.REFLECTIONMAP_SPHERICAL=!1,t.REFLECTIONMAP_PLANAR=!1,t.REFLECTIONMAP_CUBIC=!1,t.USE_LOCAL_REFLECTIONMAP_CUBIC=!1,t.REFLECTIONMAP_PROJECTION=!1,t.REFLECTIONMAP_SKYBOX=!1,t.REFLECTIONMAP_EXPLICIT=!1,t.REFLECTIONMAP_EQUIRECTANGULAR=!1,t.REFLECTIONMAP_EQUIRECTANGULAR_FIXED=!1,t.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED=!1,t.INVERTCUBICMAP=!1,t.USESPHERICALFROMREFLECTIONMAP=!1,t.USEIRRADIANCEMAP=!1,t.USE_IRRADIANCE_DOMINANT_DIRECTION=!1,t.USESPHERICALINVERTEX=!1,t.REFLECTIONMAP_OPPOSITEZ=!1,t.LODINREFLECTIONALPHA=!1,t.GAMMAREFLECTION=!1,t.RGBDREFLECTION=!1,t.LINEARSPECULARREFLECTION=!1;return!0}function Qre(n,e,t,i,r,s,a){var o;switch(a.needNormals=!0,r["LIGHT"+i]===void 0&&(a.needRebuild=!0),r["LIGHT"+i]=!0,r["SPOTLIGHT"+i]=!1,r["HEMILIGHT"+i]=!1,r["POINTLIGHT"+i]=!1,r["DIRLIGHT"+i]=!1,r["AREALIGHT"+i]=!1,r["CLUSTLIGHT"+i]=!1,t.prepareLightSpecificDefines(r,i),r["LIGHT_FALLOFF_PHYSICAL"+i]=!1,r["LIGHT_FALLOFF_GLTF"+i]=!1,r["LIGHT_FALLOFF_STANDARD"+i]=!1,t.falloffType){case Yt.FALLOFF_GLTF:r["LIGHT_FALLOFF_GLTF"+i]=!0;break;case Yt.FALLOFF_PHYSICAL:r["LIGHT_FALLOFF_PHYSICAL"+i]=!0;break;case Yt.FALLOFF_STANDARD:r["LIGHT_FALLOFF_STANDARD"+i]=!0;break}if(s&&!t.specular.equalsFloats(0,0,0)&&(a.specularEnabled=!0),r["SHADOW"+i]=!1,r["SHADOWCSM"+i]=!1,r["SHADOWCSMDEBUG"+i]=!1,r["SHADOWCSMNUM_CASCADES"+i]=!1,r["SHADOWCSMUSESHADOWMAXZ"+i]=!1,r["SHADOWCSMNOBLEND"+i]=!1,r["SHADOWCSM_RIGHTHANDED"+i]=!1,r["SHADOWPCF"+i]=!1,r["SHADOWPCSS"+i]=!1,r["SHADOWPOISSON"+i]=!1,r["SHADOWESM"+i]=!1,r["SHADOWCLOSEESM"+i]=!1,r["SHADOWCUBE"+i]=!1,r["SHADOWLOWQUALITY"+i]=!1,r["SHADOWMEDIUMQUALITY"+i]=!1,e&&e.receiveShadows&&n.shadowsEnabled&&t.shadowEnabled){let l=(o=t.getShadowGenerator(n.activeCamera))!=null?o:t.getShadowGenerator();if(l){let c=l.getShadowMap();c&&c.renderList&&c.renderList.length>0&&(a.shadowEnabled=!0,l.prepareDefines(r,i))}}t.lightmapMode!=Yt.LIGHTMAP_DEFAULT?(a.lightmapMode=!0,r["LIGHTMAPEXCLUDED"+i]=!0,r["LIGHTMAPNOSPECULAR"+i]=t.lightmapMode==Yt.LIGHTMAP_SHADOWSONLY):(r["LIGHTMAPEXCLUDED"+i]=!1,r["LIGHTMAPNOSPECULAR"+i]=!1)}function cm(n,e,t,i,r,s=null,a=!1){let o=tne(n,i);s!==!1&&(o=vV(t,n,i)),i.DEPTHPREPASS!==!e.getColorWrite()&&(i.DEPTHPREPASS=!i.DEPTHPREPASS,o=!0),i.INSTANCES!==r&&(i.INSTANCES=r,o=!0),i.THIN_INSTANCES!==a&&(i.THIN_INSTANCES=a,o=!0),o&&i.markAsUnprocessed()}function Jre(n,e){if(n.useBones&&n.computeBonesUsingShaders&&n.skeleton){e.NUM_BONE_INFLUENCERS=n.numBoneInfluencers;let t=e.BONETEXTURE!==void 0;if(n.skeleton.isUsingTextureForMatrices&&t)e.BONETEXTURE=!0;else{e.BonesPerMesh=n.skeleton.bones.length+1,e.BONETEXTURE=t?!1:void 0;let i=n.getScene().prePassRenderer;if(i&&i.enabled){let r=i.excludedSkinnedMesh.indexOf(n)===-1;e.BONES_VELOCITY_ENABLED=r}}}else e.NUM_BONE_INFLUENCERS=0,e.BonesPerMesh=0,e.BONETEXTURE!==void 0&&(e.BONETEXTURE=!1)}function $re(n,e){let t=n.morphTargetManager;t?(e.MORPHTARGETS_UV=t.supportsUVs&&e.UV1,e.MORPHTARGETS_UV2=t.supportsUV2s&&e.UV2,e.MORPHTARGETS_TANGENT=t.supportsTangents&&e.TANGENT,e.MORPHTARGETS_NORMAL=t.supportsNormals&&e.NORMAL,e.MORPHTARGETS_POSITION=t.supportsPositions,e.MORPHTARGETS_COLOR=t.supportsColors,e.MORPHTARGETTEXTURE_HASUVS=t.hasUVs,e.MORPHTARGETTEXTURE_HASUV2S=t.hasUV2s,e.MORPHTARGETTEXTURE_HASTANGENTS=t.hasTangents,e.MORPHTARGETTEXTURE_HASNORMALS=t.hasNormals,e.MORPHTARGETTEXTURE_HASPOSITIONS=t.hasPositions,e.MORPHTARGETTEXTURE_HASCOLORS=t.hasColors,e.NUM_MORPH_INFLUENCERS=t.numMaxInfluencers||t.numInfluencers,e.MORPHTARGETS=e.NUM_MORPH_INFLUENCERS>0,e.MORPHTARGETS_TEXTURE=t.isUsingTextureForTargets):(e.MORPHTARGETS_UV=!1,e.MORPHTARGETS_UV2=!1,e.MORPHTARGETS_TANGENT=!1,e.MORPHTARGETS_NORMAL=!1,e.MORPHTARGETS_POSITION=!1,e.MORPHTARGETS_COLOR=!1,e.MORPHTARGETTEXTURE_HASUVS=!1,e.MORPHTARGETTEXTURE_HASUV2S=!1,e.MORPHTARGETTEXTURE_HASTANGENTS=!1,e.MORPHTARGETTEXTURE_HASNORMALS=!1,e.MORPHTARGETTEXTURE_HASPOSITIONS=!1,e.MORPHTARGETTEXTURE_HAS_COLORS=!1,e.MORPHTARGETS=!1,e.NUM_MORPH_INFLUENCERS=0)}function ene(n,e){let t=n.bakedVertexAnimationManager;e.BAKED_VERTEX_ANIMATION_TEXTURE=!!(t&&t.isEnabled)}function fm(n,e,t,i,r=!1,s=!0,a=!0){if(!e._areAttributesDirty&&e._needNormals===e._normals&&e._needUVs===e._uvs)return!1;e._normals=e._needNormals,e._uvs=e._needUVs,e.NORMAL=e._needNormals&&n.isVerticesDataPresent("normal"),e._needNormals&&n.isVerticesDataPresent("tangent")&&(e.TANGENT=!0);for(let o=1;o<=6;++o)e["UV"+o]=e._needUVs?n.isVerticesDataPresent(`uv${o===1?"":o}`):!1;if(t){let o=n.useVertexColors&&n.isVerticesDataPresent("color");e.VERTEXCOLOR=o,e.VERTEXALPHA=n.hasVertexAlpha&&o&&s}return n.isVerticesDataPresent("instanceColor")&&(n.hasInstances||n.hasThinInstances)&&(e.INSTANCESCOLOR=!0),i&&Jre(n,e),r&&$re(n,e),a&&ene(n,e),!0}function hm(n,e){if(n.activeCamera){let t=e.MULTIVIEW;e.MULTIVIEW=n.activeCamera.outputRenderTarget!==null&&n.activeCamera.outputRenderTarget.getViewCount()>1,e.MULTIVIEW!=t&&e.markAsUnprocessed()}}function dm(n,e,t){let i=e.ORDER_INDEPENDENT_TRANSPARENCY,r=e.ORDER_INDEPENDENT_TRANSPARENCY_16BITS;e.ORDER_INDEPENDENT_TRANSPARENCY=n.useOrderIndependentTransparency&&t,e.ORDER_INDEPENDENT_TRANSPARENCY_16BITS=!n.getEngine().getCaps().textureFloatLinearFiltering,(i!==e.ORDER_INDEPENDENT_TRANSPARENCY||r!==e.ORDER_INDEPENDENT_TRANSPARENCY_16BITS)&&e.markAsUnprocessed()}function um(n,e,t){let i=e.PREPASS;if(!e._arePrePassDirty)return;let r=[{type:1,define:"PREPASS_POSITION",index:"PREPASS_POSITION_INDEX"},{type:9,define:"PREPASS_LOCAL_POSITION",index:"PREPASS_LOCAL_POSITION_INDEX"},{type:2,define:"PREPASS_VELOCITY",index:"PREPASS_VELOCITY_INDEX"},{type:11,define:"PREPASS_VELOCITY_LINEAR",index:"PREPASS_VELOCITY_LINEAR_INDEX"},{type:3,define:"PREPASS_REFLECTIVITY",index:"PREPASS_REFLECTIVITY_INDEX"},{type:0,define:"PREPASS_IRRADIANCE_LEGACY",index:"PREPASS_IRRADIANCE_LEGACY_INDEX"},{type:7,define:"PREPASS_ALBEDO_SQRT",index:"PREPASS_ALBEDO_SQRT_INDEX"},{type:5,define:"PREPASS_DEPTH",index:"PREPASS_DEPTH_INDEX"},{type:10,define:"PREPASS_SCREENSPACE_DEPTH",index:"PREPASS_SCREENSPACE_DEPTH_INDEX"},{type:6,define:"PREPASS_NORMAL",index:"PREPASS_NORMAL_INDEX"},{type:8,define:"PREPASS_WORLD_NORMAL",index:"PREPASS_WORLD_NORMAL_INDEX"},{type:14,define:"PREPASS_IRRADIANCE",index:"PREPASS_IRRADIANCE_INDEX"}];if(n.prePassRenderer&&n.prePassRenderer.enabled&&t){e.PREPASS=!0,e.SCENE_MRT_COUNT=n.prePassRenderer.mrtCount,e.PREPASS_NORMAL_WORLDSPACE=n.prePassRenderer.generateNormalsInWorldSpace,e.PREPASS_COLOR=!0,e.PREPASS_COLOR_INDEX=0;for(let s=0;s{Pt();Pi();v_();el();xa();Gr();EV();SV={r:0,g:0,b:0},kh={NUM_MORPH_INFLUENCERS:0,NORMAL:!1,TANGENT:!1,UV:!1,UV2:!1,COLOR:!1}});var ve,Pn=C(()=>{kt();Ut();Ci();hi();Pi();V_();nf();Pt();Du();Dh();gV();yn();_r();w0();ve=class n{get useVertexPulling(){return this._useVertexPulling}set useVertexPulling(e){this._useVertexPulling!==e&&(this._useVertexPulling=e,this.markAsDirty(n.MiscDirtyFlag))}get _supportGlowLayer(){return!1}set _glowModeEnabled(e){}get shaderLanguage(){return this._shaderLanguage}get canRenderToMRT(){return!1}set alpha(e){if(this._alpha===e)return;let t=this._alpha;this._alpha=e,(t===1||e===1)&&this.markAsDirty(n.MiscDirtyFlag+n.PrePassDirtyFlag)}get alpha(){return this._alpha}set backFaceCulling(e){this._backFaceCulling!==e&&(this._backFaceCulling=e,this.markAsDirty(n.TextureDirtyFlag))}get backFaceCulling(){return this._backFaceCulling}set cullBackFaces(e){this._cullBackFaces!==e&&(this._cullBackFaces=e,this.markAsDirty(n.TextureDirtyFlag))}get cullBackFaces(){return this._cullBackFaces}get blockDirtyMechanism(){return this._blockDirtyMechanism}set blockDirtyMechanism(e){this._blockDirtyMechanism!==e&&(this._blockDirtyMechanism=e,e||this.markDirty())}atomicMaterialsUpdate(e){this.blockDirtyMechanism=!0;try{e(this)}finally{this.blockDirtyMechanism=!1}}get hasRenderTargetTextures(){return this._eventInfo.hasRenderTargetTextures=!1,this._callbackPluginEventHasRenderTargetTextures(this._eventInfo),this._eventInfo.hasRenderTargetTextures}set onDispose(e){this._onDisposeObserver&&this.onDisposeObservable.remove(this._onDisposeObserver),this._onDisposeObserver=this.onDisposeObservable.add(e)}get onBindObservable(){return this._onBindObservable||(this._onBindObservable=new ee),this._onBindObservable}set onBind(e){this._onBindObserver&&this.onBindObservable.remove(this._onBindObserver),this._onBindObserver=this.onBindObservable.add(e)}get onUnBindObservable(){return this._onUnBindObservable||(this._onUnBindObservable=new ee),this._onUnBindObservable}get onEffectCreatedObservable(){return this._onEffectCreatedObservable||(this._onEffectCreatedObservable=new ee),this._onEffectCreatedObservable}set alphaMode(e){this._alphaMode[0]!==e&&(this._alphaMode[0]=e,this.markAsDirty(n.TextureDirtyFlag))}get alphaMode(){return this._alphaMode[0]}get alphaModes(){return this._alphaMode}setAlphaMode(e,t=0){this._alphaMode[t]!==e&&(this._alphaMode[t]=e,this.markAsDirty(n.TextureDirtyFlag))}set needDepthPrePass(e){this._needDepthPrePass!==e&&(this._needDepthPrePass=e,this._needDepthPrePass&&(this.checkReadyOnEveryCall=!0))}get needDepthPrePass(){return this._needDepthPrePass}get isPrePassCapable(){return!1}set fogEnabled(e){this._fogEnabled!==e&&(this._fogEnabled=e,this.markAsDirty(n.MiscDirtyFlag))}get fogEnabled(){return this._fogEnabled}get wireframe(){switch(this._fillMode){case n.WireFrameFillMode:case n.LineListDrawMode:case n.LineLoopDrawMode:case n.LineStripDrawMode:return!0}return this._scene.forceWireframe}set wireframe(e){this.fillMode=e?n.WireFrameFillMode:n.TriangleFillMode}get pointsCloud(){switch(this._fillMode){case n.PointFillMode:case n.PointListDrawMode:return!0}return this._scene.forcePointsCloud}set pointsCloud(e){this.fillMode=e?n.PointFillMode:n.TriangleFillMode}get fillMode(){return this._fillMode}set fillMode(e){this._fillMode!==e&&(this._fillMode=e,this.markAsDirty(n.MiscDirtyFlag))}get useLogarithmicDepth(){return this._useLogarithmicDepth}set useLogarithmicDepth(e){let t=this.getScene().getEngine().getCaps().fragmentDepthSupported;e&&!t&&$.Warn("Logarithmic depth has been requested for a material on a device that doesn't support it."),this._useLogarithmicDepth=e&&t,this._markAllSubMeshesAsMiscDirty()}get isVertexOutputInvariant(){return this._isVertexOutputInvariant}set isVertexOutputInvariant(e){this._isVertexOutputInvariant!==e&&(this._isVertexOutputInvariant=e,this._markAllSubMeshesAsMiscDirty())}_getDrawWrapper(){return this._drawWrapper}_setDrawWrapper(e){this._drawWrapper=e}constructor(e,t,i,r=!1){this.shadowDepthWrapper=null,this.allowShaderHotSwapping=!0,this._shaderLanguage=0,this._forceGLSL=!1,this._useVertexPulling=!1,this.metadata=null,this.reservedDataStore=null,this.checkReadyOnEveryCall=!1,this.checkReadyOnlyOnce=!1,this.state="",this._alpha=1,this._backFaceCulling=!0,this._cullBackFaces=!0,this._blockDirtyMechanism=!1,this.sideOrientation=null,this.onCompiled=null,this.onError=null,this.getRenderTargetTextures=null,this.doNotSerialize=!1,this._storeEffectOnSubMeshes=!1,this.animations=null,this.onDisposeObservable=new ee,this._onDisposeObserver=null,this._onUnBindObservable=null,this._onBindObserver=null,this._alphaMode=[2],this._needDepthPrePass=!1,this.disableDepthWrite=!1,this.disableColorWrite=!1,this.forceDepthWrite=!1,this.depthFunction=0,this.separateCullingPass=!1,this._fogEnabled=!0,this.pointSize=1,this.zOffset=0,this.zOffsetUnits=0,this.stencil=new bn,this._isVertexOutputInvariant=n.ForceVertexOutputInvariant,this._useUBO=!1,this._fillMode=n.TriangleFillMode,this._cachedDepthWriteState=!1,this._cachedColorWriteState=!1,this._cachedDepthFunctionState=0,this._indexInSceneMaterialArray=-1,this.meshMap=null,this._parentContainer=null,this._uniformBufferLayoutBuilt=!1,this._eventInfo={},this._callbackPluginEventGeneric=()=>{},this._callbackPluginEventIsReadyForSubMesh=()=>{},this._callbackPluginEventPrepareDefines=()=>{},this._callbackPluginEventPrepareDefinesBeforeAttributes=()=>{},this._callbackPluginEventHardBindForSubMesh=()=>{},this._callbackPluginEventBindForSubMesh=()=>{},this._callbackPluginEventHasRenderTargetTextures=()=>{},this._callbackPluginEventFillRenderTargetTextures=()=>{},this._transparencyMode=null,this.name=e;let s=t||Le.LastCreatedScene;s&&(this._scene=s,this._dirtyCallbacks={},this._forceGLSL=r,this._dirtyCallbacks[1]=this._markAllSubMeshesAsTexturesDirty.bind(this),this._dirtyCallbacks[2]=this._markAllSubMeshesAsLightsDirty.bind(this),this._dirtyCallbacks[4]=this._markAllSubMeshesAsFresnelDirty.bind(this),this._dirtyCallbacks[8]=this._markAllSubMeshesAsAttributesDirty.bind(this),this._dirtyCallbacks[16]=this._markAllSubMeshesAsMiscDirty.bind(this),this._dirtyCallbacks[32]=this._markAllSubMeshesAsPrePassDirty.bind(this),this._dirtyCallbacks[127]=this._markAllSubMeshesAsAllDirty.bind(this),this.id=e||he.RandomId(),this.uniqueId=this._scene.getUniqueId(),this._materialContext=this._scene.getEngine().createMaterialContext(),this._drawWrapper=new Wn(this._scene.getEngine(),!1),this._drawWrapper.materialContext=this._materialContext,this._uniformBuffer=new or(this._scene.getEngine(),void 0,void 0,e),this._useUBO=this.getScene().getEngine().supportsUniformBuffers,this._createUniformBuffer(),i||this._scene.addMaterial(this),this._scene.useMaterialMeshMap&&(this.meshMap={}),n.OnEventObservable.notifyObservers(this,1))}_createUniformBuffer(){var t;let e=this.getScene().getEngine();(t=this._uniformBuffer)==null||t.dispose(),e.isWebGPU&&!this._forceGLSL?(this._uniformBuffer=new or(e,void 0,void 0,this.name,!0),this._shaderLanguage=1):this._uniformBuffer=new or(this._scene.getEngine(),void 0,void 0,this.name),this._uniformBufferLayoutBuilt=!1}toString(e){return"Name: "+this.name}getClassName(){return"Material"}get _isMaterial(){return!0}get isFrozen(){return this.checkReadyOnlyOnce}freeze(){this.markDirty(),this.checkReadyOnlyOnce=!0}unfreeze(){this.markDirty(),this.checkReadyOnlyOnce=!1}isReady(e,t){return!0}isReadyForSubMesh(e,t,i){let r=t.materialDefines;return r?(this._eventInfo.isReadyForSubMesh=!0,this._eventInfo.defines=r,this._callbackPluginEventIsReadyForSubMesh(this._eventInfo),this._eventInfo.isReadyForSubMesh):!1}getEffect(){return this._drawWrapper.effect}getScene(){return this._scene}_getEffectiveOrientation(e){return this.sideOrientation!==null?this.sideOrientation:e.sideOrientation}get transparencyMode(){return this._transparencyMode}set transparencyMode(e){this._transparencyMode!==e&&(this._transparencyMode=e,this._markAllSubMeshesAsTexturesAndMiscDirty())}get _hasTransparencyMode(){return this._transparencyMode!=null}get _transparencyModeIsBlend(){return this._transparencyMode===n.MATERIAL_ALPHABLEND||this._transparencyMode===n.MATERIAL_ALPHATESTANDBLEND}get _transparencyModeIsTest(){return this._transparencyMode===n.MATERIAL_ALPHATEST||this._transparencyMode===n.MATERIAL_ALPHATESTANDBLEND}get _disableAlphaBlending(){return this._transparencyMode===n.MATERIAL_OPAQUE||this._transparencyMode===n.MATERIAL_ALPHATEST}needAlphaBlending(){return this._hasTransparencyMode?this._transparencyModeIsBlend:this._disableAlphaBlending?!1:this.alpha<1}needAlphaBlendingForMesh(e){return this._hasTransparencyMode?this._transparencyModeIsBlend:e.visibility<1?!0:this._disableAlphaBlending?!1:e.hasVertexAlpha||this.needAlphaBlending()}needAlphaTesting(){return this._hasTransparencyMode?this._transparencyModeIsTest:!1}needAlphaTestingForMesh(e){return this._hasTransparencyMode?this._transparencyModeIsTest:!this.needAlphaBlendingForMesh(e)&&this.needAlphaTesting()}getAlphaTestTexture(){return null}markDirty(e=!1){let t=this.getScene().meshes;for(let i of t)if(i.subMeshes){for(let r of i.subMeshes)if(r.getMaterial()===this)for(let s of r._drawWrappers)s&&this._materialContext===s.materialContext&&(s._wasPreviouslyReady=!1,s._wasPreviouslyUsingInstances=null,s._forceRebindOnNextCall=e)}e&&this.markAsDirty(n.AllDirtyFlag)}_preBind(e,t=null){let i=this._scene.getEngine(),s=(t==null?this.sideOrientation:t)===n.ClockWiseSideOrientation,a=e||this._getDrawWrapper();return zS(a)&&a.materialContext&&(a.materialContext.useVertexPulling=this.useVertexPulling),i.enableEffect(a),i.setState(this.backFaceCulling,this.zOffset,!1,s,this._scene._mirroredCameraPosition?!this.cullBackFaces:this.cullBackFaces,this.stencil,this.zOffsetUnits),s}bind(e,t){}buildUniformLayout(){let e=this._uniformBuffer;this._eventInfo.ubo=e,this._callbackPluginEventGeneric(8,this._eventInfo),e.create(),this._uniformBufferLayoutBuilt=!0}bindForSubMesh(e,t,i){let r=i._drawWrapper;this._eventInfo.subMesh=i,this._callbackPluginEventBindForSubMesh(this._eventInfo),r._forceRebindOnNextCall=!1}bindOnlyWorldMatrix(e){}bindView(e){this._useUBO?this._needToBindSceneUbo=!0:e.setMatrix("view",this.getScene().getViewMatrix())}bindViewProjection(e){this._useUBO?this._needToBindSceneUbo=!0:(e.setMatrix("viewProjection",this.getScene().getTransformMatrix()),e.setMatrix("projection",this.getScene().getProjectionMatrix()),e.setMatrix("inverseProjection",this.getScene().getInverseProjectionMatrix()))}bindEyePosition(e,t){this._useUBO?this._needToBindSceneUbo=!0:this._scene.bindEyePosition(e,t)}_afterBind(e,t=null,i){if(this._scene._cachedMaterial=this,this._needToBindSceneUbo&&t&&(this._needToBindSceneUbo=!1,df(t,this.getScene().getSceneUniformBuffer()),this._scene.finalizeSceneUbo()),e?this._scene._cachedVisibility=e.visibility:this._scene._cachedVisibility=1,this._onBindObservable&&e&&this._onBindObservable.notifyObservers(e),this.disableDepthWrite){let r=this._scene.getEngine();this._cachedDepthWriteState=r.getDepthWrite(),r.setDepthWrite(!1)}if(this.disableColorWrite){let r=this._scene.getEngine();this._cachedColorWriteState=r.getColorWrite(),r.setColorWrite(!1)}if(this.depthFunction!==0){let r=this._scene.getEngine();this._cachedDepthFunctionState=r.getDepthFunction()||0,r.setDepthFunction(this.depthFunction)}}unbind(){this._scene.getSceneUniformBuffer().unbindEffect(),this._onUnBindObservable&&this._onUnBindObservable.notifyObservers(this),this.depthFunction!==0&&this._scene.getEngine().setDepthFunction(this._cachedDepthFunctionState),this.disableDepthWrite&&this._scene.getEngine().setDepthWrite(this._cachedDepthWriteState),this.disableColorWrite&&this._scene.getEngine().setColorWrite(this._cachedColorWriteState)}getAnimatables(){return this._eventInfo.animatables=[],this._callbackPluginEventGeneric(256,this._eventInfo),this._eventInfo.animatables}getActiveTextures(){return this._eventInfo.activeTextures=[],this._callbackPluginEventGeneric(512,this._eventInfo),this._eventInfo.activeTextures}hasTexture(e){return this._eventInfo.hasTexture=!1,this._eventInfo.texture=e,this._callbackPluginEventGeneric(1024,this._eventInfo),this._eventInfo.hasTexture}clone(e){return null}_clonePlugins(e,t){let i={};if(this._serializePlugins(i),n._ParsePlugins(i,e,this._scene,t),this.pluginManager)for(let r of this.pluginManager._plugins){let s=e.pluginManager.getPlugin(r.name);s&&r.copyTo(s)}}getBindedMeshes(){if(this.meshMap){let e=[];for(let t in this.meshMap){let i=this.meshMap[t];i&&e.push(i)}return e}else return this._scene.meshes.filter(t=>t.material===this)}forceCompilation(e,t,i,r){let s={clipPlane:!1,useInstances:!1,...i},a=this.getScene(),o=this.allowShaderHotSwapping;this.allowShaderHotSwapping=!1;let l=()=>{if(!this._scene||!this._scene.getEngine())return;let c=a.clipPlane;if(s.clipPlane&&(a.clipPlane=new qa(0,0,0,1)),this._storeEffectOnSubMeshes){let f=!0,h=null;if(e.subMeshes){let d=new _s(0,0,0,0,0,e,void 0,!1,!1);d.materialDefines&&(d.materialDefines._renderId=-1),this.isReadyForSubMesh(e,d,s.useInstances)||(d.effect&&d.effect.getCompilationError()&&d.effect.allFallbacksProcessed()?h=d.effect.getCompilationError():(f=!1,setTimeout(l,16)))}f&&(this.allowShaderHotSwapping=o,h&&r&&r(h),t&&t(this))}else this.isReady()?(this.allowShaderHotSwapping=o,t&&t(this)):setTimeout(l,16);s.clipPlane&&(a.clipPlane=c)};l()}async forceCompilationAsync(e,t){return await new Promise((i,r)=>{this.forceCompilation(e,()=>{i()},t,s=>{r(s)})})}markAsDirty(e){this.getScene().blockMaterialDirtyMechanism||this._blockDirtyMechanism||(n._DirtyCallbackArray.length=0,e&n.ImageProcessingDirtyFlag&&n._DirtyCallbackArray.push(n._ImageProcessingDirtyCallBack),e&n.TextureDirtyFlag&&n._DirtyCallbackArray.push(n._TextureDirtyCallBack),e&n.LightDirtyFlag&&n._DirtyCallbackArray.push(n._LightsDirtyCallBack),e&n.FresnelDirtyFlag&&n._DirtyCallbackArray.push(n._FresnelDirtyCallBack),e&n.AttributesDirtyFlag&&n._DirtyCallbackArray.push(n._AttributeDirtyCallBack),e&n.MiscDirtyFlag&&n._DirtyCallbackArray.push(n._MiscDirtyCallBack),e&n.PrePassDirtyFlag&&n._DirtyCallbackArray.push(n._PrePassDirtyCallBack),n._DirtyCallbackArray.length&&this._markAllSubMeshesAsDirty(n._RunDirtyCallBacks),this.getScene().resetCachedMaterial())}resetDrawCache(){let e=this.getScene().meshes;for(let t of e)if(t.subMeshes)for(let i of t.subMeshes)i.getMaterial()===this&&i.resetDrawCache()}_markAllSubMeshesAsDirty(e){let t=this.getScene();if(t.blockMaterialDirtyMechanism||this._blockDirtyMechanism)return;let i=t.meshes;for(let r of i)if(r.subMeshes){for(let s of r.subMeshes)if((s.getMaterial()||(t._hasDefaultMaterial?t.defaultMaterial:null))===this)for(let o of s._drawWrappers)!o||!o.defines||!o.defines.markAllAsDirty||this._materialContext===o.materialContext&&e(o.defines)}}_markScenePrePassDirty(){if(this.getScene().blockMaterialDirtyMechanism||this._blockDirtyMechanism)return;let e=this.getScene().enablePrePassRenderer();e&&e.markAsDirty()}_markAllSubMeshesAsAllDirty(){this._markAllSubMeshesAsDirty(n._AllDirtyCallBack)}_markAllSubMeshesAsImageProcessingDirty(){this._markAllSubMeshesAsDirty(n._ImageProcessingDirtyCallBack)}_markAllSubMeshesAsTexturesDirty(){this._markAllSubMeshesAsDirty(n._TextureDirtyCallBack)}_markAllSubMeshesAsFresnelDirty(){this._markAllSubMeshesAsDirty(n._FresnelDirtyCallBack)}_markAllSubMeshesAsFresnelAndMiscDirty(){this._markAllSubMeshesAsDirty(n._FresnelAndMiscDirtyCallBack)}_markAllSubMeshesAsLightsDirty(){this._markAllSubMeshesAsDirty(n._LightsDirtyCallBack)}_markAllSubMeshesAsAttributesDirty(){this._markAllSubMeshesAsDirty(n._AttributeDirtyCallBack)}_markAllSubMeshesAsMiscDirty(){this._markAllSubMeshesAsDirty(n._MiscDirtyCallBack)}_markAllSubMeshesAsPrePassDirty(){this._markAllSubMeshesAsDirty(n._PrePassDirtyCallBack)}_markAllSubMeshesAsTexturesAndMiscDirty(){this._markAllSubMeshesAsDirty(n._TextureAndMiscDirtyCallBack)}_checkScenePerformancePriority(){if(this._scene.performancePriority!==0){this.checkReadyOnlyOnce=!0;let e=this._scene.onScenePerformancePriorityChangedObservable.addOnce(()=>{this.checkReadyOnlyOnce=!1});this.onDisposeObservable.add(()=>{this._scene.onScenePerformancePriorityChangedObservable.remove(e)})}}setPrePassRenderer(e){return!1}dispose(e,t,i){let r=this.getScene();if(r.stopAnimation(this),r.freeProcessedMaterials(),r.removeMaterial(this),this._eventInfo.forceDisposeTextures=t,this._callbackPluginEventGeneric(2,this._eventInfo),this._parentContainer){let s=this._parentContainer.materials.indexOf(this);s>-1&&this._parentContainer.materials.splice(s,1),this._parentContainer=null}if(i!==!0)if(this.meshMap)for(let s in this.meshMap){let a=this.meshMap[s];this._disposeMeshResources(a)}else{let s=r.meshes;for(let a of s)this._disposeMeshResources(a)}this._uniformBuffer.dispose(),this._drawWrapper.effect&&(this._storeEffectOnSubMeshes||this._drawWrapper.effect.dispose(),this._drawWrapper.effect=null),this.metadata=null,this.onDisposeObservable.notifyObservers(this),this.onDisposeObservable.clear(),this._onBindObservable&&this._onBindObservable.clear(),this._onUnBindObservable&&this._onUnBindObservable.clear(),this._onEffectCreatedObservable&&this._onEffectCreatedObservable.clear(),this._eventInfo&&(this._eventInfo={})}_disposeMeshResources(e){var r;if(!e)return;let t=e.geometry,i=e._internalAbstractMeshDataInfo._materialForRenderPass;if(this._storeEffectOnSubMeshes){if(e.subMeshes&&i)for(let s of e.subMeshes){let a=s._drawWrappers;for(let o=0;on.markAllAsDirty();ve._ImageProcessingDirtyCallBack=n=>n.markAsImageProcessingDirty();ve._TextureDirtyCallBack=n=>n.markAsTexturesDirty();ve._FresnelDirtyCallBack=n=>n.markAsFresnelDirty();ve._MiscDirtyCallBack=n=>n.markAsMiscDirty();ve._PrePassDirtyCallBack=n=>n.markAsPrePassDirty();ve._LightsDirtyCallBack=n=>n.markAsLightDirty();ve._AttributeDirtyCallBack=n=>n.markAsAttributesDirty();ve._FresnelAndMiscDirtyCallBack=n=>{ve._FresnelDirtyCallBack(n),ve._MiscDirtyCallBack(n)};ve._TextureAndMiscDirtyCallBack=n=>{ve._TextureDirtyCallBack(n),ve._MiscDirtyCallBack(n)};ve._DirtyCallbackArray=[];ve._RunDirtyCallBacks=n=>{for(let e of ve._DirtyCallbackArray)e(n)};P([F()],ve.prototype,"id",void 0);P([F()],ve.prototype,"uniqueId",void 0);P([F()],ve.prototype,"name",void 0);P([F()],ve.prototype,"metadata",void 0);P([F()],ve.prototype,"checkReadyOnEveryCall",void 0);P([F()],ve.prototype,"checkReadyOnlyOnce",void 0);P([F()],ve.prototype,"state",void 0);P([F("alpha")],ve.prototype,"_alpha",void 0);P([F("backFaceCulling")],ve.prototype,"_backFaceCulling",void 0);P([F("cullBackFaces")],ve.prototype,"_cullBackFaces",void 0);P([F()],ve.prototype,"sideOrientation",void 0);P([F()],ve.prototype,"_alphaMode",void 0);P([F()],ve.prototype,"_needDepthPrePass",void 0);P([F()],ve.prototype,"disableDepthWrite",void 0);P([F()],ve.prototype,"disableColorWrite",void 0);P([F()],ve.prototype,"forceDepthWrite",void 0);P([F()],ve.prototype,"depthFunction",void 0);P([F()],ve.prototype,"separateCullingPass",void 0);P([F("fogEnabled")],ve.prototype,"_fogEnabled",void 0);P([F()],ve.prototype,"pointSize",void 0);P([F()],ve.prototype,"zOffset",void 0);P([F()],ve.prototype,"zOffsetUnits",void 0);P([F()],ve.prototype,"pointsCloud",null);P([F()],ve.prototype,"fillMode",null);P([F()],ve.prototype,"useLogarithmicDepth",null);P([F()],ve.prototype,"_isVertexOutputInvariant",void 0);P([F()],ve.prototype,"transparencyMode",null)});var _m,TV=C(()=>{Pn();tf();Vi();_m=class n extends ve{get subMaterials(){return this._subMaterials}set subMaterials(e){this._subMaterials=e,this._hookArray(e)}getChildren(){return this.subMaterials}constructor(e,t){super(e,t,!0),this._waitingSubMaterialsUniqueIds=[],this.getScene().addMultiMaterial(this),this.subMaterials=[],this._storeEffectOnSubMeshes=!0}_hookArray(e){let t=e.push;e.push=(...r)=>{let s=t.apply(e,r);return this._markAllSubMeshesAsTexturesDirty(),s};let i=e.splice;e.splice=(r,s)=>{let a=i.call(e,r,s!=null?s:e.length);return this._markAllSubMeshesAsTexturesDirty(),a}}getSubMaterial(e){return e<0||e>=this.subMaterials.length?this.getScene().defaultMaterial:this.subMaterials[e]}getActiveTextures(){return super.getActiveTextures().concat(...this.subMaterials.map(e=>e?e.getActiveTextures():[]))}hasTexture(e){var t;if(super.hasTexture(e))return!0;for(let i=0;i=0&&r.multiMaterials.splice(s,1),super.dispose(e,t)}static ParseMultiMaterial(e,t){let i=new n(e.name,t);if(i.id=e.id,i._loadedUniqueId=e.uniqueId,qt&&qt.AddTagsTo(i,e.tags),e.materialsUniqueIds)i._waitingSubMaterialsUniqueIds=e.materialsUniqueIds;else for(let r of e.materials)i.subMaterials.push(t.getLastMaterialById(r));return i}};wt("BABYLON.MultiMaterial",_m)});var QT,AV=C(()=>{QT=class{constructor(e,t){this.distanceOrScreenCoverage=e,this.mesh=t}}});var gm,JT,NC,$T,FC,wC,il,q,Di=C(()=>{hi();Ci();__();tf();MC();Jo();Ve();Ht();Hs();Ui();lr();KT();Ju();V_();Pn();TV();YT();_r();Pt();Vi();an();Wu();AV();gm=class{},JT=class{constructor(){this.batchCache=new $T(this),this.batchCacheReplacementModeInFrozenMode=new $T(this),this.instancesBufferSize=512*4}},NC=class{constructor(){this.renderPasses={}}},$T=class{constructor(e){this.parent=e,this.mustReturn=!1,this.visibleInstances=new Array,this.renderSelf=[],this.hardwareInstancedRendering=[]}},FC=class{constructor(){this.instancesCount=0,this.matrixBuffer=null,this.previousMatrixBuffer=null,this.matrixBufferSize=512,this.matrixData=null,this.boundingVectors=[],this.worldMatrices=null}},wC=class{constructor(){this._areNormalsFrozen=!1,this._source=null,this.meshMap=null,this._preActivateId=-1,this._LODLevels=new Array,this._useLODScreenCoverage=!1,this._effectiveMaterial=null,this._forcedInstanceCount=0,this._overrideRenderingFillMode=null}},il={source:null,parent:null,doNotCloneChildren:!1,clonePhysicsImpostor:!0,cloneThinInstances:!1},q=class n extends ur{static _GetDefaultSideOrientation(e){return e||n.FRONTSIDE}get useLODScreenCoverage(){return this._internalMeshDataInfo._useLODScreenCoverage}set useLODScreenCoverage(e){this._internalMeshDataInfo._useLODScreenCoverage=e,this._sortLODLevels()}get computeBonesUsingShaders(){return this._internalAbstractMeshDataInfo._computeBonesUsingShaders}set computeBonesUsingShaders(e){this._internalAbstractMeshDataInfo._computeBonesUsingShaders!==e&&(e&&this._internalMeshDataInfo._sourcePositions&&(this.setVerticesData(L.PositionKind,this._internalMeshDataInfo._sourcePositions,!0),this._internalMeshDataInfo._sourceNormals&&this.setVerticesData(L.NormalKind,this._internalMeshDataInfo._sourceNormals,!0),this._internalMeshDataInfo._sourcePositions=null,this._internalMeshDataInfo._sourceNormals=null),this._internalAbstractMeshDataInfo._computeBonesUsingShaders=e,this._markSubMeshesAsAttributesDirty())}get onBeforeRenderObservable(){return this._internalMeshDataInfo._onBeforeRenderObservable||(this._internalMeshDataInfo._onBeforeRenderObservable=new ee),this._internalMeshDataInfo._onBeforeRenderObservable}get onBeforeBindObservable(){return this._internalMeshDataInfo._onBeforeBindObservable||(this._internalMeshDataInfo._onBeforeBindObservable=new ee),this._internalMeshDataInfo._onBeforeBindObservable}get onAfterRenderObservable(){return this._internalMeshDataInfo._onAfterRenderObservable||(this._internalMeshDataInfo._onAfterRenderObservable=new ee),this._internalMeshDataInfo._onAfterRenderObservable}get onBetweenPassObservable(){return this._internalMeshDataInfo._onBetweenPassObservable||(this._internalMeshDataInfo._onBetweenPassObservable=new ee),this._internalMeshDataInfo._onBetweenPassObservable}get onBeforeDrawObservable(){return this._internalMeshDataInfo._onBeforeDrawObservable||(this._internalMeshDataInfo._onBeforeDrawObservable=new ee),this._internalMeshDataInfo._onBeforeDrawObservable}set onBeforeDraw(e){this._onBeforeDrawObserver&&this.onBeforeDrawObservable.remove(this._onBeforeDrawObserver),this._onBeforeDrawObserver=this.onBeforeDrawObservable.add(e)}get hasInstances(){return this.instances.length>0}get hasThinInstances(){return(this.forcedInstanceCount||this._thinInstanceDataStorage.instancesCount||0)>0}get forcedInstanceCount(){return this._internalMeshDataInfo._forcedInstanceCount}set forcedInstanceCount(e){this._internalMeshDataInfo._forcedInstanceCount=e}get sideOrientation(){return this._internalMeshDataInfo._sideOrientation}set sideOrientation(e){this._internalMeshDataInfo._sideOrientation=e,this._internalAbstractMeshDataInfo._sideOrientationHint=this._scene.useRightHandedSystem&&e===1||!this._scene.useRightHandedSystem&&e===0}get _effectiveSideOrientation(){return this._internalMeshDataInfo._effectiveSideOrientation}get overrideMaterialSideOrientation(){return this.sideOrientation}set overrideMaterialSideOrientation(e){this.sideOrientation=e,this.material&&(this.material.sideOrientation=null)}get overrideRenderingFillMode(){return this._internalMeshDataInfo._overrideRenderingFillMode}set overrideRenderingFillMode(e){this._internalMeshDataInfo._overrideRenderingFillMode=e}get material(){return this._internalAbstractMeshDataInfo._material}set material(e){e&&(this.material&&this.material.sideOrientation===null||this._internalAbstractMeshDataInfo._sideOrientationHint)&&(e.sideOrientation=null),this._setMaterial(e)}get source(){return this._internalMeshDataInfo._source}get cloneMeshMap(){return this._internalMeshDataInfo.meshMap}get isUnIndexed(){return this._unIndexed}set isUnIndexed(e){this._unIndexed!==e&&(this._unIndexed=e,this._markSubMeshesAsAttributesDirty())}get worldMatrixInstancedBuffer(){let e=this._instanceDataStorage.useMonoDataStorageRenderPass?this._instanceDataStorage.dataStorageRenderPass:this._instanceDataStorage.renderPasses[this._instanceDataStorage.engine.currentRenderPassId];return e?e.instancesData:void 0}get previousWorldMatrixInstancedBuffer(){let e=this._instanceDataStorage.useMonoDataStorageRenderPass?this._instanceDataStorage.dataStorageRenderPass:this._instanceDataStorage.renderPasses[this._instanceDataStorage.engine.currentRenderPassId];return e?e.instancesPreviousData:void 0}get manualUpdateOfWorldMatrixInstancedBuffer(){return this._instanceDataStorage.manualUpdate}set manualUpdateOfWorldMatrixInstancedBuffer(e){this._instanceDataStorage.manualUpdate=e}get manualUpdateOfPreviousWorldMatrixInstancedBuffer(){return this._instanceDataStorage.previousManualUpdate}set manualUpdateOfPreviousWorldMatrixInstancedBuffer(e){this._instanceDataStorage.previousManualUpdate=e}get forceWorldMatrixInstancedBufferUpdate(){return this._instanceDataStorage.forceMatrixUpdates}set forceWorldMatrixInstancedBufferUpdate(e){this._instanceDataStorage.forceMatrixUpdates=e}_copySource(e,t,i=!0,r=!1){var a,o;let s=this.getScene();if(e._geometry&&e._geometry.applyToMesh(this),jo.DeepCopy(e,this,["name","material","skeleton","instances","parent","uniqueId","source","metadata","morphTargetManager","hasInstances","worldMatrixInstancedBuffer","previousWorldMatrixInstancedBuffer","hasLODLevels","geometry","isBlocked","areNormalsFrozen","facetNb","isFacetDataEnabled","lightSources","useBones","isAnInstance","collider","edgesRenderer","forward","up","right","absolutePosition","absoluteScaling","absoluteRotationQuaternion","isWorldMatrixFrozen","nonUniformScaling","behaviors","worldMatrixFromCache","hasThinInstances","cloneMeshMap","hasBoundingInfo","physicsBody","physicsImpostor"],["_poseMatrix"]),this._internalMeshDataInfo._source=e,s.useClonedMeshMap&&(e._internalMeshDataInfo.meshMap||(e._internalMeshDataInfo.meshMap={}),e._internalMeshDataInfo.meshMap[this.uniqueId]=this),this._originalBuilderSideOrientation=e._originalBuilderSideOrientation,this._creationDataStorage=e._creationDataStorage,e._ranges){let l=e._ranges;for(let c in l)Object.prototype.hasOwnProperty.call(l,c)&&l[c]&&this.createAnimationRange(c,l[c].from,l[c].to)}if(e.metadata&&e.metadata.clone?this.metadata=e.metadata.clone():this.metadata=e.metadata,this._internalMetadata=e._internalMetadata,qt&&qt.HasTags(e)&&qt.AddTagsTo(this,qt.GetTags(e,!0)),this.setEnabled(e.isEnabled(!1)),this.parent=e.parent,this.setPivotMatrix(e.getPivotMatrix(),this._postMultiplyPivotMatrix),this.id=this.name+"."+e.id,this.material=e.material,!t){let l=e.getDescendants(!0);for(let c=0;c{m&&p&&(this._uniformBuffer?this.transferToEffect(_):p.bindOnlyWorldMatrix(_))};let o,l=!1;if(i&&i._addToSceneRootNodes===void 0){let m=i;o=(c=m.parent)!=null?c:null,r=(f=m.source)!=null?f:null,s=(h=m.doNotCloneChildren)!=null?h:!1,a=(d=m.clonePhysicsImpostor)!=null?d:!0,l=(u=m.cloneThinInstances)!=null?u:!1}else o=i;r&&this._copySource(r,s,a,l),o!==null&&(this.parent=o),this._instanceDataStorage.hardwareInstancedRendering=this.getEngine().getCaps().instancedArrays,this._internalMeshDataInfo._onMeshReadyObserverAdded=m=>{m.unregisterOnNextCall=!0,this.isReady(!0)?this.onMeshReadyObservable.notifyObservers(this):this._internalMeshDataInfo._checkReadinessObserver||(this._internalMeshDataInfo._checkReadinessObserver=this._scene.onBeforeRenderObservable.add(()=>{this.isReady(!0)&&(this._scene.onBeforeRenderObservable.remove(this._internalMeshDataInfo._checkReadinessObserver),this._internalMeshDataInfo._checkReadinessObserver=null,this.onMeshReadyObservable.notifyObservers(this))}))},this.onMeshReadyObservable=new ee(this._internalMeshDataInfo._onMeshReadyObserverAdded),r&&r.onClonedObservable.notifyObservers(this)}instantiateHierarchy(e=null,t,i){let r=this.getTotalVertices()===0||t&&t.doNotInstantiate&&(t.doNotInstantiate===!0||t.doNotInstantiate(this))?this.clone("Clone of "+(this.name||this.id),e||this.parent,!0):this.createInstance("instance of "+(this.name||this.id));r.parent=e||this.parent,r.position=this.position.clone(),r.scaling=this.scaling.clone(),this.rotationQuaternion?r.rotationQuaternion=this.rotationQuaternion.clone():r.rotation=this.rotation.clone(),i&&i(this,r);for(let s of this.getChildTransformNodes(!0))s.getClassName()==="InstancedMesh"&&r.getClassName()==="Mesh"&&s.sourceMesh===this?s.instantiateHierarchy(r,{doNotInstantiate:t&&t.doNotInstantiate||!1,newSourcedMesh:r},i):s.instantiateHierarchy(r,t,i);return r}getClassName(){return"Mesh"}get _isMesh(){return!0}toString(e){let t=super.toString(e);if(t+=", n vertices: "+this.getTotalVertices(),t+=", parent: "+(this._waitingParentId?this._waitingParentId:this.parent?this.parent.name:"NONE"),this.animations)for(let i=0;i0}getLODLevels(){return this._internalMeshDataInfo._LODLevels}_sortLODLevels(){let e=this._internalMeshDataInfo._useLODScreenCoverage?-1:1;this._internalMeshDataInfo._LODLevels.sort((t,i)=>t.distanceOrScreenCoveragei.distanceOrScreenCoverage?-e:0)}addLODLevel(e,t){if(t&&t._masterMesh)return $.Warn("You cannot use a mesh as LOD level twice"),this;let i=new QT(e,t);return this._internalMeshDataInfo._LODLevels.push(i),t&&(t._masterMesh=this),this._sortLODLevels(),this}getLODLevelAtDistance(e){let t=this._internalMeshDataInfo;for(let i=0;io*a)return this.onLODLevelSelection&&this.onLODLevelSelection(a,this,this),this;for(let l=0;l0||this.hasThinInstances);this.computeWorldMatrix();let a=this.material||r.defaultMaterial;if(a){if(a._storeEffectOnSubMeshes)for(let _ of this.subMeshes){let p=_.getMaterial();if(p){if(p._storeEffectOnSubMeshes){if(!p.isReadyForSubMesh(this,_,s))return!1}else if(!p.isReady(this,s))return!1}}else if(!a.isReady(this,s))return!1}let o=i.currentRenderPassId;for(let _ of this.lightSources){let p=_.getShadowGenerators();if(!p)continue;let g=p.values();for(let v=g.next();v.done!==!0;v=g.next()){let x=v.value;if(x&&(!((l=x.getShadowMap())!=null&&l.renderList)||(c=x.getShadowMap())!=null&&c.renderList&&((h=(f=x.getShadowMap())==null?void 0:f.renderList)==null?void 0:h.indexOf(this))!==-1)){let E=(d=x.getShadowMap().renderPassIds)!=null?d:[i.currentRenderPassId];for(let T=0;T0){let i=this.getIndices();if(!i)return null;let r=i.length,s=!1;if(e)s=!0;else for(let a of this.subMeshes){if(a.indexStart+a.indexCount>r){s=!0;break}if(a.verticesStart+a.verticesCount>t){s=!0;break}}if(!s)return this.subMeshes[0]}return this.releaseSubMeshes(),new _s(0,0,t,0,this.getTotalIndices()||(this.isUnIndexed?t:0),this)}subdivide(e){if(e<1)return;let t=this.getTotalIndices(),i=t/e|0,r=0;for(;i%3!==0;)i++;this.releaseSubMeshes();for(let s=0;s=t);s++)_s.CreateFromIndices(0,r,r+i>=t?t-r:i,this,void 0,!1),r+=i;this.refreshBoundingInfo(),this.synchronizeInstances()}setVerticesData(e,t,i=!1,r){if(this._geometry)this._geometry.setVerticesData(e,t,i,r);else{let s=new Ie;s.set(t,e);let a=this.getScene();new cn(cn.RandomId(),a,s,i,this)}return this}removeVerticesData(e){this._geometry&&this._geometry.removeVerticesData(e)}markVerticesDataAsUpdatable(e,t=!0){let i=this.getVertexBuffer(e);!i||i.isUpdatable()===t||this.setVerticesData(e,this.getVerticesData(e),t)}setVerticesBuffer(e,t=!0,i=null){return this._geometry||(this._geometry=cn.CreateGeometryForMesh(this)),this._geometry.setVerticesBuffer(e,i,t),this}updateVerticesData(e,t,i,r){return this._geometry?(r?(this.makeGeometryUnique(),this.updateVerticesData(e,t,i,!1)):this._geometry.updateVerticesData(e,t,i),this):this}updateMeshPositions(e,t=!0){let i=this.getVerticesData(L.PositionKind);if(!i)return this;if(e(i),this.updateVerticesData(L.PositionKind,i,!1,!1),t){let r=this.getIndices(),s=this.getVerticesData(L.NormalKind);if(!s)return this;Ie.ComputeNormals(i,r,s),this.updateVerticesData(L.NormalKind,s,!1,!1)}return this}makeGeometryUnique(){if(!this._geometry)return this;if(this._geometry.meshes.length===1)return this;let e=this._geometry,t=this._geometry.copy(cn.RandomId());return e.releaseForMesh(this,!0),t.applyToMesh(this),this}setIndexBuffer(e,t,i,r=null){let s=this._geometry;s||(s=new cn(cn.RandomId(),this.getScene(),void 0,void 0,this)),s.setIndexBuffer(e,t,i,r)}setIndices(e,t=null,i=!1,r=!1){if(this._geometry)this._geometry.setIndices(e,t,i,r);else{let s=new Ie;s.indices=e;let a=this.getScene();new cn(cn.RandomId(),a,s,i,this,t)}return this}updateIndices(e,t,i=!1){return this._geometry?(this._geometry.updateIndices(e,t,i),this):this}toLeftHanded(){return this._geometry?(this._geometry.toLeftHanded(),this):this}_bind(e,t,i,r=!0){if(!this._geometry)return this;let s=this.getScene().getEngine(),a;if(this._unIndexed)switch(this._getRenderingFillMode(i)){case ve.WireFrameFillMode:a=e._getLinesIndexBuffer(this.getIndices(),s);break;default:a=null;break}else switch(this._getRenderingFillMode(i)){case ve.PointFillMode:a=null;break;case ve.WireFrameFillMode:a=e._getLinesIndexBuffer(this.getIndices(),s);break;default:case ve.TriangleFillMode:a=this._geometry.getIndexBuffer();break}return this._bindDirect(t,a,r)}_bindDirect(e,t,i=!0){if(!this._geometry)return this;if(this.morphTargetManager&&this.morphTargetManager.isUsingTextureForTargets&&this.morphTargetManager._bind(e),!i||!this._userInstancedBuffersStorage||this.hasThinInstances)this._geometry._bind(e,t);else{if(!this._instanceDataStorage.useMonoDataStorageRenderPass&&this._userInstancedBuffersStorage.renderPasses&&this._userInstancedBuffersStorage.renderPasses[this._instanceDataStorage.engine.currentRenderPassId]){let r=this._userInstancedBuffersStorage.renderPasses[this._instanceDataStorage.engine.currentRenderPassId];for(let s in r)this._userInstancedBuffersStorage.vertexBuffers[s]=r[s]}this._geometry._bind(e,t,this._userInstancedBuffersStorage.vertexBuffers,this._userInstancedBuffersStorage.vertexArrayObjects)}return this}_draw(e,t,i){if(!this._geometry||!this._geometry.getVertexBuffers()||!this._unIndexed&&!this._geometry.getIndexBuffer())return this;this._internalMeshDataInfo._onBeforeDrawObservable&&this._internalMeshDataInfo._onBeforeDrawObservable.notifyObservers(this);let s=this.getScene().getEngine(),a=s._currentMaterialContext,o=a&&a.useVertexPulling;return this._unIndexed&&t!==ve.WireFrameFillMode||t==ve.PointFillMode?s.drawArraysType(t,e.verticesStart,e.verticesCount,this.forcedInstanceCount||i):t==ve.WireFrameFillMode?s.drawElementsType(t,0,e._linesIndexCount,this.forcedInstanceCount||i):o?s.drawArraysType(t,e.indexStart,e.indexCount,this.forcedInstanceCount||i):s.drawElementsType(t,e.indexStart,e.indexCount,this.forcedInstanceCount||i),this}registerBeforeRender(e){return this.onBeforeRenderObservable.add(e),this}unregisterBeforeRender(e){return this.onBeforeRenderObservable.removeCallback(e),this}registerAfterRender(e){return this.onAfterRenderObservable.add(e),this}unregisterAfterRender(e){return this.onAfterRenderObservable.removeCallback(e),this}_getInstancesRenderList(e,t=!1){let i=this._instanceDataStorage.useMonoDataStorageRenderPass?this._instanceDataStorage.dataStorageRenderPass:this._getInstanceDataStorage();if(this._instanceDataStorage.isFrozen){if(t)return i.batchCacheReplacementModeInFrozenMode.hardwareInstancedRendering[e]=!1,i.batchCacheReplacementModeInFrozenMode.renderSelf[e]=!0,i.batchCacheReplacementModeInFrozenMode;if(i.previousBatch)return i.previousBatch}let r=this.getScene(),s=r._isInIntermediateRendering(),a=s?this._internalAbstractMeshDataInfo._onlyForInstancesIntermediate:this._internalAbstractMeshDataInfo._onlyForInstances,o=i.batchCache;if(o.mustReturn=!1,o.renderSelf[e]=t||!a&&this.isEnabled()&&this.isVisible,o.visibleInstances[e]=null,i.visibleInstances&&!t){let l=i.visibleInstances,c=r.getRenderId(),f=s?l.intermediateDefaultRenderId:l.defaultRenderId;o.visibleInstances[e]=l[c],!o.visibleInstances[e]&&f&&(o.visibleInstances[e]=l[f])}return o.hardwareInstancedRendering[e]=!t&&this._instanceDataStorage.hardwareInstancedRendering&&o.visibleInstances[e]!==null&&o.visibleInstances[e]!==void 0,i.previousBatch=o,o}_updateInstancedBuffers(e,t,i,r,s,a){var v;let o=t.visibleInstances[e._id],l=o?o.length:0,c=t.parent,f=this._instanceDataStorage,h=c.instancesBuffer,d=c.instancesPreviousBuffer,u=0,m=0,_=t.renderSelf[e._id],p=this._scene.floatingOriginOffset,g=!h||i!==c.instancesBufferSize||this._scene.needsPreviousWorldMatrices&&!c.instancesPreviousBuffer;if(!this._instanceDataStorage.manualUpdate&&(!f.isFrozen||g)){let x=this.getWorldMatrix();if(_){this._scene.needsPreviousWorldMatrices&&(f.masterMeshPreviousWorldMatrix?(f.masterMeshPreviousWorldMatrix.copyToArray(c.instancesPreviousData,u),f.masterMeshPreviousWorldMatrix.copyFrom(x)):(f.masterMeshPreviousWorldMatrix=x.clone(),f.masterMeshPreviousWorldMatrix.copyToArray(c.instancesPreviousData,u))),x.copyToArray(c.instancesData,u);let A=x.asArray();c.instancesData[u+12]=A[12]-p.x,c.instancesData[u+13]=A[13]-p.y,c.instancesData[u+14]=A[14]-p.z,u+=16,m++}if(o){if(n.INSTANCEDMESH_SORT_TRANSPARENT&&this._scene.activeCamera&&((v=e.getMaterial())!=null&&v.needAlphaBlendingForMesh(e.getRenderingMesh()))){let A=this._scene.activeCamera.globalPosition;for(let E=0;EE._distanceToCamera>T._distanceToCamera?-1:E._distanceToCamera1&&r.activeCamera===r.activeCameras[0]||a<=1,l=this._occlusionDataStorage&&this._occlusionDataStorage.occlusionForRenderPassId!==-1&&this._occlusionDataStorage.occlusionForRenderPassId!==s.currentRenderPassId;if(o&&this._checkOcclusionQuery(l)&&!this._occlusionDataStorage.forceRenderingWhenOccluded)return this;let c=this._getInstancesRenderList(e._id,!!i);if(c.mustReturn)return this;if(!this._geometry||!this._geometry.getVertexBuffers()||!this._unIndexed&&!this._geometry.getIndexBuffer())return this;let f=0,h=null;this.ignoreCameraMaxZ&&r.activeCamera&&!r._isInIntermediateRendering()&&(f=r.activeCamera.maxZ,h=r.activeCamera,r.activeCamera.maxZ=0,r.updateTransformMatrix(!0)),this._internalMeshDataInfo._onBeforeRenderObservable&&this._internalMeshDataInfo._onBeforeRenderObservable.notifyObservers(this);let d=e.getRenderingMesh(),u=c.hardwareInstancedRendering[e._id]||d.hasThinInstances||!!this._userInstancedBuffersStorage&&!e.getMesh()._internalAbstractMeshDataInfo._actAsRegularMesh,m=this._instanceDataStorage,_=e.getMaterial();if(!_)return h&&(h.maxZ=f,r.updateTransformMatrix(!0)),this;if(!m.isFrozen||!this._internalMeshDataInfo._effectiveMaterial||this._internalMeshDataInfo._effectiveMaterial!==_){if(_._storeEffectOnSubMeshes){if(!_.isReadyForSubMesh(this,e,u))return h&&(h.maxZ=f,r.updateTransformMatrix(!0)),this}else if(!_.isReady(this,u))return h&&(h.maxZ=f,r.updateTransformMatrix(!0)),this;this._internalMeshDataInfo._effectiveMaterial=_}else if(_._storeEffectOnSubMeshes&&!((M=e._drawWrapper)!=null&&M._wasPreviouslyReady)||!_._storeEffectOnSubMeshes&&!_._getDrawWrapper()._wasPreviouslyReady)return h&&(h.maxZ=f,r.updateTransformMatrix(!0)),this;if(t){let O=this._internalMeshDataInfo._effectiveMaterial;if(O.alphaModes.length===1)s.setAlphaMode(O.alphaMode);else for(let V=0;Vg&&r++,E!==0&&x++,v+=E,g=E}if(c[x]++,x>a&&(a=x),v===0)s++;else{let A=1/v,E=0;for(let T=0;Tf&&o++}}let h=this.skeleton.bones.length,d=this.getVerticesData(L.MatricesIndicesKind),u=this.getVerticesData(L.MatricesIndicesExtraKind),m=0;for(let p=0;p=h||v<0)&&m++}let _="Number of Weights = "+i/4+` +fn main(input: FragmentInputs)->FragmentOutputs {fragmentOutputs.color=toRGBD(textureSample(textureSampler,textureSamplerSampler,input.vUV).rgb);}`;T.ShadersStoreWGSL[eC]||(T.ShadersStoreWGSL[eC]=AB);tre={name:eC,shader:AB}});var ju,tC=C(()=>{kl();PM();ju=class{static ExpandRGBDTexture(e){let t=e._texture;if(!t||!e.isRGBD)return;let i=t.getEngine(),r=i.getCaps(),s=t.isReady,a=!1;r.textureHalfFloatRender&&r.textureHalfFloatLinearFiltering?(a=!0,t.type=2):r.textureFloatRender&&r.textureFloatLinearFiltering&&(a=!0,t.type=1),a&&(t.isReady=!1,t._isRGBD=!1,t.invertY=!1);let o=async()=>{let l=i.isWebGPU,c=l?1:0;t.isReady=!1,l?await Promise.resolve().then(()=>(qM(),jM)):await Promise.resolve().then(()=>($M(),QM));let f=new Ri("rgbdDecode","rgbdDecode",null,null,1,null,3,i,!1,void 0,t.type,void 0,null,!1,void 0,c);f.externalTextureSamplerBinding=!0;let h=i.createRenderTargetTexture(t.width,{generateDepthBuffer:!1,generateMipMaps:!1,generateStencilBuffer:!1,samplingMode:t.samplingMode,type:t.type,format:5});f.onEffectCreatedObservable.addOnce(d=>{d.executeWhenCompiled(()=>{f.onApply=u=>{u._bindTexture("textureSampler",t),u.setFloat2("scale",1,1)},e.getScene().postProcessManager.directRender([f],h,!0),i.restoreDefaultFramebuffer(),i._releaseTexture(t),f&&f.dispose(),h._swapAndDie(t),t.isReady=!0})})};a&&(s?o():e.onLoadObservable.addOnce(o))}static async EncodeTextureToRGBD(e,t,i=0){return t.getEngine().isWebGPU?await Promise.resolve().then(()=>(RB(),xB)):await Promise.resolve().then(()=>(TB(),SB)),await b2("rgbdEncode",e,t,i,1,5)}}});var iC=C(()=>{cM();x_();pi.prototype._sphericalPolynomialTargetSize=0;pi.prototype.forceSphericalPolynomialsRecompute=function(){this._texture&&(this._texture._sphericalPolynomial=null,this._texture._sphericalPolynomialPromise=null,this._texture._sphericalPolynomialComputed=!1)};Object.defineProperty(pi.prototype,"sphericalPolynomial",{get:function(){if(this._texture){if(this._texture._sphericalPolynomial||this._texture._sphericalPolynomialComputed)return this._texture._sphericalPolynomial;if(this._texture.isReady)return this._texture._sphericalPolynomialPromise||(this._texture._sphericalPolynomialPromise=Ul.ConvertCubeMapTextureToSphericalPolynomial(this),this._texture._sphericalPolynomialPromise===null?this._texture._sphericalPolynomialComputed=!0:this._texture._sphericalPolynomialPromise.then(n=>{this._texture._sphericalPolynomial=n,this._texture._sphericalPolynomialComputed=!0})),null}return null},set:function(n){this._texture&&(this._texture._sphericalPolynomial=n)},enumerable:!0,configurable:!0})});function CB(n){let e=new DataView(n.buffer,n.byteOffset,n.byteLength),t=0;for(let a=0;abB)throw new Error(`Unsupported babylon environment map version "${n.version}". Latest supported version is "${bB}".`);return n.version===2||(n={...n,version:2,imageType:XT}),n}function ire(n,e){e=U_(e);let t=e.specular,i=Math.log2(e.width);if(i=Math.round(i)+1,t.mipmaps.length!==6*i)throw new Error(`Unsupported specular mipmaps number "${t.mipmaps.length}"`);let r=new Array(i);for(let s=0;s{if(t){let u=e.createTexture(null,!0,!0,null,1,null,m=>{d(m)},n);i==null||i.onEffectCreatedObservable.addOnce(m=>{m.executeWhenCompiled(()=>{i.externalTextureSamplerBinding=!0,i.onApply=_=>{_._bindTexture("textureSampler",u),_.setFloat2("scale",1,e._features.needsInvertingBitmap&&n instanceof ImageBitmap?-1:1)},e.scenes.length&&(e.scenes[0].postProcessManager.directRender([i],c,!0,s,a),e.restoreDefaultFramebuffer(),u.dispose(),URL.revokeObjectURL(r),h())})})}else{if(e._uploadImageToTexture(f,n,s,a),o){let u=l[a];u&&e._uploadImageToTexture(u._texture,n,s,0)}h()}})}async function nre(n,e,t=XT){let i=n.getEngine();n.format=5,n.type=0,n.generateMipMaps=!0,n._cachedAnisotropicFilteringLevel=null,i.updateTextureSamplingMode(3,n),await PB(n,e,!0,t),n.isReady=!0}async function sre(n,e,t,i=XT,r=null){let s=n.getEngine(),a=new Fi(s,5),o=new pi(s,a);n._irradianceTexture=o,o._dominantDirection=r,a.isCube=!0,a.format=5,a.type=0,a.generateMipMaps=!0,a._cachedAnisotropicFilteringLevel=null,a.generateMipMaps=!0,a.width=t,a.height=t,s.updateTextureSamplingMode(3,a),await PB(a,[e],!1,i),s.generateMipMapsForCubemap(a),a.isReady=!0}async function PB(n,e,t,i=XT){if(!de.IsExponentOfTwo(n.width))throw new Error("Texture size must be a power of two");let r=y3(n.width)+1,s=n.getEngine(),a=!1,o=!1,l=null,c=null,f=null,h=s.getCaps();h.textureLOD?s._features.supportRenderAndCopyToLodForFloatTextures?h.textureHalfFloatRender&&h.textureHalfFloatLinearFiltering?(a=!0,n.type=2):h.textureFloatRender&&h.textureFloatLinearFiltering&&(a=!0,n.type=1):a=!1:(a=!1,o=t);let d=0;if(a)s.isWebGPU?(d=1,await Promise.resolve().then(()=>(qM(),jM))):await Promise.resolve().then(()=>($M(),QM)),l=new Ri("rgbdDecode","rgbdDecode",null,null,1,null,3,s,!1,void 0,n.type,void 0,null,!1,void 0,d),n._isRGBD=!1,n.invertY=!1,c=s.createRenderTargetCubeTexture(n.width,{generateDepthBuffer:!1,generateMipMaps:!0,generateStencilBuffer:!1,samplingMode:3,type:n.type,format:5});else if(n._isRGBD=!0,n.invertY=!0,o){f={};let _=n._lodGenerationScale,p=n._lodGenerationOffset;for(let g=0;g<3;g++){let x=1-g/2,A=p,S=(r-1)*_+p,E=A+(S-A)*x,R=Math.round(Math.min(Math.max(E,0),S)),I=new Fi(s,2);I.isCube=!0,I.invertY=!0,I.generateMipMaps=!1,s.updateTextureSamplingMode(2,I);let y=new pi(null);switch(y._isCube=!0,y._texture=I,f[R]=y,g){case 0:n._lodTextureLow=y;break;case 1:n._lodTextureMid=y;break;case 2:n._lodTextureHigh=y;break}}}let u=[];for(let m=0;mawait MB(S,s,a,l,x,_,m,o,f,c,n));else{let S=new Image;S.src=x,A=new Promise((E,R)=>{S.onload=()=>{MB(S,s,a,l,x,_,m,o,f,c,n).then(()=>E()).catch(I=>{R(I)})},S.onerror=I=>{R(I)}})}u.push(A)}if(await Promise.all(u),e.length{Ci();Ge();xn();v_();Ws();x_();ps();kl();Pt();tC();xM();iC();Hu();XT="image/png",bB=2,IB=[134,22,135,150,246,214,150,54]});var OB={};$e(OB,{_ENVTextureLoader:()=>rC});var rC,NB=C(()=>{LB();rC=class{constructor(){this.supportCascades=!1}loadCubeData(e,t,i,r,s){if(Array.isArray(e))return;let a=CB(e);if(a){t.width=a.width,t.height=a.width;try{DB(t,a),yB(t,e,a).then(()=>{t.isReady=!0,t.onLoadedObservable.notifyObservers(t),t.onLoadedObservable.clear(),r&&r()},o=>{s==null||s("Can not upload environment levels",o)})}catch(o){s==null||s("Can not upload environment file",o)}}else s&&s("Can not parse the environment file",null)}loadData(){throw".env not supported in 2d."}}});var Kl,wB=C(()=>{Ge();Kl=class{static ConvertPanoramaToCubemap(e,t,i,r,s=!1,a=!0){if(!e)throw"ConvertPanoramaToCubemap: input cannot be null";let o;if(e.length!=t*i*3){if(e.length!=t*i*4)throw"ConvertPanoramaToCubemap: input size is wrong";o=4}else o=3;let l=this.CreateCubemapTexture(r,this.FACE_FRONT,e,t,i,s,a,o),c=this.CreateCubemapTexture(r,this.FACE_BACK,e,t,i,s,a,o),f=this.CreateCubemapTexture(r,this.FACE_LEFT,e,t,i,s,a,o),h=this.CreateCubemapTexture(r,this.FACE_RIGHT,e,t,i,s,a,o),d=this.CreateCubemapTexture(r,this.FACE_UP,e,t,i,s,a,o),u=this.CreateCubemapTexture(r,this.FACE_DOWN,e,t,i,s,a,o);return{front:l,back:c,left:f,right:h,up:d,down:u,size:r,type:1,format:4,gammaSpace:!1}}static CreateCubemapTexture(e,t,i,r,s,a,o,l){let c=new ArrayBuffer(e*e*4*3),f=new Float32Array(c),h=a?Math.max(1,Math.round(r/4/e)):1,d=1/h,u=d*d,m=t[1].subtract(t[0]).scale(d/e),_=t[3].subtract(t[2]).scale(d/e),p=1/e,g=0;for(let v=0;vMath.PI;)o-=2*Math.PI;let c=o/Math.PI,f=l/Math.PI;c=c*.5+.5;let h=Math.round(c*i);h<0?h=0:h>=i&&(h=i-1);let d=Math.round(f*r);d<0?d=0:d>=r&&(d=r-1);let u=a?r-d-1:d,m=t[u*i*s+h*s+0],_=t[u*i*s+h*s+1],p=t[u*i*s+h*s+2];return{r:m,g:_,b:p}}};Kl.FACE_LEFT=[new b(-1,-1,-1),new b(1,-1,-1),new b(-1,1,-1),new b(1,1,-1)];Kl.FACE_RIGHT=[new b(1,-1,1),new b(-1,-1,1),new b(1,1,1),new b(-1,1,1)];Kl.FACE_FRONT=[new b(1,-1,-1),new b(1,-1,1),new b(1,1,-1),new b(1,1,1)];Kl.FACE_BACK=[new b(-1,-1,1),new b(-1,-1,-1),new b(-1,1,1),new b(-1,1,-1)];Kl.FACE_DOWN=[new b(1,1,-1),new b(1,1,1),new b(-1,1,-1),new b(-1,1,1)];Kl.FACE_UP=[new b(-1,-1,-1),new b(-1,-1,1),new b(1,-1,-1),new b(1,-1,1)]});function are(n,e){return e>1023?n*Math.pow(2,1023)*Math.pow(2,e-1023):e<-1074?n*Math.pow(2,-1074)*Math.pow(2,e+1074):n*Math.pow(2,e)}function FB(n,e,t,i,r,s){r>0?(r=are(1,r-136),n[s+0]=e*r,n[s+1]=t*r,n[s+2]=i*r):(n[s+0]=0,n[s+1]=0,n[s+2]=0)}function nC(n,e){let t="",i;for(let r=e;r32767)throw"HDR Bad header format, unsupported size";return r+=e.length+1,{height:l,width:o,dataPosition:r}}function UB(n,e){return ore(n,e)}function ore(n,e){let t=e.height,i=e.width,r,s,a,o,l,c=e.dataPosition,f,h,d,u=new ArrayBuffer(i*4),m=new Uint8Array(u),_=new ArrayBuffer(e.width*e.height*4*3),p=new Float32Array(_);for(;t>0;){if(r=n[c++],s=n[c++],a=n[c++],o=n[c++],r!=2||s!=2||a&128||e.width<8||e.width>32767)return lre(n,e);if((a<<8|o)!=i)throw"HDR Bad header format, wrong scan line width";for(f=0,d=0;d<4;d++)for(h=(d+1)*i;f128){if(l=r-128,l==0||l>h-f)throw"HDR Bad Format, bad scanline data (run)";for(;l-- >0;)m[f++]=s}else{if(l=r,l==0||l>h-f)throw"HDR Bad Format, bad scanline data (non-run)";if(m[f++]=s,--l>0)for(let g=0;g0;){for(l=0;l{wB()});var GB={};$e(GB,{_HDRTextureLoader:()=>sC});var sC,kB=C(()=>{VB();sC=class{constructor(){this.supportCascades=!1}loadCubeData(){throw".hdr not supported in Cube."}loadData(e,t,i){let r=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),s=BB(r),a=UB(r,s),o=s.width*s.height,l=new Float32Array(o*4);for(let c=0;c{let c=t.getEngine();t.type=1,t.format=5,t._gammaSpace=!1,c._uploadDataToTextureDirectly(t,l)})}}});var oo,WB=C(()=>{Pt();oo=class n{constructor(e,t){if(this.data=e,this.isInvalid=!1,!n.IsValid(e)){this.isInvalid=!0,J.Error("texture missing KTX identifier");return}let i=Uint32Array.BYTES_PER_ELEMENT,r=new DataView(this.data.buffer,this.data.byteOffset+12,13*i),a=r.getUint32(0,!0)===67305985;if(this.glType=r.getUint32(1*i,a),this.glTypeSize=r.getUint32(2*i,a),this.glFormat=r.getUint32(3*i,a),this.glInternalFormat=r.getUint32(4*i,a),this.glBaseInternalFormat=r.getUint32(5*i,a),this.pixelWidth=r.getUint32(6*i,a),this.pixelHeight=r.getUint32(7*i,a),this.pixelDepth=r.getUint32(8*i,a),this.numberOfArrayElements=r.getUint32(9*i,a),this.numberOfFaces=r.getUint32(10*i,a),this.numberOfMipmapLevels=r.getUint32(11*i,a),this.bytesOfKeyValueData=r.getUint32(12*i,a),this.glType!==0){J.Error("only compressed formats currently supported"),this.isInvalid=!0;return}else this.numberOfMipmapLevels=Math.max(1,this.numberOfMipmapLevels);if(this.pixelHeight===0||this.pixelDepth!==0){J.Error("only 2D textures currently supported"),this.isInvalid=!0;return}if(this.numberOfArrayElements!==0){J.Error("texture arrays not currently supported"),this.isInvalid=!0;return}if(this.numberOfFaces!==t){J.Error("number of faces expected"+t+", but found "+this.numberOfFaces),this.isInvalid=!0;return}this.loadType=n.COMPRESSED_2D}uploadLevels(e,t){switch(this.loadType){case n.COMPRESSED_2D:this._upload2DCompressedLevels(e,t);break;case n.TEX_2D:case n.COMPRESSED_3D:case n.TEX_3D:}}_upload2DCompressedLevels(e,t){let i=n.HEADER_LEN+this.bytesOfKeyValueData,r=this.pixelWidth,s=this.pixelHeight,a=t?this.numberOfMipmapLevels:1;for(let o=0;o=12){let t=new Uint8Array(e.buffer,e.byteOffset,12);if(t[0]===171&&t[1]===75&&t[2]===84&&t[3]===88&&t[4]===32&&t[5]===49&&t[6]===49&&t[7]===187&&t[8]===13&&t[9]===10&&t[10]===26&&t[11]===10)return!0}return!1}};oo.HEADER_LEN=64;oo.COMPRESSED_2D=0;oo.COMPRESSED_3D=1;oo.TEX_2D=2;oo.TEX_3D=3});var aC,V_,HB=C(()=>{aC=class{constructor(e){this._pendingActions=new Array,this._workerInfos=e.map(t=>({workerPromise:Promise.resolve(t),idle:!0}))}dispose(){for(let e of this._workerInfos)e.workerPromise.then(t=>{t.terminate()});this._workerInfos.length=0,this._pendingActions.length=0}push(e){this._executeOnIdleWorker(e)||this._pendingActions.push(e)}_executeOnIdleWorker(e){for(let t of this._workerInfos)if(t.idle)return this._execute(t,e),!0;return!1}_execute(e,t){e.idle=!1,e.workerPromise.then(i=>{t(i,()=>{let r=this._pendingActions.shift();r?this._execute(e,r):e.idle=!0})})}},V_=class n extends aC{constructor(e,t,i=n.DefaultOptions){super([]),this._maxWorkers=e,this._createWorkerAsync=t,this._options=i}push(e){if(!this._executeOnIdleWorker(e))if(this._workerInfos.length{t(i,()=>{r(),e.idle&&(e.timeoutId=setTimeout(()=>{e.workerPromise.then(a=>{a.terminate()});let s=this._workerInfos.indexOf(e);s!==-1&&this._workerInfos.splice(s,1)},this._options.idleTimeElapsedBeforeRelease))})})}};V_.DefaultOptions={idleTimeElapsedBeforeRelease:1e3}});var zB,qu,XB,YB=C(()=>{(function(n){n[n.ETC1S=0]="ETC1S",n[n.UASTC4x4=1]="UASTC4x4"})(zB||(zB={}));(function(n){n[n.ASTC_4X4_RGBA=0]="ASTC_4X4_RGBA",n[n.ASTC_4x4_RGBA=0]="ASTC_4x4_RGBA",n[n.BC7_RGBA=1]="BC7_RGBA",n[n.BC3_RGBA=2]="BC3_RGBA",n[n.BC1_RGB=3]="BC1_RGB",n[n.PVRTC1_4_RGBA=4]="PVRTC1_4_RGBA",n[n.PVRTC1_4_RGB=5]="PVRTC1_4_RGB",n[n.ETC2_RGBA=6]="ETC2_RGBA",n[n.ETC1_RGB=7]="ETC1_RGB",n[n.RGBA32=8]="RGBA32",n[n.R8=9]="R8",n[n.RG8=10]="RG8"})(qu||(qu={}));(function(n){n[n.COMPRESSED_RGBA_BPTC_UNORM_EXT=36492]="COMPRESSED_RGBA_BPTC_UNORM_EXT",n[n.COMPRESSED_RGBA_ASTC_4X4_KHR=37808]="COMPRESSED_RGBA_ASTC_4X4_KHR",n[n.COMPRESSED_RGB_S3TC_DXT1_EXT=33776]="COMPRESSED_RGB_S3TC_DXT1_EXT",n[n.COMPRESSED_RGBA_S3TC_DXT5_EXT=33779]="COMPRESSED_RGBA_S3TC_DXT5_EXT",n[n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG=35842]="COMPRESSED_RGBA_PVRTC_4BPPV1_IMG",n[n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG=35840]="COMPRESSED_RGB_PVRTC_4BPPV1_IMG",n[n.COMPRESSED_RGBA8_ETC2_EAC=37496]="COMPRESSED_RGBA8_ETC2_EAC",n[n.COMPRESSED_RGB8_ETC2=37492]="COMPRESSED_RGB8_ETC2",n[n.COMPRESSED_RGB_ETC1_WEBGL=36196]="COMPRESSED_RGB_ETC1_WEBGL",n[n.RGBA8Format=32856]="RGBA8Format",n[n.R8Format=33321]="R8Format",n[n.RG8Format=33323]="RG8Format"})(XB||(XB={}))});function G_(n,e){let t=(e==null?void 0:e.jsDecoderModule)||KTX2DECODER;n&&(n.wasmBaseUrl&&(t.Transcoder.WasmBaseUrl=n.wasmBaseUrl),n.wasmUASTCToASTC&&(t.LiteTranscoder_UASTC_ASTC.WasmModuleURL=n.wasmUASTCToASTC),n.wasmUASTCToBC7&&(t.LiteTranscoder_UASTC_BC7.WasmModuleURL=n.wasmUASTCToBC7),n.wasmUASTCToRGBA_UNORM&&(t.LiteTranscoder_UASTC_RGBA_UNORM.WasmModuleURL=n.wasmUASTCToRGBA_UNORM),n.wasmUASTCToRGBA_SRGB&&(t.LiteTranscoder_UASTC_RGBA_SRGB.WasmModuleURL=n.wasmUASTCToRGBA_SRGB),n.wasmUASTCToR8_UNORM&&(t.LiteTranscoder_UASTC_R8_UNORM.WasmModuleURL=n.wasmUASTCToR8_UNORM),n.wasmUASTCToRG8_UNORM&&(t.LiteTranscoder_UASTC_RG8_UNORM.WasmModuleURL=n.wasmUASTCToRG8_UNORM),n.jsMSCTranscoder&&(t.MSCTranscoder.JSModuleURL=n.jsMSCTranscoder),n.wasmMSCTranscoder&&(t.MSCTranscoder.WasmModuleURL=n.wasmMSCTranscoder),n.wasmZSTDDecoder&&(t.ZSTDDecoder.WasmModuleURL=n.wasmZSTDDecoder)),e&&(e.wasmUASTCToASTC&&(t.LiteTranscoder_UASTC_ASTC.WasmBinary=e.wasmUASTCToASTC),e.wasmUASTCToBC7&&(t.LiteTranscoder_UASTC_BC7.WasmBinary=e.wasmUASTCToBC7),e.wasmUASTCToRGBA_UNORM&&(t.LiteTranscoder_UASTC_RGBA_UNORM.WasmBinary=e.wasmUASTCToRGBA_UNORM),e.wasmUASTCToRGBA_SRGB&&(t.LiteTranscoder_UASTC_RGBA_SRGB.WasmBinary=e.wasmUASTCToRGBA_SRGB),e.wasmUASTCToR8_UNORM&&(t.LiteTranscoder_UASTC_R8_UNORM.WasmBinary=e.wasmUASTCToR8_UNORM),e.wasmUASTCToRG8_UNORM&&(t.LiteTranscoder_UASTC_RG8_UNORM.WasmBinary=e.wasmUASTCToRG8_UNORM),e.jsMSCTranscoder&&(t.MSCTranscoder.JSModule=e.jsMSCTranscoder),e.wasmMSCTranscoder&&(t.MSCTranscoder.WasmBinary=e.wasmMSCTranscoder),e.wasmZSTDDecoder&&(t.ZSTDDecoder.WasmBinary=e.wasmZSTDDecoder))}function KB(n){typeof n=="undefined"&&typeof KTX2DECODER!="undefined"&&(n=KTX2DECODER);let e;onmessage=t=>{if(t.data)switch(t.data.action){case"init":{let i=t.data.urls;i&&(i.jsDecoderModule&&typeof n=="undefined"&&(importScripts(i.jsDecoderModule),n=KTX2DECODER),G_(i)),t.data.wasmBinaries&&G_(void 0,{...t.data.wasmBinaries,jsDecoderModule:n}),e=new n.KTX2Decoder,postMessage({action:"init"});break}case"setDefaultDecoderOptions":{n.KTX2Decoder.DefaultDecoderOptions=t.data.options;break}case"decode":e.decode(t.data.data,t.data.caps,t.data.options).then(i=>{let r=[];for(let s=0;s{postMessage({action:"decoded",success:!1,msg:i})});break}}}async function jB(n,e,t){return await new Promise((i,r)=>{let s=o=>{n.removeEventListener("error",s),n.removeEventListener("message",a),r(o)},a=o=>{o.data.action==="init"&&(n.removeEventListener("error",s),n.removeEventListener("message",a),i(n))};n.addEventListener("error",s),n.addEventListener("message",a),n.postMessage({action:"init",urls:t,wasmBinaries:e})})}var qB=C(()=>{});var oC,jl,ZB=C(()=>{HB();Ci();YB();qB();oC=class{constructor(){this._isDirty=!0,this._useRGBAIfOnlyBC1BC3AvailableWhenUASTC=!0,this._ktx2DecoderOptions={}}get isDirty(){return this._isDirty}get useRGBAIfASTCBC7NotAvailableWhenUASTC(){return this._useRGBAIfASTCBC7NotAvailableWhenUASTC}set useRGBAIfASTCBC7NotAvailableWhenUASTC(e){this._useRGBAIfASTCBC7NotAvailableWhenUASTC!==e&&(this._useRGBAIfASTCBC7NotAvailableWhenUASTC=e,this._isDirty=!0)}get useRGBAIfOnlyBC1BC3AvailableWhenUASTC(){return this._useRGBAIfOnlyBC1BC3AvailableWhenUASTC}set useRGBAIfOnlyBC1BC3AvailableWhenUASTC(e){this._useRGBAIfOnlyBC1BC3AvailableWhenUASTC!==e&&(this._useRGBAIfOnlyBC1BC3AvailableWhenUASTC=e,this._isDirty=!0)}get forceRGBA(){return this._forceRGBA}set forceRGBA(e){this._forceRGBA!==e&&(this._forceRGBA=e,this._isDirty=!0)}get forceR8(){return this._forceR8}set forceR8(e){this._forceR8!==e&&(this._forceR8=e,this._isDirty=!0)}get forceRG8(){return this._forceRG8}set forceRG8(e){this._forceRG8!==e&&(this._forceRG8=e,this._isDirty=!0)}get bypassTranscoders(){return this._bypassTranscoders}set bypassTranscoders(e){this._bypassTranscoders!==e&&(this._bypassTranscoders=e,this._isDirty=!0)}_getKTX2DecoderOptions(){if(!this._isDirty)return this._ktx2DecoderOptions;this._isDirty=!1;let e={};return this._useRGBAIfASTCBC7NotAvailableWhenUASTC!==void 0&&(e.useRGBAIfASTCBC7NotAvailableWhenUASTC=this._useRGBAIfASTCBC7NotAvailableWhenUASTC),this._forceRGBA!==void 0&&(e.forceRGBA=this._forceRGBA),this._forceR8!==void 0&&(e.forceR8=this._forceR8),this._forceRG8!==void 0&&(e.forceRG8=this._forceRG8),this._bypassTranscoders!==void 0&&(e.bypassTranscoders=this._bypassTranscoders),this.useRGBAIfOnlyBC1BC3AvailableWhenUASTC&&(e.transcodeFormatDecisionTree={UASTC:{transcodeFormat:[qu.BC1_RGB,qu.BC3_RGBA],yes:{transcodeFormat:qu.RGBA32,engineFormat:32856,roundToMultiple4:!1}}}),this._ktx2DecoderOptions=e,e}},jl=class n{static GetDefaultNumWorkers(){return typeof navigator!="object"||!navigator.hardwareConcurrency?1:Math.min(Math.floor(navigator.hardwareConcurrency*.5),4)}static _Initialize(e){if(n._WorkerPoolPromise||n._DecoderModulePromise)return;let t={wasmBaseUrl:de.ScriptBaseUrl,jsDecoderModule:de.GetBabylonScriptURL(this.URLConfig.jsDecoderModule,!0),wasmUASTCToASTC:de.GetBabylonScriptURL(this.URLConfig.wasmUASTCToASTC,!0),wasmUASTCToBC7:de.GetBabylonScriptURL(this.URLConfig.wasmUASTCToBC7,!0),wasmUASTCToRGBA_UNORM:de.GetBabylonScriptURL(this.URLConfig.wasmUASTCToRGBA_UNORM,!0),wasmUASTCToRGBA_SRGB:de.GetBabylonScriptURL(this.URLConfig.wasmUASTCToRGBA_SRGB,!0),wasmUASTCToR8_UNORM:de.GetBabylonScriptURL(this.URLConfig.wasmUASTCToR8_UNORM,!0),wasmUASTCToRG8_UNORM:de.GetBabylonScriptURL(this.URLConfig.wasmUASTCToRG8_UNORM,!0),jsMSCTranscoder:de.GetBabylonScriptURL(this.URLConfig.jsMSCTranscoder,!0),wasmMSCTranscoder:de.GetBabylonScriptURL(this.URLConfig.wasmMSCTranscoder,!0),wasmZSTDDecoder:de.GetBabylonScriptURL(this.URLConfig.wasmZSTDDecoder,!0)};e&&typeof Worker=="function"&&typeof URL!="undefined"?n._WorkerPoolPromise=new Promise(i=>{let r=`${G_}(${KB})()`,s=URL.createObjectURL(new Blob([r],{type:"application/javascript"}));i(new V_(e,async()=>await jB(new Worker(s),void 0,t)))}):typeof n._KTX2DecoderModule=="undefined"?n._DecoderModulePromise=de.LoadBabylonScriptAsync(t.jsDecoderModule).then(()=>(n._KTX2DecoderModule=KTX2DECODER,n._KTX2DecoderModule.MSCTranscoder.UseFromWorkerThread=!1,n._KTX2DecoderModule.WASMMemoryManager.LoadBinariesFromCurrentThread=!0,G_(t,n._KTX2DecoderModule),new n._KTX2DecoderModule.KTX2Decoder)):(n._KTX2DecoderModule.MSCTranscoder.UseFromWorkerThread=!1,n._KTX2DecoderModule.WASMMemoryManager.LoadBinariesFromCurrentThread=!0,n._DecoderModulePromise=Promise.resolve(new n._KTX2DecoderModule.KTX2Decoder))}constructor(e,t=n.DefaultNumWorkers){var r,s;this._engine=e;let i=typeof t=="object"&&t.workerPool||n.WorkerPool;if(i)n._WorkerPoolPromise=Promise.resolve(i);else{typeof t=="object"?n._KTX2DecoderModule=(r=t==null?void 0:t.binariesAndModulesContainer)==null?void 0:r.jsDecoderModule:typeof KTX2DECODER!="undefined"&&(n._KTX2DecoderModule=KTX2DECODER);let a=typeof t=="number"?t:(s=t.numWorkers)!=null?s:n.DefaultNumWorkers;n._Initialize(a)}}async _uploadAsync(e,t,i){let r=this._engine.getCaps(),s={astc:!!r.astc,bptc:!!r.bptc,s3tc:!!r.s3tc,pvrtc:!!r.pvrtc,etc2:!!r.etc2,etc1:!!r.etc1};if(n._WorkerPoolPromise){let a=await n._WorkerPoolPromise;return await new Promise((o,l)=>{a.push((c,f)=>{let h=m=>{c.removeEventListener("error",h),c.removeEventListener("message",d),l(m),f()},d=m=>{if(m.data.action==="decoded"){if(c.removeEventListener("error",h),c.removeEventListener("message",d),!m.data.success)l({message:m.data.msg});else try{this._createTexture(m.data.decodedData,t,i),o()}catch(_){l({message:_})}f()}};c.addEventListener("error",h),c.addEventListener("message",d),c.postMessage({action:"setDefaultDecoderOptions",options:n.DefaultDecoderOptions._getKTX2DecoderOptions()});let u=new Uint8Array(e.byteLength);u.set(new Uint8Array(e.buffer,e.byteOffset,e.byteLength)),c.postMessage({action:"decode",data:u,caps:s,options:i},[u.buffer])})})}else if(n._DecoderModulePromise){let a=await n._DecoderModulePromise;return n.DefaultDecoderOptions.isDirty&&(n._KTX2DecoderModule.KTX2Decoder.DefaultDecoderOptions=n.DefaultDecoderOptions._getKTX2DecoderOptions()),await new Promise((o,l)=>{a.decode(e,r).then(c=>{this._createTexture(c,t),o()}).catch(c=>{l({message:c})})})}throw new Error("KTX2 decoder module is not available")}_createTexture(e,t,i){this._engine._bindTextureDirectly(3553,t),i&&(i.transcodedFormat=e.transcodedFormat,i.isInGammaSpace=e.isInGammaSpace,i.hasAlpha=e.hasAlpha,i.transcoderName=e.transcoderName);let s=!0;switch(e.transcodedFormat){case 32856:t.type=0,t.format=5;break;case 33321:t.type=0,t.format=6;break;case 33323:t.type=0,t.format=7;break;default:t.format=e.transcodedFormat,s=!1;break}if(t._gammaSpace=e.isInGammaSpace,t.generateMipMaps=e.mipmaps.length>1,t.width=e.mipmaps[0].width,t.height=e.mipmaps[0].height,e.errors)throw new Error("KTX2 container - could not transcode the data. "+e.errors);for(let a=0;a=12){let t=new Uint8Array(e.buffer,e.byteOffset,12);if(t[0]===171&&t[1]===75&&t[2]===84&&t[3]===88&&t[4]===32&&t[5]===50&&t[6]===48&&t[7]===187&&t[8]===13&&t[9]===10&&t[10]===26&&t[11]===10)return!0}return!1}};jl.URLConfig={jsDecoderModule:"https://cdn.babylonjs.com/babylon.ktx2Decoder.js",wasmUASTCToASTC:null,wasmUASTCToBC7:null,wasmUASTCToRGBA_UNORM:null,wasmUASTCToRGBA_SRGB:null,wasmUASTCToR8_UNORM:null,wasmUASTCToRG8_UNORM:null,jsMSCTranscoder:null,wasmMSCTranscoder:null,wasmZSTDDecoder:null};jl.DefaultNumWorkers=jl.GetDefaultNumWorkers();jl.DefaultDecoderOptions=new oC});var cC={};$e(cC,{_KTXTextureLoader:()=>lC});function cre(n){switch(n){case 35916:return 33776;case 35918:return 33778;case 35919:return 33779;case 37493:return 37492;case 37497:return 37496;case 37495:return 37494;case 37840:return 37808;case 37841:return 37809;case 37842:return 37810;case 37843:return 37811;case 37844:return 37812;case 37845:return 37813;case 37846:return 37814;case 37847:return 37815;case 37848:return 37816;case 37849:return 37817;case 37850:return 37818;case 37851:return 37819;case 37852:return 37820;case 37853:return 37821;case 36493:return 36492}return null}var lC,fC=C(()=>{WB();ZB();Pt();lC=class{constructor(){this.supportCascades=!1}loadCubeData(e,t,i,r){if(Array.isArray(e))return;t._invertVScale=!t.invertY;let s=t.getEngine(),a=new oo(e,6),o=a.numberOfMipmapLevels>1&&t.generateMipMaps;s._unpackFlipY(!0),a.uploadLevels(t,t.generateMipMaps),t.width=a.pixelWidth,t.height=a.pixelHeight,s._setCubeMapTextureParams(t,o,a.numberOfMipmapLevels-1),t.isReady=!0,t.onLoadedObservable.notifyObservers(t),t.onLoadedObservable.clear(),r&&r()}loadData(e,t,i,r){if(oo.IsValid(e)){t._invertVScale=!t.invertY;let s=new oo(e,1),a=cre(s.glInternalFormat);a?(t.format=a,t._useSRGBBuffer=t.getEngine()._getUseSRGBBuffer(!0,t.generateMipMaps),t._gammaSpace=!0):t.format=s.glInternalFormat,i(s.pixelWidth,s.pixelHeight,t.generateMipMaps,!0,()=>{s.uploadLevels(t,t.generateMipMaps)},s.isInvalid)}else jl.IsValid(e)?new jl(t.getEngine())._uploadAsync(e,t,r).then(()=>{i(t.width,t.height,t.generateMipMaps,!0,()=>{},!1)},a=>{J.Warn(`Failed to load KTX2 texture data: ${a.message}`),i(0,0,!1,!1,()=>{},!0)}):(J.Error("texture missing KTX identifier"),i(0,0,!1,!1,()=>{},!0))}}});function YT(n){let e=0;return{id_length:n[e++],colormap_type:n[e++],image_type:n[e++],colormap_index:n[e++]|n[e++]<<8,colormap_length:n[e++]|n[e++]<<8,colormap_size:n[e++],origin:[n[e++]|n[e++]<<8,n[e++]|n[e++]<<8],width:n[e++]|n[e++]<<8,height:n[e++]|n[e++]<<8,pixel_size:n[e++],flags:n[e]}}function hC(n,e){if(e.length<19){J.Error("Unable to load TGA file - Not enough data to contain header");return}let t=18,i=YT(e);if(i.id_length+t>e.length){J.Error("Unable to load TGA file - Not enough data");return}t+=i.id_length;let r=!1,s=!1,a=!1;switch(i.image_type){case ure:r=!0;case fre:s=!0;break;case mre:r=!0;case hre:break;case pre:r=!0;case dre:a=!0;break}let o,l=i.pixel_size>>3,c=i.width*i.height*l,f;if(s&&(f=e.subarray(t,t+=i.colormap_length*(i.colormap_size>>3))),r){o=new Uint8Array(c);let A,S,E,R=0,I=new Uint8Array(l);for(;t>gre){default:case Sre:h=0,u=1,p=i.width,d=0,m=1,_=i.height;break;case vre:h=0,u=1,p=i.width,d=i.height-1,m=-1,_=-1;break;case Tre:h=i.width-1,u=-1,p=-1,d=0,m=1,_=i.height;break;case Ere:h=i.width-1,u=-1,p=-1,d=i.height-1,m=-1,_=-1;break}let g="_getImageData"+(a?"Grey":"")+i.pixel_size+"bits",v=Cre[g](i,f,o,d,m,_,h,u,p);n.getEngine()._uploadDataToTextureDirectly(n,v)}function Are(n,e,t,i,r,s,a,o,l){let c=t,f=e,h=n.width,d=n.height,u,m=0,_,p,g=new Uint8Array(h*d*4);for(p=i;p!==s;p+=r)for(_=a;_!==l;_+=o,m++)u=c[m],g[(_+h*p)*4+3]=255,g[(_+h*p)*4+2]=f[u*3+0],g[(_+h*p)*4+1]=f[u*3+1],g[(_+h*p)*4+0]=f[u*3+2];return g}function xre(n,e,t,i,r,s,a,o,l){let c=t,f=n.width,h=n.height,d,u=0,m,_,p=new Uint8Array(f*h*4);for(_=i;_!==s;_+=r)for(m=a;m!==l;m+=o,u+=2){d=c[u+0]+(c[u+1]<<8);let g=((d&31744)>>10)*255/31|0,v=((d&992)>>5)*255/31|0,x=(d&31)*255/31|0;p[(m+f*_)*4+0]=g,p[(m+f*_)*4+1]=v,p[(m+f*_)*4+2]=x,p[(m+f*_)*4+3]=d&32768?0:255}return p}function Rre(n,e,t,i,r,s,a,o,l){let c=t,f=n.width,h=n.height,d=0,u,m,_=new Uint8Array(f*h*4);for(m=i;m!==s;m+=r)for(u=a;u!==l;u+=o,d+=3)_[(u+f*m)*4+3]=255,_[(u+f*m)*4+2]=c[d+0],_[(u+f*m)*4+1]=c[d+1],_[(u+f*m)*4+0]=c[d+2];return _}function bre(n,e,t,i,r,s,a,o,l){let c=t,f=n.width,h=n.height,d=0,u,m,_=new Uint8Array(f*h*4);for(m=i;m!==s;m+=r)for(u=a;u!==l;u+=o,d+=4)_[(u+f*m)*4+2]=c[d+0],_[(u+f*m)*4+1]=c[d+1],_[(u+f*m)*4+0]=c[d+2],_[(u+f*m)*4+3]=c[d+3];return _}function Ire(n,e,t,i,r,s,a,o,l){let c=t,f=n.width,h=n.height,d,u=0,m,_,p=new Uint8Array(f*h*4);for(_=i;_!==s;_+=r)for(m=a;m!==l;m+=o,u++)d=c[u],p[(m+f*_)*4+0]=d,p[(m+f*_)*4+1]=d,p[(m+f*_)*4+2]=d,p[(m+f*_)*4+3]=255;return p}function Mre(n,e,t,i,r,s,a,o,l){let c=t,f=n.width,h=n.height,d=0,u,m,_=new Uint8Array(f*h*4);for(m=i;m!==s;m+=r)for(u=a;u!==l;u+=o,d+=2)_[(u+f*m)*4+0]=c[d+0],_[(u+f*m)*4+1]=c[d+0],_[(u+f*m)*4+2]=c[d+0],_[(u+f*m)*4+3]=c[d+1];return _}var fre,hre,dre,ure,mre,pre,_re,gre,vre,Ere,Sre,Tre,Cre,QB=C(()=>{Pt();fre=1,hre=2,dre=3,ure=9,mre=10,pre=11,_re=48,gre=4,vre=0,Ere=1,Sre=2,Tre=3;Cre={GetTGAHeader:YT,UploadContent:hC,_getImageData8bits:Are,_getImageData16bits:xre,_getImageData24bits:Rre,_getImageData32bits:bre,_getImageDataGrey8bits:Ire,_getImageDataGrey16bits:Mre}});var $B={};$e($B,{_TGATextureLoader:()=>dC});var dC,JB=C(()=>{QB();dC=class{constructor(){this.supportCascades=!1}loadCubeData(){throw".env not supported in Cube."}loadData(e,t,i){let r=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),s=YT(r);i(s.width,s.height,t.generateMipMaps,!1,()=>{hC(t,r)})}}});var k_=C(()=>{});function Pre(){let n=new ArrayBuffer(4),e=new Float32Array(n),t=new Uint32Array(n),i=new Uint32Array(512),r=new Uint32Array(512);for(let l=0;l<256;++l){let c=l-127;c<-27?(i[l]=0,i[l|256]=32768,r[l]=24,r[l|256]=24):c<-14?(i[l]=1024>>-c-14,i[l|256]=1024>>-c-14|32768,r[l]=-c-1,r[l|256]=-c-1):c<=15?(i[l]=c+15<<10,i[l|256]=c+15<<10|32768,r[l]=13,r[l|256]=13):c<128?(i[l]=31744,i[l|256]=64512,r[l]=24,r[l|256]=24):(i[l]=31744,i[l|256]=64512,r[l]=13,r[l|256]=13)}let s=new Uint32Array(2048),a=new Uint32Array(64),o=new Uint32Array(64);for(let l=1;l<1024;++l){let c=l<<13,f=0;for(;(c&8388608)===0;)c<<=1,f-=8388608;c&=-8388609,f+=947912704,s[l]=c|f}for(let l=1024;l<2048;++l)s[l]=939524096+(l-1024<<13);for(let l=1;l<31;++l)a[l]=l<<23;a[31]=1199570944,a[32]=2147483648;for(let l=33;l<63;++l)a[l]=2147483648+(l-32<<23);a[63]=3347054592;for(let l=1;l<64;++l)l!==32&&(o[l]=1024);return{floatView:e,uint32View:t,baseTable:i,shiftTable:r,mantissaTable:s,exponentTable:a,offsetTable:o}}function qT(n,e){let t=new Uint8Array(n),i=0;for(;t[e.value+i]!=0;)i+=1;let r=new TextDecoder().decode(t.slice(e.value,e.value+i));return e.value=e.value+i+1,r}function lo(n,e){let t=n.getInt32(e.value,!0);return e.value+=4,t}function Hs(n,e){let t=n.getUint32(e.value,!0);return e.value+=4,t}function W_(n,e){let t=n.getUint8(e.value);return e.value+=1,t}function Zu(n,e){let t=n.getUint16(e.value,!0);return e.value+=2,t}function mC(n,e){let t=n[e.value];return e.value+=1,t}function iU(n,e){let t;return"getBigInt64"in DataView.prototype?t=Number(n.getBigInt64(e.value,!0)):t=n.getUint32(e.value+4,!0)+Number(n.getUint32(e.value,!0)<<32),e.value+=8,t}function _n(n,e){let t=n.getFloat32(e.value,!0);return e.value+=4,t}function rU(n,e){return Dre(Zu(n,e))}function Dre(n){let e=(n&31744)>>10,t=n&1023;return(n>>15?-1:1)*(e?e===31?t?NaN:1/0:Math.pow(2,e-15)*(1+t/1024):6103515625e-14*(t/1024))}function Lre(n){if(Math.abs(n)>65504)throw new Error("Value out of range.Consider using float instead of half-float.");n=wt(n,-65504,65504),KT.floatView[0]=n;let e=KT.uint32View[0],t=e>>23&511;return KT.baseTable[t]+((e&8388607)>>KT.shiftTable[t])}function nU(n,e){return Lre(_n(n,e))}function Ore(n,e,t){let i=new TextDecoder().decode(new Uint8Array(n).slice(e.value,e.value+t));return e.value=e.value+t,i}function Nre(n,e){let t=lo(n,e),i=Hs(n,e);return[t,i]}function wre(n,e){let t=Hs(n,e),i=Hs(n,e);return[t,i]}function Fre(n,e){let t=_n(n,e),i=_n(n,e);return[t,i]}function Bre(n,e){let t=_n(n,e),i=_n(n,e),r=_n(n,e);return[t,i,r]}function Ure(n,e,t){let i=e.value,r=[];for(;e.values||(e[r++]=n[t++],r>s));)e[r++]=n[i++]}var $o,uC,KT,H_=C(()=>{xn();k_();(function(n){n[n.NO_COMPRESSION=0]="NO_COMPRESSION",n[n.RLE_COMPRESSION=1]="RLE_COMPRESSION",n[n.ZIPS_COMPRESSION=2]="ZIPS_COMPRESSION",n[n.ZIP_COMPRESSION=3]="ZIP_COMPRESSION",n[n.PIZ_COMPRESSION=4]="PIZ_COMPRESSION",n[n.PXR24_COMPRESSION=5]="PXR24_COMPRESSION"})($o||($o={}));(function(n){n[n.INCREASING_Y=0]="INCREASING_Y",n[n.DECREASING_Y=1]="DECREASING_Y"})(uC||(uC={}));KT=Pre()});function gC(n,e){if(n.getUint32(0,!0)!=Hre)throw new Error("Incorrect OpenEXR format");let t=n.getUint8(4),i=n.getUint8(5),r={singleTile:!!(i&2),longName:!!(i&4),deepFormat:!!(i&8),multiPart:!!(i&16)};e.value=8;let s={},a=!0;for(;a;){let o=qT(n.buffer,e);if(!o)a=!1;else{let l=qT(n.buffer,e),c=Hs(n,e),f=sU(n,e,l,c);f===void 0?J.Warn(`Unknown header attribute type ${l}'.`):s[o]=f}}if((i&-5)!=0)throw new Error("Unsupported file format");return{version:t,spec:r,...s}}var Hre,aU=C(()=>{Pt();H_();Hre=20000630});function mU(n,e){let t=0;for(let r=0;r<65536;++r)(r==0||n[r>>3]&1<<(r&7))&&(e[t++]=r);let i=t-1;for(;t<65536;)e[t++]=0;return i}function Kre(n){for(let e=0;e<16384;e++)n[e]={},n[e].len=0,n[e].lit=0,n[e].p=null}function fU(n,e,t,i,r){for(;t>t&(1<>i;if(c=new Uint8Array([c])[0],o.value+c>l)return null;let f=a[o.value-1];for(;c-- >0;)a[o.value++]=f}else if(o.value0;--t){let i=e+z_[t]>>1;z_[t]=e,e=i}for(let t=0;t<65537;++t){let i=n[t];i>0&&(n[t]=i|z_[i]++<<6)}}function qre(n,e,t,i,r,s){let a=e,o=0,l=0;for(;i<=r;i++){if(a.value-e.value>t)return;let c=fU(6,o,l,n,a),f=c.l;if(o=c.c,l=c.lc,s[i]=f,f==63){if(a.value-e.value>t)throw new Error("Error in HufUnpackEncTable");c=fU(8,o,l,n,a);let h=c.l+6;if(o=c.c,l=c.lc,i+h>r+1)throw new Error("Error in HufUnpackEncTable");for(;h--;)s[i++]=0;i--}else if(f>=59){let h=f-59+2;if(i+h>r+1)throw new Error("Error in HufUnpackEncTable");for(;h--;)s[i++]=0;i--}}jre(s)}function pU(n){return n&63}function _U(n){return n>>6}function Zre(n,e,t,i){for(;e<=t;e++){let r=_U(n[e]),s=pU(n[e]);if(r>>s)throw new Error("Invalid table entry");if(s>14){let a=i[r>>s-14];if(a.len)throw new Error("Invalid table entry");if(a.lit++,a.p){let o=a.p;a.p=new Array(a.lit);for(let l=0;l0;o--){let l=i[(r<<14-s)+a];if(l.len||l.p)throw new Error("Invalid table entry");l.len=s,l.lit=e,a++}}}return!0}function Qre(n,e,t,i,r,s,a,o,l){let c=0,f=0,h=a,d=Math.trunc(i.value+(r+7)/8);for(;i.value=14;){let _=c>>f-14&16383,p=e[_];if(p.len){f-=p.len;let g=vC(p.lit,s,c,f,t,i,o,l,h);g&&(c=g.c,f=g.lc)}else{if(!p.p)throw new Error("hufDecode issues");let g;for(g=0;g=v&&_U(n[p.p[g]])==(c>>f-v&(1<>=u,f-=u;f>0;){let m=e[c<<14-f&16383];if(m.len){f-=m.len;let _=vC(m.lit,s,c,f,t,i,o,l,h);_&&(c=_.c,f=_.lc)}else throw new Error("HufDecode issues")}return!0}function gU(n,e,t,i,r,s){let a={value:0},o=t.value,l=Hs(e,t),c=Hs(e,t);t.value+=4;let f=Hs(e,t);if(t.value+=4,l<0||l>=65537||c<0||c>=65537)throw new Error("Wrong HUF_ENCSIZE");let h=new Array(65537),d=new Array(16384);Kre(d);let u=i-(t.value-o);if(qre(n,t,u,l,c,h),f>8*(i-(t.value-o)))throw new Error("Wrong hufUncompress");Zre(h,l,c,d),Qre(h,d,n,t,f,c,s,r,a)}function SC(n){return n&65535}function hU(n){let e=SC(n);return e>32767?e-65536:e}function Qu(n,e){let t=hU(n),r=hU(e),s=t+(r&1)+(r>>1),a=s,o=s-r;return{a,b:o}}function $u(n,e){let t=SC(n),i=SC(e),r=t-(i>>1)&cU;return{a:i+r-Yre&cU,b:r}}function vU(n,e,t,i,r,s,a){let o=a<16384,l=t>r?r:t,c=1,f,h;for(;c<=l;)c<<=1;for(c>>=1,f=c,c>>=1;c>=1;){h=0;let d=h+s*(r-f),u=s*c,m=s*f,_=i*c,p=i*f,g,v,x,A;for(;h<=d;h+=m){let S=h,E=h+i*(t-f);for(;S<=E;S+=p){let R=S+_,I=S+u,y=I+_;if(o){let M=Qu(n[S+e],n[I+e]);g=M.a,x=M.b,M=Qu(n[R+e],n[y+e]),v=M.a,A=M.b,M=Qu(g,v),n[S+e]=M.a,n[R+e]=M.b,M=Qu(x,A),n[I+e]=M.a,n[y+e]=M.b}else{let M=$u(n[S+e],n[I+e]);g=M.a,x=M.b,M=$u(n[R+e],n[y+e]),v=M.a,A=M.b,M=$u(g,v),n[S+e]=M.a,n[R+e]=M.b,M=$u(x,A),n[I+e]=M.a,n[y+e]=M.b}}if(t&c){let R=S+u,I;o?I=Qu(n[S+e],n[R+e]):I=$u(n[S+e],n[R+e]),g=I.a,n[R+e]=I.b,n[S+e]=g}}if(r&c){let S=h,E=h+i*(t-f);for(;S<=E;S+=p){let R=S+_,I;o?I=Qu(n[S+e],n[R+e]):I=$u(n[S+e],n[R+e]),g=I.a,n[R+e]=I.b,n[S+e]=g}}f=c,c>>=1}return h}function EU(n,e,t){for(let i=0;i{H_();k_();uU=16,Yre=1<0;){let s=r.getInt8(i++);if(s<0){let a=-s;e-=a+1;for(let o=0;o{});function TC(n){return new DataView(n.array.buffer,n.offset.value,n.size)}function RU(n){let e=n.viewer.buffer.slice(n.offset.value,n.offset.value+n.size),t=new Uint8Array(TU(e)),i=new Uint8Array(t.length);return pC(t),_C(t,i),new DataView(i.buffer)}function AC(n){let e=n.array.slice(n.offset.value,n.offset.value+n.size),t=fflate.unzlibSync(e),i=new Uint8Array(t.length);return pC(t),_C(t,i),new DataView(i.buffer)}function bU(n){let e=n.array.slice(n.offset.value,n.offset.value+n.size),t=fflate.unzlibSync(e),i=n.lines*n.channels*n.width,r=n.type==1?new Uint16Array(i):new Uint32Array(i),s=0,a=0,o=new Array(4);for(let l=0;l=8192)throw new Error("Wrong PIZ_COMPRESSION BITMAP_SIZE");if(o<=l)for(let m=0;m{SU();AU();H_();k_()});var Ia,Jo,xC=C(()=>{(function(n){n[n.Float=0]="Float",n[n.HalfFloat=1]="HalfFloat"})(Ia||(Ia={}));Jo=class{};Jo.DefaultOutputType=Ia.HalfFloat;Jo.FFLATEUrl="https://unpkg.com/fflate@0.8.2"});async function RC(n,e,t,i){let r={size:0,viewer:e,array:new Uint8Array(e.buffer),offset:t,width:n.dataWindow.xMax-n.dataWindow.xMin+1,height:n.dataWindow.yMax-n.dataWindow.yMin+1,channels:n.channels.length,channelLineOffsets:{},scanOrder:()=>0,bytesPerLine:0,outLineWidth:0,lines:0,scanlineBlockSize:0,inputSize:null,type:0,uncompress:null,getter:()=>0,format:5,outputChannels:0,decodeChannels:{},blockCount:null,byteArray:null,linearSpace:!1,textureType:0};switch(n.compression){case $o.NO_COMPRESSION:r.lines=1,r.uncompress=TC;break;case $o.RLE_COMPRESSION:r.lines=1,r.uncompress=RU;break;case $o.ZIPS_COMPRESSION:r.lines=1,r.uncompress=AC,await de.LoadScriptAsync(Jo.FFLATEUrl);break;case $o.ZIP_COMPRESSION:r.lines=16,r.uncompress=AC,await de.LoadScriptAsync(Jo.FFLATEUrl);break;case $o.PIZ_COMPRESSION:r.lines=32,r.uncompress=IU;break;case $o.PXR24_COMPRESSION:r.lines=16,r.uncompress=bU,await de.LoadScriptAsync(Jo.FFLATEUrl);break;default:throw new Error($o[n.compression]+" is unsupported")}r.scanlineBlockSize=r.lines;let s={};for(let c of n.channels)switch(c.name){case"R":case"G":case"B":case"A":s[c.name]=!0,r.type=c.pixelType;break;case"Y":s[c.name]=!0,r.type=c.pixelType;break;default:break}let a=!1;if(s.R&&s.G&&s.B&&s.A)r.outputChannels=4,r.decodeChannels={R:0,G:1,B:2,A:3};else if(s.R&&s.G&&s.B)a=!0,r.outputChannels=4,r.decodeChannels={R:0,G:1,B:2,A:3};else if(s.R&&s.G)r.outputChannels=2,r.decodeChannels={R:0,G:1};else if(s.R)r.outputChannels=1,r.decodeChannels={R:0};else if(s.Y)r.outputChannels=1,r.decodeChannels={Y:0};else throw new Error("EXRLoader.parse: file contains unsupported data channels.");if(r.type===1)switch(i){case Ia.Float:r.getter=rU,r.inputSize=2;break;case Ia.HalfFloat:r.getter=Zu,r.inputSize=2;break}else if(r.type===2)switch(i){case Ia.Float:r.getter=_n,r.inputSize=4;break;case Ia.HalfFloat:r.getter=nU,r.inputSize=4}else throw new Error("Unsupported pixelType "+r.type+" for "+n.compression);r.blockCount=r.height/r.scanlineBlockSize;for(let c=0;cc:r.scanOrder=c=>r.height-1-c,r.outputChannels==4?(r.format=5,r.linearSpace=!0):(r.format=6,r.linearSpace=!1),r}function bC(n,e,t,i){let r={value:0};for(let s=0;sn.height?n.height-a:n.scanlineBlockSize;let l=n.size=n.height)continue;let d=c*n.bytesPerLine,u=(n.height-1-h)*n.outLineWidth;for(let m=0;m{H_();MU();k_();Ci();xC()});var yU={};$e(yU,{ReadExrDataAsync:()=>$re,_ExrTextureLoader:()=>IC});async function $re(n){let e=new DataView(n),t={value:0},i=gC(e,t);try{let r=await RC(i,e,t,Ia.Float);return bC(r,i,e,t),r.byteArray?{width:i.dataWindow.xMax-i.dataWindow.xMin+1,height:i.dataWindow.yMax-i.dataWindow.yMin+1,data:new Float32Array(r.byteArray)}:(J.Error("Failed to decode EXR data: No byte array available."),{width:0,height:0,data:null})}catch(r){J.Error("Failed to load EXR data: ",r)}return{width:0,height:0,data:null}}var IC,PU=C(()=>{aU();CU();xC();Pt();IC=class{constructor(){this.supportCascades=!1}loadCubeData(e,t,i,r,s){throw".exr not supported in Cube."}loadData(e,t,i){let r=new DataView(e.buffer),s={value:0},a=gC(r,s);RC(a,r,s,Jo.DefaultOutputType).then(o=>{bC(o,a,r,s);let l=a.dataWindow.xMax-a.dataWindow.xMin+1,c=a.dataWindow.yMax-a.dataWindow.yMin+1;i(l,c,t.generateMipMaps,!1,()=>{let f=t.getEngine();t.format=a.format,t.type=o.textureType,t.invertY=!1,t._gammaSpace=!a.linearSpace,o.byteArray&&f._uploadDataToTextureDirectly(t,o.byteArray,0,0,void 0,!0)})}).catch(o=>{J.Error("Failed to load EXR texture: ",o)})}}});function ql(n,e){Jre(n)&&J.Warn(`Extension with the name '${n}' already exists`),QT.set(n,e)}function Jre(n){return QT.delete(n)}function $T(n,e){(e==="image/ktx"||e==="image/ktx2")&&(n=".ktx"),QT.has(n)||(n.endsWith(".ies")&&ql(".ies",async()=>await Promise.resolve().then(()=>(y2(),C2)).then(i=>new i._IESTextureLoader)),n.endsWith(".dds")&&ql(".dds",async()=>await Promise.resolve().then(()=>(D2(),P2)).then(i=>new i._DDSTextureLoader)),n.endsWith(".basis")&&ql(".basis",async()=>await Promise.resolve().then(()=>(B2(),F2)).then(i=>new i._BasisTextureLoader)),n.endsWith(".env")&&ql(".env",async()=>await Promise.resolve().then(()=>(NB(),OB)).then(i=>new i._ENVTextureLoader)),n.endsWith(".hdr")&&ql(".hdr",async()=>await Promise.resolve().then(()=>(kB(),GB)).then(i=>new i._HDRTextureLoader)),(n.endsWith(".ktx")||n.endsWith(".ktx2"))&&(ql(".ktx",async()=>await Promise.resolve().then(()=>(fC(),cC)).then(i=>new i._KTXTextureLoader)),ql(".ktx2",async()=>await Promise.resolve().then(()=>(fC(),cC)).then(i=>new i._KTXTextureLoader))),n.endsWith(".tga")&&ql(".tga",async()=>await Promise.resolve().then(()=>(JB(),$B)).then(i=>new i._TGATextureLoader)),n.endsWith(".exr")&&ql(".exr",async()=>await Promise.resolve().then(()=>(PU(),yU)).then(i=>new i._ExrTextureLoader)));let t=QT.get(n);return t?Promise.resolve(t(e)):null}var QT,MC=C(()=>{Pt();QT=new Map});function DU(n){let e=n.split("?")[0],t=e.lastIndexOf(".");return t>-1?e.substring(t).toLowerCase():""}var LU=C(()=>{});var OU=C(()=>{Ws();Pt();Bl();E_();Lr();MC();LU();Re.prototype._partialLoadFile=function(n,e,t,i,r=null){let s=o=>{t[e]=o,t._internalCount++,t._internalCount===6&&i(t)},a=(o,l)=>{r&&o&&r(o.status+" "+o.statusText,l)};this._loadFile(n,s,void 0,void 0,!0,a)};Re.prototype._cascadeLoadFiles=function(n,e,t,i=null){let r=[];r._internalCount=0;for(let s=0;s<6;s++)this._partialLoadFile(t[s],s,r,e,i)};Re.prototype._cascadeLoadImgs=function(n,e,t,i,r=null,s){let a=[];a._internalCount=0;for(let o=0;o<6;o++)this._partialLoadImg(i[o],o,a,n,e,t,r,s)};Re.prototype._partialLoadImg=function(n,e,t,i,r,s,a=null,o){let l=ef();Xu(n,h=>{t[e]=h,t._internalCount++,i&&i.removePendingData(l),t._internalCount===6&&s&&s(r,t)},(h,d)=>{i&&i.removePendingData(l),a&&a(h,d)},i?i.offlineProvider:null,o),i&&i.addPendingData(l)};Re.prototype.createCubeTextureBase=function(n,e,t,i,r=null,s=null,a,o=null,l=!1,c=0,f=0,h=null,d=null,u=null,m=!1,_=null){let p=h||new Fi(this,7);p.isCube=!0,p.url=n,p.generateMipMaps=!i,p._lodGenerationScale=c,p._lodGenerationOffset=f,p._useSRGBBuffer=!!m&&this._caps.supportSRGBBuffers&&(this.version>1||this.isWebGPU||!!i),p!==h&&(p.label=n.substring(0,60)),this._doNotHandleContextLost||(p._extension=o,p._files=t,p._buffer=_);let g=n;this._transformTextureUrl&&!h&&(n=this._transformTextureUrl(n));let v=o!=null?o:DU(n),x=$T(v),A=(E,R)=>{p.dispose(),s?s(E,R):E&&J.Warn(E)},S=(E,R)=>{n===g?E&&A(E.status+" "+E.statusText,R):(J.Warn(`Failed to load ${n}, falling back to the ${g}`),this.createCubeTextureBase(g,e,t,!!i,r,A,a,o,l,c,f,p,d,u,m,_))};if(x)x.then(E=>{let R=I=>{d&&d(p,I),E.loadCubeData(I,p,l,r,(y,M)=>{A(y,M)})};_?R(_):t&&t.length===6?E.supportCascades?this._cascadeLoadFiles(e,I=>R(I.map(y=>new Uint8Array(y))),t,A):A("Textures type does not support cascades."):this._loadFile(n,I=>R(new Uint8Array(I)),void 0,e?e.offlineProvider||null:void 0,!0,S)});else{if(!t||t.length===0)throw new Error("Cannot load cubemap because files were not defined, or the correct loader was not found.");this._cascadeLoadImgs(e,p,(E,R)=>{u&&u(E,R)},t,A)}return this._internalTexturesCache.push(p),p}});var ZU={};$e(ZU,{DDSTools:()=>io});function JT(n){return n.charCodeAt(0)+(n.charCodeAt(1)<<8)+(n.charCodeAt(2)<<16)+(n.charCodeAt(3)<<24)}function tne(n){return String.fromCharCode(n&255,n>>8&255,n>>16&255,n>>24&255)}var ene,NU,wU,FU,BU,UU,VU,GU,kU,CC,WU,HU,zU,XU,ine,yC,rne,nne,YU,KU,PC,jU,DC,qU,sne,ane,one,lne,cne,fne,hne,io,wM=C(()=>{xn();Pt();cM();PM();OU();ene=542327876,NU=131072,wU=512,FU=4,BU=64,UU=131072;VU=JT("DXT1"),GU=JT("DXT3"),kU=JT("DXT5"),CC=JT("DX10"),WU=113,HU=116,zU=2,XU=10,ine=88,yC=31,rne=0,nne=1,YU=2,KU=3,PC=4,jU=7,DC=20,qU=21,sne=22,ane=23,one=24,lne=25,cne=26,fne=28,hne=32,io=class n{static GetDDSInfo(e){let t=new Int32Array(e.buffer,e.byteOffset,yC),i=new Int32Array(e.buffer,e.byteOffset,yC+4),r=1;t[YU]&NU&&(r=Math.max(1,t[jU]));let s=t[qU],a=s===CC?i[hne]:0,o=0;switch(s){case WU:o=2;break;case HU:o=1;break;case CC:if(a===XU){o=2;break}if(a===zU){o=1;break}}return{width:t[PC],height:t[KU],mipmapCount:r,isFourCC:(t[DC]&FU)===FU,isRGB:(t[DC]&BU)===BU,isLuminance:(t[DC]&UU)===UU,isCube:(t[fne]&wU)===wU,isCompressed:s===VU||s===GU||s===kU,dxgiFormat:a,textureType:o}}static _GetHalfFloatAsFloatRGBAArrayBuffer(e,t,i,r,s,a){let o=new Float32Array(r),l=new Uint16Array(s,i),c=0;for(let f=0;f>8)}static _GetRGBArrayBuffer(e,t,i,r,s,a,o,l){let c=new Uint8Array(r),f=new Uint8Array(s,i),h=0;for(let d=0;d0?r.sphericalPolynomial=Ul.ConvertCubeMapToSphericalPolynomial({size:d[PC],right:f[0],left:f[1],up:f[2],down:f[3],front:f[4],back:f[5],format:5,type:1,gammaSpace:!1}):r.sphericalPolynomial=void 0}};io.StoreLODInAlphaChannel=!1});var QU=C(()=>{hs();Ws();Pt();v_();x_();bt.prototype.createPrefilteredCubeTexture=function(n,e,t,i,r=null,s=null,a,o=null,l=!0){let c=async f=>{var g;if(!f){r&&r(null);return}let h=f.texture;if(l?f.info.sphericalPolynomial&&(h._sphericalPolynomial=f.info.sphericalPolynomial):h._sphericalPolynomial=(g=h._sphericalPolynomial)!=null?g:new Ko,h._source=9,this.getCaps().textureLOD){r&&r(h);return}let d=3,u=this._gl,m=f.width;if(!m)return;let{DDSTools:_}=await Promise.resolve().then(()=>(wM(),ZU)),p=[];for(let v=0;v{hs();rT();bt.prototype.createUniformBuffer=function(n,e){let t=this._gl.createBuffer();if(!t)throw new Error("Unable to create uniform buffer");let i=new Ho(t);return this.bindUniformBuffer(i),n instanceof Float32Array?this._gl.bufferData(this._gl.UNIFORM_BUFFER,n,this._gl.STATIC_DRAW):this._gl.bufferData(this._gl.UNIFORM_BUFFER,new Float32Array(n),this._gl.STATIC_DRAW),this.bindUniformBuffer(null),i.references=1,i};bt.prototype.createDynamicUniformBuffer=function(n,e){let t=this._gl.createBuffer();if(!t)throw new Error("Unable to create dynamic uniform buffer");let i=new Ho(t);return this.bindUniformBuffer(i),n instanceof Float32Array?this._gl.bufferData(this._gl.UNIFORM_BUFFER,n,this._gl.DYNAMIC_DRAW):this._gl.bufferData(this._gl.UNIFORM_BUFFER,new Float32Array(n),this._gl.DYNAMIC_DRAW),this.bindUniformBuffer(null),i.references=1,i};bt.prototype.updateUniformBuffer=function(n,e,t,i){this.bindUniformBuffer(n),t===void 0&&(t=0),i===void 0?e instanceof Float32Array?this._gl.bufferSubData(this._gl.UNIFORM_BUFFER,t,e):this._gl.bufferSubData(this._gl.UNIFORM_BUFFER,t,new Float32Array(e)):e instanceof Float32Array?this._gl.bufferSubData(this._gl.UNIFORM_BUFFER,0,e.subarray(t,t+i)):this._gl.bufferSubData(this._gl.UNIFORM_BUFFER,0,new Float32Array(e).subarray(t,t+i)),this.bindUniformBuffer(null)};bt.prototype.bindUniformBuffer=function(n){this._gl.bindBuffer(this._gl.UNIFORM_BUFFER,n?n.underlyingResource:null)};bt.prototype.bindUniformBufferBase=function(n,e,t){this._gl.bindBufferBase(this._gl.UNIFORM_BUFFER,e,n?n.underlyingResource:null)};bt.prototype.bindUniformBlock=function(n,e,t){let i=n.program,r=this._gl.getUniformBlockIndex(i,e);r!==4294967295&&this._gl.uniformBlockBinding(i,r,t)}});var JU=C(()=>{ma();Lr();Re.prototype.displayLoadingUI=function(){if(!ar())return;let n=this.loadingScreen;n&&n.displayLoadingUI()};Re.prototype.hideLoadingUI=function(){if(!ar())return;let n=this._loadingScreen;n&&n.hideLoadingUI()};Object.defineProperty(Re.prototype,"loadingScreen",{get:function(){return!this._loadingScreen&&this._renderingCanvas&&(this._loadingScreen=Re.DefaultLoadingScreenFactory(this._renderingCanvas)),this._loadingScreen},set:function(n){this._loadingScreen=n},enumerable:!0,configurable:!0});Object.defineProperty(Re.prototype,"loadingUIText",{set:function(n){this.loadingScreen.loadingUIText=n},enumerable:!0,configurable:!0});Object.defineProperty(Re.prototype,"loadingUIBackgroundColor",{set:function(n){this.loadingScreen.loadingUIBackgroundColor=n},enumerable:!0,configurable:!0})});var eV=C(()=>{Lr();Re.prototype.getInputElement=function(){return this._renderingCanvas};Re.prototype.getRenderingCanvasClientRect=function(){return this._renderingCanvas?this._renderingCanvas.getBoundingClientRect():null};Re.prototype.getInputElementClientRect=function(){return this._renderingCanvas?this.getInputElement().getBoundingClientRect():null};Re.prototype.getAspectRatio=function(n,e=!1){let t=n.viewport;return this.getRenderWidth(e)*t.width/(this.getRenderHeight(e)*t.height)};Re.prototype.getScreenAspectRatio=function(){return this.getRenderWidth(!0)/this.getRenderHeight(!0)};Re.prototype._verifyPointerLock=function(){var n;(n=this._onPointerLockChange)==null||n.call(this)}});var LC=C(()=>{Lr();Re.prototype.setAlphaEquation=function(n,e=0){if(this._alphaEquation[e]!==n){switch(n){case 0:this._alphaState.setAlphaEquationParameters(32774,32774,e);break;case 1:this._alphaState.setAlphaEquationParameters(32778,32778,e);break;case 2:this._alphaState.setAlphaEquationParameters(32779,32779,e);break;case 3:this._alphaState.setAlphaEquationParameters(32776,32776,e);break;case 4:this._alphaState.setAlphaEquationParameters(32775,32775,e);break;case 5:this._alphaState.setAlphaEquationParameters(32775,32774,e);break}this._alphaEquation[e]=n}}});var tV=C(()=>{Lr();LC();Re.prototype.getInputElement=function(){return this._renderingCanvas};Re.prototype.getDepthFunction=function(){return this._depthCullingState.depthFunc};Re.prototype.setDepthFunction=function(n){this._depthCullingState.depthFunc=n};Re.prototype.setDepthFunctionToGreater=function(){this.setDepthFunction(516)};Re.prototype.setDepthFunctionToGreaterOrEqual=function(){this.setDepthFunction(518)};Re.prototype.setDepthFunctionToLess=function(){this.setDepthFunction(513)};Re.prototype.setDepthFunctionToLessOrEqual=function(){this.setDepthFunction(515)};Re.prototype.getDepthWrite=function(){return this._depthCullingState.depthMask};Re.prototype.setDepthWrite=function(n){this._depthCullingState.depthMask=n};Re.prototype.setAlphaConstants=function(n,e,t,i){this._alphaState.setAlphaBlendConstants(n,e,t,i)};Re.prototype.getAlphaMode=function(n=0){return this._alphaMode[n]};Re.prototype.getAlphaEquation=function(n=0){return this._alphaEquation[n]}});var iV=C(()=>{Lr();LC();Re.prototype.getStencilBuffer=function(){return this._stencilState.stencilTest};Re.prototype.setStencilBuffer=function(n){this._stencilState.stencilTest=n};Re.prototype.getStencilMask=function(){return this._stencilState.stencilMask};Re.prototype.setStencilMask=function(n){this._stencilState.stencilMask=n};Re.prototype.getStencilFunction=function(){return this._stencilState.stencilFunc};Re.prototype.getStencilBackFunction=function(){return this._stencilState.stencilBackFunc};Re.prototype.getStencilFunctionReference=function(){return this._stencilState.stencilFuncRef};Re.prototype.getStencilFunctionMask=function(){return this._stencilState.stencilFuncMask};Re.prototype.setStencilFunction=function(n){this._stencilState.stencilFunc=n};Re.prototype.setStencilBackFunction=function(n){this._stencilState.stencilBackFunc=n};Re.prototype.setStencilFunctionReference=function(n){this._stencilState.stencilFuncRef=n};Re.prototype.setStencilFunctionMask=function(n){this._stencilState.stencilFuncMask=n};Re.prototype.getStencilOperationFail=function(){return this._stencilState.stencilOpStencilFail};Re.prototype.getStencilBackOperationFail=function(){return this._stencilState.stencilBackOpStencilFail};Re.prototype.getStencilOperationDepthFail=function(){return this._stencilState.stencilOpDepthFail};Re.prototype.getStencilBackOperationDepthFail=function(){return this._stencilState.stencilBackOpDepthFail};Re.prototype.getStencilOperationPass=function(){return this._stencilState.stencilOpStencilDepthPass};Re.prototype.getStencilBackOperationPass=function(){return this._stencilState.stencilBackOpStencilDepthPass};Re.prototype.setStencilOperationFail=function(n){this._stencilState.stencilOpStencilFail=n};Re.prototype.setStencilBackOperationFail=function(n){this._stencilState.stencilBackOpStencilFail=n};Re.prototype.setStencilOperationDepthFail=function(n){this._stencilState.stencilOpDepthFail=n};Re.prototype.setStencilBackOperationDepthFail=function(n){this._stencilState.stencilBackOpDepthFail=n};Re.prototype.setStencilOperationPass=function(n){this._stencilState.stencilOpStencilDepthPass=n};Re.prototype.setStencilBackOperationPass=function(n){this._stencilState.stencilBackOpStencilDepthPass=n};Re.prototype.cacheStencilState=function(){this._cachedStencilBuffer=this.getStencilBuffer(),this._cachedStencilFunction=this.getStencilFunction(),this._cachedStencilMask=this.getStencilMask(),this._cachedStencilOperationPass=this.getStencilOperationPass(),this._cachedStencilOperationFail=this.getStencilOperationFail(),this._cachedStencilOperationDepthFail=this.getStencilOperationDepthFail(),this._cachedStencilReference=this.getStencilFunctionReference()};Re.prototype.restoreStencilState=function(){this.setStencilFunction(this._cachedStencilFunction),this.setStencilMask(this._cachedStencilMask),this.setStencilBuffer(this._cachedStencilBuffer),this.setStencilOperationPass(this._cachedStencilOperationPass),this.setStencilOperationFail(this._cachedStencilOperationFail),this.setStencilOperationDepthFail(this._cachedStencilOperationDepthFail),this.setStencilFunctionReference(this._cachedStencilReference)}});var rV=C(()=>{Lr();Re.prototype.getRenderPassNames=function(){return this._renderPassNames};Re.prototype.getCurrentRenderPassName=function(){return this._renderPassNames[this.currentRenderPassId]};Re.prototype.createRenderPassId=function(n){let e=++Re._RenderPassIdCounter;return this._renderPassNames[e]=n!=null?n:"NONAME",e};Re.prototype.releaseRenderPassId=function(n){this._renderPassNames[n]=void 0;for(let e=0;e{Lr();Re.prototype._loadFileAsync=async function(n,e,t){return await new Promise((i,r)=>{this._loadFile(n,s=>{i(s)},void 0,e,t,(s,a)=>{r(a)})})}});var sV=C(()=>{MC();Lr();Re.GetCompatibleTextureLoader=$T});function dne(n){!n||!n.setAttribute||(n.setAttribute("touch-action","none"),n.style.touchAction="none",n.style.webkitTapHighlightColor="transparent")}function aV(n,e,t){n._onCanvasFocus=()=>{n.onCanvasFocusObservable.notifyObservers(n)},n._onCanvasBlur=()=>{n.onCanvasBlurObservable.notifyObservers(n)},n._onCanvasContextMenu=r=>{n.disableContextMenu&&r.preventDefault()},e.addEventListener("focus",n._onCanvasFocus),e.addEventListener("blur",n._onCanvasBlur),e.addEventListener("contextmenu",n._onCanvasContextMenu),n._onBlur=()=>{n.disablePerformanceMonitorInBackground&&n.performanceMonitor.disable(),n._windowIsBackground=!0},n._onFocus=()=>{n.disablePerformanceMonitorInBackground&&n.performanceMonitor.enable(),n._windowIsBackground=!1},n._onCanvasPointerOut=r=>{document.elementFromPoint(r.clientX,r.clientY)!==e&&n.onCanvasPointerOutObservable.notifyObservers(r)};let i=n.getHostWindow();i&&typeof i.addEventListener=="function"&&(i.addEventListener("blur",n._onBlur),i.addEventListener("focus",n._onFocus)),e.addEventListener("pointerout",n._onCanvasPointerOut),t.doNotHandleTouchAction||dne(e),!Re.audioEngine&&t.audioEngine&&Re.AudioEngineFactory&&(Re.audioEngine=Re.AudioEngineFactory(n.getRenderingCanvas(),n.getAudioContext(),n.getAudioDestination())),Qc()&&(n._onFullscreenChange=()=>{n.isFullscreen=!!document.fullscreenElement,n.isFullscreen&&n._pointerLockRequested&&e&&OC(e)},document.addEventListener("fullscreenchange",n._onFullscreenChange,!1),document.addEventListener("webkitfullscreenchange",n._onFullscreenChange,!1),n._onPointerLockChange=()=>{n.isPointerLock=document.pointerLockElement===e},document.addEventListener("pointerlockchange",n._onPointerLockChange,!1),document.addEventListener("webkitpointerlockchange",n._onPointerLockChange,!1)),n.enableOfflineSupport=Re.OfflineProviderFactory!==void 0,n._deterministicLockstep=!!t.deterministicLockstep,n._lockstepMaxSteps=t.lockstepMaxSteps||0,n._timeStep=t.timeStep||1/60}function oV(n,e){Le.Instances.length===1&&Re.audioEngine&&(Re.audioEngine.dispose(),Re.audioEngine=null);let t=n.getHostWindow();t&&typeof t.removeEventListener=="function"&&(t.removeEventListener("blur",n._onBlur),t.removeEventListener("focus",n._onFocus)),e&&(e.removeEventListener("focus",n._onCanvasFocus),e.removeEventListener("blur",n._onCanvasBlur),e.removeEventListener("pointerout",n._onCanvasPointerOut),e.removeEventListener("contextmenu",n._onCanvasContextMenu)),Qc()&&(document.removeEventListener("fullscreenchange",n._onFullscreenChange),document.removeEventListener("mozfullscreenchange",n._onFullscreenChange),document.removeEventListener("webkitfullscreenchange",n._onFullscreenChange),document.removeEventListener("msfullscreenchange",n._onFullscreenChange),document.removeEventListener("pointerlockchange",n._onPointerLockChange),document.removeEventListener("mspointerlockchange",n._onPointerLockChange),document.removeEventListener("mozpointerlockchange",n._onPointerLockChange),document.removeEventListener("webkitpointerlockchange",n._onPointerLockChange))}function lV(n){let e=document.createElement("span");e.textContent="Hg",e.style.font=n;let t=document.createElement("div");t.style.display="inline-block",t.style.width="1px",t.style.height="0px",t.style.verticalAlign="bottom";let i=document.createElement("div");i.style.whiteSpace="nowrap",i.appendChild(e),i.appendChild(t),document.body.appendChild(i);let r,s;try{s=t.getBoundingClientRect().top-e.getBoundingClientRect().top,t.style.verticalAlign="baseline",r=t.getBoundingClientRect().top-e.getBoundingClientRect().top}finally{document.body.removeChild(i)}return{ascent:r,height:s,descent:s-r}}async function cV(n,e,t){return await new Promise((i,r)=>{let s=new Image;s.onload=()=>{s.decode().then(()=>{n.createImageBitmap(s,t).then(a=>{i(a)})})},s.onerror=()=>{r(`Error loading image ${s.src}`)},s.src=e})}function fV(n,e,t,i){let s=n.createCanvas(t,i).getContext("2d");if(!s)throw new Error("Unable to get 2d context for resizeImageBitmap");return s.drawImage(e,0,0),s.getImageData(0,0,t,i).data}function hV(n){let e=n.requestFullscreen||n.webkitRequestFullscreen;e&&e.call(n)}function dV(){let n=document;document.exitFullscreen?document.exitFullscreen():n.webkitCancelFullScreen&&n.webkitCancelFullScreen()}function OC(n){if(n.requestPointerLock){let e=n.requestPointerLock();e instanceof Promise?e.then(()=>{n.focus()}).catch(()=>{}):n.focus()}}function uV(){document.exitPointerLock&&document.exitPointerLock()}var mV=C(()=>{ma();Lr();Pi()});var Be,NC=C(()=>{Ws();Pi();hs();h3();rT();Pt();qI();d3();_3();g3();v3();E3();A3();x3();R3();QU();$U();JU();eV();tV();iV();rV();JI();nV();sV();Lr();mV();YM();Wo();Be=class n extends bt{static get NpmPackage(){return Re.NpmPackage}static get Version(){return Re.Version}static get Instances(){return Le.Instances}static get LastCreatedEngine(){return Le.LastCreatedEngine}static get LastCreatedScene(){return Le.LastCreatedScene}static DefaultLoadingScreenFactory(e){return Re.DefaultLoadingScreenFactory(e)}get _supportsHardwareTextureRescaling(){return!!n._RescalePostProcessFactory}_measureFps(){this._performanceMonitor.sampleFrame(),this._fps=this._performanceMonitor.averageFPS,this._deltaTime=this._performanceMonitor.instantaneousFrameTime||0}get performanceMonitor(){return this._performanceMonitor}constructor(e,t,i,r=!1){super(e,t,i,r),this.customAnimationFrameRequester=null,this._performanceMonitor=new sT,this._drawCalls=new Qo,e&&(this._features.supportRenderPasses=!0)}_initGLContext(){super._initGLContext(),this._rescalePostProcess=null}_sharedInit(e){super._sharedInit(e),aV(this,e,this._creationOptions)}resizeImageBitmap(e,t,i){return fV(this,e,t,i)}async _createImageBitmapFromSource(e,t){return await cV(this,e,t)}switchFullscreen(e){this.isFullscreen?this.exitFullscreen():this.enterFullscreen(e)}enterFullscreen(e){this.isFullscreen||(this._pointerLockRequested=e,this._renderingCanvas&&hV(this._renderingCanvas))}exitFullscreen(){this.isFullscreen&&dV()}setDitheringState(e){e?this._gl.enable(this._gl.DITHER):this._gl.disable(this._gl.DITHER)}setRasterizerState(e){e?this._gl.disable(this._gl.RASTERIZER_DISCARD):this._gl.enable(this._gl.RASTERIZER_DISCARD)}setDirectViewport(e,t,i,r){let s=this._cachedViewport;return this._cachedViewport=null,this._viewport(e,t,i,r),s}scissorClear(e,t,i,r,s){this.enableScissor(e,t,i,r),this.clear(s,!0,!0,!0),this.disableScissor()}enableScissor(e,t,i,r){let s=this._gl;s.enable(s.SCISSOR_TEST),s.scissor(e,t,i,r)}disableScissor(){let e=this._gl;e.disable(e.SCISSOR_TEST)}getVertexShaderSource(e){let t=this._gl.getAttachedShaders(e);return t?this._gl.getShaderSource(t[0]):null}getFragmentShaderSource(e){let t=this._gl.getAttachedShaders(e);return t?this._gl.getShaderSource(t[1]):null}set framebufferDimensionsObject(e){this._framebufferDimensionsObject=e,this._framebufferDimensionsObject&&this.onResizeObservable.notifyObservers(this)}_rebuildBuffers(){for(let e of this.scenes)e.resetCachedMaterial(),e._rebuildGeometries();for(let e of this._virtualScenes)e.resetCachedMaterial(),e._rebuildGeometries();super._rebuildBuffers()}getFontOffset(e){return lV(e)}_cancelFrame(){if(this.customAnimationFrameRequester){if(this._frameHandler!==0){this._frameHandler=0;let{cancelAnimationFrame:e}=this.customAnimationFrameRequester;e&&e(this.customAnimationFrameRequester.requestID)}}else super._cancelFrame()}_renderLoop(e){this._processFrame(e),this._activeRenderLoops.length>0&&this._frameHandler===0&&(this.customAnimationFrameRequester?(this.customAnimationFrameRequester.requestID=this._queueNewFrame(this.customAnimationFrameRequester.renderFunction||this._boundRenderFunction,this.customAnimationFrameRequester),this._frameHandler=this.customAnimationFrameRequester.requestID):this._frameHandler=this._queueNewFrame(this._boundRenderFunction,this.getHostWindow()))}enterPointerlock(){this._renderingCanvas&&OC(this._renderingCanvas)}exitPointerlock(){uV()}beginFrame(){this._measureFps(),super.beginFrame()}_deletePipelineContext(e){let t=e;t&&t.program&&t.transformFeedback&&(this.deleteTransformFeedback(t.transformFeedback),t.transformFeedback=null),super._deletePipelineContext(e)}createShaderProgram(e,t,i,r,s,a=null){s=s||this._gl,this.onBeforeShaderCompilationObservable.notifyObservers(this);let o=super.createShaderProgram(e,t,i,r,s,a);return this.onAfterShaderCompilationObservable.notifyObservers(this),o}_createShaderProgram(e,t,i,r,s=null){let a=r.createProgram();if(e.program=a,!a)throw new Error("Unable to create program");if(r.attachShader(a,t),r.attachShader(a,i),this.webGLVersion>1&&s){let o=this.createTransformFeedback();this.bindTransformFeedback(o),this.setTranformFeedbackVaryings(a,s),e.transformFeedback=o}return r.linkProgram(a),this.webGLVersion>1&&s&&this.bindTransformFeedback(null),e.context=r,e.vertexShader=t,e.fragmentShader=i,e.isParallelCompiled||this._finalizePipelineContext(e),a}_releaseTexture(e){super._releaseTexture(e)}_releaseRenderTargetWrapper(e){super._releaseRenderTargetWrapper(e);for(let t of this.scenes){for(let i of t.postProcesses)i._outputTexture===e&&(i._outputTexture=null);for(let i of t.cameras)for(let r of i._postProcesses)r&&r._outputTexture===e&&(r._outputTexture=null)}}_rescaleTexture(e,t,i,r,s){this._gl.texParameteri(this._gl.TEXTURE_2D,this._gl.TEXTURE_MAG_FILTER,this._gl.LINEAR),this._gl.texParameteri(this._gl.TEXTURE_2D,this._gl.TEXTURE_MIN_FILTER,this._gl.LINEAR),this._gl.texParameteri(this._gl.TEXTURE_2D,this._gl.TEXTURE_WRAP_S,this._gl.CLAMP_TO_EDGE),this._gl.texParameteri(this._gl.TEXTURE_2D,this._gl.TEXTURE_WRAP_T,this._gl.CLAMP_TO_EDGE);let a=this.createRenderTargetTexture({width:t.width,height:t.height},{generateMipMaps:!1,type:0,samplingMode:2,generateDepthBuffer:!1,generateStencilBuffer:!1});if(!this._rescalePostProcess&&n._RescalePostProcessFactory&&(this._rescalePostProcess=n._RescalePostProcessFactory(this)),this._rescalePostProcess){this._rescalePostProcess.externalTextureSamplerBinding=!0;let o=()=>{this._rescalePostProcess.onApply=function(f){f._bindTexture("textureSampler",e)};let c=i;c||(c=this.scenes[this.scenes.length-1]),c.postProcessManager.directRender([this._rescalePostProcess],a,!0),this._bindTextureDirectly(this._gl.TEXTURE_2D,t,!0),this._gl.copyTexImage2D(this._gl.TEXTURE_2D,0,r,0,0,t.width,t.height,0),this.unBindFramebuffer(a),a.dispose(),s&&s()},l=this._rescalePostProcess.getEffect();l?l.executeWhenCompiled(o):this._rescalePostProcess.onEffectCreatedObservable.addOnce(c=>{c.executeWhenCompiled(o)})}}wrapWebGLTexture(e,t=!1,i=3,r=0,s=0){let a=new Mu(e,this._gl),o=new Fi(this,0,!0);return o._hardwareTexture=a,o.baseWidth=r,o.baseHeight=s,o.width=r,o.height=s,o.isReady=!0,o.useMipMaps=t,this.updateTextureSamplingMode(i,o),o}_uploadImageToTexture(e,t,i=0,r=0){let s=this._gl,a=this._getWebGLTextureType(e.type),o=this._getInternalFormat(e.format),l=this._getRGBABufferInternalSizedFormat(e.type,o),c=e.isCube?s.TEXTURE_CUBE_MAP:s.TEXTURE_2D;this._bindTextureDirectly(c,e,!0),this._unpackFlipY(e.invertY);let f=s.TEXTURE_2D;e.isCube&&(f=s.TEXTURE_CUBE_MAP_POSITIVE_X+i),s.texImage2D(f,r,l,o,a,t),this._bindTextureDirectly(c,null,!0)}updateTextureComparisonFunction(e,t){if(this.webGLVersion===1){J.Error("WebGL 1 does not support texture comparison.");return}let i=this._gl;e.isCube?(this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP,e,!0),t===0?(i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_COMPARE_FUNC,515),i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_COMPARE_MODE,i.NONE)):(i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_COMPARE_FUNC,t),i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_COMPARE_MODE,i.COMPARE_REF_TO_TEXTURE)),this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP,null)):(this._bindTextureDirectly(this._gl.TEXTURE_2D,e,!0),t===0?(i.texParameteri(i.TEXTURE_2D,i.TEXTURE_COMPARE_FUNC,515),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_COMPARE_MODE,i.NONE)):(i.texParameteri(i.TEXTURE_2D,i.TEXTURE_COMPARE_FUNC,t),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_COMPARE_MODE,i.COMPARE_REF_TO_TEXTURE)),this._bindTextureDirectly(this._gl.TEXTURE_2D,null)),e._comparisonFunction=t}createInstancesBuffer(e){let t=this._gl.createBuffer();if(!t)throw new Error("Unable to create instance buffer");let i=new Ho(t);return i.capacity=e,this.bindArrayBuffer(i),this._gl.bufferData(this._gl.ARRAY_BUFFER,e,this._gl.DYNAMIC_DRAW),i.references=1,i}deleteInstancesBuffer(e){this._gl.deleteBuffer(e)}async _clientWaitAsync(e,t=0,i=10){let r=this._gl;return await new Promise((s,a)=>{ko(()=>{let o=r.clientWaitSync(e,t,0);if(o==r.WAIT_FAILED)throw new Error("clientWaitSync failed");return o!=r.TIMEOUT_EXPIRED},s,a,i)})}_readPixelsAsync(e,t,i,r,s,a,o){if(this._webGLVersion<2)throw new Error("_readPixelsAsync only work on WebGL2+");let l=this._gl,c=l.createBuffer();l.bindBuffer(l.PIXEL_PACK_BUFFER,c),l.bufferData(l.PIXEL_PACK_BUFFER,o.byteLength,l.STREAM_READ),l.readPixels(e,t,i,r,s,a,0),l.bindBuffer(l.PIXEL_PACK_BUFFER,null);let f=l.fenceSync(l.SYNC_GPU_COMMANDS_COMPLETE,0);return f?(l.flush(),this._clientWaitAsync(f,0,10).then(()=>(l.deleteSync(f),l.bindBuffer(l.PIXEL_PACK_BUFFER,c),l.getBufferSubData(l.PIXEL_PACK_BUFFER,0,o),l.bindBuffer(l.PIXEL_PACK_BUFFER,null),l.deleteBuffer(c),o))):null}dispose(){this.hideLoadingUI(),this._rescalePostProcess&&this._rescalePostProcess.dispose(),oV(this,this._renderingCanvas),super.dispose()}};Be.ALPHA_DISABLE=0;Be.ALPHA_ADD=1;Be.ALPHA_COMBINE=2;Be.ALPHA_SUBTRACT=3;Be.ALPHA_MULTIPLY=4;Be.ALPHA_MAXIMIZED=5;Be.ALPHA_ONEONE=6;Be.ALPHA_PREMULTIPLIED=7;Be.ALPHA_PREMULTIPLIED_PORTERDUFF=8;Be.ALPHA_INTERPOLATE=9;Be.ALPHA_SCREENMODE=10;Be.DELAYLOADSTATE_NONE=0;Be.DELAYLOADSTATE_LOADED=1;Be.DELAYLOADSTATE_LOADING=2;Be.DELAYLOADSTATE_NOTLOADED=4;Be.NEVER=512;Be.ALWAYS=519;Be.LESS=513;Be.EQUAL=514;Be.LEQUAL=515;Be.GREATER=516;Be.GEQUAL=518;Be.NOTEQUAL=517;Be.KEEP=7680;Be.REPLACE=7681;Be.INCR=7682;Be.DECR=7683;Be.INVERT=5386;Be.INCR_WRAP=34055;Be.DECR_WRAP=34056;Be.TEXTURE_CLAMP_ADDRESSMODE=0;Be.TEXTURE_WRAP_ADDRESSMODE=1;Be.TEXTURE_MIRROR_ADDRESSMODE=2;Be.TEXTUREFORMAT_ALPHA=0;Be.TEXTUREFORMAT_LUMINANCE=1;Be.TEXTUREFORMAT_LUMINANCE_ALPHA=2;Be.TEXTUREFORMAT_RGB=4;Be.TEXTUREFORMAT_RGBA=5;Be.TEXTUREFORMAT_RED=6;Be.TEXTUREFORMAT_R=6;Be.TEXTUREFORMAT_R16_UNORM=33322;Be.TEXTUREFORMAT_RG16_UNORM=33324;Be.TEXTUREFORMAT_RGB16_UNORM=32852;Be.TEXTUREFORMAT_RGBA16_UNORM=32859;Be.TEXTUREFORMAT_R16_SNORM=36760;Be.TEXTUREFORMAT_RG16_SNORM=36761;Be.TEXTUREFORMAT_RGB16_SNORM=36762;Be.TEXTUREFORMAT_RGBA16_SNORM=36763;Be.TEXTUREFORMAT_RG=7;Be.TEXTUREFORMAT_RED_INTEGER=8;Be.TEXTUREFORMAT_R_INTEGER=8;Be.TEXTUREFORMAT_RG_INTEGER=9;Be.TEXTUREFORMAT_RGB_INTEGER=10;Be.TEXTUREFORMAT_RGBA_INTEGER=11;Be.TEXTURETYPE_UNSIGNED_BYTE=0;Be.TEXTURETYPE_UNSIGNED_INT=0;Be.TEXTURETYPE_FLOAT=1;Be.TEXTURETYPE_HALF_FLOAT=2;Be.TEXTURETYPE_BYTE=3;Be.TEXTURETYPE_SHORT=4;Be.TEXTURETYPE_UNSIGNED_SHORT=5;Be.TEXTURETYPE_INT=6;Be.TEXTURETYPE_UNSIGNED_INTEGER=7;Be.TEXTURETYPE_UNSIGNED_SHORT_4_4_4_4=8;Be.TEXTURETYPE_UNSIGNED_SHORT_5_5_5_1=9;Be.TEXTURETYPE_UNSIGNED_SHORT_5_6_5=10;Be.TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV=11;Be.TEXTURETYPE_UNSIGNED_INT_24_8=12;Be.TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV=13;Be.TEXTURETYPE_UNSIGNED_INT_5_9_9_9_REV=14;Be.TEXTURETYPE_FLOAT_32_UNSIGNED_INT_24_8_REV=15;Be.TEXTURE_NEAREST_SAMPLINGMODE=1;Be.TEXTURE_BILINEAR_SAMPLINGMODE=2;Be.TEXTURE_TRILINEAR_SAMPLINGMODE=3;Be.TEXTURE_NEAREST_NEAREST_MIPLINEAR=8;Be.TEXTURE_LINEAR_LINEAR_MIPNEAREST=11;Be.TEXTURE_LINEAR_LINEAR_MIPLINEAR=3;Be.TEXTURE_NEAREST_NEAREST_MIPNEAREST=4;Be.TEXTURE_NEAREST_LINEAR_MIPNEAREST=5;Be.TEXTURE_NEAREST_LINEAR_MIPLINEAR=6;Be.TEXTURE_NEAREST_LINEAR=7;Be.TEXTURE_NEAREST_NEAREST=1;Be.TEXTURE_LINEAR_NEAREST_MIPNEAREST=9;Be.TEXTURE_LINEAR_NEAREST_MIPLINEAR=10;Be.TEXTURE_LINEAR_LINEAR=2;Be.TEXTURE_LINEAR_NEAREST=12;Be.TEXTURE_EXPLICIT_MODE=0;Be.TEXTURE_SPHERICAL_MODE=1;Be.TEXTURE_PLANAR_MODE=2;Be.TEXTURE_CUBIC_MODE=3;Be.TEXTURE_PROJECTION_MODE=4;Be.TEXTURE_SKYBOX_MODE=5;Be.TEXTURE_INVCUBIC_MODE=6;Be.TEXTURE_EQUIRECTANGULAR_MODE=7;Be.TEXTURE_FIXED_EQUIRECTANGULAR_MODE=8;Be.TEXTURE_FIXED_EQUIRECTANGULAR_MIRRORED_MODE=9;Be.SCALEMODE_FLOOR=1;Be.SCALEMODE_NEAREST=2;Be.SCALEMODE_CEILING=3});var wC,_i,zs=C(()=>{kt();Ge();Ut();hi();Pi();ln();Er();wC=class{constructor(){this._doNotSerialize=!1,this._isDisposed=!1,this._sceneRootNodesIndex=-1,this._isEnabled=!0,this._isParentEnabled=!0,this._isReady=!0,this._onEnabledStateChangedObservable=new te,this._onClonedObservable=new te,this._inheritVisibility=!1,this._isVisible=!0}},_i=class n{static AddNodeConstructor(e,t){this._NodeConstructors[e]=t}static Construct(e,t,i,r){let s=this._NodeConstructors[e];return s?s(t,i,r):null}set accessibilityTag(e){this._accessibilityTag=e,this.onAccessibilityTagChangedObservable.notifyObservers(e)}get accessibilityTag(){return this._accessibilityTag}get doNotSerialize(){return this._nodeDataStorage._doNotSerialize?!0:this._parentNode?this._parentNode.doNotSerialize:!1}set doNotSerialize(e){this._nodeDataStorage._doNotSerialize=e}isDisposed(){return this._nodeDataStorage._isDisposed}set parent(e){if(this._parentNode===e)return;let t=this._parentNode;if(this._parentNode&&this._parentNode._children!==void 0&&this._parentNode._children!==null){let i=this._parentNode._children.indexOf(this);i!==-1&&this._parentNode._children.splice(i,1),!e&&!this._nodeDataStorage._isDisposed&&this._addToSceneRootNodes()}this._parentNode=e,this._isDirty=!0,this._parentNode&&((this._parentNode._children===void 0||this._parentNode._children===null)&&(this._parentNode._children=new Array),this._parentNode._children.push(this),t||this._removeFromSceneRootNodes()),this._syncParentEnabledState()}get parent(){return this._parentNode}get inheritVisibility(){return this._nodeDataStorage._inheritVisibility}set inheritVisibility(e){this._nodeDataStorage._inheritVisibility=e}get isVisible(){return this.inheritVisibility&&this._parentNode&&!this._parentNode.isVisible?!1:this._nodeDataStorage._isVisible}set isVisible(e){this._nodeDataStorage._isVisible=e}_serializeAsParent(e){e.parentId=this.uniqueId}_addToSceneRootNodes(){this._nodeDataStorage._sceneRootNodesIndex===-1&&(this._nodeDataStorage._sceneRootNodesIndex=this._scene.rootNodes.length,this._scene.rootNodes.push(this))}_removeFromSceneRootNodes(){if(this._nodeDataStorage._sceneRootNodesIndex!==-1){let e=this._scene.rootNodes,t=e.length-1;e[this._nodeDataStorage._sceneRootNodesIndex]=e[t],e[this._nodeDataStorage._sceneRootNodesIndex]._nodeDataStorage._sceneRootNodesIndex=this._nodeDataStorage._sceneRootNodesIndex,this._scene.rootNodes.pop(),this._nodeDataStorage._sceneRootNodesIndex=-1}}get animationPropertiesOverride(){return this._animationPropertiesOverride?this._animationPropertiesOverride:this._scene.animationPropertiesOverride}set animationPropertiesOverride(e){this._animationPropertiesOverride=e}getClassName(){return"Node"}set onDispose(e){this._onDisposeObserver&&this.onDisposeObservable.remove(this._onDisposeObserver),this._onDisposeObserver=this.onDisposeObservable.add(e)}get onEnabledStateChangedObservable(){return this._nodeDataStorage._onEnabledStateChangedObservable}get onClonedObservable(){return this._nodeDataStorage._onClonedObservable}constructor(e,t=null,i=!0){this._isDirty=!1,this._nodeDataStorage=new wC,this.state="",this.metadata=null,this.reservedDataStore=null,this._accessibilityTag=null,this.onAccessibilityTagChangedObservable=new te,this._parentContainer=null,this.animations=[],this._ranges={},this.onReady=null,this._currentRenderId=-1,this._parentUpdateId=-1,this._childUpdateId=-1,this._waitingParentId=null,this._waitingParentInstanceIndex=null,this._waitingParsedUniqueId=null,this._cache={},this._parentNode=null,this._children=null,this._worldMatrix=K.Identity(),this._worldMatrixDeterminant=0,this._worldMatrixDeterminantIsDirty=!0,this._animationPropertiesOverride=null,this._isNode=!0,this.onDisposeObservable=new te,this._onDisposeObserver=null,this._behaviors=new Array,this.name=e,this.id=e,this._scene=t||Le.LastCreatedScene,this.uniqueId=this._scene.getUniqueId(),this._initCache(),i&&this._addToSceneRootNodes()}getScene(){return this._scene}getEngine(){return this._scene.getEngine()}addBehavior(e,t=!1){return this._behaviors.indexOf(e)!==-1?this:(e.init(),this._scene.isLoading&&!t?this._scene.onDataLoadedObservable.addOnce(()=>{this._behaviors.includes(e)&&e.attach(this)}):e.attach(this),this._behaviors.push(e),this)}removeBehavior(e){let t=this._behaviors.indexOf(e);return t===-1?this:(this._behaviors[t].detach(),this._behaviors.splice(t,1),this)}get behaviors(){return this._behaviors}getBehaviorByName(e){for(let t of this._behaviors)if(t.name===e)return t;return null}getWorldMatrix(){return this._currentRenderId!==this._scene.getRenderId()&&this.computeWorldMatrix(),this._worldMatrix}_getWorldMatrixDeterminant(){return this._worldMatrixDeterminantIsDirty&&(this._worldMatrixDeterminantIsDirty=!1,this._worldMatrixDeterminant=this._worldMatrix.determinant()),this._worldMatrixDeterminant}get worldMatrixFromCache(){return this._worldMatrix}_initCache(){this._cache={}}updateCache(e){!e&&this.isSynchronized()||this._updateCache()}_getActionManagerForTrigger(e,t=!0){return this.parent?this.parent._getActionManagerForTrigger(e,!1):null}_updateCache(e){}_isSynchronized(){return!0}_markSyncedWithParent(){this._parentNode&&(this._parentUpdateId=this._parentNode._childUpdateId)}isSynchronizedWithParent(){return this._parentNode?this._parentNode._isDirty||this._parentUpdateId!==this._parentNode._childUpdateId?!1:this._parentNode.isSynchronized():!0}isSynchronized(){return this._parentNode&&!this.isSynchronizedWithParent()?!1:this._isSynchronized()}isReady(e=!1){return this._nodeDataStorage._isReady}markAsDirty(e){return this._currentRenderId=Number.MAX_VALUE,this._isDirty=!0,this}isEnabled(e=!0){return e===!1?this._nodeDataStorage._isEnabled:this._nodeDataStorage._isEnabled?this._nodeDataStorage._isParentEnabled:!1}_syncParentEnabledState(){if(this._nodeDataStorage._isParentEnabled=this._parentNode?this._parentNode.isEnabled():!0,this._children)for(let e of this._children)e._syncParentEnabledState()}setEnabled(e){this._nodeDataStorage._isEnabled!==e&&(this._nodeDataStorage._isEnabled=e,this._syncParentEnabledState(),this._nodeDataStorage._onEnabledStateChangedObservable.notifyObservers(e))}isDescendantOf(e){return this.parent?this.parent===e?!0:this.parent.isDescendantOf(e):!1}_getDescendants(e,t=!1,i){if(this._children)for(let r=0;r(!t||t(r))&&r.cullingStrategy!==void 0),i}getChildren(e,t=!0){return this.getDescendants(t,e)}_setReady(e){if(e!==this._nodeDataStorage._isReady){if(!e){this._nodeDataStorage._isReady=!1;return}this.onReady&&this.onReady(this),this._nodeDataStorage._isReady=!0}}getAnimationByName(e){for(let t=0;tnew n(e,this.getScene()),this);if(t&&(r.parent=t),!i){let s=this.getDescendants(!0);for(let a=0;a{throw Xe("AnimationRange")};_i._NodeConstructors={};P([w()],_i.prototype,"name",void 0);P([w()],_i.prototype,"id",void 0);P([w()],_i.prototype,"uniqueId",void 0);P([w()],_i.prototype,"state",void 0);P([w()],_i.prototype,"metadata",void 0)});function FC(n,e,t){try{let i=n.next();i.done?e(i):i.value?i.value.then(()=>{i.value=void 0,e(i)},t):e(i)}catch(i){t(i)}}function pV(n=25){let e;return(t,i,r)=>{let s=performance.now();e===void 0||s-e>n?(e=s,setTimeout(()=>{FC(t,i,r)},0)):FC(t,i,r)}}function _V(n,e,t,i,r){let s=()=>{let a,o=l=>{l.done?t(l.value):a===void 0?a=!0:s()};do a=void 0,!r||!r.aborted?e(n,o,i):i(new Error("Aborted")),a===void 0&&(a=!1);while(a)};s()}function Y_(n,e){let t;return _V(n,FC,i=>t=i,i=>{throw i},e),t}async function gV(n,e,t){return await new Promise((i,r)=>{_V(n,e,i,r,t)})}function vV(n,e){return(...t)=>Y_(n(...t),e)}var BC=C(()=>{});var ut,el=C(()=>{kt();Ut();to();Ci();hi();Ge();zs();Pt();Vi();ln();Uu();fT();Er();ut=class n extends _i{get position(){return this._position}set position(e){this._position=e}set upVector(e){this._upVector=e}get upVector(){return this._upVector}get screenArea(){var i,r,s,a;let e,t;if(this.mode===n.PERSPECTIVE_CAMERA)this.fovMode===n.FOVMODE_VERTICAL_FIXED?(t=this.minZ*2*Math.tan(this.fov/2),e=this.getEngine().getAspectRatio(this)*t):(e=this.minZ*2*Math.tan(this.fov/2),t=e/this.getEngine().getAspectRatio(this));else{let o=this.getEngine().getRenderWidth()/2,l=this.getEngine().getRenderHeight()/2;e=((i=this.orthoRight)!=null?i:o)-((r=this.orthoLeft)!=null?r:-o),t=((s=this.orthoTop)!=null?s:l)-((a=this.orthoBottom)!=null?a:-l)}return e*t}set orthoLeft(e){this._orthoLeft=e;for(let t of this._rigCameras)t.orthoLeft=e}get orthoLeft(){return this._orthoLeft}set orthoRight(e){this._orthoRight=e;for(let t of this._rigCameras)t.orthoRight=e}get orthoRight(){return this._orthoRight}set orthoBottom(e){this._orthoBottom=e;for(let t of this._rigCameras)t.orthoBottom=e}get orthoBottom(){return this._orthoBottom}set orthoTop(e){this._orthoTop=e;for(let t of this._rigCameras)t.orthoTop=e}get orthoTop(){return this._orthoTop}setFocalLength(e,t=36){this.fov=2*Math.atan(t/(2*e))}set mode(e){this._mode=e;for(let t of this._rigCameras)t.mode=e}get mode(){return this._mode}get hasMoved(){return this._hasMoved}constructor(e,t,i,r=!0){super(e,i,!1),this._position=b.Zero(),this._upVector=b.Up(),this.oblique=null,this._orthoLeft=null,this._orthoRight=null,this._orthoBottom=null,this._orthoTop=null,this.fov=.8,this.projectionPlaneTilt=0,this.minZ=1,this.maxZ=1e4,this.inertia=.9,this._mode=n.PERSPECTIVE_CAMERA,this.isIntermediate=!1,this.viewport=new $a(0,0,1,1),this.layerMask=268435455,this.fovMode=n.FOVMODE_VERTICAL_FIXED,this.cameraRigMode=n.RIG_MODE_NONE,this.ignoreCameraMaxZ=!1,this.customRenderTargets=[],this.outputRenderTarget=null,this.onViewMatrixChangedObservable=new te,this.onProjectionMatrixChangedObservable=new te,this.onAfterCheckInputsObservable=new te,this.onRestoreStateObservable=new te,this.isRigCamera=!1,this._hasMoved=!1,this._rigCameras=new Array,this._skipRendering=!1,this._projectionMatrix=new K,this._postProcesses=new Array,this._activeMeshes=new wi(256),this._globalPosition=b.Zero(),this._computedViewMatrix=K.Identity(),this._doNotComputeProjectionMatrix=!1,this._transformMatrix=K.Zero(),this._refreshFrustumPlanes=!0,this._absoluteRotation=ze.Identity(),this._isCamera=!0,this._isLeftCamera=!1,this._isRightCamera=!1,this.layerMask=this.getScene().defaultCameraLayerMask,this.getScene().addCamera(this),r&&!this.getScene().activeCamera&&(this.getScene().activeCamera=this),this.position=t,this.renderPassId=this.getScene().getEngine().createRenderPassId(`Camera ${e}`)}storeState(){return this._stateStored=!0,this._storedFov=this.fov,this}hasStateStored(){return!!this._stateStored}_restoreStateValues(){return this._stateStored?(this.fov=this._storedFov,!0):!1}restoreState(){return this._restoreStateValues()?(this.onRestoreStateObservable.notifyObservers(this),!0):!1}getClassName(){return"Camera"}toString(e){let t="Name: "+this.name;if(t+=", type: "+this.getClassName(),this.animations)for(let i=0;i-1?(J.Error("You're trying to reuse a post process not defined as reusable."),0):(t==null||t<0?this._postProcesses.push(e):this._postProcesses[t]===null?this._postProcesses[t]=e:this._postProcesses.splice(t,0,e),this._cascadePostProcessesToRigCams(),this._scene.prePassRenderer&&this._scene.prePassRenderer.markAsDirty(),this._postProcesses.indexOf(e))}detachPostProcess(e){let t=this._postProcesses.indexOf(e);t!==-1&&(this._postProcesses[t]=null),this._scene.prePassRenderer&&this._scene.prePassRenderer.markAsDirty(),this._cascadePostProcessesToRigCams()}getWorldMatrix(){return this._isSynchronizedViewMatrix()?this._worldMatrix:(this.getViewMatrix(),this._worldMatrix)}_getViewMatrix(){return K.Identity()}getViewMatrix(e){return!e&&this._isSynchronizedViewMatrix()?this._computedViewMatrix:(this._hasMoved=!0,this.updateCache(),this._computedViewMatrix=this._getViewMatrix(),this._currentRenderId=this.getScene().getRenderId(),this._childUpdateId++,this._refreshFrustumPlanes=!0,this._cameraRigParams&&this._cameraRigParams.vrPreViewMatrix&&this._computedViewMatrix.multiplyToRef(this._cameraRigParams.vrPreViewMatrix,this._computedViewMatrix),this.parent&&this.parent.onViewMatrixChangedObservable&&this.parent.onViewMatrixChangedObservable.notifyObservers(this.parent),this.onViewMatrixChangedObservable.notifyObservers(this),this._computedViewMatrix.invertToRef(this._worldMatrix),this._worldMatrix.getTranslationToRef(this._globalPosition),this._computedViewMatrix)}freezeProjectionMatrix(e){this._doNotComputeProjectionMatrix=!0,e!==void 0&&(this._projectionMatrix=e)}unfreezeProjectionMatrix(){this._doNotComputeProjectionMatrix=!1}getProjectionMatrix(e){var a,o,l,c,f,h,d,u,m,_,p,g,v,x,A,S,E,R,I;if(this._doNotComputeProjectionMatrix||!e&&this._isSynchronizedProjectionMatrix())return this._projectionMatrix;let t=this.ignoreCameraMaxZ?0:this.maxZ;this._cache.mode=this.mode,this._cache.minZ=this.minZ,this._cache.maxZ=t,this._refreshFrustumPlanes=!0;let i=this.getEngine(),r=this.getScene(),s=i.useReverseDepthBuffer;if(this.mode===n.PERSPECTIVE_CAMERA){this._cache.fov=this.fov,this._cache.fovMode=this.fovMode,this._cache.aspectRatio=i.getAspectRatio(this),this._cache.projectionPlaneTilt=this.projectionPlaneTilt,this.minZ<=0&&(this.minZ=.1);let y;r.useRightHandedSystem?y=K.PerspectiveFovRHToRef:y=K.PerspectiveFovLHToRef,y(this.fov,i.getAspectRatio(this),s?t:this.minZ,s?this.minZ:t,this._projectionMatrix,this.fovMode===n.FOVMODE_VERTICAL_FIXED,i.isNDCHalfZRange,this.projectionPlaneTilt,s)}else{let y=i.getRenderWidth()/2,M=i.getRenderHeight()/2;r.useRightHandedSystem?this.oblique?K.ObliqueOffCenterRHToRef((a=this.orthoLeft)!=null?a:-y,(o=this.orthoRight)!=null?o:y,(l=this.orthoBottom)!=null?l:-M,(c=this.orthoTop)!=null?c:M,s?t:this.minZ,s?this.minZ:t,this.oblique.length,this.oblique.angle,this._computeObliqueDistance(this.oblique.offset),this._projectionMatrix,i.isNDCHalfZRange):K.OrthoOffCenterRHToRef((f=this.orthoLeft)!=null?f:-y,(h=this.orthoRight)!=null?h:y,(d=this.orthoBottom)!=null?d:-M,(u=this.orthoTop)!=null?u:M,s?t:this.minZ,s?this.minZ:t,this._projectionMatrix,i.isNDCHalfZRange):this.oblique?K.ObliqueOffCenterLHToRef((m=this.orthoLeft)!=null?m:-y,(_=this.orthoRight)!=null?_:y,(p=this.orthoBottom)!=null?p:-M,(g=this.orthoTop)!=null?g:M,s?t:this.minZ,s?this.minZ:t,this.oblique.length,this.oblique.angle,this._computeObliqueDistance(this.oblique.offset),this._projectionMatrix,i.isNDCHalfZRange):K.OrthoOffCenterLHToRef((v=this.orthoLeft)!=null?v:-y,(x=this.orthoRight)!=null?x:y,(A=this.orthoBottom)!=null?A:-M,(S=this.orthoTop)!=null?S:M,s?t:this.minZ,s?this.minZ:t,this._projectionMatrix,i.isNDCHalfZRange),this._cache.orthoLeft=this.orthoLeft,this._cache.orthoRight=this.orthoRight,this._cache.orthoBottom=this.orthoBottom,this._cache.orthoTop=this.orthoTop,this._cache.obliqueAngle=(E=this.oblique)==null?void 0:E.angle,this._cache.obliqueLength=(R=this.oblique)==null?void 0:R.length,this._cache.obliqueOffset=(I=this.oblique)==null?void 0:I.offset,this._cache.renderWidth=i.getRenderWidth(),this._cache.renderHeight=i.getRenderHeight()}return this.onProjectionMatrixChangedObservable.notifyObservers(this),this._projectionMatrix}getTransformationMatrix(){return this._computedViewMatrix.multiplyToRef(this._projectionMatrix,this._transformMatrix),this._transformMatrix}_computeObliqueDistance(e){let t=this,i=this;return(t.radius||(i.target?b.Distance(this.position,i.target):this.position.length()))+e}_updateFrustumPlanes(){this._refreshFrustumPlanes&&(this.getTransformationMatrix(),this._frustumPlanes?Jc.GetPlanesToRef(this._transformMatrix,this._frustumPlanes):this._frustumPlanes=Jc.GetPlanes(this._transformMatrix),this._refreshFrustumPlanes=!1)}isInFrustum(e,t=!1){if(this._updateFrustumPlanes(),t&&this.rigCameras.length>0){let i=!1;for(let r of this.rigCameras)r._updateFrustumPlanes(),i=i||e.isInFrustum(r._frustumPlanes);return i}else return e.isInFrustum(this._frustumPlanes)}isCompletelyInFrustum(e){return this._updateFrustumPlanes(),e.isCompletelyInFrustum(this._frustumPlanes)}getForwardRay(e=100,t,i){throw Xe("Ray")}getForwardRayToRef(e,t=100,i,r){throw Xe("Ray")}dispose(e,t=!1){for(this.onViewMatrixChangedObservable.clear(),this.onProjectionMatrixChangedObservable.clear(),this.onAfterCheckInputsObservable.clear(),this.onRestoreStateObservable.clear(),this.inputs&&this.inputs.clear(),this.getScene().stopAnimation(this),this.getScene().removeCamera(this);this._rigCameras.length>0;){let r=this._rigCameras.pop();r&&r.dispose()}if(this._parentContainer){let r=this._parentContainer.cameras.indexOf(this);r>-1&&this._parentContainer.cameras.splice(r,1),this._parentContainer=null}if(this._rigPostProcess)this._rigPostProcess.dispose(this),this._rigPostProcess=null,this._postProcesses.length=0;else if(this.cameraRigMode!==n.RIG_MODE_NONE)this._rigPostProcess=null,this._postProcesses.length=0;else{let r=this._postProcesses.length;for(;--r>=0;){let s=this._postProcesses[r];s&&s.dispose(this)}}let i=this.customRenderTargets.length;for(;--i>=0;)this.customRenderTargets[i].dispose();this.customRenderTargets.length=0,this._activeMeshes.dispose(),this.getScene().getEngine().releaseRenderPassId(this.renderPassId),super.dispose(e,t)}get isLeftCamera(){return this._isLeftCamera}get isRightCamera(){return this._isRightCamera}get leftCamera(){return this._rigCameras.length<1?null:this._rigCameras[0]}get rightCamera(){return this._rigCameras.length<2?null:this._rigCameras[1]}getLeftTarget(){return this._rigCameras.length<1?null:this._rigCameras[0].getTarget()}getRightTarget(){return this._rigCameras.length<2?null:this._rigCameras[1].getTarget()}setCameraRigMode(e,t){if(this.cameraRigMode!==e){for(;this._rigCameras.length>0;){let i=this._rigCameras.pop();i&&i.dispose()}if(this.cameraRigMode=e,this._cameraRigParams={},this._cameraRigParams.interaxialDistance=t.interaxialDistance||.0637,this._cameraRigParams.stereoHalfAngle=de.ToRadians(this._cameraRigParams.interaxialDistance/.0637),this.cameraRigMode!==n.RIG_MODE_NONE){let i=this.createRigCamera(this.name+"_L",0);i&&(i._isLeftCamera=!0);let r=this.createRigCamera(this.name+"_R",1);r&&(r._isRightCamera=!0),i&&r&&(this._rigCameras.push(i),this._rigCameras.push(r))}this._setRigMode(t),this._cascadePostProcessesToRigCams(),this.update()}}_setRigMode(e){}_getVRProjectionMatrix(){return K.PerspectiveFovLHToRef(this._cameraRigParams.vrMetrics.aspectRatioFov,this._cameraRigParams.vrMetrics.aspectRatio,this.minZ,this.ignoreCameraMaxZ?0:this.maxZ,this._cameraRigParams.vrWorkMatrix,!0,this.getEngine().isNDCHalfZRange),this._cameraRigParams.vrWorkMatrix.multiplyToRef(this._cameraRigParams.vrHMatrix,this._projectionMatrix),this._projectionMatrix}setCameraRigParameter(e,t){this._cameraRigParams||(this._cameraRigParams={}),this._cameraRigParams[e]=t,e==="interaxialDistance"&&(this._cameraRigParams.stereoHalfAngle=de.ToRadians(t/.0637))}createRigCamera(e,t){return null}_updateRigCameras(){for(let e=0;en._CreateDefaultParsedCamera(t,i))}computeWorldMatrix(){return this.getWorldMatrix()}static Parse(e,t){let i=e.type,r=n.GetConstructorFromName(i,e.name,t,e.interaxial_distance,e.isStereoscopicSideBySide),s=tt.Parse(r,e,t);if(e.parentId!==void 0&&(s._waitingParentId=e.parentId),e.parentInstanceIndex!==void 0&&(s._waitingParentInstanceIndex=e.parentInstanceIndex),s.inputs&&(s.inputs.parse(e),s._setupInputs()),e.upVector&&(s.upVector=b.FromArray(e.upVector)),s.setPosition&&(s.position.copyFromFloats(0,0,0),s.setPosition(b.FromArray(e.position))),e.target&&s.setTarget&&s.setTarget(b.FromArray(e.target)),e.cameraRigMode){let a=e.interaxial_distance?{interaxialDistance:e.interaxial_distance}:{};s.setCameraRigMode(e.cameraRigMode,a)}if(e.animations){for(let a=0;a{throw Xe("UniversalCamera")};ut.PERSPECTIVE_CAMERA=0;ut.ORTHOGRAPHIC_CAMERA=1;ut.FOVMODE_VERTICAL_FIXED=0;ut.FOVMODE_HORIZONTAL_FIXED=1;ut.RIG_MODE_NONE=0;ut.RIG_MODE_STEREOSCOPIC_ANAGLYPH=10;ut.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL=11;ut.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED=12;ut.RIG_MODE_STEREOSCOPIC_OVERUNDER=13;ut.RIG_MODE_STEREOSCOPIC_INTERLACED=14;ut.RIG_MODE_VR=20;ut.RIG_MODE_CUSTOM=22;ut.ForceAttachControlToAlwaysPreventDefault=!1;P([Vr("position")],ut.prototype,"_position",void 0);P([Vr("upVector")],ut.prototype,"_upVector",void 0);P([w()],ut.prototype,"orthoLeft",null);P([w()],ut.prototype,"orthoRight",null);P([w()],ut.prototype,"orthoBottom",null);P([w()],ut.prototype,"orthoTop",null);P([w()],ut.prototype,"fov",void 0);P([w()],ut.prototype,"projectionPlaneTilt",void 0);P([w()],ut.prototype,"minZ",void 0);P([w()],ut.prototype,"maxZ",void 0);P([w()],ut.prototype,"inertia",void 0);P([w()],ut.prototype,"mode",null);P([w()],ut.prototype,"layerMask",void 0);P([w()],ut.prototype,"fovMode",void 0);P([w()],ut.prototype,"cameraRigMode",void 0);P([w()],ut.prototype,"interaxialDistance",void 0);P([w()],ut.prototype,"isStereoscopicSideBySide",void 0);P([w()],ut.prototype,"ignoreCameraMaxZ",void 0)});var Gh,UC=C(()=>{Gh=class{constructor(e,t,i){this.bu=e,this.bv=t,this.distance=i,this.faceId=0,this.subMeshId=0,this._internalSubMeshId=0}}});var df,VC=C(()=>{Xo();Ge();An();df=class n{constructor(e,t,i){this.vectors=cn(8,b.Zero),this.center=b.Zero(),this.centerWorld=b.Zero(),this.extendSize=b.Zero(),this.extendSizeWorld=b.Zero(),this.directions=cn(3,b.Zero),this.vectorsWorld=cn(8,b.Zero),this.minimumWorld=b.Zero(),this.maximumWorld=b.Zero(),this.minimum=b.Zero(),this.maximum=b.Zero(),this._drawWrapperFront=null,this._drawWrapperBack=null,this.reConstruct(e,t,i)}reConstruct(e,t,i){let r=e.x,s=e.y,a=e.z,o=t.x,l=t.y,c=t.z,f=this.vectors;this.minimum.copyFromFloats(r,s,a),this.maximum.copyFromFloats(o,l,c),f[0].copyFromFloats(r,s,a),f[1].copyFromFloats(o,l,c),f[2].copyFromFloats(o,s,a),f[3].copyFromFloats(r,l,a),f[4].copyFromFloats(r,s,c),f[5].copyFromFloats(o,l,a),f[6].copyFromFloats(r,l,c),f[7].copyFromFloats(o,s,c),t.addToRef(e,this.center).scaleInPlace(.5),t.subtractToRef(e,this.extendSize).scaleInPlace(.5),this._worldMatrix=i||K.IdentityReadOnly,this._update(this._worldMatrix)}scale(e){let t=n._TmpVector3,i=this.maximum.subtractToRef(this.minimum,t[0]),r=i.length();i.normalizeFromLength(r);let s=r*e,a=i.scaleInPlace(s*.5),o=this.center.subtractToRef(a,t[1]),l=this.center.addToRef(a,t[2]);return this.reConstruct(o,l,this._worldMatrix),this}getWorldMatrix(){return this._worldMatrix}_update(e){let t=this.minimumWorld,i=this.maximumWorld,r=this.directions,s=this.vectorsWorld,a=this.vectors;if(e.isIdentity()){t.copyFrom(this.minimum),i.copyFrom(this.maximum);for(let o=0;o<8;++o)s[o].copyFrom(a[o]);this.extendSizeWorld.copyFrom(this.extendSize),this.centerWorld.copyFrom(this.center)}else{t.setAll(Number.MAX_VALUE),i.setAll(-Number.MAX_VALUE);for(let o=0;o<8;++o){let l=s[o];b.TransformCoordinatesToRef(a[o],e,l),t.minimizeInPlace(l),i.maximizeInPlace(l)}i.subtractToRef(t,this.extendSizeWorld).scaleInPlace(.5),i.addToRef(t,this.centerWorld).scaleInPlace(.5)}b.FromArrayToRef(e.m,0,r[0]),b.FromArrayToRef(e.m,4,r[1]),b.FromArrayToRef(e.m,8,r[2]),this._worldMatrix=e}isInFrustum(e){return n.IsInFrustum(this.vectorsWorld,e)}isCompletelyInFrustum(e){return n.IsCompletelyInFrustum(this.vectorsWorld,e)}intersectsPoint(e){let t=this.minimumWorld,i=this.maximumWorld,r=t.x,s=t.y,a=t.z,o=i.x,l=i.y,c=i.z,f=e.x,h=e.y,d=e.z,u=-Nt;return!(o-ff-r||l-hh-s||c-dd-a)}intersectsSphere(e){return n.IntersectsSphere(this.minimumWorld,this.maximumWorld,e.centerWorld,e.radiusWorld)}intersectsMinMax(e,t){let i=this.minimumWorld,r=this.maximumWorld,s=i.x,a=i.y,o=i.z,l=r.x,c=r.y,f=r.z,h=e.x,d=e.y,u=e.z,m=t.x,_=t.y,p=t.z;return!(lm||c_||fp)}dispose(){var e,t;(e=this._drawWrapperFront)==null||e.dispose(),(t=this._drawWrapperBack)==null||t.dispose()}static Intersects(e,t){return e.intersectsMinMax(t.minimumWorld,t.maximumWorld)}static IntersectsSphere(e,t,i,r){let s=n._TmpVector3[0];return b.ClampToRef(i,e,t,s),b.DistanceSquared(i,s)<=r*r}static IsCompletelyInFrustum(e,t){for(let i=0;i<6;++i){let r=t[i];for(let s=0;s<8;++s)if(r.dotCoordinate(e[s])<0)return!1}return!0}static IsInFrustum(e,t){for(let i=0;i<6;++i){let r=!0,s=t[i];for(let a=0;a<8;++a)if(s.dotCoordinate(e[a])>=0){r=!1;break}if(r)return!1}return!0}};df._TmpVector3=cn(3,b.Zero)});var Ju,EV=C(()=>{Xo();Ge();Ju=class n{constructor(e,t,i){this.center=b.Zero(),this.centerWorld=b.Zero(),this.minimum=b.Zero(),this.maximum=b.Zero(),this.reConstruct(e,t,i)}reConstruct(e,t,i){this.minimum.copyFrom(e),this.maximum.copyFrom(t);let r=b.Distance(e,t);t.addToRef(e,this.center).scaleInPlace(.5),this.radius=r*.5,this._update(i||K.IdentityReadOnly)}scale(e){let t=this.radius*e,i=n._TmpVector3,r=i[0].setAll(t),s=this.center.subtractToRef(r,i[1]),a=this.center.addToRef(r,i[2]);return this.reConstruct(s,a,this._worldMatrix),this}getWorldMatrix(){return this._worldMatrix}_update(e){if(e.isIdentity())this.centerWorld.copyFrom(this.center),this.radiusWorld=this.radius;else{b.TransformCoordinatesToRef(this.center,e,this.centerWorld);let t=n._TmpVector3[0];b.TransformNormalFromFloatsToRef(1,1,1,e,t),this.radiusWorld=Math.max(Math.abs(t.x),Math.abs(t.y),Math.abs(t.z))*this.radius}}isInFrustum(e){let t=this.centerWorld,i=this.radiusWorld;for(let r=0;r<6;r++)if(e[r].dotCoordinate(t)<=-i)return!1;return!0}isCenterInFrustum(e){let t=this.centerWorld;for(let i=0;i<6;i++)if(e[i].dotCoordinate(t)<0)return!1;return!0}intersectsPoint(e){let t=b.DistanceSquared(this.centerWorld,e);return!(this.radiusWorld*this.radiusWorld{Xo();Ge();VC();EV();GC={min:0,max:0},kC={min:0,max:0},SV=(n,e,t)=>{let i=b.Dot(e.centerWorld,n),r=Math.abs(b.Dot(e.directions[0],n))*e.extendSize.x,s=Math.abs(b.Dot(e.directions[1],n))*e.extendSize.y,a=Math.abs(b.Dot(e.directions[2],n))*e.extendSize.z,o=r+s+a;t.min=i-o,t.max=i+o},zn=(n,e,t)=>(SV(n,e,GC),SV(n,t,kC),!(GC.min>kC.max||kC.min>GC.max)),fn=class n{constructor(e,t,i){this._isLocked=!1,this.boundingBox=new df(e,t,i),this.boundingSphere=new Ju(e,t,i)}reConstruct(e,t,i){this.boundingBox.reConstruct(e,t,i),this.boundingSphere.reConstruct(e,t,i)}get minimum(){return this.boundingBox.minimum}get maximum(){return this.boundingBox.maximum}get isLocked(){return this._isLocked}set isLocked(e){this._isLocked=e}update(e){this._isLocked||(this.boundingBox._update(e),this.boundingSphere._update(e))}centerOn(e,t){let i=n._TmpVector3[0].copyFrom(e).subtractInPlace(t),r=n._TmpVector3[1].copyFrom(e).addInPlace(t);return this.boundingBox.reConstruct(i,r,this.boundingBox.getWorldMatrix()),this.boundingSphere.reConstruct(i,r,this.boundingBox.getWorldMatrix()),this}encapsulate(e){let t=b.Minimize(this.minimum,e),i=b.Maximize(this.maximum,e);return this.reConstruct(t,i,this.boundingBox.getWorldMatrix()),this}encapsulateBoundingInfo(e){let t=Q.Matrix[0];this.boundingBox.getWorldMatrix().invertToRef(t);let i=Q.Vector3[0];return b.TransformCoordinatesToRef(e.boundingBox.minimumWorld,t,i),this.encapsulate(i),b.TransformCoordinatesToRef(e.boundingBox.maximumWorld,t,i),this.encapsulate(i),this}scale(e){return this.boundingBox.scale(e),this.boundingSphere.scale(e),this}isInFrustum(e,t=0){return(t===2||t===3)&&this.boundingSphere.isCenterInFrustum(e)?!0:this.boundingSphere.isInFrustum(e)?t===1||t===3?!0:this.boundingBox.isInFrustum(e):!1}get diagonalLength(){let e=this.boundingBox;return e.maximumWorld.subtractToRef(e.minimumWorld,n._TmpVector3[0]).length()}isCompletelyInFrustum(e){return this.boundingBox.isCompletelyInFrustum(e)}_checkCollision(e){return e._canDoCollision(this.boundingSphere.centerWorld,this.boundingSphere.radiusWorld,this.boundingBox.minimumWorld,this.boundingBox.maximumWorld)}intersectsPoint(e){return!(!this.boundingSphere.centerWorld||!this.boundingSphere.intersectsPoint(e)||!this.boundingBox.intersectsPoint(e))}intersects(e,t){if(!Ju.Intersects(this.boundingSphere,e.boundingSphere)||!df.Intersects(this.boundingBox,e.boundingBox))return!1;if(!t)return!0;let i=this.boundingBox,r=e.boundingBox;return!(!zn(i.directions[0],i,r)||!zn(i.directions[1],i,r)||!zn(i.directions[2],i,r)||!zn(r.directions[0],i,r)||!zn(r.directions[1],i,r)||!zn(r.directions[2],i,r)||!zn(b.Cross(i.directions[0],r.directions[0]),i,r)||!zn(b.Cross(i.directions[0],r.directions[1]),i,r)||!zn(b.Cross(i.directions[0],r.directions[2]),i,r)||!zn(b.Cross(i.directions[1],r.directions[0]),i,r)||!zn(b.Cross(i.directions[1],r.directions[1]),i,r)||!zn(b.Cross(i.directions[1],r.directions[2]),i,r)||!zn(b.Cross(i.directions[2],r.directions[0]),i,r)||!zn(b.Cross(i.directions[2],r.directions[1]),i,r)||!zn(b.Cross(i.directions[2],r.directions[2]),i,r))}};fn._TmpVector3=cn(2,b.Zero)});function TV(n,e,t,i,r=null){let s=new b(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),a=new b(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE);return tm.extractMinAndMaxIndexed(n,e,t,i,s,a),r&&(s.x-=s.x*r.x+r.y,s.y-=s.y*r.x+r.y,s.z-=s.z*r.x+r.y,a.x+=a.x*r.x+r.y,a.y+=a.y*r.x+r.y,a.z+=a.z*r.x+r.y),{minimum:s,maximum:a}}function eA(n,e,t,i=null,r){let s=new b(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),a=new b(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE);return r||(r=3),tm.extractMinAndMax(n,e,t,r,s,a),i&&(s.x-=s.x*i.x+i.y,s.y-=s.y*i.x+i.y,s.z-=s.z*i.x+i.y,a.x+=a.x*i.x+i.y,a.y+=a.y*i.x+i.y,a.z+=a.z*i.x+i.y),{minimum:s,maximum:a}}var tm,tA=C(()=>{kt();Ge();Ut();tm=class{static extractMinAndMaxIndexed(e,t,i,r,s,a){for(let o=i;o!Array.isArray(n[0])&&!Array.isArray(n[1]))],tm,"extractMinAndMaxIndexed",null);P([us.filter((...n)=>!Array.isArray(n[0]))],tm,"extractMinAndMax",null)});var _s,K_=C(()=>{Ui();UC();em();tA();Lh();_s=class n{get materialDefines(){var t;let e=this._mainDrawWrapperOverride?this._mainDrawWrapperOverride.defines:(t=this._getDrawWrapper())==null?void 0:t.defines;return typeof e=="string"?null:e}set materialDefines(e){var i;let t=(i=this._mainDrawWrapperOverride)!=null?i:this._getDrawWrapper(void 0,!0);t.defines=e}_getDrawWrapper(e,t=!1){e=e!=null?e:this._engine.currentRenderPassId;let i=this._drawWrappers[e];return!i&&t&&(this._drawWrappers[e]=i=new Wn(this._mesh.getScene().getEngine())),i}_removeDrawWrapper(e,t=!0,i=!1){var r;t&&((r=this._drawWrappers[e])==null||r.dispose(i)),this._drawWrappers[e]=void 0}get effect(){var e,t;return this._mainDrawWrapperOverride?this._mainDrawWrapperOverride.effect:(t=(e=this._getDrawWrapper())==null?void 0:e.effect)!=null?t:null}get _drawWrapper(){var e;return(e=this._mainDrawWrapperOverride)!=null?e:this._getDrawWrapper(void 0,!0)}get _drawWrapperOverride(){return this._mainDrawWrapperOverride}_setMainDrawWrapperOverride(e){this._mainDrawWrapperOverride=e}setEffect(e,t=null,i,r=!0){let s=this._drawWrapper;s.setEffect(e,t,r),i!==void 0&&(s.materialContext=i),e||(s.defines=null,s.materialContext=void 0)}resetDrawCache(e,t=!1){if(this._drawWrappers)if(e!==void 0){this._removeDrawWrapper(e,!0,t);return}else for(let i of this._drawWrappers)i==null||i.dispose(t);this._drawWrappers=[]}static AddToMesh(e,t,i,r,s,a,o,l=!0){return new n(e,t,i,r,s,a,o,l)}constructor(e,t,i,r,s,a,o,l=!0,c=!0){this.materialIndex=e,this.verticesStart=t,this.verticesCount=i,this.indexStart=r,this.indexCount=s,this._mainDrawWrapperOverride=null,this._linesIndexCount=0,this._linesIndexBuffer=null,this._lastColliderWorldVertices=null,this._lastColliderTransformMatrix=null,this._wasDispatched=!1,this._renderId=0,this._alphaIndex=0,this._distanceToCamera=0,this._currentMaterial=null,this._mesh=a,this._renderingMesh=o||a,c&&a.subMeshes.push(this),this._engine=this._mesh.getScene().getEngine(),this.resetDrawCache(),this._trianglePlanes=[],this._id=a.subMeshes.length-1,l&&(this.refreshBoundingInfo(),a.computeWorldMatrix(!0))}get IsGlobal(){return this.verticesStart===0&&this.verticesCount===this._mesh.getTotalVertices()&&this.indexStart===0&&this.indexCount===this._mesh.getTotalIndices()}getBoundingInfo(){return this.IsGlobal||this._mesh.hasThinInstances?this._mesh.getBoundingInfo():this._boundingInfo}setBoundingInfo(e){return this._boundingInfo=e,this}getMesh(){return this._mesh}getRenderingMesh(){return this._renderingMesh}getReplacementMesh(){return this._mesh._internalAbstractMeshDataInfo._actAsRegularMesh?this._mesh:null}getEffectiveMesh(){let e=this._mesh._internalAbstractMeshDataInfo._actAsRegularMesh?this._mesh:null;return e||this._renderingMesh}getMaterial(e=!0){var i;let t=(i=this._renderingMesh.getMaterialForRenderPass(this._engine.currentRenderPassId))!=null?i:this._renderingMesh.material;if(t){if(this._isMultiMaterial(t)){let r=t.getSubMaterial(this.materialIndex);return this._currentMaterial!==r&&(this._currentMaterial=r,this.resetDrawCache()),r}}else return e&&this._mesh.getScene()._hasDefaultMaterial?this._mesh.getScene().defaultMaterial:null;return t}_isMultiMaterial(e){return e.getSubMaterial!==void 0}refreshBoundingInfo(e=null){if(this._lastColliderWorldVertices=null,this.IsGlobal||!this._renderingMesh||!this._renderingMesh.geometry)return this;if(e||(e=this._renderingMesh.getVerticesData(L.PositionKind)),!e)return this._boundingInfo=this._mesh.getBoundingInfo(),this;let t=this._renderingMesh.getIndices(),i;if(this.indexStart===0&&this.indexCount===t.length){let r=this._renderingMesh.getBoundingInfo();i={minimum:r.minimum.clone(),maximum:r.maximum.clone()}}else i=TV(e,t,this.indexStart,this.indexCount,this._renderingMesh.geometry.boundingBias);return this._boundingInfo?this._boundingInfo.reConstruct(i.minimum,i.maximum):this._boundingInfo=new fn(i.minimum,i.maximum),this}_checkCollision(e){return this.getBoundingInfo()._checkCollision(e)}updateBoundingInfo(e){let t=this.getBoundingInfo();return t||(this.refreshBoundingInfo(),t=this.getBoundingInfo()),t&&t.update(e),this}isInFrustum(e){let t=this.getBoundingInfo();return t?t.isInFrustum(e,this._mesh.cullingStrategy):!1}isCompletelyInFrustum(e){let t=this.getBoundingInfo();return t?t.isCompletelyInFrustum(e):!1}render(e){return this._renderingMesh.render(this,e,this._mesh._internalAbstractMeshDataInfo._actAsRegularMesh?this._mesh:void 0),this}_getLinesIndexBuffer(e,t){if(!this._linesIndexBuffer){let i=Math.floor(this.indexCount/3)*6,s=this.verticesStart+this.verticesCount>65535?new Uint32Array(i):new Uint16Array(i),a=0;if(e.length===0)for(let o=this.indexStart;ol&&(l=d)}return new n(e,o,l-o+1,t,i,r,s,a)}}});var j_,Ie,lr=C(()=>{kt();Ge();Ui();ln();zt();Pt();Ut();BC();S_();K_();j_=class{},Ie=class n{constructor(){this.uniqueId=0,this.metadata={},this._applyTo=vV(this._applyToCoroutine.bind(this)),this.uniqueId=n._UniqueIdGenerator,n._UniqueIdGenerator++}set(e,t){switch(e.length||J.Warn(`Setting vertex data kind '${t}' with an empty array`),t){case L.PositionKind:this.positions=e;break;case L.NormalKind:this.normals=e;break;case L.TangentKind:this.tangents=e;break;case L.UVKind:this.uvs=e;break;case L.UV2Kind:this.uvs2=e;break;case L.UV3Kind:this.uvs3=e;break;case L.UV4Kind:this.uvs4=e;break;case L.UV5Kind:this.uvs5=e;break;case L.UV6Kind:this.uvs6=e;break;case L.ColorKind:this.colors=e;break;case L.MatricesIndicesKind:this.matricesIndices=e;break;case L.MatricesWeightsKind:this.matricesWeights=e;break;case L.MatricesIndicesExtraKind:this.matricesIndicesExtra=e;break;case L.MatricesWeightsExtraKind:this.matricesWeightsExtra=e;break}}applyToMesh(e,t){return this._applyTo(e,t,!1),this}applyToGeometry(e,t){return this._applyTo(e,t,!1),this}updateMesh(e){return this._update(e),this}updateGeometry(e){return this._update(e),this}*_applyToCoroutine(e,t=!1,i){if(this.positions&&(e.setVerticesData(L.PositionKind,this.positions,t),i&&(yield)),this.normals&&(e.setVerticesData(L.NormalKind,this.normals,t),i&&(yield)),this.tangents&&(e.setVerticesData(L.TangentKind,this.tangents,t),i&&(yield)),this.uvs&&(e.setVerticesData(L.UVKind,this.uvs,t),i&&(yield)),this.uvs2&&(e.setVerticesData(L.UV2Kind,this.uvs2,t),i&&(yield)),this.uvs3&&(e.setVerticesData(L.UV3Kind,this.uvs3,t),i&&(yield)),this.uvs4&&(e.setVerticesData(L.UV4Kind,this.uvs4,t),i&&(yield)),this.uvs5&&(e.setVerticesData(L.UV5Kind,this.uvs5,t),i&&(yield)),this.uvs6&&(e.setVerticesData(L.UV6Kind,this.uvs6,t),i&&(yield)),this.colors){let r=this.positions&&this.colors.length===this.positions.length?3:4;e.setVerticesData(L.ColorKind,this.colors,t,r),this.hasVertexAlpha&&e.hasVertexAlpha!==void 0&&(e.hasVertexAlpha=!0),i&&(yield)}if(this.matricesIndices&&(e.setVerticesData(L.MatricesIndicesKind,this.matricesIndices,t),i&&(yield)),this.matricesWeights&&(e.setVerticesData(L.MatricesWeightsKind,this.matricesWeights,t),i&&(yield)),this.matricesIndicesExtra&&(e.setVerticesData(L.MatricesIndicesExtraKind,this.matricesIndicesExtra,t),i&&(yield)),this.matricesWeightsExtra&&(e.setVerticesData(L.MatricesWeightsExtraKind,this.matricesWeightsExtra,t),i&&(yield)),this.indices?(e.setIndices(this.indices,null,t),i&&(yield)):e.setIndices([],null),e.subMeshes&&this.materialInfos&&this.materialInfos.length>1){let r=e;r.subMeshes=[];for(let s of this.materialInfos)new _s(s.materialIndex,s.verticesStart,s.verticesCount,s.indexStart,s.indexCount,r)}return this}_update(e,t,i){return this.positions&&e.updateVerticesData(L.PositionKind,this.positions,t,i),this.normals&&e.updateVerticesData(L.NormalKind,this.normals,t,i),this.tangents&&e.updateVerticesData(L.TangentKind,this.tangents,t,i),this.uvs&&e.updateVerticesData(L.UVKind,this.uvs,t,i),this.uvs2&&e.updateVerticesData(L.UV2Kind,this.uvs2,t,i),this.uvs3&&e.updateVerticesData(L.UV3Kind,this.uvs3,t,i),this.uvs4&&e.updateVerticesData(L.UV4Kind,this.uvs4,t,i),this.uvs5&&e.updateVerticesData(L.UV5Kind,this.uvs5,t,i),this.uvs6&&e.updateVerticesData(L.UV6Kind,this.uvs6,t,i),this.colors&&e.updateVerticesData(L.ColorKind,this.colors,t,i),this.matricesIndices&&e.updateVerticesData(L.MatricesIndicesKind,this.matricesIndices,t,i),this.matricesWeights&&e.updateVerticesData(L.MatricesWeightsKind,this.matricesWeights,t,i),this.matricesIndicesExtra&&e.updateVerticesData(L.MatricesIndicesExtraKind,this.matricesIndicesExtra,t,i),this.matricesWeightsExtra&&e.updateVerticesData(L.MatricesWeightsExtraKind,this.matricesWeightsExtra,t,i),this.indices&&e.setIndices(this.indices,null),this}static _TransformVector3Coordinates(e,t,i=0,r=e.length){let s=Q.Vector3[0],a=Q.Vector3[1];for(let o=i;o({vertexData:o})):[{vertexData:e}];return Y_(this._mergeCoroutine(void 0,a,t,!1,i,r,s))}*_mergeCoroutine(e,t,i=!1,r,s,a=!1,o=!1){var u,m,_,p;this._validate();let l=t.map(g=>g.vertexData),c=this;if(o)for(let g of l)g&&(g._validate(),!this.normals&&g.normals&&(this.normals=new Float32Array(this.positions.length)),!this.tangents&&g.tangents&&(this.tangents=new Float32Array(this.positions.length/3*4)),!this.uvs&&g.uvs&&(this.uvs=new Float32Array(this.positions.length/3*2)),!this.uvs2&&g.uvs2&&(this.uvs2=new Float32Array(this.positions.length/3*2)),!this.uvs3&&g.uvs3&&(this.uvs3=new Float32Array(this.positions.length/3*2)),!this.uvs4&&g.uvs4&&(this.uvs4=new Float32Array(this.positions.length/3*2)),!this.uvs5&&g.uvs5&&(this.uvs5=new Float32Array(this.positions.length/3*2)),!this.uvs6&&g.uvs6&&(this.uvs6=new Float32Array(this.positions.length/3*2)),!this.colors&&g.colors&&(this.colors=new Float32Array(this.positions.length/3*4),this.colors.fill(1)),!this.matricesIndices&&g.matricesIndices&&(this.matricesIndices=new Float32Array(this.positions.length/3*4)),!this.matricesWeights&&g.matricesWeights&&(this.matricesWeights=new Float32Array(this.positions.length/3*4)),!this.matricesIndicesExtra&&g.matricesIndicesExtra&&(this.matricesIndicesExtra=new Float32Array(this.positions.length/3*4)),!this.matricesWeightsExtra&&g.matricesWeightsExtra&&(this.matricesWeightsExtra=new Float32Array(this.positions.length/3*4)));for(let g of l)if(g){if(o)this.normals&&!g.normals&&(g.normals=new Float32Array(g.positions.length)),this.tangents&&!g.tangents&&(g.tangents=new Float32Array(g.positions.length/3*4)),this.uvs&&!g.uvs&&(g.uvs=new Float32Array(g.positions.length/3*2)),this.uvs2&&!g.uvs2&&(g.uvs2=new Float32Array(g.positions.length/3*2)),this.uvs3&&!g.uvs3&&(g.uvs3=new Float32Array(g.positions.length/3*2)),this.uvs4&&!g.uvs4&&(g.uvs4=new Float32Array(g.positions.length/3*2)),this.uvs5&&!g.uvs5&&(g.uvs5=new Float32Array(g.positions.length/3*2)),this.uvs6&&!g.uvs6&&(g.uvs6=new Float32Array(g.positions.length/3*2)),this.colors&&!g.colors&&(g.colors=new Float32Array(g.positions.length/3*4),g.colors.fill(1)),this.matricesIndices&&!g.matricesIndices&&(g.matricesIndices=new Float32Array(g.positions.length/3*4)),this.matricesWeights&&!g.matricesWeights&&(g.matricesWeights=new Float32Array(g.positions.length/3*4)),this.matricesIndicesExtra&&!g.matricesIndicesExtra&&(g.matricesIndicesExtra=new Float32Array(g.positions.length/3*4)),this.matricesWeightsExtra&&!g.matricesWeightsExtra&&(g.matricesWeightsExtra=new Float32Array(g.positions.length/3*4));else if(g._validate(),!this.normals!=!g.normals||!this.tangents!=!g.tangents||!this.uvs!=!g.uvs||!this.uvs2!=!g.uvs2||!this.uvs3!=!g.uvs3||!this.uvs4!=!g.uvs4||!this.uvs5!=!g.uvs5||!this.uvs6!=!g.uvs6||!this.colors!=!g.colors||!this.matricesIndices!=!g.matricesIndices||!this.matricesWeights!=!g.matricesWeights||!this.matricesIndicesExtra!=!g.matricesIndicesExtra||!this.matricesWeightsExtra!=!g.matricesWeightsExtra)throw new Error("Cannot merge vertex data that do not have the same set of attributes")}if(a){let g,v=0,x=0,A=[],S=null,E=[];for(let I of this.splitBasedOnMaterialID())E.push({vertexData:I,transform:e});for(let I of t)if(I.vertexData)for(let y of I.vertexData.splitBasedOnMaterialID())E.push({vertexData:y,transform:I.transform});E.sort((I,y)=>{let M=I.vertexData.materialInfos?I.vertexData.materialInfos[0].materialIndex:0,D=y.vertexData.materialInfos?y.vertexData.materialInfos[0].materialIndex:0;return M>D?1:M===D?0:-1});for(let I of E){let y=I.vertexData;if(y.materialInfos?g=y.materialInfos[0].materialIndex:g=0,S&&S.materialIndex===g)S.indexCount+=y.indices.length,S.verticesCount+=y.positions.length/3;else{let M=new j_;M.materialIndex=g,M.indexStart=v,M.indexCount=y.indices.length,M.verticesStart=x,M.verticesCount=y.positions.length/3,A.push(M),S=M}v+=y.indices.length,x+=y.positions.length/3}let R=E.splice(0,1)[0];c=R.vertexData,e=R.transform,l=E.map(I=>I.vertexData),t=E,this.materialInfos=A}let f=l.reduce((g,v)=>{var x,A;return g+((A=(x=v.indices)==null?void 0:x.length)!=null?A:0)},(m=(u=c.indices)==null?void 0:u.length)!=null?m:0),d=s||l.some(g=>g.indices===c.indices)?(_=c.indices)==null?void 0:_.slice():c.indices;if(f>0){let g=(p=d==null?void 0:d.length)!=null?p:0;if(d||(d=new Array(f)),d.length!==f){if(Array.isArray(d))d.length=f;else{let x=i||d instanceof Uint32Array?new Uint32Array(f):new Uint16Array(f);x.set(d),d=x}e&&e.determinant()<0&&n._FlipFaces(d,0,g)}let v=c.positions?c.positions.length/3:0;for(let{vertexData:x,transform:A}of t)if(x.indices){for(let S=0;S[g.vertexData.positions,g.transform])),r&&(yield),c.normals&&(this.normals=n._MergeElement(L.NormalKind,c.normals,e,t.map(g=>[g.vertexData.normals,g.transform])),r&&(yield)),c.tangents&&(this.tangents=n._MergeElement(L.TangentKind,c.tangents,e,t.map(g=>[g.vertexData.tangents,g.transform])),r&&(yield)),c.uvs&&(this.uvs=n._MergeElement(L.UVKind,c.uvs,e,t.map(g=>[g.vertexData.uvs,g.transform])),r&&(yield)),c.uvs2&&(this.uvs2=n._MergeElement(L.UV2Kind,c.uvs2,e,t.map(g=>[g.vertexData.uvs2,g.transform])),r&&(yield)),c.uvs3&&(this.uvs3=n._MergeElement(L.UV3Kind,c.uvs3,e,t.map(g=>[g.vertexData.uvs3,g.transform])),r&&(yield)),c.uvs4&&(this.uvs4=n._MergeElement(L.UV4Kind,c.uvs4,e,t.map(g=>[g.vertexData.uvs4,g.transform])),r&&(yield)),c.uvs5&&(this.uvs5=n._MergeElement(L.UV5Kind,c.uvs5,e,t.map(g=>[g.vertexData.uvs5,g.transform])),r&&(yield)),c.uvs6&&(this.uvs6=n._MergeElement(L.UV6Kind,c.uvs6,e,t.map(g=>[g.vertexData.uvs6,g.transform])),r&&(yield)),c.colors&&(this.colors=n._MergeElement(L.ColorKind,c.colors,e,t.map(g=>[g.vertexData.colors,g.transform])),(c.hasVertexAlpha!==void 0||t.some(g=>g.vertexData.hasVertexAlpha!==void 0))&&(this.hasVertexAlpha=c.hasVertexAlpha||t.some(g=>g.vertexData.hasVertexAlpha)),r&&(yield)),c.matricesIndices&&(this.matricesIndices=n._MergeElement(L.MatricesIndicesKind,c.matricesIndices,e,t.map(g=>[g.vertexData.matricesIndices,g.transform])),r&&(yield)),c.matricesWeights&&(this.matricesWeights=n._MergeElement(L.MatricesWeightsKind,c.matricesWeights,e,t.map(g=>[g.vertexData.matricesWeights,g.transform])),r&&(yield)),c.matricesIndicesExtra&&(this.matricesIndicesExtra=n._MergeElement(L.MatricesIndicesExtraKind,c.matricesIndicesExtra,e,t.map(g=>[g.vertexData.matricesIndicesExtra,g.transform])),r&&(yield)),c.matricesWeightsExtra&&(this.matricesWeightsExtra=n._MergeElement(L.MatricesWeightsExtraKind,c.matricesWeightsExtra,e,t.map(g=>[g.vertexData.matricesWeightsExtra,g.transform]))),this}static _MergeElement(e,t,i,r){let s=r.filter(l=>l[0]!==null&&l[0]!==void 0);if(!t&&s.length==0)return t;if(!t)return this._MergeElement(e,s[0][0],s[0][1],s.slice(1));let a=s.reduce((l,c)=>l+c[0].length,t.length),o=e===L.PositionKind?n._TransformVector3Coordinates:e===L.NormalKind?n._TransformVector3Normals:e===L.TangentKind?n._TransformVector4Normals:()=>{};if(t instanceof Float32Array){let l=new Float32Array(a);l.set(t),i&&o(l,i,0,t.length);let c=t.length;for(let[f,h]of s)l.set(f,c),h&&o(l,h,c,f.length),c+=f.length;return l}else{let l=new Array(a);for(let f=0;f{let a=L.DeduceStride(r);if(s.length%a!==0)throw new Error("The "+r+"s array count must be a multiple of "+a);return s.length/a},t=e(L.PositionKind,this.positions),i=(r,s)=>{let a=e(r,s);if(a!==t)throw new Error("The "+r+"s element count ("+a+") does not match the positions count ("+t+")")};this.normals&&i(L.NormalKind,this.normals),this.tangents&&i(L.TangentKind,this.tangents),this.uvs&&i(L.UVKind,this.uvs),this.uvs2&&i(L.UV2Kind,this.uvs2),this.uvs3&&i(L.UV3Kind,this.uvs3),this.uvs4&&i(L.UV4Kind,this.uvs4),this.uvs5&&i(L.UV5Kind,this.uvs5),this.uvs6&&i(L.UV6Kind,this.uvs6),this.colors&&i(L.ColorKind,this.colors),this.matricesIndices&&i(L.MatricesIndicesKind,this.matricesIndices),this.matricesWeights&&i(L.MatricesWeightsKind,this.matricesWeights),this.matricesIndicesExtra&&i(L.MatricesIndicesExtraKind,this.matricesIndicesExtra),this.matricesWeightsExtra&&i(L.MatricesWeightsExtraKind,this.matricesWeightsExtra)}clone(){let e=this.serialize();return n.Parse(e)}serialize(){let e={};if(this.positions&&(e.positions=Array.from(this.positions)),this.normals&&(e.normals=Array.from(this.normals)),this.tangents&&(e.tangents=Array.from(this.tangents)),this.uvs&&(e.uvs=Array.from(this.uvs)),this.uvs2&&(e.uvs2=Array.from(this.uvs2)),this.uvs3&&(e.uvs3=Array.from(this.uvs3)),this.uvs4&&(e.uvs4=Array.from(this.uvs4)),this.uvs5&&(e.uvs5=Array.from(this.uvs5)),this.uvs6&&(e.uvs6=Array.from(this.uvs6)),this.colors&&(e.colors=Array.from(this.colors),e.hasVertexAlpha=this.hasVertexAlpha),this.matricesIndices&&(e.matricesIndices=Array.from(this.matricesIndices),e.matricesIndicesExpanded=!0),this.matricesWeights&&(e.matricesWeights=Array.from(this.matricesWeights)),this.matricesIndicesExtra&&(e.matricesIndicesExtra=Array.from(this.matricesIndicesExtra),e.matricesIndicesExtraExpanded=!0),this.matricesWeightsExtra&&(e.matricesWeightsExtra=Array.from(this.matricesWeightsExtra)),e.indices=this.indices?Array.from(this.indices):[],this.materialInfos){e.materialInfos=[];for(let t of this.materialInfos){let i={indexStart:t.indexStart,indexCount:t.indexCount,materialIndex:t.materialIndex,verticesStart:t.verticesStart,verticesCount:t.verticesCount};e.materialInfos.push(i)}}return e}static ExtractFromMesh(e,t,i){return n._ExtractFrom(e,t,i)}static ExtractFromGeometry(e,t,i){return n._ExtractFrom(e,t,i)}static _ExtractFrom(e,t,i){let r=new n;if(e.isVerticesDataPresent(L.PositionKind)&&(r.positions=e.getVerticesData(L.PositionKind,t,i)),e.isVerticesDataPresent(L.NormalKind)&&(r.normals=e.getVerticesData(L.NormalKind,t,i)),e.isVerticesDataPresent(L.TangentKind)&&(r.tangents=e.getVerticesData(L.TangentKind,t,i)),e.isVerticesDataPresent(L.UVKind)&&(r.uvs=e.getVerticesData(L.UVKind,t,i)),e.isVerticesDataPresent(L.UV2Kind)&&(r.uvs2=e.getVerticesData(L.UV2Kind,t,i)),e.isVerticesDataPresent(L.UV3Kind)&&(r.uvs3=e.getVerticesData(L.UV3Kind,t,i)),e.isVerticesDataPresent(L.UV4Kind)&&(r.uvs4=e.getVerticesData(L.UV4Kind,t,i)),e.isVerticesDataPresent(L.UV5Kind)&&(r.uvs5=e.getVerticesData(L.UV5Kind,t,i)),e.isVerticesDataPresent(L.UV6Kind)&&(r.uvs6=e.getVerticesData(L.UV6Kind,t,i)),e.isVerticesDataPresent(L.ColorKind)){let s=e.geometry||e,a=s.getVertexBuffer(L.ColorKind),o=s.getVerticesData(L.ColorKind,t,i);if(a.getSize()===3){let l=new Float32Array(o.length*4/3);for(let c=0,f=0;c!Array.isArray(n[0]))],Ie,"_TransformVector3Coordinates",null);P([us.filter((...n)=>!Array.isArray(n[0]))],Ie,"_TransformVector3Normals",null);P([us.filter((...n)=>!Array.isArray(n[0]))],Ie,"_TransformVector4Normals",null);P([us.filter((...n)=>!Array.isArray(n[0]))],Ie,"_FlipFaces",null)});var Wr,iA=C(()=>{Wr=class n{static get ForceFullSceneLoadingForIncremental(){return n._ForceFullSceneLoadingForIncremental}static set ForceFullSceneLoadingForIncremental(e){n._ForceFullSceneLoadingForIncremental=e}static get ShowLoadingScreen(){return n._ShowLoadingScreen}static set ShowLoadingScreen(e){n._ShowLoadingScreen=e}static get loggingLevel(){return n._LoggingLevel}static set loggingLevel(e){n._LoggingLevel=e}static get CleanBoneMatrixWeights(){return n._CleanBoneMatrixWeights}static set CleanBoneMatrixWeights(e){n._CleanBoneMatrixWeights=e}};Wr._ForceFullSceneLoadingForIncremental=!1;Wr._ShowLoadingScreen=!0;Wr._CleanBoneMatrixWeights=!1;Wr._LoggingLevel=0});var hn,rA=C(()=>{Ge();zt();lr();Ui();K_();iA();em();Ci();sf();tA();Pi();Qr();Hu();hn=class n{get boundingBias(){return this._boundingBias}set boundingBias(e){this._boundingBias?this._boundingBias.copyFrom(e):this._boundingBias=e.clone(),this._updateBoundingInfo(!0,null)}static CreateGeometryForMesh(e){let t=new n(n.RandomId(),e.getScene());return t.applyToMesh(e),t}get meshes(){return this._meshes}constructor(e,t,i,r=!1,s=null,a=null){this.delayLoadState=0,this._totalVertices=0,this._isDisposed=!1,this._extend={minimum:new b(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE),maximum:new b(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE)},this._indexBufferIsUpdatable=!1,this._positionsCache=[],this._parentContainer=null,this.useBoundingInfoFromGeometry=!1,this._scene=t||Le.LastCreatedScene,this._scene&&(this.id=e,this.uniqueId=this._scene.getUniqueId(),this._engine=this._scene.getEngine(),this._meshes=[],this._vertexBuffers={},this._indices=[],this._updatable=r,a!==null&&(this._totalVertices=a),i?this.setAllVerticesData(i,r):a===null&&(this._totalVertices=0),this._engine.getCaps().vertexArrayObject&&(this._vertexArrayObjects={}),s&&(this.applyToMesh(s),s.computeWorldMatrix(!0)))}get extend(){return this._extend}getScene(){return this._scene}getEngine(){return this._engine}isReady(){return this.delayLoadState===1||this.delayLoadState===0}get doNotSerialize(){for(let e=0;e{t._rebuild()})}setAllVerticesData(e,t){e.applyToGeometry(this,t),this._notifyUpdate()}setVerticesData(e,t,i=!1,r){i&&Array.isArray(t)&&(t=new Float32Array(t));let s=new L(this._engine,t,e,{updatable:i,postponeInternalCreation:this._meshes.length===0,stride:r,label:"Geometry_"+this.id+"_"+e});this.setVerticesBuffer(s)}removeVerticesData(e){this._vertexBuffers[e]&&(this._vertexBuffers[e].dispose(),delete this._vertexBuffers[e]),this._vertexArrayObjects&&this._disposeVertexArrayObjects()}setVerticesBuffer(e,t=null,i=!0){let r=e.getKind();this._vertexBuffers[r]&&i&&this._vertexBuffers[r].dispose(),e._buffer&&e._ownsBuffer&&e._buffer._increaseReferences(),this._vertexBuffers[r]=e;let s=this._meshes,a=s.length;if(r===L.PositionKind){this._totalVertices=t!=null?t:e._maxVerticesCount,this._updateExtend(this.useBoundingInfoFromGeometry&&this._boundingInfo?null:e.getFloatData(this._totalVertices)),this._resetPointsArrayCache();let o=this._extend&&this._extend.minimum||new b(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE),l=this._extend&&this._extend.maximum||new b(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE);for(let c=0;c65535:e.is32Bits=r;for(let s of this._meshes)s._createGlobalSubMesh(!0),s.synchronizeInstances();this._notifyUpdate()}setIndices(e,t=null,i=!1,r=!1){this._indexBuffer&&this._engine._releaseBuffer(this._indexBuffer),this._indices=e,this._indexBufferIsUpdatable=i,this._meshes.length!==0&&this._indices&&(this._indexBuffer=this._engine.createIndexBuffer(this._indices,i,"Geometry_"+this.id+"_IndexBuffer")),t!=null&&(this._totalVertices=t);for(let s of this._meshes)s._createGlobalSubMesh(!r),s.synchronizeInstances();this._notifyUpdate()}getTotalIndices(){return this.isReady()?this._totalIndices!==void 0?this._totalIndices:this._indices.length:0}getIndices(e,t){if(!this.isReady())return null;let i=this._indices;return!t&&(!e||this._meshes.length===1)?i:i.slice()}getIndexBuffer(){return this.isReady()?this._indexBuffer:null}_releaseVertexArrayObject(e=null){!e||!this._vertexArrayObjects||this._vertexArrayObjects[e.key]&&(this._engine.releaseVertexArrayObject(this._vertexArrayObjects[e.key]),delete this._vertexArrayObjects[e.key])}releaseForMesh(e,t){let i=this._meshes,r=i.indexOf(e);r!==-1&&(i.splice(r,1),this._vertexArrayObjects&&e._invalidateInstanceVertexArrayObject(),e._geometry=null,i.length===0&&t&&this.dispose())}applyToMesh(e){if(e._geometry===this)return;let t=e._geometry;t&&t.releaseForMesh(e),this._vertexArrayObjects&&e._invalidateInstanceVertexArrayObject();let i=this._meshes;e._geometry=this,e._internalAbstractMeshDataInfo._positions=null,this._scene.pushGeometry(this),i.push(e),this.isReady()?this._applyToMesh(e):this._boundingInfo&&e.setBoundingInfo(this._boundingInfo)}_updateExtend(e=null){if(this.useBoundingInfoFromGeometry&&this._boundingInfo)this._extend={minimum:this._boundingInfo.minimum.clone(),maximum:this._boundingInfo.maximum.clone()};else{if(!e&&(e=this.getVerticesData(L.PositionKind),!e))return;this._extend=eA(e,0,this._totalVertices,this.boundingBias,3)}}_applyToMesh(e){for(let t in this._vertexBuffers){let i=this._vertexBuffers[t];i._buffer.getBuffer()||i.create(),t===L.PositionKind&&(this._extend||this._updateExtend(),e.buildBoundingInfo(this._extend.minimum,this._extend.maximum),e._createGlobalSubMesh(e.isUnIndexed),e._updateBoundingInfo())}!this._indexBuffer&&this._indices&&this._indices.length>0&&(this._indexBuffer=this._engine.createIndexBuffer(this._indices,this._updatable,"Geometry_"+this.id+"_IndexBuffer")),e._syncGeometryWithMorphTargetManager(),e.synchronizeInstances()}_notifyUpdate(e){this.onGeometryUpdated&&this.onGeometryUpdated(this,e),this._vertexArrayObjects&&this._disposeVertexArrayObjects();for(let t of this._meshes)t._markSubMeshesAsAttributesDirty()}load(e,t){if(this.delayLoadState!==2){if(this.isReady()){t&&t();return}this.delayLoadState=2,this._queueLoad(e,t)}}_queueLoad(e,t){this.delayLoadingFile&&(e.addPendingData(this),e._loadFile(this.delayLoadingFile,i=>{if(!this._delayLoadingFunction)return;this._delayLoadingFunction(JSON.parse(i),this),this.delayLoadState=1,this._delayInfo=[],e.removePendingData(this);let r=this._meshes,s=r.length;for(let a=0;a0){for(let r=0;r0){for(let r=0;r0){for(let r=0;r-1&&this._parentContainer.geometries.splice(r,1),this._parentContainer=null}this._isDisposed=!0}copy(e){let t=new n(e,this._scene),i=this.getIndices(void 0,!0);i&&t.setIndices(i);let r=!1,s;for(s in this._vertexBuffers){let a=this.getVertexBuffer(s),o=a.getData();if(!o)continue;let l=a.isUpdatable(),c=a.getSize(),{type:f,byteOffset:h,byteStride:d,normalized:u}=a;r=r||l;let m=this._totalVertices;if(a.getIsInstanced()){let g;o instanceof Array?g=o.length*4:g=o.byteLength,m=g/d}let _=Y3(o,c,f,h,d,m,!0),p=new L(this._engine,_,s,{updatable:l,useBytes:!1,stride:c,size:c,offset:0,type:f,normalized:u,takeBufferOwnership:!0,instanced:a.getIsInstanced()});t.setVerticesBuffer(p,m)}t._updatable=r,t.delayLoadState=this.delayLoadState,t.delayLoadingFile=this.delayLoadingFile,t._delayLoadingFunction=this._delayLoadingFunction;for(s in this._delayInfo)t._delayInfo=t._delayInfo||[],t._delayInfo.push(s);return t._boundingInfo=new fn(this._extend.minimum,this._extend.maximum),t}serialize(){let e={};return e.id=this.id,e.uniqueId=this.uniqueId,e.updatable=this._updatable,Zt&&Zt.HasTags(this)&&(e.tags=Zt.GetTags(this)),e}_toNumberArray(e){return Array.isArray(e)?e:Array.prototype.slice.call(e)}clearCachedData(){this._totalIndices=this._indices.length,this._indices=[],this._resetPointsArrayCache();for(let e in this._vertexBuffers)Object.prototype.hasOwnProperty.call(this._vertexBuffers,e)&&(this._vertexBuffers[e]._buffer._data=null)}serializeVerticeData(){let e=this.serialize();return this.isVerticesDataPresent(L.PositionKind)&&(e.positions=this._toNumberArray(this.getVerticesData(L.PositionKind)),this.isVertexBufferUpdatable(L.PositionKind)&&(e.positionsUpdatable=!0)),this.isVerticesDataPresent(L.NormalKind)&&(e.normals=this._toNumberArray(this.getVerticesData(L.NormalKind)),this.isVertexBufferUpdatable(L.NormalKind)&&(e.normalsUpdatable=!0)),this.isVerticesDataPresent(L.TangentKind)&&(e.tangents=this._toNumberArray(this.getVerticesData(L.TangentKind)),this.isVertexBufferUpdatable(L.TangentKind)&&(e.tangentsUpdatable=!0)),this.isVerticesDataPresent(L.UVKind)&&(e.uvs=this._toNumberArray(this.getVerticesData(L.UVKind)),this.isVertexBufferUpdatable(L.UVKind)&&(e.uvsUpdatable=!0)),this.isVerticesDataPresent(L.UV2Kind)&&(e.uvs2=this._toNumberArray(this.getVerticesData(L.UV2Kind)),this.isVertexBufferUpdatable(L.UV2Kind)&&(e.uvs2Updatable=!0)),this.isVerticesDataPresent(L.UV3Kind)&&(e.uvs3=this._toNumberArray(this.getVerticesData(L.UV3Kind)),this.isVertexBufferUpdatable(L.UV3Kind)&&(e.uvs3Updatable=!0)),this.isVerticesDataPresent(L.UV4Kind)&&(e.uvs4=this._toNumberArray(this.getVerticesData(L.UV4Kind)),this.isVertexBufferUpdatable(L.UV4Kind)&&(e.uvs4Updatable=!0)),this.isVerticesDataPresent(L.UV5Kind)&&(e.uvs5=this._toNumberArray(this.getVerticesData(L.UV5Kind)),this.isVertexBufferUpdatable(L.UV5Kind)&&(e.uvs5Updatable=!0)),this.isVerticesDataPresent(L.UV6Kind)&&(e.uvs6=this._toNumberArray(this.getVerticesData(L.UV6Kind)),this.isVertexBufferUpdatable(L.UV6Kind)&&(e.uvs6Updatable=!0)),this.isVerticesDataPresent(L.ColorKind)&&(e.colors=this._toNumberArray(this.getVerticesData(L.ColorKind)),this.isVertexBufferUpdatable(L.ColorKind)&&(e.colorsUpdatable=!0)),this.isVerticesDataPresent(L.MatricesIndicesKind)&&(e.matricesIndices=this._toNumberArray(this.getVerticesData(L.MatricesIndicesKind)),e.matricesIndicesExpanded=!0,this.isVertexBufferUpdatable(L.MatricesIndicesKind)&&(e.matricesIndicesUpdatable=!0)),this.isVerticesDataPresent(L.MatricesWeightsKind)&&(e.matricesWeights=this._toNumberArray(this.getVerticesData(L.MatricesWeightsKind)),this.isVertexBufferUpdatable(L.MatricesWeightsKind)&&(e.matricesWeightsUpdatable=!0)),e.indices=this._toNumberArray(this.getIndices()),e}static ExtractFromMesh(e,t){let i=e._geometry;return i?i.copy(t):null}static RandomId(){return de.RandomId()}static _GetGeometryByLoadedUniqueId(e,t){for(let i=0;i0){let o=new Float32Array(e,a.positionsAttrDesc.offset,a.positionsAttrDesc.count);t.setVerticesData(L.PositionKind,o,!1)}if(a.normalsAttrDesc&&a.normalsAttrDesc.count>0){let o=new Float32Array(e,a.normalsAttrDesc.offset,a.normalsAttrDesc.count);t.setVerticesData(L.NormalKind,o,!1)}if(a.tangetsAttrDesc&&a.tangetsAttrDesc.count>0){let o=new Float32Array(e,a.tangetsAttrDesc.offset,a.tangetsAttrDesc.count);t.setVerticesData(L.TangentKind,o,!1)}if(a.uvsAttrDesc&&a.uvsAttrDesc.count>0){let o=new Float32Array(e,a.uvsAttrDesc.offset,a.uvsAttrDesc.count);if(It)for(let l=1;l0){let o=new Float32Array(e,a.uvs2AttrDesc.offset,a.uvs2AttrDesc.count);if(It)for(let l=1;l0){let o=new Float32Array(e,a.uvs3AttrDesc.offset,a.uvs3AttrDesc.count);if(It)for(let l=1;l0){let o=new Float32Array(e,a.uvs4AttrDesc.offset,a.uvs4AttrDesc.count);if(It)for(let l=1;l0){let o=new Float32Array(e,a.uvs5AttrDesc.offset,a.uvs5AttrDesc.count);if(It)for(let l=1;l0){let o=new Float32Array(e,a.uvs6AttrDesc.offset,a.uvs6AttrDesc.count);if(It)for(let l=1;l0){let o=new Float32Array(e,a.colorsAttrDesc.offset,a.colorsAttrDesc.count);t.setVerticesData(L.ColorKind,o,!1,a.colorsAttrDesc.stride)}if(a.matricesIndicesAttrDesc&&a.matricesIndicesAttrDesc.count>0){let o=new Int32Array(e,a.matricesIndicesAttrDesc.offset,a.matricesIndicesAttrDesc.count),l=[];for(let c=0;c>8),l.push((f&16711680)>>16),l.push(f>>24&255)}t.setVerticesData(L.MatricesIndicesKind,l,!1)}if(a.matricesIndicesExtraAttrDesc&&a.matricesIndicesExtraAttrDesc.count>0){let o=new Int32Array(e,a.matricesIndicesExtraAttrDesc.offset,a.matricesIndicesExtraAttrDesc.count),l=[];for(let c=0;c>8),l.push((f&16711680)>>16),l.push(f>>24&255)}t.setVerticesData(L.MatricesIndicesExtraKind,l,!1)}if(a.matricesWeightsAttrDesc&&a.matricesWeightsAttrDesc.count>0){let o=new Float32Array(e,a.matricesWeightsAttrDesc.offset,a.matricesWeightsAttrDesc.count);t.setVerticesData(L.MatricesWeightsKind,o,!1)}if(a.indicesAttrDesc&&a.indicesAttrDesc.count>0){let o=new Int32Array(e,a.indicesAttrDesc.offset,a.indicesAttrDesc.count);t.setIndices(o,null)}if(a.subMeshesAttrDesc&&a.subMeshesAttrDesc.count>0){let o=new Int32Array(e,a.subMeshesAttrDesc.offset,a.subMeshesAttrDesc.count*5);t.subMeshes=[];for(let l=0;l>8),a.push((l&16711680)>>16),a.push(l>>24&255)}t.setVerticesData(L.MatricesIndicesKind,a,e.matricesIndices._updatable||e.matricesIndicesUpdatable)}else delete e.matricesIndices._isExpanded,delete e.matricesIndicesExpanded,t.setVerticesData(L.MatricesIndicesKind,e.matricesIndices,e.matricesIndices._updatable||e.matricesIndicesUpdatable);if(e.matricesIndicesExtra)if(e.matricesIndicesExtraExpanded||e.matricesIndicesExtra._isExpanded)delete e.matricesIndices._isExpanded,delete e.matricesIndicesExtraExpanded,t.setVerticesData(L.MatricesIndicesExtraKind,e.matricesIndicesExtra,e.matricesIndicesExtra._updatable||e.matricesIndicesExtraUpdatable);else{let a=[];for(let o=0;o>8),a.push((l&16711680)>>16),a.push(l>>24&255)}t.setVerticesData(L.MatricesIndicesExtraKind,a,e.matricesIndicesExtra._updatable||e.matricesIndicesExtraUpdatable)}e.matricesWeights&&(n._CleanMatricesWeights(e,t),t.setVerticesData(L.MatricesWeightsKind,e.matricesWeights,e.matricesWeights._updatable)),e.matricesWeightsExtra&&t.setVerticesData(L.MatricesWeightsExtraKind,e.matricesWeightsExtra,e.matricesWeights._updatable),t.setIndices(e.indices,null)}if(e.subMeshes){t.subMeshes=[];for(let a=0;a-1){let h=t.getScene().getLastSkeletonById(e.skeletonId);if(!h)return;r=h.bones.length}else return;let s=t.getVerticesData(L.MatricesIndicesKind),a=t.getVerticesData(L.MatricesIndicesExtraKind),o=e.matricesWeights,l=e.matricesWeightsExtra,c=e.numBoneInfluencer,f=o.length;for(let h=0;hc-1)&&(u=c-1),d>.001){let m=1/d;for(let _=0;_<4;_++)o[h+_]*=m;if(l)for(let _=0;_<4;_++)l[h+_]*=m}else u>=4?(l[h+u-4]=1-d,a[h+u-4]=r):(o[h+u]=1-d,s[h+u]=r)}t.setVerticesData(L.MatricesIndicesKind,s),e.matricesWeightsExtra&&t.setVerticesData(L.MatricesIndicesExtraKind,a)}static Parse(e,t,i){let r=new n(e.id,t,void 0,e.updatable);return r._loadedUniqueId=e.uniqueId,Zt&&Zt.AddTagsTo(r,e.tags),e.delayLoadingFile?(r.delayLoadState=4,r.delayLoadingFile=i+e.delayLoadingFile,r._boundingInfo=new fn(b.FromArray(e.boundingBoxMinimum),b.FromArray(e.boundingBoxMaximum)),r._delayInfo=[],e.hasUVs&&r._delayInfo.push(L.UVKind),e.hasUVs2&&r._delayInfo.push(L.UV2Kind),e.hasUVs3&&r._delayInfo.push(L.UV3Kind),e.hasUVs4&&r._delayInfo.push(L.UV4Kind),e.hasUVs5&&r._delayInfo.push(L.UV5Kind),e.hasUVs6&&r._delayInfo.push(L.UV6Kind),e.hasColors&&r._delayInfo.push(L.ColorKind),e.hasMatricesIndices&&r._delayInfo.push(L.MatricesIndicesKind),e.hasMatricesWeights&&r._delayInfo.push(L.MatricesWeightsKind),r._delayLoadingFunction=Ie.ImportVertexData):Ie.ImportVertexData(e,r),t.pushGeometry(r,!0),r}}});var $t,kh=C(()=>{kt();Ut();Er();hi();Ge();zs();Vi();$t=class n extends _i{get billboardMode(){return this._billboardMode}set billboardMode(e){this._billboardMode!==e&&(this._billboardMode=e,this._cache.useBillboardPosition=(this._billboardMode&n.BILLBOARDMODE_USE_POSITION)!==0)}get infiniteDistance(){return this._infiniteDistance}set infiniteDistance(e){this._infiniteDistance!==e&&(this._infiniteDistance=e)}constructor(e,t=null,i=!0){super(e,t,!1),this._forward=new b(0,0,1),this._up=new b(0,1,0),this._right=new b(1,0,0),this._position=b.Zero(),this._rotation=b.Zero(),this._rotationQuaternion=null,this._scaling=b.One(),this._transformToBoneReferal=null,this._isAbsoluteSynced=!1,this._billboardMode=n.BILLBOARDMODE_NONE,this.scalingDeterminant=1,this._infiniteDistance=!1,this.ignoreNonUniformScaling=!1,this.reIntegrateRotationIntoRotationQuaternion=!1,this._poseMatrix=null,this._localMatrix=K.Zero(),this._usePivotMatrix=!1,this._absolutePosition=b.Zero(),this._absoluteScaling=b.Zero(),this._absoluteRotationQuaternion=ze.Identity(),this._pivotMatrix=K.Identity(),this._postMultiplyPivotMatrix=!1,this._isWorldMatrixFrozen=!1,this._indexInSceneTransformNodesArray=-1,this.onAfterWorldMatrixUpdateObservable=new te,this._nonUniformScaling=!1,i&&this.getScene().addTransformNode(this)}getClassName(){return"TransformNode"}get position(){return this._position}set position(e){this._position=e,this._markAsDirtyInternal()}isUsingPivotMatrix(){return this._usePivotMatrix}isUsingPostMultiplyPivotMatrix(){return this._postMultiplyPivotMatrix}get rotation(){return this._rotation}set rotation(e){this._rotation=e,this._rotationQuaternion=null,this._markAsDirtyInternal()}get scaling(){return this._scaling}set scaling(e){this._scaling=e,this._markAsDirtyInternal()}get rotationQuaternion(){return this._rotationQuaternion}set rotationQuaternion(e){this._rotationQuaternion=e,e&&this._rotation.setAll(0),this._markAsDirtyInternal()}_markAsDirtyInternal(){this._isDirty||(this._isDirty=!0,this.customMarkAsDirty&&this.customMarkAsDirty())}get forward(){return b.TransformNormalFromFloatsToRef(0,0,this.getScene().useRightHandedSystem?-1:1,this.getWorldMatrix(),this._forward),this._forward.normalize()}get up(){return b.TransformNormalFromFloatsToRef(0,1,0,this.getWorldMatrix(),this._up),this._up.normalize()}get right(){return b.TransformNormalFromFloatsToRef(this.getScene().useRightHandedSystem?-1:1,0,0,this.getWorldMatrix(),this._right),this._right.normalize()}updatePoseMatrix(e){return this._poseMatrix?(this._poseMatrix.copyFrom(e),this):(this._poseMatrix=e.clone(),this)}getPoseMatrix(){return this._poseMatrix||(this._poseMatrix=K.Identity()),this._poseMatrix}_isSynchronized(){let e=this._cache;return!(this._billboardMode!==e.billboardMode||this._billboardMode!==n.BILLBOARDMODE_NONE||e.pivotMatrixUpdated||this._infiniteDistance||this._position._isDirty||this._scaling._isDirty||this._rotationQuaternion&&this._rotationQuaternion._isDirty||this._rotation._isDirty)}_initCache(){super._initCache();let e=this._cache;e.localMatrixUpdated=!1,e.billboardMode=-1,e.infiniteDistance=!1,e.useBillboardPosition=!1}get absolutePosition(){return this.getAbsolutePosition()}get absoluteScaling(){return this._syncAbsoluteScalingAndRotation(),this._absoluteScaling}get absoluteRotationQuaternion(){return this._syncAbsoluteScalingAndRotation(),this._absoluteRotationQuaternion}setPreTransformMatrix(e){return this.setPivotMatrix(e,!1)}setPivotMatrix(e,t=!0){return this._pivotMatrix.copyFrom(e),this._usePivotMatrix=!this._pivotMatrix.isIdentity(),this._cache.pivotMatrixUpdated=!0,this._postMultiplyPivotMatrix=t,this._postMultiplyPivotMatrix&&(this._pivotMatrixInverse?this._pivotMatrix.invertToRef(this._pivotMatrixInverse):this._pivotMatrixInverse=K.Invert(this._pivotMatrix)),this}getPivotMatrix(){return this._pivotMatrix}instantiateHierarchy(e=null,t,i){let r=this.clone("Clone of "+(this.name||this.id),e||this.parent,!0);r&&i&&i(this,r);for(let s of this.getChildTransformNodes(!0))s.instantiateHierarchy(r,t,i);return r}freezeWorldMatrix(e=null,t=!1){return e?t?(this._rotation.setAll(0),this._rotationQuaternion=this._rotationQuaternion||ze.Identity(),e.decompose(this._scaling,this._rotationQuaternion,this._position),this.computeWorldMatrix(!0)):(this._worldMatrix=e,this._absolutePosition.copyFromFloats(this._worldMatrix.m[12],this._worldMatrix.m[13],this._worldMatrix.m[14]),this._afterComputeWorldMatrix()):(this._isWorldMatrixFrozen=!1,this.computeWorldMatrix(!0)),this._isDirty=!1,this._isWorldMatrixFrozen=!0,this}unfreezeWorldMatrix(){return this._isWorldMatrixFrozen=!1,this.computeWorldMatrix(!0),this}get isWorldMatrixFrozen(){return this._isWorldMatrixFrozen}getAbsolutePosition(){return this.computeWorldMatrix(),this._absolutePosition}setAbsolutePosition(e){if(!e)return this;let t,i,r;if(e.x===void 0){if(arguments.length<3)return this;t=arguments[0],i=arguments[1],r=arguments[2]}else t=e.x,i=e.y,r=e.z;if(this.parent){let s=Q.Matrix[0];this.parent.getWorldMatrix().invertToRef(s),b.TransformCoordinatesFromFloatsToRef(t,i,r,s,this.position)}else this.position.x=t,this.position.y=i,this.position.z=r;return this._absolutePosition.copyFrom(e),this}setPositionWithLocalVector(e){return this.computeWorldMatrix(),this.position=b.TransformNormal(e,this._localMatrix),this}getPositionExpressedInLocalSpace(){this.computeWorldMatrix();let e=Q.Matrix[0];return this._localMatrix.invertToRef(e),b.TransformNormal(this.position,e)}locallyTranslate(e){return this.computeWorldMatrix(!0),this.position=b.TransformCoordinates(e,this._localMatrix),this}lookAt(e,t=0,i=0,r=0,s=0){let a=n._LookAtVectorCache,o=s===0?this.position:this.getAbsolutePosition();if(e.subtractToRef(o,a),this.setDirection(a,t,i,r),s===1&&this.parent)if(this.rotationQuaternion){let l=Q.Matrix[0];this.rotationQuaternion.toRotationMatrix(l);let c=Q.Matrix[1];this.parent.getWorldMatrix().getRotationMatrixToRef(c),c.invert(),l.multiplyToRef(c,l),this.rotationQuaternion.fromRotationMatrix(l)}else{let l=Q.Quaternion[0];ze.FromEulerVectorToRef(this.rotation,l);let c=Q.Matrix[0];l.toRotationMatrix(c);let f=Q.Matrix[1];this.parent.getWorldMatrix().getRotationMatrixToRef(f),f.invert(),c.multiplyToRef(f,c),l.fromRotationMatrix(c),l.toEulerAnglesToRef(this.rotation)}return this}getDirection(e){let t=b.Zero();return this.getDirectionToRef(e,t),t}getDirectionToRef(e,t){return b.TransformNormalToRef(e,this.getWorldMatrix(),t),this}setDirection(e,t=0,i=0,r=0){let s=-Math.atan2(e.z,e.x)+Math.PI/2,a=Math.sqrt(e.x*e.x+e.z*e.z),o=-Math.atan2(e.y,a);return this.rotationQuaternion?ze.RotationYawPitchRollToRef(s+t,o+i,r,this.rotationQuaternion):(this.rotation.x=o+i,this.rotation.y=s+t,this.rotation.z=r),this}setPivotPoint(e,t=0){this.getScene().getRenderId()==0&&this.computeWorldMatrix(!0);let i=this.getWorldMatrix();if(t==1){let r=Q.Matrix[0];i.invertToRef(r),e=b.TransformCoordinates(e,r)}return this.setPivotMatrix(K.Translation(-e.x,-e.y,-e.z),!0)}getPivotPoint(){let e=b.Zero();return this.getPivotPointToRef(e),e}getPivotPointToRef(e){return e.x=-this._pivotMatrix.m[12],e.y=-this._pivotMatrix.m[13],e.z=-this._pivotMatrix.m[14],this}getAbsolutePivotPoint(){let e=b.Zero();return this.getAbsolutePivotPointToRef(e),e}getAbsolutePivotPointToRef(e){return this.getPivotPointToRef(e),b.TransformCoordinatesToRef(e,this.getWorldMatrix(),e),this}markAsDirty(e){if(this._isDirty)return this;if(this._children)for(let t of this._children)t.markAsDirty(e);return super.markAsDirty(e)}setParent(e,t=!1,i=!1){if(!e&&!this.parent)return this;let r=Q.Quaternion[0],s=Q.Vector3[0],a=Q.Vector3[1],o=Q.Matrix[1];K.IdentityToRef(o);let l=Q.Matrix[0];this.computeWorldMatrix(!0);let c=this.rotationQuaternion;return c||(c=n._TmpRotation,ze.RotationYawPitchRollToRef(this._rotation.y,this._rotation.x,this._rotation.z,c)),K.ComposeToRef(this.scaling,c,this.position,l),this.parent&&l.multiplyToRef(this.parent.computeWorldMatrix(!0),l),e&&(e.computeWorldMatrix(!0).invertToRef(o),l.multiplyToRef(o,l)),l.decompose(a,r,s,t?this:void 0),this.rotationQuaternion?this.rotationQuaternion.copyFrom(r):r.toEulerAnglesToRef(this.rotation),this.scaling.copyFrom(a),this.position.copyFrom(s),this.parent=e,i&&this.setPivotMatrix(K.Identity()),this}addChild(e,t=!1){return e.setParent(this,t),this}removeChild(e,t=!1){return e.parent!==this?this:(e.setParent(null,t),this)}get nonUniformScaling(){return this._nonUniformScaling}_updateNonUniformScalingState(e){return this._nonUniformScaling===e?!1:(this._nonUniformScaling=e,!0)}attachToBone(e,t){return this._currentParentWhenAttachingToBone=this.parent,this._transformToBoneReferal=t,this.parent=e,e.getSkeleton().prepare(!0),e.getFinalMatrix().determinant()<0&&(this.scalingDeterminant*=-1),this}detachFromBone(e=!1){return this.parent?(this.parent.getWorldMatrix().determinant()<0&&(this.scalingDeterminant*=-1),this._transformToBoneReferal=null,e?this.parent=this._currentParentWhenAttachingToBone:this.parent=null,this):(e&&(this.parent=this._currentParentWhenAttachingToBone),this)}rotate(e,t,i){e.normalize(),this.rotationQuaternion||(this.rotationQuaternion=this.rotation.toQuaternion(),this.rotation.setAll(0));let r;if(!i||i===0)r=ze.RotationAxisToRef(e,t,n._RotationAxisCache),this.rotationQuaternion.multiplyToRef(r,this.rotationQuaternion);else{if(this.parent){let s=this.parent.getWorldMatrix(),a=Q.Matrix[0];s.invertToRef(a),e=b.TransformNormal(e,a),s.determinant()<0&&(t*=-1)}r=ze.RotationAxisToRef(e,t,n._RotationAxisCache),r.multiplyToRef(this.rotationQuaternion,this.rotationQuaternion)}return this}rotateAround(e,t,i){t.normalize(),this.rotationQuaternion||(this.rotationQuaternion=ze.RotationYawPitchRoll(this.rotation.y,this.rotation.x,this.rotation.z),this.rotation.setAll(0));let r=Q.Vector3[0],s=Q.Vector3[1],a=Q.Vector3[2],o=Q.Quaternion[0],l=Q.Matrix[0],c=Q.Matrix[1],f=Q.Matrix[2],h=Q.Matrix[3];return e.subtractToRef(this.position,r),K.TranslationToRef(r.x,r.y,r.z,l),K.TranslationToRef(-r.x,-r.y,-r.z,c),K.RotationAxisToRef(t,i,f),c.multiplyToRef(f,h),h.multiplyToRef(l,h),h.decompose(s,o,a),this.position.addInPlace(a),o.multiplyToRef(this.rotationQuaternion,this.rotationQuaternion),this}translate(e,t,i){let r=e.scale(t);if(!i||i===0){let s=this.getPositionExpressedInLocalSpace().add(r);this.setPositionWithLocalVector(s)}else this.setAbsolutePosition(this.getAbsolutePosition().add(r));return this}addRotation(e,t,i){let r;this.rotationQuaternion?r=this.rotationQuaternion:(r=Q.Quaternion[1],ze.RotationYawPitchRollToRef(this.rotation.y,this.rotation.x,this.rotation.z,r));let s=Q.Quaternion[0];return ze.RotationYawPitchRollToRef(t,e,i,s),r.multiplyInPlace(s),this.rotationQuaternion||r.toEulerAnglesToRef(this.rotation),this}_getEffectiveParent(){return this.parent}isWorldMatrixCameraDependent(){return this._infiniteDistance&&!this.parent||this._billboardMode!==n.BILLBOARDMODE_NONE}computeWorldMatrix(e=!1,t=null){if(this._isWorldMatrixFrozen&&!this._isDirty)return this._worldMatrix;let i=this.getScene().getRenderId();if(!this._isDirty&&!e&&(this._currentRenderId===i||this.isSynchronized()))return this._currentRenderId=i,this._worldMatrix;t=t||this.getScene().activeCamera,this._updateCache();let r=this._cache;r.pivotMatrixUpdated=!1,r.billboardMode=this.billboardMode,r.infiniteDistance=this.infiniteDistance,r.parent=this._parentNode,this._currentRenderId=i,this._childUpdateId+=1,this._isDirty=!1,this._position._isDirty=!1,this._rotation._isDirty=!1,this._scaling._isDirty=!1;let s=this._getEffectiveParent(),a=n._TmpScaling,o=this._position;if(this._infiniteDistance&&!this.parent&&t){let f=t.getWorldMatrix().m;o=n._TmpTranslation,o.copyFromFloats(this._position.x+f[12],this._position.y+f[13],this._position.z+f[14])}a.copyFromFloats(this._scaling.x*this.scalingDeterminant,this._scaling.y*this.scalingDeterminant,this._scaling.z*this.scalingDeterminant);let l;if(this._rotationQuaternion?(this._rotationQuaternion._isDirty=!1,l=this._rotationQuaternion,this.reIntegrateRotationIntoRotationQuaternion&&this.rotation.lengthSquared()&&(this._rotationQuaternion.multiplyInPlace(ze.RotationYawPitchRoll(this._rotation.y,this._rotation.x,this._rotation.z)),this._rotation.copyFromFloats(0,0,0))):(l=n._TmpRotation,ze.RotationYawPitchRollToRef(this._rotation.y,this._rotation.x,this._rotation.z,l)),this._usePivotMatrix){let c=Q.Matrix[1];K.ScalingToRef(a.x,a.y,a.z,c);let f=Q.Matrix[0];l.toRotationMatrix(f),this._pivotMatrix.multiplyToRef(c,Q.Matrix[4]),Q.Matrix[4].multiplyToRef(f,this._localMatrix),this._postMultiplyPivotMatrix&&this._localMatrix.multiplyToRef(this._pivotMatrixInverse,this._localMatrix),this._localMatrix.addTranslationFromFloats(o.x,o.y,o.z)}else K.ComposeToRef(a,l,o,this._localMatrix);if(s&&s.getWorldMatrix){if(e&&s.computeWorldMatrix(e),this.billboardMode){if(this._transformToBoneReferal){let d=this.parent;d.getSkeleton().prepare(),d.getFinalMatrix().multiplyToRef(this._transformToBoneReferal.getWorldMatrix(),Q.Matrix[7])}else Q.Matrix[7].copyFrom(s.getWorldMatrix());let c=Q.Vector3[5],f=Q.Vector3[6],h=Q.Quaternion[0];Q.Matrix[7].decompose(f,h,c),K.ScalingToRef(f.x,f.y,f.z,Q.Matrix[7]),Q.Matrix[7].setTranslation(c),n.BillboardUseParentOrientation&&(this._position.applyRotationQuaternionToRef(h,c),this._localMatrix.setTranslation(c)),this._localMatrix.multiplyToRef(Q.Matrix[7],this._worldMatrix)}else if(this._transformToBoneReferal){let c=this.parent;c.getSkeleton().prepare(),this._localMatrix.multiplyToRef(c.getFinalMatrix(),Q.Matrix[6]),Q.Matrix[6].multiplyToRef(this._transformToBoneReferal.getWorldMatrix(),this._worldMatrix)}else this._localMatrix.multiplyToRef(s.getWorldMatrix(),this._worldMatrix);this._markSyncedWithParent()}else this._worldMatrix.copyFrom(this._localMatrix);if(t&&this.billboardMode)if(r.useBillboardPosition){let c=Q.Vector3[0];this._worldMatrix.getTranslationToRef(c);let f=t.globalPosition;this._worldMatrix.invertToRef(Q.Matrix[1]);let h=Q.Vector3[1];b.TransformCoordinatesToRef(f,Q.Matrix[1],h),h.normalize();let d=-Math.atan2(h.z,h.x)+Math.PI/2,u=Math.sqrt(h.x*h.x+h.z*h.z),m=-Math.atan2(h.y,u);if(ze.RotationYawPitchRollToRef(d,m,0,Q.Quaternion[0]),(this.billboardMode&n.BILLBOARDMODE_ALL)!==n.BILLBOARDMODE_ALL){let _=Q.Vector3[1];Q.Quaternion[0].toEulerAnglesToRef(_),(this.billboardMode&n.BILLBOARDMODE_X)!==n.BILLBOARDMODE_X&&(_.x=0),(this.billboardMode&n.BILLBOARDMODE_Y)!==n.BILLBOARDMODE_Y&&(_.y=0),(this.billboardMode&n.BILLBOARDMODE_Z)!==n.BILLBOARDMODE_Z&&(_.z=0),K.RotationYawPitchRollToRef(_.y,_.x,_.z,Q.Matrix[0])}else K.FromQuaternionToRef(Q.Quaternion[0],Q.Matrix[0]);this._worldMatrix.setTranslationFromFloats(0,0,0),this._worldMatrix.multiplyToRef(Q.Matrix[0],this._worldMatrix),this._worldMatrix.setTranslation(Q.Vector3[0])}else{let c=Q.Vector3[0];this._worldMatrix.getTranslationToRef(c),Q.Matrix[1].copyFrom(t.getViewMatrix());let f=this.getScene().useRightHandedSystem;if(f&&Q.Matrix[1].multiplyToRef(n._TmpRHRestore,Q.Matrix[1]),Q.Matrix[1].setTranslationFromFloats(0,0,0),Q.Matrix[1].invertToRef(Q.Matrix[0]),(this.billboardMode&n.BILLBOARDMODE_ALL)!==n.BILLBOARDMODE_ALL){Q.Matrix[0].decompose(void 0,Q.Quaternion[0],void 0);let h=Q.Vector3[1];Q.Quaternion[0].toEulerAnglesToRef(h),(this.billboardMode&n.BILLBOARDMODE_X)!==n.BILLBOARDMODE_X&&(h.x=0),(this.billboardMode&n.BILLBOARDMODE_Y)!==n.BILLBOARDMODE_Y&&(h.y=0),(this.billboardMode&n.BILLBOARDMODE_Z)!==n.BILLBOARDMODE_Z&&(h.z=0),f&&(h.y+=Math.PI),K.RotationYawPitchRollToRef(h.y,h.x,h.z,Q.Matrix[0])}this._worldMatrix.setTranslationFromFloats(0,0,0),this._worldMatrix.multiplyToRef(Q.Matrix[0],this._worldMatrix),this._worldMatrix.setTranslation(Q.Vector3[0])}return this.ignoreNonUniformScaling?this._updateNonUniformScalingState(!1):this._scaling.isNonUniformWithinEpsilon(1e-6)?this._updateNonUniformScalingState(!0):s&&s._nonUniformScaling?this._updateNonUniformScalingState(s._nonUniformScaling):this._updateNonUniformScalingState(!1),this._afterComputeWorldMatrix(),this._absolutePosition.copyFromFloats(this._worldMatrix.m[12],this._worldMatrix.m[13],this._worldMatrix.m[14]),this._isAbsoluteSynced=!1,this.onAfterWorldMatrixUpdateObservable.notifyObservers(this),this._poseMatrix||(this._poseMatrix=K.Invert(this._worldMatrix)),this._worldMatrixDeterminantIsDirty=!0,this._worldMatrix}resetLocalMatrix(e=!0){if(this.computeWorldMatrix(),e){let t=this.getChildren();for(let i=0;inew n(e,this.getScene()),this);if(r.name=e,r.id=e,t&&(r.parent=t),!i){let s=this.getDescendants(!0);for(let a=0;anew n(e.name,t),e,t,i);if(e.localMatrix?r.setPreTransformMatrix(K.FromArray(e.localMatrix)):e.pivotMatrix&&r.setPivotMatrix(K.FromArray(e.pivotMatrix)),r.setEnabled(e.isEnabled),r._waitingParsedUniqueId=e.uniqueId,e.parentId!==void 0&&(r._waitingParentId=e.parentId),e.parentInstanceIndex!==void 0&&(r._waitingParentInstanceIndex=e.parentInstanceIndex),e.freezeWorldMatrix&&(r._waitingFreezeWorldMatrix=e.freezeWorldMatrix),e.animations){for(let s=0;s(!t||t(r))&&r instanceof n),i}dispose(e,t=!1){if(this.getScene().stopAnimation(this),this.getScene().removeTransformNode(this),this._parentContainer){let i=this._parentContainer.transformNodes.indexOf(this);i>-1&&this._parentContainer.transformNodes.splice(i,1),this._parentContainer=null}if(this.onAfterWorldMatrixUpdateObservable.clear(),e){let i=this.getChildTransformNodes(!0);for(let r of i)r.parent=null,r.computeWorldMatrix(!0)}super.dispose(e,t)}normalizeToUnitCube(e=!0,t=!1,i){let r=null,s=null;t&&(this.rotationQuaternion?(s=this.rotationQuaternion.clone(),this.rotationQuaternion.copyFromFloats(0,0,0,1)):this.rotation&&(r=this.rotation.clone(),this.rotation.copyFromFloats(0,0,0)));let a=this.getHierarchyBoundingVectors(e,i),o=a.max.subtract(a.min),l=Math.max(o.x,o.y,o.z);if(l===0)return this;let c=1/l;return this.scaling.scaleInPlace(c),t&&(this.rotationQuaternion&&s?this.rotationQuaternion.copyFrom(s):this.rotation&&r&&this.rotation.copyFrom(r)),this}_syncAbsoluteScalingAndRotation(){this._isAbsoluteSynced||(this._worldMatrix.decompose(this._absoluteScaling,this._absoluteRotationQuaternion),this._isAbsoluteSynced=!0)}};$t.BILLBOARDMODE_NONE=0;$t.BILLBOARDMODE_X=1;$t.BILLBOARDMODE_Y=2;$t.BILLBOARDMODE_Z=4;$t.BILLBOARDMODE_ALL=7;$t.BILLBOARDMODE_USE_POSITION=128;$t.BillboardUseParentOrientation=!1;$t._TmpRotation=ze.Zero();$t._TmpScaling=b.Zero();$t._TmpTranslation=b.Zero();$t._TmpRHRestore=K.Scaling(1,1,-1);$t._LookAtVectorCache=new b(0,0,0);$t._RotationAxisCache=new ze;P([Vr("position")],$t.prototype,"_position",void 0);P([Vr("rotation")],$t.prototype,"_rotation",void 0);P([G3("rotationQuaternion")],$t.prototype,"_rotationQuaternion",void 0);P([Vr("scaling")],$t.prototype,"_scaling",void 0);P([w("billboardMode")],$t.prototype,"_billboardMode",void 0);P([w()],$t.prototype,"scalingDeterminant",void 0);P([w("infiniteDistance")],$t.prototype,"_infiniteDistance",void 0);P([w()],$t.prototype,"ignoreNonUniformScaling",void 0);P([w()],$t.prototype,"reIntegrateRotationIntoRotationQuaternion",void 0)});var nA,AV=C(()=>{Ge();nA=class{constructor(){this._checkCollisions=!1,this._collisionMask=-1,this._collisionGroup=-1,this._surroundingMeshes=null,this._collider=null,this._oldPositionForCollisions=new b(0,0,0),this._diffPositionForCollisions=new b(0,0,0),this._collisionResponse=!0}}});function xV(n){return Math.floor(n/8)}function RV(n){return 1<{sA=class{constructor(e){this.size=e,this._byteArray=new Uint8Array(Math.ceil(this.size/8))}get(e){if(e>=this.size)throw new RangeError("Bit index out of range");let t=xV(e),i=RV(e);return(this._byteArray[t]&i)!==0}set(e,t){if(e>=this.size)throw new RangeError("Bit index out of range");let i=xV(e),r=RV(e);t?this._byteArray[i]|=r:this._byteArray[i]&=~r}}});var IV={};$e(IV,{OptimizeIndices:()=>une});function une(n){let e=[],t=n.length/3;for(let l=0;l{let c=[l];for(;c.length>0;){let f=c.pop();if(!r.get(f)){r.set(f,!0),s.push(e[f]);for(let h of e[f]){let d=i.get(h);if(!d)return;for(let u of d)r.get(u)||c.push(u)}}}};for(let l=0;l{bV()});function mne(n,e,t){let i;switch(e){case L.PositionKind:i=r=>r.getPositions();break;case L.NormalKind:i=r=>r.getNormals();break;case L.TangentKind:i=r=>r.getTangents();break;case L.UVKind:i=r=>r.getUVs();break;case L.UV2Kind:i=r=>r.getUV2s();break;case L.ColorKind:i=r=>r.getColors();break;default:return}for(let r=0;r0&&(K.FromFloat32ArrayToRefScaled(t,Math.floor(i[d+u]*16),m,c),l.addToSelf(c));if(s&&a)for(u=0;u<4;u++)m=a[d+u],m>0&&(K.FromFloat32ArrayToRefScaled(t,Math.floor(s[d+u]*16),m,c),l.addToSelf(c));f(n[h],n[h+1],n[h+2],l,o),o.toArray(n,h)}}var WC,HC,pr,im=C(()=>{kt();hi();Ge();Ui();lr();kh();L_();em();of();AV();ln();tA();zt();An();Pu();Vi();Ut();Lr();WC=class{constructor(){this.facetNb=0,this.partitioningSubdivisions=10,this.partitioningBBoxRatio=1.01,this.facetDataEnabled=!1,this.facetParameters={},this.bbSize=b.Zero(),this.subDiv={max:1,X:1,Y:1,Z:1},this.facetDepthSort=!1,this.facetDepthSortEnabled=!1}},HC=class{constructor(){this._hasVertexAlpha=!1,this._useVertexColors=!0,this._numBoneInfluencers=4,this._applyFog=!0,this._receiveShadows=!1,this._facetData=new WC,this._visibility=1,this._skeleton=null,this._layerMask=268435455,this._computeBonesUsingShaders=!0,this._isActive=!1,this._onlyForInstances=!1,this._isActiveIntermediate=!1,this._onlyForInstancesIntermediate=!1,this._actAsRegularMesh=!1,this._currentLOD=new Map,this._collisionRetryCount=3,this._morphTargetManager=null,this._renderingGroupId=0,this._bakedVertexAnimationManager=null,this._material=null,this._positions=null,this._pointerOverDisableMeshTesting=!1,this._meshCollisionData=new nA,this._enableDistantPicking=!1,this._rawBoundingInfo=null,this._sideOrientationHint=!1,this._wasActiveLastFrame=!1}},pr=class n extends $t{static get BILLBOARDMODE_NONE(){return $t.BILLBOARDMODE_NONE}static get BILLBOARDMODE_X(){return $t.BILLBOARDMODE_X}static get BILLBOARDMODE_Y(){return $t.BILLBOARDMODE_Y}static get BILLBOARDMODE_Z(){return $t.BILLBOARDMODE_Z}static get BILLBOARDMODE_ALL(){return $t.BILLBOARDMODE_ALL}static get BILLBOARDMODE_USE_POSITION(){return $t.BILLBOARDMODE_USE_POSITION}get facetNb(){return this._internalAbstractMeshDataInfo._facetData.facetNb}get partitioningSubdivisions(){return this._internalAbstractMeshDataInfo._facetData.partitioningSubdivisions}set partitioningSubdivisions(e){this._internalAbstractMeshDataInfo._facetData.partitioningSubdivisions=e}get partitioningBBoxRatio(){return this._internalAbstractMeshDataInfo._facetData.partitioningBBoxRatio}set partitioningBBoxRatio(e){this._internalAbstractMeshDataInfo._facetData.partitioningBBoxRatio=e}get mustDepthSortFacets(){return this._internalAbstractMeshDataInfo._facetData.facetDepthSort}set mustDepthSortFacets(e){this._internalAbstractMeshDataInfo._facetData.facetDepthSort=e}get facetDepthSortFrom(){return this._internalAbstractMeshDataInfo._facetData.facetDepthSortFrom}set facetDepthSortFrom(e){this._internalAbstractMeshDataInfo._facetData.facetDepthSortFrom=e}get collisionRetryCount(){return this._internalAbstractMeshDataInfo._collisionRetryCount}set collisionRetryCount(e){this._internalAbstractMeshDataInfo._collisionRetryCount=e}get isFacetDataEnabled(){return this._internalAbstractMeshDataInfo._facetData.facetDataEnabled}get morphTargetManager(){return this._internalAbstractMeshDataInfo._morphTargetManager}set morphTargetManager(e){this._internalAbstractMeshDataInfo._morphTargetManager!==e&&(this._internalAbstractMeshDataInfo._morphTargetManager=e,this._syncGeometryWithMorphTargetManager())}get bakedVertexAnimationManager(){return this._internalAbstractMeshDataInfo._bakedVertexAnimationManager}set bakedVertexAnimationManager(e){this._internalAbstractMeshDataInfo._bakedVertexAnimationManager!==e&&(this._internalAbstractMeshDataInfo._bakedVertexAnimationManager=e,this._markSubMeshesAsAttributesDirty())}_syncGeometryWithMorphTargetManager(){}_updateNonUniformScalingState(e){return super._updateNonUniformScalingState(e)?(this._markSubMeshesAsMiscDirty(),!0):!1}get rawBoundingInfo(){return this._internalAbstractMeshDataInfo._rawBoundingInfo}set rawBoundingInfo(e){this._internalAbstractMeshDataInfo._rawBoundingInfo=e}set onCollide(e){this._internalAbstractMeshDataInfo._meshCollisionData._onCollideObserver&&this.onCollideObservable.remove(this._internalAbstractMeshDataInfo._meshCollisionData._onCollideObserver),this._internalAbstractMeshDataInfo._meshCollisionData._onCollideObserver=this.onCollideObservable.add(e)}set onCollisionPositionChange(e){this._internalAbstractMeshDataInfo._meshCollisionData._onCollisionPositionChangeObserver&&this.onCollisionPositionChangeObservable.remove(this._internalAbstractMeshDataInfo._meshCollisionData._onCollisionPositionChangeObserver),this._internalAbstractMeshDataInfo._meshCollisionData._onCollisionPositionChangeObserver=this.onCollisionPositionChangeObservable.add(e)}get visibility(){return this._internalAbstractMeshDataInfo._visibility}set visibility(e){if(this._internalAbstractMeshDataInfo._visibility===e)return;let t=this._internalAbstractMeshDataInfo._visibility;this._internalAbstractMeshDataInfo._visibility=e,(t===1&&e!==1||t!==1&&e===1)&&this._markSubMeshesAsDirty(i=>{i.markAsMiscDirty(),i.markAsPrePassDirty()})}get pointerOverDisableMeshTesting(){return this._internalAbstractMeshDataInfo._pointerOverDisableMeshTesting}set pointerOverDisableMeshTesting(e){this._internalAbstractMeshDataInfo._pointerOverDisableMeshTesting=e}get renderingGroupId(){return this._internalAbstractMeshDataInfo._renderingGroupId}set renderingGroupId(e){this._internalAbstractMeshDataInfo._renderingGroupId=e}get material(){return this._internalAbstractMeshDataInfo._material}set material(e){this._setMaterial(e)}_setMaterial(e){this._internalAbstractMeshDataInfo._material!==e&&(this._internalAbstractMeshDataInfo._material&&this._internalAbstractMeshDataInfo._material.meshMap&&(this._internalAbstractMeshDataInfo._material.meshMap[this.uniqueId]=void 0),this._internalAbstractMeshDataInfo._material=e,e&&e.meshMap&&(e.meshMap[this.uniqueId]=this),this.onMaterialChangedObservable.hasObservers()&&this.onMaterialChangedObservable.notifyObservers(this),this.subMeshes&&(this.resetDrawCache(void 0,e==null),this._unBindEffect()))}getMaterialForRenderPass(e){var t;return(t=this._internalAbstractMeshDataInfo._materialForRenderPass)==null?void 0:t[e]}setMaterialForRenderPass(e,t){var r;this.resetDrawCache(e),this._internalAbstractMeshDataInfo._materialForRenderPass||(this._internalAbstractMeshDataInfo._materialForRenderPass=[]);let i=this._internalAbstractMeshDataInfo._materialForRenderPass[e];(r=i==null?void 0:i.meshMap)!=null&&r[this.uniqueId]&&(i.meshMap[this.uniqueId]=void 0),this._internalAbstractMeshDataInfo._materialForRenderPass[e]=t,t&&t.meshMap&&(t.meshMap[this.uniqueId]=this)}get receiveShadows(){return this._internalAbstractMeshDataInfo._receiveShadows}set receiveShadows(e){this._internalAbstractMeshDataInfo._receiveShadows!==e&&(this._internalAbstractMeshDataInfo._receiveShadows=e,this._markSubMeshesAsLightDirty())}get hasVertexAlpha(){return this._internalAbstractMeshDataInfo._hasVertexAlpha}set hasVertexAlpha(e){this._internalAbstractMeshDataInfo._hasVertexAlpha!==e&&(this._internalAbstractMeshDataInfo._hasVertexAlpha=e,this._markSubMeshesAsAttributesDirty(),this._markSubMeshesAsMiscDirty())}get useVertexColors(){return this._internalAbstractMeshDataInfo._useVertexColors}set useVertexColors(e){this._internalAbstractMeshDataInfo._useVertexColors!==e&&(this._internalAbstractMeshDataInfo._useVertexColors=e,this._markSubMeshesAsAttributesDirty())}get computeBonesUsingShaders(){return this._internalAbstractMeshDataInfo._computeBonesUsingShaders}set computeBonesUsingShaders(e){this._internalAbstractMeshDataInfo._computeBonesUsingShaders!==e&&(this._internalAbstractMeshDataInfo._computeBonesUsingShaders=e,this._markSubMeshesAsAttributesDirty())}get numBoneInfluencers(){return this._internalAbstractMeshDataInfo._numBoneInfluencers}set numBoneInfluencers(e){this._internalAbstractMeshDataInfo._numBoneInfluencers!==e&&(this._internalAbstractMeshDataInfo._numBoneInfluencers=e,this._markSubMeshesAsAttributesDirty())}get applyFog(){return this._internalAbstractMeshDataInfo._applyFog}set applyFog(e){this._internalAbstractMeshDataInfo._applyFog!==e&&(this._internalAbstractMeshDataInfo._applyFog=e,this._markSubMeshesAsMiscDirty())}get enableDistantPicking(){return this._internalAbstractMeshDataInfo._enableDistantPicking}set enableDistantPicking(e){this._internalAbstractMeshDataInfo._enableDistantPicking=e}get layerMask(){return this._internalAbstractMeshDataInfo._layerMask}set layerMask(e){e!==this._internalAbstractMeshDataInfo._layerMask&&(this._internalAbstractMeshDataInfo._layerMask=e,this._resyncLightSources())}get collisionMask(){return this._internalAbstractMeshDataInfo._meshCollisionData._collisionMask}set collisionMask(e){this._internalAbstractMeshDataInfo._meshCollisionData._collisionMask=isNaN(e)?-1:e}get collisionResponse(){return this._internalAbstractMeshDataInfo._meshCollisionData._collisionResponse}set collisionResponse(e){this._internalAbstractMeshDataInfo._meshCollisionData._collisionResponse=e}get collisionGroup(){return this._internalAbstractMeshDataInfo._meshCollisionData._collisionGroup}set collisionGroup(e){this._internalAbstractMeshDataInfo._meshCollisionData._collisionGroup=isNaN(e)?-1:e}get surroundingMeshes(){return this._internalAbstractMeshDataInfo._meshCollisionData._surroundingMeshes}set surroundingMeshes(e){this._internalAbstractMeshDataInfo._meshCollisionData._surroundingMeshes=e}get lightSources(){return this._lightSources}set skeleton(e){let t=this._internalAbstractMeshDataInfo._skeleton;t&&t.needInitialSkinMatrix&&t._unregisterMeshWithPoseMatrix(this),e&&e.needInitialSkinMatrix&&e._registerMeshWithPoseMatrix(this),this._internalAbstractMeshDataInfo._skeleton=e,this._internalAbstractMeshDataInfo._skeleton||(this._bonesTransformMatrices=null),this._markSubMeshesAsAttributesDirty()}get skeleton(){return this._internalAbstractMeshDataInfo._skeleton}constructor(e,t=null){switch(super(e,t,!1),this._internalAbstractMeshDataInfo=new HC,this._waitingMaterialId=null,this._waitingMorphTargetManagerId=null,this._waitingSkeletonId=null,this._waitingSkeletonUniqueId=null,this.cullingStrategy=n.CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY,this.onCollideObservable=new te,this.onCollisionPositionChangeObservable=new te,this.onMaterialChangedObservable=new te,this.definedFacingForward=!0,this._occlusionQuery=null,this._renderingGroup=null,this.alphaIndex=Number.MAX_VALUE,this.isPickable=n.DefaultIsPickable,this.isNearPickable=!1,this.isNearGrabbable=!1,this.showSubMeshesBoundingBox=!1,this.isBlocker=!1,this.enablePointerMoveEvents=!1,this.outlineColor=Te.Red(),this.outlineWidth=.02,this.overlayColor=Te.Red(),this.overlayAlpha=.5,this.useOctreeForRenderingSelection=!0,this.useOctreeForPicking=!0,this.useOctreeForCollisions=!0,this.alwaysSelectAsActiveMesh=!1,this.doNotSyncBoundingInfo=!1,this.actionManager=null,this.ellipsoid=new b(.5,1,.5),this.ellipsoidOffset=new b(0,0,0),this.edgesWidth=1,this.edgesColor=new lt(1,0,0,1),this._edgesRenderer=null,this._masterMesh=null,this._boundingInfo=null,this._boundingInfoIsDirty=!0,this._renderId=0,this._intersectionsInProgress=new Array,this._unIndexed=!1,this._lightSources=new Array,this._waitingData={lods:null,actions:null,freezeWorldMatrix:null},this._bonesTransformMatrices=null,this._transformMatrixTexture=null,this.onRebuildObservable=new te,this._onCollisionPositionChange=(i,r,s=null)=>{r.subtractToRef(this._internalAbstractMeshDataInfo._meshCollisionData._oldPositionForCollisions,this._internalAbstractMeshDataInfo._meshCollisionData._diffPositionForCollisions),this._internalAbstractMeshDataInfo._meshCollisionData._diffPositionForCollisions.length()>Re.CollisionsEpsilon&&this.position.addInPlace(this._internalAbstractMeshDataInfo._meshCollisionData._diffPositionForCollisions),s&&this.onCollideObservable.notifyObservers(s),this.onCollisionPositionChangeObservable.notifyObservers(this.position)},t=this.getScene(),this.layerMask=t.defaultRenderableLayerMask,t.addMesh(this),this._resyncLightSources(),this._uniformBuffer=new or(this.getScene().getEngine(),void 0,void 0,e,!this.getScene().getEngine().isWebGPU),this._buildUniformLayout(),t.performancePriority){case 2:this.doNotSyncBoundingInfo=!0;case 1:this.alwaysSelectAsActiveMesh=!0,this.isPickable=!1;break}}_buildUniformLayout(){this._uniformBuffer.addUniform("world",16),this._uniformBuffer.addUniform("visibility",1),this._uniformBuffer.create()}transferToEffect(e){let t=this._uniformBuffer;t.updateMatrix("world",e),t.updateFloat("visibility",this._internalAbstractMeshDataInfo._visibility),t.update()}getMeshUniformBuffer(){return this._uniformBuffer}getClassName(){return"AbstractMesh"}toString(e){let t="Name: "+this.name+", isInstance: "+(this.getClassName()==="InstancedMesh"?"YES":"NO");t+=", # of submeshes: "+(this.subMeshes?this.subMeshes.length:0);let i=this._internalAbstractMeshDataInfo._skeleton;return i&&(t+=", skeleton: "+i.name),e&&(t+=", billboard mode: "+["NONE","X","Y",null,"Z",null,null,"ALL"][this.billboardMode],t+=", freeze wrld mat: "+(this._isWorldMatrixFrozen||this._waitingData.freezeWorldMatrix?"YES":"NO")),t}_getEffectiveParent(){return this._masterMesh&&this.billboardMode!==$t.BILLBOARDMODE_NONE?this._masterMesh:super._getEffectiveParent()}_getActionManagerForTrigger(e,t=!0){if(this.actionManager&&(t||this.actionManager.isRecursive))if(e){if(this.actionManager.hasSpecificTrigger(e))return this.actionManager}else return this.actionManager;return this.parent?this.parent._getActionManagerForTrigger(e,!1):null}_releaseRenderPassId(e){}_rebuild(e=!1){if(this.onRebuildObservable.notifyObservers(this),this._occlusionQuery!==null&&(this._occlusionQuery=null),!!this.subMeshes){for(let t of this.subMeshes)t._rebuild();this.resetDrawCache()}}_resyncLightSources(){this._lightSources.length=0;for(let e of this.getScene().lights)e.isEnabled()&&e.canAffectMesh(this)&&this._lightSources.push(e);this._markSubMeshesAsLightDirty()}_resyncLightSource(e){let t=e.isEnabled()&&e.canAffectMesh(this),i=this._lightSources.indexOf(e),r=!1;if(i===-1){if(!t)return;this._lightSources.push(e)}else{if(t)return;r=!0,this._lightSources.splice(i,1)}this._markSubMeshesAsLightDirty(r)}_unBindEffect(){for(let e of this.subMeshes)e.setEffect(null)}_removeLightSource(e,t){let i=this._lightSources.indexOf(e);i!==-1&&(this._lightSources.splice(i,1),this._markSubMeshesAsLightDirty(t))}_markSubMeshesAsDirty(e){if(this.subMeshes)for(let t of this.subMeshes)for(let i=0;it.markAsLightDirty(e))}_markSubMeshesAsAttributesDirty(){this._markSubMeshesAsDirty(e=>e.markAsAttributesDirty())}_markSubMeshesAsMiscDirty(){this._markSubMeshesAsDirty(e=>e.markAsMiscDirty())}markAsDirty(e){return this._currentRenderId=Number.MAX_VALUE,super.markAsDirty(e),this._isDirty=!0,this}resetDrawCache(e,t=!1){if(this.subMeshes)for(let i of this.subMeshes)i.resetDrawCache(e,t)}get isBlocked(){return!1}getLOD(e){return this}getTotalVertices(){return 0}getTotalIndices(){return 0}getIndices(){return null}getVerticesData(e){return null}setVerticesData(e,t,i,r){return this}updateVerticesData(e,t,i,r){return this}setIndices(e,t){return this}isVerticesDataPresent(e){return!1}getBoundingInfo(){return this._masterMesh?this._masterMesh.getBoundingInfo():(this._boundingInfoIsDirty&&(this._boundingInfoIsDirty=!1,this._updateBoundingInfo()),this._boundingInfo)}getRawBoundingInfo(){var e;return(e=this.rawBoundingInfo)!=null?e:this.getBoundingInfo()}setBoundingInfo(e){return this._boundingInfo=e,this}get hasBoundingInfo(){return this._boundingInfo!==null}buildBoundingInfo(e,t,i){return this._boundingInfo=new fn(e,t,i),this._boundingInfo}normalizeToUnitCube(e=!0,t=!1,i){return super.normalizeToUnitCube(e,t,i)}get useBones(){return this.skeleton&&this.getScene().skeletonsEnabled&&this.isVerticesDataPresent(L.MatricesIndicesKind)&&this.isVerticesDataPresent(L.MatricesWeightsKind)}_preActivate(){}_preActivateForIntermediateRendering(e){}_activate(e,t){return this._renderId=e,!0}_postActivate(){}_freeze(){}_unFreeze(){}getWorldMatrix(){return this._masterMesh&&this.billboardMode===$t.BILLBOARDMODE_NONE?this._masterMesh.getWorldMatrix():super.getWorldMatrix()}_getWorldMatrixDeterminant(){return this._masterMesh?this._masterMesh._getWorldMatrixDeterminant():super._getWorldMatrixDeterminant()}get isAnInstance(){return!1}get hasInstances(){return!1}get hasThinInstances(){return!1}movePOV(e,t,i){return this.position.addInPlace(this.calcMovePOV(e,t,i)),this}calcMovePOV(e,t,i){let r=new K;(this.rotationQuaternion?this.rotationQuaternion:ze.RotationYawPitchRoll(this.rotation.y,this.rotation.x,this.rotation.z)).toRotationMatrix(r);let a=b.Zero(),o=this.definedFacingForward?-1:1;return b.TransformCoordinatesFromFloatsToRef(e*o,t,i*o,r,a),a}rotatePOV(e,t,i){return this.rotation.addInPlace(this.calcRotatePOV(e,t,i)),this}calcRotatePOV(e,t,i){let r=this.definedFacingForward?1:-1;return new b(e*r,t,i*r)}_refreshBoundingInfo(e,t){if(e){let i=eA(e,0,this.getTotalVertices(),t);this._boundingInfo?this._boundingInfo.reConstruct(i.minimum,i.maximum):this._boundingInfo=new fn(i.minimum,i.maximum)}if(this.subMeshes)for(let i=0;i{if(r){let o=r._vertexData||(r._vertexData={});return o[a]||this.copyVerticesData(a,o),o[a]}return this.getVerticesData(a)};if(t||(t=s(i)),!t)return null;if(r?(r._outputData?r._outputData.set(t):r._outputData=new Float32Array(t),t=r._outputData):(e.applyMorph&&this.morphTargetManager||e.applySkeleton&&this.skeleton)&&(t=t.slice()),e.applyMorph&&this.morphTargetManager&&mne(t,i,this.morphTargetManager),e.applySkeleton&&this.skeleton){let a=s(L.MatricesIndicesKind),o=s(L.MatricesWeightsKind);if(o&&a){let l=this.numBoneInfluencers>4,c=l?s(L.MatricesIndicesExtraKind):null,f=l?s(L.MatricesWeightsExtraKind):null,h=this.skeleton.getTransformMatrices(this);n._ApplySkeleton(t,i,h,a,o,c,f)}}if(e.updatePositionsArray!==!1&&i===L.PositionKind){let a=this._internalAbstractMeshDataInfo._positions||[],o=a.length;if(a.length=t.length/3,o1||!r.IsGlobal)&&r.updateBoundingInfo(e)}return this}_afterComputeWorldMatrix(){this.doNotSyncBoundingInfo||(this._boundingInfoIsDirty=!0)}isInFrustum(e){return this.getBoundingInfo().isInFrustum(e,this.cullingStrategy)}isCompletelyInFrustum(e){return this.getBoundingInfo().isCompletelyInFrustum(e)}intersectsMesh(e,t=!1,i){let r=this.getBoundingInfo(),s=e.getBoundingInfo();if(r.intersects(s,t))return!0;if(i){for(let a of this.getChildMeshes())if(a.intersectsMesh(e,t,!0))return!0}return!1}intersectsPoint(e){return this.getBoundingInfo().intersectsPoint(e)}get checkCollisions(){return this._internalAbstractMeshDataInfo._meshCollisionData._checkCollisions}set checkCollisions(e){this._internalAbstractMeshDataInfo._meshCollisionData._checkCollisions=e}get collider(){return this._internalAbstractMeshDataInfo._meshCollisionData._collider}moveWithCollisions(e,t=!0){this.getAbsolutePosition().addToRef(this.ellipsoidOffset,this._internalAbstractMeshDataInfo._meshCollisionData._oldPositionForCollisions);let r=this.getScene().collisionCoordinator;return this._internalAbstractMeshDataInfo._meshCollisionData._collider||(this._internalAbstractMeshDataInfo._meshCollisionData._collider=r.createCollider()),this._internalAbstractMeshDataInfo._meshCollisionData._collider._radius=this.ellipsoid,r.getNewPosition(this._internalAbstractMeshDataInfo._meshCollisionData._oldPositionForCollisions,e,this._internalAbstractMeshDataInfo._meshCollisionData._collider,this.collisionRetryCount,this,this._onCollisionPositionChange,this.uniqueId,t),this}_collideForSubMesh(e,t,i){var r;if(this._generatePointsArray(),!this._positions)return this;if(!e._lastColliderWorldVertices||!e._lastColliderTransformMatrix.equals(t)){e._lastColliderTransformMatrix=t.clone(),e._lastColliderWorldVertices=[],e._trianglePlanes=[];let s=e.verticesStart,a=e.verticesStart+e.verticesCount;for(let o=s;o1&&!a._checkCollision(e)||this._collideForSubMesh(a,t,e)}return this}_shouldConvertRHS(){return!1}_checkCollision(e){if(!this.getBoundingInfo()._checkCollision(e))return this;let t=Q.Matrix[0],i=Q.Matrix[1];return K.ScalingToRef(1/e._radius.x,1/e._radius.y,1/e._radius.z,t),this.worldMatrixFromCache.multiplyToRef(t,i),this._processCollisionsForSubMeshes(e,i),this}_generatePointsArray(){return!1}intersects(e,t,i,r=!1,s,a=!1){let o=new Hn,l=this.getClassName(),c=l==="InstancedLinesMesh"||l==="LinesMesh"||l==="GreasedLineMesh"?this.intersectionThreshold:0,f=this.getBoundingInfo();if(!this.subMeshes||!a&&(!e.intersectsSphere(f.boundingSphere,c)||!e.intersectsBox(f.boundingBox,c)))return o;if(r)return o.hit=!a,o.pickedMesh=a?null:this,o.distance=a?0:b.Distance(e.origin,f.boundingSphere.center),o.subMeshId=0,o;if(!this._generatePointsArray())return o;let h=null,d=this._scene.getIntersectingSubMeshCandidates(this,e),u=d.length,m=!1;for(let _=0;_1&&!a&&!p.canIntersects(e))continue;let g=p.intersects(e,this._positions,this.getIndices(),t,i);if(g&&(t||!h||g.distanceo!==this&&o.actionManager===this.actionManager)&&this.actionManager.dispose(),this.actionManager=null),this._internalAbstractMeshDataInfo._skeleton=null,this._transformMatrixTexture&&(this._transformMatrixTexture.dispose(),this._transformMatrixTexture=null),i=0;i-1&&this._parentContainer.meshes.splice(o,1),this._parentContainer=null}if(t&&this.material&&(this.material.getClassName()==="MultiMaterial"?this.material.dispose(!1,!0,!0):this.material.dispose(!1,!0)),!e)for(i=0;i65535){l=!0;break}l?e.depthSortedIndices=new Uint32Array(i):e.depthSortedIndices=new Uint16Array(i)}if(e.facetDepthSortFunction=function(l,c){return c.sqDistance-l.sqDistance},!e.facetDepthSortFrom){let l=this.getScene().activeCamera;e.facetDepthSortFrom=l?l.position:b.Zero()}e.depthSortedFacets=[];for(let l=0;lNt?s.maximum.x-s.minimum.x:Nt,e.bbSize.y=s.maximum.y-s.minimum.y>Nt?s.maximum.y-s.minimum.y:Nt,e.bbSize.z=s.maximum.z-s.minimum.z>Nt?s.maximum.z-s.minimum.z:Nt;let a=e.bbSize.x>e.bbSize.y?e.bbSize.x:e.bbSize.y;if(a=a>e.bbSize.z?a:e.bbSize.z,e.subDiv.max=e.partitioningSubdivisions,e.subDiv.X=Math.floor(e.subDiv.max*e.bbSize.x/a),e.subDiv.Y=Math.floor(e.subDiv.max*e.bbSize.y/a),e.subDiv.Z=Math.floor(e.subDiv.max*e.bbSize.z/a),e.subDiv.X=e.subDiv.X<1?1:e.subDiv.X,e.subDiv.Y=e.subDiv.Y<1?1:e.subDiv.Y,e.subDiv.Z=e.subDiv.Z<1?1:e.subDiv.Z,e.facetParameters.facetNormals=this.getFacetLocalNormals(),e.facetParameters.facetPositions=this.getFacetLocalPositions(),e.facetParameters.facetPartitioning=this.getFacetLocalPartitioning(),e.facetParameters.bInfo=s,e.facetParameters.bbSize=e.bbSize,e.facetParameters.subDiv=e.subDiv,e.facetParameters.ratio=this.partitioningBBoxRatio,e.facetParameters.depthSort=e.facetDepthSort,e.facetDepthSort&&e.facetDepthSortEnabled&&(this.computeWorldMatrix(!0),this._worldMatrix.invertToRef(e.invertedMatrix),b.TransformCoordinatesToRef(e.facetDepthSortFrom,e.invertedMatrix,e.facetDepthSortOrigin),e.facetParameters.distanceTo=e.facetDepthSortOrigin),e.facetParameters.depthSortedFacets=e.depthSortedFacets,r&&Ie.ComputeNormals(t,i,r,e.facetParameters),e.facetDepthSort&&e.facetDepthSortEnabled){e.depthSortedFacets.sort(e.facetDepthSortFunction);let l=e.depthSortedIndices.length/3|0;for(let c=0;cs.subDiv.max||o<0||o>s.subDiv.max||l<0||l>s.subDiv.max?null:s.facetPartitioning[a+s.subDiv.max*o+s.subDiv.max*s.subDiv.max*l]}getClosestFacetAtCoordinates(e,t,i,r,s=!1,a=!0){let o=this.getWorldMatrix(),l=Q.Matrix[5];o.invertToRef(l);let c=Q.Vector3[8];b.TransformCoordinatesFromFloatsToRef(e,t,i,l,c);let f=this.getClosestFacetAtLocalCoordinates(c.x,c.y,c.z,r,s,a);return r&&b.TransformCoordinatesFromFloatsToRef(r.x,r.y,r.z,o,r),f}getClosestFacetAtLocalCoordinates(e,t,i,r,s=!1,a=!0){let o=null,l,c,f,h,d,u,m,_,p=this.getFacetLocalPositions(),g=this.getFacetLocalNormals(),v=this.getFacetsAtLocalCoordinates(e,t,i);if(!v)return null;let x=Number.MAX_VALUE,A,S,E,R;for(let I=0;I=0||s&&!a&&h<=0)&&(h=E.x*R.x+E.y*R.y+E.z*R.z,d=-(E.x*e+E.y*t+E.z*i-h)/(E.x*E.x+E.y*E.y+E.z*E.z),u=e+E.x*d,m=t+E.y*d,_=i+E.z*d,l=u-e,c=m-t,f=_-i,A=l*l+c*c+f*f,A(MV(),IV));return t(e),this.setIndices(e,this.getTotalVertices()),this}alignWithNormal(e,t){t||(t=ds.Y);let i=Q.Vector3[0],r=Q.Vector3[1];return b.CrossToRef(t,e,r),b.CrossToRef(e,r,i),this.rotationQuaternion?ze.RotationQuaternionFromAxisToRef(i,e,r,this.rotationQuaternion):b.RotationFromAxisToRef(i,e,r,this.rotation),this}_checkOcclusionQuery(e=!1){return!1}disableEdgesRendering(){throw Xe("EdgesRenderer")}enableEdgesRendering(e,t,i){throw Xe("EdgesRenderer")}getConnectedParticleSystems(){return this._scene.particleSystems.filter(e=>e.emitter===this)}};pr.OCCLUSION_TYPE_NONE=0;pr.OCCLUSION_TYPE_OPTIMISTIC=1;pr.OCCLUSION_TYPE_STRICT=2;pr.OCCLUSION_ALGORITHM_TYPE_ACCURATE=0;pr.OCCLUSION_ALGORITHM_TYPE_CONSERVATIVE=1;pr.CULLINGSTRATEGY_STANDARD=0;pr.CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY=1;pr.CULLINGSTRATEGY_OPTIMISTIC_INCLUSION=2;pr.CULLINGSTRATEGY_OPTIMISTIC_INCLUSION_THEN_BSPHERE_ONLY=3;pr.DefaultIsPickable=!0;P([us.filter((...n)=>!Array.isArray(n[0])&&!Array.isArray(n[3])&&!Array.isArray(n[4])&&!Array.isArray(n[5])&&!Array.isArray(n[6]))],pr,"_ApplySkeleton",null);Ft("BABYLON.AbstractMesh",pr)});var bn,CV=C(()=>{kt();Er();Ut();bn=class{constructor(){this.reset()}reset(){this.enabled=!1,this.mask=255,this.funcRef=1,this.funcMask=255,this.func=519,this.opStencilFail=7680,this.opDepthFail=7680,this.opStencilDepthPass=7681,this.backFunc=519,this.backOpStencilFail=7680,this.backOpDepthFail=7680,this.backOpStencilDepthPass=7681}get func(){return this._func}set func(e){this._func=e}get backFunc(){return this._backFunc}set backFunc(e){this._backFunc=e}get funcRef(){return this._funcRef}set funcRef(e){this._funcRef=e}get funcMask(){return this._funcMask}set funcMask(e){this._funcMask=e}get opStencilFail(){return this._opStencilFail}set opStencilFail(e){this._opStencilFail=e}get opDepthFail(){return this._opDepthFail}set opDepthFail(e){this._opDepthFail=e}get opStencilDepthPass(){return this._opStencilDepthPass}set opStencilDepthPass(e){this._opStencilDepthPass=e}get backOpStencilFail(){return this._backOpStencilFail}set backOpStencilFail(e){this._backOpStencilFail=e}get backOpDepthFail(){return this._backOpDepthFail}set backOpDepthFail(e){this._backOpDepthFail=e}get backOpStencilDepthPass(){return this._backOpStencilDepthPass}set backOpStencilDepthPass(e){this._backOpStencilDepthPass=e}get mask(){return this._mask}set mask(e){this._mask=e}get enabled(){return this._enabled}set enabled(e){this._enabled=e}getClassName(){return"MaterialStencilState"}copyTo(e){tt.Clone(()=>e,this)}serialize(){return tt.Serialize(this)}parse(e,t,i){tt.Parse(()=>this,e,t,i)}};P([w()],bn.prototype,"func",null);P([w()],bn.prototype,"backFunc",null);P([w()],bn.prototype,"funcRef",null);P([w()],bn.prototype,"funcMask",null);P([w()],bn.prototype,"opStencilFail",null);P([w()],bn.prototype,"opDepthFail",null);P([w()],bn.prototype,"opStencilDepthPass",null);P([w()],bn.prototype,"backOpStencilFail",null);P([w()],bn.prototype,"backOpDepthFail",null);P([w()],bn.prototype,"backOpStencilDepthPass",null);P([w()],bn.prototype,"mask",null);P([w()],bn.prototype,"enabled",null)});function In(n){n.indexOf("vClipPlane")===-1&&n.push("vClipPlane"),n.indexOf("vClipPlane2")===-1&&n.push("vClipPlane2"),n.indexOf("vClipPlane3")===-1&&n.push("vClipPlane3"),n.indexOf("vClipPlane4")===-1&&n.push("vClipPlane4"),n.indexOf("vClipPlane5")===-1&&n.push("vClipPlane5"),n.indexOf("vClipPlane6")===-1&&n.push("vClipPlane6")}function tl(n,e,t){var c,f,h,d,u,m;let i=!!((c=n.clipPlane)!=null?c:e.clipPlane),r=!!((f=n.clipPlane2)!=null?f:e.clipPlane2),s=!!((h=n.clipPlane3)!=null?h:e.clipPlane3),a=!!((d=n.clipPlane4)!=null?d:e.clipPlane4),o=!!((u=n.clipPlane5)!=null?u:e.clipPlane5),l=!!((m=n.clipPlane6)!=null?m:e.clipPlane6);i&&t.push("#define CLIPPLANE"),r&&t.push("#define CLIPPLANE2"),s&&t.push("#define CLIPPLANE3"),a&&t.push("#define CLIPPLANE4"),o&&t.push("#define CLIPPLANE5"),l&&t.push("#define CLIPPLANE6")}function yV(n,e,t){var f,h,d,u,m,_;let i=!1,r=!!((f=n.clipPlane)!=null?f:e.clipPlane),s=!!((h=n.clipPlane2)!=null?h:e.clipPlane2),a=!!((d=n.clipPlane3)!=null?d:e.clipPlane3),o=!!((u=n.clipPlane4)!=null?u:e.clipPlane4),l=!!((m=n.clipPlane5)!=null?m:e.clipPlane5),c=!!((_=n.clipPlane6)!=null?_:e.clipPlane6);return t.CLIPPLANE!==r&&(t.CLIPPLANE=r,i=!0),t.CLIPPLANE2!==s&&(t.CLIPPLANE2=s,i=!0),t.CLIPPLANE3!==a&&(t.CLIPPLANE3=a,i=!0),t.CLIPPLANE4!==o&&(t.CLIPPLANE4=o,i=!0),t.CLIPPLANE5!==l&&(t.CLIPPLANE5=l,i=!0),t.CLIPPLANE6!==c&&(t.CLIPPLANE6=c,i=!0),i}function Mn(n,e,t){var r,s,a,o,l,c;let i=(r=e.clipPlane)!=null?r:t.clipPlane;rm(n,"vClipPlane",i),i=(s=e.clipPlane2)!=null?s:t.clipPlane2,rm(n,"vClipPlane2",i),i=(a=e.clipPlane3)!=null?a:t.clipPlane3,rm(n,"vClipPlane3",i),i=(o=e.clipPlane4)!=null?o:t.clipPlane4,rm(n,"vClipPlane4",i),i=(l=e.clipPlane5)!=null?l:t.clipPlane5,rm(n,"vClipPlane5",i),i=(c=e.clipPlane6)!=null?c:t.clipPlane6,rm(n,"vClipPlane6",i)}function rm(n,e,t){var i;if(t){let r=((i=Aa.getScene())==null?void 0:i.floatingOriginOffset)||b.ZeroReadOnly;n.setFloat4(e,t.normal.x,t.normal.y,t.normal.z,t.d+b.Dot(t.normal,r))}}var il=C(()=>{w_();Ge()});var le,Ma=C(()=>{Lr();le=class{static get DiffuseTextureEnabled(){return this._DiffuseTextureEnabled}static set DiffuseTextureEnabled(e){this._DiffuseTextureEnabled!==e&&(this._DiffuseTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get BaseWeightTextureEnabled(){return this._BaseWeightTextureEnabled}static set BaseWeightTextureEnabled(e){this._BaseWeightTextureEnabled!==e&&(this._BaseWeightTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get BaseDiffuseRoughnessTextureEnabled(){return this._BaseDiffuseRoughnessTextureEnabled}static set BaseDiffuseRoughnessTextureEnabled(e){this._BaseDiffuseRoughnessTextureEnabled!==e&&(this._BaseDiffuseRoughnessTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get DetailTextureEnabled(){return this._DetailTextureEnabled}static set DetailTextureEnabled(e){this._DetailTextureEnabled!==e&&(this._DetailTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get DecalMapEnabled(){return this._DecalMapEnabled}static set DecalMapEnabled(e){this._DecalMapEnabled!==e&&(this._DecalMapEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get AmbientTextureEnabled(){return this._AmbientTextureEnabled}static set AmbientTextureEnabled(e){this._AmbientTextureEnabled!==e&&(this._AmbientTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get OpacityTextureEnabled(){return this._OpacityTextureEnabled}static set OpacityTextureEnabled(e){this._OpacityTextureEnabled!==e&&(this._OpacityTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get ReflectionTextureEnabled(){return this._ReflectionTextureEnabled}static set ReflectionTextureEnabled(e){this._ReflectionTextureEnabled!==e&&(this._ReflectionTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get EmissiveTextureEnabled(){return this._EmissiveTextureEnabled}static set EmissiveTextureEnabled(e){this._EmissiveTextureEnabled!==e&&(this._EmissiveTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get SpecularTextureEnabled(){return this._SpecularTextureEnabled}static set SpecularTextureEnabled(e){this._SpecularTextureEnabled!==e&&(this._SpecularTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get BumpTextureEnabled(){return this._BumpTextureEnabled}static set BumpTextureEnabled(e){this._BumpTextureEnabled!==e&&(this._BumpTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get LightmapTextureEnabled(){return this._LightmapTextureEnabled}static set LightmapTextureEnabled(e){this._LightmapTextureEnabled!==e&&(this._LightmapTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get RefractionTextureEnabled(){return this._RefractionTextureEnabled}static set RefractionTextureEnabled(e){this._RefractionTextureEnabled!==e&&(this._RefractionTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get ColorGradingTextureEnabled(){return this._ColorGradingTextureEnabled}static set ColorGradingTextureEnabled(e){this._ColorGradingTextureEnabled!==e&&(this._ColorGradingTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get FresnelEnabled(){return this._FresnelEnabled}static set FresnelEnabled(e){this._FresnelEnabled!==e&&(this._FresnelEnabled=e,Re.MarkAllMaterialsAsDirty(4))}static get ClearCoatTextureEnabled(){return this._ClearCoatTextureEnabled}static set ClearCoatTextureEnabled(e){this._ClearCoatTextureEnabled!==e&&(this._ClearCoatTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get ClearCoatBumpTextureEnabled(){return this._ClearCoatBumpTextureEnabled}static set ClearCoatBumpTextureEnabled(e){this._ClearCoatBumpTextureEnabled!==e&&(this._ClearCoatBumpTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get ClearCoatTintTextureEnabled(){return this._ClearCoatTintTextureEnabled}static set ClearCoatTintTextureEnabled(e){this._ClearCoatTintTextureEnabled!==e&&(this._ClearCoatTintTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get SheenTextureEnabled(){return this._SheenTextureEnabled}static set SheenTextureEnabled(e){this._SheenTextureEnabled!==e&&(this._SheenTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get AnisotropicTextureEnabled(){return this._AnisotropicTextureEnabled}static set AnisotropicTextureEnabled(e){this._AnisotropicTextureEnabled!==e&&(this._AnisotropicTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get ThicknessTextureEnabled(){return this._ThicknessTextureEnabled}static set ThicknessTextureEnabled(e){this._ThicknessTextureEnabled!==e&&(this._ThicknessTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get RefractionIntensityTextureEnabled(){return this._ThicknessTextureEnabled}static set RefractionIntensityTextureEnabled(e){this._RefractionIntensityTextureEnabled!==e&&(this._RefractionIntensityTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get TranslucencyIntensityTextureEnabled(){return this._TranslucencyIntensityTextureEnabled}static set TranslucencyIntensityTextureEnabled(e){this._TranslucencyIntensityTextureEnabled!==e&&(this._TranslucencyIntensityTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get TranslucencyColorTextureEnabled(){return this._TranslucencyColorTextureEnabled}static set TranslucencyColorTextureEnabled(e){this._TranslucencyColorTextureEnabled!==e&&(this._TranslucencyColorTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}static get IridescenceTextureEnabled(){return this._IridescenceTextureEnabled}static set IridescenceTextureEnabled(e){this._IridescenceTextureEnabled!==e&&(this._IridescenceTextureEnabled=e,Re.MarkAllMaterialsAsDirty(1))}};le._DiffuseTextureEnabled=!0;le._BaseWeightTextureEnabled=!0;le._BaseDiffuseRoughnessTextureEnabled=!0;le._DetailTextureEnabled=!0;le._DecalMapEnabled=!0;le._AmbientTextureEnabled=!0;le._OpacityTextureEnabled=!0;le._ReflectionTextureEnabled=!0;le._EmissiveTextureEnabled=!0;le._SpecularTextureEnabled=!0;le._BumpTextureEnabled=!0;le._LightmapTextureEnabled=!0;le._RefractionTextureEnabled=!0;le._ColorGradingTextureEnabled=!0;le._FresnelEnabled=!0;le._ClearCoatTextureEnabled=!0;le._ClearCoatBumpTextureEnabled=!0;le._ClearCoatTintTextureEnabled=!0;le._SheenTextureEnabled=!0;le._AnisotropicTextureEnabled=!0;le._ThicknessTextureEnabled=!0;le._RefractionIntensityTextureEnabled=!0;le._TranslucencyIntensityTextureEnabled=!0;le._TranslucencyColorTextureEnabled=!0;le._IridescenceTextureEnabled=!0});function uf(n,e,t){if(!n||n.LOGARITHMICDEPTH||n.indexOf&&n.indexOf("LOGARITHMICDEPTH")>=0){let i=t.activeCamera;i.mode===1&&J.Error("Logarithmic depth is not compatible with orthographic cameras!",20),e.setFloat("logarithmicDepthConstant",2/(Math.log(i.maxZ+1)/Math.LN2))}}var PV=C(()=>{Pt()});function mf(n,e,t,i=!1){t&&n.fogEnabled&&(!e||e.applyFog)&&n.fogMode!==0&&(t.setFloat4("vFogInfos",n.fogMode,n.fogStart,n.fogEnd,n.fogDensity),i?(n.fogColor.toLinearSpaceToRef(DV,n.getEngine().useExactSrgbConversions),t.setColor3("vFogColor",DV)):t.setColor3("vFogColor",n.fogColor))}function rl(n,e,t,i,r,s,a,o,l,c){let f=n.numMaxInfluencers||n.numInfluencers;return f<=0?0:(e.push("#define MORPHTARGETS"),n.hasPositions&&e.push("#define MORPHTARGETTEXTURE_HASPOSITIONS"),n.hasNormals&&e.push("#define MORPHTARGETTEXTURE_HASNORMALS"),n.hasTangents&&e.push("#define MORPHTARGETTEXTURE_HASTANGENTS"),n.hasUVs&&e.push("#define MORPHTARGETTEXTURE_HASUVS"),n.hasUV2s&&e.push("#define MORPHTARGETTEXTURE_HASUV2S"),n.hasColors&&e.push("#define MORPHTARGETTEXTURE_HASCOLORS"),n.supportsPositions&&r&&e.push("#define MORPHTARGETS_POSITION"),n.supportsNormals&&s&&e.push("#define MORPHTARGETS_NORMAL"),n.supportsTangents&&a&&e.push("#define MORPHTARGETS_TANGENT"),n.supportsUVs&&o&&e.push("#define MORPHTARGETS_UV"),n.supportsUV2s&&l&&e.push("#define MORPHTARGETS_UV2"),n.supportsColors&&c&&e.push("#define MORPHTARGETS_COLOR"),e.push("#define NUM_MORPH_INFLUENCERS "+f),n.isUsingTextureForTargets&&e.push("#define MORPHTARGETS_TEXTURE"),Wh.NUM_MORPH_INFLUENCERS=f,Wh.NORMAL=s,Wh.TANGENT=a,Wh.UV=o,Wh.UV2=l,Wh.COLOR=c,Hh(t,i,Wh,r),f)}function Hh(n,e,t,i=!0){let r=t.NUM_MORPH_INFLUENCERS;if(r>0&&Le.LastCreatedEngine){let s=Le.LastCreatedEngine.getCaps().maxVertexAttribs,a=e.morphTargetManager;if(a!=null&&a.isUsingTextureForTargets)return;let o=a&&a.supportsPositions&&i,l=a&&a.supportsNormals&&t.NORMAL,c=a&&a.supportsTangents&&t.TANGENT,f=a&&a.supportsUVs&&t.UV1,h=a&&a.supportsUV2s&&t.UV2,d=a&&a.supportsColors&&t.VERTEXCOLOR;for(let u=0;us&&J.Error("Cannot add more vertex attributes for mesh "+e.name)}}function co(n,e=!1){n.push("world0"),n.push("world1"),n.push("world2"),n.push("world3"),e&&(n.push("previousWorld0"),n.push("previousWorld1"),n.push("previousWorld2"),n.push("previousWorld3"))}function Cn(n,e){let t=n.morphTargetManager;!n||!t||e.setFloatArray("morphTargetInfluences",t.influences)}function pf(n,e){e.bindToEffect(n,"Scene")}function nm(n,e,t,i,r=null,s=!1,a=!1,o=!1,l=!1,c=!1,f=!1,h=0){if(n.texturesEnabled&&r&&le.ReflectionTextureEnabled){if(t.updateMatrix("reflectionMatrix",r.getReflectionTextureMatrix()),t.updateFloat2("vReflectionInfos",r.level*n.iblIntensity,h),o&&r.boundingBoxSize){let d=r;t.updateVector3("vReflectionPosition",d.boundingBoxPosition),t.updateVector3("vReflectionSize",d.boundingBoxSize)}if(s){let d=r.getSize().width;t.updateFloat2("vReflectionFilteringInfo",d,Math.log2(d))}if(c&&!e.USEIRRADIANCEMAP){let d=r.sphericalPolynomial;if(e.USESPHERICALFROMREFLECTIONMAP&&d)if(e.SPHERICAL_HARMONICS){let u=d.preScaledHarmonics;t.updateVector3("vSphericalL00",u.l00),t.updateVector3("vSphericalL1_1",u.l1_1),t.updateVector3("vSphericalL10",u.l10),t.updateVector3("vSphericalL11",u.l11),t.updateVector3("vSphericalL2_2",u.l2_2),t.updateVector3("vSphericalL2_1",u.l2_1),t.updateVector3("vSphericalL20",u.l20),t.updateVector3("vSphericalL21",u.l21),t.updateVector3("vSphericalL22",u.l22)}else t.updateFloat3("vSphericalX",d.x.x,d.x.y,d.x.z),t.updateFloat3("vSphericalY",d.y.x,d.y.y,d.y.z),t.updateFloat3("vSphericalZ",d.z.x,d.z.y,d.z.z),t.updateFloat3("vSphericalXX_ZZ",d.xx.x-d.zz.x,d.xx.y-d.zz.y,d.xx.z-d.zz.z),t.updateFloat3("vSphericalYY_ZZ",d.yy.x-d.zz.x,d.yy.y-d.zz.y,d.yy.z-d.zz.z),t.updateFloat3("vSphericalZZ",d.zz.x,d.zz.y,d.zz.z),t.updateFloat3("vSphericalXY",d.xy.x,d.xy.y,d.xy.z),t.updateFloat3("vSphericalYZ",d.yz.x,d.yz.y,d.yz.z),t.updateFloat3("vSphericalZX",d.zx.x,d.zx.y,d.zx.z)}else l&&e.USEIRRADIANCEMAP&&e.USE_IRRADIANCE_DOMINANT_DIRECTION&&r.irradianceTexture&&t.updateVector3("vReflectionDominantDirection",r.irradianceTexture._dominantDirection);a&&t.updateFloat3("vReflectionMicrosurfaceInfos",r.getSize().width,r.lodGenerationScale,r.lodGenerationOffset)}f&&t.updateColor3("vReflectionColor",i)}function aA(n,e,t,i=null,r=!1){if(i&&le.ReflectionTextureEnabled){e.LODBASEDMICROSFURACE?t.setTexture("reflectionSampler",i):(t.setTexture("reflectionSampler",i._lodTextureMid||i),t.setTexture("reflectionSamplerLow",i._lodTextureLow||i),t.setTexture("reflectionSamplerHigh",i._lodTextureHigh||i)),e.USEIRRADIANCEMAP&&t.setTexture("irradianceSampler",i.irradianceTexture);let s=n.iblCdfGenerator;r&&s&&t.setTexture("icdfSampler",s.getIcdfTexture())}}function ri(n,e,t){e._needUVs=!0,e[t]=!0,n.optimizeUVAllocation&&n.getTextureMatrix().isIdentityAs3x2()?(e[t+"DIRECTUV"]=n.coordinatesIndex+1,e["MAINUV"+(n.coordinatesIndex+1)]=!0):e[t+"DIRECTUV"]=0}function ni(n,e,t){let i=n.getTextureMatrix();e.updateMatrix(t+"Matrix",i)}function sm(n,e,t){t.BAKED_VERTEX_ANIMATION_TEXTURE&&t.INSTANCES&&n.push("bakedVertexAnimationSettingsInstanced")}function _ne(n,e){return e.set(n),e}function gs(n,e,t){if(!(!e||!n)&&(n.computeBonesUsingShaders&&e._bonesComputationForcedToCPU&&(n.computeBonesUsingShaders=!1),n.useBones&&n.computeBonesUsingShaders&&n.skeleton)){let i=n.skeleton;if(i.isUsingTextureForMatrices&&e.getUniformIndex("boneTextureInfo")>-1){let r=i.getTransformMatrixTexture(n);e.setTexture("boneSampler",r),e.setFloat2("boneTextureInfo",i._textureWidth,i._textureHeight)}else{let r=i.getTransformMatrices(n);r&&(e.setMatrices("mBones",r),t&&n.getScene().prePassRenderer&&n.getScene().prePassRenderer.getIndex(2)&&(t.previousBones[n.uniqueId]||(t.previousBones[n.uniqueId]=r.slice()),e.setMatrices("mPreviousBones",t.previousBones[n.uniqueId]),_ne(r,t.previousBones[n.uniqueId])))}}}function gne(n,e,t,i,r,s=!0){n._bindLight(e,t,i,r,s)}function am(n,e,t,i,r=4){let s=Math.min(e.lightSources.length,r);for(let a=0;a0&&(i.addCPUSkinningFallback(0,e),n.push("matricesIndices"),n.push("matricesWeights"),t.NUM_BONE_INFLUENCERS>4&&(n.push("matricesIndicesExtra"),n.push("matricesWeightsExtra")))}function lm(n,e){(e.INSTANCES||e.THIN_INSTANCES)&&co(n,!!e.PREPASS_VELOCITY),e.INSTANCESCOLOR&&n.push("instanceColor")}function cm(n,e,t=4,i=0){let r=0;for(let s=0;s0&&(r=i+s,e.addFallback(r,"LIGHT"+s)),n.SHADOWS||(n["SHADOW"+s]&&e.addFallback(i,"SHADOW"+s),n["SHADOWPCF"+s]&&e.addFallback(i,"SHADOWPCF"+s),n["SHADOWPCSS"+s]&&e.addFallback(i,"SHADOWPCSS"+s),n["SHADOWPOISSON"+s]&&e.addFallback(i,"SHADOWPOISSON"+s),n["SHADOWESM"+s]&&e.addFallback(i,"SHADOWESM"+s),n["SHADOWCLOSEESM"+s]&&e.addFallback(i,"SHADOWCLOSEESM"+s));return r}function vne(n,e){return e.fogEnabled&&n.applyFog&&e.fogMode!==0}function fm(n,e,t,i,r,s,a,o=!1,l=!1,c,f){var h;if(a._areMiscDirty){a.LOGARITHMICDEPTH=t,a.POINTSIZE=i,a.FOG=r&&vne(n,e),a.NONUNIFORMSCALING=n.nonUniformScaling,a.ALPHATEST=s,a.DECAL_AFTER_DETAIL=o,a.USE_VERTEX_PULLING=l,a.RIGHT_HANDED=e.useRightHandedSystem;let d=(h=c==null?void 0:c.geometry)==null?void 0:h.getIndexBuffer(),u=c?c.isUnIndexed:!1;a.VERTEX_PULLING_USE_INDEX_BUFFER=!!d&&!u,a.VERTEX_PULLING_INDEX_BUFFER_32BITS=d&&!u?d.is32Bits:!1,a.VERTEXOUTPUT_INVARIANT=!!f}}function hm(n,e,t,i=!1){if(!n.lightsEnabled||i)return!0;let r=e.lightSources,s=Math.min(r.length,t);for(let a=0;a0?(t.NUM_SAMPLES=""+r,a._features.needTypeSuffixInShaderConstants&&(t.NUM_SAMPLES=t.NUM_SAMPLES+"u"),t.REALTIME_FILTERING=!0,n.iblCdfGenerator&&(t.IBL_CDF_FILTERING=!0)):t.REALTIME_FILTERING=!1,t.INVERTCUBICMAP=e.coordinatesMode===ge.INVCUBIC_MODE,t.REFLECTIONMAP_3D=e.isCube,t.REFLECTIONMAP_OPPOSITEZ=t.REFLECTIONMAP_3D&&n.useRightHandedSystem?!e.invertZ:e.invertZ,t.REFLECTIONMAP_CUBIC=!1,t.REFLECTIONMAP_EXPLICIT=!1,t.REFLECTIONMAP_PLANAR=!1,t.REFLECTIONMAP_PROJECTION=!1,t.REFLECTIONMAP_SKYBOX=!1,t.REFLECTIONMAP_SPHERICAL=!1,t.REFLECTIONMAP_EQUIRECTANGULAR=!1,t.REFLECTIONMAP_EQUIRECTANGULAR_FIXED=!1,t.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED=!1,e.coordinatesMode){case ge.EXPLICIT_MODE:t.REFLECTIONMAP_EXPLICIT=!0;break;case ge.PLANAR_MODE:t.REFLECTIONMAP_PLANAR=!0;break;case ge.PROJECTION_MODE:t.REFLECTIONMAP_PROJECTION=!0;break;case ge.SKYBOX_MODE:t.REFLECTIONMAP_SKYBOX=!0;break;case ge.SPHERICAL_MODE:t.REFLECTIONMAP_SPHERICAL=!0;break;case ge.EQUIRECTANGULAR_MODE:t.REFLECTIONMAP_EQUIRECTANGULAR=!0;break;case ge.FIXED_EQUIRECTANGULAR_MODE:t.REFLECTIONMAP_EQUIRECTANGULAR_FIXED=!0;break;case ge.FIXED_EQUIRECTANGULAR_MIRRORED_MODE:t.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED=!0;break;case ge.CUBIC_MODE:case ge.INVCUBIC_MODE:default:t.REFLECTIONMAP_CUBIC=!0,t.USE_LOCAL_REFLECTIONMAP_CUBIC=!!e.boundingBoxSize;break}e.coordinatesMode!==ge.SKYBOX_MODE&&(e.irradianceTexture?(t.USEIRRADIANCEMAP=!0,t.USESPHERICALFROMREFLECTIONMAP=!1,t.USESPHERICALINVERTEX=!1,e.irradianceTexture._dominantDirection?t.USE_IRRADIANCE_DOMINANT_DIRECTION=!0:t.USE_IRRADIANCE_DOMINANT_DIRECTION=!1):e.isCube&&(t.USESPHERICALFROMREFLECTIONMAP=!0,t.USEIRRADIANCEMAP=!1,t.USE_IRRADIANCE_DOMINANT_DIRECTION=!1,t.USESPHERICALINVERTEX=s))}else t.REFLECTION=!1,t.REFLECTIONMAP_3D=!1,t.REFLECTIONMAP_SPHERICAL=!1,t.REFLECTIONMAP_PLANAR=!1,t.REFLECTIONMAP_CUBIC=!1,t.USE_LOCAL_REFLECTIONMAP_CUBIC=!1,t.REFLECTIONMAP_PROJECTION=!1,t.REFLECTIONMAP_SKYBOX=!1,t.REFLECTIONMAP_EXPLICIT=!1,t.REFLECTIONMAP_EQUIRECTANGULAR=!1,t.REFLECTIONMAP_EQUIRECTANGULAR_FIXED=!1,t.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED=!1,t.INVERTCUBICMAP=!1,t.USESPHERICALFROMREFLECTIONMAP=!1,t.USEIRRADIANCEMAP=!1,t.USE_IRRADIANCE_DOMINANT_DIRECTION=!1,t.USESPHERICALINVERTEX=!1,t.REFLECTIONMAP_OPPOSITEZ=!1,t.LODINREFLECTIONALPHA=!1,t.GAMMAREFLECTION=!1,t.RGBDREFLECTION=!1,t.LINEARSPECULARREFLECTION=!1;return!0}function Ene(n,e,t,i,r,s,a){var o;switch(a.needNormals=!0,r["LIGHT"+i]===void 0&&(a.needRebuild=!0),r["LIGHT"+i]=!0,r["SPOTLIGHT"+i]=!1,r["HEMILIGHT"+i]=!1,r["POINTLIGHT"+i]=!1,r["DIRLIGHT"+i]=!1,r["AREALIGHT"+i]=!1,r["CLUSTLIGHT"+i]=!1,t.prepareLightSpecificDefines(r,i),r["LIGHT_FALLOFF_PHYSICAL"+i]=!1,r["LIGHT_FALLOFF_GLTF"+i]=!1,r["LIGHT_FALLOFF_STANDARD"+i]=!1,t.falloffType){case Kt.FALLOFF_GLTF:r["LIGHT_FALLOFF_GLTF"+i]=!0;break;case Kt.FALLOFF_PHYSICAL:r["LIGHT_FALLOFF_PHYSICAL"+i]=!0;break;case Kt.FALLOFF_STANDARD:r["LIGHT_FALLOFF_STANDARD"+i]=!0;break}if(s&&!t.specular.equalsFloats(0,0,0)&&(a.specularEnabled=!0),r["SHADOW"+i]=!1,r["SHADOWCSM"+i]=!1,r["SHADOWCSMDEBUG"+i]=!1,r["SHADOWCSMNUM_CASCADES"+i]=!1,r["SHADOWCSMUSESHADOWMAXZ"+i]=!1,r["SHADOWCSMNOBLEND"+i]=!1,r["SHADOWCSM_RIGHTHANDED"+i]=!1,r["SHADOWPCF"+i]=!1,r["SHADOWPCSS"+i]=!1,r["SHADOWPOISSON"+i]=!1,r["SHADOWESM"+i]=!1,r["SHADOWCLOSEESM"+i]=!1,r["SHADOWCUBE"+i]=!1,r["SHADOWLOWQUALITY"+i]=!1,r["SHADOWMEDIUMQUALITY"+i]=!1,e&&e.receiveShadows&&n.shadowsEnabled&&t.shadowEnabled){let l=(o=t.getShadowGenerator(n.activeCamera))!=null?o:t.getShadowGenerator();if(l){let c=l.getShadowMap();c&&c.renderList&&c.renderList.length>0&&(a.shadowEnabled=!0,l.prepareDefines(r,i))}}t.lightmapMode!=Kt.LIGHTMAP_DEFAULT?(a.lightmapMode=!0,r["LIGHTMAPEXCLUDED"+i]=!0,r["LIGHTMAPNOSPECULAR"+i]=t.lightmapMode==Kt.LIGHTMAP_SHADOWSONLY):(r["LIGHTMAPEXCLUDED"+i]=!1,r["LIGHTMAPNOSPECULAR"+i]=!1)}function um(n,e,t,i,r,s=null,a=!1){let o=xne(n,i);s!==!1&&(o=yV(t,n,i)),i.DEPTHPREPASS!==!e.getColorWrite()&&(i.DEPTHPREPASS=!i.DEPTHPREPASS,o=!0),i.INSTANCES!==r&&(i.INSTANCES=r,o=!0),i.THIN_INSTANCES!==a&&(i.THIN_INSTANCES=a,o=!0),o&&i.markAsUnprocessed()}function Sne(n,e){if(n.useBones&&n.computeBonesUsingShaders&&n.skeleton){e.NUM_BONE_INFLUENCERS=n.numBoneInfluencers;let t=e.BONETEXTURE!==void 0;if(n.skeleton.isUsingTextureForMatrices&&t)e.BONETEXTURE=!0;else{e.BonesPerMesh=n.skeleton.bones.length+1,e.BONETEXTURE=t?!1:void 0;let i=n.getScene().prePassRenderer;if(i&&i.enabled){let r=i.excludedSkinnedMesh.indexOf(n)===-1;e.BONES_VELOCITY_ENABLED=r}}}else e.NUM_BONE_INFLUENCERS=0,e.BonesPerMesh=0,e.BONETEXTURE!==void 0&&(e.BONETEXTURE=!1)}function Tne(n,e){let t=n.morphTargetManager;t?(e.MORPHTARGETS_UV=t.supportsUVs&&e.UV1,e.MORPHTARGETS_UV2=t.supportsUV2s&&e.UV2,e.MORPHTARGETS_TANGENT=t.supportsTangents&&e.TANGENT,e.MORPHTARGETS_NORMAL=t.supportsNormals&&e.NORMAL,e.MORPHTARGETS_POSITION=t.supportsPositions,e.MORPHTARGETS_COLOR=t.supportsColors,e.MORPHTARGETTEXTURE_HASUVS=t.hasUVs,e.MORPHTARGETTEXTURE_HASUV2S=t.hasUV2s,e.MORPHTARGETTEXTURE_HASTANGENTS=t.hasTangents,e.MORPHTARGETTEXTURE_HASNORMALS=t.hasNormals,e.MORPHTARGETTEXTURE_HASPOSITIONS=t.hasPositions,e.MORPHTARGETTEXTURE_HASCOLORS=t.hasColors,e.NUM_MORPH_INFLUENCERS=t.numMaxInfluencers||t.numInfluencers,e.MORPHTARGETS=e.NUM_MORPH_INFLUENCERS>0,e.MORPHTARGETS_TEXTURE=t.isUsingTextureForTargets):(e.MORPHTARGETS_UV=!1,e.MORPHTARGETS_UV2=!1,e.MORPHTARGETS_TANGENT=!1,e.MORPHTARGETS_NORMAL=!1,e.MORPHTARGETS_POSITION=!1,e.MORPHTARGETS_COLOR=!1,e.MORPHTARGETTEXTURE_HASUVS=!1,e.MORPHTARGETTEXTURE_HASUV2S=!1,e.MORPHTARGETTEXTURE_HASTANGENTS=!1,e.MORPHTARGETTEXTURE_HASNORMALS=!1,e.MORPHTARGETTEXTURE_HASPOSITIONS=!1,e.MORPHTARGETTEXTURE_HAS_COLORS=!1,e.MORPHTARGETS=!1,e.NUM_MORPH_INFLUENCERS=0)}function Ane(n,e){let t=n.bakedVertexAnimationManager;e.BAKED_VERTEX_ANIMATION_TEXTURE=!!(t&&t.isEnabled)}function mm(n,e,t,i,r=!1,s=!0,a=!0){if(!e._areAttributesDirty&&e._needNormals===e._normals&&e._needUVs===e._uvs)return!1;e._normals=e._needNormals,e._uvs=e._needUVs,e.NORMAL=e._needNormals&&n.isVerticesDataPresent("normal"),e._needNormals&&n.isVerticesDataPresent("tangent")&&(e.TANGENT=!0);for(let o=1;o<=6;++o)e["UV"+o]=e._needUVs?n.isVerticesDataPresent(`uv${o===1?"":o}`):!1;if(t){let o=n.useVertexColors&&n.isVerticesDataPresent("color");e.VERTEXCOLOR=o,e.VERTEXALPHA=n.hasVertexAlpha&&o&&s}return n.isVerticesDataPresent("instanceColor")&&(n.hasInstances||n.hasThinInstances)&&(e.INSTANCESCOLOR=!0),i&&Sne(n,e),r&&Tne(n,e),a&&Ane(n,e),!0}function pm(n,e){if(n.activeCamera){let t=e.MULTIVIEW;e.MULTIVIEW=n.activeCamera.outputRenderTarget!==null&&n.activeCamera.outputRenderTarget.getViewCount()>1,e.MULTIVIEW!=t&&e.markAsUnprocessed()}}function _m(n,e,t){let i=e.ORDER_INDEPENDENT_TRANSPARENCY,r=e.ORDER_INDEPENDENT_TRANSPARENCY_16BITS;e.ORDER_INDEPENDENT_TRANSPARENCY=n.useOrderIndependentTransparency&&t,e.ORDER_INDEPENDENT_TRANSPARENCY_16BITS=!n.getEngine().getCaps().textureFloatLinearFiltering,(i!==e.ORDER_INDEPENDENT_TRANSPARENCY||r!==e.ORDER_INDEPENDENT_TRANSPARENCY_16BITS)&&e.markAsUnprocessed()}function gm(n,e,t){let i=e.PREPASS;if(!e._arePrePassDirty)return;let r=[{type:1,define:"PREPASS_POSITION",index:"PREPASS_POSITION_INDEX"},{type:9,define:"PREPASS_LOCAL_POSITION",index:"PREPASS_LOCAL_POSITION_INDEX"},{type:2,define:"PREPASS_VELOCITY",index:"PREPASS_VELOCITY_INDEX"},{type:11,define:"PREPASS_VELOCITY_LINEAR",index:"PREPASS_VELOCITY_LINEAR_INDEX"},{type:3,define:"PREPASS_REFLECTIVITY",index:"PREPASS_REFLECTIVITY_INDEX"},{type:0,define:"PREPASS_IRRADIANCE_LEGACY",index:"PREPASS_IRRADIANCE_LEGACY_INDEX"},{type:7,define:"PREPASS_ALBEDO_SQRT",index:"PREPASS_ALBEDO_SQRT_INDEX"},{type:5,define:"PREPASS_DEPTH",index:"PREPASS_DEPTH_INDEX"},{type:10,define:"PREPASS_SCREENSPACE_DEPTH",index:"PREPASS_SCREENSPACE_DEPTH_INDEX"},{type:6,define:"PREPASS_NORMAL",index:"PREPASS_NORMAL_INDEX"},{type:8,define:"PREPASS_WORLD_NORMAL",index:"PREPASS_WORLD_NORMAL_INDEX"},{type:14,define:"PREPASS_IRRADIANCE",index:"PREPASS_IRRADIANCE_INDEX"}];if(n.prePassRenderer&&n.prePassRenderer.enabled&&t){e.PREPASS=!0,e.SCENE_MRT_COUNT=n.prePassRenderer.mrtCount,e.PREPASS_NORMAL_WORLDSPACE=n.prePassRenderer.generateNormalsInWorldSpace,e.PREPASS_COLOR=!0,e.PREPASS_COLOR_INDEX=0;for(let s=0;s{Pt();Pi();I_();il();Ma();Gr();PV();DV={r:0,g:0,b:0},Wh={NUM_MORPH_INFLUENCERS:0,NORMAL:!1,TANGENT:!1,UV:!1,UV2:!1,COLOR:!1}});var ve,Pn=C(()=>{kt();Ut();Ci();hi();Pi();K_();of();Pt();wu();Lh();CV();yn();Er();YI();ve=class n{get useVertexPulling(){return this._useVertexPulling}set useVertexPulling(e){this._useVertexPulling!==e&&(this._useVertexPulling=e,this.markAsDirty(n.MiscDirtyFlag))}get _supportGlowLayer(){return!1}set _glowModeEnabled(e){}get shaderLanguage(){return this._shaderLanguage}get canRenderToMRT(){return!1}set alpha(e){if(this._alpha===e)return;let t=this._alpha;this._alpha=e,(t===1||e===1)&&this.markAsDirty(n.MiscDirtyFlag+n.PrePassDirtyFlag)}get alpha(){return this._alpha}set backFaceCulling(e){this._backFaceCulling!==e&&(this._backFaceCulling=e,this.markAsDirty(n.TextureDirtyFlag))}get backFaceCulling(){return this._backFaceCulling}set cullBackFaces(e){this._cullBackFaces!==e&&(this._cullBackFaces=e,this.markAsDirty(n.TextureDirtyFlag))}get cullBackFaces(){return this._cullBackFaces}get blockDirtyMechanism(){return this._blockDirtyMechanism}set blockDirtyMechanism(e){this._blockDirtyMechanism!==e&&(this._blockDirtyMechanism=e,e||this.markDirty())}atomicMaterialsUpdate(e){this.blockDirtyMechanism=!0;try{e(this)}finally{this.blockDirtyMechanism=!1}}get hasRenderTargetTextures(){return this._eventInfo.hasRenderTargetTextures=!1,this._callbackPluginEventHasRenderTargetTextures(this._eventInfo),this._eventInfo.hasRenderTargetTextures}set onDispose(e){this._onDisposeObserver&&this.onDisposeObservable.remove(this._onDisposeObserver),this._onDisposeObserver=this.onDisposeObservable.add(e)}get onBindObservable(){return this._onBindObservable||(this._onBindObservable=new te),this._onBindObservable}set onBind(e){this._onBindObserver&&this.onBindObservable.remove(this._onBindObserver),this._onBindObserver=this.onBindObservable.add(e)}get onUnBindObservable(){return this._onUnBindObservable||(this._onUnBindObservable=new te),this._onUnBindObservable}get onEffectCreatedObservable(){return this._onEffectCreatedObservable||(this._onEffectCreatedObservable=new te),this._onEffectCreatedObservable}set alphaMode(e){this._alphaMode[0]!==e&&(this._alphaMode[0]=e,this.markAsDirty(n.TextureDirtyFlag))}get alphaMode(){return this._alphaMode[0]}get alphaModes(){return this._alphaMode}setAlphaMode(e,t=0){this._alphaMode[t]!==e&&(this._alphaMode[t]=e,this.markAsDirty(n.TextureDirtyFlag))}set needDepthPrePass(e){this._needDepthPrePass!==e&&(this._needDepthPrePass=e,this._needDepthPrePass&&(this.checkReadyOnEveryCall=!0))}get needDepthPrePass(){return this._needDepthPrePass}get isPrePassCapable(){return!1}set fogEnabled(e){this._fogEnabled!==e&&(this._fogEnabled=e,this.markAsDirty(n.MiscDirtyFlag))}get fogEnabled(){return this._fogEnabled}get wireframe(){switch(this._fillMode){case n.WireFrameFillMode:case n.LineListDrawMode:case n.LineLoopDrawMode:case n.LineStripDrawMode:return!0}return this._scene.forceWireframe}set wireframe(e){this.fillMode=e?n.WireFrameFillMode:n.TriangleFillMode}get pointsCloud(){switch(this._fillMode){case n.PointFillMode:case n.PointListDrawMode:return!0}return this._scene.forcePointsCloud}set pointsCloud(e){this.fillMode=e?n.PointFillMode:n.TriangleFillMode}get fillMode(){return this._fillMode}set fillMode(e){this._fillMode!==e&&(this._fillMode=e,this.markAsDirty(n.MiscDirtyFlag))}get useLogarithmicDepth(){return this._useLogarithmicDepth}set useLogarithmicDepth(e){let t=this.getScene().getEngine().getCaps().fragmentDepthSupported;e&&!t&&J.Warn("Logarithmic depth has been requested for a material on a device that doesn't support it."),this._useLogarithmicDepth=e&&t,this._markAllSubMeshesAsMiscDirty()}get isVertexOutputInvariant(){return this._isVertexOutputInvariant}set isVertexOutputInvariant(e){this._isVertexOutputInvariant!==e&&(this._isVertexOutputInvariant=e,this._markAllSubMeshesAsMiscDirty())}_getDrawWrapper(){return this._drawWrapper}_setDrawWrapper(e){this._drawWrapper=e}constructor(e,t,i,r=!1){this.shadowDepthWrapper=null,this.allowShaderHotSwapping=!0,this._shaderLanguage=0,this._forceGLSL=!1,this._useVertexPulling=!1,this.metadata=null,this.reservedDataStore=null,this.checkReadyOnEveryCall=!1,this.checkReadyOnlyOnce=!1,this.state="",this._alpha=1,this._backFaceCulling=!0,this._cullBackFaces=!0,this._blockDirtyMechanism=!1,this.sideOrientation=null,this.onCompiled=null,this.onError=null,this.getRenderTargetTextures=null,this.doNotSerialize=!1,this._storeEffectOnSubMeshes=!1,this.animations=null,this.onDisposeObservable=new te,this._onDisposeObserver=null,this._onUnBindObservable=null,this._onBindObserver=null,this._alphaMode=[2],this._needDepthPrePass=!1,this.disableDepthWrite=!1,this.disableColorWrite=!1,this.forceDepthWrite=!1,this.depthFunction=0,this.separateCullingPass=!1,this._fogEnabled=!0,this.pointSize=1,this.zOffset=0,this.zOffsetUnits=0,this.stencil=new bn,this._isVertexOutputInvariant=n.ForceVertexOutputInvariant,this._useUBO=!1,this._fillMode=n.TriangleFillMode,this._cachedDepthWriteState=!1,this._cachedColorWriteState=!1,this._cachedDepthFunctionState=0,this._indexInSceneMaterialArray=-1,this.meshMap=null,this._parentContainer=null,this._uniformBufferLayoutBuilt=!1,this._eventInfo={},this._callbackPluginEventGeneric=()=>{},this._callbackPluginEventIsReadyForSubMesh=()=>{},this._callbackPluginEventPrepareDefines=()=>{},this._callbackPluginEventPrepareDefinesBeforeAttributes=()=>{},this._callbackPluginEventHardBindForSubMesh=()=>{},this._callbackPluginEventBindForSubMesh=()=>{},this._callbackPluginEventHasRenderTargetTextures=()=>{},this._callbackPluginEventFillRenderTargetTextures=()=>{},this._transparencyMode=null,this.name=e;let s=t||Le.LastCreatedScene;s&&(this._scene=s,this._dirtyCallbacks={},this._forceGLSL=r,this._dirtyCallbacks[1]=this._markAllSubMeshesAsTexturesDirty.bind(this),this._dirtyCallbacks[2]=this._markAllSubMeshesAsLightsDirty.bind(this),this._dirtyCallbacks[4]=this._markAllSubMeshesAsFresnelDirty.bind(this),this._dirtyCallbacks[8]=this._markAllSubMeshesAsAttributesDirty.bind(this),this._dirtyCallbacks[16]=this._markAllSubMeshesAsMiscDirty.bind(this),this._dirtyCallbacks[32]=this._markAllSubMeshesAsPrePassDirty.bind(this),this._dirtyCallbacks[127]=this._markAllSubMeshesAsAllDirty.bind(this),this.id=e||de.RandomId(),this.uniqueId=this._scene.getUniqueId(),this._materialContext=this._scene.getEngine().createMaterialContext(),this._drawWrapper=new Wn(this._scene.getEngine(),!1),this._drawWrapper.materialContext=this._materialContext,this._uniformBuffer=new or(this._scene.getEngine(),void 0,void 0,e),this._useUBO=this.getScene().getEngine().supportsUniformBuffers,this._createUniformBuffer(),i||this._scene.addMaterial(this),this._scene.useMaterialMeshMap&&(this.meshMap={}),n.OnEventObservable.notifyObservers(this,1))}_createUniformBuffer(){var t;let e=this.getScene().getEngine();(t=this._uniformBuffer)==null||t.dispose(),e.isWebGPU&&!this._forceGLSL?(this._uniformBuffer=new or(e,void 0,void 0,this.name,!0),this._shaderLanguage=1):this._uniformBuffer=new or(this._scene.getEngine(),void 0,void 0,this.name),this._uniformBufferLayoutBuilt=!1}toString(e){return"Name: "+this.name}getClassName(){return"Material"}get _isMaterial(){return!0}get isFrozen(){return this.checkReadyOnlyOnce}freeze(){this.markDirty(),this.checkReadyOnlyOnce=!0}unfreeze(){this.markDirty(),this.checkReadyOnlyOnce=!1}isReady(e,t){return!0}isReadyForSubMesh(e,t,i){let r=t.materialDefines;return r?(this._eventInfo.isReadyForSubMesh=!0,this._eventInfo.defines=r,this._callbackPluginEventIsReadyForSubMesh(this._eventInfo),this._eventInfo.isReadyForSubMesh):!1}getEffect(){return this._drawWrapper.effect}getScene(){return this._scene}_getEffectiveOrientation(e){return this.sideOrientation!==null?this.sideOrientation:e.sideOrientation}get transparencyMode(){return this._transparencyMode}set transparencyMode(e){this._transparencyMode!==e&&(this._transparencyMode=e,this._markAllSubMeshesAsTexturesAndMiscDirty())}get _hasTransparencyMode(){return this._transparencyMode!=null}get _transparencyModeIsBlend(){return this._transparencyMode===n.MATERIAL_ALPHABLEND||this._transparencyMode===n.MATERIAL_ALPHATESTANDBLEND}get _transparencyModeIsTest(){return this._transparencyMode===n.MATERIAL_ALPHATEST||this._transparencyMode===n.MATERIAL_ALPHATESTANDBLEND}get _disableAlphaBlending(){return this._transparencyMode===n.MATERIAL_OPAQUE||this._transparencyMode===n.MATERIAL_ALPHATEST}needAlphaBlending(){return this._hasTransparencyMode?this._transparencyModeIsBlend:this._disableAlphaBlending?!1:this.alpha<1}needAlphaBlendingForMesh(e){return this._hasTransparencyMode?this._transparencyModeIsBlend:e.visibility<1?!0:this._disableAlphaBlending?!1:e.hasVertexAlpha||this.needAlphaBlending()}needAlphaTesting(){return this._hasTransparencyMode?this._transparencyModeIsTest:!1}needAlphaTestingForMesh(e){return this._hasTransparencyMode?this._transparencyModeIsTest:!this.needAlphaBlendingForMesh(e)&&this.needAlphaTesting()}getAlphaTestTexture(){return null}markDirty(e=!1){let t=this.getScene().meshes;for(let i of t)if(i.subMeshes){for(let r of i.subMeshes)if(r.getMaterial()===this)for(let s of r._drawWrappers)s&&this._materialContext===s.materialContext&&(s._wasPreviouslyReady=!1,s._wasPreviouslyUsingInstances=null,s._forceRebindOnNextCall=e)}e&&this.markAsDirty(n.AllDirtyFlag)}_preBind(e,t=null){let i=this._scene.getEngine(),s=(t==null?this.sideOrientation:t)===n.ClockWiseSideOrientation,a=e||this._getDrawWrapper();return eT(a)&&a.materialContext&&(a.materialContext.useVertexPulling=this.useVertexPulling),i.enableEffect(a),i.setState(this.backFaceCulling,this.zOffset,!1,s,this._scene._mirroredCameraPosition?!this.cullBackFaces:this.cullBackFaces,this.stencil,this.zOffsetUnits),s}bind(e,t){}buildUniformLayout(){let e=this._uniformBuffer;this._eventInfo.ubo=e,this._callbackPluginEventGeneric(8,this._eventInfo),e.create(),this._uniformBufferLayoutBuilt=!0}bindForSubMesh(e,t,i){let r=i._drawWrapper;this._eventInfo.subMesh=i,this._callbackPluginEventBindForSubMesh(this._eventInfo),r._forceRebindOnNextCall=!1}bindOnlyWorldMatrix(e){}bindView(e){this._useUBO?this._needToBindSceneUbo=!0:e.setMatrix("view",this.getScene().getViewMatrix())}bindViewProjection(e){this._useUBO?this._needToBindSceneUbo=!0:(e.setMatrix("viewProjection",this.getScene().getTransformMatrix()),e.setMatrix("projection",this.getScene().getProjectionMatrix()),e.setMatrix("inverseProjection",this.getScene().getInverseProjectionMatrix()))}bindEyePosition(e,t){this._useUBO?this._needToBindSceneUbo=!0:this._scene.bindEyePosition(e,t)}_afterBind(e,t=null,i){if(this._scene._cachedMaterial=this,this._needToBindSceneUbo&&t&&(this._needToBindSceneUbo=!1,pf(t,this.getScene().getSceneUniformBuffer()),this._scene.finalizeSceneUbo()),e?this._scene._cachedVisibility=e.visibility:this._scene._cachedVisibility=1,this._onBindObservable&&e&&this._onBindObservable.notifyObservers(e),this.disableDepthWrite){let r=this._scene.getEngine();this._cachedDepthWriteState=r.getDepthWrite(),r.setDepthWrite(!1)}if(this.disableColorWrite){let r=this._scene.getEngine();this._cachedColorWriteState=r.getColorWrite(),r.setColorWrite(!1)}if(this.depthFunction!==0){let r=this._scene.getEngine();this._cachedDepthFunctionState=r.getDepthFunction()||0,r.setDepthFunction(this.depthFunction)}}unbind(){this._scene.getSceneUniformBuffer().unbindEffect(),this._onUnBindObservable&&this._onUnBindObservable.notifyObservers(this),this.depthFunction!==0&&this._scene.getEngine().setDepthFunction(this._cachedDepthFunctionState),this.disableDepthWrite&&this._scene.getEngine().setDepthWrite(this._cachedDepthWriteState),this.disableColorWrite&&this._scene.getEngine().setColorWrite(this._cachedColorWriteState)}getAnimatables(){return this._eventInfo.animatables=[],this._callbackPluginEventGeneric(256,this._eventInfo),this._eventInfo.animatables}getActiveTextures(){return this._eventInfo.activeTextures=[],this._callbackPluginEventGeneric(512,this._eventInfo),this._eventInfo.activeTextures}hasTexture(e){return this._eventInfo.hasTexture=!1,this._eventInfo.texture=e,this._callbackPluginEventGeneric(1024,this._eventInfo),this._eventInfo.hasTexture}clone(e){return null}_clonePlugins(e,t){let i={};if(this._serializePlugins(i),n._ParsePlugins(i,e,this._scene,t),this.pluginManager)for(let r of this.pluginManager._plugins){let s=e.pluginManager.getPlugin(r.name);s&&r.copyTo(s)}}getBindedMeshes(){if(this.meshMap){let e=[];for(let t in this.meshMap){let i=this.meshMap[t];i&&e.push(i)}return e}else return this._scene.meshes.filter(t=>t.material===this)}forceCompilation(e,t,i,r){let s={clipPlane:!1,useInstances:!1,...i},a=this.getScene(),o=this.allowShaderHotSwapping;this.allowShaderHotSwapping=!1;let l=()=>{if(!this._scene||!this._scene.getEngine())return;let c=a.clipPlane;if(s.clipPlane&&(a.clipPlane=new Qa(0,0,0,1)),this._storeEffectOnSubMeshes){let f=!0,h=null;if(e.subMeshes){let d=new _s(0,0,0,0,0,e,void 0,!1,!1);d.materialDefines&&(d.materialDefines._renderId=-1),this.isReadyForSubMesh(e,d,s.useInstances)||(d.effect&&d.effect.getCompilationError()&&d.effect.allFallbacksProcessed()?h=d.effect.getCompilationError():(f=!1,setTimeout(l,16)))}f&&(this.allowShaderHotSwapping=o,h&&r&&r(h),t&&t(this))}else this.isReady()?(this.allowShaderHotSwapping=o,t&&t(this)):setTimeout(l,16);s.clipPlane&&(a.clipPlane=c)};l()}async forceCompilationAsync(e,t){return await new Promise((i,r)=>{this.forceCompilation(e,()=>{i()},t,s=>{r(s)})})}markAsDirty(e){this.getScene().blockMaterialDirtyMechanism||this._blockDirtyMechanism||(n._DirtyCallbackArray.length=0,e&n.ImageProcessingDirtyFlag&&n._DirtyCallbackArray.push(n._ImageProcessingDirtyCallBack),e&n.TextureDirtyFlag&&n._DirtyCallbackArray.push(n._TextureDirtyCallBack),e&n.LightDirtyFlag&&n._DirtyCallbackArray.push(n._LightsDirtyCallBack),e&n.FresnelDirtyFlag&&n._DirtyCallbackArray.push(n._FresnelDirtyCallBack),e&n.AttributesDirtyFlag&&n._DirtyCallbackArray.push(n._AttributeDirtyCallBack),e&n.MiscDirtyFlag&&n._DirtyCallbackArray.push(n._MiscDirtyCallBack),e&n.PrePassDirtyFlag&&n._DirtyCallbackArray.push(n._PrePassDirtyCallBack),n._DirtyCallbackArray.length&&this._markAllSubMeshesAsDirty(n._RunDirtyCallBacks),this.getScene().resetCachedMaterial())}resetDrawCache(){let e=this.getScene().meshes;for(let t of e)if(t.subMeshes)for(let i of t.subMeshes)i.getMaterial()===this&&i.resetDrawCache()}_markAllSubMeshesAsDirty(e){let t=this.getScene();if(t.blockMaterialDirtyMechanism||this._blockDirtyMechanism)return;let i=t.meshes;for(let r of i)if(r.subMeshes){for(let s of r.subMeshes)if((s.getMaterial()||(t._hasDefaultMaterial?t.defaultMaterial:null))===this)for(let o of s._drawWrappers)!o||!o.defines||!o.defines.markAllAsDirty||this._materialContext===o.materialContext&&e(o.defines)}}_markScenePrePassDirty(){if(this.getScene().blockMaterialDirtyMechanism||this._blockDirtyMechanism)return;let e=this.getScene().enablePrePassRenderer();e&&e.markAsDirty()}_markAllSubMeshesAsAllDirty(){this._markAllSubMeshesAsDirty(n._AllDirtyCallBack)}_markAllSubMeshesAsImageProcessingDirty(){this._markAllSubMeshesAsDirty(n._ImageProcessingDirtyCallBack)}_markAllSubMeshesAsTexturesDirty(){this._markAllSubMeshesAsDirty(n._TextureDirtyCallBack)}_markAllSubMeshesAsFresnelDirty(){this._markAllSubMeshesAsDirty(n._FresnelDirtyCallBack)}_markAllSubMeshesAsFresnelAndMiscDirty(){this._markAllSubMeshesAsDirty(n._FresnelAndMiscDirtyCallBack)}_markAllSubMeshesAsLightsDirty(){this._markAllSubMeshesAsDirty(n._LightsDirtyCallBack)}_markAllSubMeshesAsAttributesDirty(){this._markAllSubMeshesAsDirty(n._AttributeDirtyCallBack)}_markAllSubMeshesAsMiscDirty(){this._markAllSubMeshesAsDirty(n._MiscDirtyCallBack)}_markAllSubMeshesAsPrePassDirty(){this._markAllSubMeshesAsDirty(n._PrePassDirtyCallBack)}_markAllSubMeshesAsTexturesAndMiscDirty(){this._markAllSubMeshesAsDirty(n._TextureAndMiscDirtyCallBack)}_checkScenePerformancePriority(){if(this._scene.performancePriority!==0){this.checkReadyOnlyOnce=!0;let e=this._scene.onScenePerformancePriorityChangedObservable.addOnce(()=>{this.checkReadyOnlyOnce=!1});this.onDisposeObservable.add(()=>{this._scene.onScenePerformancePriorityChangedObservable.remove(e)})}}setPrePassRenderer(e){return!1}dispose(e,t,i){let r=this.getScene();if(r.stopAnimation(this),r.freeProcessedMaterials(),r.removeMaterial(this),this._eventInfo.forceDisposeTextures=t,this._callbackPluginEventGeneric(2,this._eventInfo),this._parentContainer){let s=this._parentContainer.materials.indexOf(this);s>-1&&this._parentContainer.materials.splice(s,1),this._parentContainer=null}if(i!==!0)if(this.meshMap)for(let s in this.meshMap){let a=this.meshMap[s];this._disposeMeshResources(a)}else{let s=r.meshes;for(let a of s)this._disposeMeshResources(a)}this._uniformBuffer.dispose(),this._drawWrapper.effect&&(this._storeEffectOnSubMeshes||this._drawWrapper.effect.dispose(),this._drawWrapper.effect=null),this.metadata=null,this.onDisposeObservable.notifyObservers(this),this.onDisposeObservable.clear(),this._onBindObservable&&this._onBindObservable.clear(),this._onUnBindObservable&&this._onUnBindObservable.clear(),this._onEffectCreatedObservable&&this._onEffectCreatedObservable.clear(),this._eventInfo&&(this._eventInfo={})}_disposeMeshResources(e){var r;if(!e)return;let t=e.geometry,i=e._internalAbstractMeshDataInfo._materialForRenderPass;if(this._storeEffectOnSubMeshes){if(e.subMeshes&&i)for(let s of e.subMeshes){let a=s._drawWrappers;for(let o=0;on.markAllAsDirty();ve._ImageProcessingDirtyCallBack=n=>n.markAsImageProcessingDirty();ve._TextureDirtyCallBack=n=>n.markAsTexturesDirty();ve._FresnelDirtyCallBack=n=>n.markAsFresnelDirty();ve._MiscDirtyCallBack=n=>n.markAsMiscDirty();ve._PrePassDirtyCallBack=n=>n.markAsPrePassDirty();ve._LightsDirtyCallBack=n=>n.markAsLightDirty();ve._AttributeDirtyCallBack=n=>n.markAsAttributesDirty();ve._FresnelAndMiscDirtyCallBack=n=>{ve._FresnelDirtyCallBack(n),ve._MiscDirtyCallBack(n)};ve._TextureAndMiscDirtyCallBack=n=>{ve._TextureDirtyCallBack(n),ve._MiscDirtyCallBack(n)};ve._DirtyCallbackArray=[];ve._RunDirtyCallBacks=n=>{for(let e of ve._DirtyCallbackArray)e(n)};P([w()],ve.prototype,"id",void 0);P([w()],ve.prototype,"uniqueId",void 0);P([w()],ve.prototype,"name",void 0);P([w()],ve.prototype,"metadata",void 0);P([w()],ve.prototype,"checkReadyOnEveryCall",void 0);P([w()],ve.prototype,"checkReadyOnlyOnce",void 0);P([w()],ve.prototype,"state",void 0);P([w("alpha")],ve.prototype,"_alpha",void 0);P([w("backFaceCulling")],ve.prototype,"_backFaceCulling",void 0);P([w("cullBackFaces")],ve.prototype,"_cullBackFaces",void 0);P([w()],ve.prototype,"sideOrientation",void 0);P([w()],ve.prototype,"_alphaMode",void 0);P([w()],ve.prototype,"_needDepthPrePass",void 0);P([w()],ve.prototype,"disableDepthWrite",void 0);P([w()],ve.prototype,"disableColorWrite",void 0);P([w()],ve.prototype,"forceDepthWrite",void 0);P([w()],ve.prototype,"depthFunction",void 0);P([w()],ve.prototype,"separateCullingPass",void 0);P([w("fogEnabled")],ve.prototype,"_fogEnabled",void 0);P([w()],ve.prototype,"pointSize",void 0);P([w()],ve.prototype,"zOffset",void 0);P([w()],ve.prototype,"zOffsetUnits",void 0);P([w()],ve.prototype,"pointsCloud",null);P([w()],ve.prototype,"fillMode",null);P([w()],ve.prototype,"useLogarithmicDepth",null);P([w()],ve.prototype,"_isVertexOutputInvariant",void 0);P([w()],ve.prototype,"transparencyMode",null)});var Sm,LV=C(()=>{Pn();sf();Vi();Sm=class n extends ve{get subMaterials(){return this._subMaterials}set subMaterials(e){this._subMaterials=e,this._hookArray(e)}getChildren(){return this.subMaterials}constructor(e,t){super(e,t,!0),this._waitingSubMaterialsUniqueIds=[],this.getScene().addMultiMaterial(this),this.subMaterials=[],this._storeEffectOnSubMeshes=!0}_hookArray(e){let t=e.push;e.push=(...r)=>{let s=t.apply(e,r);return this._markAllSubMeshesAsTexturesDirty(),s};let i=e.splice;e.splice=(r,s)=>{let a=i.call(e,r,s!=null?s:e.length);return this._markAllSubMeshesAsTexturesDirty(),a}}getSubMaterial(e){return e<0||e>=this.subMaterials.length?this.getScene().defaultMaterial:this.subMaterials[e]}getActiveTextures(){return super.getActiveTextures().concat(...this.subMaterials.map(e=>e?e.getActiveTextures():[]))}hasTexture(e){var t;if(super.hasTexture(e))return!0;for(let i=0;i=0&&r.multiMaterials.splice(s,1),super.dispose(e,t)}static ParseMultiMaterial(e,t){let i=new n(e.name,t);if(i.id=e.id,i._loadedUniqueId=e.uniqueId,Zt&&Zt.AddTagsTo(i,e.tags),e.materialsUniqueIds)i._waitingSubMaterialsUniqueIds=e.materialsUniqueIds;else for(let r of e.materials)i.subMaterials.push(t.getLastMaterialById(r));return i}};Ft("BABYLON.MultiMaterial",Sm)});var oA,OV=C(()=>{oA=class{constructor(e,t){this.distanceOrScreenCoverage=e,this.mesh=t}}});var Tm,lA,zC,cA,XC,YC,nl,j,Di=C(()=>{hi();Ci();R_();sf();BC();el();Ge();zt();zs();Ui();lr();rA();im();K_();Pn();LV();iA();Er();Pt();Vi();ln();Yu();OV();Tm=class{},lA=class{constructor(){this.batchCache=new cA(this),this.batchCacheReplacementModeInFrozenMode=new cA(this),this.instancesBufferSize=512*4}},zC=class{constructor(){this.renderPasses={}}},cA=class{constructor(e){this.parent=e,this.mustReturn=!1,this.visibleInstances=new Array,this.renderSelf=[],this.hardwareInstancedRendering=[]}},XC=class{constructor(){this.instancesCount=0,this.matrixBuffer=null,this.previousMatrixBuffer=null,this.matrixBufferSize=512,this.matrixData=null,this.boundingVectors=[],this.worldMatrices=null}},YC=class{constructor(){this._areNormalsFrozen=!1,this._source=null,this.meshMap=null,this._preActivateId=-1,this._LODLevels=new Array,this._useLODScreenCoverage=!1,this._effectiveMaterial=null,this._forcedInstanceCount=0,this._overrideRenderingFillMode=null}},nl={source:null,parent:null,doNotCloneChildren:!1,clonePhysicsImpostor:!0,cloneThinInstances:!1},j=class n extends pr{static _GetDefaultSideOrientation(e){return e||n.FRONTSIDE}get useLODScreenCoverage(){return this._internalMeshDataInfo._useLODScreenCoverage}set useLODScreenCoverage(e){this._internalMeshDataInfo._useLODScreenCoverage=e,this._sortLODLevels()}get computeBonesUsingShaders(){return this._internalAbstractMeshDataInfo._computeBonesUsingShaders}set computeBonesUsingShaders(e){this._internalAbstractMeshDataInfo._computeBonesUsingShaders!==e&&(e&&this._internalMeshDataInfo._sourcePositions&&(this.setVerticesData(L.PositionKind,this._internalMeshDataInfo._sourcePositions,!0),this._internalMeshDataInfo._sourceNormals&&this.setVerticesData(L.NormalKind,this._internalMeshDataInfo._sourceNormals,!0),this._internalMeshDataInfo._sourcePositions=null,this._internalMeshDataInfo._sourceNormals=null),this._internalAbstractMeshDataInfo._computeBonesUsingShaders=e,this._markSubMeshesAsAttributesDirty())}get onBeforeRenderObservable(){return this._internalMeshDataInfo._onBeforeRenderObservable||(this._internalMeshDataInfo._onBeforeRenderObservable=new te),this._internalMeshDataInfo._onBeforeRenderObservable}get onBeforeBindObservable(){return this._internalMeshDataInfo._onBeforeBindObservable||(this._internalMeshDataInfo._onBeforeBindObservable=new te),this._internalMeshDataInfo._onBeforeBindObservable}get onAfterRenderObservable(){return this._internalMeshDataInfo._onAfterRenderObservable||(this._internalMeshDataInfo._onAfterRenderObservable=new te),this._internalMeshDataInfo._onAfterRenderObservable}get onBetweenPassObservable(){return this._internalMeshDataInfo._onBetweenPassObservable||(this._internalMeshDataInfo._onBetweenPassObservable=new te),this._internalMeshDataInfo._onBetweenPassObservable}get onBeforeDrawObservable(){return this._internalMeshDataInfo._onBeforeDrawObservable||(this._internalMeshDataInfo._onBeforeDrawObservable=new te),this._internalMeshDataInfo._onBeforeDrawObservable}set onBeforeDraw(e){this._onBeforeDrawObserver&&this.onBeforeDrawObservable.remove(this._onBeforeDrawObserver),this._onBeforeDrawObserver=this.onBeforeDrawObservable.add(e)}get hasInstances(){return this.instances.length>0}get hasThinInstances(){return(this.forcedInstanceCount||this._thinInstanceDataStorage.instancesCount||0)>0}get forcedInstanceCount(){return this._internalMeshDataInfo._forcedInstanceCount}set forcedInstanceCount(e){this._internalMeshDataInfo._forcedInstanceCount=e}get sideOrientation(){return this._internalMeshDataInfo._sideOrientation}set sideOrientation(e){this._internalMeshDataInfo._sideOrientation=e,this._internalAbstractMeshDataInfo._sideOrientationHint=this._scene.useRightHandedSystem&&e===1||!this._scene.useRightHandedSystem&&e===0}get _effectiveSideOrientation(){return this._internalMeshDataInfo._effectiveSideOrientation}get overrideMaterialSideOrientation(){return this.sideOrientation}set overrideMaterialSideOrientation(e){this.sideOrientation=e,this.material&&(this.material.sideOrientation=null)}get overrideRenderingFillMode(){return this._internalMeshDataInfo._overrideRenderingFillMode}set overrideRenderingFillMode(e){this._internalMeshDataInfo._overrideRenderingFillMode=e}get material(){return this._internalAbstractMeshDataInfo._material}set material(e){e&&(this.material&&this.material.sideOrientation===null||this._internalAbstractMeshDataInfo._sideOrientationHint)&&(e.sideOrientation=null),this._setMaterial(e)}get source(){return this._internalMeshDataInfo._source}get cloneMeshMap(){return this._internalMeshDataInfo.meshMap}get isUnIndexed(){return this._unIndexed}set isUnIndexed(e){this._unIndexed!==e&&(this._unIndexed=e,this._markSubMeshesAsAttributesDirty())}get worldMatrixInstancedBuffer(){let e=this._instanceDataStorage.useMonoDataStorageRenderPass?this._instanceDataStorage.dataStorageRenderPass:this._instanceDataStorage.renderPasses[this._instanceDataStorage.engine.currentRenderPassId];return e?e.instancesData:void 0}get previousWorldMatrixInstancedBuffer(){let e=this._instanceDataStorage.useMonoDataStorageRenderPass?this._instanceDataStorage.dataStorageRenderPass:this._instanceDataStorage.renderPasses[this._instanceDataStorage.engine.currentRenderPassId];return e?e.instancesPreviousData:void 0}get manualUpdateOfWorldMatrixInstancedBuffer(){return this._instanceDataStorage.manualUpdate}set manualUpdateOfWorldMatrixInstancedBuffer(e){this._instanceDataStorage.manualUpdate=e}get manualUpdateOfPreviousWorldMatrixInstancedBuffer(){return this._instanceDataStorage.previousManualUpdate}set manualUpdateOfPreviousWorldMatrixInstancedBuffer(e){this._instanceDataStorage.previousManualUpdate=e}get forceWorldMatrixInstancedBufferUpdate(){return this._instanceDataStorage.forceMatrixUpdates}set forceWorldMatrixInstancedBufferUpdate(e){this._instanceDataStorage.forceMatrixUpdates=e}_copySource(e,t,i=!0,r=!1){var a,o;let s=this.getScene();if(e._geometry&&e._geometry.applyToMesh(this),Zo.DeepCopy(e,this,["name","material","skeleton","instances","parent","uniqueId","source","metadata","morphTargetManager","hasInstances","worldMatrixInstancedBuffer","previousWorldMatrixInstancedBuffer","hasLODLevels","geometry","isBlocked","areNormalsFrozen","facetNb","isFacetDataEnabled","lightSources","useBones","isAnInstance","collider","edgesRenderer","forward","up","right","absolutePosition","absoluteScaling","absoluteRotationQuaternion","isWorldMatrixFrozen","nonUniformScaling","behaviors","worldMatrixFromCache","hasThinInstances","cloneMeshMap","hasBoundingInfo","physicsBody","physicsImpostor"],["_poseMatrix"]),this._internalMeshDataInfo._source=e,s.useClonedMeshMap&&(e._internalMeshDataInfo.meshMap||(e._internalMeshDataInfo.meshMap={}),e._internalMeshDataInfo.meshMap[this.uniqueId]=this),this._originalBuilderSideOrientation=e._originalBuilderSideOrientation,this._creationDataStorage=e._creationDataStorage,e._ranges){let l=e._ranges;for(let c in l)Object.prototype.hasOwnProperty.call(l,c)&&l[c]&&this.createAnimationRange(c,l[c].from,l[c].to)}if(e.metadata&&e.metadata.clone?this.metadata=e.metadata.clone():this.metadata=e.metadata,this._internalMetadata=e._internalMetadata,Zt&&Zt.HasTags(e)&&Zt.AddTagsTo(this,Zt.GetTags(e,!0)),this.setEnabled(e.isEnabled(!1)),this.parent=e.parent,this.setPivotMatrix(e.getPivotMatrix(),this._postMultiplyPivotMatrix),this.id=this.name+"."+e.id,this.material=e.material,!t){let l=e.getDescendants(!0);for(let c=0;c{m&&p&&(this._uniformBuffer?this.transferToEffect(_):p.bindOnlyWorldMatrix(_))};let o,l=!1;if(i&&i._addToSceneRootNodes===void 0){let m=i;o=(c=m.parent)!=null?c:null,r=(f=m.source)!=null?f:null,s=(h=m.doNotCloneChildren)!=null?h:!1,a=(d=m.clonePhysicsImpostor)!=null?d:!0,l=(u=m.cloneThinInstances)!=null?u:!1}else o=i;r&&this._copySource(r,s,a,l),o!==null&&(this.parent=o),this._instanceDataStorage.hardwareInstancedRendering=this.getEngine().getCaps().instancedArrays,this._internalMeshDataInfo._onMeshReadyObserverAdded=m=>{m.unregisterOnNextCall=!0,this.isReady(!0)?this.onMeshReadyObservable.notifyObservers(this):this._internalMeshDataInfo._checkReadinessObserver||(this._internalMeshDataInfo._checkReadinessObserver=this._scene.onBeforeRenderObservable.add(()=>{this.isReady(!0)&&(this._scene.onBeforeRenderObservable.remove(this._internalMeshDataInfo._checkReadinessObserver),this._internalMeshDataInfo._checkReadinessObserver=null,this.onMeshReadyObservable.notifyObservers(this))}))},this.onMeshReadyObservable=new te(this._internalMeshDataInfo._onMeshReadyObserverAdded),r&&r.onClonedObservable.notifyObservers(this)}instantiateHierarchy(e=null,t,i){let r=this.getTotalVertices()===0||t&&t.doNotInstantiate&&(t.doNotInstantiate===!0||t.doNotInstantiate(this))?this.clone("Clone of "+(this.name||this.id),e||this.parent,!0):this.createInstance("instance of "+(this.name||this.id));r.parent=e||this.parent,r.position=this.position.clone(),r.scaling=this.scaling.clone(),this.rotationQuaternion?r.rotationQuaternion=this.rotationQuaternion.clone():r.rotation=this.rotation.clone(),i&&i(this,r);for(let s of this.getChildTransformNodes(!0))s.getClassName()==="InstancedMesh"&&r.getClassName()==="Mesh"&&s.sourceMesh===this?s.instantiateHierarchy(r,{doNotInstantiate:t&&t.doNotInstantiate||!1,newSourcedMesh:r},i):s.instantiateHierarchy(r,t,i);return r}getClassName(){return"Mesh"}get _isMesh(){return!0}toString(e){let t=super.toString(e);if(t+=", n vertices: "+this.getTotalVertices(),t+=", parent: "+(this._waitingParentId?this._waitingParentId:this.parent?this.parent.name:"NONE"),this.animations)for(let i=0;i0}getLODLevels(){return this._internalMeshDataInfo._LODLevels}_sortLODLevels(){let e=this._internalMeshDataInfo._useLODScreenCoverage?-1:1;this._internalMeshDataInfo._LODLevels.sort((t,i)=>t.distanceOrScreenCoveragei.distanceOrScreenCoverage?-e:0)}addLODLevel(e,t){if(t&&t._masterMesh)return J.Warn("You cannot use a mesh as LOD level twice"),this;let i=new oA(e,t);return this._internalMeshDataInfo._LODLevels.push(i),t&&(t._masterMesh=this),this._sortLODLevels(),this}getLODLevelAtDistance(e){let t=this._internalMeshDataInfo;for(let i=0;io*a)return this.onLODLevelSelection&&this.onLODLevelSelection(a,this,this),this;for(let l=0;l0||this.hasThinInstances);this.computeWorldMatrix();let a=this.material||r.defaultMaterial;if(a){if(a._storeEffectOnSubMeshes)for(let _ of this.subMeshes){let p=_.getMaterial();if(p){if(p._storeEffectOnSubMeshes){if(!p.isReadyForSubMesh(this,_,s))return!1}else if(!p.isReady(this,s))return!1}}else if(!a.isReady(this,s))return!1}let o=i.currentRenderPassId;for(let _ of this.lightSources){let p=_.getShadowGenerators();if(!p)continue;let g=p.values();for(let v=g.next();v.done!==!0;v=g.next()){let x=v.value;if(x&&(!((l=x.getShadowMap())!=null&&l.renderList)||(c=x.getShadowMap())!=null&&c.renderList&&((h=(f=x.getShadowMap())==null?void 0:f.renderList)==null?void 0:h.indexOf(this))!==-1)){let S=(d=x.getShadowMap().renderPassIds)!=null?d:[i.currentRenderPassId];for(let E=0;E0){let i=this.getIndices();if(!i)return null;let r=i.length,s=!1;if(e)s=!0;else for(let a of this.subMeshes){if(a.indexStart+a.indexCount>r){s=!0;break}if(a.verticesStart+a.verticesCount>t){s=!0;break}}if(!s)return this.subMeshes[0]}return this.releaseSubMeshes(),new _s(0,0,t,0,this.getTotalIndices()||(this.isUnIndexed?t:0),this)}subdivide(e){if(e<1)return;let t=this.getTotalIndices(),i=t/e|0,r=0;for(;i%3!==0;)i++;this.releaseSubMeshes();for(let s=0;s=t);s++)_s.CreateFromIndices(0,r,r+i>=t?t-r:i,this,void 0,!1),r+=i;this.refreshBoundingInfo(),this.synchronizeInstances()}setVerticesData(e,t,i=!1,r){if(this._geometry)this._geometry.setVerticesData(e,t,i,r);else{let s=new Ie;s.set(t,e);let a=this.getScene();new hn(hn.RandomId(),a,s,i,this)}return this}removeVerticesData(e){this._geometry&&this._geometry.removeVerticesData(e)}markVerticesDataAsUpdatable(e,t=!0){let i=this.getVertexBuffer(e);!i||i.isUpdatable()===t||this.setVerticesData(e,this.getVerticesData(e),t)}setVerticesBuffer(e,t=!0,i=null){return this._geometry||(this._geometry=hn.CreateGeometryForMesh(this)),this._geometry.setVerticesBuffer(e,i,t),this}updateVerticesData(e,t,i,r){return this._geometry?(r?(this.makeGeometryUnique(),this.updateVerticesData(e,t,i,!1)):this._geometry.updateVerticesData(e,t,i),this):this}updateMeshPositions(e,t=!0){let i=this.getVerticesData(L.PositionKind);if(!i)return this;if(e(i),this.updateVerticesData(L.PositionKind,i,!1,!1),t){let r=this.getIndices(),s=this.getVerticesData(L.NormalKind);if(!s)return this;Ie.ComputeNormals(i,r,s),this.updateVerticesData(L.NormalKind,s,!1,!1)}return this}makeGeometryUnique(){if(!this._geometry)return this;if(this._geometry.meshes.length===1)return this;let e=this._geometry,t=this._geometry.copy(hn.RandomId());return e.releaseForMesh(this,!0),t.applyToMesh(this),this}setIndexBuffer(e,t,i,r=null){let s=this._geometry;s||(s=new hn(hn.RandomId(),this.getScene(),void 0,void 0,this)),s.setIndexBuffer(e,t,i,r)}setIndices(e,t=null,i=!1,r=!1){if(this._geometry)this._geometry.setIndices(e,t,i,r);else{let s=new Ie;s.indices=e;let a=this.getScene();new hn(hn.RandomId(),a,s,i,this,t)}return this}updateIndices(e,t,i=!1){return this._geometry?(this._geometry.updateIndices(e,t,i),this):this}toLeftHanded(){return this._geometry?(this._geometry.toLeftHanded(),this):this}_bind(e,t,i,r=!0){if(!this._geometry)return this;let s=this.getScene().getEngine(),a;if(this._unIndexed)switch(this._getRenderingFillMode(i)){case ve.WireFrameFillMode:a=e._getLinesIndexBuffer(this.getIndices(),s);break;default:a=null;break}else switch(this._getRenderingFillMode(i)){case ve.PointFillMode:a=null;break;case ve.WireFrameFillMode:a=e._getLinesIndexBuffer(this.getIndices(),s);break;default:case ve.TriangleFillMode:a=this._geometry.getIndexBuffer();break}return this._bindDirect(t,a,r)}_bindDirect(e,t,i=!0){if(!this._geometry)return this;if(this.morphTargetManager&&this.morphTargetManager.isUsingTextureForTargets&&this.morphTargetManager._bind(e),!i||!this._userInstancedBuffersStorage||this.hasThinInstances)this._geometry._bind(e,t);else{if(!this._instanceDataStorage.useMonoDataStorageRenderPass&&this._userInstancedBuffersStorage.renderPasses&&this._userInstancedBuffersStorage.renderPasses[this._instanceDataStorage.engine.currentRenderPassId]){let r=this._userInstancedBuffersStorage.renderPasses[this._instanceDataStorage.engine.currentRenderPassId];for(let s in r)this._userInstancedBuffersStorage.vertexBuffers[s]=r[s]}this._geometry._bind(e,t,this._userInstancedBuffersStorage.vertexBuffers,this._userInstancedBuffersStorage.vertexArrayObjects)}return this}_draw(e,t,i){if(!this._geometry||!this._geometry.getVertexBuffers()||!this._unIndexed&&!this._geometry.getIndexBuffer())return this;this._internalMeshDataInfo._onBeforeDrawObservable&&this._internalMeshDataInfo._onBeforeDrawObservable.notifyObservers(this);let s=this.getScene().getEngine(),a=s._currentMaterialContext,o=a&&a.useVertexPulling;return this._unIndexed&&t!==ve.WireFrameFillMode||t==ve.PointFillMode?s.drawArraysType(t,e.verticesStart,e.verticesCount,this.forcedInstanceCount||i):t==ve.WireFrameFillMode?s.drawElementsType(t,0,e._linesIndexCount,this.forcedInstanceCount||i):o?s.drawArraysType(t,e.indexStart,e.indexCount,this.forcedInstanceCount||i):s.drawElementsType(t,e.indexStart,e.indexCount,this.forcedInstanceCount||i),this}registerBeforeRender(e){return this.onBeforeRenderObservable.add(e),this}unregisterBeforeRender(e){return this.onBeforeRenderObservable.removeCallback(e),this}registerAfterRender(e){return this.onAfterRenderObservable.add(e),this}unregisterAfterRender(e){return this.onAfterRenderObservable.removeCallback(e),this}_getInstancesRenderList(e,t=!1){let i=this._instanceDataStorage.useMonoDataStorageRenderPass?this._instanceDataStorage.dataStorageRenderPass:this._getInstanceDataStorage();if(this._instanceDataStorage.isFrozen){if(t)return i.batchCacheReplacementModeInFrozenMode.hardwareInstancedRendering[e]=!1,i.batchCacheReplacementModeInFrozenMode.renderSelf[e]=!0,i.batchCacheReplacementModeInFrozenMode;if(i.previousBatch)return i.previousBatch}let r=this.getScene(),s=r._isInIntermediateRendering(),a=s?this._internalAbstractMeshDataInfo._onlyForInstancesIntermediate:this._internalAbstractMeshDataInfo._onlyForInstances,o=i.batchCache;if(o.mustReturn=!1,o.renderSelf[e]=t||!a&&this.isEnabled()&&this.isVisible,o.visibleInstances[e]=null,i.visibleInstances&&!t){let l=i.visibleInstances,c=r.getRenderId(),f=s?l.intermediateDefaultRenderId:l.defaultRenderId;o.visibleInstances[e]=l[c],!o.visibleInstances[e]&&f&&(o.visibleInstances[e]=l[f])}return o.hardwareInstancedRendering[e]=!t&&this._instanceDataStorage.hardwareInstancedRendering&&o.visibleInstances[e]!==null&&o.visibleInstances[e]!==void 0,i.previousBatch=o,o}_updateInstancedBuffers(e,t,i,r,s,a){var v;let o=t.visibleInstances[e._id],l=o?o.length:0,c=t.parent,f=this._instanceDataStorage,h=c.instancesBuffer,d=c.instancesPreviousBuffer,u=0,m=0,_=t.renderSelf[e._id],p=this._scene.floatingOriginOffset,g=!h||i!==c.instancesBufferSize||this._scene.needsPreviousWorldMatrices&&!c.instancesPreviousBuffer;if(!this._instanceDataStorage.manualUpdate&&(!f.isFrozen||g)){let x=this.getWorldMatrix();if(_){this._scene.needsPreviousWorldMatrices&&(f.masterMeshPreviousWorldMatrix?(f.masterMeshPreviousWorldMatrix.copyToArray(c.instancesPreviousData,u),f.masterMeshPreviousWorldMatrix.copyFrom(x)):(f.masterMeshPreviousWorldMatrix=x.clone(),f.masterMeshPreviousWorldMatrix.copyToArray(c.instancesPreviousData,u))),x.copyToArray(c.instancesData,u);let A=x.asArray();c.instancesData[u+12]=A[12]-p.x,c.instancesData[u+13]=A[13]-p.y,c.instancesData[u+14]=A[14]-p.z,u+=16,m++}if(o){if(n.INSTANCEDMESH_SORT_TRANSPARENT&&this._scene.activeCamera&&((v=e.getMaterial())!=null&&v.needAlphaBlendingForMesh(e.getRenderingMesh()))){let A=this._scene.activeCamera.globalPosition;for(let S=0;SS._distanceToCamera>E._distanceToCamera?-1:S._distanceToCamera1&&r.activeCamera===r.activeCameras[0]||a<=1,l=this._occlusionDataStorage&&this._occlusionDataStorage.occlusionForRenderPassId!==-1&&this._occlusionDataStorage.occlusionForRenderPassId!==s.currentRenderPassId;if(o&&this._checkOcclusionQuery(l)&&!this._occlusionDataStorage.forceRenderingWhenOccluded)return this;let c=this._getInstancesRenderList(e._id,!!i);if(c.mustReturn)return this;if(!this._geometry||!this._geometry.getVertexBuffers()||!this._unIndexed&&!this._geometry.getIndexBuffer())return this;let f=0,h=null;this.ignoreCameraMaxZ&&r.activeCamera&&!r._isInIntermediateRendering()&&(f=r.activeCamera.maxZ,h=r.activeCamera,r.activeCamera.maxZ=0,r.updateTransformMatrix(!0)),this._internalMeshDataInfo._onBeforeRenderObservable&&this._internalMeshDataInfo._onBeforeRenderObservable.notifyObservers(this);let d=e.getRenderingMesh(),u=c.hardwareInstancedRendering[e._id]||d.hasThinInstances||!!this._userInstancedBuffersStorage&&!e.getMesh()._internalAbstractMeshDataInfo._actAsRegularMesh,m=this._instanceDataStorage,_=e.getMaterial();if(!_)return h&&(h.maxZ=f,r.updateTransformMatrix(!0)),this;if(!m.isFrozen||!this._internalMeshDataInfo._effectiveMaterial||this._internalMeshDataInfo._effectiveMaterial!==_){if(_._storeEffectOnSubMeshes){if(!_.isReadyForSubMesh(this,e,u))return h&&(h.maxZ=f,r.updateTransformMatrix(!0)),this}else if(!_.isReady(this,u))return h&&(h.maxZ=f,r.updateTransformMatrix(!0)),this;this._internalMeshDataInfo._effectiveMaterial=_}else if(_._storeEffectOnSubMeshes&&!((M=e._drawWrapper)!=null&&M._wasPreviouslyReady)||!_._storeEffectOnSubMeshes&&!_._getDrawWrapper()._wasPreviouslyReady)return h&&(h.maxZ=f,r.updateTransformMatrix(!0)),this;if(t){let O=this._internalMeshDataInfo._effectiveMaterial;if(O.alphaModes.length===1)s.setAlphaMode(O.alphaMode);else for(let V=0;Vg&&r++,S!==0&&x++,v+=S,g=S}if(c[x]++,x>a&&(a=x),v===0)s++;else{let A=1/v,S=0;for(let E=0;Ef&&o++}}let h=this.skeleton.bones.length,d=this.getVerticesData(L.MatricesIndicesKind),u=this.getVerticesData(L.MatricesIndicesExtraKind),m=0;for(let p=0;p=h||v<0)&&m++}let _="Number of Weights = "+i/4+` Maximum influences = `+a+` Missing Weights = `+s+` Not Sorted = `+r+` Not Normalized = `+o+` WeightCounts = [`+c+`] Number of bones = `+h+` -Bad Bone Indices = `+m;return{skinned:!0,valid:s===0&&o===0&&m===0,report:_}}_checkDelayState(){let e=this.getScene();return this._geometry?this._geometry.load(e):this.delayLoadState===4&&(this.delayLoadState=2,this._queueLoad(e)),this}_queueLoad(e){e.addPendingData(this);let t=this.delayLoadingFile.indexOf(".babylonbinarymeshdata")!==-1;return he.LoadFile(this.delayLoadingFile,i=>{i instanceof ArrayBuffer?this._delayLoadingFunction(i,this):this._delayLoadingFunction(JSON.parse(i),this);for(let r of this.instances)r.refreshBoundingInfo(),r._syncSubMeshes();this.delayLoadState=1,e.removePendingData(this)},()=>{},e.offlineProvider,t),this}isInFrustum(e){return this.delayLoadState===2||!super.isInFrustum(e)?!1:(this._checkDelayState(),!0)}setMaterialById(e){let t=this.getScene().materials,i;for(i=t.length-1;i>-1;i--)if(t[i].id===e)return this.material=t[i],this;let r=this.getScene().multiMaterials;for(i=r.length-1;i>-1;i--)if(r[i].id===e)return this.material=r[i],this;return this}getAnimatables(){let e=[];return this.material&&e.push(this.material),this.skeleton&&e.push(this.skeleton),e}bakeTransformIntoVertices(e){if(!this.isVerticesDataPresent(L.PositionKind))return this;let t=this.subMeshes.splice(0);this._resetPointsArrayCache();let i=this.getVerticesData(L.PositionKind),r=b.Zero(),s;for(s=0;s{let d=h.width,u=h.height,_=this.getEngine().createCanvas(d,u).getContext("2d");_.drawImage(h,0,0);let p=_.getImageData(0,0,d,u).data;this.applyDisplacementMapFromBuffer(p,d,u,t,i,s,a,o),r&&r(this)};return he.LoadImage(e,f,l||(()=>{}),c.offlineProvider),this}applyDisplacementMapFromBuffer(e,t,i,r,s,a,o,l=!1){if(!this.isVerticesDataPresent(L.PositionKind)||!this.isVerticesDataPresent(L.NormalKind)||!this.isVerticesDataPresent(L.UVKind))return $.Warn("Cannot call applyDisplacementMap: Given mesh is not complete. Position, Normal or UV are missing"),this;let c=this.getVerticesData(L.PositionKind,!0,!0),f=this.getVerticesData(L.NormalKind),h=this.getVerticesData(L.UVKind),d=b.Zero(),u=b.Zero(),m=Ne.Zero();a=a||Ne.Zero(),o=o||new Ne(1,1);for(let _=0;_{var c;return!((c=this.getVertexBuffer(l))!=null&&c.getIsInstanced())}),i=this.getIndices(!1,!0),r={},s=(l,c)=>{let f=new Float32Array(i.length*c),h=0;for(let d=0;d{let o=r.length-1-a,l=r[o];for(let c=0;c{for(let o=0;o-1&&(r._waitingMorphTargetManagerId=e.morphTargetManagerId),e.skeletonId!==void 0&&e.skeletonId!==null&&(r.skeleton=t.getLastSkeletonById(e.skeletonId),r._waitingSkeletonId=e.skeletonId,e.numBoneInfluencers&&(r.numBoneInfluencers=e.numBoneInfluencers)),e.skeletonUniqueId!==void 0&&e.skeletonUniqueId!==null&&(r._waitingSkeletonUniqueId=e.skeletonUniqueId),e.animations){for(let a=0;a4,c=l?this.getVerticesData(L.MatricesIndicesExtraKind):null,f=l?this.getVerticesData(L.MatricesWeightsExtraKind):null,h=e.getTransformMatrices(this),d=b.Zero(),u=new K,m=new K,_=0,p;for(let g=0;g0&&(K.FromFloat32ArrayToRefScaled(h,Math.floor(a[_+p]*16),v,m),u.addToSelf(m));if(l)for(p=0;p<4;p++)v=f[_+p],v>0&&(K.FromFloat32ArrayToRefScaled(h,Math.floor(c[_+p]*16),v,m),u.addToSelf(m));b.TransformCoordinatesFromFloatsToRef(i._sourcePositions[g],i._sourcePositions[g+1],i._sourcePositions[g+2],u,d),d.toArray(r,g),t&&(b.TransformNormalFromFloatsToRef(i._sourceNormals[g],i._sourceNormals[g+1],i._sourceNormals[g+2],u,d),d.toArray(s,g)),u.reset()}return this.updateVerticesData(L.PositionKind,r),t&&this.updateVerticesData(L.NormalKind,s),this}static MinMax(e){let t=null,i=null;for(let r of e){let a=r.getBoundingInfo().boundingBox;!t||!i?(t=a.minimumWorld.clone(),i=a.maximumWorld.clone()):(t.minimizeInPlace(a.minimumWorld),i.maximizeInPlace(a.maximumWorld))}return!t||!i?{min:b.Zero(),max:b.Zero()}:{min:t,max:i}}static Center(e){let t=e instanceof Array?n.MinMax(e):e;return b.Center(t.min,t.max)}static MergeMeshes(e,t=!0,i,r,s,a){return U_(n._MergeMeshesCoroutine(e,t,i,r,s,a,!1))}static async MergeMeshesAsync(e,t=!0,i,r,s,a){return await aV(n._MergeMeshesCoroutine(e,t,i,r,s,a,!0),nV())}static*_MergeMeshesCoroutine(e,t=!0,i,r,s,a,o){if(e=e.filter(Boolean),e.length===0)return null;let l;if(!i){let R=0;for(l=0;l=65536)return $.Warn("Cannot merge meshes because resulting mesh will have more than 65536 vertices. Please use allow32BitsIndices = true to use 32 bits indices"),null}let c=e[0];a&&(s=!1,e.sort((R,I)=>{var y,M,D,O;return((M=(y=R.material)==null?void 0:y.uniqueId)!=null?M:-1)-((O=(D=I.material)==null?void 0:D.uniqueId)!=null?O:-1)}));let f=new Array,h=new Array,d=new Array,u=e[0].sideOrientation;for(l=0;lMath.max(y,M.start+M.count),0);if(a)if(R.material){let y=R.material;if(y instanceof _m){for(let M=0;M1){let R=0;for(let I=1;I{let I=R.computeWorldMatrix(!0);return{vertexData:Ie.ExtractFromMesh(R,!1,!1),transform:I}},{vertexData:_,transform:p}=m(e[0]);o&&(yield);let g=new Array(e.length-1);for(let R=1;R{throw Xe("GroundMesh")};q._GoldbergMeshParser=(n,e)=>{throw Xe("GoldbergMesh")};q._LinesMeshParser=(n,e)=>{throw Xe("LinesMesh")};q._GreasedLineMeshParser=(n,e)=>{throw Xe("GreasedLineMesh")};q._GreasedLineRibbonMeshParser=(n,e)=>{throw Xe("GreasedLineRibbonMesh")};q._TrailMeshParser=(n,e)=>{throw Xe("TrailMesh")};q._GaussianSplattingMeshParser=(n,e)=>{throw Xe("GaussianSplattingMesh")};q._GaussianSplattingPartProxyMeshParser=(n,e)=>{throw Xe("GaussianSplattingPartProxyMesh")};q._GaussianSplattingCompoundMeshParser=(n,e)=>{throw Xe("GaussianSplattingCompoundMesh")};wt("BABYLON.Mesh",q)});var vm,BC=C(()=>{to();Cl();An();vm=class{constructor(){this._zoomStopsAnimation=!1,this._idleRotationSpeed=.05,this._idleRotationWaitTime=2e3,this._idleRotationSpinupTime=2e3,this.targetAlpha=null,this._attachedCamera=null,this._isPointerDown=!1,this._lastFrameTime=null,this._lastInteractionTime=-1/0,this._cameraRotationSpeed=0,this._lastFrameRadius=0}get name(){return"AutoRotation"}set zoomStopsAnimation(e){this._zoomStopsAnimation=e}get zoomStopsAnimation(){return this._zoomStopsAnimation}set idleRotationSpeed(e){this._idleRotationSpeed=e}get idleRotationSpeed(){return this._idleRotationSpeed}set idleRotationWaitTime(e){this._idleRotationWaitTime=e}get idleRotationWaitTime(){return this._idleRotationWaitTime}set idleRotationSpinupTime(e){this._idleRotationSpinupTime=e}get idleRotationSpinupTime(){return this._idleRotationSpinupTime}get rotationInProgress(){return Math.abs(this._cameraRotationSpeed)>0}get attachedNode(){return this._attachedCamera}init(){}attach(e){this._attachedCamera=e;let t=this._attachedCamera.getScene();this._onPrePointerObservableObserver=t.onPrePointerObservable.add(i=>{if(i.type===it.POINTERDOWN){this._isPointerDown=!0;return}i.type===it.POINTERUP&&(this._isPointerDown=!1)}),this._onAfterCheckInputsObserver=e.onAfterCheckInputsObservable.add(()=>{if(this._reachTargetAlpha())return;let i=fr.Now,r=0;this._lastFrameTime!=null&&(r=i-this._lastFrameTime),this._lastFrameTime=i,this._applyUserInteraction();let s=i-this._lastInteractionTime-this._idleRotationWaitTime,a=Math.max(Math.min(s/this._idleRotationSpinupTime,1),0);this._cameraRotationSpeed=this._idleRotationSpeed*a,this._attachedCamera&&(this._attachedCamera.alpha-=this._cameraRotationSpeed*(r/1e3))})}detach(){if(!this._attachedCamera)return;let e=this._attachedCamera.getScene();this._onPrePointerObservableObserver&&e.onPrePointerObservable.remove(this._onPrePointerObservableObserver),this._attachedCamera.onAfterCheckInputsObservable.remove(this._onAfterCheckInputsObserver),this._attachedCamera=null,this._lastFrameTime=null}resetLastInteractionTime(e){this._lastInteractionTime=e!=null?e:fr.Now}_reachTargetAlpha(){return this._attachedCamera&&this.targetAlpha?Math.abs(this._attachedCamera.alpha-this.targetAlpha){Mh();lo=class n{constructor(){this._easingMode=n.EASINGMODE_EASEIN}setEasingMode(e){let t=Math.min(Math.max(e,0),2);this._easingMode=t}getEasingMode(){return this._easingMode}easeInCore(e){throw new Error("You must implement this method")}ease(e){switch(this._easingMode){case n.EASINGMODE_EASEIN:return this.easeInCore(e);case n.EASINGMODE_EASEOUT:return 1-this.easeInCore(1-e)}return e>=.5?(1-this.easeInCore((1-e)*2))*.5+.5:this.easeInCore(e*2)*.5}};lo.EASINGMODE_EASEIN=0;lo.EASINGMODE_EASEOUT=1;lo.EASINGMODE_EASEINOUT=2;eA=class extends lo{constructor(e=1){super(),this.amplitude=e}easeInCore(e){let t=Math.max(0,this.amplitude);return Math.pow(e,3)-e*t*Math.sin(3.141592653589793*e)}},tA=class extends lo{constructor(e=2){super(),this.exponent=e}easeInCore(e){return this.exponent<=0?e:(Math.exp(this.exponent*e)-1)/(Math.exp(this.exponent)-1)}}});var pf,VC=C(()=>{pf=class n{constructor(e,t,i){this.name=e,this.from=t,this.to=i}clone(){return new n(this.name,this.from,this.to)}}});var GC,kC,WC,HC,zC,XC,co,ft,_f=C(()=>{Ve();Ht();xn();Vi();VC();Hs();tT();Ch();_r();GC=Object.freeze(new ze(0,0,0,0)),kC=Object.freeze(b.Zero()),WC=Object.freeze(Ne.Zero()),HC=Object.freeze(Dl.Zero()),zC=Object.freeze(Te.Black()),XC=Object.freeze(new lt(0,0,0,0)),co={key:0,repeatCount:0,loopMode:2},ft=class n{static _PrepareAnimation(e,t,i,r,s,a,o,l){let c;if(!isNaN(parseFloat(s))&&isFinite(s)?c=n.ANIMATIONTYPE_FLOAT:s instanceof ze?c=n.ANIMATIONTYPE_QUATERNION:s instanceof b?c=n.ANIMATIONTYPE_VECTOR3:s instanceof Ne?c=n.ANIMATIONTYPE_VECTOR2:s instanceof Te?c=n.ANIMATIONTYPE_COLOR3:s instanceof lt?c=n.ANIMATIONTYPE_COLOR4:s instanceof Dl&&(c=n.ANIMATIONTYPE_SIZE),c==null)return null;let f=new n(e,t,i,c,o),h=[{frame:0,value:s},{frame:r,value:a}];return f.setKeys(h),l!==void 0&&f.setEasingFunction(l),f}static CreateAnimation(e,t,i,r){let s=new n(e+"Animation",e,i,t,n.ANIMATIONLOOPMODE_CONSTANT);return s.setEasingFunction(r),s}static CreateAndStartAnimation(e,t,i,r,s,a,o,l,c,f,h){let d=n._PrepareAnimation(e,i,r,s,a,o,l,c);return!d||(t.getScene&&(h=t.getScene()),!h)?null:h.beginDirectAnimation(t,[d],0,s,d.loopMode!==n.ANIMATIONLOOPMODE_CONSTANT,1,f)}static CreateAndStartHierarchyAnimation(e,t,i,r,s,a,o,l,c,f,h){let d=n._PrepareAnimation(e,r,s,a,o,l,c,f);return d?t.getScene().beginDirectHierarchyAnimation(t,i,[d],0,a,d.loopMode===1,1,h):null}static CreateMergeAndStartAnimation(e,t,i,r,s,a,o,l,c,f){let h=n._PrepareAnimation(e,i,r,s,a,o,l,c);return h?(t.animations.push(h),t.getScene().beginAnimation(t,0,s,h.loopMode===1,1,f)):null}static MakeAnimationAdditive(e,t,i,r=!1,s){var v,x;let a;typeof t=="object"?a=t:a={referenceFrame:t!=null?t:0,range:i,cloneOriginalAnimation:r,clonedAnimationName:s};let o=e;if(a.cloneOriginalAnimation&&(o=e.clone(),o.name=a.clonedAnimationName||o.name),!o._keys.length)return o;let l=a.referenceFrame&&a.referenceFrame>=0?a.referenceFrame:0,c=0,f=o._keys[0],h=o._keys.length-1,d=o._keys[h],u={referenceValue:f.value,referencePosition:Z.Vector3[0],referenceQuaternion:Z.Quaternion[0],referenceScaling:Z.Vector3[1],keyPosition:Z.Vector3[2],keyQuaternion:Z.Quaternion[1],keyScaling:Z.Vector3[3]},m=f.frame,_=d.frame;if(a.range){let A=o.getRange(a.range);A&&(m=A.from,_=A.to)}else m=(v=a.fromFrame)!=null?v:m,_=(x=a.toFrame)!=null?x:_;if(m!==f.frame&&(c=o.createKeyForFrame(m)),_!==d.frame&&(h=o.createKeyForFrame(_)),o._keys.length===1){let A=o._getKeyValue(o._keys[0]);u.referenceValue=A.clone?A.clone():A}else if(l<=f.frame){let A=o._getKeyValue(f.value);u.referenceValue=A.clone?A.clone():A}else if(l>=d.frame){let A=o._getKeyValue(d.value);u.referenceValue=A.clone?A.clone():A}else{co.key=0;let A=o._interpolate(l,co);u.referenceValue=A.clone?A.clone():A}o.dataType===n.ANIMATIONTYPE_QUATERNION?u.referenceValue.normalize().conjugateInPlace():o.dataType===n.ANIMATIONTYPE_MATRIX&&(u.referenceValue.decompose(u.referenceScaling,u.referenceQuaternion,u.referencePosition),u.referenceQuaternion.normalize().conjugateInPlace());let p=Number.MAX_VALUE,g=a.clipKeys?[]:null;for(let A=c;A<=h;A++){let E=o._keys[A];if((g||a.cloneOriginalAnimation)&&(E={frame:E.frame,value:E.value.clone?E.value.clone():E.value,inTangent:E.inTangent,outTangent:E.outTangent,interpolation:E.interpolation,lockedTangent:E.lockedTangent,easingFunction:E.easingFunction},g&&(p===Number.MAX_VALUE&&(p=E.frame),E.frame-=p,g.push(E))),!(A&&o.dataType!==n.ANIMATIONTYPE_FLOAT&&E.value===f.value))switch(o.dataType){case n.ANIMATIONTYPE_MATRIX:E.value.decompose(u.keyScaling,u.keyQuaternion,u.keyPosition),u.keyPosition.subtractInPlace(u.referencePosition),u.keyScaling.divideInPlace(u.referenceScaling),u.referenceQuaternion.multiplyToRef(u.keyQuaternion,u.keyQuaternion),K.ComposeToRef(u.keyScaling,u.keyQuaternion,u.keyPosition,E.value);break;case n.ANIMATIONTYPE_QUATERNION:u.referenceValue.multiplyToRef(E.value,E.value);break;case n.ANIMATIONTYPE_VECTOR2:case n.ANIMATIONTYPE_VECTOR3:case n.ANIMATIONTYPE_COLOR3:case n.ANIMATIONTYPE_COLOR4:E.value.subtractToRef(u.referenceValue,E.value);break;case n.ANIMATIONTYPE_SIZE:E.value.width-=u.referenceValue.width,E.value.height-=u.referenceValue.height;break;default:E.value-=u.referenceValue}}return g&&o.setKeys(g,!0),o}static TransitionTo(e,t,i,r,s,a,o,l=null,c=!0,f){if(o<=0)return i[e]=t,l&&l(),null;let h=s*(o/1e3);return a.setKeys(f!=null?f:[{frame:0,value:i[e].clone?i[e].clone():i[e]},{frame:h,value:t}]),i.animations||(i.animations=[]),i.animations.push(a),r.beginAnimation(i,0,h,!1,1,l!=null?l:void 0,void 0,c)}get runtimeAnimations(){return this._runtimeAnimations}get hasRunningRuntimeAnimations(){for(let e of this._runtimeAnimations)if(!e.isStopped())return!0;return!1}constructor(e,t,i,r,s,a){this.name=e,this.targetProperty=t,this.framePerSecond=i,this.dataType=r,this.loopMode=s,this.enableBlending=a,this._easingFunction=null,this._runtimeAnimations=new Array,this._events=new Array,this.blendingSpeed=.01,this._ranges={},this._coreAnimation=null,this.targetPropertyPath=t.split("."),this.dataType=r,this.loopMode=s===void 0?n.ANIMATIONLOOPMODE_CYCLE:s,this.uniqueId=n._UniqueIdGenerator++}toString(e){let t="Name: "+this.name+", property: "+this.targetProperty;if(t+=", datatype: "+["Float","Vector3","Quaternion","Matrix","Color3","Vector2"][this.dataType],t+=", nKeys: "+(this._keys?this._keys.length:"none"),t+=", nRanges: "+(this._ranges?Object.keys(this._ranges).length:"none"),e){t+=", Ranges: {";let i=!0;for(let r in this._ranges)i||(t+=", "),i=!1,t+=r;t+="}"}return t}addEvent(e){this._events.push(e),this._events.sort((t,i)=>t.frame-i.frame)}removeEvents(e){for(let t=0;t=0;a--)this._keys[a].frame>=r&&this._keys[a].frame<=s&&this._keys.splice(a,1)}this._ranges[e]=null}}getRange(e){return this._ranges[e]}getKeys(){return this._keys}getHighestFrame(){let e=0;for(let t=0,i=this._keys.length;t0)return t.highLimitValue.clone?t.highLimitValue.clone():t.highLimitValue;let r=this._keys,s;if(this._coreAnimation)s=this._coreAnimation._key;else{let _=r.length;for(s=t.key;s>=0&&e=r[s+1].frame;)++s;if(t.key=s,s<0)return i?void 0:this._getKeyValue(r[0].value);if(s+1>_-1)return i?void 0:this._getKeyValue(r[_-1].value);this._key=s}let a=r[s],o=r[s+1];if(i&&(e===a.frame||e===o.frame))return;let l=this._getKeyValue(a.value),c=this._getKeyValue(o.value);if(a.interpolation===1)return o.frame>e?l:c;let f=a.outTangent!==void 0&&o.inTangent!==void 0,h=o.frame-a.frame,d=(e-a.frame)/h,u=a.easingFunction||this.getEasingFunction();switch(u&&(d=u.ease(d)),this.dataType){case n.ANIMATIONTYPE_FLOAT:{let _=f?this.floatInterpolateFunctionWithTangents(l,a.outTangent*h,c,o.inTangent*h,d):this.floatInterpolateFunction(l,c,d);switch(t.loopMode){case n.ANIMATIONLOOPMODE_CYCLE:case n.ANIMATIONLOOPMODE_CONSTANT:case n.ANIMATIONLOOPMODE_YOYO:return _;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return((m=t.offsetValue)!=null?m:0)*t.repeatCount+_}break}case n.ANIMATIONTYPE_QUATERNION:{let _=f?this.quaternionInterpolateFunctionWithTangents(l,a.outTangent.scale(h),c,o.inTangent.scale(h),d):this.quaternionInterpolateFunction(l,c,d);switch(t.loopMode){case n.ANIMATIONLOOPMODE_CYCLE:case n.ANIMATIONLOOPMODE_CONSTANT:case n.ANIMATIONLOOPMODE_YOYO:return _;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return _.addInPlace((t.offsetValue||GC).scale(t.repeatCount))}return _}case n.ANIMATIONTYPE_VECTOR3:{let _=f?this.vector3InterpolateFunctionWithTangents(l,a.outTangent.scale(h),c,o.inTangent.scale(h),d):this.vector3InterpolateFunction(l,c,d);switch(t.loopMode){case n.ANIMATIONLOOPMODE_CYCLE:case n.ANIMATIONLOOPMODE_CONSTANT:case n.ANIMATIONLOOPMODE_YOYO:return _;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return _.add((t.offsetValue||kC).scale(t.repeatCount))}break}case n.ANIMATIONTYPE_VECTOR2:{let _=f?this.vector2InterpolateFunctionWithTangents(l,a.outTangent.scale(h),c,o.inTangent.scale(h),d):this.vector2InterpolateFunction(l,c,d);switch(t.loopMode){case n.ANIMATIONLOOPMODE_CYCLE:case n.ANIMATIONLOOPMODE_CONSTANT:case n.ANIMATIONLOOPMODE_YOYO:return _;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return _.add((t.offsetValue||WC).scale(t.repeatCount))}break}case n.ANIMATIONTYPE_SIZE:{switch(t.loopMode){case n.ANIMATIONLOOPMODE_CYCLE:case n.ANIMATIONLOOPMODE_CONSTANT:case n.ANIMATIONLOOPMODE_YOYO:return this.sizeInterpolateFunction(l,c,d);case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return this.sizeInterpolateFunction(l,c,d).add((t.offsetValue||HC).scale(t.repeatCount))}break}case n.ANIMATIONTYPE_COLOR3:{let _=f?this.color3InterpolateFunctionWithTangents(l,a.outTangent.scale(h),c,o.inTangent.scale(h),d):this.color3InterpolateFunction(l,c,d);switch(t.loopMode){case n.ANIMATIONLOOPMODE_CYCLE:case n.ANIMATIONLOOPMODE_CONSTANT:case n.ANIMATIONLOOPMODE_YOYO:return _;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return _.add((t.offsetValue||zC).scale(t.repeatCount))}break}case n.ANIMATIONTYPE_COLOR4:{let _=f?this.color4InterpolateFunctionWithTangents(l,a.outTangent.scale(h),c,o.inTangent.scale(h),d):this.color4InterpolateFunction(l,c,d);switch(t.loopMode){case n.ANIMATIONLOOPMODE_CYCLE:case n.ANIMATIONLOOPMODE_CONSTANT:case n.ANIMATIONLOOPMODE_YOYO:return _;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return _.add((t.offsetValue||XC).scale(t.repeatCount))}break}case n.ANIMATIONTYPE_MATRIX:{switch(t.loopMode){case n.ANIMATIONLOOPMODE_CYCLE:case n.ANIMATIONLOOPMODE_CONSTANT:case n.ANIMATIONLOOPMODE_YOYO:return n.AllowMatricesInterpolation?this.matrixInterpolateFunction(l,c,d,t.workValue):l;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return l}break}}return 0}matrixInterpolateFunction(e,t,i,r){return n.AllowMatrixDecomposeForInterpolation?r?(K.DecomposeLerpToRef(e,t,i,r),r):K.DecomposeLerp(e,t,i):r?(K.LerpToRef(e,t,i,r),r):K.Lerp(e,t,i)}clone(e=!1){let t=new n(this.name,this.targetPropertyPath.join("."),this.framePerSecond,this.dataType,this.loopMode);if(t.enableBlending=this.enableBlending,t.blendingSpeed=this.blendingSpeed,this._keys&&t.setKeys(this._keys,!1,e),this._ranges){t._ranges={};for(let i in this._ranges){let r=this._ranges[i];r&&(t._ranges[i]=r.clone())}}return t}setKeys(e,t=!1,i=!1){if(t)this._keys=e;else if(this._keys=e.slice(0),i)for(let r=0;r=2&&(l=o.values[1]),o.values.length>=3&&(c=o.values[2]),o.values.length>=4&&(f=o.values[3]);break;case n.ANIMATIONTYPE_QUATERNION:if(s=ze.FromArray(o.values),o.values.length>=8){let d=ze.FromArray(o.values.slice(4,8));d.equals(ze.Zero())||(l=d)}if(o.values.length>=12){let d=ze.FromArray(o.values.slice(8,12));d.equals(ze.Zero())||(c=d)}o.values.length>=13&&(f=o.values[12]);break;case n.ANIMATIONTYPE_MATRIX:s=K.FromArray(o.values),o.values.length>=17&&(f=o.values[16]);break;case n.ANIMATIONTYPE_COLOR3:s=Te.FromArray(o.values),o.values[3]&&(l=Te.FromArray(o.values[3])),o.values[4]&&(c=Te.FromArray(o.values[4])),o.values[5]&&(f=o.values[5]);break;case n.ANIMATIONTYPE_COLOR4:s=lt.FromArray(o.values),o.values[4]&&(l=lt.FromArray(o.values[4])),o.values[5]&&(c=lt.FromArray(o.values[5])),o.values[6]&&(f=lt.FromArray(o.values[6]));break;case n.ANIMATIONTYPE_VECTOR3:default:s=b.FromArray(o.values),o.values[3]&&(l=b.FromArray(o.values[3])),o.values[4]&&(c=b.FromArray(o.values[4])),o.values[5]&&(f=o.values[5]);break}let h={};h.frame=o.frame,h.value=s,l!=null&&(h.inTangent=l),c!=null&&(h.outTangent=c),f!=null&&(h.interpolation=f),r.push(h)}if(t.setKeys(r),e.ranges)for(a=0;a{let s=new Rr;s.addEventListener("readystatechange",()=>{if(s.readyState==4)if(s.status==200){let a=JSON.parse(s.responseText);if(a.animations&&(a=a.animations),a.length){let o=[];for(let l of a)o.push(this.Parse(l));i(o)}else{let o=this.Parse(a);e&&(o.name=e),i(o)}}else r("Unable to load the animation")}),s.open("GET",t),s.send()})}static async ParseFromSnippetAsync(e){return await new Promise((t,i)=>{let r=new Rr;r.addEventListener("readystatechange",()=>{if(r.readyState==4)if(r.status==200){let s=JSON.parse(JSON.parse(r.responseText).jsonPayload);if(s.animations){let a=JSON.parse(s.animations),o=[];for(let l of a.animations){let c=this.Parse(l);c.snippetId=e,o.push(c)}t(o)}else{let a=JSON.parse(s.animation),o=this.Parse(a);o.snippetId=e,t(o)}}else i("Unable to load the snippet "+e)}),r.open("GET",this.SnippetUrl+"/"+e.replace(/#/g,"/")),r.send()})}};ft._UniqueIdGenerator=0;ft.AllowMatricesInterpolation=!1;ft.AllowMatrixDecomposeForInterpolation=!0;ft.InheritOriginalValueFromActiveAnimations=!1;ft.SnippetUrl="https://snippet.babylonjs.com";ft.ANIMATIONTYPE_FLOAT=0;ft.ANIMATIONTYPE_VECTOR3=1;ft.ANIMATIONTYPE_QUATERNION=2;ft.ANIMATIONTYPE_MATRIX=3;ft.ANIMATIONTYPE_COLOR3=4;ft.ANIMATIONTYPE_COLOR4=7;ft.ANIMATIONTYPE_VECTOR2=5;ft.ANIMATIONTYPE_SIZE=6;ft.ANIMATIONLOOPMODE_RELATIVE=0;ft.ANIMATIONLOOPMODE_CYCLE=1;ft.ANIMATIONLOOPMODE_CONSTANT=2;ft.ANIMATIONLOOPMODE_YOYO=4;ft.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT=5;ft.CreateFromSnippetAsync=ft.ParseFromSnippetAsync;wt("BABYLON.Animation",ft);_i._AnimationRangeFactory=(n,e,t)=>new pf(n,e,t)});var Em,xV=C(()=>{UC();_f();Em=class n{constructor(){this.transitionDuration=450,this.lowerRadiusTransitionRange=2,this.upperRadiusTransitionRange=-2,this._autoTransitionRange=!1,this._attachedCamera=null,this._radiusIsAnimating=!1,this._radiusBounceTransition=null,this._animatables=new Array}get name(){return"Bouncing"}get autoTransitionRange(){return this._autoTransitionRange}set autoTransitionRange(e){if(this._autoTransitionRange===e)return;this._autoTransitionRange=e;let t=this._attachedCamera;t&&(e?this._onMeshTargetChangedObserver=t.onMeshTargetChangedObservable.add(i=>{if(i&&(i.computeWorldMatrix(!0),i.getBoundingInfo)){let r=i.getBoundingInfo().diagonalLength;this.lowerRadiusTransitionRange=r*.05,this.upperRadiusTransitionRange=r*.05}}):this._onMeshTargetChangedObserver&&t.onMeshTargetChangedObservable.remove(this._onMeshTargetChangedObserver))}get attachedNode(){return this._attachedCamera}init(){}attach(e){this._attachedCamera=e,this._onAfterCheckInputsObserver=e.onAfterCheckInputsObservable.add(()=>{this._attachedCamera&&(this._isRadiusAtLimit(this._attachedCamera.lowerRadiusLimit)&&this._applyBoundRadiusAnimation(this.lowerRadiusTransitionRange),this._isRadiusAtLimit(this._attachedCamera.upperRadiusLimit)&&this._applyBoundRadiusAnimation(this.upperRadiusTransitionRange))})}detach(){this._attachedCamera&&(this._onAfterCheckInputsObserver&&this._attachedCamera.onAfterCheckInputsObservable.remove(this._onAfterCheckInputsObserver),this._onMeshTargetChangedObserver&&this._attachedCamera.onMeshTargetChangedObservable.remove(this._onMeshTargetChangedObserver),this._attachedCamera=null)}_isRadiusAtLimit(e){return this._attachedCamera?this._attachedCamera.radius===e&&!this._radiusIsAnimating:!1}_applyBoundRadiusAnimation(e){if(!this._attachedCamera)return;this._radiusBounceTransition||(n.EasingFunction.setEasingMode(n.EasingMode),this._radiusBounceTransition=ft.CreateAnimation("radius",ft.ANIMATIONTYPE_FLOAT,60,n.EasingFunction)),this._cachedWheelPrecision=this._attachedCamera.wheelPrecision,this._attachedCamera.wheelPrecision=1/0,this._attachedCamera.inertialRadiusOffset=0,this.stopAllAnimations(),this._radiusIsAnimating=!0;let t=ft.TransitionTo("radius",this._attachedCamera.radius+e,this._attachedCamera,this._attachedCamera.getScene(),60,this._radiusBounceTransition,this.transitionDuration,()=>this._clearAnimationLocks());t&&this._animatables.push(t)}_clearAnimationLocks(){this._radiusIsAnimating=!1,this._attachedCamera&&(this._attachedCamera.wheelPrecision=this._cachedWheelPrecision)}stopAllAnimations(){for(this._attachedCamera&&(this._attachedCamera.animations=[]);this._animatables.length;)this._animatables[0].onAnimationEnd=null,this._animatables[0].stop(),this._animatables.shift()}};Em.EasingFunction=new eA(.3);Em.EasingMode=lo.EASINGMODE_EASEOUT});var gf,RV=C(()=>{UC();hi();to();Cl();Ve();_f();gf=class n{constructor(){this.onTargetFramingAnimationEndObservable=new ee,this._mode=n.FitFrustumSidesMode,this._radiusScale=1,this._positionScale=.5,this._defaultElevation=.3,this._elevationReturnTime=1500,this._elevationReturnWaitTime=1e3,this._zoomStopsAnimation=!1,this._framingTime=1500,this.autoCorrectCameraLimitsAndSensibility=!0,this._attachedCamera=null,this._isPointerDown=!1,this._lastInteractionTime=-1/0,this._animatables=new Array,this._betaIsAnimating=!1}get name(){return"Framing"}set mode(e){this._mode=e}get mode(){return this._mode}set radiusScale(e){this._radiusScale=e}get radiusScale(){return this._radiusScale}set positionScale(e){this._positionScale=e}get positionScale(){return this._positionScale}set defaultElevation(e){this._defaultElevation=e}get defaultElevation(){return this._defaultElevation}set elevationReturnTime(e){this._elevationReturnTime=e}get elevationReturnTime(){return this._elevationReturnTime}set elevationReturnWaitTime(e){this._elevationReturnWaitTime=e}get elevationReturnWaitTime(){return this._elevationReturnWaitTime}set zoomStopsAnimation(e){this._zoomStopsAnimation=e}get zoomStopsAnimation(){return this._zoomStopsAnimation}set framingTime(e){this._framingTime=e}get framingTime(){return this._framingTime}get attachedNode(){return this._attachedCamera}init(){}attach(e){this._attachedCamera=e;let t=this._attachedCamera.getScene();n.EasingFunction.setEasingMode(n.EasingMode),this._onPrePointerObservableObserver=t.onPrePointerObservable.add(i=>{if(i.type===it.POINTERDOWN){this._isPointerDown=!0;return}i.type===it.POINTERUP&&(this._isPointerDown=!1)}),this._onMeshTargetChangedObserver=e.onMeshTargetChangedObservable.add(i=>{i&&i.getBoundingInfo&&this.zoomOnMesh(i,void 0,()=>{this.onTargetFramingAnimationEndObservable.notifyObservers()})}),this._onAfterCheckInputsObserver=e.onAfterCheckInputsObservable.add(()=>{this._applyUserInteraction(),this._maintainCameraAboveGround()})}detach(){if(!this._attachedCamera)return;let e=this._attachedCamera.getScene();this._onPrePointerObservableObserver&&e.onPrePointerObservable.remove(this._onPrePointerObservableObserver),this._onAfterCheckInputsObserver&&this._attachedCamera.onAfterCheckInputsObservable.remove(this._onAfterCheckInputsObserver),this._onMeshTargetChangedObserver&&this._attachedCamera.onMeshTargetChangedObservable.remove(this._onMeshTargetChangedObserver),this._attachedCamera=null}zoomOnMesh(e,t=!1,i=null){e.computeWorldMatrix(!0);let r=e.getBoundingInfo().boundingBox;this.zoomOnBoundingInfo(r.minimumWorld,r.maximumWorld,t,i)}zoomOnMeshHierarchy(e,t=!1,i=null){e.computeWorldMatrix(!0);let r=e.getHierarchyBoundingVectors(!0);this.zoomOnBoundingInfo(r.min,r.max,t,i)}zoomOnMeshesHierarchy(e,t=!1,i=null){let r=new b(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),s=new b(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE);for(let a=0;a{this.stopAllAnimations(),r&&r(),this._attachedCamera&&this._attachedCamera.useInputToRestoreState&&this._attachedCamera.storeState()}),f&&this._animatables.push(f),!0}_calculateLowerRadiusFromModelBoundingSphere(e,t){let i=this._attachedCamera;if(!i)return 0;let r=i._calculateLowerRadiusFromModelBoundingSphere(e,t,this._radiusScale);return i.lowerRadiusLimit&&this._mode===n.IgnoreBoundsSizeMode&&(r=ri.upperRadiusLimit?i.upperRadiusLimit:r),r}_maintainCameraAboveGround(){if(this._elevationReturnTime<0)return;let e=fr.Now-this._lastInteractionTime,t=Math.PI*.5-this._defaultElevation,i=Math.PI*.5;if(this._attachedCamera&&!this._betaIsAnimating&&this._attachedCamera.beta>i&&e>=this._elevationReturnWaitTime){this._betaIsAnimating=!0,this.stopAllAnimations(),this._betaTransition||(this._betaTransition=ft.CreateAnimation("beta",ft.ANIMATIONTYPE_FLOAT,60,n.EasingFunction));let r=ft.TransitionTo("beta",t,this._attachedCamera,this._attachedCamera.getScene(),60,this._betaTransition,this._elevationReturnTime,()=>{this._clearAnimationLocks(),this.stopAllAnimations()});r&&this._animatables.push(r)}}_clearAnimationLocks(){this._betaIsAnimating=!1}_applyUserInteraction(){this.isUserIsMoving&&(this._lastInteractionTime=fr.Now,this.stopAllAnimations(),this._clearAnimationLocks())}stopAllAnimations(){for(this._attachedCamera&&(this._attachedCamera.animations=[]);this._animatables.length;)this._animatables[0]&&(this._animatables[0].onAnimationEnd=null,this._animatables[0].stop()),this._animatables.shift()}get isUserIsMoving(){return this._attachedCamera?this._attachedCamera.inertialAlphaOffset!==0||this._attachedCamera.inertialBetaOffset!==0||this._attachedCamera.inertialRadiusOffset!==0||this._attachedCamera.inertialPanningX!==0||this._attachedCamera.inertialPanningY!==0||this._isPointerDown:!1}};gf.EasingFunction=new tA;gf.EasingMode=lo.EASINGMODE_EASEINOUT;gf.IgnoreBoundsSizeMode=0;gf.FitFrustumSidesMode=1});var iA,YC,vs,KC=C(()=>{kt();Ut();Jo();Ve();An();Iu();Hs();_i.AddNodeConstructor("TargetCamera",(n,e)=>()=>new vs(n,b.Zero(),e));iA=K.Zero(),YC=ze.Identity(),vs=class n extends ut{constructor(e,t,i,r=!0){super(e,t,i,r),this.cameraDirection=new b(0,0,0),this.cameraRotation=new Ne(0,0),this.updateUpVectorFromRotation=!1,this.speed=2,this.noRotationConstraint=!1,this.invertRotation=!1,this.inverseRotationSpeed=.2,this._panningEpsilon=Nt,this._rotationEpsilon=Nt,this.lockedTarget=null,this._currentTarget=b.Zero(),this._initialFocalDistance=1,this._viewMatrix=K.Zero(),this._cameraTransformMatrix=K.Zero(),this._cameraRotationMatrix=K.Zero(),this._transformedReferencePoint=b.Zero(),this._deferredPositionUpdate=new b,this._deferredRotationQuaternionUpdate=new ze,this._deferredRotationUpdate=new b,this._deferredUpdated=!1,this._deferOnly=!1,this._cachedRotationZ=0,this._cachedQuaternionRotationZ=0,this._referencePoint=b.Forward(this.getScene().useRightHandedSystem),this.rotation=new b(0,this.getScene().useRightHandedSystem?Math.PI:0,0)}getFrontPosition(e){this.getWorldMatrix();let t=Z.Vector3[0],i=Z.Vector3[1];return i.set(0,0,this._scene.useRightHandedSystem?-1:1),this.getDirectionToRef(i,t),t.scaleInPlace(e),this.globalPosition.add(t)}_getLockedTargetPosition(){if(!this.lockedTarget)return null;if(this.lockedTarget.absolutePosition){let e=this.lockedTarget;e.computeWorldMatrix().getTranslationToRef(e.absolutePosition)}return this.lockedTarget.absolutePosition||this.lockedTarget}storeState(){return this._storedPosition=this.position.clone(),this._storedRotation=this.rotation.clone(),this.rotationQuaternion&&(this._storedRotationQuaternion=this.rotationQuaternion.clone()),super.storeState()}_restoreStateValues(){return super._restoreStateValues()?(this.position=this._storedPosition.clone(),this.rotation=this._storedRotation.clone(),this.rotationQuaternion&&this._storedRotationQuaternion&&(this.rotationQuaternion=this._storedRotationQuaternion.clone()),this.cameraDirection.copyFromFloats(0,0,0),this.cameraRotation.copyFromFloats(0,0),!0):!1}_initCache(){super._initCache(),this._cache.lockedTarget=new b(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),this._cache.rotation=new b(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),this._cache.rotationQuaternion=new ze(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE)}_updateCache(e){e||super._updateCache();let t=this._getLockedTargetPosition();t?this._cache.lockedTarget?this._cache.lockedTarget.copyFrom(t):this._cache.lockedTarget=t.clone():this._cache.lockedTarget=null,this._cache.rotation.copyFrom(this.rotation),this.rotationQuaternion&&this._cache.rotationQuaternion.copyFrom(this.rotationQuaternion)}_isSynchronizedViewMatrix(){if(!super._isSynchronizedViewMatrix())return!1;let e=this._getLockedTargetPosition();return(this._cache.lockedTarget?this._cache.lockedTarget.equals(e):!e)&&(this.rotationQuaternion?this.rotationQuaternion.equals(this._cache.rotationQuaternion):this._cache.rotation.equals(this.rotation))}_computeLocalCameraSpeed(){let e=this.getEngine();return this.speed*Math.sqrt(e.getDeltaTime()/(e.getFps()*100))}setTarget(e){this.upVector.normalize(),this._initialFocalDistance=e.subtract(this.position).length(),this.position.z===e.z&&(this.position.z+=Nt),this._referencePoint.normalize().scaleInPlace(this._initialFocalDistance),this.getScene().useRightHandedSystem?K.LookAtRHToRef(this.position,e,b.UpReadOnly,iA):K.LookAtLHToRef(this.position,e,b.UpReadOnly,iA),iA.invert();let t=this.rotationQuaternion||YC;ze.FromRotationMatrixToRef(iA,t),t.toEulerAnglesToRef(this.rotation),this.rotation.z=0}get target(){return this.getTarget()}set target(e){this.setTarget(e)}getTarget(){return this._currentTarget}_decideIfNeedsToMove(){return Math.abs(this.cameraDirection.x)>0||Math.abs(this.cameraDirection.y)>0||Math.abs(this.cameraDirection.z)>0}_updatePosition(){if(this.parent){this.parent.getWorldMatrix().invertToRef(Z.Matrix[0]),b.TransformNormalToRef(this.cameraDirection,Z.Matrix[0],Z.Vector3[0]),this._deferredPositionUpdate.addInPlace(Z.Vector3[0]),this._deferOnly?this._deferredUpdated=!0:this.position.copyFrom(this._deferredPositionUpdate);return}this._deferredPositionUpdate.addInPlace(this.cameraDirection),this._deferOnly?this._deferredUpdated=!0:this.position.copyFrom(this._deferredPositionUpdate)}_checkInputs(){let e=this.invertRotation?-this.inverseRotationSpeed:1,t=this._decideIfNeedsToMove(),i=this.cameraRotation.x||this.cameraRotation.y;this._deferredUpdated=!1,this._deferredRotationUpdate.copyFrom(this.rotation),this._deferredPositionUpdate.copyFrom(this.position),this.rotationQuaternion&&this._deferredRotationQuaternionUpdate.copyFrom(this.rotationQuaternion),t&&this._updatePosition(),i&&(this.rotationQuaternion&&this.rotationQuaternion.toEulerAnglesToRef(this._deferredRotationUpdate),this._deferredRotationUpdate.x+=this.cameraRotation.x*e,this._deferredRotationUpdate.y+=this.cameraRotation.y*e,this.noRotationConstraint||(this._deferredRotationUpdate.x>1.570796&&(this._deferredRotationUpdate.x=1.570796),this._deferredRotationUpdate.x<-1.570796&&(this._deferredRotationUpdate.x=-1.570796)),this._deferOnly?this._deferredUpdated=!0:this.rotation.copyFrom(this._deferredRotationUpdate),this.rotationQuaternion&&this._deferredRotationUpdate.lengthSquared()&&(ze.RotationYawPitchRollToRef(this._deferredRotationUpdate.y,this._deferredRotationUpdate.x,this._deferredRotationUpdate.z,this._deferredRotationQuaternionUpdate),this._deferOnly?this._deferredUpdated=!0:this.rotationQuaternion.copyFrom(this._deferredRotationQuaternionUpdate)));let r=this.speed*this._panningEpsilon,s=this.speed*this._rotationEpsilon;t&&(Math.abs(this.cameraDirection.x){Pt();_r();Jo();Dn={},Sm=class{constructor(e){this.attachedToElement=!1,this.attached={},this.camera=e,this.checkInputs=()=>{}}add(e){let t=e.getSimpleName();if(this.attached[t]){$.Warn("camera input of type "+t+" already exists on camera");return}this.attached[t]=e,e.camera=this.camera,e.checkInputs&&(this.checkInputs=this._addCheckInputs(e.checkInputs.bind(e))),this.attachedToElement&&e.attachControl(this.noPreventDefault)}remove(e){for(let t in this.attached){let i=this.attached[t];if(i===e){i.detachControl(),i.camera=null,delete this.attached[t],this.rebuildInputCheck();return}}}removeByType(e){for(let t in this.attached){let i=this.attached[t];i.getClassName()===e&&(i.detachControl(),i.camera=null,delete this.attached[t],this.rebuildInputCheck())}}_addCheckInputs(e){let t=this.checkInputs;return()=>{t(),e()}}attachInput(e){this.attachedToElement&&e.attachControl(this.noPreventDefault)}attachElement(e=!1){if(!this.attachedToElement){e=ut.ForceAttachControlToAlwaysPreventDefault?!1:e,this.attachedToElement=!0,this.noPreventDefault=e;for(let t in this.attached)this.attached[t].attachControl(e)}}detachElement(e=!1){for(let t in this.attached)this.attached[t].detachControl(),e&&(this.attached[t].camera=null);this.attachedToElement=!1}rebuildInputCheck(){this.checkInputs=()=>{};for(let e in this.attached){let t=this.attached[e];t.checkInputs&&(this.checkInputs=this._addCheckInputs(t.checkInputs.bind(t)))}}clear(){this.attachedToElement&&this.detachElement(!0),this.attached={},this.attachedToElement=!1,this.checkInputs=()=>{}}serialize(e){let t={};for(let i in this.attached){let r=this.attached[i],s=tt.Serialize(r);t[r.getClassName()]=s}e.inputsmgr=t}parse(e){let t=e.inputsmgr;if(t){this.clear();for(let i in t){let r=Dn[i];if(r){let s=t[i],a=tt.Parse(()=>new r,s,null);this.add(a)}}}else for(let i in this.attached){let r=Dn[this.attached[i].getClassName()];if(r){let s=tt.Parse(()=>new r,e,null);this.remove(this.attached[i]),this.add(s)}}}}});var k_,bV=C(()=>{kt();Ut();Ci();to();k_=class{constructor(){this._currentMousePointerIdDown=-1,this.buttons=[0,1,2]}attachControl(e){e=he.BackCompatCameraNoPreventDefault(arguments);let t=this.camera.getEngine(),i=t.getInputElement(),r=0,s=null;this._pointA=null,this._pointB=null,this._altKey=!1,this._ctrlKey=!1,this._metaKey=!1,this._shiftKey=!1,this._buttonsPressed=0,this._pointerInput=o=>{var h,d;let l=o.event,c=l.pointerType==="touch";if(o.type!==it.POINTERMOVE&&this.buttons.indexOf(l.button)===-1)return;let f=l.target;if(this._altKey=l.altKey,this._ctrlKey=l.ctrlKey,this._metaKey=l.metaKey,this._shiftKey=l.shiftKey,this._buttonsPressed=l.buttons,t.isPointerLock){let u=l.movementX,m=l.movementY;this.onTouch(null,u,m),this._pointA=null,this._pointB=null}else{if(o.type!==it.POINTERDOWN&&o.type!==it.POINTERDOUBLETAP&&c&&((h=this._pointA)==null?void 0:h.pointerId)!==l.pointerId&&((d=this._pointB)==null?void 0:d.pointerId)!==l.pointerId)return;if(o.type===it.POINTERDOWN&&(this._currentMousePointerIdDown===-1||c)){try{f==null||f.setPointerCapture(l.pointerId)}catch(u){}if(this._pointA===null)this._pointA={x:l.clientX,y:l.clientY,pointerId:l.pointerId,type:l.pointerType,button:l.button};else if(this._pointB===null)this._pointB={x:l.clientX,y:l.clientY,pointerId:l.pointerId,type:l.pointerType,button:l.button};else return;this._currentMousePointerIdDown===-1&&!c&&(this._currentMousePointerIdDown=l.pointerId),this.onButtonDown(l),e||(l.preventDefault(),i&&i.focus())}else if(o.type===it.POINTERDOUBLETAP)this.onDoubleTap(l.pointerType);else if(o.type===it.POINTERUP&&(this._currentMousePointerIdDown===l.pointerId||c)){try{f==null||f.releasePointerCapture(l.pointerId)}catch(u){}c||(this._pointB=null),t._badOS?this._pointA=this._pointB=null:this._pointB&&this._pointA&&this._pointA.pointerId==l.pointerId?(this._pointA=this._pointB,this._pointB=null):this._pointA&&this._pointB&&this._pointB.pointerId==l.pointerId?this._pointB=null:this._pointA=this._pointB=null,(r!==0||s)&&(this.onMultiTouch(this._pointA,this._pointB,r,0,s,null),r=0,s=null),this._currentMousePointerIdDown=-1,this.onButtonUp(l),e||l.preventDefault()}else if(o.type===it.POINTERMOVE){if(e||l.preventDefault(),this._pointA&&this._pointB===null){let u=l.clientX-this._pointA.x,m=l.clientY-this._pointA.y;this._pointA.x=l.clientX,this._pointA.y=l.clientY,this.onTouch(this._pointA,u,m)}else if(this._pointA&&this._pointB){let u=this._pointA.pointerId===l.pointerId?this._pointA:this._pointB;u.x=l.clientX,u.y=l.clientY;let m=this._pointA.x-this._pointB.x,_=this._pointA.y-this._pointB.y,p=m*m+_*_,g={x:(this._pointA.x+this._pointB.x)/2,y:(this._pointA.y+this._pointB.y)/2,pointerId:l.pointerId,type:o.type};this.onMultiTouch(this._pointA,this._pointB,r,p,s,g),s=g,r=p}}}},this._observer=this.camera.getScene()._inputManager._addCameraPointerObserver(this._pointerInput,it.POINTERDOWN|it.POINTERUP|it.POINTERMOVE|it.POINTERDOUBLETAP),this._onLostFocus=()=>{this._pointA=this._pointB=null,r=0,s=null,this.onLostFocus()},this._contextMenuBind=o=>this.onContextMenu(o),i&&i.addEventListener("contextmenu",this._contextMenuBind,!1);let a=this.camera.getScene().getEngine().getHostWindow();a&&he.RegisterTopRootEvents(a,[{name:"blur",handler:this._onLostFocus}])}detachControl(){if(this._onLostFocus){let e=this.camera.getScene().getEngine().getHostWindow();e&&he.UnregisterTopRootEvents(e,[{name:"blur",handler:this._onLostFocus}])}if(this._observer){if(this.camera.getScene()._inputManager._removeCameraPointerObserver(this._observer),this._observer=null,this._contextMenuBind){let e=this.camera.getScene().getEngine().getInputElement();e&&e.removeEventListener("contextmenu",this._contextMenuBind)}this._onLostFocus=null}this._altKey=!1,this._ctrlKey=!1,this._metaKey=!1,this._shiftKey=!1,this._buttonsPressed=0,this._currentMousePointerIdDown=-1}getClassName(){return"BaseCameraPointersInput"}getSimpleName(){return"pointers"}onDoubleTap(e){}onTouch(e,t,i){}onMultiTouch(e,t,i,r,s,a){}onContextMenu(e){e.preventDefault()}onButtonDown(e){}onButtonUp(e){}onLostFocus(){}};P([F()],k_.prototype,"buttons",void 0)});var Hh,IV=C(()=>{kt();Ut();bV();Hh=class extends k_{constructor(){super(...arguments),this.pinchZoom=!0,this.multiTouchPanning=!0,this.multiTouchPanAndZoom=!0,this._isPinching=!1,this._twoFingerActivityCount=0,this._shouldStartPinchZoom=!1}_computePinchZoom(e,t){}_computeMultiTouchPanning(e,t){}onMultiTouch(e,t,i,r,s,a){i===0&&s===null||r===0&&a===null||(this.multiTouchPanAndZoom?(this._computePinchZoom(i,r),this._computeMultiTouchPanning(s,a)):this.multiTouchPanning&&this.pinchZoom?(this._twoFingerActivityCount++,this._isPinching||this._shouldStartPinchZoom?(this._computePinchZoom(i,r),this._isPinching=!0):this._computeMultiTouchPanning(s,a)):this.multiTouchPanning?this._computeMultiTouchPanning(s,a):this.pinchZoom&&this._computePinchZoom(i,r))}onButtonUp(e){this._twoFingerActivityCount=0,this._isPinching=!1}onLostFocus(){this._twoFingerActivityCount=0,this._isPinching=!1}};P([F()],Hh.prototype,"pinchZoom",void 0);P([F()],Hh.prototype,"multiTouchPanning",void 0);P([F()],Hh.prototype,"multiTouchPanAndZoom",void 0)});var zs,MV=C(()=>{kt();Ut();rl();IV();zs=class n extends Hh{constructor(){super(...arguments),this.buttons=[0,1,2],this.angularSensibilityX=1e3,this.angularSensibilityY=1e3,this.pinchPrecision=12,this.pinchDeltaPercentage=0,this.useNaturalPinchZoom=!1,this.panningSensibility=1e3,this.pinchInwards=!0,this._isPanClick=!1}getClassName(){return"ArcRotateCameraPointersInput"}_computeMultiTouchPanning(e,t){if(this.panningSensibility!==0&&e&&t){let i=t.x-e.x,r=t.y-e.y;this.camera.inertialPanningX+=-i/this.panningSensibility,this.camera.inertialPanningY+=r/this.panningSensibility}}_computePinchZoom(e,t){let i=this.camera.radius||n.MinimumRadiusForPinch;this.useNaturalPinchZoom?this.camera.radius=i*Math.sqrt(e)/Math.sqrt(t):this.pinchDeltaPercentage?this.camera.inertialRadiusOffset+=(t-e)*.001*i*this.pinchDeltaPercentage:this.camera.inertialRadiusOffset+=(t-e)/(this.pinchPrecision*(this.pinchInwards?1:-1)*(this.angularSensibilityX+this.angularSensibilityY)/2)}onTouch(e,t,i){this.panningSensibility!==0&&(this._ctrlKey&&this.camera._useCtrlForPanning||this._isPanClick)?(this.camera.inertialPanningX+=-t/this.panningSensibility,this.camera.inertialPanningY+=i/this.panningSensibility):(this.camera.inertialAlphaOffset-=t/this.angularSensibilityX,this.camera.inertialBetaOffset-=i/this.angularSensibilityY)}onDoubleTap(){this.camera.useInputToRestoreState&&this.camera.restoreState()}onMultiTouch(e,t,i,r,s,a){this._shouldStartPinchZoom=this._twoFingerActivityCount<20&&Math.abs(Math.sqrt(r)-Math.sqrt(i))>this.camera.pinchToPanMaxDistance,super.onMultiTouch(e,t,i,r,s,a)}onButtonDown(e){this._isPanClick=e.button===this.camera._panningMouseButton,super.onButtonDown(e)}onButtonUp(e){super.onButtonUp(e)}onLostFocus(){this._isPanClick=!1,super.onLostFocus()}};zs.MinimumRadiusForPinch=.001;P([F()],zs.prototype,"buttons",void 0);P([F()],zs.prototype,"angularSensibilityX",void 0);P([F()],zs.prototype,"angularSensibilityY",void 0);P([F()],zs.prototype,"pinchPrecision",void 0);P([F()],zs.prototype,"pinchDeltaPercentage",void 0);P([F()],zs.prototype,"useNaturalPinchZoom",void 0);P([F()],zs.prototype,"panningSensibility",void 0);Dn.ArcRotateCameraPointersInput=zs});var Es,CV=C(()=>{kt();Ut();rl();IT();Ci();Es=class{constructor(){this.keysUp=[38],this.keysDown=[40],this.keysLeft=[37],this.keysRight=[39],this.keysReset=[220],this.panningSensibility=50,this.zoomingSensibility=25,this.useAltToZoom=!0,this.angularSpeed=.01,this._keys=new Array}attachControl(e){e=he.BackCompatCameraNoPreventDefault(arguments),!this._onCanvasBlurObserver&&(this._scene=this.camera.getScene(),this._engine=this._scene.getEngine(),this._onCanvasBlurObserver=this._engine.onCanvasBlurObservable.add(()=>{this._keys.length=0}),this._onKeyboardObserver=this._scene.onKeyboardObservable.add(t=>{let i=t.event;if(!i.metaKey){if(t.type===io.KEYDOWN)this._ctrlPressed=i.ctrlKey,this._altPressed=i.altKey,(this.keysUp.indexOf(i.keyCode)!==-1||this.keysDown.indexOf(i.keyCode)!==-1||this.keysLeft.indexOf(i.keyCode)!==-1||this.keysRight.indexOf(i.keyCode)!==-1||this.keysReset.indexOf(i.keyCode)!==-1)&&(this._keys.indexOf(i.keyCode)===-1&&this._keys.push(i.keyCode),i.preventDefault&&(e||i.preventDefault()));else if(this.keysUp.indexOf(i.keyCode)!==-1||this.keysDown.indexOf(i.keyCode)!==-1||this.keysLeft.indexOf(i.keyCode)!==-1||this.keysRight.indexOf(i.keyCode)!==-1||this.keysReset.indexOf(i.keyCode)!==-1){let r=this._keys.indexOf(i.keyCode);r>=0&&this._keys.splice(r,1),i.preventDefault&&(e||i.preventDefault())}}}))}detachControl(){this._scene&&(this._onKeyboardObserver&&this._scene.onKeyboardObservable.remove(this._onKeyboardObserver),this._onCanvasBlurObserver&&this._engine.onCanvasBlurObservable.remove(this._onCanvasBlurObserver),this._onKeyboardObserver=null,this._onCanvasBlurObserver=null),this._keys.length=0}checkInputs(){if(this._onKeyboardObserver){let e=this.camera;for(let t=0;t{kt();Ut();rl();to();Du();Ve();An();MT();xn();Ci();rne=40,vf=class{constructor(){this.wheelPrecision=3,this.zoomToMouseLocation=!1,this.wheelDeltaPercentage=0,this.customComputeDeltaFromMouseWheel=null,this._viewOffset=new b(0,0,0),this._globalOffset=new b(0,0,0),this._inertialPanning=b.Zero()}_computeDeltaFromMouseWheelLegacyEvent(e,t){let i,r=e*.01*this.wheelDeltaPercentage*t;return e>0?i=r/(1+this.wheelDeltaPercentage):i=r*(1+this.wheelDeltaPercentage),i}attachControl(e){e=he.BackCompatCameraNoPreventDefault(arguments),this._wheel=t=>{if(t.type!==it.POINTERWHEEL)return;let i=t.event,r,s=i.deltaMode===ro.DOM_DELTA_LINE?rne:1,a=-(i.deltaY*s);if(this.customComputeDeltaFromMouseWheel)r=this.customComputeDeltaFromMouseWheel(a,this,i);else if(this.wheelDeltaPercentage){if(r=this._computeDeltaFromMouseWheelLegacyEvent(a,this.camera.radius),r>0){let o=this.camera.radius,l=this.camera.inertialRadiusOffset+r;for(let c=0;c<20&&!(o<=l||Math.abs(l*this.camera.inertia)<.001);c++)o-=l,l*=this.camera.inertia;o=Ft(o,0,Number.MAX_VALUE),r=this._computeDeltaFromMouseWheelLegacyEvent(a,o)}}else r=a/(this.wheelPrecision*40);r&&(this.zoomToMouseLocation?(this._hitPlane||this._updateHitPlane(),this._zoomToMouse(r)):this.camera.inertialRadiusOffset+=r),i.preventDefault&&(e||i.preventDefault())},this._observer=this.camera.getScene()._inputManager._addCameraPointerObserver(this._wheel,it.POINTERWHEEL),this.zoomToMouseLocation&&this._inertialPanning.setAll(0)}detachControl(){this._observer&&(this.camera.getScene()._inputManager._removeCameraPointerObserver(this._observer),this._observer=null,this._wheel=null)}checkInputs(){if(!this.zoomToMouseLocation)return;let e=this.camera;0+e.inertialAlphaOffset+e.inertialBetaOffset+e.inertialRadiusOffset&&(this._updateHitPlane(),e.target.addInPlace(this._inertialPanning),this._inertialPanning.scaleInPlace(e.inertia),this._zeroIfClose(this._inertialPanning))}getClassName(){return"ArcRotateCameraMouseWheelInput"}getSimpleName(){return"mousewheel"}_updateHitPlane(){let e=this.camera,t=e.target.subtract(e.position);this._hitPlane=qa.FromPositionAndNormal(e.target,t)}_getPosition(){var s;let e=this.camera,t=e.getScene(),i=t.createPickingRay(t.pointerX,t.pointerY,K.Identity(),e,!1);(e.targetScreenOffset.x!==0||e.targetScreenOffset.y!==0)&&(this._viewOffset.set(e.targetScreenOffset.x,e.targetScreenOffset.y,0),e.getViewMatrix().invertToRef(e._cameraTransformMatrix),this._globalOffset=b.TransformNormal(this._viewOffset,e._cameraTransformMatrix),i.origin.addInPlace(this._globalOffset));let r=0;return this._hitPlane&&(r=(s=i.intersectsPlane(this._hitPlane))!=null?s:0),i.origin.addInPlace(i.direction.scaleInPlace(r))}_zoomToMouse(e){var l,c;let t=this.camera,i=1-t.inertia;if(t.lowerRadiusLimit){let f=(l=t.lowerRadiusLimit)!=null?l:0;t.radius-(t.inertialRadiusOffset+e)/if&&(e=(t.radius-f)*i-t.inertialRadiusOffset)}let s=e/i/t.radius,a=this._getPosition(),o=Z.Vector3[6];a.subtractToRef(t.target,o),o.scaleInPlace(s),o.scaleInPlace(i),this._inertialPanning.addInPlace(o),t.inertialRadiusOffset+=e}_zeroIfClose(e){Math.abs(e.x){MV();CV();yV();rl();rA=class extends Sm{constructor(e){super(e)}addMouseWheel(){return this.add(new vf),this}addPointers(){return this.add(new zs),this}addKeyboard(){return this.add(new Es),this}}});function nne(n){let e=Math.PI/2;return n.x===0&&n.z===0||(e=Math.acos(n.x/Math.sqrt(Math.pow(n.x,2)+Math.pow(n.z,2)))),n.z<0&&(e=2*Math.PI-e),e}function sne(n,e){return Math.acos(n/e)}function Ln(n,e){return isNaN(n)?e:n}var gi,nA=C(()=>{kt();Ut();hi();Ve();xn();Hs();Di();BC();xV();RV();Jo();KC();PV();An();Ci();Vi();_i.AddNodeConstructor("ArcRotateCamera",(n,e)=>()=>new gi(n,0,0,1,b.Zero(),e));gi=class n extends vs{get target(){return this._target}set target(e){this.setTarget(e)}get targetHost(){return this._targetHost}set targetHost(e){e&&this.setTarget(e)}getTarget(){return this.target}get position(){return this._position}set position(e){this.setPosition(e)}set upVector(e){this._upToYMatrix||(this._yToUpMatrix=new K,this._upToYMatrix=new K,this._upVector=b.Zero()),e.normalize(),this._upVector.copyFrom(e),this.setMatUp()}get upVector(){return this._upVector}setMatUp(){K.RotationAlignToRef(b.UpReadOnly,this._upVector,this._yToUpMatrix),K.RotationAlignToRef(this._upVector,b.UpReadOnly,this._upToYMatrix)}get angularSensibilityX(){let e=this.inputs.attached.pointers;return e?e.angularSensibilityX:0}set angularSensibilityX(e){let t=this.inputs.attached.pointers;t&&(t.angularSensibilityX=e)}get angularSensibilityY(){let e=this.inputs.attached.pointers;return e?e.angularSensibilityY:0}set angularSensibilityY(e){let t=this.inputs.attached.pointers;t&&(t.angularSensibilityY=e)}get pinchPrecision(){let e=this.inputs.attached.pointers;return e?e.pinchPrecision:0}set pinchPrecision(e){let t=this.inputs.attached.pointers;t&&(t.pinchPrecision=e)}get pinchDeltaPercentage(){let e=this.inputs.attached.pointers;return e?e.pinchDeltaPercentage:0}set pinchDeltaPercentage(e){let t=this.inputs.attached.pointers;t&&(t.pinchDeltaPercentage=e)}get useNaturalPinchZoom(){let e=this.inputs.attached.pointers;return e?e.useNaturalPinchZoom:!1}set useNaturalPinchZoom(e){let t=this.inputs.attached.pointers;t&&(t.useNaturalPinchZoom=e)}get panningSensibility(){let e=this.inputs.attached.pointers;return e?e.panningSensibility:0}set panningSensibility(e){let t=this.inputs.attached.pointers;t&&(t.panningSensibility=e)}get keysUp(){let e=this.inputs.attached.keyboard;return e?e.keysUp:[]}set keysUp(e){let t=this.inputs.attached.keyboard;t&&(t.keysUp=e)}get keysDown(){let e=this.inputs.attached.keyboard;return e?e.keysDown:[]}set keysDown(e){let t=this.inputs.attached.keyboard;t&&(t.keysDown=e)}get keysLeft(){let e=this.inputs.attached.keyboard;return e?e.keysLeft:[]}set keysLeft(e){let t=this.inputs.attached.keyboard;t&&(t.keysLeft=e)}get keysRight(){let e=this.inputs.attached.keyboard;return e?e.keysRight:[]}set keysRight(e){let t=this.inputs.attached.keyboard;t&&(t.keysRight=e)}get wheelPrecision(){let e=this.inputs.attached.mousewheel;return e?e.wheelPrecision:0}set wheelPrecision(e){let t=this.inputs.attached.mousewheel;t&&(t.wheelPrecision=e)}get zoomToMouseLocation(){let e=this.inputs.attached.mousewheel;return e?e.zoomToMouseLocation:!1}set zoomToMouseLocation(e){let t=this.inputs.attached.mousewheel;t&&(t.zoomToMouseLocation=e)}get wheelDeltaPercentage(){let e=this.inputs.attached.mousewheel;return e?e.wheelDeltaPercentage:0}set wheelDeltaPercentage(e){let t=this.inputs.attached.mousewheel;t&&(t.wheelDeltaPercentage=e)}get isInterpolating(){return this._isInterpolating}get bouncingBehavior(){return this._bouncingBehavior}get useBouncingBehavior(){return this._bouncingBehavior!=null}set useBouncingBehavior(e){e!==this.useBouncingBehavior&&(e?(this._bouncingBehavior=new Em,this.addBehavior(this._bouncingBehavior)):this._bouncingBehavior&&(this.removeBehavior(this._bouncingBehavior),this._bouncingBehavior=null))}get framingBehavior(){return this._framingBehavior}get useFramingBehavior(){return this._framingBehavior!=null}set useFramingBehavior(e){e!==this.useFramingBehavior&&(e?(this._framingBehavior=new gf,this.addBehavior(this._framingBehavior)):this._framingBehavior&&(this.removeBehavior(this._framingBehavior),this._framingBehavior=null))}get autoRotationBehavior(){return this._autoRotationBehavior}get useAutoRotationBehavior(){return this._autoRotationBehavior!=null}set useAutoRotationBehavior(e){e!==this.useAutoRotationBehavior&&(e?(this._autoRotationBehavior=new vm,this.addBehavior(this._autoRotationBehavior)):this._autoRotationBehavior&&(this.removeBehavior(this._autoRotationBehavior),this._autoRotationBehavior=null))}constructor(e,t,i,r,s,a,o=!0){super(e,b.Zero(),a,o),this.inertialAlphaOffset=0,this.inertialBetaOffset=0,this.inertialRadiusOffset=0,this.lowerAlphaLimit=null,this.upperAlphaLimit=null,this.lowerBetaLimit=.01,this.upperBetaLimit=Math.PI-.01,this.lowerRadiusLimit=null,this.upperRadiusLimit=null,this.lowerTargetYLimit=-1/0,this.inertialPanningX=0,this.inertialPanningY=0,this.pinchToPanMaxDistance=20,this.panningDistanceLimit=null,this.panningOriginTarget=b.Zero(),this.panningInertia=.9,this.zoomOnFactor=1,this.targetScreenOffset=Ne.Zero(),this.allowUpsideDown=!0,this.useInputToRestoreState=!0,this.restoreStateInterpolationFactor=0,this._currentInterpolationFactor=0,this._viewMatrix=new K,this.panningAxis=new b(1,1,0),this._transformedDirection=new b,this.mapPanning=!1,this._isInterpolating=!1,this.onMeshTargetChangedObservable=new ee,this.checkCollisions=!1,this.collisionRadius=new b(.5,.5,.5),this._previousPosition=b.Zero(),this._collisionVelocity=b.Zero(),this._newPosition=b.Zero(),this._computationVector=b.Zero(),this._goalAlpha=NaN,this._goalBeta=NaN,this._goalRadius=NaN,this._goalTarget=new b(NaN,NaN,NaN),this._goalTargetScreenOffset=new Ne(NaN,NaN),this._onCollisionPositionChange=(l,c,f=null)=>{f?(this.setPosition(c),this.onCollide&&this.onCollide(f)):this._previousPosition.copyFrom(this._position);let h=Math.cos(this.alpha),d=Math.sin(this.alpha),u=Math.cos(this.beta),m=Math.sin(this.beta);m===0&&(m=1e-4);let _=this._getTargetPosition();this._computationVector.copyFromFloats(this.radius*h*m,this.radius*u,this.radius*d*m),_.addToRef(this._computationVector,this._newPosition),this._position.copyFrom(this._newPosition);let p=this.upVector;this.allowUpsideDown&&this.beta<0&&(p=p.clone(),p=p.negate()),this._computeViewMatrix(this._position,_,p),this._viewMatrix.addAtIndex(12,this.targetScreenOffset.x),this._viewMatrix.addAtIndex(13,this.targetScreenOffset.y),this._collisionTriggered=!1},this._target=b.Zero(),s&&this.setTarget(s),this.alpha=t,this.beta=i,this.radius=r,this.getViewMatrix(),this.inputs=new rA(this),this.inputs.addKeyboard().addMouseWheel().addPointers()}_initCache(){super._initCache(),this._cache._target=new b(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),this._cache.alpha=void 0,this._cache.beta=void 0,this._cache.radius=void 0,this._cache.targetScreenOffset=Ne.Zero()}_updateCache(e){e||super._updateCache(),this._cache._target.copyFrom(this._getTargetPosition()),this._cache.alpha=this.alpha,this._cache.beta=this.beta,this._cache.radius=this.radius,this._cache.targetScreenOffset.copyFrom(this.targetScreenOffset)}_getTargetPosition(){if(this._targetHost&&this._targetHost.getAbsolutePosition){let t=this._targetHost.getAbsolutePosition();this._targetBoundingCenter?t.addToRef(this._targetBoundingCenter,this._target):this._target.copyFrom(t)}let e=this._getLockedTargetPosition();return e||this._target}storeState(){return this._storedAlpha=this.alpha,this._storedBeta=this.beta,this._storedRadius=this.radius,this._storedTarget=this._getTargetPosition().clone(),this._storedTargetScreenOffset=this.targetScreenOffset.clone(),super.storeState()}_restoreStateValues(){return this.hasStateStored()&&this.restoreStateInterpolationFactor>Nt&&this.restoreStateInterpolationFactor<1?(this.interpolateTo(this._storedAlpha,this._storedBeta,this._storedRadius,this._storedTarget,this._storedTargetScreenOffset,this.restoreStateInterpolationFactor),!0):super._restoreStateValues()?(this.setTarget(this._storedTarget.clone()),this.alpha=this._storedAlpha,this.beta=this._storedBeta,this.radius=this._storedRadius,this.targetScreenOffset=this._storedTargetScreenOffset.clone(),this.inertialAlphaOffset=0,this.inertialBetaOffset=0,this.inertialRadiusOffset=0,this.inertialPanningX=0,this.inertialPanningY=0,!0):!1}stopInterpolation(){this._goalAlpha=NaN,this._goalBeta=NaN,this._goalRadius=NaN,this._goalTarget.set(NaN,NaN,NaN),this._goalTargetScreenOffset.set(NaN,NaN)}interpolateTo(e=this.alpha,t=this.beta,i=this.radius,r=this.target,s=this.targetScreenOffset,a){var o,l,c,f,h,d,u;this.inertialAlphaOffset=0,this.inertialBetaOffset=0,this.inertialRadiusOffset=0,this.inertialPanningX=0,this.inertialPanningY=0,a!=null?this._currentInterpolationFactor=a:this.restoreStateInterpolationFactor!==0?this._currentInterpolationFactor=this.restoreStateInterpolationFactor:this._currentInterpolationFactor=.1,this._goalAlpha=Ln(e,this._goalAlpha),this._goalBeta=Ln(t,this._goalBeta),this._goalRadius=Ln(i,this._goalRadius),this._goalTarget.set(Ln(r.x,this._goalTarget.x),Ln(r.y,this._goalTarget.y),Ln(r.z,this._goalTarget.z)),this._goalTargetScreenOffset.set(Ln(s.x,this._goalTargetScreenOffset.x),Ln(s.y,this._goalTargetScreenOffset.y)),this._goalAlpha=Ft(this._goalAlpha,(o=this.lowerAlphaLimit)!=null?o:-1/0,(l=this.upperAlphaLimit)!=null?l:1/0),this._goalBeta=Ft(this._goalBeta,(c=this.lowerBetaLimit)!=null?c:-1/0,(f=this.upperBetaLimit)!=null?f:1/0),this._goalRadius=Ft(this._goalRadius,(h=this.lowerRadiusLimit)!=null?h:-1/0,(d=this.upperRadiusLimit)!=null?d:1/0),this._goalTarget.y=Ft(this._goalTarget.y,(u=this.lowerTargetYLimit)!=null?u:-1/0,1/0),this._isInterpolating=!0}_isSynchronizedViewMatrix(){return super._isSynchronizedViewMatrix()?this._cache._target.equals(this._getTargetPosition())&&this._cache.alpha===this.alpha&&this._cache.beta===this.beta&&this._cache.radius===this.radius&&this._cache.targetScreenOffset.equals(this.targetScreenOffset):!1}attachControl(e,t,i=!0,r=2){let s=arguments;t=he.BackCompatCameraNoPreventDefault(s),this._useCtrlForPanning=i,this._panningMouseButton=r,typeof s[0]=="boolean"&&(s.length>1&&(this._useCtrlForPanning=s[1]),s.length>2&&(this._panningMouseButton=s[2])),this.inputs.attachElement(t),this._reset=()=>{this.inertialAlphaOffset=0,this.inertialBetaOffset=0,this.inertialRadiusOffset=0,this.inertialPanningX=0,this.inertialPanningY=0}}detachControl(){this.inputs.detachElement(),this._reset&&this._reset()}_checkInputs(){if(this._collisionTriggered)return;this.inputs.checkInputs();let e=!1;if(this.inertialAlphaOffset!==0||this.inertialBetaOffset!==0||this.inertialRadiusOffset!==0){e=!0;let t=this.invertRotation?-1:1,i=this._calculateHandednessMultiplier(),r=this.inertialAlphaOffset*i;this.beta<0&&(r*=-1),this.alpha+=r*t,this.beta+=this.inertialBetaOffset*t,this.radius-=this.inertialRadiusOffset,this.inertialAlphaOffset*=this.inertia,this.inertialBetaOffset*=this.inertia,this.inertialRadiusOffset*=this.inertia,Math.abs(this.inertialAlphaOffset)Math.PI&&(this.beta=this.beta-2*Math.PI):this.betathis.upperBetaLimit&&(this.beta=this.upperBetaLimit),this.lowerAlphaLimit!==null&&this.alphathis.upperAlphaLimit&&(this.alpha=this.upperAlphaLimit),this.lowerRadiusLimit!==null&&this.radiusthis.upperRadiusLimit&&(this.radius=this.upperRadiusLimit,this.inertialRadiusOffset=0),this.target.y=Math.max(this.target.y,this.lowerTargetYLimit)}rebuildAnglesAndRadius(){this._position.subtractToRef(this._getTargetPosition(),this._computationVector),(this._upVector.x!==0||this._upVector.y!==1||this._upVector.z!==0)&&b.TransformCoordinatesToRef(this._computationVector,this._upToYMatrix,this._computationVector),this.radius=this._computationVector.length(),this.radius===0&&(this.radius=1e-4);let e=this.alpha;this.alpha=nne(this._computationVector),this.beta=sne(this._computationVector.y,this.radius);let t=Math.round((e-this.alpha)/(2*Math.PI));this.alpha+=t*2*Math.PI,this._checkLimits()}setPosition(e){this._position.equals(e)||(this._position.copyFrom(e),this.rebuildAnglesAndRadius())}setTarget(e,t=!1,i=!1,r=!1){var s;if(r=(s=this.overrideCloneAlphaBetaRadius)!=null?s:r,e.computeWorldMatrix)t&&e.getBoundingInfo?this._targetBoundingCenter=e.getBoundingInfo().boundingBox.centerWorld.clone():this._targetBoundingCenter=null,e.computeWorldMatrix(),this._targetHost=e,this._target=this._getTargetPosition(),this.onMeshTargetChangedObservable.notifyObservers(this._targetHost);else{let a=e,o=this._getTargetPosition();if(o&&!i&&o.equals(a))return;this._targetHost=null,this._target=a,this._targetBoundingCenter=null,this.onMeshTargetChangedObservable.notifyObservers(null)}r||this.rebuildAnglesAndRadius()}_getViewMatrix(){let e=Math.cos(this.alpha),t=Math.sin(this.alpha),i=Math.cos(this.beta),r=Math.sin(this.beta);r===0&&(r=1e-4),this.radius===0&&(this.radius=1e-4);let s=this._getTargetPosition();if(this._computationVector.copyFromFloats(this.radius*e*r,this.radius*i,this.radius*t*r),(this._upVector.x!==0||this._upVector.y!==1||this._upVector.z!==0)&&b.TransformCoordinatesToRef(this._computationVector,this._yToUpMatrix,this._computationVector),s.addToRef(this._computationVector,this._newPosition),this.getScene().collisionsEnabled&&this.checkCollisions){let a=this.getScene().collisionCoordinator;this._collider||(this._collider=a.createCollider()),this._collider._radius=this.collisionRadius,this._newPosition.subtractToRef(this._position,this._collisionVelocity),this._collisionTriggered=!0,a.getNewPosition(this._position,this._collisionVelocity,this._collider,3,null,this._onCollisionPositionChange,this.uniqueId)}else{this._position.copyFrom(this._newPosition);let a=this.upVector;this.allowUpsideDown&&r<0&&(a=a.negate()),this._computeViewMatrix(this._position,s,a),this._viewMatrix.addAtIndex(12,this.targetScreenOffset.x),this._viewMatrix.addAtIndex(13,this.targetScreenOffset.y)}return this._currentTarget.copyFrom(s),this._viewMatrix}zoomOn(e,t=!1){e=e||this.getScene().meshes;let i=q.MinMax(e),r=this._calculateLowerRadiusFromModelBoundingSphere(i.min,i.max);if(r=Math.max(Math.min(r,this.upperRadiusLimit||Number.MAX_VALUE),this.lowerRadiusLimit||0),this.radius=r*this.zoomOnFactor,this.mode===ut.ORTHOGRAPHIC_CAMERA){let s=this.getScene().getEngine().getAspectRatio(this),a=r*this.zoomOnFactor/2;this.orthoLeft=-a*s,this.orthoRight=a*s,this.orthoBottom=-a,this.orthoTop=a}this.focusOn({min:i.min,max:i.max,distance:r},t)}focusOn(e,t=!1){let i,r;if(e.min===void 0){let s=e||this.getScene().meshes;i=q.MinMax(s),r=b.Distance(i.min,i.max)}else{let s=e;i=s,r=s.distance}this._target=q.Center(i),t||(this.maxZ=r*2)}createRigCamera(e,t){let i=0;switch(this.cameraRigMode){case ut.RIG_MODE_STEREOSCOPIC_ANAGLYPH:case ut.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL:case ut.RIG_MODE_STEREOSCOPIC_OVERUNDER:case ut.RIG_MODE_STEREOSCOPIC_INTERLACED:case ut.RIG_MODE_VR:i=this._cameraRigParams.stereoHalfAngle*(t===0?1:-1);break;case ut.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED:i=this._cameraRigParams.stereoHalfAngle*(t===0?-1:1);break}let r=new n(e,this.alpha+i,this.beta,this.radius,this._target,this.getScene());return r._cameraRigParams={},r.isRigCamera=!0,r.rigParent=this,r.upVector=this.upVector,r.mode=this.mode,r.orthoLeft=this.orthoLeft,r.orthoRight=this.orthoRight,r.orthoBottom=this.orthoBottom,r.orthoTop=this.orthoTop,r}_updateRigCameras(){let e=this._rigCameras[0],t=this._rigCameras[1];switch(e.beta=t.beta=this.beta,this.cameraRigMode){case ut.RIG_MODE_STEREOSCOPIC_ANAGLYPH:case ut.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL:case ut.RIG_MODE_STEREOSCOPIC_OVERUNDER:case ut.RIG_MODE_STEREOSCOPIC_INTERLACED:case ut.RIG_MODE_VR:e.alpha=this.alpha-this._cameraRigParams.stereoHalfAngle,t.alpha=this.alpha+this._cameraRigParams.stereoHalfAngle;break;case ut.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED:e.alpha=this.alpha+this._cameraRigParams.stereoHalfAngle,t.alpha=this.alpha-this._cameraRigParams.stereoHalfAngle;break}super._updateRigCameras()}_calculateLowerRadiusFromModelBoundingSphere(e,t,i=1){let r=b.Distance(e,t),a=this.getScene().getEngine().getAspectRatio(this),o=Math.tan(this.fov/2),l=o*a,f=r*.5*i,h=f*Math.sqrt(1+1/(l*l)),d=f*Math.sqrt(1+1/(o*o));return Math.max(h,d)}dispose(){this.inputs.clear(),super.dispose()}getClassName(){return"ArcRotateCamera"}};P([F()],gi.prototype,"alpha",void 0);P([F()],gi.prototype,"beta",void 0);P([F()],gi.prototype,"radius",void 0);P([F()],gi.prototype,"overrideCloneAlphaBetaRadius",void 0);P([Vr("target")],gi.prototype,"_target",void 0);P([sT("targetHost")],gi.prototype,"_targetHost",void 0);P([F()],gi.prototype,"inertialAlphaOffset",void 0);P([F()],gi.prototype,"inertialBetaOffset",void 0);P([F()],gi.prototype,"inertialRadiusOffset",void 0);P([F()],gi.prototype,"lowerAlphaLimit",void 0);P([F()],gi.prototype,"upperAlphaLimit",void 0);P([F()],gi.prototype,"lowerBetaLimit",void 0);P([F()],gi.prototype,"upperBetaLimit",void 0);P([F()],gi.prototype,"lowerRadiusLimit",void 0);P([F()],gi.prototype,"upperRadiusLimit",void 0);P([F()],gi.prototype,"lowerTargetYLimit",void 0);P([F()],gi.prototype,"inertialPanningX",void 0);P([F()],gi.prototype,"inertialPanningY",void 0);P([F()],gi.prototype,"pinchToPanMaxDistance",void 0);P([F()],gi.prototype,"panningDistanceLimit",void 0);P([Vr()],gi.prototype,"panningOriginTarget",void 0);P([F()],gi.prototype,"panningInertia",void 0);P([F()],gi.prototype,"zoomToMouseLocation",null);P([F()],gi.prototype,"zoomOnFactor",void 0);P([wu()],gi.prototype,"targetScreenOffset",void 0);P([F()],gi.prototype,"allowUpsideDown",void 0);P([F()],gi.prototype,"useInputToRestoreState",void 0);P([F()],gi.prototype,"restoreStateInterpolationFactor",void 0);wt("BABYLON.ArcRotateCamera",gi)});var Xt,Ef=C(()=>{kt();Ut();Ve();Ht();Hs();nf();Vi();v_();_r();Xt=class n extends _i{get range(){return this._range}set range(e){this._range=e,this._inverseSquaredRange=1/(this.range*this.range)}get intensityMode(){return this._intensityMode}set intensityMode(e){this._intensityMode=e,this._computePhotometricScale()}get radius(){return this._radius}set radius(e){this._radius=e,this._computePhotometricScale()}get shadowEnabled(){return this._shadowEnabled}set shadowEnabled(e){this._shadowEnabled!==e&&(this._shadowEnabled=e,this._markMeshesAsLightDirty())}get includedOnlyMeshes(){return this._includedOnlyMeshes}set includedOnlyMeshes(e){this._includedOnlyMeshes=e,this._hookArrayForIncludedOnly(e)}get excludedMeshes(){return this._excludedMeshes}set excludedMeshes(e){this._excludedMeshes=e,this._hookArrayForExcluded(e)}get excludeWithLayerMask(){return this._excludeWithLayerMask}set excludeWithLayerMask(e){this._excludeWithLayerMask=e,this._resyncMeshes()}get includeOnlyWithLayerMask(){return this._includeOnlyWithLayerMask}set includeOnlyWithLayerMask(e){this._includeOnlyWithLayerMask=e,this._resyncMeshes()}get lightmapMode(){return this._lightmapMode}set lightmapMode(e){this._lightmapMode!==e&&(this._lightmapMode=e,this._markMeshesAsLightDirty())}getViewMatrix(e){return null}getProjectionMatrix(e,t){return null}constructor(e,t,i){super(e,t,!1),this.diffuse=new Te(1,1,1),this.specular=new Te(1,1,1),this.falloffType=n.FALLOFF_DEFAULT,this.intensity=1,this._range=Number.MAX_VALUE,this._inverseSquaredRange=0,this._photometricScale=1,this._intensityMode=n.INTENSITYMODE_AUTOMATIC,this._radius=1e-5,this.renderPriority=0,this._shadowEnabled=!0,this._excludeWithLayerMask=0,this._includeOnlyWithLayerMask=0,this._lightmapMode=0,this._shadowGenerators=null,this._excludedMeshesIds=new Array,this._includedOnlyMeshesIds=new Array,this._currentViewDepth=0,this._clusteredContainer=null,this._isLight=!0,i||this.getScene().addLight(this),this._uniformBuffer=new or(this.getScene().getEngine(),void 0,void 0,e),this._buildUniformLayout(),this.includedOnlyMeshes=[],this.excludedMeshes=[],i||this._resyncMeshes()}transferTexturesToEffect(e,t){return this}_bindLight(e,t,i,r,s=!0){var l;let a=e.toString(),o=!1;if(this._uniformBuffer.bindToEffect(i,"Light"+a),this._renderId!==t.getRenderId()||this._lastUseSpecular!==r||!this._uniformBuffer.useUbo){this._renderId=t.getRenderId(),this._lastUseSpecular=r;let c=this.getScaledIntensity();this.transferToEffect(i,a),this.diffuse.scaleToRef(c,un.Color3[0]),this._uniformBuffer.updateColor4("vLightDiffuse",un.Color3[0],this.range,a),r&&(this.specular.scaleToRef(c,un.Color3[1]),this._uniformBuffer.updateColor4("vLightSpecular",un.Color3[1],this.radius,a)),o=!0}if(this.transferTexturesToEffect(i,a),t.shadowsEnabled&&this.shadowEnabled&&s){let c=(l=this.getShadowGenerator(t.activeCamera))!=null?l:this.getShadowGenerator();c&&(c.bindShadowLight(a,i),o=!0)}o?this._uniformBuffer.update():this._uniformBuffer.bindUniformBuffer()}getClassName(){return"Light"}toString(e){let t="Name: "+this.name;if(t+=", type: "+["Point","Directional","Spot","Hemispheric","Clustered"][this.getTypeID()],this.animations)for(let i=0;i0&&this.includedOnlyMeshes.indexOf(e)===-1||this.excludedMeshes&&this.excludedMeshes.length>0&&this.excludedMeshes.indexOf(e)!==-1||this.includeOnlyWithLayerMask!==0&&(this.includeOnlyWithLayerMask&e.layerMask)===0||this.excludeWithLayerMask!==0&&this.excludeWithLayerMask&e.layerMask):!0}dispose(e,t=!1){if(this._shadowGenerators){let i=this._shadowGenerators.values();for(let r=i.next();r.done!==!0;r=i.next())r.value.dispose();this._shadowGenerators=null}if(this.getScene().stopAnimation(this),this._parentContainer){let i=this._parentContainer.lights.indexOf(this);i>-1&&this._parentContainer.lights.splice(i,1),this._parentContainer=null}for(let i of this.getScene().meshes)i._removeLightSource(this,!0);this._uniformBuffer.dispose(),this.getScene().removeLight(this),super.dispose(e,t)}getTypeID(){return 0}getScaledIntensity(){return this._photometricScale*this.intensity}clone(e,t=null){let i=n.GetConstructorFromName(this.getTypeID(),e,this.getScene());if(!i)return null;let r=tt.Clone(i,this);return e&&(r.name=e),t&&(r.parent=t),r.setEnabled(this.isEnabled()),this.onClonedObservable.notifyObservers(r),r}serialize(){let e=tt.Serialize(this);if(e.uniqueId=this.uniqueId,e.type=this.getTypeID(),this.parent&&this.parent._serializeAsParent(e),this.excludedMeshes.length>0){e.excludedMeshesIds=[];for(let t of this.excludedMeshes)e.excludedMeshesIds.push(t.id)}if(this.includedOnlyMeshes.length>0){e.includedOnlyMeshesIds=[];for(let t of this.includedOnlyMeshes)e.includedOnlyMeshesIds.push(t.id)}return tt.AppendSerializedAnimations(this,e),e.ranges=this.serializeAnimationRanges(),e.isEnabled=this.isEnabled(),e}static GetConstructorFromName(e,t,i){let r=_i.Construct("Light_Type_"+e,t,i);return r||null}static Parse(e,t){let i=n.GetConstructorFromName(e.type,e.name,t);if(!i)return null;let r=tt.Parse(i,e,t);if(e.excludedMeshesIds&&(r._excludedMeshesIds=e.excludedMeshesIds),e.includedOnlyMeshesIds&&(r._includedOnlyMeshesIds=e.includedOnlyMeshesIds),e.parentId!==void 0&&(r._waitingParentId=e.parentId),e.parentInstanceIndex!==void 0&&(r._waitingParentInstanceIndex=e.parentInstanceIndex),e.falloffType!==void 0&&(r.falloffType=e.falloffType),e.lightmapMode!==void 0&&(r.lightmapMode=e.lightmapMode),e.animations){for(let s=0;s{let s=t.apply(e,r);if(this._clusteredContainer)return s;for(let a of r)a._resyncLightSource(this);return s};let i=e.splice;if(e.splice=(r,s)=>{let a=i.call(e,r,s!=null?s:e.length);if(this._clusteredContainer)return a;for(let o of a)o._resyncLightSource(this);return a},!this._clusteredContainer)for(let r of e)r._resyncLightSource(this)}_hookArrayForIncludedOnly(e){let t=e.push;e.push=(...r)=>{let s=t.apply(e,r);return this._resyncMeshes(),s};let i=e.splice;e.splice=(r,s)=>{let a=i.call(e,r,s!=null?s:e.length);return this._resyncMeshes(),a},this._resyncMeshes()}_resyncMeshes(){if(!this._clusteredContainer)for(let e of this.getScene().meshes)e._resyncLightSource(this)}_markMeshesAsLightDirty(){for(let e of this.getScene().meshes)e.lightSources.indexOf(this)!==-1&&e._markSubMeshesAsLightDirty()}_computePhotometricScale(){this._photometricScale=this._getPhotometricScale(),this.getScene().resetCachedMaterial()}_getPhotometricScale(){let e=0,t=this.getTypeID(),i=this.intensityMode;switch(i===n.INTENSITYMODE_AUTOMATIC&&(t===n.LIGHTTYPEID_DIRECTIONALLIGHT?i=n.INTENSITYMODE_ILLUMINANCE:i=n.INTENSITYMODE_LUMINOUSINTENSITY),t){case n.LIGHTTYPEID_POINTLIGHT:case n.LIGHTTYPEID_SPOTLIGHT:switch(i){case n.INTENSITYMODE_LUMINOUSPOWER:e=1/(4*Math.PI);break;case n.INTENSITYMODE_LUMINOUSINTENSITY:e=1;break;case n.INTENSITYMODE_LUMINANCE:e=this.radius*this.radius;break}break;case n.LIGHTTYPEID_DIRECTIONALLIGHT:switch(i){case n.INTENSITYMODE_ILLUMINANCE:e=1;break;case n.INTENSITYMODE_LUMINANCE:{let r=this.radius;r=Math.max(r,.001),e=2*Math.PI*(1-Math.cos(r));break}}break;case n.LIGHTTYPEID_HEMISPHERICLIGHT:e=1;break}return e}_reorderLightsInScene(){let e=this.getScene();this._renderPriority!=0&&(e.requireLightSorting=!0),this.getScene().sortLightsByPriority()}areLightTexturesReady(){return!0}_isReady(){return!0}};Xt.FALLOFF_DEFAULT=Yt.FALLOFF_DEFAULT;Xt.FALLOFF_PHYSICAL=Yt.FALLOFF_PHYSICAL;Xt.FALLOFF_GLTF=Yt.FALLOFF_GLTF;Xt.FALLOFF_STANDARD=Yt.FALLOFF_STANDARD;Xt.LIGHTMAP_DEFAULT=Yt.LIGHTMAP_DEFAULT;Xt.LIGHTMAP_SPECULAR=Yt.LIGHTMAP_SPECULAR;Xt.LIGHTMAP_SHADOWSONLY=Yt.LIGHTMAP_SHADOWSONLY;Xt.INTENSITYMODE_AUTOMATIC=Yt.INTENSITYMODE_AUTOMATIC;Xt.INTENSITYMODE_LUMINOUSPOWER=Yt.INTENSITYMODE_LUMINOUSPOWER;Xt.INTENSITYMODE_LUMINOUSINTENSITY=Yt.INTENSITYMODE_LUMINOUSINTENSITY;Xt.INTENSITYMODE_ILLUMINANCE=Yt.INTENSITYMODE_ILLUMINANCE;Xt.INTENSITYMODE_LUMINANCE=Yt.INTENSITYMODE_LUMINANCE;Xt.LIGHTTYPEID_POINTLIGHT=Yt.LIGHTTYPEID_POINTLIGHT;Xt.LIGHTTYPEID_DIRECTIONALLIGHT=Yt.LIGHTTYPEID_DIRECTIONALLIGHT;Xt.LIGHTTYPEID_SPOTLIGHT=Yt.LIGHTTYPEID_SPOTLIGHT;Xt.LIGHTTYPEID_HEMISPHERICLIGHT=Yt.LIGHTTYPEID_HEMISPHERICLIGHT;Xt.LIGHTTYPEID_RECT_AREALIGHT=Yt.LIGHTTYPEID_RECT_AREALIGHT;P([dr()],Xt.prototype,"diffuse",void 0);P([dr()],Xt.prototype,"specular",void 0);P([F()],Xt.prototype,"falloffType",void 0);P([F()],Xt.prototype,"intensity",void 0);P([F()],Xt.prototype,"range",null);P([F()],Xt.prototype,"intensityMode",null);P([F()],Xt.prototype,"radius",null);P([F()],Xt.prototype,"_renderPriority",void 0);P([oe("_reorderLightsInScene")],Xt.prototype,"renderPriority",void 0);P([F("shadowEnabled")],Xt.prototype,"_shadowEnabled",void 0);P([F("excludeWithLayerMask")],Xt.prototype,"_excludeWithLayerMask",void 0);P([F("includeOnlyWithLayerMask")],Xt.prototype,"_includeOnlyWithLayerMask",void 0);P([F("lightmapMode")],Xt.prototype,"_lightmapMode",void 0)});var Xs,sA=C(()=>{kt();Ut();Ve();Ht();Hs();Ef();Vi();_i.AddNodeConstructor("Light_Type_3",(n,e)=>()=>new Xs(n,b.Zero(),e));Xs=class extends Xt{constructor(e,t,i,r){super(e,i,r),this.groundColor=new Te(0,0,0),this.direction=t||b.Up()}_buildUniformLayout(){this._uniformBuffer.addUniform("vLightData",4),this._uniformBuffer.addUniform("vLightDiffuse",4),this._uniformBuffer.addUniform("vLightSpecular",4),this._uniformBuffer.addUniform("vLightGround",3),this._uniformBuffer.addUniform("shadowsInfo",3),this._uniformBuffer.addUniform("depthValues",2),this._uniformBuffer.create()}getClassName(){return"HemisphericLight"}setDirectionToTarget(e){return this.direction=b.Normalize(e.subtract(b.Zero())),this.direction}getShadowGenerator(){return null}transferToEffect(e,t){let i=b.Normalize(this.direction);return this._uniformBuffer.updateFloat4("vLightData",i.x,i.y,i.z,0,t),this._uniformBuffer.updateColor3("vLightGround",this.groundColor.scale(this.intensity),t),this}transferToNodeMaterialEffect(e,t){let i=b.Normalize(this.direction);return e.setFloat3(t,i.x,i.y,i.z),this}computeWorldMatrix(){return this._worldMatrix||(this._worldMatrix=K.Identity()),this._worldMatrix}getTypeID(){return Xt.LIGHTTYPEID_HEMISPHERICLIGHT}prepareLightSpecificDefines(e,t){e["HEMILIGHT"+t]=!0}};P([dr()],Xs.prototype,"groundColor",void 0);P([Vr()],Xs.prototype,"direction",void 0);wt("BABYLON.HemisphericLight",Xs)});var Ra,aA=C(()=>{kt();Ut();Ve();Ef();Iu();Ra=class extends Xt{constructor(){super(...arguments),this._needProjectionMatrixCompute=!0,this._viewMatrix=K.Identity(),this._projectionMatrix=K.Identity()}_setPosition(e){this._position=e}get position(){return this._position}set position(e){this._setPosition(e)}_setDirection(e){this._direction=e}get direction(){return this._direction}set direction(e){this._setDirection(e)}get shadowMinZ(){return this._shadowMinZ}set shadowMinZ(e){this._shadowMinZ=e,this.forceProjectionMatrixCompute()}get shadowMaxZ(){return this._shadowMaxZ}set shadowMaxZ(e){this._shadowMaxZ=e,this.forceProjectionMatrixCompute()}computeTransformedInformation(){return this.parent&&this.parent.getWorldMatrix?(this.transformedPosition||(this.transformedPosition=b.Zero()),b.TransformCoordinatesToRef(this.position,this.parent.getWorldMatrix(),this.transformedPosition),this.direction&&(this.transformedDirection||(this.transformedDirection=b.Zero()),b.TransformNormalToRef(this.direction,this.parent.getWorldMatrix(),this.transformedDirection)),!0):!1}getDepthScale(){return 50}getShadowDirection(e){return this.transformedDirection?this.transformedDirection:this.direction}getAbsolutePosition(){return this.transformedPosition?this.transformedPosition:this.position}setDirectionToTarget(e){return this.direction=b.Normalize(e.subtract(this.position)),this.direction}getRotation(){this.direction.normalize();let e=b.Cross(this.direction,ds.Y),t=b.Cross(e,this.direction);return b.RotationFromAxis(e,t,this.direction)}needCube(){return!1}needProjectionMatrixCompute(){return this._needProjectionMatrixCompute}forceProjectionMatrixCompute(){this._needProjectionMatrixCompute=!0}_initCache(){super._initCache(),this._cache.position=b.Zero()}_isSynchronized(){return!!this._cache.position.equals(this.position)}computeWorldMatrix(e){return!e&&this.isSynchronized()?(this._currentRenderId=this.getScene().getRenderId(),this._worldMatrix):(this._updateCache(),this._cache.position.copyFrom(this.position),this._worldMatrix||(this._worldMatrix=K.Identity()),K.TranslationToRef(this.position.x,this.position.y,this.position.z,this._worldMatrix),this.parent&&this.parent.getWorldMatrix&&(this._worldMatrix.multiplyToRef(this.parent.getWorldMatrix(),this._worldMatrix),this._markSyncedWithParent()),this._worldMatrixDeterminantIsDirty=!0,this._worldMatrix)}getDepthMinZ(e){return this.shadowMinZ!==void 0?this.shadowMinZ:(e==null?void 0:e.minZ)||0}getDepthMaxZ(e){return this.shadowMaxZ!==void 0?this.shadowMaxZ:(e==null?void 0:e.maxZ)||1e4}setShadowProjectionMatrix(e,t,i){return this.customProjectionMatrixBuilder?this.customProjectionMatrixBuilder(t,i,e):this._setDefaultShadowProjectionMatrix(e,t,i),this}_syncParentEnabledState(){super._syncParentEnabledState(),(!this.parent||!this.parent.getWorldMatrix)&&(this.transformedPosition=null,this.transformedDirection=null)}getViewMatrix(e){let t=Z.Vector3[0],i=this.position;this.computeTransformedInformation()&&(i=this.transformedPosition),b.NormalizeToRef(this.getShadowDirection(e),t),Math.abs(b.Dot(t,b.Up()))===1&&(t.z=1e-13);let r=Z.Vector3[1];return i.addToRef(t,r),K.LookAtLHToRef(i,r,b.Up(),this._viewMatrix),this._viewMatrix}getProjectionMatrix(e,t){return this.setShadowProjectionMatrix(this._projectionMatrix,e!=null?e:this._viewMatrix,t!=null?t:[]),this._projectionMatrix}};P([Vr()],Ra.prototype,"position",null);P([Vr()],Ra.prototype,"direction",null);P([F()],Ra.prototype,"shadowMinZ",null);P([F()],Ra.prototype,"shadowMaxZ",null)});var Ss,DV=C(()=>{kt();Ut();Ve();Hs();Ef();aA();Vi();_i.AddNodeConstructor("Light_Type_1",(n,e)=>()=>new Ss(n,b.Zero(),e));Ss=class extends Ra{get shadowFrustumSize(){return this._shadowFrustumSize}set shadowFrustumSize(e){this._shadowFrustumSize=e,this.forceProjectionMatrixCompute()}get shadowOrthoScale(){return this._shadowOrthoScale}set shadowOrthoScale(e){this._shadowOrthoScale=e,this.forceProjectionMatrixCompute()}get orthoLeft(){return this._orthoLeft}set orthoLeft(e){this._orthoLeft=e}get orthoRight(){return this._orthoRight}set orthoRight(e){this._orthoRight=e}get orthoTop(){return this._orthoTop}set orthoTop(e){this._orthoTop=e}get orthoBottom(){return this._orthoBottom}set orthoBottom(e){this._orthoBottom=e}constructor(e,t,i,r){super(e,i,r),this._shadowFrustumSize=0,this._shadowOrthoScale=.1,this.autoUpdateExtends=!0,this.autoCalcShadowZBounds=!1,this._orthoLeft=Number.MAX_VALUE,this._orthoRight=Number.MIN_VALUE,this._orthoTop=Number.MIN_VALUE,this._orthoBottom=Number.MAX_VALUE,this.position=t.scale(-1),this.direction=t}getClassName(){return"DirectionalLight"}getTypeID(){return Xt.LIGHTTYPEID_DIRECTIONALLIGHT}_setDefaultShadowProjectionMatrix(e,t,i){this.shadowFrustumSize>0?this._setDefaultFixedFrustumShadowProjectionMatrix(e):this._setDefaultAutoExtendShadowProjectionMatrix(e,t,i)}_setDefaultFixedFrustumShadowProjectionMatrix(e){let t=this.getScene().activeCamera;K.OrthoLHToRef(this.shadowFrustumSize,this.shadowFrustumSize,this.shadowMinZ!==void 0?this.shadowMinZ:t?t.minZ:0,this.shadowMaxZ!==void 0?this.shadowMaxZ:t?t.maxZ:1e4,e,this.getScene().getEngine().isNDCHalfZRange)}_setDefaultAutoExtendShadowProjectionMatrix(e,t,i){let r=this.getScene().activeCamera;if(this.autoUpdateExtends||this._orthoLeft===Number.MAX_VALUE){let f=b.Zero();this._orthoLeft=Number.MAX_VALUE,this._orthoRight=-Number.MAX_VALUE,this._orthoTop=-Number.MAX_VALUE,this._orthoBottom=Number.MAX_VALUE;let h=Number.MAX_VALUE,d=-Number.MAX_VALUE;for(let u=0;uthis._orthoRight&&(this._orthoRight=f.x),f.y>this._orthoTop&&(this._orthoTop=f.y),this.autoCalcShadowZBounds&&(f.zd&&(d=f.z))}this.autoCalcShadowZBounds&&(this._shadowMinZ=h,this._shadowMaxZ=d)}let s=this._orthoRight-this._orthoLeft,a=this._orthoTop-this._orthoBottom,o=this.shadowMinZ!==void 0?this.shadowMinZ:(r==null?void 0:r.minZ)||0,l=this.shadowMaxZ!==void 0?this.shadowMaxZ:(r==null?void 0:r.maxZ)||1e4,c=this.getScene().getEngine().useReverseDepthBuffer;K.OrthoOffCenterLHToRef(this._orthoLeft-s*this.shadowOrthoScale,this._orthoRight+s*this.shadowOrthoScale,this._orthoBottom-a*this.shadowOrthoScale,this._orthoTop+a*this.shadowOrthoScale,c?l:o,c?o:l,e,this.getScene().getEngine().isNDCHalfZRange)}_buildUniformLayout(){this._uniformBuffer.addUniform("vLightData",4),this._uniformBuffer.addUniform("vLightDiffuse",4),this._uniformBuffer.addUniform("vLightSpecular",4),this._uniformBuffer.addUniform("shadowsInfo",3),this._uniformBuffer.addUniform("depthValues",2),this._uniformBuffer.create()}transferToEffect(e,t){return this.computeTransformedInformation()?(this._uniformBuffer.updateFloat4("vLightData",this.transformedDirection.x,this.transformedDirection.y,this.transformedDirection.z,1,t),this):(this._uniformBuffer.updateFloat4("vLightData",this.direction.x,this.direction.y,this.direction.z,1,t),this)}transferToNodeMaterialEffect(e,t){return this.computeTransformedInformation()?(e.setFloat3(t,this.transformedDirection.x,this.transformedDirection.y,this.transformedDirection.z),this):(e.setFloat3(t,this.direction.x,this.direction.y,this.direction.z),this)}getDepthMinZ(e){let t=this._scene.getEngine();return!t.useReverseDepthBuffer&&t.isNDCHalfZRange?0:1}getDepthMaxZ(e){let t=this._scene.getEngine();return t.useReverseDepthBuffer&&t.isNDCHalfZRange?0:1}prepareLightSpecificDefines(e,t){e["DIRLIGHT"+t]=!0}};P([F()],Ss.prototype,"shadowFrustumSize",null);P([F()],Ss.prototype,"shadowOrthoScale",null);P([F()],Ss.prototype,"autoUpdateExtends",void 0);P([F()],Ss.prototype,"autoCalcShadowZBounds",void 0);P([F("orthoLeft")],Ss.prototype,"_orthoLeft",void 0);P([F("orthoRight")],Ss.prototype,"_orthoRight",void 0);P([F("orthoTop")],Ss.prototype,"_orthoTop",void 0);P([F("orthoBottom")],Ss.prototype,"_orthoBottom",void 0);wt("BABYLON.DirectionalLight",Ss)});var Sf,LV=C(()=>{kt();Ut();Ve();Hs();Ef();aA();Vi();_i.AddNodeConstructor("Light_Type_0",(n,e)=>()=>new Sf(n,b.Zero(),e));Sf=class extends Ra{get shadowAngle(){return this._shadowAngle}set shadowAngle(e){this._shadowAngle=e,this.forceProjectionMatrixCompute()}get direction(){return this._direction}set direction(e){let t=this.needCube();if(this._direction=e,this.needCube()!==t&&this._shadowGenerators){let i=this._shadowGenerators.values();for(let r=i.next();r.done!==!0;r=i.next())r.value.recreateShadowMap()}}constructor(e,t,i,r){super(e,i,r),this._shadowAngle=Math.PI/2,this.position=t}getClassName(){return"PointLight"}getTypeID(){return Xt.LIGHTTYPEID_POINTLIGHT}needCube(){return!this.direction}getShadowDirection(e){if(this.direction)return super.getShadowDirection(e);switch(e){case 0:return new b(1,0,0);case 1:return new b(-1,0,0);case 2:return new b(0,-1,0);case 3:return new b(0,1,0);case 4:return new b(0,0,1);case 5:return new b(0,0,-1)}return b.Zero()}_setDefaultShadowProjectionMatrix(e,t,i){let r=this.getScene().activeCamera,s=this.getDepthMinZ(r),a=this.getDepthMaxZ(r),o=this.getScene().getEngine().useReverseDepthBuffer;K.PerspectiveFovLHToRef(this.shadowAngle,1,o?a:s,o?s:a,e,!0,this._scene.getEngine().isNDCHalfZRange,void 0,o)}_buildUniformLayout(){this._uniformBuffer.addUniform("vLightData",4),this._uniformBuffer.addUniform("vLightDiffuse",4),this._uniformBuffer.addUniform("vLightSpecular",4),this._uniformBuffer.addUniform("vLightFalloff",4),this._uniformBuffer.addUniform("shadowsInfo",3),this._uniformBuffer.addUniform("depthValues",2),this._uniformBuffer.create()}transferToEffect(e,t){let i=this._scene.floatingOriginOffset;return this.computeTransformedInformation()?this._uniformBuffer.updateFloat4("vLightData",this.transformedPosition.x-i.x,this.transformedPosition.y-i.y,this.transformedPosition.z-i.z,0,t):this._uniformBuffer.updateFloat4("vLightData",this.position.x-i.x,this.position.y-i.y,this.position.z-i.z,0,t),this._uniformBuffer.updateFloat4("vLightFalloff",this.range,this._inverseSquaredRange,0,0,t),this}transferToNodeMaterialEffect(e,t){let i=this._scene.floatingOriginOffset;return this.computeTransformedInformation()?e.setFloat3(t,this.transformedPosition.x-i.x,this.transformedPosition.y-i.y,this.transformedPosition.z-i.z):e.setFloat3(t,this.position.x-i.x,this.position.y-i.y,this.position.z-i.z),this}prepareLightSpecificDefines(e,t){e["POINTLIGHT"+t]=!0}};P([F()],Sf.prototype,"shadowAngle",null);wt("BABYLON.PointLight",Sf)});var Nr,jC=C(()=>{kt();Ut();Ve();Hs();Ef();aA();Gr();Vi();_i.AddNodeConstructor("Light_Type_2",(n,e)=>()=>new Nr(n,b.Zero(),b.Zero(),0,0,e));Nr=class n extends Ra{get iesProfileTexture(){return this._iesProfileTexture}set iesProfileTexture(e){this._iesProfileTexture!==e&&(this._iesProfileTexture=e,this._iesProfileTexture&&n._IsTexture(this._iesProfileTexture)&&this._iesProfileTexture.onLoadObservable.addOnce(()=>{this._markMeshesAsLightDirty()}))}get angle(){return this._angle}set angle(e){this._angle=e,this._cosHalfAngle=Math.cos(e*.5),this._projectionTextureProjectionLightDirty=!0,this.forceProjectionMatrixCompute(),this._computeAngleValues()}get innerAngle(){return this._innerAngle}set innerAngle(e){this._innerAngle=e,this._computeAngleValues()}get shadowAngleScale(){return this._shadowAngleScale}set shadowAngleScale(e){this._shadowAngleScale=e,this.forceProjectionMatrixCompute()}get projectionTextureMatrix(){return this._projectionTextureMatrix}get projectionTextureLightNear(){return this._projectionTextureLightNear}set projectionTextureLightNear(e){this._projectionTextureLightNear=e,this._projectionTextureProjectionLightDirty=!0}get projectionTextureLightFar(){return this._projectionTextureLightFar}set projectionTextureLightFar(e){this._projectionTextureLightFar=e,this._projectionTextureProjectionLightDirty=!0}get projectionTextureUpDirection(){return this._projectionTextureUpDirection}set projectionTextureUpDirection(e){this._projectionTextureUpDirection=e,this._projectionTextureProjectionLightDirty=!0}get projectionTexture(){return this._projectionTexture}set projectionTexture(e){this._projectionTexture!==e&&(this._projectionTexture=e,this._projectionTextureDirty=!0,this._projectionTexture&&!this._projectionTexture.isReady()&&(n._IsProceduralTexture(this._projectionTexture)?this._projectionTexture.getEffect().executeWhenCompiled(()=>{this._markMeshesAsLightDirty()}):n._IsTexture(this._projectionTexture)&&this._projectionTexture.onLoadObservable.addOnce(()=>{this._markMeshesAsLightDirty()})))}static _IsProceduralTexture(e){return e.onGeneratedObservable!==void 0}static _IsTexture(e){return e.onLoadObservable!==void 0}get projectionTextureProjectionLightMatrix(){return this._projectionTextureProjectionLightMatrix}set projectionTextureProjectionLightMatrix(e){this._projectionTextureProjectionLightMatrix=e,this._projectionTextureProjectionLightDirty=!1,this._projectionTextureDirty=!0}constructor(e,t,i,r,s,a,o){super(e,a,o),this._innerAngle=0,this._iesProfileTexture=null,this._projectionTextureMatrix=K.Zero(),this._projectionTextureLightNear=1e-6,this._projectionTextureLightFar=1e3,this._projectionTextureUpDirection=b.Up(),this._projectionTextureViewLightDirty=!0,this._projectionTextureProjectionLightDirty=!0,this._projectionTextureDirty=!0,this._projectionTextureViewTargetVector=b.Zero(),this._projectionTextureViewLightMatrix=K.Zero(),this._projectionTextureProjectionLightMatrix=K.Zero(),this._projectionTextureScalingMatrix=K.FromValues(.5,0,0,0,0,.5,0,0,0,0,.5,0,.5,.5,.5,1),this.position=t,this.direction=i,this.angle=r,this.exponent=s}getClassName(){return"SpotLight"}getTypeID(){return Xt.LIGHTTYPEID_SPOTLIGHT}_setDirection(e){super._setDirection(e),this._projectionTextureViewLightDirty=!0}_setPosition(e){super._setPosition(e),this._projectionTextureViewLightDirty=!0}_setDefaultShadowProjectionMatrix(e,t,i){let r=this.getScene().activeCamera;if(!r)return;this._shadowAngleScale=this._shadowAngleScale||1;let s=this._shadowAngleScale*this._angle,a=this.shadowMinZ!==void 0?this.shadowMinZ:r.minZ,o=this.shadowMaxZ!==void 0?this.shadowMaxZ:r.maxZ,l=this.getScene().getEngine().useReverseDepthBuffer;K.PerspectiveFovLHToRef(s,1,l?o:a,l?a:o,e,!0,this._scene.getEngine().isNDCHalfZRange,void 0,l)}_computeProjectionTextureViewLightMatrix(){this._projectionTextureViewLightDirty=!1,this._projectionTextureDirty=!0,this.getAbsolutePosition().addToRef(this.getShadowDirection(),this._projectionTextureViewTargetVector),K.LookAtLHToRef(this.getAbsolutePosition(),this._projectionTextureViewTargetVector,this._projectionTextureUpDirection,this._projectionTextureViewLightMatrix)}_computeProjectionTextureProjectionLightMatrix(){this._projectionTextureProjectionLightDirty=!1,this._projectionTextureDirty=!0;let e=this.projectionTextureLightFar,t=this.projectionTextureLightNear,i=e/(e-t),r=-i*t,s=1/Math.tan(this._angle/2);K.FromValuesToRef(s/1,0,0,0,0,s,0,0,0,0,i,1,0,0,r,0,this._projectionTextureProjectionLightMatrix)}_computeProjectionTextureMatrix(){if(this._projectionTextureDirty=!1,this._projectionTextureViewLightMatrix.multiplyToRef(this._projectionTextureProjectionLightMatrix,this._projectionTextureMatrix),this._projectionTexture instanceof ge){let e=this._projectionTexture.uScale/2,t=this._projectionTexture.vScale/2;K.FromValuesToRef(e,0,0,0,0,t,0,0,0,0,.5,0,.5,.5,.5,1,this._projectionTextureScalingMatrix)}this._projectionTextureMatrix.multiplyToRef(this._projectionTextureScalingMatrix,this._projectionTextureMatrix)}_buildUniformLayout(){this._uniformBuffer.addUniform("vLightData",4),this._uniformBuffer.addUniform("vLightDiffuse",4),this._uniformBuffer.addUniform("vLightSpecular",4),this._uniformBuffer.addUniform("vLightDirection",3),this._uniformBuffer.addUniform("vLightFalloff",4),this._uniformBuffer.addUniform("shadowsInfo",3),this._uniformBuffer.addUniform("depthValues",2),this._uniformBuffer.create()}_computeAngleValues(){this._lightAngleScale=1/Math.max(.001,Math.cos(this._innerAngle*.5)-this._cosHalfAngle),this._lightAngleOffset=-this._cosHalfAngle*this._lightAngleScale}transferTexturesToEffect(e,t){return this.projectionTexture&&this.projectionTexture.isReady()&&(this._projectionTextureViewLightDirty&&this._computeProjectionTextureViewLightMatrix(),this._projectionTextureProjectionLightDirty&&this._computeProjectionTextureProjectionLightMatrix(),this._projectionTextureDirty&&this._computeProjectionTextureMatrix(),e.setMatrix("textureProjectionMatrix"+t,this._projectionTextureMatrix),e.setTexture("projectionLightTexture"+t,this.projectionTexture)),this._iesProfileTexture&&this._iesProfileTexture.isReady()&&e.setTexture("iesLightTexture"+t,this._iesProfileTexture),this}transferToEffect(e,t){let i,r=this._scene.floatingOriginOffset;return this.computeTransformedInformation()?(this._uniformBuffer.updateFloat4("vLightData",this.transformedPosition.x-r.x,this.transformedPosition.y-r.y,this.transformedPosition.z-r.z,this.exponent,t),i=b.Normalize(this.transformedDirection)):(this._uniformBuffer.updateFloat4("vLightData",this.position.x-r.x,this.position.y-r.y,this.position.z-r.z,this.exponent,t),i=b.Normalize(this.direction)),this._uniformBuffer.updateFloat4("vLightDirection",i.x,i.y,i.z,this._cosHalfAngle,t),this._uniformBuffer.updateFloat4("vLightFalloff",this.range,this._inverseSquaredRange,this._lightAngleScale,this._lightAngleOffset,t),this}transferToNodeMaterialEffect(e,t){let i;return this.computeTransformedInformation()?i=b.Normalize(this.transformedDirection):i=b.Normalize(this.direction),this.getScene().useRightHandedSystem?e.setFloat3(t,-i.x,-i.y,-i.z):e.setFloat3(t,i.x,i.y,i.z),this}dispose(){super.dispose(),this._projectionTexture&&this._projectionTexture.dispose(),this._iesProfileTexture&&(this._iesProfileTexture.dispose(),this._iesProfileTexture=null)}getDepthMinZ(e){var r;let t=this._scene.getEngine(),i=this.shadowMinZ!==void 0?this.shadowMinZ:(r=e==null?void 0:e.minZ)!=null?r:0;return t.useReverseDepthBuffer&&t.isNDCHalfZRange?i:this._scene.getEngine().isNDCHalfZRange?0:i}getDepthMaxZ(e){var r;let t=this._scene.getEngine(),i=this.shadowMaxZ!==void 0?this.shadowMaxZ:(r=e==null?void 0:e.maxZ)!=null?r:1e4;return t.useReverseDepthBuffer&&t.isNDCHalfZRange?0:i}areLightTexturesReady(){return!(this._projectionTexture&&!this._projectionTexture.isReadyOrNotBlocking()||this._iesProfileTexture&&!this._iesProfileTexture.isReadyOrNotBlocking())}prepareLightSpecificDefines(e,t){e["SPOTLIGHT"+t]=!0,e["PROJECTEDLIGHTTEXTURE"+t]=!!(this.projectionTexture&&this.projectionTexture.isReady()),e["IESLIGHTTEXTURE"+t]=!!(this._iesProfileTexture&&this._iesProfileTexture.isReady())}};P([F()],Nr.prototype,"angle",null);P([F()],Nr.prototype,"innerAngle",null);P([F()],Nr.prototype,"shadowAngleScale",null);P([F()],Nr.prototype,"exponent",void 0);P([F()],Nr.prototype,"projectionTextureLightNear",null);P([F()],Nr.prototype,"projectionTextureLightFar",null);P([F()],Nr.prototype,"projectionTextureUpDirection",null);P([Bt("projectedLightTexture")],Nr.prototype,"_projectionTexture",void 0);wt("BABYLON.SpotLight",Nr)});function OV(n){let e=n.pathArray,t=n.closeArray||!1,i=n.closePath||!1,r=n.invertUV||!1,s=Math.floor(e[0].length/2),a=n.offset||s;a=a>s?s:Math.floor(a);let o=n.sideOrientation===0?0:n.sideOrientation||Ie.DEFAULTSIDE,l=n.uvs,c=n.colors,f=[],h=[],d=[],u=[],m=[],_=[],p=[],g=[],v,x=[],A=[],E,T,R;if(e.length<2){let be=[],Ze=[];for(T=0;T0&&(V=D[R].subtract(D[R-1]).length(),N=V+p[E],m[E].push(N),p[E]=N),R++;i&&(R--,f.push(D[0].x,D[0].y,D[0].z),V=D[R].subtract(D[0]).length(),N=V+p[E],m[E].push(N),p[E]=N),x[E]=O+y,A[E]=I,I+=O+y}let w,U,G,J;for(T=0;T{let m=i[0].length,_=o,p=0,g=_._originalBuilderSideOrientation===q.DOUBLESIDE?2:1;for(let v=1;v<=g;++v)for(let x=0;x{Ve();Di();Ui();lr();Qr();Ie.CreateRibbon=OV;q.CreateRibbon=(n,e,t=!1,i,r,s,a=!1,o,l)=>fo(n,{pathArray:e,closeArray:t,closePath:i,offset:r,updatable:a,sideOrientation:o,instance:l},s)});function NV(n){let e=[],t=[],i=[],r=[],s=n.radius||.5,a=n.tessellation||64,o=n.arc&&(n.arc<=0||n.arc>1)?1:n.arc||1,l=n.sideOrientation===0?0:n.sideOrientation||Ie.DEFAULTSIDE;e.push(0,0,0),r.push(.5,.5);let c=Math.PI*2*o,f=o===1?c/a:c/(a-1),h=0;for(let m=0;m{Di();lr();Qr();Ie.CreateDisc=NV;q.CreateDisc=(n,e,t,i=null,r,s)=>qC(n,{radius:e,tessellation:t,sideOrientation:s,updatable:r},i)});var Tm,wV=C(()=>{Ve();Ui();Di();q._GroundMeshParser=(n,e)=>Tm.Parse(n,e);Tm=class n extends q{constructor(e,t){super(e,t),this.generateOctree=!1}getClassName(){return"GroundMesh"}get subdivisions(){return Math.min(this._subdivisionsX,this._subdivisionsY)}get subdivisionsX(){return this._subdivisionsX}get subdivisionsY(){return this._subdivisionsY}optimize(e,t=32){this._subdivisionsX=e,this._subdivisionsY=e,this.subdivide(e);let i=this;i.createOrUpdateSubmeshesOctree&&i.createOrUpdateSubmeshesOctree(t)}getHeightAtCoordinates(e,t){let i=this.getWorldMatrix(),r=Z.Matrix[5];i.invertToRef(r);let s=Z.Vector3[8];if(b.TransformCoordinatesFromFloatsToRef(e,0,t,r,s),e=s.x,t=s.z,e=this._maxX||t<=this._minZ||t>this._maxZ)return this.position.y;(!this._heightQuads||this._heightQuads.length==0)&&(this._initHeightQuads(),this._computeHeightQuads());let a=this._getFacetAt(e,t),o=-(a.x*e+a.z*t+a.w)/a.y;return b.TransformCoordinatesFromFloatsToRef(0,o,0,i,s),s.y}getNormalAtCoordinates(e,t){let i=new b(0,1,0);return this.getNormalAtCoordinatesToRef(e,t,i),i}getNormalAtCoordinatesToRef(e,t,i){let r=this.getWorldMatrix(),s=Z.Matrix[5];r.invertToRef(s);let a=Z.Vector3[8];if(b.TransformCoordinatesFromFloatsToRef(e,0,t,s,a),e=a.x,t=a.z,ethis._maxX||tthis._maxZ)return this;(!this._heightQuads||this._heightQuads.length==0)&&(this._initHeightQuads(),this._computeHeightQuads());let o=this._getFacetAt(e,t);return b.TransformNormalFromFloatsToRef(o.x,o.y,o.z,r,i),this}updateCoordinateHeights(){return(!this._heightQuads||this._heightQuads.length==0)&&this._initHeightQuads(),this._computeHeightQuads(),this}_getFacetAt(e,t){let i=Math.floor((e+this._maxX)*this._subdivisionsX/this._width),r=Math.floor(-(t+this._maxZ)*this._subdivisionsY/this._height+this._subdivisionsY),s=this._heightQuads[r*this._subdivisionsX+i],a;return tn.maxHeight){c=!0;let h=n.maxHeight;n.maxHeight=n.minHeight,n.minHeight=h}for(s=0;s<=n.subdivisions;s++)for(a=0;a<=n.subdivisions;a++){let h=new b(a*n.width/n.subdivisions-n.width/2,0,(n.subdivisions-s)*n.height/n.subdivisions-n.height/2),d=(h.x+n.width/2)/n.width*(n.bufferWidth-1)|0,u=(1-(h.z+n.height/2)/n.height)*(n.bufferHeight-1)|0,m=(d+u*n.bufferWidth)*4,_=n.buffer[m]/255,p=n.buffer[m+1]/255,g=n.buffer[m+2]/255,v=n.buffer[m+3]/255;c&&(_=1-_,p=1-p,g=1-g);let x=_*o.r+p*o.g+g*o.b;v>=l?h.y=n.minHeight+(n.maxHeight-n.minHeight)*x:h.y=n.minHeight-Nt,n.heightBuffer&&(n.heightBuffer[s*(n.subdivisions+1)+a]=h.y),t.push(h.x,h.y,h.z),i.push(0,0,0),r.push(a/n.subdivisions,1-s/n.subdivisions)}for(s=0;s=n.minHeight,p=t[d*3+1]>=n.minHeight,g=t[u*3+1]>=n.minHeight;_&&p&&g&&(e.push(h),e.push(d),e.push(u)),t[m*3+1]>=n.minHeight&&_&&g&&(e.push(m),e.push(h),e.push(u))}Ie.ComputeNormals(t,e,i);let f=new Ie;return f.indices=e,f.positions=t,f.normals=i,f.uvs=r,f}function QC(n,e={},t){let i=new Tm(n,t);return i._setReady(!1),i._subdivisionsX=e.subdivisionsX||e.subdivisions||1,i._subdivisionsY=e.subdivisionsY||e.subdivisions||1,i._width=e.width||1,i._height=e.height||1,i._maxX=i._width/2,i._maxZ=i._height/2,i._minX=-i._maxX,i._minZ=-i._maxZ,ZC(e).applyToMesh(i,e.updatable),i._setReady(!0),i}function JC(n,e,t=null){let i=new q(n,t);return BV(e).applyToMesh(i,e.updatable),i}function $C(n,e,t={},i=null){let r=t.width||10,s=t.height||10,a=t.subdivisions||1,o=t.minHeight||0,l=t.maxHeight||1,c=t.colorFilter||new Te(.3,.59,.11),f=t.alphaFilter||0,h=t.updatable,d=t.onReady;i=i||Le.LastCreatedScene;let u=new Tm(n,i);u._subdivisionsX=a,u._subdivisionsY=a,u._width=r,u._height=s,u._maxX=u._width/2,u._maxZ=u._height/2,u._minX=-u._maxX,u._minZ=-u._maxZ,u._setReady(!1);let m;t.passHeightBufferInCallback&&(m=new Float32Array((a+1)*(a+1)));let _=(p,g,v)=>{UV({width:r,height:s,subdivisions:a,minHeight:o,maxHeight:l,colorFilter:c,buffer:p,bufferWidth:g,bufferHeight:v,alphaFilter:f,heightBuffer:m}).applyToMesh(u,h),d&&d(u,m),u._setReady(!0)};if(typeof e=="string"){i.addPendingData(u);let p=v=>{let x=v.width,A=v.height;if(i.isDisposed){i.removePendingData(u);return}let E=i==null?void 0:i.getEngine().resizeImageBitmap(v,x,A);_(E,x,A),i.removePendingData(u)},g=(v,x)=>{i.removePendingData(u),t.onError&&t.onError(v,x)};he.LoadImage(e,p,g,i.offlineProvider)}else _(e.data,e.width,e.height);return u}var ey=C(()=>{Ve();Ht();Di();lr();wV();Ci();Pi();An();Qr();Ie.CreateGround=ZC;Ie.CreateTiledGround=BV;Ie.CreateGroundFromHeightMap=UV;q.CreateGround=(n,e,t,i,r,s)=>QC(n,{width:e,height:t,subdivisions:i,updatable:s},r);q.CreateTiledGround=(n,e,t,i,r,s,a,o,l)=>JC(n,{xmin:e,zmin:t,xmax:i,zmax:r,subdivisions:s,precision:a,updatable:l},o);q.CreateGroundFromHeightMap=(n,e,t,i,r,s,a,o,l,c,f)=>$C(n,e,{width:t,height:i,subdivisions:r,minHeight:s,maxHeight:a,updatable:l,onReady:c,alphaFilter:f},o)});function oA(n){let t=[0,1,2,0,2,3,4,5,6,4,6,7,8,9,10,8,10,11,12,13,14,12,14,15,16,17,18,16,18,19,20,21,22,20,22,23],i=[0,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0],r=[],s=n.width||n.size||1,a=n.height||n.size||1,o=n.depth||n.size||1,l=n.wrap||!1,c=n.topBaseAt===void 0?1:n.topBaseAt,f=n.bottomBaseAt===void 0?0:n.bottomBaseAt;c=(c+4)%4,f=(f+4)%4;let h=[2,0,3,1],d=[2,0,1,3],u=h[c],m=d[f],_=[1,-1,1,-1,-1,1,-1,1,1,1,1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1,1,1,-1,1,-1,-1,1,-1,1,1,1,1,-1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1,1,1,-1,1,-1,1,1,-1,1,1,1,1,-1,1,1,-1,-1,-1,-1,-1,-1,-1,1];if(l){t=[2,3,0,2,0,1,4,5,6,4,6,7,9,10,11,9,11,8,12,14,15,12,13,14],_=[-1,1,1,1,1,1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1,1,1,1,1,1,-1,1,-1,-1,1,-1,1,-1,1,-1,-1,1,1,-1,-1,1,-1,-1,-1];let R=[[1,1,1],[-1,1,1],[-1,1,-1],[1,1,-1]],I=[[-1,-1,1],[1,-1,1],[1,-1,-1],[-1,-1,-1]],y=[17,18,19,16],M=[22,23,20,21];for(;u>0;)R.unshift(R.pop()),y.unshift(y.pop()),u--;for(;m>0;)I.unshift(I.pop()),M.unshift(M.pop()),m--;R=R.flat(),I=I.flat(),_=_.concat(R).concat(I),t.push(y[0],y[2],y[3],y[0],y[1],y[2]),t.push(M[0],M[2],M[3],M[0],M[1],M[2])}let p=[s/2,a/2,o/2],g=_.reduce((R,I,y)=>R.concat(I*p[y%3]),[]),v=n.sideOrientation===0?0:n.sideOrientation||Ie.DEFAULTSIDE,x=n.faceUV||new Array(6),A=n.faceColors,E=[];for(let R=0;R<6;R++)x[R]===void 0&&(x[R]=new Mi(0,0,1,1)),A&&A[R]===void 0&&(A[R]=new lt(1,1,1,1));for(let R=0;R<6;R++)if(r.push(x[R].z,It?1-x[R].w:x[R].w),r.push(x[R].x,It?1-x[R].w:x[R].w),r.push(x[R].x,It?1-x[R].y:x[R].y),r.push(x[R].z,It?1-x[R].y:x[R].y),A)for(let I=0;I<4;I++)E.push(A[R].r,A[R].g,A[R].b,A[R].a);Ie._ComputeSides(v,g,t,i,r,n.frontUVs,n.backUVs);let T=new Ie;if(T.indices=t,T.positions=g,T.normals=i,T.uvs=r,A){let R=v===Ie.DOUBLESIDE?E.concat(E):E;T.colors=R}return T}function ty(n,e={},t=null){let i=new q(n,t);return e.sideOrientation=q._GetDefaultSideOrientation(e.sideOrientation),i._originalBuilderSideOrientation=e.sideOrientation,oA(e).applyToMesh(i,e.updatable),i}var iy=C(()=>{Ve();Ht();Di();lr();Qr();ey();Ie.CreateBox=oA;q.CreateBox=(n,e,t=null,i,r)=>ty(n,{size:e,sideOrientation:r,updatable:i},t)});function Am(n){let e=n.pattern||q.NO_FLIP,t=n.tileWidth||n.tileSize||1,i=n.tileHeight||n.tileSize||1,r=n.alignHorizontal||0,s=n.alignVertical||0,a=n.width||n.size||1,o=Math.floor(a/t),l=a-o*t,c=n.height||n.size||1,f=Math.floor(c/i),h=c-f*i,d=t*o/2,u=i*f/2,m=0,_=0,p=0,g=0,v=0,x=0;if(l>0||h>0){switch(p=-d,g=-u,v=d,x=u,r){case q.CENTER:l/=2,p-=l,v+=l;break;case q.LEFT:v+=l,m=-l/2;break;case q.RIGHT:p-=l,m=l/2;break}switch(s){case q.CENTER:h/=2,g-=h,x+=h;break;case q.BOTTOM:x+=h,_=-h/2;break;case q.TOP:g-=h,_=h/2;break}}let A=[],E=[],T=[];T[0]=[0,0,1,0,1,1,0,1],T[1]=[0,0,1,0,1,1,0,1],(e===q.ROTATE_TILE||e===q.ROTATE_ROW)&&(T[1]=[1,1,0,1,0,0,1,0]),(e===q.FLIP_TILE||e===q.FLIP_ROW)&&(T[1]=[1,0,0,0,0,1,1,1]),(e===q.FLIP_N_ROTATE_TILE||e===q.FLIP_N_ROTATE_ROW)&&(T[1]=[0,1,1,1,1,0,0,0]);let R=[],I=[],y=[],M=0;for(let N=0;N0||h>0){let N=h>0&&(s===q.CENTER||s===q.TOP),w=h>0&&(s===q.CENTER||s===q.BOTTOM),U=l>0&&(r===q.CENTER||r===q.RIGHT),G=l>0&&(r===q.CENTER||r===q.LEFT),J,Y,Q,X,j;if(N&&U&&(A.push(p+m,g+_,0),A.push(-d+m,g+_,0),A.push(-d+m,g+h+_,0),A.push(p+m,g+h+_,0),y.push(M,M+1,M+3,M+1,M+2,M+3),M+=4,Y=1-l/t,Q=1-h/i,X=1,j=1,J=[Y,Q,X,Q,X,j,Y,j],e===q.ROTATE_ROW&&(J=[1-Y,1-Q,1-X,1-Q,1-X,1-j,1-Y,1-j]),e===q.FLIP_ROW&&(J=[1-Y,Q,1-X,Q,1-X,j,1-Y,j]),e===q.FLIP_N_ROTATE_ROW&&(J=[Y,1-Q,X,1-Q,X,1-j,Y,1-j]),R=R.concat(J),I.push(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1),E.push(0,0,-1,0,0,-1,0,0,-1,0,0,-1)),N&&G&&(A.push(d+m,g+_,0),A.push(v+m,g+_,0),A.push(v+m,g+h+_,0),A.push(d+m,g+h+_,0),y.push(M,M+1,M+3,M+1,M+2,M+3),M+=4,Y=0,Q=1-h/i,X=l/t,j=1,J=[Y,Q,X,Q,X,j,Y,j],(e===q.ROTATE_ROW||e===q.ROTATE_TILE&&o%2===0)&&(J=[1-Y,1-Q,1-X,1-Q,1-X,1-j,1-Y,1-j]),(e===q.FLIP_ROW||e===q.FLIP_TILE&&o%2===0)&&(J=[1-Y,Q,1-X,Q,1-X,j,1-Y,j]),(e===q.FLIP_N_ROTATE_ROW||e===q.FLIP_N_ROTATE_TILE&&o%2===0)&&(J=[Y,1-Q,X,1-Q,X,1-j,Y,1-j]),R=R.concat(J),I.push(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1),E.push(0,0,-1,0,0,-1,0,0,-1,0,0,-1)),w&&U&&(A.push(p+m,u+_,0),A.push(-d+m,u+_,0),A.push(-d+m,x+_,0),A.push(p+m,x+_,0),y.push(M,M+1,M+3,M+1,M+2,M+3),M+=4,Y=1-l/t,Q=0,X=1,j=h/i,J=[Y,Q,X,Q,X,j,Y,j],(e===q.ROTATE_ROW&&f%2===1||e===q.ROTATE_TILE&&f%1===0)&&(J=[1-Y,1-Q,1-X,1-Q,1-X,1-j,1-Y,1-j]),(e===q.FLIP_ROW&&f%2===1||e===q.FLIP_TILE&&f%2===0)&&(J=[1-Y,Q,1-X,Q,1-X,j,1-Y,j]),(e===q.FLIP_N_ROTATE_ROW&&f%2===1||e===q.FLIP_N_ROTATE_TILE&&f%2===0)&&(J=[Y,1-Q,X,1-Q,X,1-j,Y,1-j]),R=R.concat(J),I.push(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1),E.push(0,0,-1,0,0,-1,0,0,-1,0,0,-1)),w&&G&&(A.push(d+m,u+_,0),A.push(v+m,u+_,0),A.push(v+m,x+_,0),A.push(d+m,x+_,0),y.push(M,M+1,M+3,M+1,M+2,M+3),M+=4,Y=0,Q=0,X=l/t,j=h/i,J=[Y,Q,X,Q,X,j,Y,j],(e===q.ROTATE_ROW&&f%2===1||e===q.ROTATE_TILE&&(f+o)%2===1)&&(J=[1-Y,1-Q,1-X,1-Q,1-X,1-j,1-Y,1-j]),(e===q.FLIP_ROW&&f%2===1||e===q.FLIP_TILE&&(f+o)%2===1)&&(J=[1-Y,Q,1-X,Q,1-X,j,1-Y,j]),(e===q.FLIP_N_ROTATE_ROW&&f%2===1||e===q.FLIP_N_ROTATE_TILE&&(f+o)%2===1)&&(J=[Y,1-Q,X,1-Q,X,1-j,Y,1-j]),R=R.concat(J),I.push(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1),E.push(0,0,-1,0,0,-1,0,0,-1,0,0,-1)),N){let me=[];Y=0,Q=1-h/i,X=1,j=1,me[0]=[Y,Q,X,Q,X,j,Y,j],me[1]=[Y,Q,X,Q,X,j,Y,j],(e===q.ROTATE_TILE||e===q.ROTATE_ROW)&&(me[1]=[1-Y,1-Q,1-X,1-Q,1-X,1-j,1-Y,1-j]),(e===q.FLIP_TILE||e===q.FLIP_ROW)&&(me[1]=[1-Y,Q,1-X,Q,1-X,j,1-Y,j]),(e===q.FLIP_N_ROTATE_TILE||e===q.FLIP_N_ROTATE_ROW)&&(me[1]=[Y,1-Q,X,1-Q,X,1-j,Y,1-j]);for(let xe=0;xe{Di();lr();Ie.CreateTiledPlane=Am});function GV(n){let t=n.faceUV||new Array(6),i=n.faceColors,r=n.pattern||q.NO_FLIP,s=n.width||n.size||1,a=n.height||n.size||1,o=n.depth||n.size||1,l=n.tileWidth||n.tileSize||1,c=n.tileHeight||n.tileSize||1,f=n.alignHorizontal||0,h=n.alignVertical||0,d=n.sideOrientation===0?0:n.sideOrientation||Ie.DEFAULTSIDE;for(let N=0;N<6;N++)t[N]===void 0&&(t[N]=new Mi(0,0,1,1)),i&&i[N]===void 0&&(i[N]=new lt(1,1,1,1));let u=s/2,m=a/2,_=o/2,p=[];for(let N=0;N<2;N++)p[N]=Am({pattern:r,tileWidth:l,tileHeight:c,width:s,height:a,alignVertical:h,alignHorizontal:f,sideOrientation:d});for(let N=2;N<4;N++)p[N]=Am({pattern:r,tileWidth:l,tileHeight:c,width:o,height:a,alignVertical:h,alignHorizontal:f,sideOrientation:d});let g=h;h===q.BOTTOM?g=q.TOP:h===q.TOP&&(g=q.BOTTOM);for(let N=4;N<6;N++)p[N]=Am({pattern:r,tileWidth:l,tileHeight:c,width:s,height:o,alignVertical:g,alignHorizontal:f,sideOrientation:d});let v=[],x=[],A=[],E=[],T=[],R=[],I=[],y=[],M,D=0;for(let N=0;N<6;N++){let w=p[N].positions.length;R[N]=[],I[N]=[];for(let U=0;UU+D)),D+=R[N].length,i){let U=i[N];for(let G=0;G{Ve();Ht();Di();lr();ry();Qr();lA=1,ny=-1;Ie.CreateTiledBox=GV});function HV(n){let e=(n.segments||32)|0,t=n.diameterX||n.diameter||1,i=n.diameterY||n.diameter||1,r=n.diameterZ||n.diameter||1,s=n.arc&&(n.arc<=0||n.arc>1)?1:n.arc||1,a=n.slice&&n.slice<=0?1:n.slice||1,o=n.sideOrientation===0?0:n.sideOrientation||Ie.DEFAULTSIDE,l=!!n.dedupTopBottomIndices,c=new b(t/2,i/2,r/2),f=2+e,h=2*f,d=[],u=[],m=[],_=[];for(let g=0;g<=f;g++){let v=g/f,x=v*Math.PI*a;for(let A=0;A<=h;A++){let E=A/h,T=E*Math.PI*2*s,R=K.RotationZ(-x),I=K.RotationY(T),y=b.TransformCoordinates(b.Up(),R),M=b.TransformCoordinates(y,I),D=M.multiply(c),O=M.divide(c).normalize();u.push(D.x,D.y,D.z),m.push(O.x,O.y,O.z),_.push(E,It?1-v:v)}if(g>0){let A=u.length/3;for(let E=A-2*(h+1);E+h+21&&(d.push(E),d.push(E+1),d.push(E+h+1)),(g{Ve();Di();lr();Qr();Ie.CreateSphere=HV;q.CreateSphere=(n,e,t,i,r,s)=>sy(n,{segments:e,diameterX:t,diameterY:t,diameterZ:t,sideOrientation:s,updatable:r},i)});function XV(n){let e=n.height||2,t=n.diameterTop===0?0:n.diameterTop||n.diameter||1,i=n.diameterBottom===0?0:n.diameterBottom||n.diameter||1;t=t||1e-5,i=i||1e-5;let r=(n.tessellation||24)|0,s=(n.subdivisions||1)|0,a=!!n.hasRings,o=!!n.enclose,l=n.cap===0?0:n.cap||q.CAP_ALL,c=n.arc&&(n.arc<=0||n.arc>1)?1:n.arc||1,f=n.sideOrientation===0?0:n.sideOrientation||Ie.DEFAULTSIDE,h=n.faceUV||new Array(3),d=n.faceColors,u=c!==1&&o?2:0,m=a?s:1,_=2+(1+u)*m,p;for(p=0;p<_;p++)d&&d[p]===void 0&&(d[p]=new lt(1,1,1,1));for(p=0;p<_;p++)h&&h[p]===void 0&&(h[p]=new Mi(0,0,1,1));let g=[],v=[],x=[],A=[],E=[],T=Math.PI*2*c/r,R,I,y,M=(i-t)/2/e,D=b.Zero(),O=b.Zero(),V=b.Zero(),N=b.Zero(),w=b.Zero(),U=ds.Y,G,J,Y,Q,X=1,j=0,me;for(G=0;G<=s;G++)for(I=G/s,y=(I*(t-i)+i)/2,Q=a&&G!==0&&G!==s?2:1,Y=0;Y{let ie=pe?t/2:i/2;if(ie===0)return;let _e,Pe,de,be=pe?h[_-1]:h[0],Ze=null;d&&(Ze=pe?d[_-1]:d[0]);let Tt=v.length/3,Ye=pe?e/2:-e/2,Ke=new b(0,Ye,0);v.push(Ke.x,Ke.y,Ke.z),x.push(0,pe?1:-1,0);let fe=be.y+(be.w-be.y)*.5;A.push(be.x+(be.z-be.x)*.5,It?1-fe:fe),Ze&&E.push(Ze.r,Ze.g,Ze.b,Ze.a);let Fe=new Ne(.5,.5);for(de=0;de<=r;de++){_e=Math.PI*2*de*c/r;let Vt=Math.cos(-_e),re=Math.sin(-_e);Pe=new b(Vt*ie,Ye,re*ie);let di=new Ne(Vt*Fe.x+.5,re*Fe.y+.5);v.push(Pe.x,Pe.y,Pe.z),x.push(0,pe?1:-1,0);let zt=be.y+(be.w-be.y)*di.y;A.push(be.x+(be.z-be.x)*di.x,It?1-zt:zt),Ze&&E.push(Ze.r,Ze.g,Ze.b,Ze.a)}for(de=0;de{Ve();Ht();Di();lr();ps();Iu();Qr();Ie.CreateCylinder=XV;q.CreateCylinder=(n,e,t,i,r,s,a,o,l)=>((a===void 0||!(a instanceof Qt))&&(a!==void 0&&(l=o||q.DEFAULTSIDE,o=a),a=s,s=1),ay(n,{height:e,diameterTop:t,diameterBottom:i,tessellation:r,subdivisions:s,sideOrientation:l,updatable:o},a))});function KV(n){let e=[],t=[],i=[],r=[],s=n.diameter||1,a=n.thickness||.5,o=(n.tessellation||16)|0,l=n.sideOrientation===0?0:n.sideOrientation||Ie.DEFAULTSIDE,c=o+1;for(let h=0;h<=o;h++){let d=h/o,u=h*Math.PI*2/o-Math.PI/2,m=K.Translation(s/2,0,0).multiply(K.RotationY(u));for(let _=0;_<=o;_++){let p=1-_/o,g=_*Math.PI*2/o+Math.PI,v=Math.cos(g),x=Math.sin(g),A=new b(v,x,0),E=A.scale(a/2),T=new Ne(d,p);E=b.TransformCoordinates(E,m),A=b.TransformNormal(A,m),t.push(E.x,E.y,E.z),i.push(A.x,A.y,A.z),r.push(T.x,It?1-T.y:T.y);let R=(h+1)%c,I=(_+1)%c;e.push(h*c+_),e.push(h*c+I),e.push(R*c+_),e.push(h*c+I),e.push(R*c+I),e.push(R*c+_)}}Ie._ComputeSides(l,t,e,i,r,n.frontUVs,n.backUVs);let f=new Ie;return f.indices=e,f.positions=t,f.normals=i,f.uvs=r,f}function oy(n,e={},t){let i=new q(n,t);return e.sideOrientation=q._GetDefaultSideOrientation(e.sideOrientation),i._originalBuilderSideOrientation=e.sideOrientation,KV(e).applyToMesh(i,e.updatable),i}var jV=C(()=>{Ve();Di();lr();Qr();Ie.CreateTorus=KV;q.CreateTorus=(n,e,t,i,r,s,a)=>oy(n,{diameter:e,thickness:t,tessellation:i,sideOrientation:a,updatable:s},r)});function qV(n){let e=[],t=[],i=[],r=[],s=n.radius||2,a=n.tube||.5,o=n.radialSegments||32,l=n.tubularSegments||32,c=n.p||2,f=n.q||3,h=n.sideOrientation===0?0:n.sideOrientation||Ie.DEFAULTSIDE,d=p=>{let g=Math.cos(p),v=Math.sin(p),x=f/c*p,A=Math.cos(x),E=s*(2+A)*.5*g,T=s*(2+A)*v*.5,R=s*Math.sin(x)*.5;return new b(E,T,R)},u,m;for(u=0;u<=o;u++){let g=u%o/o*2*c*Math.PI,v=d(g),x=d(g+.01),A=x.subtract(v),E=x.add(v),T=b.Cross(A,E);for(E=b.Cross(T,A),T.normalize(),E.normalize(),m=0;m{Ve();Di();lr();Qr();Ie.CreateTorusKnot=qV;q.CreateTorusKnot=(n,e,t,i,r,s,a,o,l,c)=>ly(n,{radius:e,tube:t,radialSegments:i,tubularSegments:r,p:s,q:a,sideOrientation:c,updatable:l},o)});var jl,cy=C(()=>{Ve();Pt();Ju();Di();__();Gh();Ui();Ci();Vi();q._instancedMeshFactory=(n,e)=>{let t=new jl(n,e);if(e.instancedBuffers){t.instancedBuffers={};for(let i in e.instancedBuffers)t.instancedBuffers[i]=e.instancedBuffers[i]}return t};jl=class extends ur{constructor(e,t){super(e,t.getScene()),this._indexInSourceMeshInstanceArray=-1,this._distanceToCamera=0,t.addInstance(this),this._sourceMesh=t,this._unIndexed=t._unIndexed,this.position.copyFrom(t.position),this.rotation.copyFrom(t.rotation),this.scaling.copyFrom(t.scaling),t.rotationQuaternion&&(this.rotationQuaternion=t.rotationQuaternion.clone()),this.animations=t.animations.slice();for(let i of t.getAnimationRanges())i!=null&&this.createAnimationRange(i.name,i.from,i.to);if(this.infiniteDistance=t.infiniteDistance,this.setPivotMatrix(t.getPivotMatrix()),!t.skeleton&&!t.morphTargetManager&&t.hasBoundingInfo){let i=t.getBoundingInfo();this.buildBoundingInfo(i.minimum,i.maximum)}else this.refreshBoundingInfo(!0,!0);this._syncSubMeshes()}getClassName(){return"InstancedMesh"}get lightSources(){return this._sourceMesh._lightSources}_resyncLightSources(){}_resyncLightSource(){}_removeLightSource(){}get receiveShadows(){return this._sourceMesh.receiveShadows}set receiveShadows(e){var t;((t=this._sourceMesh)==null?void 0:t.receiveShadows)!==e&&he.Warn("Setting receiveShadows on an instanced mesh has no effect")}get material(){return this._sourceMesh.material}set material(e){var t;((t=this._sourceMesh)==null?void 0:t.material)!==e&&he.Warn("Setting material on an instanced mesh has no effect")}get visibility(){return this._sourceMesh.visibility}set visibility(e){var t;((t=this._sourceMesh)==null?void 0:t.visibility)!==e&&he.Warn("Setting visibility on an instanced mesh has no effect")}get skeleton(){return this._sourceMesh.skeleton}set skeleton(e){var t;((t=this._sourceMesh)==null?void 0:t.skeleton)!==e&&he.Warn("Setting skeleton on an instanced mesh has no effect")}get renderingGroupId(){return this._sourceMesh.renderingGroupId}set renderingGroupId(e){!this._sourceMesh||e===this._sourceMesh.renderingGroupId||$.Warn("Note - setting renderingGroupId of an instanced mesh has no effect on the scene")}getTotalVertices(){return this._sourceMesh?this._sourceMesh.getTotalVertices():0}getTotalIndices(){return this._sourceMesh.getTotalIndices()}get sourceMesh(){return this._sourceMesh}get geometry(){return this._sourceMesh._geometry}createInstance(e){return this._sourceMesh.createInstance(e)}isReady(e=!1){return this._sourceMesh.isReady(e,!0)}getVerticesData(e,t,i){return this._sourceMesh.getVerticesData(e,t,i)}copyVerticesData(e,t){this._sourceMesh.copyVerticesData(e,t)}getVertexBuffer(e,t){return this._sourceMesh.getVertexBuffer(e,t)}setVerticesData(e,t,i,r){return this.sourceMesh&&this.sourceMesh.setVerticesData(e,t,i,r),this.sourceMesh}updateVerticesData(e,t,i,r){return this.sourceMesh&&this.sourceMesh.updateVerticesData(e,t,i,r),this.sourceMesh}setIndices(e,t=null){return this.sourceMesh&&this.sourceMesh.setIndices(e,t),this.sourceMesh}isVerticesDataPresent(e){return this._sourceMesh.isVerticesDataPresent(e)}getIndices(){return this._sourceMesh.getIndices()}get _positions(){return this._sourceMesh._positions}refreshBoundingInfo(e=!1,t=!1){if(this.hasBoundingInfo&&this.getBoundingInfo().isLocked)return this;let i;typeof e=="object"?i=e:i={applySkeleton:e,applyMorph:t};let r=this._sourceMesh.geometry?this._sourceMesh.geometry.boundingBias:null;return this._refreshBoundingInfo(this._sourceMesh._getData(i,null,L.PositionKind),r),this}_preActivate(){return this._currentLOD&&this._currentLOD._preActivate(),this}_activate(e,t){if(super._activate(e,t),this._sourceMesh.subMeshes||$.Warn("Instances should only be created for meshes with geometry."),this._currentLOD){if(this._currentLOD._getWorldMatrixDeterminant()>=0!=this._getWorldMatrixDeterminant()>=0)return this._internalAbstractMeshDataInfo._actAsRegularMesh=!0,!0;if(this._internalAbstractMeshDataInfo._actAsRegularMesh=!1,this._currentLOD._registerInstanceForRenderId(this,e),t){if(!this._currentLOD._internalAbstractMeshDataInfo._isActiveIntermediate)return this._currentLOD._internalAbstractMeshDataInfo._onlyForInstancesIntermediate=!0,!0}else if(!this._currentLOD._internalAbstractMeshDataInfo._isActive)return this._currentLOD._internalAbstractMeshDataInfo._onlyForInstances=!0,!0}return!1}_postActivate(){this._sourceMesh.edgesShareWithInstances&&this._sourceMesh._edgesRenderer&&this._sourceMesh._edgesRenderer.isEnabled&&this._sourceMesh._renderingGroup?(this._sourceMesh._renderingGroup._edgesRenderers.pushNoDuplicate(this._sourceMesh._edgesRenderer),this._sourceMesh._edgesRenderer.customInstances.push(this.getWorldMatrix())):this._edgesRenderer&&this._edgesRenderer.isEnabled&&this._sourceMesh._renderingGroup&&this._sourceMesh._renderingGroup._edgesRenderers.push(this._edgesRenderer)}getWorldMatrix(){if(this._currentLOD&&this._currentLOD!==this._sourceMesh&&this._currentLOD.billboardMode!==Jt.BILLBOARDMODE_NONE&&this._currentLOD._masterMesh!==this){this._billboardWorldMatrix||(this._billboardWorldMatrix=new K);let e=this._currentLOD._masterMesh;return this._currentLOD._masterMesh=this,Z.Vector3[7].copyFrom(this._currentLOD.position),this._currentLOD.position.set(0,0,0),this._billboardWorldMatrix.copyFrom(this._currentLOD.computeWorldMatrix(!0)),this._currentLOD.position.copyFrom(Z.Vector3[7]),this._currentLOD._masterMesh=e,this._billboardWorldMatrix}return super.getWorldMatrix()}get isAnInstance(){return!0}getLOD(e){if(!e)return this;let t=this.sourceMesh.getLODLevels();if(!t||t.length===0)this._currentLOD=this.sourceMesh;else{let i=this.getBoundingInfo();this._currentLOD=this.sourceMesh.getLOD(e,i.boundingSphere)}return this._currentLOD}_preActivateForIntermediateRendering(e){return this.sourceMesh._preActivateForIntermediateRendering(e)}_syncSubMeshes(){if(this.releaseSubMeshes(),this._sourceMesh.subMeshes)for(let e=0;e{On=class{constructor(){this._defines={},this._currentRank=32,this._maxRank=-1,this._mesh=null}unBindMesh(){this._mesh=null}addFallback(e,t){this._defines[e]||(ethis._maxRank&&(this._maxRank=e),this._defines[e]=new Array),this._defines[e].push(t)}addCPUSkinningFallback(e,t){this._mesh=t,ethis._maxRank&&(this._maxRank=e)}get hasMoreFallbacks(){return this._currentRank<=this._maxRank}reduce(e,t){if(this._mesh&&this._mesh.computeBonesUsingShaders&&this._mesh.numBoneInfluencers>0){this._mesh.computeBonesUsingShaders=!1,e=e.replace("#define NUM_BONE_INFLUENCERS "+this._mesh.numBoneInfluencers,"#define NUM_BONE_INFLUENCERS 0"),t._bonesComputationForcedToCPU=!0;let i=this._mesh.getScene();for(let r=0;r0&&(s.computeBonesUsingShaders=!1);continue}if(!(!s.computeBonesUsingShaders||s.numBoneInfluencers===0)){if(s.material.getEffect()===t)s.computeBonesUsingShaders=!1;else if(s.subMeshes){for(let a of s.subMeshes)if(a.effect===t){s.computeBonesUsingShaders=!1;break}}}}}else{let i=this._defines[this._currentRank];if(i)for(let r=0;r{Ve();Pn();nl=class extends ve{constructor(e,t,i=!0,r=!1){super(e,t,void 0,r),this._normalMatrix=new K,this._storeEffectOnSubMeshes=i}getEffect(){return this._storeEffectOnSubMeshes?this._activeEffect:super.getEffect()}isReady(e,t){return e?!this._storeEffectOnSubMeshes||!e.subMeshes||e.subMeshes.length===0?!0:this.isReadyForSubMesh(e,e.subMeshes[0],t):!1}_isReadyForSubMesh(e){let t=e.materialDefines;return!!(!this.checkReadyOnEveryCall&&e.effect&&t&&t._renderId===this.getScene().getRenderId())}bindOnlyWorldMatrix(e){this._activeEffect.setMatrix("world",e)}bindOnlyNormalMatrix(e){this._activeEffect.setMatrix("normalMatrix",e)}bind(e,t){t&&this.bindForSubMesh(e,t,t.subMeshes[0])}_afterBind(e,t=null,i){super._afterBind(e,t,i),this.getScene()._cachedEffect=t,i?i._drawWrapper._forceRebindOnNextCall=!1:this._drawWrapper._forceRebindOnNextCall=!1}_mustRebind(e,t,i,r=1){return i._drawWrapper._forceRebindOnNextCall||e.isCachedMaterialInvalid(this,t,r)}dispose(e,t,i){this._activeEffect=void 0,super.dispose(e,t,i)}}});function Af(n){let e=n.getVertexBuffers();if(!e)return null;let t=QV.get(n);if(!t)t=new Map,QV.set(n,t);else{let i=!1;for(let r in e)if(!t.has(r)){i=!0;break}if(!i)return t}for(let i in e){let r=e[i];if(r){let s=r.byteOffset,a=r.byteStride,o=r.type,l=r.normalized;t.set(i,{offset:s,stride:a,type:o,normalized:l})}}return t}function xf(n,e){e.forEach((t,i)=>{let r=`vp_${i}_info`;n.setFloat4(r,t.offset,t.stride,t.type,t.normalized?1:0)})}var QV,z_=C(()=>{QV=new WeakMap});var fy,ho,hy=C(()=>{_r();ps();Ve();Ui();Gr();Vi();Tf();Ch();H_();Pi();el();yn();z_();fy={effect:null,subMesh:null},ho=class n extends nl{constructor(e,t,i,r={},s=!0){super(e,t,s),this._textures={},this._internalTextures={},this._textureArrays={},this._externalTextures={},this._floats={},this._ints={},this._uints={},this._floatsArrays={},this._colors3={},this._colors3Arrays={},this._colors4={},this._colors4Arrays={},this._vectors2={},this._vectors3={},this._vectors4={},this._quaternions={},this._quaternionsArrays={},this._matrices={},this._matrixArrays={},this._matrices3x3={},this._matrices2x2={},this._vectors2Arrays={},this._vectors3Arrays={},this._vectors4Arrays={},this._uniformBuffers={},this._textureSamplers={},this._storageBuffers={},this._cachedWorldViewMatrix=new K,this._cachedWorldViewProjectionMatrix=new K,this._multiview=!1,this._vertexPullingMetadata=null,this._materialHelperNeedsPreviousMatrices=!1,this._shaderPath=i,this._options={needAlphaBlending:!1,needAlphaTesting:!1,attributes:["position","normal","uv"],uniforms:["worldViewProjection"],uniformBuffers:[],samplers:[],externalTextures:[],samplerObjects:[],storageBuffers:[],defines:[],useClipPlane:!1,...r}}get shaderPath(){return this._shaderPath}set shaderPath(e){this._shaderPath=e}get options(){return this._options}get isMultiview(){return this._multiview}getClassName(){return"ShaderMaterial"}needAlphaBlending(){return this.alpha<1||this._options.needAlphaBlending}needAlphaTesting(){return this._options.needAlphaTesting}_checkUniform(e){this._options.uniforms.indexOf(e)===-1&&this._options.uniforms.push(e)}setTexture(e,t){return this._options.samplers.indexOf(e)===-1&&this._options.samplers.push(e),this._textures[e]=t,this}setInternalTexture(e,t){return this._options.samplers.indexOf(e)===-1&&this._options.samplers.push(e),this._internalTextures[e]=t,this}removeTexture(e){delete this._textures[e]}setTextureArray(e,t){return this._options.samplers.indexOf(e)===-1&&this._options.samplers.push(e),this._checkUniform(e),this._textureArrays[e]=t,this}setExternalTexture(e,t){return this._options.externalTextures.indexOf(e)===-1&&this._options.externalTextures.push(e),this._externalTextures[e]=t,this}setFloat(e,t){return this._checkUniform(e),this._floats[e]=t,this}setInt(e,t){return this._checkUniform(e),this._ints[e]=t,this}setUInt(e,t){return this._checkUniform(e),this._uints[e]=t,this}setFloats(e,t){return this._checkUniform(e),this._floatsArrays[e]=t,this}setColor3(e,t){return this._checkUniform(e),this._colors3[e]=t,this}setColor3Array(e,t){return this._checkUniform(e),this._colors3Arrays[e]=t.reduce((i,r)=>(i.push(r.r,r.g,r.b),i),[]),this}setColor4(e,t){return this._checkUniform(e),this._colors4[e]=t,this}setColor4Array(e,t){return this._checkUniform(e),this._colors4Arrays[e]=t.reduce((i,r)=>(i.push(r.r,r.g,r.b,r.a),i),[]),this}setVector2(e,t){return this._checkUniform(e),this._vectors2[e]=t,this}setVector3(e,t){return this._checkUniform(e),this._vectors3[e]=t,this}setVector4(e,t){return this._checkUniform(e),this._vectors4[e]=t,this}setQuaternion(e,t){return this._checkUniform(e),this._quaternions[e]=t,this}setQuaternionArray(e,t){return this._checkUniform(e),this._quaternionsArrays[e]=t.reduce((i,r)=>(r.toArray(i,i.length),i),[]),this}setMatrix(e,t){return this._checkUniform(e),this._matrices[e]=t,this}setMatrices(e,t){this._checkUniform(e);let i=new Float32Array(t.length*16);for(let r=0;rs===e||s.startsWith(i));return r>=0&&this.options.defines.splice(r,1),(typeof t!="boolean"||t)&&this.options.defines.push(i+t),this}isReadyForSubMesh(e,t,i){return this.isReady(e,i,t)}isReady(e,t,i){var T,R,I,y;let r=i&&this._storeEffectOnSubMeshes;if(this.isFrozen){let M=r?i._drawWrapper:this._drawWrapper;if(M.effect&&M._wasPreviouslyReady&&M._wasPreviouslyUsingInstances===t)return!0}let s=this.getScene(),a=s.getEngine(),o=[],l=[],c=null,f=this._shaderPath,h=this._options.uniforms,d=this._options.uniformBuffers,u=this._options.samplers;a.getCaps().multiview&&s.activeCamera&&s.activeCamera.outputRenderTarget&&s.activeCamera.outputRenderTarget.getViewCount()>1&&(this._multiview=!0,o.push("#define MULTIVIEW"),h.indexOf("viewProjection")!==-1&&h.indexOf("viewProjectionR")===-1&&h.push("viewProjectionR"));for(let M=0;M4&&(l.push(L.MatricesIndicesExtraKind),l.push(L.MatricesWeightsExtraKind));let M=e.skeleton;o.push("#define NUM_BONE_INFLUENCERS "+e.numBoneInfluencers),c=new On,c.addCPUSkinningFallback(0,e),M.isUsingTextureForMatrices?(o.push("#define BONETEXTURE"),h.indexOf("boneTextureInfo")===-1&&h.push("boneTextureInfo"),this._options.samplers.indexOf("boneSampler")===-1&&this._options.samplers.push("boneSampler")):(o.push("#define BonesPerMesh "+(M.bones.length+1)),h.indexOf("mBones")===-1&&h.push("mBones"))}else o.push("#define NUM_BONE_INFLUENCERS 0");let m=0,_=e?e.morphTargetManager:null;if(_){let M=o.indexOf("#define UV1")!==-1,D=o.indexOf("#define UV2")!==-1,O=o.indexOf("#define TANGENT")!==-1,V=o.indexOf("#define NORMAL")!==-1,N=o.indexOf("#define VERTEXCOLOR")!==-1;m=tl(_,o,l,e,!0,V,O,M,D,N),_.isUsingTextureForTargets&&(h.indexOf("morphTargetTextureIndices")===-1&&h.push("morphTargetTextureIndices"),this._options.samplers.indexOf("morphTargets")===-1&&this._options.samplers.push("morphTargets")),m>0&&(h=h.slice(),h.push("morphTargetInfluences"),h.push("morphTargetCount"),h.push("morphTargetTextureInfo"),h.push("morphTargetTextureIndices"))}else o.push("#define NUM_MORPH_INFLUENCERS 0");if(e){let M=e.bakedVertexAnimationManager;M&&M.isEnabled&&(o.push("#define BAKED_VERTEX_ANIMATION_TEXTURE"),h.indexOf("bakedVertexAnimationSettings")===-1&&h.push("bakedVertexAnimationSettings"),h.indexOf("bakedVertexAnimationTextureSizeInverted")===-1&&h.push("bakedVertexAnimationTextureSizeInverted"),h.indexOf("bakedVertexAnimationTime")===-1&&h.push("bakedVertexAnimationTime"),this._options.samplers.indexOf("bakedVertexAnimationTexture")===-1&&this._options.samplers.push("bakedVertexAnimationTexture"),t&&l.push("bakedVertexAnimationSettingsInstanced"))}for(let M in this._textures)if(!this._textures[M].isReady())return!1;for(let M in this._internalTextures)if(!this._internalTextures[M].isReady)return!1;e&&this.needAlphaTestingForMesh(e)&&o.push("#define ALPHATEST"),this._options.useClipPlane!==!1&&(In(h),$o(this,s,o)),s.fogEnabled&&(e!=null&&e.applyFog)&&s.fogMode!==Qt.FOGMODE_NONE&&(o.push("#define FOG"),h.indexOf("view")===-1&&h.push("view"),h.indexOf("vFogInfos")===-1&&h.push("vFogInfos"),h.indexOf("vFogColor")===-1&&h.push("vFogColor")),this._useLogarithmicDepth&&(o.push("#define LOGARITHMICDEPTH"),h.indexOf("logarithmicDepthConstant")===-1&&h.push("logarithmicDepthConstant"));let p=i?i.getRenderingMesh():e;if(p&&this.useVertexPulling){let M=p.geometry;M&&(this._vertexPullingMetadata=Af(M),this._vertexPullingMetadata&&this._vertexPullingMetadata.forEach((O,V)=>{h.push(`vp_${V}_info`)})),o.push("#define USE_VERTEX_PULLING");let D=(T=p.geometry)==null?void 0:T.getIndexBuffer();D&&!p.isUnIndexed&&(o.push("#define VERTEX_PULLING_USE_INDEX_BUFFER"),D.is32Bits&&o.push("#define VERTEX_PULLING_INDEX_BUFFER_32BITS"))}this.customShaderNameResolve&&(h=h.slice(),d=d.slice(),u=u.slice(),f=this.customShaderNameResolve(this.name,h,d,u,o,l));let g=r?i._getDrawWrapper(void 0,!0):this._drawWrapper,v=(R=g==null?void 0:g.effect)!=null?R:null,x=(I=g==null?void 0:g.defines)!=null?I:null,A=o.join(` -`),E=v;return x!==A&&(E=a.createEffect(f,{attributes:l,uniformsNames:h,uniformBuffersNames:d,samplers:u,defines:A,fallbacks:c,onCompiled:this.onCompiled,onError:this.onError,indexParameters:{maxSimultaneousMorphTargets:m},shaderLanguage:this._options.shaderLanguage,extraInitializationsAsync:this._options.extraInitializationsAsync},a),r?i.setEffect(E,A,this._materialContext):g&&g.setEffect(E,A),this._onEffectCreatedObservable&&(fy.effect=E,fy.subMesh=(y=i!=null?i:e==null?void 0:e.subMeshes[0])!=null?y:null,this._onEffectCreatedObservable.notifyObservers(fy))),g._wasPreviouslyUsingInstances=!!t,E!=null&&E.isReady()?(v!==E&&s.resetCachedMaterial(),g._wasPreviouslyReady=!0,!0):!1}bindOnlyWorldMatrix(e,t){let i=t!=null?t:this.getEffect();if(!i)return;let r=this._options.uniforms;r.indexOf("world")!==-1&&i.setMatrix("world",e);let s=this.getScene();r.indexOf("worldView")!==-1&&(e.multiplyToRef(s.getViewMatrix(),this._cachedWorldViewMatrix),i.setMatrix("worldView",this._cachedWorldViewMatrix)),r.indexOf("worldViewProjection")!==-1&&(e.multiplyToRef(s.getTransformMatrix(),this._cachedWorldViewProjectionMatrix),i.setMatrix("worldViewProjection",this._cachedWorldViewProjectionMatrix)),r.indexOf("view")!==-1&&i.setMatrix("view",s.getViewMatrix())}bindForSubMesh(e,t,i){var r;this.bind(e,t,(r=i._drawWrapperOverride)==null?void 0:r.effect,i)}bind(e,t,i,r){var h;let s=r&&this._storeEffectOnSubMeshes,a=i!=null?i:s?r.effect:this.getEffect();if(!a)return;let o=this.getScene();this._activeEffect=a,this.bindOnlyWorldMatrix(e,i);let l=this._options.uniformBuffers,c=!1;if(a&&l&&l.length>0&&o.getEngine().supportsUniformBuffers)for(let d=0;dnew n(e,this.getScene(),this._shaderPath,this._options,this._storeEffectOnSubMeshes),this);t.name=e,t.id=e,typeof t._shaderPath=="object"&&(t._shaderPath={...t._shaderPath}),this._options={...this._options};let i=Object.keys(this._options);for(let r of i){let s=this._options[r];Array.isArray(s)&&(this._options[r]=s.slice(0))}this.stencil.copyTo(t.stencil);for(let r in this._textures)t.setTexture(r,this._textures[r]);for(let r in this._internalTextures)t.setInternalTexture(r,this._internalTextures[r]);for(let r in this._textureArrays)t.setTextureArray(r,this._textureArrays[r]);for(let r in this._externalTextures)t.setExternalTexture(r,this._externalTextures[r]);for(let r in this._ints)t.setInt(r,this._ints[r]);for(let r in this._uints)t.setUInt(r,this._uints[r]);for(let r in this._floats)t.setFloat(r,this._floats[r]);for(let r in this._floatsArrays)t.setFloats(r,this._floatsArrays[r]);for(let r in this._colors3)t.setColor3(r,this._colors3[r]);for(let r in this._colors3Arrays)t._colors3Arrays[r]=this._colors3Arrays[r];for(let r in this._colors4)t.setColor4(r,this._colors4[r]);for(let r in this._colors4Arrays)t._colors4Arrays[r]=this._colors4Arrays[r];for(let r in this._vectors2)t.setVector2(r,this._vectors2[r]);for(let r in this._vectors3)t.setVector3(r,this._vectors3[r]);for(let r in this._vectors4)t.setVector4(r,this._vectors4[r]);for(let r in this._quaternions)t.setQuaternion(r,this._quaternions[r]);for(let r in this._quaternionsArrays)t._quaternionsArrays[r]=this._quaternionsArrays[r];for(let r in this._matrices)t.setMatrix(r,this._matrices[r]);for(let r in this._matrixArrays)t._matrixArrays[r]=this._matrixArrays[r].slice();for(let r in this._matrices3x3)t.setMatrix3x3(r,this._matrices3x3[r]);for(let r in this._matrices2x2)t.setMatrix2x2(r,this._matrices2x2[r]);for(let r in this._vectors2Arrays)t.setArray2(r,this._vectors2Arrays[r]);for(let r in this._vectors3Arrays)t.setArray3(r,this._vectors3Arrays[r]);for(let r in this._vectors4Arrays)t.setArray4(r,this._vectors4Arrays[r]);for(let r in this._uniformBuffers)t.setUniformBuffer(r,this._uniformBuffers[r]);for(let r in this._textureSamplers)t.setTextureSampler(r,this._textureSamplers[r]);for(let r in this._storageBuffers)t.setStorageBuffer(r,this._storageBuffers[r]);return t}dispose(e,t,i){if(t){let r;for(r in this._textures)this._textures[r].dispose();for(r in this._internalTextures)this._internalTextures[r].dispose();for(r in this._textureArrays){let s=this._textureArrays[r];for(let a=0;anew n(e.name,t,e.shaderPath,e.options,e.storeEffectOnSubMeshes),e,t,i),s;e.stencil&&r.stencil.parse(e.stencil,t,i);for(s in e.textures)r.setTexture(s,ge.Parse(e.textures[s],t,i));for(s in e.textureArrays){let a=e.textureArrays[s],o=[];for(let l=0;l(c%3===0?o.push([l]):o[o.length-1].push(l),o),[]).map(o=>({r:o[0],g:o[1],b:o[2]}));r.setColor3Array(s,a)}for(s in e.colors4){let a=e.colors4[s];r.setColor4(s,{r:a[0],g:a[1],b:a[2],a:a[3]})}for(s in e.colors4Arrays){let a=e.colors4Arrays[s].reduce((o,l,c)=>(c%4===0?o.push([l]):o[o.length-1].push(l),o),[]).map(o=>({r:o[0],g:o[1],b:o[2],a:o[3]}));r.setColor4Array(s,a)}for(s in e.vectors2){let a=e.vectors2[s];r.setVector2(s,{x:a[0],y:a[1]})}for(s in e.vectors3){let a=e.vectors3[s];r.setVector3(s,{x:a[0],y:a[1],z:a[2]})}for(s in e.vectors4){let a=e.vectors4[s];r.setVector4(s,{x:a[0],y:a[1],z:a[2],w:a[3]})}for(s in e.quaternions)r.setQuaternion(s,ze.FromArray(e.quaternions[s]));for(s in e.matrices)r.setMatrix(s,K.FromArray(e.matrices[s]));for(s in e.matrixArray)r._matrixArrays[s]=new Float32Array(e.matrixArray[s]);for(s in e.matrices3x3)r.setMatrix3x3(s,e.matrices3x3[s]);for(s in e.matrices2x2)r.setMatrix2x2(s,e.matrices2x2[s]);for(s in e.vectors2Arrays)r.setArray2(s,e.vectors2Arrays[s]);for(s in e.vectors3Arrays)r.setArray3(s,e.vectors3Arrays[s]);for(s in e.vectors4Arrays)r.setArray4(s,e.vectors4Arrays[s]);for(s in e.quaternionsArrays)r.setArray4(s,e.quaternionsArrays[s]);return r}static async ParseFromFileAsync(e,t,i,r=""){return await new Promise((s,a)=>{let o=new Rr;o.addEventListener("readystatechange",()=>{if(o.readyState==4)if(o.status==200){let l=JSON.parse(o.responseText),c=this.Parse(l,i||Le.LastCreatedScene,r);e&&(c.name=e),s(c)}else a("Unable to load the ShaderMaterial")}),o.open("GET",t),o.send()})}static async ParseFromSnippetAsync(e,t,i=""){return await new Promise((r,s)=>{let a=new Rr;a.addEventListener("readystatechange",()=>{if(a.readyState==4)if(a.status==200){let o=JSON.parse(JSON.parse(a.responseText).jsonPayload),l=JSON.parse(o.shaderMaterial),c=this.Parse(l,t||Le.LastCreatedScene,i);c.snippetId=e,r(c)}else s("Unable to load the snippet "+e)}),a.open("GET",this.SnippetUrl+"/"+e.replace(/#/g,"/")),a.send()})}};ho.SnippetUrl="https://snippet.babylonjs.com";ho.CreateFromSnippetAsync=ho.ParseFromSnippetAsync;wt("BABYLON.ShaderMaterial",ho)});var JV,ane,ql=C(()=>{k();JV="bonesDeclaration",ane=`#if NUM_BONE_INFLUENCERS>0 +Bad Bone Indices = `+m;return{skinned:!0,valid:s===0&&o===0&&m===0,report:_}}_checkDelayState(){let e=this.getScene();return this._geometry?this._geometry.load(e):this.delayLoadState===4&&(this.delayLoadState=2,this._queueLoad(e)),this}_queueLoad(e){e.addPendingData(this);let t=this.delayLoadingFile.indexOf(".babylonbinarymeshdata")!==-1;return de.LoadFile(this.delayLoadingFile,i=>{i instanceof ArrayBuffer?this._delayLoadingFunction(i,this):this._delayLoadingFunction(JSON.parse(i),this);for(let r of this.instances)r.refreshBoundingInfo(),r._syncSubMeshes();this.delayLoadState=1,e.removePendingData(this)},()=>{},e.offlineProvider,t),this}isInFrustum(e){return this.delayLoadState===2||!super.isInFrustum(e)?!1:(this._checkDelayState(),!0)}setMaterialById(e){let t=this.getScene().materials,i;for(i=t.length-1;i>-1;i--)if(t[i].id===e)return this.material=t[i],this;let r=this.getScene().multiMaterials;for(i=r.length-1;i>-1;i--)if(r[i].id===e)return this.material=r[i],this;return this}getAnimatables(){let e=[];return this.material&&e.push(this.material),this.skeleton&&e.push(this.skeleton),e}bakeTransformIntoVertices(e){if(!this.isVerticesDataPresent(L.PositionKind))return this;let t=this.subMeshes.splice(0);this._resetPointsArrayCache();let i=this.getVerticesData(L.PositionKind),r=b.Zero(),s;for(s=0;s{let d=h.width,u=h.height,_=this.getEngine().createCanvas(d,u).getContext("2d");_.drawImage(h,0,0);let p=_.getImageData(0,0,d,u).data;this.applyDisplacementMapFromBuffer(p,d,u,t,i,s,a,o),r&&r(this)};return de.LoadImage(e,f,l||(()=>{}),c.offlineProvider),this}applyDisplacementMapFromBuffer(e,t,i,r,s,a,o,l=!1){if(!this.isVerticesDataPresent(L.PositionKind)||!this.isVerticesDataPresent(L.NormalKind)||!this.isVerticesDataPresent(L.UVKind))return J.Warn("Cannot call applyDisplacementMap: Given mesh is not complete. Position, Normal or UV are missing"),this;let c=this.getVerticesData(L.PositionKind,!0,!0),f=this.getVerticesData(L.NormalKind),h=this.getVerticesData(L.UVKind),d=b.Zero(),u=b.Zero(),m=Ne.Zero();a=a||Ne.Zero(),o=o||new Ne(1,1);for(let _=0;_{var c;return!((c=this.getVertexBuffer(l))!=null&&c.getIsInstanced())}),i=this.getIndices(!1,!0),r={},s=(l,c)=>{let f=new Float32Array(i.length*c),h=0;for(let d=0;d{let o=r.length-1-a,l=r[o];for(let c=0;c{for(let o=0;o-1&&(r._waitingMorphTargetManagerId=e.morphTargetManagerId),e.skeletonId!==void 0&&e.skeletonId!==null&&(r.skeleton=t.getLastSkeletonById(e.skeletonId),r._waitingSkeletonId=e.skeletonId,e.numBoneInfluencers&&(r.numBoneInfluencers=e.numBoneInfluencers)),e.skeletonUniqueId!==void 0&&e.skeletonUniqueId!==null&&(r._waitingSkeletonUniqueId=e.skeletonUniqueId),e.animations){for(let a=0;a4,c=l?this.getVerticesData(L.MatricesIndicesExtraKind):null,f=l?this.getVerticesData(L.MatricesWeightsExtraKind):null,h=e.getTransformMatrices(this),d=b.Zero(),u=new K,m=new K,_=0,p;for(let g=0;g0&&(K.FromFloat32ArrayToRefScaled(h,Math.floor(a[_+p]*16),v,m),u.addToSelf(m));if(l)for(p=0;p<4;p++)v=f[_+p],v>0&&(K.FromFloat32ArrayToRefScaled(h,Math.floor(c[_+p]*16),v,m),u.addToSelf(m));b.TransformCoordinatesFromFloatsToRef(i._sourcePositions[g],i._sourcePositions[g+1],i._sourcePositions[g+2],u,d),d.toArray(r,g),t&&(b.TransformNormalFromFloatsToRef(i._sourceNormals[g],i._sourceNormals[g+1],i._sourceNormals[g+2],u,d),d.toArray(s,g)),u.reset()}return this.updateVerticesData(L.PositionKind,r),t&&this.updateVerticesData(L.NormalKind,s),this}static MinMax(e){let t=null,i=null;for(let r of e){let a=r.getBoundingInfo().boundingBox;!t||!i?(t=a.minimumWorld.clone(),i=a.maximumWorld.clone()):(t.minimizeInPlace(a.minimumWorld),i.maximizeInPlace(a.maximumWorld))}return!t||!i?{min:b.Zero(),max:b.Zero()}:{min:t,max:i}}static Center(e){let t=e instanceof Array?n.MinMax(e):e;return b.Center(t.min,t.max)}static MergeMeshes(e,t=!0,i,r,s,a){return Y_(n._MergeMeshesCoroutine(e,t,i,r,s,a,!1))}static async MergeMeshesAsync(e,t=!0,i,r,s,a){return await gV(n._MergeMeshesCoroutine(e,t,i,r,s,a,!0),pV())}static*_MergeMeshesCoroutine(e,t=!0,i,r,s,a,o){if(e=e.filter(Boolean),e.length===0)return null;let l;if(!i){let R=0;for(l=0;l=65536)return J.Warn("Cannot merge meshes because resulting mesh will have more than 65536 vertices. Please use allow32BitsIndices = true to use 32 bits indices"),null}let c=e[0];a&&(s=!1,e.sort((R,I)=>{var y,M,D,O;return((M=(y=R.material)==null?void 0:y.uniqueId)!=null?M:-1)-((O=(D=I.material)==null?void 0:D.uniqueId)!=null?O:-1)}));let f=new Array,h=new Array,d=new Array,u=e[0].sideOrientation;for(l=0;lMath.max(y,M.start+M.count),0);if(a)if(R.material){let y=R.material;if(y instanceof Sm){for(let M=0;M1){let R=0;for(let I=1;I{let I=R.computeWorldMatrix(!0);return{vertexData:Ie.ExtractFromMesh(R,!1,!1),transform:I}},{vertexData:_,transform:p}=m(e[0]);o&&(yield);let g=new Array(e.length-1);for(let R=1;R{throw Xe("GroundMesh")};j._GoldbergMeshParser=(n,e)=>{throw Xe("GoldbergMesh")};j._LinesMeshParser=(n,e)=>{throw Xe("LinesMesh")};j._GreasedLineMeshParser=(n,e)=>{throw Xe("GreasedLineMesh")};j._GreasedLineRibbonMeshParser=(n,e)=>{throw Xe("GreasedLineRibbonMesh")};j._TrailMeshParser=(n,e)=>{throw Xe("TrailMesh")};j._GaussianSplattingMeshParser=(n,e)=>{throw Xe("GaussianSplattingMesh")};j._GaussianSplattingPartProxyMeshParser=(n,e)=>{throw Xe("GaussianSplattingPartProxyMesh")};j._GaussianSplattingCompoundMeshParser=(n,e)=>{throw Xe("GaussianSplattingCompoundMesh")};Ft("BABYLON.Mesh",j)});var Am,KC=C(()=>{ro();Pl();An();Am=class{constructor(){this._zoomStopsAnimation=!1,this._idleRotationSpeed=.05,this._idleRotationWaitTime=2e3,this._idleRotationSpinupTime=2e3,this.targetAlpha=null,this._attachedCamera=null,this._isPointerDown=!1,this._lastFrameTime=null,this._lastInteractionTime=-1/0,this._cameraRotationSpeed=0,this._lastFrameRadius=0}get name(){return"AutoRotation"}set zoomStopsAnimation(e){this._zoomStopsAnimation=e}get zoomStopsAnimation(){return this._zoomStopsAnimation}set idleRotationSpeed(e){this._idleRotationSpeed=e}get idleRotationSpeed(){return this._idleRotationSpeed}set idleRotationWaitTime(e){this._idleRotationWaitTime=e}get idleRotationWaitTime(){return this._idleRotationWaitTime}set idleRotationSpinupTime(e){this._idleRotationSpinupTime=e}get idleRotationSpinupTime(){return this._idleRotationSpinupTime}get rotationInProgress(){return Math.abs(this._cameraRotationSpeed)>0}get attachedNode(){return this._attachedCamera}init(){}attach(e){this._attachedCamera=e;let t=this._attachedCamera.getScene();this._onPrePointerObservableObserver=t.onPrePointerObservable.add(i=>{if(i.type===it.POINTERDOWN){this._isPointerDown=!0;return}i.type===it.POINTERUP&&(this._isPointerDown=!1)}),this._onAfterCheckInputsObserver=e.onAfterCheckInputsObservable.add(()=>{if(this._reachTargetAlpha())return;let i=dr.Now,r=0;this._lastFrameTime!=null&&(r=i-this._lastFrameTime),this._lastFrameTime=i,this._applyUserInteraction();let s=i-this._lastInteractionTime-this._idleRotationWaitTime,a=Math.max(Math.min(s/this._idleRotationSpinupTime,1),0);this._cameraRotationSpeed=this._idleRotationSpeed*a,this._attachedCamera&&(this._attachedCamera.alpha-=this._cameraRotationSpeed*(r/1e3))})}detach(){if(!this._attachedCamera)return;let e=this._attachedCamera.getScene();this._onPrePointerObservableObserver&&e.onPrePointerObservable.remove(this._onPrePointerObservableObserver),this._attachedCamera.onAfterCheckInputsObservable.remove(this._onAfterCheckInputsObserver),this._attachedCamera=null,this._lastFrameTime=null}resetLastInteractionTime(e){this._lastInteractionTime=e!=null?e:dr.Now}_reachTargetAlpha(){return this._attachedCamera&&this.targetAlpha?Math.abs(this._attachedCamera.alpha-this.targetAlpha){Ch();fo=class n{constructor(){this._easingMode=n.EASINGMODE_EASEIN}setEasingMode(e){let t=Math.min(Math.max(e,0),2);this._easingMode=t}getEasingMode(){return this._easingMode}easeInCore(e){throw new Error("You must implement this method")}ease(e){switch(this._easingMode){case n.EASINGMODE_EASEIN:return this.easeInCore(e);case n.EASINGMODE_EASEOUT:return 1-this.easeInCore(1-e)}return e>=.5?(1-this.easeInCore((1-e)*2))*.5+.5:this.easeInCore(e*2)*.5}};fo.EASINGMODE_EASEIN=0;fo.EASINGMODE_EASEOUT=1;fo.EASINGMODE_EASEINOUT=2;fA=class extends fo{constructor(e=1){super(),this.amplitude=e}easeInCore(e){let t=Math.max(0,this.amplitude);return Math.pow(e,3)-e*t*Math.sin(3.141592653589793*e)}},hA=class extends fo{constructor(e=2){super(),this.exponent=e}easeInCore(e){return this.exponent<=0?e:(Math.exp(this.exponent*e)-1)/(Math.exp(this.exponent)-1)}}});var vf,qC=C(()=>{vf=class n{constructor(e,t,i){this.name=e,this.from=t,this.to=i}clone(){return new n(this.name,this.from,this.to)}}});var ZC,QC,$C,JC,ey,ty,ho,ft,Ef=C(()=>{Ge();zt();xn();Vi();qC();zs();hT();yh();Er();ZC=Object.freeze(new ze(0,0,0,0)),QC=Object.freeze(b.Zero()),$C=Object.freeze(Ne.Zero()),JC=Object.freeze(Ol.Zero()),ey=Object.freeze(Te.Black()),ty=Object.freeze(new lt(0,0,0,0)),ho={key:0,repeatCount:0,loopMode:2},ft=class n{static _PrepareAnimation(e,t,i,r,s,a,o,l){let c;if(!isNaN(parseFloat(s))&&isFinite(s)?c=n.ANIMATIONTYPE_FLOAT:s instanceof ze?c=n.ANIMATIONTYPE_QUATERNION:s instanceof b?c=n.ANIMATIONTYPE_VECTOR3:s instanceof Ne?c=n.ANIMATIONTYPE_VECTOR2:s instanceof Te?c=n.ANIMATIONTYPE_COLOR3:s instanceof lt?c=n.ANIMATIONTYPE_COLOR4:s instanceof Ol&&(c=n.ANIMATIONTYPE_SIZE),c==null)return null;let f=new n(e,t,i,c,o),h=[{frame:0,value:s},{frame:r,value:a}];return f.setKeys(h),l!==void 0&&f.setEasingFunction(l),f}static CreateAnimation(e,t,i,r){let s=new n(e+"Animation",e,i,t,n.ANIMATIONLOOPMODE_CONSTANT);return s.setEasingFunction(r),s}static CreateAndStartAnimation(e,t,i,r,s,a,o,l,c,f,h){let d=n._PrepareAnimation(e,i,r,s,a,o,l,c);return!d||(t.getScene&&(h=t.getScene()),!h)?null:h.beginDirectAnimation(t,[d],0,s,d.loopMode!==n.ANIMATIONLOOPMODE_CONSTANT,1,f)}static CreateAndStartHierarchyAnimation(e,t,i,r,s,a,o,l,c,f,h){let d=n._PrepareAnimation(e,r,s,a,o,l,c,f);return d?t.getScene().beginDirectHierarchyAnimation(t,i,[d],0,a,d.loopMode===1,1,h):null}static CreateMergeAndStartAnimation(e,t,i,r,s,a,o,l,c,f){let h=n._PrepareAnimation(e,i,r,s,a,o,l,c);return h?(t.animations.push(h),t.getScene().beginAnimation(t,0,s,h.loopMode===1,1,f)):null}static MakeAnimationAdditive(e,t,i,r=!1,s){var v,x;let a;typeof t=="object"?a=t:a={referenceFrame:t!=null?t:0,range:i,cloneOriginalAnimation:r,clonedAnimationName:s};let o=e;if(a.cloneOriginalAnimation&&(o=e.clone(),o.name=a.clonedAnimationName||o.name),!o._keys.length)return o;let l=a.referenceFrame&&a.referenceFrame>=0?a.referenceFrame:0,c=0,f=o._keys[0],h=o._keys.length-1,d=o._keys[h],u={referenceValue:f.value,referencePosition:Q.Vector3[0],referenceQuaternion:Q.Quaternion[0],referenceScaling:Q.Vector3[1],keyPosition:Q.Vector3[2],keyQuaternion:Q.Quaternion[1],keyScaling:Q.Vector3[3]},m=f.frame,_=d.frame;if(a.range){let A=o.getRange(a.range);A&&(m=A.from,_=A.to)}else m=(v=a.fromFrame)!=null?v:m,_=(x=a.toFrame)!=null?x:_;if(m!==f.frame&&(c=o.createKeyForFrame(m)),_!==d.frame&&(h=o.createKeyForFrame(_)),o._keys.length===1){let A=o._getKeyValue(o._keys[0]);u.referenceValue=A.clone?A.clone():A}else if(l<=f.frame){let A=o._getKeyValue(f.value);u.referenceValue=A.clone?A.clone():A}else if(l>=d.frame){let A=o._getKeyValue(d.value);u.referenceValue=A.clone?A.clone():A}else{ho.key=0;let A=o._interpolate(l,ho);u.referenceValue=A.clone?A.clone():A}o.dataType===n.ANIMATIONTYPE_QUATERNION?u.referenceValue.normalize().conjugateInPlace():o.dataType===n.ANIMATIONTYPE_MATRIX&&(u.referenceValue.decompose(u.referenceScaling,u.referenceQuaternion,u.referencePosition),u.referenceQuaternion.normalize().conjugateInPlace());let p=Number.MAX_VALUE,g=a.clipKeys?[]:null;for(let A=c;A<=h;A++){let S=o._keys[A];if((g||a.cloneOriginalAnimation)&&(S={frame:S.frame,value:S.value.clone?S.value.clone():S.value,inTangent:S.inTangent,outTangent:S.outTangent,interpolation:S.interpolation,lockedTangent:S.lockedTangent,easingFunction:S.easingFunction},g&&(p===Number.MAX_VALUE&&(p=S.frame),S.frame-=p,g.push(S))),!(A&&o.dataType!==n.ANIMATIONTYPE_FLOAT&&S.value===f.value))switch(o.dataType){case n.ANIMATIONTYPE_MATRIX:S.value.decompose(u.keyScaling,u.keyQuaternion,u.keyPosition),u.keyPosition.subtractInPlace(u.referencePosition),u.keyScaling.divideInPlace(u.referenceScaling),u.referenceQuaternion.multiplyToRef(u.keyQuaternion,u.keyQuaternion),K.ComposeToRef(u.keyScaling,u.keyQuaternion,u.keyPosition,S.value);break;case n.ANIMATIONTYPE_QUATERNION:u.referenceValue.multiplyToRef(S.value,S.value);break;case n.ANIMATIONTYPE_VECTOR2:case n.ANIMATIONTYPE_VECTOR3:case n.ANIMATIONTYPE_COLOR3:case n.ANIMATIONTYPE_COLOR4:S.value.subtractToRef(u.referenceValue,S.value);break;case n.ANIMATIONTYPE_SIZE:S.value.width-=u.referenceValue.width,S.value.height-=u.referenceValue.height;break;default:S.value-=u.referenceValue}}return g&&o.setKeys(g,!0),o}static TransitionTo(e,t,i,r,s,a,o,l=null,c=!0,f){if(o<=0)return i[e]=t,l&&l(),null;let h=s*(o/1e3);return a.setKeys(f!=null?f:[{frame:0,value:i[e].clone?i[e].clone():i[e]},{frame:h,value:t}]),i.animations||(i.animations=[]),i.animations.push(a),r.beginAnimation(i,0,h,!1,1,l!=null?l:void 0,void 0,c)}get runtimeAnimations(){return this._runtimeAnimations}get hasRunningRuntimeAnimations(){for(let e of this._runtimeAnimations)if(!e.isStopped())return!0;return!1}constructor(e,t,i,r,s,a){this.name=e,this.targetProperty=t,this.framePerSecond=i,this.dataType=r,this.loopMode=s,this.enableBlending=a,this._easingFunction=null,this._runtimeAnimations=new Array,this._events=new Array,this.blendingSpeed=.01,this._ranges={},this._coreAnimation=null,this.targetPropertyPath=t.split("."),this.dataType=r,this.loopMode=s===void 0?n.ANIMATIONLOOPMODE_CYCLE:s,this.uniqueId=n._UniqueIdGenerator++}toString(e){let t="Name: "+this.name+", property: "+this.targetProperty;if(t+=", datatype: "+["Float","Vector3","Quaternion","Matrix","Color3","Vector2"][this.dataType],t+=", nKeys: "+(this._keys?this._keys.length:"none"),t+=", nRanges: "+(this._ranges?Object.keys(this._ranges).length:"none"),e){t+=", Ranges: {";let i=!0;for(let r in this._ranges)i||(t+=", "),i=!1,t+=r;t+="}"}return t}addEvent(e){this._events.push(e),this._events.sort((t,i)=>t.frame-i.frame)}removeEvents(e){for(let t=0;t=0;a--)this._keys[a].frame>=r&&this._keys[a].frame<=s&&this._keys.splice(a,1)}this._ranges[e]=null}}getRange(e){return this._ranges[e]}getKeys(){return this._keys}getHighestFrame(){let e=0;for(let t=0,i=this._keys.length;t0)return t.highLimitValue.clone?t.highLimitValue.clone():t.highLimitValue;let r=this._keys,s;if(this._coreAnimation)s=this._coreAnimation._key;else{let _=r.length;for(s=t.key;s>=0&&e=r[s+1].frame;)++s;if(t.key=s,s<0)return i?void 0:this._getKeyValue(r[0].value);if(s+1>_-1)return i?void 0:this._getKeyValue(r[_-1].value);this._key=s}let a=r[s],o=r[s+1];if(i&&(e===a.frame||e===o.frame))return;let l=this._getKeyValue(a.value),c=this._getKeyValue(o.value);if(a.interpolation===1)return o.frame>e?l:c;let f=a.outTangent!==void 0&&o.inTangent!==void 0,h=o.frame-a.frame,d=(e-a.frame)/h,u=a.easingFunction||this.getEasingFunction();switch(u&&(d=u.ease(d)),this.dataType){case n.ANIMATIONTYPE_FLOAT:{let _=f?this.floatInterpolateFunctionWithTangents(l,a.outTangent*h,c,o.inTangent*h,d):this.floatInterpolateFunction(l,c,d);switch(t.loopMode){case n.ANIMATIONLOOPMODE_CYCLE:case n.ANIMATIONLOOPMODE_CONSTANT:case n.ANIMATIONLOOPMODE_YOYO:return _;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return((m=t.offsetValue)!=null?m:0)*t.repeatCount+_}break}case n.ANIMATIONTYPE_QUATERNION:{let _=f?this.quaternionInterpolateFunctionWithTangents(l,a.outTangent.scale(h),c,o.inTangent.scale(h),d):this.quaternionInterpolateFunction(l,c,d);switch(t.loopMode){case n.ANIMATIONLOOPMODE_CYCLE:case n.ANIMATIONLOOPMODE_CONSTANT:case n.ANIMATIONLOOPMODE_YOYO:return _;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return _.addInPlace((t.offsetValue||ZC).scale(t.repeatCount))}return _}case n.ANIMATIONTYPE_VECTOR3:{let _=f?this.vector3InterpolateFunctionWithTangents(l,a.outTangent.scale(h),c,o.inTangent.scale(h),d):this.vector3InterpolateFunction(l,c,d);switch(t.loopMode){case n.ANIMATIONLOOPMODE_CYCLE:case n.ANIMATIONLOOPMODE_CONSTANT:case n.ANIMATIONLOOPMODE_YOYO:return _;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return _.add((t.offsetValue||QC).scale(t.repeatCount))}break}case n.ANIMATIONTYPE_VECTOR2:{let _=f?this.vector2InterpolateFunctionWithTangents(l,a.outTangent.scale(h),c,o.inTangent.scale(h),d):this.vector2InterpolateFunction(l,c,d);switch(t.loopMode){case n.ANIMATIONLOOPMODE_CYCLE:case n.ANIMATIONLOOPMODE_CONSTANT:case n.ANIMATIONLOOPMODE_YOYO:return _;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return _.add((t.offsetValue||$C).scale(t.repeatCount))}break}case n.ANIMATIONTYPE_SIZE:{switch(t.loopMode){case n.ANIMATIONLOOPMODE_CYCLE:case n.ANIMATIONLOOPMODE_CONSTANT:case n.ANIMATIONLOOPMODE_YOYO:return this.sizeInterpolateFunction(l,c,d);case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return this.sizeInterpolateFunction(l,c,d).add((t.offsetValue||JC).scale(t.repeatCount))}break}case n.ANIMATIONTYPE_COLOR3:{let _=f?this.color3InterpolateFunctionWithTangents(l,a.outTangent.scale(h),c,o.inTangent.scale(h),d):this.color3InterpolateFunction(l,c,d);switch(t.loopMode){case n.ANIMATIONLOOPMODE_CYCLE:case n.ANIMATIONLOOPMODE_CONSTANT:case n.ANIMATIONLOOPMODE_YOYO:return _;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return _.add((t.offsetValue||ey).scale(t.repeatCount))}break}case n.ANIMATIONTYPE_COLOR4:{let _=f?this.color4InterpolateFunctionWithTangents(l,a.outTangent.scale(h),c,o.inTangent.scale(h),d):this.color4InterpolateFunction(l,c,d);switch(t.loopMode){case n.ANIMATIONLOOPMODE_CYCLE:case n.ANIMATIONLOOPMODE_CONSTANT:case n.ANIMATIONLOOPMODE_YOYO:return _;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return _.add((t.offsetValue||ty).scale(t.repeatCount))}break}case n.ANIMATIONTYPE_MATRIX:{switch(t.loopMode){case n.ANIMATIONLOOPMODE_CYCLE:case n.ANIMATIONLOOPMODE_CONSTANT:case n.ANIMATIONLOOPMODE_YOYO:return n.AllowMatricesInterpolation?this.matrixInterpolateFunction(l,c,d,t.workValue):l;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return l}break}}return 0}matrixInterpolateFunction(e,t,i,r){return n.AllowMatrixDecomposeForInterpolation?r?(K.DecomposeLerpToRef(e,t,i,r),r):K.DecomposeLerp(e,t,i):r?(K.LerpToRef(e,t,i,r),r):K.Lerp(e,t,i)}clone(e=!1){let t=new n(this.name,this.targetPropertyPath.join("."),this.framePerSecond,this.dataType,this.loopMode);if(t.enableBlending=this.enableBlending,t.blendingSpeed=this.blendingSpeed,this._keys&&t.setKeys(this._keys,!1,e),this._ranges){t._ranges={};for(let i in this._ranges){let r=this._ranges[i];r&&(t._ranges[i]=r.clone())}}return t}setKeys(e,t=!1,i=!1){if(t)this._keys=e;else if(this._keys=e.slice(0),i)for(let r=0;r=2&&(l=o.values[1]),o.values.length>=3&&(c=o.values[2]),o.values.length>=4&&(f=o.values[3]);break;case n.ANIMATIONTYPE_QUATERNION:if(s=ze.FromArray(o.values),o.values.length>=8){let d=ze.FromArray(o.values.slice(4,8));d.equals(ze.Zero())||(l=d)}if(o.values.length>=12){let d=ze.FromArray(o.values.slice(8,12));d.equals(ze.Zero())||(c=d)}o.values.length>=13&&(f=o.values[12]);break;case n.ANIMATIONTYPE_MATRIX:s=K.FromArray(o.values),o.values.length>=17&&(f=o.values[16]);break;case n.ANIMATIONTYPE_COLOR3:s=Te.FromArray(o.values),o.values[3]&&(l=Te.FromArray(o.values[3])),o.values[4]&&(c=Te.FromArray(o.values[4])),o.values[5]&&(f=o.values[5]);break;case n.ANIMATIONTYPE_COLOR4:s=lt.FromArray(o.values),o.values[4]&&(l=lt.FromArray(o.values[4])),o.values[5]&&(c=lt.FromArray(o.values[5])),o.values[6]&&(f=lt.FromArray(o.values[6]));break;case n.ANIMATIONTYPE_VECTOR3:default:s=b.FromArray(o.values),o.values[3]&&(l=b.FromArray(o.values[3])),o.values[4]&&(c=b.FromArray(o.values[4])),o.values[5]&&(f=o.values[5]);break}let h={};h.frame=o.frame,h.value=s,l!=null&&(h.inTangent=l),c!=null&&(h.outTangent=c),f!=null&&(h.interpolation=f),r.push(h)}if(t.setKeys(r),e.ranges)for(a=0;a{let s=new br;s.addEventListener("readystatechange",()=>{if(s.readyState==4)if(s.status==200){let a=JSON.parse(s.responseText);if(a.animations&&(a=a.animations),a.length){let o=[];for(let l of a)o.push(this.Parse(l));i(o)}else{let o=this.Parse(a);e&&(o.name=e),i(o)}}else r("Unable to load the animation")}),s.open("GET",t),s.send()})}static async ParseFromSnippetAsync(e){return await new Promise((t,i)=>{let r=new br;r.addEventListener("readystatechange",()=>{if(r.readyState==4)if(r.status==200){let s=JSON.parse(JSON.parse(r.responseText).jsonPayload);if(s.animations){let a=JSON.parse(s.animations),o=[];for(let l of a.animations){let c=this.Parse(l);c.snippetId=e,o.push(c)}t(o)}else{let a=JSON.parse(s.animation),o=this.Parse(a);o.snippetId=e,t(o)}}else i("Unable to load the snippet "+e)}),r.open("GET",this.SnippetUrl+"/"+e.replace(/#/g,"/")),r.send()})}};ft._UniqueIdGenerator=0;ft.AllowMatricesInterpolation=!1;ft.AllowMatrixDecomposeForInterpolation=!0;ft.InheritOriginalValueFromActiveAnimations=!1;ft.SnippetUrl="https://snippet.babylonjs.com";ft.ANIMATIONTYPE_FLOAT=0;ft.ANIMATIONTYPE_VECTOR3=1;ft.ANIMATIONTYPE_QUATERNION=2;ft.ANIMATIONTYPE_MATRIX=3;ft.ANIMATIONTYPE_COLOR3=4;ft.ANIMATIONTYPE_COLOR4=7;ft.ANIMATIONTYPE_VECTOR2=5;ft.ANIMATIONTYPE_SIZE=6;ft.ANIMATIONLOOPMODE_RELATIVE=0;ft.ANIMATIONLOOPMODE_CYCLE=1;ft.ANIMATIONLOOPMODE_CONSTANT=2;ft.ANIMATIONLOOPMODE_YOYO=4;ft.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT=5;ft.CreateFromSnippetAsync=ft.ParseFromSnippetAsync;Ft("BABYLON.Animation",ft);_i._AnimationRangeFactory=(n,e,t)=>new vf(n,e,t)});var xm,NV=C(()=>{jC();Ef();xm=class n{constructor(){this.transitionDuration=450,this.lowerRadiusTransitionRange=2,this.upperRadiusTransitionRange=-2,this._autoTransitionRange=!1,this._attachedCamera=null,this._radiusIsAnimating=!1,this._radiusBounceTransition=null,this._animatables=new Array}get name(){return"Bouncing"}get autoTransitionRange(){return this._autoTransitionRange}set autoTransitionRange(e){if(this._autoTransitionRange===e)return;this._autoTransitionRange=e;let t=this._attachedCamera;t&&(e?this._onMeshTargetChangedObserver=t.onMeshTargetChangedObservable.add(i=>{if(i&&(i.computeWorldMatrix(!0),i.getBoundingInfo)){let r=i.getBoundingInfo().diagonalLength;this.lowerRadiusTransitionRange=r*.05,this.upperRadiusTransitionRange=r*.05}}):this._onMeshTargetChangedObserver&&t.onMeshTargetChangedObservable.remove(this._onMeshTargetChangedObserver))}get attachedNode(){return this._attachedCamera}init(){}attach(e){this._attachedCamera=e,this._onAfterCheckInputsObserver=e.onAfterCheckInputsObservable.add(()=>{this._attachedCamera&&(this._isRadiusAtLimit(this._attachedCamera.lowerRadiusLimit)&&this._applyBoundRadiusAnimation(this.lowerRadiusTransitionRange),this._isRadiusAtLimit(this._attachedCamera.upperRadiusLimit)&&this._applyBoundRadiusAnimation(this.upperRadiusTransitionRange))})}detach(){this._attachedCamera&&(this._onAfterCheckInputsObserver&&this._attachedCamera.onAfterCheckInputsObservable.remove(this._onAfterCheckInputsObserver),this._onMeshTargetChangedObserver&&this._attachedCamera.onMeshTargetChangedObservable.remove(this._onMeshTargetChangedObserver),this._attachedCamera=null)}_isRadiusAtLimit(e){return this._attachedCamera?this._attachedCamera.radius===e&&!this._radiusIsAnimating:!1}_applyBoundRadiusAnimation(e){if(!this._attachedCamera)return;this._radiusBounceTransition||(n.EasingFunction.setEasingMode(n.EasingMode),this._radiusBounceTransition=ft.CreateAnimation("radius",ft.ANIMATIONTYPE_FLOAT,60,n.EasingFunction)),this._cachedWheelPrecision=this._attachedCamera.wheelPrecision,this._attachedCamera.wheelPrecision=1/0,this._attachedCamera.inertialRadiusOffset=0,this.stopAllAnimations(),this._radiusIsAnimating=!0;let t=ft.TransitionTo("radius",this._attachedCamera.radius+e,this._attachedCamera,this._attachedCamera.getScene(),60,this._radiusBounceTransition,this.transitionDuration,()=>this._clearAnimationLocks());t&&this._animatables.push(t)}_clearAnimationLocks(){this._radiusIsAnimating=!1,this._attachedCamera&&(this._attachedCamera.wheelPrecision=this._cachedWheelPrecision)}stopAllAnimations(){for(this._attachedCamera&&(this._attachedCamera.animations=[]);this._animatables.length;)this._animatables[0].onAnimationEnd=null,this._animatables[0].stop(),this._animatables.shift()}};xm.EasingFunction=new fA(.3);xm.EasingMode=fo.EASINGMODE_EASEOUT});var Sf,wV=C(()=>{jC();hi();ro();Pl();Ge();Ef();Sf=class n{constructor(){this.onTargetFramingAnimationEndObservable=new te,this._mode=n.FitFrustumSidesMode,this._radiusScale=1,this._positionScale=.5,this._defaultElevation=.3,this._elevationReturnTime=1500,this._elevationReturnWaitTime=1e3,this._zoomStopsAnimation=!1,this._framingTime=1500,this.autoCorrectCameraLimitsAndSensibility=!0,this._attachedCamera=null,this._isPointerDown=!1,this._lastInteractionTime=-1/0,this._animatables=new Array,this._betaIsAnimating=!1}get name(){return"Framing"}set mode(e){this._mode=e}get mode(){return this._mode}set radiusScale(e){this._radiusScale=e}get radiusScale(){return this._radiusScale}set positionScale(e){this._positionScale=e}get positionScale(){return this._positionScale}set defaultElevation(e){this._defaultElevation=e}get defaultElevation(){return this._defaultElevation}set elevationReturnTime(e){this._elevationReturnTime=e}get elevationReturnTime(){return this._elevationReturnTime}set elevationReturnWaitTime(e){this._elevationReturnWaitTime=e}get elevationReturnWaitTime(){return this._elevationReturnWaitTime}set zoomStopsAnimation(e){this._zoomStopsAnimation=e}get zoomStopsAnimation(){return this._zoomStopsAnimation}set framingTime(e){this._framingTime=e}get framingTime(){return this._framingTime}get attachedNode(){return this._attachedCamera}init(){}attach(e){this._attachedCamera=e;let t=this._attachedCamera.getScene();n.EasingFunction.setEasingMode(n.EasingMode),this._onPrePointerObservableObserver=t.onPrePointerObservable.add(i=>{if(i.type===it.POINTERDOWN){this._isPointerDown=!0;return}i.type===it.POINTERUP&&(this._isPointerDown=!1)}),this._onMeshTargetChangedObserver=e.onMeshTargetChangedObservable.add(i=>{i&&i.getBoundingInfo&&this.zoomOnMesh(i,void 0,()=>{this.onTargetFramingAnimationEndObservable.notifyObservers()})}),this._onAfterCheckInputsObserver=e.onAfterCheckInputsObservable.add(()=>{this._applyUserInteraction(),this._maintainCameraAboveGround()})}detach(){if(!this._attachedCamera)return;let e=this._attachedCamera.getScene();this._onPrePointerObservableObserver&&e.onPrePointerObservable.remove(this._onPrePointerObservableObserver),this._onAfterCheckInputsObserver&&this._attachedCamera.onAfterCheckInputsObservable.remove(this._onAfterCheckInputsObserver),this._onMeshTargetChangedObserver&&this._attachedCamera.onMeshTargetChangedObservable.remove(this._onMeshTargetChangedObserver),this._attachedCamera=null}zoomOnMesh(e,t=!1,i=null){e.computeWorldMatrix(!0);let r=e.getBoundingInfo().boundingBox;this.zoomOnBoundingInfo(r.minimumWorld,r.maximumWorld,t,i)}zoomOnMeshHierarchy(e,t=!1,i=null){e.computeWorldMatrix(!0);let r=e.getHierarchyBoundingVectors(!0);this.zoomOnBoundingInfo(r.min,r.max,t,i)}zoomOnMeshesHierarchy(e,t=!1,i=null){let r=new b(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),s=new b(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE);for(let a=0;a{this.stopAllAnimations(),r&&r(),this._attachedCamera&&this._attachedCamera.useInputToRestoreState&&this._attachedCamera.storeState()}),f&&this._animatables.push(f),!0}_calculateLowerRadiusFromModelBoundingSphere(e,t){let i=this._attachedCamera;if(!i)return 0;let r=i._calculateLowerRadiusFromModelBoundingSphere(e,t,this._radiusScale);return i.lowerRadiusLimit&&this._mode===n.IgnoreBoundsSizeMode&&(r=ri.upperRadiusLimit?i.upperRadiusLimit:r),r}_maintainCameraAboveGround(){if(this._elevationReturnTime<0)return;let e=dr.Now-this._lastInteractionTime,t=Math.PI*.5-this._defaultElevation,i=Math.PI*.5;if(this._attachedCamera&&!this._betaIsAnimating&&this._attachedCamera.beta>i&&e>=this._elevationReturnWaitTime){this._betaIsAnimating=!0,this.stopAllAnimations(),this._betaTransition||(this._betaTransition=ft.CreateAnimation("beta",ft.ANIMATIONTYPE_FLOAT,60,n.EasingFunction));let r=ft.TransitionTo("beta",t,this._attachedCamera,this._attachedCamera.getScene(),60,this._betaTransition,this._elevationReturnTime,()=>{this._clearAnimationLocks(),this.stopAllAnimations()});r&&this._animatables.push(r)}}_clearAnimationLocks(){this._betaIsAnimating=!1}_applyUserInteraction(){this.isUserIsMoving&&(this._lastInteractionTime=dr.Now,this.stopAllAnimations(),this._clearAnimationLocks())}stopAllAnimations(){for(this._attachedCamera&&(this._attachedCamera.animations=[]);this._animatables.length;)this._animatables[0]&&(this._animatables[0].onAnimationEnd=null,this._animatables[0].stop()),this._animatables.shift()}get isUserIsMoving(){return this._attachedCamera?this._attachedCamera.inertialAlphaOffset!==0||this._attachedCamera.inertialBetaOffset!==0||this._attachedCamera.inertialRadiusOffset!==0||this._attachedCamera.inertialPanningX!==0||this._attachedCamera.inertialPanningY!==0||this._isPointerDown:!1}};Sf.EasingFunction=new hA;Sf.EasingMode=fo.EASINGMODE_EASEINOUT;Sf.IgnoreBoundsSizeMode=0;Sf.FitFrustumSidesMode=1});var dA,iy,vs,ry=C(()=>{kt();Ut();el();Ge();An();Pu();zs();_i.AddNodeConstructor("TargetCamera",(n,e)=>()=>new vs(n,b.Zero(),e));dA=K.Zero(),iy=ze.Identity(),vs=class n extends ut{constructor(e,t,i,r=!0){super(e,t,i,r),this.cameraDirection=new b(0,0,0),this.cameraRotation=new Ne(0,0),this.updateUpVectorFromRotation=!1,this.speed=2,this.noRotationConstraint=!1,this.invertRotation=!1,this.inverseRotationSpeed=.2,this._panningEpsilon=Nt,this._rotationEpsilon=Nt,this.lockedTarget=null,this._currentTarget=b.Zero(),this._initialFocalDistance=1,this._viewMatrix=K.Zero(),this._cameraTransformMatrix=K.Zero(),this._cameraRotationMatrix=K.Zero(),this._transformedReferencePoint=b.Zero(),this._deferredPositionUpdate=new b,this._deferredRotationQuaternionUpdate=new ze,this._deferredRotationUpdate=new b,this._deferredUpdated=!1,this._deferOnly=!1,this._cachedRotationZ=0,this._cachedQuaternionRotationZ=0,this._referencePoint=b.Forward(this.getScene().useRightHandedSystem),this.rotation=new b(0,this.getScene().useRightHandedSystem?Math.PI:0,0)}getFrontPosition(e){this.getWorldMatrix();let t=Q.Vector3[0],i=Q.Vector3[1];return i.set(0,0,this._scene.useRightHandedSystem?-1:1),this.getDirectionToRef(i,t),t.scaleInPlace(e),this.globalPosition.add(t)}_getLockedTargetPosition(){if(!this.lockedTarget)return null;if(this.lockedTarget.absolutePosition){let e=this.lockedTarget;e.computeWorldMatrix().getTranslationToRef(e.absolutePosition)}return this.lockedTarget.absolutePosition||this.lockedTarget}storeState(){return this._storedPosition=this.position.clone(),this._storedRotation=this.rotation.clone(),this.rotationQuaternion&&(this._storedRotationQuaternion=this.rotationQuaternion.clone()),super.storeState()}_restoreStateValues(){return super._restoreStateValues()?(this.position=this._storedPosition.clone(),this.rotation=this._storedRotation.clone(),this.rotationQuaternion&&this._storedRotationQuaternion&&(this.rotationQuaternion=this._storedRotationQuaternion.clone()),this.cameraDirection.copyFromFloats(0,0,0),this.cameraRotation.copyFromFloats(0,0),!0):!1}_initCache(){super._initCache(),this._cache.lockedTarget=new b(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),this._cache.rotation=new b(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),this._cache.rotationQuaternion=new ze(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE)}_updateCache(e){e||super._updateCache();let t=this._getLockedTargetPosition();t?this._cache.lockedTarget?this._cache.lockedTarget.copyFrom(t):this._cache.lockedTarget=t.clone():this._cache.lockedTarget=null,this._cache.rotation.copyFrom(this.rotation),this.rotationQuaternion&&this._cache.rotationQuaternion.copyFrom(this.rotationQuaternion)}_isSynchronizedViewMatrix(){if(!super._isSynchronizedViewMatrix())return!1;let e=this._getLockedTargetPosition();return(this._cache.lockedTarget?this._cache.lockedTarget.equals(e):!e)&&(this.rotationQuaternion?this.rotationQuaternion.equals(this._cache.rotationQuaternion):this._cache.rotation.equals(this.rotation))}_computeLocalCameraSpeed(){let e=this.getEngine();return this.speed*Math.sqrt(e.getDeltaTime()/(e.getFps()*100))}setTarget(e){this.upVector.normalize(),this._initialFocalDistance=e.subtract(this.position).length(),this.position.z===e.z&&(this.position.z+=Nt),this._referencePoint.normalize().scaleInPlace(this._initialFocalDistance),this.getScene().useRightHandedSystem?K.LookAtRHToRef(this.position,e,b.UpReadOnly,dA):K.LookAtLHToRef(this.position,e,b.UpReadOnly,dA),dA.invert();let t=this.rotationQuaternion||iy;ze.FromRotationMatrixToRef(dA,t),t.toEulerAnglesToRef(this.rotation),this.rotation.z=0}get target(){return this.getTarget()}set target(e){this.setTarget(e)}getTarget(){return this._currentTarget}_decideIfNeedsToMove(){return Math.abs(this.cameraDirection.x)>0||Math.abs(this.cameraDirection.y)>0||Math.abs(this.cameraDirection.z)>0}_updatePosition(){if(this.parent){this.parent.getWorldMatrix().invertToRef(Q.Matrix[0]),b.TransformNormalToRef(this.cameraDirection,Q.Matrix[0],Q.Vector3[0]),this._deferredPositionUpdate.addInPlace(Q.Vector3[0]),this._deferOnly?this._deferredUpdated=!0:this.position.copyFrom(this._deferredPositionUpdate);return}this._deferredPositionUpdate.addInPlace(this.cameraDirection),this._deferOnly?this._deferredUpdated=!0:this.position.copyFrom(this._deferredPositionUpdate)}_checkInputs(){let e=this.invertRotation?-this.inverseRotationSpeed:1,t=this._decideIfNeedsToMove(),i=this.cameraRotation.x||this.cameraRotation.y;this._deferredUpdated=!1,this._deferredRotationUpdate.copyFrom(this.rotation),this._deferredPositionUpdate.copyFrom(this.position),this.rotationQuaternion&&this._deferredRotationQuaternionUpdate.copyFrom(this.rotationQuaternion),t&&this._updatePosition(),i&&(this.rotationQuaternion&&this.rotationQuaternion.toEulerAnglesToRef(this._deferredRotationUpdate),this._deferredRotationUpdate.x+=this.cameraRotation.x*e,this._deferredRotationUpdate.y+=this.cameraRotation.y*e,this.noRotationConstraint||(this._deferredRotationUpdate.x>1.570796&&(this._deferredRotationUpdate.x=1.570796),this._deferredRotationUpdate.x<-1.570796&&(this._deferredRotationUpdate.x=-1.570796)),this._deferOnly?this._deferredUpdated=!0:this.rotation.copyFrom(this._deferredRotationUpdate),this.rotationQuaternion&&this._deferredRotationUpdate.lengthSquared()&&(ze.RotationYawPitchRollToRef(this._deferredRotationUpdate.y,this._deferredRotationUpdate.x,this._deferredRotationUpdate.z,this._deferredRotationQuaternionUpdate),this._deferOnly?this._deferredUpdated=!0:this.rotationQuaternion.copyFrom(this._deferredRotationQuaternionUpdate)));let r=this.speed*this._panningEpsilon,s=this.speed*this._rotationEpsilon;t&&(Math.abs(this.cameraDirection.x){Pt();Er();el();Dn={},Rm=class{constructor(e){this.attachedToElement=!1,this.attached={},this.camera=e,this.checkInputs=()=>{}}add(e){let t=e.getSimpleName();if(this.attached[t]){J.Warn("camera input of type "+t+" already exists on camera");return}this.attached[t]=e,e.camera=this.camera,e.checkInputs&&(this.checkInputs=this._addCheckInputs(e.checkInputs.bind(e))),this.attachedToElement&&e.attachControl(this.noPreventDefault)}remove(e){for(let t in this.attached){let i=this.attached[t];if(i===e){i.detachControl(),i.camera=null,delete this.attached[t],this.rebuildInputCheck();return}}}removeByType(e){for(let t in this.attached){let i=this.attached[t];i.getClassName()===e&&(i.detachControl(),i.camera=null,delete this.attached[t],this.rebuildInputCheck())}}_addCheckInputs(e){let t=this.checkInputs;return()=>{t(),e()}}attachInput(e){this.attachedToElement&&e.attachControl(this.noPreventDefault)}attachElement(e=!1){if(!this.attachedToElement){e=ut.ForceAttachControlToAlwaysPreventDefault?!1:e,this.attachedToElement=!0,this.noPreventDefault=e;for(let t in this.attached)this.attached[t].attachControl(e)}}detachElement(e=!1){for(let t in this.attached)this.attached[t].detachControl(),e&&(this.attached[t].camera=null);this.attachedToElement=!1}rebuildInputCheck(){this.checkInputs=()=>{};for(let e in this.attached){let t=this.attached[e];t.checkInputs&&(this.checkInputs=this._addCheckInputs(t.checkInputs.bind(t)))}}clear(){this.attachedToElement&&this.detachElement(!0),this.attached={},this.attachedToElement=!1,this.checkInputs=()=>{}}serialize(e){let t={};for(let i in this.attached){let r=this.attached[i],s=tt.Serialize(r);t[r.getClassName()]=s}e.inputsmgr=t}parse(e){let t=e.inputsmgr;if(t){this.clear();for(let i in t){let r=Dn[i];if(r){let s=t[i],a=tt.Parse(()=>new r,s,null);this.add(a)}}}else for(let i in this.attached){let r=Dn[this.attached[i].getClassName()];if(r){let s=tt.Parse(()=>new r,e,null);this.remove(this.attached[i]),this.add(s)}}}}});var q_,FV=C(()=>{kt();Ut();Ci();ro();q_=class{constructor(){this._currentMousePointerIdDown=-1,this.buttons=[0,1,2]}attachControl(e){e=de.BackCompatCameraNoPreventDefault(arguments);let t=this.camera.getEngine(),i=t.getInputElement(),r=0,s=null;this._pointA=null,this._pointB=null,this._altKey=!1,this._ctrlKey=!1,this._metaKey=!1,this._shiftKey=!1,this._buttonsPressed=0,this._pointerInput=o=>{var h,d;let l=o.event,c=l.pointerType==="touch";if(o.type!==it.POINTERMOVE&&this.buttons.indexOf(l.button)===-1)return;let f=l.target;if(this._altKey=l.altKey,this._ctrlKey=l.ctrlKey,this._metaKey=l.metaKey,this._shiftKey=l.shiftKey,this._buttonsPressed=l.buttons,t.isPointerLock){let u=l.movementX,m=l.movementY;this.onTouch(null,u,m),this._pointA=null,this._pointB=null}else{if(o.type!==it.POINTERDOWN&&o.type!==it.POINTERDOUBLETAP&&c&&((h=this._pointA)==null?void 0:h.pointerId)!==l.pointerId&&((d=this._pointB)==null?void 0:d.pointerId)!==l.pointerId)return;if(o.type===it.POINTERDOWN&&(this._currentMousePointerIdDown===-1||c)){try{f==null||f.setPointerCapture(l.pointerId)}catch(u){}if(this._pointA===null)this._pointA={x:l.clientX,y:l.clientY,pointerId:l.pointerId,type:l.pointerType,button:l.button};else if(this._pointB===null)this._pointB={x:l.clientX,y:l.clientY,pointerId:l.pointerId,type:l.pointerType,button:l.button};else return;this._currentMousePointerIdDown===-1&&!c&&(this._currentMousePointerIdDown=l.pointerId),this.onButtonDown(l),e||(l.preventDefault(),i&&i.focus())}else if(o.type===it.POINTERDOUBLETAP)this.onDoubleTap(l.pointerType);else if(o.type===it.POINTERUP&&(this._currentMousePointerIdDown===l.pointerId||c)){try{f==null||f.releasePointerCapture(l.pointerId)}catch(u){}c||(this._pointB=null),t._badOS?this._pointA=this._pointB=null:this._pointB&&this._pointA&&this._pointA.pointerId==l.pointerId?(this._pointA=this._pointB,this._pointB=null):this._pointA&&this._pointB&&this._pointB.pointerId==l.pointerId?this._pointB=null:this._pointA=this._pointB=null,(r!==0||s)&&(this.onMultiTouch(this._pointA,this._pointB,r,0,s,null),r=0,s=null),this._currentMousePointerIdDown=-1,this.onButtonUp(l),e||l.preventDefault()}else if(o.type===it.POINTERMOVE){if(e||l.preventDefault(),this._pointA&&this._pointB===null){let u=l.clientX-this._pointA.x,m=l.clientY-this._pointA.y;this._pointA.x=l.clientX,this._pointA.y=l.clientY,this.onTouch(this._pointA,u,m)}else if(this._pointA&&this._pointB){let u=this._pointA.pointerId===l.pointerId?this._pointA:this._pointB;u.x=l.clientX,u.y=l.clientY;let m=this._pointA.x-this._pointB.x,_=this._pointA.y-this._pointB.y,p=m*m+_*_,g={x:(this._pointA.x+this._pointB.x)/2,y:(this._pointA.y+this._pointB.y)/2,pointerId:l.pointerId,type:o.type};this.onMultiTouch(this._pointA,this._pointB,r,p,s,g),s=g,r=p}}}},this._observer=this.camera.getScene()._inputManager._addCameraPointerObserver(this._pointerInput,it.POINTERDOWN|it.POINTERUP|it.POINTERMOVE|it.POINTERDOUBLETAP),this._onLostFocus=()=>{this._pointA=this._pointB=null,r=0,s=null,this.onLostFocus()},this._contextMenuBind=o=>this.onContextMenu(o),i&&i.addEventListener("contextmenu",this._contextMenuBind,!1);let a=this.camera.getScene().getEngine().getHostWindow();a&&de.RegisterTopRootEvents(a,[{name:"blur",handler:this._onLostFocus}])}detachControl(){if(this._onLostFocus){let e=this.camera.getScene().getEngine().getHostWindow();e&&de.UnregisterTopRootEvents(e,[{name:"blur",handler:this._onLostFocus}])}if(this._observer){if(this.camera.getScene()._inputManager._removeCameraPointerObserver(this._observer),this._observer=null,this._contextMenuBind){let e=this.camera.getScene().getEngine().getInputElement();e&&e.removeEventListener("contextmenu",this._contextMenuBind)}this._onLostFocus=null}this._altKey=!1,this._ctrlKey=!1,this._metaKey=!1,this._shiftKey=!1,this._buttonsPressed=0,this._currentMousePointerIdDown=-1}getClassName(){return"BaseCameraPointersInput"}getSimpleName(){return"pointers"}onDoubleTap(e){}onTouch(e,t,i){}onMultiTouch(e,t,i,r,s,a){}onContextMenu(e){e.preventDefault()}onButtonDown(e){}onButtonUp(e){}onLostFocus(){}};P([w()],q_.prototype,"buttons",void 0)});var zh,BV=C(()=>{kt();Ut();FV();zh=class extends q_{constructor(){super(...arguments),this.pinchZoom=!0,this.multiTouchPanning=!0,this.multiTouchPanAndZoom=!0,this._isPinching=!1,this._twoFingerActivityCount=0,this._shouldStartPinchZoom=!1}_computePinchZoom(e,t){}_computeMultiTouchPanning(e,t){}onMultiTouch(e,t,i,r,s,a){i===0&&s===null||r===0&&a===null||(this.multiTouchPanAndZoom?(this._computePinchZoom(i,r),this._computeMultiTouchPanning(s,a)):this.multiTouchPanning&&this.pinchZoom?(this._twoFingerActivityCount++,this._isPinching||this._shouldStartPinchZoom?(this._computePinchZoom(i,r),this._isPinching=!0):this._computeMultiTouchPanning(s,a)):this.multiTouchPanning?this._computeMultiTouchPanning(s,a):this.pinchZoom&&this._computePinchZoom(i,r))}onButtonUp(e){this._twoFingerActivityCount=0,this._isPinching=!1}onLostFocus(){this._twoFingerActivityCount=0,this._isPinching=!1}};P([w()],zh.prototype,"pinchZoom",void 0);P([w()],zh.prototype,"multiTouchPanning",void 0);P([w()],zh.prototype,"multiTouchPanAndZoom",void 0)});var Xs,UV=C(()=>{kt();Ut();sl();BV();Xs=class n extends zh{constructor(){super(...arguments),this.buttons=[0,1,2],this.angularSensibilityX=1e3,this.angularSensibilityY=1e3,this.pinchPrecision=12,this.pinchDeltaPercentage=0,this.useNaturalPinchZoom=!1,this.panningSensibility=1e3,this.pinchInwards=!0,this._isPanClick=!1}getClassName(){return"ArcRotateCameraPointersInput"}_computeMultiTouchPanning(e,t){if(this.panningSensibility!==0&&e&&t){let i=t.x-e.x,r=t.y-e.y;this.camera.inertialPanningX+=-i/this.panningSensibility,this.camera.inertialPanningY+=r/this.panningSensibility}}_computePinchZoom(e,t){let i=this.camera.radius||n.MinimumRadiusForPinch;this.useNaturalPinchZoom?this.camera.radius=i*Math.sqrt(e)/Math.sqrt(t):this.pinchDeltaPercentage?this.camera.inertialRadiusOffset+=(t-e)*.001*i*this.pinchDeltaPercentage:this.camera.inertialRadiusOffset+=(t-e)/(this.pinchPrecision*(this.pinchInwards?1:-1)*(this.angularSensibilityX+this.angularSensibilityY)/2)}onTouch(e,t,i){this.panningSensibility!==0&&(this._ctrlKey&&this.camera._useCtrlForPanning||this._isPanClick)?(this.camera.inertialPanningX+=-t/this.panningSensibility,this.camera.inertialPanningY+=i/this.panningSensibility):(this.camera.inertialAlphaOffset-=t/this.angularSensibilityX,this.camera.inertialBetaOffset-=i/this.angularSensibilityY)}onDoubleTap(){this.camera.useInputToRestoreState&&this.camera.restoreState()}onMultiTouch(e,t,i,r,s,a){this._shouldStartPinchZoom=this._twoFingerActivityCount<20&&Math.abs(Math.sqrt(r)-Math.sqrt(i))>this.camera.pinchToPanMaxDistance,super.onMultiTouch(e,t,i,r,s,a)}onButtonDown(e){this._isPanClick=e.button===this.camera._panningMouseButton,super.onButtonDown(e)}onButtonUp(e){super.onButtonUp(e)}onLostFocus(){this._isPanClick=!1,super.onLostFocus()}};Xs.MinimumRadiusForPinch=.001;P([w()],Xs.prototype,"buttons",void 0);P([w()],Xs.prototype,"angularSensibilityX",void 0);P([w()],Xs.prototype,"angularSensibilityY",void 0);P([w()],Xs.prototype,"pinchPrecision",void 0);P([w()],Xs.prototype,"pinchDeltaPercentage",void 0);P([w()],Xs.prototype,"useNaturalPinchZoom",void 0);P([w()],Xs.prototype,"panningSensibility",void 0);Dn.ArcRotateCameraPointersInput=Xs});var Es,VV=C(()=>{kt();Ut();sl();FT();Ci();Es=class{constructor(){this.keysUp=[38],this.keysDown=[40],this.keysLeft=[37],this.keysRight=[39],this.keysReset=[220],this.panningSensibility=50,this.zoomingSensibility=25,this.useAltToZoom=!0,this.angularSpeed=.01,this._keys=new Array}attachControl(e){e=de.BackCompatCameraNoPreventDefault(arguments),!this._onCanvasBlurObserver&&(this._scene=this.camera.getScene(),this._engine=this._scene.getEngine(),this._onCanvasBlurObserver=this._engine.onCanvasBlurObservable.add(()=>{this._keys.length=0}),this._onKeyboardObserver=this._scene.onKeyboardObservable.add(t=>{let i=t.event;if(!i.metaKey){if(t.type===no.KEYDOWN)this._ctrlPressed=i.ctrlKey,this._altPressed=i.altKey,(this.keysUp.indexOf(i.keyCode)!==-1||this.keysDown.indexOf(i.keyCode)!==-1||this.keysLeft.indexOf(i.keyCode)!==-1||this.keysRight.indexOf(i.keyCode)!==-1||this.keysReset.indexOf(i.keyCode)!==-1)&&(this._keys.indexOf(i.keyCode)===-1&&this._keys.push(i.keyCode),i.preventDefault&&(e||i.preventDefault()));else if(this.keysUp.indexOf(i.keyCode)!==-1||this.keysDown.indexOf(i.keyCode)!==-1||this.keysLeft.indexOf(i.keyCode)!==-1||this.keysRight.indexOf(i.keyCode)!==-1||this.keysReset.indexOf(i.keyCode)!==-1){let r=this._keys.indexOf(i.keyCode);r>=0&&this._keys.splice(r,1),i.preventDefault&&(e||i.preventDefault())}}}))}detachControl(){this._scene&&(this._onKeyboardObserver&&this._scene.onKeyboardObservable.remove(this._onKeyboardObserver),this._onCanvasBlurObserver&&this._engine.onCanvasBlurObservable.remove(this._onCanvasBlurObserver),this._onKeyboardObserver=null,this._onCanvasBlurObserver=null),this._keys.length=0}checkInputs(){if(this._onKeyboardObserver){let e=this.camera;for(let t=0;t{kt();Ut();sl();ro();wu();Ge();An();BT();xn();Ci();bne=40,Tf=class{constructor(){this.wheelPrecision=3,this.zoomToMouseLocation=!1,this.wheelDeltaPercentage=0,this.customComputeDeltaFromMouseWheel=null,this._viewOffset=new b(0,0,0),this._globalOffset=new b(0,0,0),this._inertialPanning=b.Zero()}_computeDeltaFromMouseWheelLegacyEvent(e,t){let i,r=e*.01*this.wheelDeltaPercentage*t;return e>0?i=r/(1+this.wheelDeltaPercentage):i=r*(1+this.wheelDeltaPercentage),i}attachControl(e){e=de.BackCompatCameraNoPreventDefault(arguments),this._wheel=t=>{if(t.type!==it.POINTERWHEEL)return;let i=t.event,r,s=i.deltaMode===so.DOM_DELTA_LINE?bne:1,a=-(i.deltaY*s);if(this.customComputeDeltaFromMouseWheel)r=this.customComputeDeltaFromMouseWheel(a,this,i);else if(this.wheelDeltaPercentage){if(r=this._computeDeltaFromMouseWheelLegacyEvent(a,this.camera.radius),r>0){let o=this.camera.radius,l=this.camera.inertialRadiusOffset+r;for(let c=0;c<20&&!(o<=l||Math.abs(l*this.camera.inertia)<.001);c++)o-=l,l*=this.camera.inertia;o=wt(o,0,Number.MAX_VALUE),r=this._computeDeltaFromMouseWheelLegacyEvent(a,o)}}else r=a/(this.wheelPrecision*40);r&&(this.zoomToMouseLocation?(this._hitPlane||this._updateHitPlane(),this._zoomToMouse(r)):this.camera.inertialRadiusOffset+=r),i.preventDefault&&(e||i.preventDefault())},this._observer=this.camera.getScene()._inputManager._addCameraPointerObserver(this._wheel,it.POINTERWHEEL),this.zoomToMouseLocation&&this._inertialPanning.setAll(0)}detachControl(){this._observer&&(this.camera.getScene()._inputManager._removeCameraPointerObserver(this._observer),this._observer=null,this._wheel=null)}checkInputs(){if(!this.zoomToMouseLocation)return;let e=this.camera;0+e.inertialAlphaOffset+e.inertialBetaOffset+e.inertialRadiusOffset&&(this._updateHitPlane(),e.target.addInPlace(this._inertialPanning),this._inertialPanning.scaleInPlace(e.inertia),this._zeroIfClose(this._inertialPanning))}getClassName(){return"ArcRotateCameraMouseWheelInput"}getSimpleName(){return"mousewheel"}_updateHitPlane(){let e=this.camera,t=e.target.subtract(e.position);this._hitPlane=Qa.FromPositionAndNormal(e.target,t)}_getPosition(){var s;let e=this.camera,t=e.getScene(),i=t.createPickingRay(t.pointerX,t.pointerY,K.Identity(),e,!1);(e.targetScreenOffset.x!==0||e.targetScreenOffset.y!==0)&&(this._viewOffset.set(e.targetScreenOffset.x,e.targetScreenOffset.y,0),e.getViewMatrix().invertToRef(e._cameraTransformMatrix),this._globalOffset=b.TransformNormal(this._viewOffset,e._cameraTransformMatrix),i.origin.addInPlace(this._globalOffset));let r=0;return this._hitPlane&&(r=(s=i.intersectsPlane(this._hitPlane))!=null?s:0),i.origin.addInPlace(i.direction.scaleInPlace(r))}_zoomToMouse(e){var l,c;let t=this.camera,i=1-t.inertia;if(t.lowerRadiusLimit){let f=(l=t.lowerRadiusLimit)!=null?l:0;t.radius-(t.inertialRadiusOffset+e)/if&&(e=(t.radius-f)*i-t.inertialRadiusOffset)}let s=e/i/t.radius,a=this._getPosition(),o=Q.Vector3[6];a.subtractToRef(t.target,o),o.scaleInPlace(s),o.scaleInPlace(i),this._inertialPanning.addInPlace(o),t.inertialRadiusOffset+=e}_zeroIfClose(e){Math.abs(e.x){UV();VV();GV();sl();uA=class extends Rm{constructor(e){super(e)}addMouseWheel(){return this.add(new Tf),this}addPointers(){return this.add(new Xs),this}addKeyboard(){return this.add(new Es),this}}});function Ine(n){let e=Math.PI/2;return n.x===0&&n.z===0||(e=Math.acos(n.x/Math.sqrt(Math.pow(n.x,2)+Math.pow(n.z,2)))),n.z<0&&(e=2*Math.PI-e),e}function Mne(n,e){return Math.acos(n/e)}function Ln(n,e){return isNaN(n)?e:n}var gi,mA=C(()=>{kt();Ut();hi();Ge();xn();zs();Di();KC();NV();wV();el();ry();kV();An();Ci();Vi();_i.AddNodeConstructor("ArcRotateCamera",(n,e)=>()=>new gi(n,0,0,1,b.Zero(),e));gi=class n extends vs{get target(){return this._target}set target(e){this.setTarget(e)}get targetHost(){return this._targetHost}set targetHost(e){e&&this.setTarget(e)}getTarget(){return this.target}get position(){return this._position}set position(e){this.setPosition(e)}set upVector(e){this._upToYMatrix||(this._yToUpMatrix=new K,this._upToYMatrix=new K,this._upVector=b.Zero()),e.normalize(),this._upVector.copyFrom(e),this.setMatUp()}get upVector(){return this._upVector}setMatUp(){K.RotationAlignToRef(b.UpReadOnly,this._upVector,this._yToUpMatrix),K.RotationAlignToRef(this._upVector,b.UpReadOnly,this._upToYMatrix)}get angularSensibilityX(){let e=this.inputs.attached.pointers;return e?e.angularSensibilityX:0}set angularSensibilityX(e){let t=this.inputs.attached.pointers;t&&(t.angularSensibilityX=e)}get angularSensibilityY(){let e=this.inputs.attached.pointers;return e?e.angularSensibilityY:0}set angularSensibilityY(e){let t=this.inputs.attached.pointers;t&&(t.angularSensibilityY=e)}get pinchPrecision(){let e=this.inputs.attached.pointers;return e?e.pinchPrecision:0}set pinchPrecision(e){let t=this.inputs.attached.pointers;t&&(t.pinchPrecision=e)}get pinchDeltaPercentage(){let e=this.inputs.attached.pointers;return e?e.pinchDeltaPercentage:0}set pinchDeltaPercentage(e){let t=this.inputs.attached.pointers;t&&(t.pinchDeltaPercentage=e)}get useNaturalPinchZoom(){let e=this.inputs.attached.pointers;return e?e.useNaturalPinchZoom:!1}set useNaturalPinchZoom(e){let t=this.inputs.attached.pointers;t&&(t.useNaturalPinchZoom=e)}get panningSensibility(){let e=this.inputs.attached.pointers;return e?e.panningSensibility:0}set panningSensibility(e){let t=this.inputs.attached.pointers;t&&(t.panningSensibility=e)}get keysUp(){let e=this.inputs.attached.keyboard;return e?e.keysUp:[]}set keysUp(e){let t=this.inputs.attached.keyboard;t&&(t.keysUp=e)}get keysDown(){let e=this.inputs.attached.keyboard;return e?e.keysDown:[]}set keysDown(e){let t=this.inputs.attached.keyboard;t&&(t.keysDown=e)}get keysLeft(){let e=this.inputs.attached.keyboard;return e?e.keysLeft:[]}set keysLeft(e){let t=this.inputs.attached.keyboard;t&&(t.keysLeft=e)}get keysRight(){let e=this.inputs.attached.keyboard;return e?e.keysRight:[]}set keysRight(e){let t=this.inputs.attached.keyboard;t&&(t.keysRight=e)}get wheelPrecision(){let e=this.inputs.attached.mousewheel;return e?e.wheelPrecision:0}set wheelPrecision(e){let t=this.inputs.attached.mousewheel;t&&(t.wheelPrecision=e)}get zoomToMouseLocation(){let e=this.inputs.attached.mousewheel;return e?e.zoomToMouseLocation:!1}set zoomToMouseLocation(e){let t=this.inputs.attached.mousewheel;t&&(t.zoomToMouseLocation=e)}get wheelDeltaPercentage(){let e=this.inputs.attached.mousewheel;return e?e.wheelDeltaPercentage:0}set wheelDeltaPercentage(e){let t=this.inputs.attached.mousewheel;t&&(t.wheelDeltaPercentage=e)}get isInterpolating(){return this._isInterpolating}get bouncingBehavior(){return this._bouncingBehavior}get useBouncingBehavior(){return this._bouncingBehavior!=null}set useBouncingBehavior(e){e!==this.useBouncingBehavior&&(e?(this._bouncingBehavior=new xm,this.addBehavior(this._bouncingBehavior)):this._bouncingBehavior&&(this.removeBehavior(this._bouncingBehavior),this._bouncingBehavior=null))}get framingBehavior(){return this._framingBehavior}get useFramingBehavior(){return this._framingBehavior!=null}set useFramingBehavior(e){e!==this.useFramingBehavior&&(e?(this._framingBehavior=new Sf,this.addBehavior(this._framingBehavior)):this._framingBehavior&&(this.removeBehavior(this._framingBehavior),this._framingBehavior=null))}get autoRotationBehavior(){return this._autoRotationBehavior}get useAutoRotationBehavior(){return this._autoRotationBehavior!=null}set useAutoRotationBehavior(e){e!==this.useAutoRotationBehavior&&(e?(this._autoRotationBehavior=new Am,this.addBehavior(this._autoRotationBehavior)):this._autoRotationBehavior&&(this.removeBehavior(this._autoRotationBehavior),this._autoRotationBehavior=null))}constructor(e,t,i,r,s,a,o=!0){super(e,b.Zero(),a,o),this.inertialAlphaOffset=0,this.inertialBetaOffset=0,this.inertialRadiusOffset=0,this.lowerAlphaLimit=null,this.upperAlphaLimit=null,this.lowerBetaLimit=.01,this.upperBetaLimit=Math.PI-.01,this.lowerRadiusLimit=null,this.upperRadiusLimit=null,this.lowerTargetYLimit=-1/0,this.inertialPanningX=0,this.inertialPanningY=0,this.pinchToPanMaxDistance=20,this.panningDistanceLimit=null,this.panningOriginTarget=b.Zero(),this.panningInertia=.9,this.zoomOnFactor=1,this.targetScreenOffset=Ne.Zero(),this.allowUpsideDown=!0,this.useInputToRestoreState=!0,this.restoreStateInterpolationFactor=0,this._currentInterpolationFactor=0,this._viewMatrix=new K,this.panningAxis=new b(1,1,0),this._transformedDirection=new b,this.mapPanning=!1,this._isInterpolating=!1,this.onMeshTargetChangedObservable=new te,this.checkCollisions=!1,this.collisionRadius=new b(.5,.5,.5),this._previousPosition=b.Zero(),this._collisionVelocity=b.Zero(),this._newPosition=b.Zero(),this._computationVector=b.Zero(),this._goalAlpha=NaN,this._goalBeta=NaN,this._goalRadius=NaN,this._goalTarget=new b(NaN,NaN,NaN),this._goalTargetScreenOffset=new Ne(NaN,NaN),this._onCollisionPositionChange=(l,c,f=null)=>{f?(this.setPosition(c),this.onCollide&&this.onCollide(f)):this._previousPosition.copyFrom(this._position);let h=Math.cos(this.alpha),d=Math.sin(this.alpha),u=Math.cos(this.beta),m=Math.sin(this.beta);m===0&&(m=1e-4);let _=this._getTargetPosition();this._computationVector.copyFromFloats(this.radius*h*m,this.radius*u,this.radius*d*m),_.addToRef(this._computationVector,this._newPosition),this._position.copyFrom(this._newPosition);let p=this.upVector;this.allowUpsideDown&&this.beta<0&&(p=p.clone(),p=p.negate()),this._computeViewMatrix(this._position,_,p),this._viewMatrix.addAtIndex(12,this.targetScreenOffset.x),this._viewMatrix.addAtIndex(13,this.targetScreenOffset.y),this._collisionTriggered=!1},this._target=b.Zero(),s&&this.setTarget(s),this.alpha=t,this.beta=i,this.radius=r,this.getViewMatrix(),this.inputs=new uA(this),this.inputs.addKeyboard().addMouseWheel().addPointers()}_initCache(){super._initCache(),this._cache._target=new b(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),this._cache.alpha=void 0,this._cache.beta=void 0,this._cache.radius=void 0,this._cache.targetScreenOffset=Ne.Zero()}_updateCache(e){e||super._updateCache(),this._cache._target.copyFrom(this._getTargetPosition()),this._cache.alpha=this.alpha,this._cache.beta=this.beta,this._cache.radius=this.radius,this._cache.targetScreenOffset.copyFrom(this.targetScreenOffset)}_getTargetPosition(){if(this._targetHost&&this._targetHost.getAbsolutePosition){let t=this._targetHost.getAbsolutePosition();this._targetBoundingCenter?t.addToRef(this._targetBoundingCenter,this._target):this._target.copyFrom(t)}let e=this._getLockedTargetPosition();return e||this._target}storeState(){return this._storedAlpha=this.alpha,this._storedBeta=this.beta,this._storedRadius=this.radius,this._storedTarget=this._getTargetPosition().clone(),this._storedTargetScreenOffset=this.targetScreenOffset.clone(),super.storeState()}_restoreStateValues(){return this.hasStateStored()&&this.restoreStateInterpolationFactor>Nt&&this.restoreStateInterpolationFactor<1?(this.interpolateTo(this._storedAlpha,this._storedBeta,this._storedRadius,this._storedTarget,this._storedTargetScreenOffset,this.restoreStateInterpolationFactor),!0):super._restoreStateValues()?(this.setTarget(this._storedTarget.clone()),this.alpha=this._storedAlpha,this.beta=this._storedBeta,this.radius=this._storedRadius,this.targetScreenOffset=this._storedTargetScreenOffset.clone(),this.inertialAlphaOffset=0,this.inertialBetaOffset=0,this.inertialRadiusOffset=0,this.inertialPanningX=0,this.inertialPanningY=0,!0):!1}stopInterpolation(){this._goalAlpha=NaN,this._goalBeta=NaN,this._goalRadius=NaN,this._goalTarget.set(NaN,NaN,NaN),this._goalTargetScreenOffset.set(NaN,NaN)}interpolateTo(e=this.alpha,t=this.beta,i=this.radius,r=this.target,s=this.targetScreenOffset,a){var o,l,c,f,h,d,u;this.inertialAlphaOffset=0,this.inertialBetaOffset=0,this.inertialRadiusOffset=0,this.inertialPanningX=0,this.inertialPanningY=0,a!=null?this._currentInterpolationFactor=a:this.restoreStateInterpolationFactor!==0?this._currentInterpolationFactor=this.restoreStateInterpolationFactor:this._currentInterpolationFactor=.1,this._goalAlpha=Ln(e,this._goalAlpha),this._goalBeta=Ln(t,this._goalBeta),this._goalRadius=Ln(i,this._goalRadius),this._goalTarget.set(Ln(r.x,this._goalTarget.x),Ln(r.y,this._goalTarget.y),Ln(r.z,this._goalTarget.z)),this._goalTargetScreenOffset.set(Ln(s.x,this._goalTargetScreenOffset.x),Ln(s.y,this._goalTargetScreenOffset.y)),this._goalAlpha=wt(this._goalAlpha,(o=this.lowerAlphaLimit)!=null?o:-1/0,(l=this.upperAlphaLimit)!=null?l:1/0),this._goalBeta=wt(this._goalBeta,(c=this.lowerBetaLimit)!=null?c:-1/0,(f=this.upperBetaLimit)!=null?f:1/0),this._goalRadius=wt(this._goalRadius,(h=this.lowerRadiusLimit)!=null?h:-1/0,(d=this.upperRadiusLimit)!=null?d:1/0),this._goalTarget.y=wt(this._goalTarget.y,(u=this.lowerTargetYLimit)!=null?u:-1/0,1/0),this._isInterpolating=!0}_isSynchronizedViewMatrix(){return super._isSynchronizedViewMatrix()?this._cache._target.equals(this._getTargetPosition())&&this._cache.alpha===this.alpha&&this._cache.beta===this.beta&&this._cache.radius===this.radius&&this._cache.targetScreenOffset.equals(this.targetScreenOffset):!1}attachControl(e,t,i=!0,r=2){let s=arguments;t=de.BackCompatCameraNoPreventDefault(s),this._useCtrlForPanning=i,this._panningMouseButton=r,typeof s[0]=="boolean"&&(s.length>1&&(this._useCtrlForPanning=s[1]),s.length>2&&(this._panningMouseButton=s[2])),this.inputs.attachElement(t),this._reset=()=>{this.inertialAlphaOffset=0,this.inertialBetaOffset=0,this.inertialRadiusOffset=0,this.inertialPanningX=0,this.inertialPanningY=0}}detachControl(){this.inputs.detachElement(),this._reset&&this._reset()}_checkInputs(){if(this._collisionTriggered)return;this.inputs.checkInputs();let e=!1;if(this.inertialAlphaOffset!==0||this.inertialBetaOffset!==0||this.inertialRadiusOffset!==0){e=!0;let t=this.invertRotation?-1:1,i=this._calculateHandednessMultiplier(),r=this.inertialAlphaOffset*i;this.beta<0&&(r*=-1),this.alpha+=r*t,this.beta+=this.inertialBetaOffset*t,this.radius-=this.inertialRadiusOffset,this.inertialAlphaOffset*=this.inertia,this.inertialBetaOffset*=this.inertia,this.inertialRadiusOffset*=this.inertia,Math.abs(this.inertialAlphaOffset)Math.PI&&(this.beta=this.beta-2*Math.PI):this.betathis.upperBetaLimit&&(this.beta=this.upperBetaLimit),this.lowerAlphaLimit!==null&&this.alphathis.upperAlphaLimit&&(this.alpha=this.upperAlphaLimit),this.lowerRadiusLimit!==null&&this.radiusthis.upperRadiusLimit&&(this.radius=this.upperRadiusLimit,this.inertialRadiusOffset=0),this.target.y=Math.max(this.target.y,this.lowerTargetYLimit)}rebuildAnglesAndRadius(){this._position.subtractToRef(this._getTargetPosition(),this._computationVector),(this._upVector.x!==0||this._upVector.y!==1||this._upVector.z!==0)&&b.TransformCoordinatesToRef(this._computationVector,this._upToYMatrix,this._computationVector),this.radius=this._computationVector.length(),this.radius===0&&(this.radius=1e-4);let e=this.alpha;this.alpha=Ine(this._computationVector),this.beta=Mne(this._computationVector.y,this.radius);let t=Math.round((e-this.alpha)/(2*Math.PI));this.alpha+=t*2*Math.PI,this._checkLimits()}setPosition(e){this._position.equals(e)||(this._position.copyFrom(e),this.rebuildAnglesAndRadius())}setTarget(e,t=!1,i=!1,r=!1){var s;if(r=(s=this.overrideCloneAlphaBetaRadius)!=null?s:r,e.computeWorldMatrix)t&&e.getBoundingInfo?this._targetBoundingCenter=e.getBoundingInfo().boundingBox.centerWorld.clone():this._targetBoundingCenter=null,e.computeWorldMatrix(),this._targetHost=e,this._target=this._getTargetPosition(),this.onMeshTargetChangedObservable.notifyObservers(this._targetHost);else{let a=e,o=this._getTargetPosition();if(o&&!i&&o.equals(a))return;this._targetHost=null,this._target=a,this._targetBoundingCenter=null,this.onMeshTargetChangedObservable.notifyObservers(null)}r||this.rebuildAnglesAndRadius()}_getViewMatrix(){let e=Math.cos(this.alpha),t=Math.sin(this.alpha),i=Math.cos(this.beta),r=Math.sin(this.beta);r===0&&(r=1e-4),this.radius===0&&(this.radius=1e-4);let s=this._getTargetPosition();if(this._computationVector.copyFromFloats(this.radius*e*r,this.radius*i,this.radius*t*r),(this._upVector.x!==0||this._upVector.y!==1||this._upVector.z!==0)&&b.TransformCoordinatesToRef(this._computationVector,this._yToUpMatrix,this._computationVector),s.addToRef(this._computationVector,this._newPosition),this.getScene().collisionsEnabled&&this.checkCollisions){let a=this.getScene().collisionCoordinator;this._collider||(this._collider=a.createCollider()),this._collider._radius=this.collisionRadius,this._newPosition.subtractToRef(this._position,this._collisionVelocity),this._collisionTriggered=!0,a.getNewPosition(this._position,this._collisionVelocity,this._collider,3,null,this._onCollisionPositionChange,this.uniqueId)}else{this._position.copyFrom(this._newPosition);let a=this.upVector;this.allowUpsideDown&&r<0&&(a=a.negate()),this._computeViewMatrix(this._position,s,a),this._viewMatrix.addAtIndex(12,this.targetScreenOffset.x),this._viewMatrix.addAtIndex(13,this.targetScreenOffset.y)}return this._currentTarget.copyFrom(s),this._viewMatrix}zoomOn(e,t=!1){e=e||this.getScene().meshes;let i=j.MinMax(e),r=this._calculateLowerRadiusFromModelBoundingSphere(i.min,i.max);if(r=Math.max(Math.min(r,this.upperRadiusLimit||Number.MAX_VALUE),this.lowerRadiusLimit||0),this.radius=r*this.zoomOnFactor,this.mode===ut.ORTHOGRAPHIC_CAMERA){let s=this.getScene().getEngine().getAspectRatio(this),a=r*this.zoomOnFactor/2;this.orthoLeft=-a*s,this.orthoRight=a*s,this.orthoBottom=-a,this.orthoTop=a}this.focusOn({min:i.min,max:i.max,distance:r},t)}focusOn(e,t=!1){let i,r;if(e.min===void 0){let s=e||this.getScene().meshes;i=j.MinMax(s),r=b.Distance(i.min,i.max)}else{let s=e;i=s,r=s.distance}this._target=j.Center(i),t||(this.maxZ=r*2)}createRigCamera(e,t){let i=0;switch(this.cameraRigMode){case ut.RIG_MODE_STEREOSCOPIC_ANAGLYPH:case ut.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL:case ut.RIG_MODE_STEREOSCOPIC_OVERUNDER:case ut.RIG_MODE_STEREOSCOPIC_INTERLACED:case ut.RIG_MODE_VR:i=this._cameraRigParams.stereoHalfAngle*(t===0?1:-1);break;case ut.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED:i=this._cameraRigParams.stereoHalfAngle*(t===0?-1:1);break}let r=new n(e,this.alpha+i,this.beta,this.radius,this._target,this.getScene());return r._cameraRigParams={},r.isRigCamera=!0,r.rigParent=this,r.upVector=this.upVector,r.mode=this.mode,r.orthoLeft=this.orthoLeft,r.orthoRight=this.orthoRight,r.orthoBottom=this.orthoBottom,r.orthoTop=this.orthoTop,r}_updateRigCameras(){let e=this._rigCameras[0],t=this._rigCameras[1];switch(e.beta=t.beta=this.beta,this.cameraRigMode){case ut.RIG_MODE_STEREOSCOPIC_ANAGLYPH:case ut.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL:case ut.RIG_MODE_STEREOSCOPIC_OVERUNDER:case ut.RIG_MODE_STEREOSCOPIC_INTERLACED:case ut.RIG_MODE_VR:e.alpha=this.alpha-this._cameraRigParams.stereoHalfAngle,t.alpha=this.alpha+this._cameraRigParams.stereoHalfAngle;break;case ut.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED:e.alpha=this.alpha+this._cameraRigParams.stereoHalfAngle,t.alpha=this.alpha-this._cameraRigParams.stereoHalfAngle;break}super._updateRigCameras()}_calculateLowerRadiusFromModelBoundingSphere(e,t,i=1){let r=b.Distance(e,t),a=this.getScene().getEngine().getAspectRatio(this),o=Math.tan(this.fov/2),l=o*a,f=r*.5*i,h=f*Math.sqrt(1+1/(l*l)),d=f*Math.sqrt(1+1/(o*o));return Math.max(h,d)}dispose(){this.inputs.clear(),super.dispose()}getClassName(){return"ArcRotateCamera"}};P([w()],gi.prototype,"alpha",void 0);P([w()],gi.prototype,"beta",void 0);P([w()],gi.prototype,"radius",void 0);P([w()],gi.prototype,"overrideCloneAlphaBetaRadius",void 0);P([Vr("target")],gi.prototype,"_target",void 0);P([pT("targetHost")],gi.prototype,"_targetHost",void 0);P([w()],gi.prototype,"inertialAlphaOffset",void 0);P([w()],gi.prototype,"inertialBetaOffset",void 0);P([w()],gi.prototype,"inertialRadiusOffset",void 0);P([w()],gi.prototype,"lowerAlphaLimit",void 0);P([w()],gi.prototype,"upperAlphaLimit",void 0);P([w()],gi.prototype,"lowerBetaLimit",void 0);P([w()],gi.prototype,"upperBetaLimit",void 0);P([w()],gi.prototype,"lowerRadiusLimit",void 0);P([w()],gi.prototype,"upperRadiusLimit",void 0);P([w()],gi.prototype,"lowerTargetYLimit",void 0);P([w()],gi.prototype,"inertialPanningX",void 0);P([w()],gi.prototype,"inertialPanningY",void 0);P([w()],gi.prototype,"pinchToPanMaxDistance",void 0);P([w()],gi.prototype,"panningDistanceLimit",void 0);P([Vr()],gi.prototype,"panningOriginTarget",void 0);P([w()],gi.prototype,"panningInertia",void 0);P([w()],gi.prototype,"zoomToMouseLocation",null);P([w()],gi.prototype,"zoomOnFactor",void 0);P([Gu()],gi.prototype,"targetScreenOffset",void 0);P([w()],gi.prototype,"allowUpsideDown",void 0);P([w()],gi.prototype,"useInputToRestoreState",void 0);P([w()],gi.prototype,"restoreStateInterpolationFactor",void 0);Ft("BABYLON.ArcRotateCamera",gi)});var Yt,Af=C(()=>{kt();Ut();Ge();zt();zs();of();Vi();I_();Er();Yt=class n extends _i{get range(){return this._range}set range(e){this._range=e,this._inverseSquaredRange=1/(this.range*this.range)}get intensityMode(){return this._intensityMode}set intensityMode(e){this._intensityMode=e,this._computePhotometricScale()}get radius(){return this._radius}set radius(e){this._radius=e,this._computePhotometricScale()}get shadowEnabled(){return this._shadowEnabled}set shadowEnabled(e){this._shadowEnabled!==e&&(this._shadowEnabled=e,this._markMeshesAsLightDirty())}get includedOnlyMeshes(){return this._includedOnlyMeshes}set includedOnlyMeshes(e){this._includedOnlyMeshes=e,this._hookArrayForIncludedOnly(e)}get excludedMeshes(){return this._excludedMeshes}set excludedMeshes(e){this._excludedMeshes=e,this._hookArrayForExcluded(e)}get excludeWithLayerMask(){return this._excludeWithLayerMask}set excludeWithLayerMask(e){this._excludeWithLayerMask=e,this._resyncMeshes()}get includeOnlyWithLayerMask(){return this._includeOnlyWithLayerMask}set includeOnlyWithLayerMask(e){this._includeOnlyWithLayerMask=e,this._resyncMeshes()}get lightmapMode(){return this._lightmapMode}set lightmapMode(e){this._lightmapMode!==e&&(this._lightmapMode=e,this._markMeshesAsLightDirty())}getViewMatrix(e){return null}getProjectionMatrix(e,t){return null}constructor(e,t,i){super(e,t,!1),this.diffuse=new Te(1,1,1),this.specular=new Te(1,1,1),this.falloffType=n.FALLOFF_DEFAULT,this.intensity=1,this._range=Number.MAX_VALUE,this._inverseSquaredRange=0,this._photometricScale=1,this._intensityMode=n.INTENSITYMODE_AUTOMATIC,this._radius=1e-5,this.renderPriority=0,this._shadowEnabled=!0,this._excludeWithLayerMask=0,this._includeOnlyWithLayerMask=0,this._lightmapMode=0,this._shadowGenerators=null,this._excludedMeshesIds=new Array,this._includedOnlyMeshesIds=new Array,this._currentViewDepth=0,this._clusteredContainer=null,this._isLight=!0,i||this.getScene().addLight(this),this._uniformBuffer=new or(this.getScene().getEngine(),void 0,void 0,e),this._buildUniformLayout(),this.includedOnlyMeshes=[],this.excludedMeshes=[],i||this._resyncMeshes()}transferTexturesToEffect(e,t){return this}_bindLight(e,t,i,r,s=!0){var l;let a=e.toString(),o=!1;if(this._uniformBuffer.bindToEffect(i,"Light"+a),this._renderId!==t.getRenderId()||this._lastUseSpecular!==r||!this._uniformBuffer.useUbo){this._renderId=t.getRenderId(),this._lastUseSpecular=r;let c=this.getScaledIntensity();this.transferToEffect(i,a),this.diffuse.scaleToRef(c,pn.Color3[0]),this._uniformBuffer.updateColor4("vLightDiffuse",pn.Color3[0],this.range,a),r&&(this.specular.scaleToRef(c,pn.Color3[1]),this._uniformBuffer.updateColor4("vLightSpecular",pn.Color3[1],this.radius,a)),o=!0}if(this.transferTexturesToEffect(i,a),t.shadowsEnabled&&this.shadowEnabled&&s){let c=(l=this.getShadowGenerator(t.activeCamera))!=null?l:this.getShadowGenerator();c&&(c.bindShadowLight(a,i),o=!0)}o?this._uniformBuffer.update():this._uniformBuffer.bindUniformBuffer()}getClassName(){return"Light"}toString(e){let t="Name: "+this.name;if(t+=", type: "+["Point","Directional","Spot","Hemispheric","Clustered"][this.getTypeID()],this.animations)for(let i=0;i0&&this.includedOnlyMeshes.indexOf(e)===-1||this.excludedMeshes&&this.excludedMeshes.length>0&&this.excludedMeshes.indexOf(e)!==-1||this.includeOnlyWithLayerMask!==0&&(this.includeOnlyWithLayerMask&e.layerMask)===0||this.excludeWithLayerMask!==0&&this.excludeWithLayerMask&e.layerMask):!0}dispose(e,t=!1){if(this._shadowGenerators){let i=this._shadowGenerators.values();for(let r=i.next();r.done!==!0;r=i.next())r.value.dispose();this._shadowGenerators=null}if(this.getScene().stopAnimation(this),this._parentContainer){let i=this._parentContainer.lights.indexOf(this);i>-1&&this._parentContainer.lights.splice(i,1),this._parentContainer=null}for(let i of this.getScene().meshes)i._removeLightSource(this,!0);this._uniformBuffer.dispose(),this.getScene().removeLight(this),super.dispose(e,t)}getTypeID(){return 0}getScaledIntensity(){return this._photometricScale*this.intensity}clone(e,t=null){let i=n.GetConstructorFromName(this.getTypeID(),e,this.getScene());if(!i)return null;let r=tt.Clone(i,this);return e&&(r.name=e),t&&(r.parent=t),r.setEnabled(this.isEnabled()),this.onClonedObservable.notifyObservers(r),r}serialize(){let e=tt.Serialize(this);if(e.uniqueId=this.uniqueId,e.type=this.getTypeID(),this.parent&&this.parent._serializeAsParent(e),this.excludedMeshes.length>0){e.excludedMeshesIds=[];for(let t of this.excludedMeshes)e.excludedMeshesIds.push(t.id)}if(this.includedOnlyMeshes.length>0){e.includedOnlyMeshesIds=[];for(let t of this.includedOnlyMeshes)e.includedOnlyMeshesIds.push(t.id)}return tt.AppendSerializedAnimations(this,e),e.ranges=this.serializeAnimationRanges(),e.isEnabled=this.isEnabled(),e}static GetConstructorFromName(e,t,i){let r=_i.Construct("Light_Type_"+e,t,i);return r||null}static Parse(e,t){let i=n.GetConstructorFromName(e.type,e.name,t);if(!i)return null;let r=tt.Parse(i,e,t);if(e.excludedMeshesIds&&(r._excludedMeshesIds=e.excludedMeshesIds),e.includedOnlyMeshesIds&&(r._includedOnlyMeshesIds=e.includedOnlyMeshesIds),e.parentId!==void 0&&(r._waitingParentId=e.parentId),e.parentInstanceIndex!==void 0&&(r._waitingParentInstanceIndex=e.parentInstanceIndex),e.falloffType!==void 0&&(r.falloffType=e.falloffType),e.lightmapMode!==void 0&&(r.lightmapMode=e.lightmapMode),e.animations){for(let s=0;s{let s=t.apply(e,r);if(this._clusteredContainer)return s;for(let a of r)a._resyncLightSource(this);return s};let i=e.splice;if(e.splice=(r,s)=>{let a=i.call(e,r,s!=null?s:e.length);if(this._clusteredContainer)return a;for(let o of a)o._resyncLightSource(this);return a},!this._clusteredContainer)for(let r of e)r._resyncLightSource(this)}_hookArrayForIncludedOnly(e){let t=e.push;e.push=(...r)=>{let s=t.apply(e,r);return this._resyncMeshes(),s};let i=e.splice;e.splice=(r,s)=>{let a=i.call(e,r,s!=null?s:e.length);return this._resyncMeshes(),a},this._resyncMeshes()}_resyncMeshes(){if(!this._clusteredContainer)for(let e of this.getScene().meshes)e._resyncLightSource(this)}_markMeshesAsLightDirty(){for(let e of this.getScene().meshes)e.lightSources.indexOf(this)!==-1&&e._markSubMeshesAsLightDirty()}_computePhotometricScale(){this._photometricScale=this._getPhotometricScale(),this.getScene().resetCachedMaterial()}_getPhotometricScale(){let e=0,t=this.getTypeID(),i=this.intensityMode;switch(i===n.INTENSITYMODE_AUTOMATIC&&(t===n.LIGHTTYPEID_DIRECTIONALLIGHT?i=n.INTENSITYMODE_ILLUMINANCE:i=n.INTENSITYMODE_LUMINOUSINTENSITY),t){case n.LIGHTTYPEID_POINTLIGHT:case n.LIGHTTYPEID_SPOTLIGHT:switch(i){case n.INTENSITYMODE_LUMINOUSPOWER:e=1/(4*Math.PI);break;case n.INTENSITYMODE_LUMINOUSINTENSITY:e=1;break;case n.INTENSITYMODE_LUMINANCE:e=this.radius*this.radius;break}break;case n.LIGHTTYPEID_DIRECTIONALLIGHT:switch(i){case n.INTENSITYMODE_ILLUMINANCE:e=1;break;case n.INTENSITYMODE_LUMINANCE:{let r=this.radius;r=Math.max(r,.001),e=2*Math.PI*(1-Math.cos(r));break}}break;case n.LIGHTTYPEID_HEMISPHERICLIGHT:e=1;break}return e}_reorderLightsInScene(){let e=this.getScene();this._renderPriority!=0&&(e.requireLightSorting=!0),this.getScene().sortLightsByPriority()}areLightTexturesReady(){return!0}_isReady(){return!0}};Yt.FALLOFF_DEFAULT=Kt.FALLOFF_DEFAULT;Yt.FALLOFF_PHYSICAL=Kt.FALLOFF_PHYSICAL;Yt.FALLOFF_GLTF=Kt.FALLOFF_GLTF;Yt.FALLOFF_STANDARD=Kt.FALLOFF_STANDARD;Yt.LIGHTMAP_DEFAULT=Kt.LIGHTMAP_DEFAULT;Yt.LIGHTMAP_SPECULAR=Kt.LIGHTMAP_SPECULAR;Yt.LIGHTMAP_SHADOWSONLY=Kt.LIGHTMAP_SHADOWSONLY;Yt.INTENSITYMODE_AUTOMATIC=Kt.INTENSITYMODE_AUTOMATIC;Yt.INTENSITYMODE_LUMINOUSPOWER=Kt.INTENSITYMODE_LUMINOUSPOWER;Yt.INTENSITYMODE_LUMINOUSINTENSITY=Kt.INTENSITYMODE_LUMINOUSINTENSITY;Yt.INTENSITYMODE_ILLUMINANCE=Kt.INTENSITYMODE_ILLUMINANCE;Yt.INTENSITYMODE_LUMINANCE=Kt.INTENSITYMODE_LUMINANCE;Yt.LIGHTTYPEID_POINTLIGHT=Kt.LIGHTTYPEID_POINTLIGHT;Yt.LIGHTTYPEID_DIRECTIONALLIGHT=Kt.LIGHTTYPEID_DIRECTIONALLIGHT;Yt.LIGHTTYPEID_SPOTLIGHT=Kt.LIGHTTYPEID_SPOTLIGHT;Yt.LIGHTTYPEID_HEMISPHERICLIGHT=Kt.LIGHTTYPEID_HEMISPHERICLIGHT;Yt.LIGHTTYPEID_RECT_AREALIGHT=Kt.LIGHTTYPEID_RECT_AREALIGHT;P([mr()],Yt.prototype,"diffuse",void 0);P([mr()],Yt.prototype,"specular",void 0);P([w()],Yt.prototype,"falloffType",void 0);P([w()],Yt.prototype,"intensity",void 0);P([w()],Yt.prototype,"range",null);P([w()],Yt.prototype,"intensityMode",null);P([w()],Yt.prototype,"radius",null);P([w()],Yt.prototype,"_renderPriority",void 0);P([oe("_reorderLightsInScene")],Yt.prototype,"renderPriority",void 0);P([w("shadowEnabled")],Yt.prototype,"_shadowEnabled",void 0);P([w("excludeWithLayerMask")],Yt.prototype,"_excludeWithLayerMask",void 0);P([w("includeOnlyWithLayerMask")],Yt.prototype,"_includeOnlyWithLayerMask",void 0);P([w("lightmapMode")],Yt.prototype,"_lightmapMode",void 0)});var Ys,pA=C(()=>{kt();Ut();Ge();zt();zs();Af();Vi();_i.AddNodeConstructor("Light_Type_3",(n,e)=>()=>new Ys(n,b.Zero(),e));Ys=class extends Yt{constructor(e,t,i,r){super(e,i,r),this.groundColor=new Te(0,0,0),this.direction=t||b.Up()}_buildUniformLayout(){this._uniformBuffer.addUniform("vLightData",4),this._uniformBuffer.addUniform("vLightDiffuse",4),this._uniformBuffer.addUniform("vLightSpecular",4),this._uniformBuffer.addUniform("vLightGround",3),this._uniformBuffer.addUniform("shadowsInfo",3),this._uniformBuffer.addUniform("depthValues",2),this._uniformBuffer.create()}getClassName(){return"HemisphericLight"}setDirectionToTarget(e){return this.direction=b.Normalize(e.subtract(b.Zero())),this.direction}getShadowGenerator(){return null}transferToEffect(e,t){let i=b.Normalize(this.direction);return this._uniformBuffer.updateFloat4("vLightData",i.x,i.y,i.z,0,t),this._uniformBuffer.updateColor3("vLightGround",this.groundColor.scale(this.intensity),t),this}transferToNodeMaterialEffect(e,t){let i=b.Normalize(this.direction);return e.setFloat3(t,i.x,i.y,i.z),this}computeWorldMatrix(){return this._worldMatrix||(this._worldMatrix=K.Identity()),this._worldMatrix}getTypeID(){return Yt.LIGHTTYPEID_HEMISPHERICLIGHT}prepareLightSpecificDefines(e,t){e["HEMILIGHT"+t]=!0}};P([mr()],Ys.prototype,"groundColor",void 0);P([Vr()],Ys.prototype,"direction",void 0);Ft("BABYLON.HemisphericLight",Ys)});var Ca,_A=C(()=>{kt();Ut();Ge();Af();Pu();Ca=class extends Yt{constructor(){super(...arguments),this._needProjectionMatrixCompute=!0,this._viewMatrix=K.Identity(),this._projectionMatrix=K.Identity()}_setPosition(e){this._position=e}get position(){return this._position}set position(e){this._setPosition(e)}_setDirection(e){this._direction=e}get direction(){return this._direction}set direction(e){this._setDirection(e)}get shadowMinZ(){return this._shadowMinZ}set shadowMinZ(e){this._shadowMinZ=e,this.forceProjectionMatrixCompute()}get shadowMaxZ(){return this._shadowMaxZ}set shadowMaxZ(e){this._shadowMaxZ=e,this.forceProjectionMatrixCompute()}computeTransformedInformation(){return this.parent&&this.parent.getWorldMatrix?(this.transformedPosition||(this.transformedPosition=b.Zero()),b.TransformCoordinatesToRef(this.position,this.parent.getWorldMatrix(),this.transformedPosition),this.direction&&(this.transformedDirection||(this.transformedDirection=b.Zero()),b.TransformNormalToRef(this.direction,this.parent.getWorldMatrix(),this.transformedDirection)),!0):!1}getDepthScale(){return 50}getShadowDirection(e){return this.transformedDirection?this.transformedDirection:this.direction}getAbsolutePosition(){return this.transformedPosition?this.transformedPosition:this.position}setDirectionToTarget(e){return this.direction=b.Normalize(e.subtract(this.position)),this.direction}getRotation(){this.direction.normalize();let e=b.Cross(this.direction,ds.Y),t=b.Cross(e,this.direction);return b.RotationFromAxis(e,t,this.direction)}needCube(){return!1}needProjectionMatrixCompute(){return this._needProjectionMatrixCompute}forceProjectionMatrixCompute(){this._needProjectionMatrixCompute=!0}_initCache(){super._initCache(),this._cache.position=b.Zero()}_isSynchronized(){return!!this._cache.position.equals(this.position)}computeWorldMatrix(e){return!e&&this.isSynchronized()?(this._currentRenderId=this.getScene().getRenderId(),this._worldMatrix):(this._updateCache(),this._cache.position.copyFrom(this.position),this._worldMatrix||(this._worldMatrix=K.Identity()),K.TranslationToRef(this.position.x,this.position.y,this.position.z,this._worldMatrix),this.parent&&this.parent.getWorldMatrix&&(this._worldMatrix.multiplyToRef(this.parent.getWorldMatrix(),this._worldMatrix),this._markSyncedWithParent()),this._worldMatrixDeterminantIsDirty=!0,this._worldMatrix)}getDepthMinZ(e){return this.shadowMinZ!==void 0?this.shadowMinZ:(e==null?void 0:e.minZ)||0}getDepthMaxZ(e){return this.shadowMaxZ!==void 0?this.shadowMaxZ:(e==null?void 0:e.maxZ)||1e4}setShadowProjectionMatrix(e,t,i){return this.customProjectionMatrixBuilder?this.customProjectionMatrixBuilder(t,i,e):this._setDefaultShadowProjectionMatrix(e,t,i),this}_syncParentEnabledState(){super._syncParentEnabledState(),(!this.parent||!this.parent.getWorldMatrix)&&(this.transformedPosition=null,this.transformedDirection=null)}getViewMatrix(e){let t=Q.Vector3[0],i=this.position;this.computeTransformedInformation()&&(i=this.transformedPosition),b.NormalizeToRef(this.getShadowDirection(e),t),Math.abs(b.Dot(t,b.Up()))===1&&(t.z=1e-13);let r=Q.Vector3[1];return i.addToRef(t,r),K.LookAtLHToRef(i,r,b.Up(),this._viewMatrix),this._viewMatrix}getProjectionMatrix(e,t){return this.setShadowProjectionMatrix(this._projectionMatrix,e!=null?e:this._viewMatrix,t!=null?t:[]),this._projectionMatrix}};P([Vr()],Ca.prototype,"position",null);P([Vr()],Ca.prototype,"direction",null);P([w()],Ca.prototype,"shadowMinZ",null);P([w()],Ca.prototype,"shadowMaxZ",null)});var Ss,WV=C(()=>{kt();Ut();Ge();zs();Af();_A();Vi();_i.AddNodeConstructor("Light_Type_1",(n,e)=>()=>new Ss(n,b.Zero(),e));Ss=class extends Ca{get shadowFrustumSize(){return this._shadowFrustumSize}set shadowFrustumSize(e){this._shadowFrustumSize=e,this.forceProjectionMatrixCompute()}get shadowOrthoScale(){return this._shadowOrthoScale}set shadowOrthoScale(e){this._shadowOrthoScale=e,this.forceProjectionMatrixCompute()}get orthoLeft(){return this._orthoLeft}set orthoLeft(e){this._orthoLeft=e}get orthoRight(){return this._orthoRight}set orthoRight(e){this._orthoRight=e}get orthoTop(){return this._orthoTop}set orthoTop(e){this._orthoTop=e}get orthoBottom(){return this._orthoBottom}set orthoBottom(e){this._orthoBottom=e}constructor(e,t,i,r){super(e,i,r),this._shadowFrustumSize=0,this._shadowOrthoScale=.1,this.autoUpdateExtends=!0,this.autoCalcShadowZBounds=!1,this._orthoLeft=Number.MAX_VALUE,this._orthoRight=Number.MIN_VALUE,this._orthoTop=Number.MIN_VALUE,this._orthoBottom=Number.MAX_VALUE,this.position=t.scale(-1),this.direction=t}getClassName(){return"DirectionalLight"}getTypeID(){return Yt.LIGHTTYPEID_DIRECTIONALLIGHT}_setDefaultShadowProjectionMatrix(e,t,i){this.shadowFrustumSize>0?this._setDefaultFixedFrustumShadowProjectionMatrix(e):this._setDefaultAutoExtendShadowProjectionMatrix(e,t,i)}_setDefaultFixedFrustumShadowProjectionMatrix(e){let t=this.getScene().activeCamera;K.OrthoLHToRef(this.shadowFrustumSize,this.shadowFrustumSize,this.shadowMinZ!==void 0?this.shadowMinZ:t?t.minZ:0,this.shadowMaxZ!==void 0?this.shadowMaxZ:t?t.maxZ:1e4,e,this.getScene().getEngine().isNDCHalfZRange)}_setDefaultAutoExtendShadowProjectionMatrix(e,t,i){let r=this.getScene().activeCamera;if(this.autoUpdateExtends||this._orthoLeft===Number.MAX_VALUE){let f=b.Zero();this._orthoLeft=Number.MAX_VALUE,this._orthoRight=-Number.MAX_VALUE,this._orthoTop=-Number.MAX_VALUE,this._orthoBottom=Number.MAX_VALUE;let h=Number.MAX_VALUE,d=-Number.MAX_VALUE;for(let u=0;uthis._orthoRight&&(this._orthoRight=f.x),f.y>this._orthoTop&&(this._orthoTop=f.y),this.autoCalcShadowZBounds&&(f.zd&&(d=f.z))}this.autoCalcShadowZBounds&&(this._shadowMinZ=h,this._shadowMaxZ=d)}let s=this._orthoRight-this._orthoLeft,a=this._orthoTop-this._orthoBottom,o=this.shadowMinZ!==void 0?this.shadowMinZ:(r==null?void 0:r.minZ)||0,l=this.shadowMaxZ!==void 0?this.shadowMaxZ:(r==null?void 0:r.maxZ)||1e4,c=this.getScene().getEngine().useReverseDepthBuffer;K.OrthoOffCenterLHToRef(this._orthoLeft-s*this.shadowOrthoScale,this._orthoRight+s*this.shadowOrthoScale,this._orthoBottom-a*this.shadowOrthoScale,this._orthoTop+a*this.shadowOrthoScale,c?l:o,c?o:l,e,this.getScene().getEngine().isNDCHalfZRange)}_buildUniformLayout(){this._uniformBuffer.addUniform("vLightData",4),this._uniformBuffer.addUniform("vLightDiffuse",4),this._uniformBuffer.addUniform("vLightSpecular",4),this._uniformBuffer.addUniform("shadowsInfo",3),this._uniformBuffer.addUniform("depthValues",2),this._uniformBuffer.create()}transferToEffect(e,t){return this.computeTransformedInformation()?(this._uniformBuffer.updateFloat4("vLightData",this.transformedDirection.x,this.transformedDirection.y,this.transformedDirection.z,1,t),this):(this._uniformBuffer.updateFloat4("vLightData",this.direction.x,this.direction.y,this.direction.z,1,t),this)}transferToNodeMaterialEffect(e,t){return this.computeTransformedInformation()?(e.setFloat3(t,this.transformedDirection.x,this.transformedDirection.y,this.transformedDirection.z),this):(e.setFloat3(t,this.direction.x,this.direction.y,this.direction.z),this)}getDepthMinZ(e){let t=this._scene.getEngine();return!t.useReverseDepthBuffer&&t.isNDCHalfZRange?0:1}getDepthMaxZ(e){let t=this._scene.getEngine();return t.useReverseDepthBuffer&&t.isNDCHalfZRange?0:1}prepareLightSpecificDefines(e,t){e["DIRLIGHT"+t]=!0}};P([w()],Ss.prototype,"shadowFrustumSize",null);P([w()],Ss.prototype,"shadowOrthoScale",null);P([w()],Ss.prototype,"autoUpdateExtends",void 0);P([w()],Ss.prototype,"autoCalcShadowZBounds",void 0);P([w("orthoLeft")],Ss.prototype,"_orthoLeft",void 0);P([w("orthoRight")],Ss.prototype,"_orthoRight",void 0);P([w("orthoTop")],Ss.prototype,"_orthoTop",void 0);P([w("orthoBottom")],Ss.prototype,"_orthoBottom",void 0);Ft("BABYLON.DirectionalLight",Ss)});var xf,HV=C(()=>{kt();Ut();Ge();zs();Af();_A();Vi();_i.AddNodeConstructor("Light_Type_0",(n,e)=>()=>new xf(n,b.Zero(),e));xf=class extends Ca{get shadowAngle(){return this._shadowAngle}set shadowAngle(e){this._shadowAngle=e,this.forceProjectionMatrixCompute()}get direction(){return this._direction}set direction(e){let t=this.needCube();if(this._direction=e,this.needCube()!==t&&this._shadowGenerators){let i=this._shadowGenerators.values();for(let r=i.next();r.done!==!0;r=i.next())r.value.recreateShadowMap()}}constructor(e,t,i,r){super(e,i,r),this._shadowAngle=Math.PI/2,this.position=t}getClassName(){return"PointLight"}getTypeID(){return Yt.LIGHTTYPEID_POINTLIGHT}needCube(){return!this.direction}getShadowDirection(e){if(this.direction)return super.getShadowDirection(e);switch(e){case 0:return new b(1,0,0);case 1:return new b(-1,0,0);case 2:return new b(0,-1,0);case 3:return new b(0,1,0);case 4:return new b(0,0,1);case 5:return new b(0,0,-1)}return b.Zero()}_setDefaultShadowProjectionMatrix(e,t,i){let r=this.getScene().activeCamera,s=this.getDepthMinZ(r),a=this.getDepthMaxZ(r),o=this.getScene().getEngine().useReverseDepthBuffer;K.PerspectiveFovLHToRef(this.shadowAngle,1,o?a:s,o?s:a,e,!0,this._scene.getEngine().isNDCHalfZRange,void 0,o)}_buildUniformLayout(){this._uniformBuffer.addUniform("vLightData",4),this._uniformBuffer.addUniform("vLightDiffuse",4),this._uniformBuffer.addUniform("vLightSpecular",4),this._uniformBuffer.addUniform("vLightFalloff",4),this._uniformBuffer.addUniform("shadowsInfo",3),this._uniformBuffer.addUniform("depthValues",2),this._uniformBuffer.create()}transferToEffect(e,t){let i=this._scene.floatingOriginOffset;return this.computeTransformedInformation()?this._uniformBuffer.updateFloat4("vLightData",this.transformedPosition.x-i.x,this.transformedPosition.y-i.y,this.transformedPosition.z-i.z,0,t):this._uniformBuffer.updateFloat4("vLightData",this.position.x-i.x,this.position.y-i.y,this.position.z-i.z,0,t),this._uniformBuffer.updateFloat4("vLightFalloff",this.range,this._inverseSquaredRange,0,0,t),this}transferToNodeMaterialEffect(e,t){let i=this._scene.floatingOriginOffset;return this.computeTransformedInformation()?e.setFloat3(t,this.transformedPosition.x-i.x,this.transformedPosition.y-i.y,this.transformedPosition.z-i.z):e.setFloat3(t,this.position.x-i.x,this.position.y-i.y,this.position.z-i.z),this}prepareLightSpecificDefines(e,t){e["POINTLIGHT"+t]=!0}};P([w()],xf.prototype,"shadowAngle",null);Ft("BABYLON.PointLight",xf)});var Nr,ny=C(()=>{kt();Ut();Ge();zs();Af();_A();Gr();Vi();_i.AddNodeConstructor("Light_Type_2",(n,e)=>()=>new Nr(n,b.Zero(),b.Zero(),0,0,e));Nr=class n extends Ca{get iesProfileTexture(){return this._iesProfileTexture}set iesProfileTexture(e){this._iesProfileTexture!==e&&(this._iesProfileTexture=e,this._iesProfileTexture&&n._IsTexture(this._iesProfileTexture)&&this._iesProfileTexture.onLoadObservable.addOnce(()=>{this._markMeshesAsLightDirty()}))}get angle(){return this._angle}set angle(e){this._angle=e,this._cosHalfAngle=Math.cos(e*.5),this._projectionTextureProjectionLightDirty=!0,this.forceProjectionMatrixCompute(),this._computeAngleValues()}get innerAngle(){return this._innerAngle}set innerAngle(e){this._innerAngle=e,this._computeAngleValues()}get shadowAngleScale(){return this._shadowAngleScale}set shadowAngleScale(e){this._shadowAngleScale=e,this.forceProjectionMatrixCompute()}get projectionTextureMatrix(){return this._projectionTextureMatrix}get projectionTextureLightNear(){return this._projectionTextureLightNear}set projectionTextureLightNear(e){this._projectionTextureLightNear=e,this._projectionTextureProjectionLightDirty=!0}get projectionTextureLightFar(){return this._projectionTextureLightFar}set projectionTextureLightFar(e){this._projectionTextureLightFar=e,this._projectionTextureProjectionLightDirty=!0}get projectionTextureUpDirection(){return this._projectionTextureUpDirection}set projectionTextureUpDirection(e){this._projectionTextureUpDirection=e,this._projectionTextureProjectionLightDirty=!0}get projectionTexture(){return this._projectionTexture}set projectionTexture(e){this._projectionTexture!==e&&(this._projectionTexture=e,this._projectionTextureDirty=!0,this._projectionTexture&&!this._projectionTexture.isReady()&&(n._IsProceduralTexture(this._projectionTexture)?this._projectionTexture.getEffect().executeWhenCompiled(()=>{this._markMeshesAsLightDirty()}):n._IsTexture(this._projectionTexture)&&this._projectionTexture.onLoadObservable.addOnce(()=>{this._markMeshesAsLightDirty()})))}static _IsProceduralTexture(e){return e.onGeneratedObservable!==void 0}static _IsTexture(e){return e.onLoadObservable!==void 0}get projectionTextureProjectionLightMatrix(){return this._projectionTextureProjectionLightMatrix}set projectionTextureProjectionLightMatrix(e){this._projectionTextureProjectionLightMatrix=e,this._projectionTextureProjectionLightDirty=!1,this._projectionTextureDirty=!0}constructor(e,t,i,r,s,a,o){super(e,a,o),this._innerAngle=0,this._iesProfileTexture=null,this._projectionTextureMatrix=K.Zero(),this._projectionTextureLightNear=1e-6,this._projectionTextureLightFar=1e3,this._projectionTextureUpDirection=b.Up(),this._projectionTextureViewLightDirty=!0,this._projectionTextureProjectionLightDirty=!0,this._projectionTextureDirty=!0,this._projectionTextureViewTargetVector=b.Zero(),this._projectionTextureViewLightMatrix=K.Zero(),this._projectionTextureProjectionLightMatrix=K.Zero(),this._projectionTextureScalingMatrix=K.FromValues(.5,0,0,0,0,.5,0,0,0,0,.5,0,.5,.5,.5,1),this.position=t,this.direction=i,this.angle=r,this.exponent=s}getClassName(){return"SpotLight"}getTypeID(){return Yt.LIGHTTYPEID_SPOTLIGHT}_setDirection(e){super._setDirection(e),this._projectionTextureViewLightDirty=!0}_setPosition(e){super._setPosition(e),this._projectionTextureViewLightDirty=!0}_setDefaultShadowProjectionMatrix(e,t,i){let r=this.getScene().activeCamera;if(!r)return;this._shadowAngleScale=this._shadowAngleScale||1;let s=this._shadowAngleScale*this._angle,a=this.shadowMinZ!==void 0?this.shadowMinZ:r.minZ,o=this.shadowMaxZ!==void 0?this.shadowMaxZ:r.maxZ,l=this.getScene().getEngine().useReverseDepthBuffer;K.PerspectiveFovLHToRef(s,1,l?o:a,l?a:o,e,!0,this._scene.getEngine().isNDCHalfZRange,void 0,l)}_computeProjectionTextureViewLightMatrix(){this._projectionTextureViewLightDirty=!1,this._projectionTextureDirty=!0,this.getAbsolutePosition().addToRef(this.getShadowDirection(),this._projectionTextureViewTargetVector),K.LookAtLHToRef(this.getAbsolutePosition(),this._projectionTextureViewTargetVector,this._projectionTextureUpDirection,this._projectionTextureViewLightMatrix)}_computeProjectionTextureProjectionLightMatrix(){this._projectionTextureProjectionLightDirty=!1,this._projectionTextureDirty=!0;let e=this.projectionTextureLightFar,t=this.projectionTextureLightNear,i=e/(e-t),r=-i*t,s=1/Math.tan(this._angle/2);K.FromValuesToRef(s/1,0,0,0,0,s,0,0,0,0,i,1,0,0,r,0,this._projectionTextureProjectionLightMatrix)}_computeProjectionTextureMatrix(){if(this._projectionTextureDirty=!1,this._projectionTextureViewLightMatrix.multiplyToRef(this._projectionTextureProjectionLightMatrix,this._projectionTextureMatrix),this._projectionTexture instanceof ge){let e=this._projectionTexture.uScale/2,t=this._projectionTexture.vScale/2;K.FromValuesToRef(e,0,0,0,0,t,0,0,0,0,.5,0,.5,.5,.5,1,this._projectionTextureScalingMatrix)}this._projectionTextureMatrix.multiplyToRef(this._projectionTextureScalingMatrix,this._projectionTextureMatrix)}_buildUniformLayout(){this._uniformBuffer.addUniform("vLightData",4),this._uniformBuffer.addUniform("vLightDiffuse",4),this._uniformBuffer.addUniform("vLightSpecular",4),this._uniformBuffer.addUniform("vLightDirection",3),this._uniformBuffer.addUniform("vLightFalloff",4),this._uniformBuffer.addUniform("shadowsInfo",3),this._uniformBuffer.addUniform("depthValues",2),this._uniformBuffer.create()}_computeAngleValues(){this._lightAngleScale=1/Math.max(.001,Math.cos(this._innerAngle*.5)-this._cosHalfAngle),this._lightAngleOffset=-this._cosHalfAngle*this._lightAngleScale}transferTexturesToEffect(e,t){return this.projectionTexture&&this.projectionTexture.isReady()&&(this._projectionTextureViewLightDirty&&this._computeProjectionTextureViewLightMatrix(),this._projectionTextureProjectionLightDirty&&this._computeProjectionTextureProjectionLightMatrix(),this._projectionTextureDirty&&this._computeProjectionTextureMatrix(),e.setMatrix("textureProjectionMatrix"+t,this._projectionTextureMatrix),e.setTexture("projectionLightTexture"+t,this.projectionTexture)),this._iesProfileTexture&&this._iesProfileTexture.isReady()&&e.setTexture("iesLightTexture"+t,this._iesProfileTexture),this}transferToEffect(e,t){let i,r=this._scene.floatingOriginOffset;return this.computeTransformedInformation()?(this._uniformBuffer.updateFloat4("vLightData",this.transformedPosition.x-r.x,this.transformedPosition.y-r.y,this.transformedPosition.z-r.z,this.exponent,t),i=b.Normalize(this.transformedDirection)):(this._uniformBuffer.updateFloat4("vLightData",this.position.x-r.x,this.position.y-r.y,this.position.z-r.z,this.exponent,t),i=b.Normalize(this.direction)),this._uniformBuffer.updateFloat4("vLightDirection",i.x,i.y,i.z,this._cosHalfAngle,t),this._uniformBuffer.updateFloat4("vLightFalloff",this.range,this._inverseSquaredRange,this._lightAngleScale,this._lightAngleOffset,t),this}transferToNodeMaterialEffect(e,t){let i;return this.computeTransformedInformation()?i=b.Normalize(this.transformedDirection):i=b.Normalize(this.direction),this.getScene().useRightHandedSystem?e.setFloat3(t,-i.x,-i.y,-i.z):e.setFloat3(t,i.x,i.y,i.z),this}dispose(){super.dispose(),this._projectionTexture&&this._projectionTexture.dispose(),this._iesProfileTexture&&(this._iesProfileTexture.dispose(),this._iesProfileTexture=null)}getDepthMinZ(e){var r;let t=this._scene.getEngine(),i=this.shadowMinZ!==void 0?this.shadowMinZ:(r=e==null?void 0:e.minZ)!=null?r:0;return t.useReverseDepthBuffer&&t.isNDCHalfZRange?i:this._scene.getEngine().isNDCHalfZRange?0:i}getDepthMaxZ(e){var r;let t=this._scene.getEngine(),i=this.shadowMaxZ!==void 0?this.shadowMaxZ:(r=e==null?void 0:e.maxZ)!=null?r:1e4;return t.useReverseDepthBuffer&&t.isNDCHalfZRange?0:i}areLightTexturesReady(){return!(this._projectionTexture&&!this._projectionTexture.isReadyOrNotBlocking()||this._iesProfileTexture&&!this._iesProfileTexture.isReadyOrNotBlocking())}prepareLightSpecificDefines(e,t){e["SPOTLIGHT"+t]=!0,e["PROJECTEDLIGHTTEXTURE"+t]=!!(this.projectionTexture&&this.projectionTexture.isReady()),e["IESLIGHTTEXTURE"+t]=!!(this._iesProfileTexture&&this._iesProfileTexture.isReady())}};P([w()],Nr.prototype,"angle",null);P([w()],Nr.prototype,"innerAngle",null);P([w()],Nr.prototype,"shadowAngleScale",null);P([w()],Nr.prototype,"exponent",void 0);P([w()],Nr.prototype,"projectionTextureLightNear",null);P([w()],Nr.prototype,"projectionTextureLightFar",null);P([w()],Nr.prototype,"projectionTextureUpDirection",null);P([Bt("projectedLightTexture")],Nr.prototype,"_projectionTexture",void 0);Ft("BABYLON.SpotLight",Nr)});function zV(n){let e=n.pathArray,t=n.closeArray||!1,i=n.closePath||!1,r=n.invertUV||!1,s=Math.floor(e[0].length/2),a=n.offset||s;a=a>s?s:Math.floor(a);let o=n.sideOrientation===0?0:n.sideOrientation||Ie.DEFAULTSIDE,l=n.uvs,c=n.colors,f=[],h=[],d=[],u=[],m=[],_=[],p=[],g=[],v,x=[],A=[],S,E,R;if(e.length<2){let be=[],Ze=[];for(E=0;E0&&(V=D[R].subtract(D[R-1]).length(),N=V+p[S],m[S].push(N),p[S]=N),R++;i&&(R--,f.push(D[0].x,D[0].y,D[0].z),V=D[R].subtract(D[0]).length(),N=V+p[S],m[S].push(N),p[S]=N),x[S]=O+y,A[S]=I,I+=O+y}let F,U,W,$;for(E=0;E{let m=i[0].length,_=o,p=0,g=_._originalBuilderSideOrientation===j.DOUBLESIDE?2:1;for(let v=1;v<=g;++v)for(let x=0;x{Ge();Di();Ui();lr();Qr();Ie.CreateRibbon=zV;j.CreateRibbon=(n,e,t=!1,i,r,s,a=!1,o,l)=>uo(n,{pathArray:e,closeArray:t,closePath:i,offset:r,updatable:a,sideOrientation:o,instance:l},s)});function XV(n){let e=[],t=[],i=[],r=[],s=n.radius||.5,a=n.tessellation||64,o=n.arc&&(n.arc<=0||n.arc>1)?1:n.arc||1,l=n.sideOrientation===0?0:n.sideOrientation||Ie.DEFAULTSIDE;e.push(0,0,0),r.push(.5,.5);let c=Math.PI*2*o,f=o===1?c/a:c/(a-1),h=0;for(let m=0;m{Di();lr();Qr();Ie.CreateDisc=XV;j.CreateDisc=(n,e,t,i=null,r,s)=>sy(n,{radius:e,tessellation:t,sideOrientation:s,updatable:r},i)});var bm,KV=C(()=>{Ge();Ui();Di();j._GroundMeshParser=(n,e)=>bm.Parse(n,e);bm=class n extends j{constructor(e,t){super(e,t),this.generateOctree=!1}getClassName(){return"GroundMesh"}get subdivisions(){return Math.min(this._subdivisionsX,this._subdivisionsY)}get subdivisionsX(){return this._subdivisionsX}get subdivisionsY(){return this._subdivisionsY}optimize(e,t=32){this._subdivisionsX=e,this._subdivisionsY=e,this.subdivide(e);let i=this;i.createOrUpdateSubmeshesOctree&&i.createOrUpdateSubmeshesOctree(t)}getHeightAtCoordinates(e,t){let i=this.getWorldMatrix(),r=Q.Matrix[5];i.invertToRef(r);let s=Q.Vector3[8];if(b.TransformCoordinatesFromFloatsToRef(e,0,t,r,s),e=s.x,t=s.z,e=this._maxX||t<=this._minZ||t>this._maxZ)return this.position.y;(!this._heightQuads||this._heightQuads.length==0)&&(this._initHeightQuads(),this._computeHeightQuads());let a=this._getFacetAt(e,t),o=-(a.x*e+a.z*t+a.w)/a.y;return b.TransformCoordinatesFromFloatsToRef(0,o,0,i,s),s.y}getNormalAtCoordinates(e,t){let i=new b(0,1,0);return this.getNormalAtCoordinatesToRef(e,t,i),i}getNormalAtCoordinatesToRef(e,t,i){let r=this.getWorldMatrix(),s=Q.Matrix[5];r.invertToRef(s);let a=Q.Vector3[8];if(b.TransformCoordinatesFromFloatsToRef(e,0,t,s,a),e=a.x,t=a.z,ethis._maxX||tthis._maxZ)return this;(!this._heightQuads||this._heightQuads.length==0)&&(this._initHeightQuads(),this._computeHeightQuads());let o=this._getFacetAt(e,t);return b.TransformNormalFromFloatsToRef(o.x,o.y,o.z,r,i),this}updateCoordinateHeights(){return(!this._heightQuads||this._heightQuads.length==0)&&this._initHeightQuads(),this._computeHeightQuads(),this}_getFacetAt(e,t){let i=Math.floor((e+this._maxX)*this._subdivisionsX/this._width),r=Math.floor(-(t+this._maxZ)*this._subdivisionsY/this._height+this._subdivisionsY),s=this._heightQuads[r*this._subdivisionsX+i],a;return tn.maxHeight){c=!0;let h=n.maxHeight;n.maxHeight=n.minHeight,n.minHeight=h}for(s=0;s<=n.subdivisions;s++)for(a=0;a<=n.subdivisions;a++){let h=new b(a*n.width/n.subdivisions-n.width/2,0,(n.subdivisions-s)*n.height/n.subdivisions-n.height/2),d=(h.x+n.width/2)/n.width*(n.bufferWidth-1)|0,u=(1-(h.z+n.height/2)/n.height)*(n.bufferHeight-1)|0,m=(d+u*n.bufferWidth)*4,_=n.buffer[m]/255,p=n.buffer[m+1]/255,g=n.buffer[m+2]/255,v=n.buffer[m+3]/255;c&&(_=1-_,p=1-p,g=1-g);let x=_*o.r+p*o.g+g*o.b;v>=l?h.y=n.minHeight+(n.maxHeight-n.minHeight)*x:h.y=n.minHeight-Nt,n.heightBuffer&&(n.heightBuffer[s*(n.subdivisions+1)+a]=h.y),t.push(h.x,h.y,h.z),i.push(0,0,0),r.push(a/n.subdivisions,1-s/n.subdivisions)}for(s=0;s=n.minHeight,p=t[d*3+1]>=n.minHeight,g=t[u*3+1]>=n.minHeight;_&&p&&g&&(e.push(h),e.push(d),e.push(u)),t[m*3+1]>=n.minHeight&&_&&g&&(e.push(m),e.push(h),e.push(u))}Ie.ComputeNormals(t,e,i);let f=new Ie;return f.indices=e,f.positions=t,f.normals=i,f.uvs=r,f}function oy(n,e={},t){let i=new bm(n,t);return i._setReady(!1),i._subdivisionsX=e.subdivisionsX||e.subdivisions||1,i._subdivisionsY=e.subdivisionsY||e.subdivisions||1,i._width=e.width||1,i._height=e.height||1,i._maxX=i._width/2,i._maxZ=i._height/2,i._minX=-i._maxX,i._minZ=-i._maxZ,ay(e).applyToMesh(i,e.updatable),i._setReady(!0),i}function ly(n,e,t=null){let i=new j(n,t);return jV(e).applyToMesh(i,e.updatable),i}function cy(n,e,t={},i=null){let r=t.width||10,s=t.height||10,a=t.subdivisions||1,o=t.minHeight||0,l=t.maxHeight||1,c=t.colorFilter||new Te(.3,.59,.11),f=t.alphaFilter||0,h=t.updatable,d=t.onReady;i=i||Le.LastCreatedScene;let u=new bm(n,i);u._subdivisionsX=a,u._subdivisionsY=a,u._width=r,u._height=s,u._maxX=u._width/2,u._maxZ=u._height/2,u._minX=-u._maxX,u._minZ=-u._maxZ,u._setReady(!1);let m;t.passHeightBufferInCallback&&(m=new Float32Array((a+1)*(a+1)));let _=(p,g,v)=>{qV({width:r,height:s,subdivisions:a,minHeight:o,maxHeight:l,colorFilter:c,buffer:p,bufferWidth:g,bufferHeight:v,alphaFilter:f,heightBuffer:m}).applyToMesh(u,h),d&&d(u,m),u._setReady(!0)};if(typeof e=="string"){i.addPendingData(u);let p=v=>{let x=v.width,A=v.height;if(i.isDisposed){i.removePendingData(u);return}let S=i==null?void 0:i.getEngine().resizeImageBitmap(v,x,A);_(S,x,A),i.removePendingData(u)},g=(v,x)=>{i.removePendingData(u),t.onError&&t.onError(v,x)};de.LoadImage(e,p,g,i.offlineProvider)}else _(e.data,e.width,e.height);return u}var fy=C(()=>{Ge();zt();Di();lr();KV();Ci();Pi();An();Qr();Ie.CreateGround=ay;Ie.CreateTiledGround=jV;Ie.CreateGroundFromHeightMap=qV;j.CreateGround=(n,e,t,i,r,s)=>oy(n,{width:e,height:t,subdivisions:i,updatable:s},r);j.CreateTiledGround=(n,e,t,i,r,s,a,o,l)=>ly(n,{xmin:e,zmin:t,xmax:i,zmax:r,subdivisions:s,precision:a,updatable:l},o);j.CreateGroundFromHeightMap=(n,e,t,i,r,s,a,o,l,c,f)=>cy(n,e,{width:t,height:i,subdivisions:r,minHeight:s,maxHeight:a,updatable:l,onReady:c,alphaFilter:f},o)});function gA(n){let t=[0,1,2,0,2,3,4,5,6,4,6,7,8,9,10,8,10,11,12,13,14,12,14,15,16,17,18,16,18,19,20,21,22,20,22,23],i=[0,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0],r=[],s=n.width||n.size||1,a=n.height||n.size||1,o=n.depth||n.size||1,l=n.wrap||!1,c=n.topBaseAt===void 0?1:n.topBaseAt,f=n.bottomBaseAt===void 0?0:n.bottomBaseAt;c=(c+4)%4,f=(f+4)%4;let h=[2,0,3,1],d=[2,0,1,3],u=h[c],m=d[f],_=[1,-1,1,-1,-1,1,-1,1,1,1,1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1,1,1,-1,1,-1,-1,1,-1,1,1,1,1,-1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1,1,1,-1,1,-1,1,1,-1,1,1,1,1,-1,1,1,-1,-1,-1,-1,-1,-1,-1,1];if(l){t=[2,3,0,2,0,1,4,5,6,4,6,7,9,10,11,9,11,8,12,14,15,12,13,14],_=[-1,1,1,1,1,1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1,1,1,1,1,1,-1,1,-1,-1,1,-1,1,-1,1,-1,-1,1,1,-1,-1,1,-1,-1,-1];let R=[[1,1,1],[-1,1,1],[-1,1,-1],[1,1,-1]],I=[[-1,-1,1],[1,-1,1],[1,-1,-1],[-1,-1,-1]],y=[17,18,19,16],M=[22,23,20,21];for(;u>0;)R.unshift(R.pop()),y.unshift(y.pop()),u--;for(;m>0;)I.unshift(I.pop()),M.unshift(M.pop()),m--;R=R.flat(),I=I.flat(),_=_.concat(R).concat(I),t.push(y[0],y[2],y[3],y[0],y[1],y[2]),t.push(M[0],M[2],M[3],M[0],M[1],M[2])}let p=[s/2,a/2,o/2],g=_.reduce((R,I,y)=>R.concat(I*p[y%3]),[]),v=n.sideOrientation===0?0:n.sideOrientation||Ie.DEFAULTSIDE,x=n.faceUV||new Array(6),A=n.faceColors,S=[];for(let R=0;R<6;R++)x[R]===void 0&&(x[R]=new Mi(0,0,1,1)),A&&A[R]===void 0&&(A[R]=new lt(1,1,1,1));for(let R=0;R<6;R++)if(r.push(x[R].z,It?1-x[R].w:x[R].w),r.push(x[R].x,It?1-x[R].w:x[R].w),r.push(x[R].x,It?1-x[R].y:x[R].y),r.push(x[R].z,It?1-x[R].y:x[R].y),A)for(let I=0;I<4;I++)S.push(A[R].r,A[R].g,A[R].b,A[R].a);Ie._ComputeSides(v,g,t,i,r,n.frontUVs,n.backUVs);let E=new Ie;if(E.indices=t,E.positions=g,E.normals=i,E.uvs=r,A){let R=v===Ie.DOUBLESIDE?S.concat(S):S;E.colors=R}return E}function hy(n,e={},t=null){let i=new j(n,t);return e.sideOrientation=j._GetDefaultSideOrientation(e.sideOrientation),i._originalBuilderSideOrientation=e.sideOrientation,gA(e).applyToMesh(i,e.updatable),i}var dy=C(()=>{Ge();zt();Di();lr();Qr();fy();Ie.CreateBox=gA;j.CreateBox=(n,e,t=null,i,r)=>hy(n,{size:e,sideOrientation:r,updatable:i},t)});function Im(n){let e=n.pattern||j.NO_FLIP,t=n.tileWidth||n.tileSize||1,i=n.tileHeight||n.tileSize||1,r=n.alignHorizontal||0,s=n.alignVertical||0,a=n.width||n.size||1,o=Math.floor(a/t),l=a-o*t,c=n.height||n.size||1,f=Math.floor(c/i),h=c-f*i,d=t*o/2,u=i*f/2,m=0,_=0,p=0,g=0,v=0,x=0;if(l>0||h>0){switch(p=-d,g=-u,v=d,x=u,r){case j.CENTER:l/=2,p-=l,v+=l;break;case j.LEFT:v+=l,m=-l/2;break;case j.RIGHT:p-=l,m=l/2;break}switch(s){case j.CENTER:h/=2,g-=h,x+=h;break;case j.BOTTOM:x+=h,_=-h/2;break;case j.TOP:g-=h,_=h/2;break}}let A=[],S=[],E=[];E[0]=[0,0,1,0,1,1,0,1],E[1]=[0,0,1,0,1,1,0,1],(e===j.ROTATE_TILE||e===j.ROTATE_ROW)&&(E[1]=[1,1,0,1,0,0,1,0]),(e===j.FLIP_TILE||e===j.FLIP_ROW)&&(E[1]=[1,0,0,0,0,1,1,1]),(e===j.FLIP_N_ROTATE_TILE||e===j.FLIP_N_ROTATE_ROW)&&(E[1]=[0,1,1,1,1,0,0,0]);let R=[],I=[],y=[],M=0;for(let N=0;N0||h>0){let N=h>0&&(s===j.CENTER||s===j.TOP),F=h>0&&(s===j.CENTER||s===j.BOTTOM),U=l>0&&(r===j.CENTER||r===j.RIGHT),W=l>0&&(r===j.CENTER||r===j.LEFT),$,q,Z,X,Y;if(N&&U&&(A.push(p+m,g+_,0),A.push(-d+m,g+_,0),A.push(-d+m,g+h+_,0),A.push(p+m,g+h+_,0),y.push(M,M+1,M+3,M+1,M+2,M+3),M+=4,q=1-l/t,Z=1-h/i,X=1,Y=1,$=[q,Z,X,Z,X,Y,q,Y],e===j.ROTATE_ROW&&($=[1-q,1-Z,1-X,1-Z,1-X,1-Y,1-q,1-Y]),e===j.FLIP_ROW&&($=[1-q,Z,1-X,Z,1-X,Y,1-q,Y]),e===j.FLIP_N_ROTATE_ROW&&($=[q,1-Z,X,1-Z,X,1-Y,q,1-Y]),R=R.concat($),I.push(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1),S.push(0,0,-1,0,0,-1,0,0,-1,0,0,-1)),N&&W&&(A.push(d+m,g+_,0),A.push(v+m,g+_,0),A.push(v+m,g+h+_,0),A.push(d+m,g+h+_,0),y.push(M,M+1,M+3,M+1,M+2,M+3),M+=4,q=0,Z=1-h/i,X=l/t,Y=1,$=[q,Z,X,Z,X,Y,q,Y],(e===j.ROTATE_ROW||e===j.ROTATE_TILE&&o%2===0)&&($=[1-q,1-Z,1-X,1-Z,1-X,1-Y,1-q,1-Y]),(e===j.FLIP_ROW||e===j.FLIP_TILE&&o%2===0)&&($=[1-q,Z,1-X,Z,1-X,Y,1-q,Y]),(e===j.FLIP_N_ROTATE_ROW||e===j.FLIP_N_ROTATE_TILE&&o%2===0)&&($=[q,1-Z,X,1-Z,X,1-Y,q,1-Y]),R=R.concat($),I.push(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1),S.push(0,0,-1,0,0,-1,0,0,-1,0,0,-1)),F&&U&&(A.push(p+m,u+_,0),A.push(-d+m,u+_,0),A.push(-d+m,x+_,0),A.push(p+m,x+_,0),y.push(M,M+1,M+3,M+1,M+2,M+3),M+=4,q=1-l/t,Z=0,X=1,Y=h/i,$=[q,Z,X,Z,X,Y,q,Y],(e===j.ROTATE_ROW&&f%2===1||e===j.ROTATE_TILE&&f%1===0)&&($=[1-q,1-Z,1-X,1-Z,1-X,1-Y,1-q,1-Y]),(e===j.FLIP_ROW&&f%2===1||e===j.FLIP_TILE&&f%2===0)&&($=[1-q,Z,1-X,Z,1-X,Y,1-q,Y]),(e===j.FLIP_N_ROTATE_ROW&&f%2===1||e===j.FLIP_N_ROTATE_TILE&&f%2===0)&&($=[q,1-Z,X,1-Z,X,1-Y,q,1-Y]),R=R.concat($),I.push(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1),S.push(0,0,-1,0,0,-1,0,0,-1,0,0,-1)),F&&W&&(A.push(d+m,u+_,0),A.push(v+m,u+_,0),A.push(v+m,x+_,0),A.push(d+m,x+_,0),y.push(M,M+1,M+3,M+1,M+2,M+3),M+=4,q=0,Z=0,X=l/t,Y=h/i,$=[q,Z,X,Z,X,Y,q,Y],(e===j.ROTATE_ROW&&f%2===1||e===j.ROTATE_TILE&&(f+o)%2===1)&&($=[1-q,1-Z,1-X,1-Z,1-X,1-Y,1-q,1-Y]),(e===j.FLIP_ROW&&f%2===1||e===j.FLIP_TILE&&(f+o)%2===1)&&($=[1-q,Z,1-X,Z,1-X,Y,1-q,Y]),(e===j.FLIP_N_ROTATE_ROW&&f%2===1||e===j.FLIP_N_ROTATE_TILE&&(f+o)%2===1)&&($=[q,1-Z,X,1-Z,X,1-Y,q,1-Y]),R=R.concat($),I.push(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1),S.push(0,0,-1,0,0,-1,0,0,-1,0,0,-1)),N){let fe=[];q=0,Z=1-h/i,X=1,Y=1,fe[0]=[q,Z,X,Z,X,Y,q,Y],fe[1]=[q,Z,X,Z,X,Y,q,Y],(e===j.ROTATE_TILE||e===j.ROTATE_ROW)&&(fe[1]=[1-q,1-Z,1-X,1-Z,1-X,1-Y,1-q,1-Y]),(e===j.FLIP_TILE||e===j.FLIP_ROW)&&(fe[1]=[1-q,Z,1-X,Z,1-X,Y,1-q,Y]),(e===j.FLIP_N_ROTATE_TILE||e===j.FLIP_N_ROTATE_ROW)&&(fe[1]=[q,1-Z,X,1-Z,X,1-Y,q,1-Y]);for(let xe=0;xe{Di();lr();Ie.CreateTiledPlane=Im});function QV(n){let t=n.faceUV||new Array(6),i=n.faceColors,r=n.pattern||j.NO_FLIP,s=n.width||n.size||1,a=n.height||n.size||1,o=n.depth||n.size||1,l=n.tileWidth||n.tileSize||1,c=n.tileHeight||n.tileSize||1,f=n.alignHorizontal||0,h=n.alignVertical||0,d=n.sideOrientation===0?0:n.sideOrientation||Ie.DEFAULTSIDE;for(let N=0;N<6;N++)t[N]===void 0&&(t[N]=new Mi(0,0,1,1)),i&&i[N]===void 0&&(i[N]=new lt(1,1,1,1));let u=s/2,m=a/2,_=o/2,p=[];for(let N=0;N<2;N++)p[N]=Im({pattern:r,tileWidth:l,tileHeight:c,width:s,height:a,alignVertical:h,alignHorizontal:f,sideOrientation:d});for(let N=2;N<4;N++)p[N]=Im({pattern:r,tileWidth:l,tileHeight:c,width:o,height:a,alignVertical:h,alignHorizontal:f,sideOrientation:d});let g=h;h===j.BOTTOM?g=j.TOP:h===j.TOP&&(g=j.BOTTOM);for(let N=4;N<6;N++)p[N]=Im({pattern:r,tileWidth:l,tileHeight:c,width:s,height:o,alignVertical:g,alignHorizontal:f,sideOrientation:d});let v=[],x=[],A=[],S=[],E=[],R=[],I=[],y=[],M,D=0;for(let N=0;N<6;N++){let F=p[N].positions.length;R[N]=[],I[N]=[];for(let U=0;UU+D)),D+=R[N].length,i){let U=i[N];for(let W=0;W{Ge();zt();Di();lr();uy();Qr();vA=1,my=-1;Ie.CreateTiledBox=QV});function eG(n){let e=(n.segments||32)|0,t=n.diameterX||n.diameter||1,i=n.diameterY||n.diameter||1,r=n.diameterZ||n.diameter||1,s=n.arc&&(n.arc<=0||n.arc>1)?1:n.arc||1,a=n.slice&&n.slice<=0?1:n.slice||1,o=n.sideOrientation===0?0:n.sideOrientation||Ie.DEFAULTSIDE,l=!!n.dedupTopBottomIndices,c=new b(t/2,i/2,r/2),f=2+e,h=2*f,d=[],u=[],m=[],_=[];for(let g=0;g<=f;g++){let v=g/f,x=v*Math.PI*a;for(let A=0;A<=h;A++){let S=A/h,E=S*Math.PI*2*s,R=K.RotationZ(-x),I=K.RotationY(E),y=b.TransformCoordinates(b.Up(),R),M=b.TransformCoordinates(y,I),D=M.multiply(c),O=M.divide(c).normalize();u.push(D.x,D.y,D.z),m.push(O.x,O.y,O.z),_.push(S,It?1-v:v)}if(g>0){let A=u.length/3;for(let S=A-2*(h+1);S+h+21&&(d.push(S),d.push(S+1),d.push(S+h+1)),(g{Ge();Di();lr();Qr();Ie.CreateSphere=eG;j.CreateSphere=(n,e,t,i,r,s)=>py(n,{segments:e,diameterX:t,diameterY:t,diameterZ:t,sideOrientation:s,updatable:r},i)});function iG(n){let e=n.height||2,t=n.diameterTop===0?0:n.diameterTop||n.diameter||1,i=n.diameterBottom===0?0:n.diameterBottom||n.diameter||1;t=t||1e-5,i=i||1e-5;let r=(n.tessellation||24)|0,s=(n.subdivisions||1)|0,a=!!n.hasRings,o=!!n.enclose,l=n.cap===0?0:n.cap||j.CAP_ALL,c=n.arc&&(n.arc<=0||n.arc>1)?1:n.arc||1,f=n.sideOrientation===0?0:n.sideOrientation||Ie.DEFAULTSIDE,h=n.faceUV||new Array(3),d=n.faceColors,u=c!==1&&o?2:0,m=a?s:1,_=2+(1+u)*m,p;for(p=0;p<_;p++)d&&d[p]===void 0&&(d[p]=new lt(1,1,1,1));for(p=0;p<_;p++)h&&h[p]===void 0&&(h[p]=new Mi(0,0,1,1));let g=[],v=[],x=[],A=[],S=[],E=Math.PI*2*c/r,R,I,y,M=(i-t)/2/e,D=b.Zero(),O=b.Zero(),V=b.Zero(),N=b.Zero(),F=b.Zero(),U=ds.Y,W,$,q,Z,X=1,Y=0,fe;for(W=0;W<=s;W++)for(I=W/s,y=(I*(t-i)+i)/2,Z=a&&W!==0&&W!==s?2:1,q=0;q{let ie=pe?t/2:i/2;if(ie===0)return;let _e,Pe,ue,be=pe?h[_-1]:h[0],Ze=null;d&&(Ze=pe?d[_-1]:d[0]);let Tt=v.length/3,Ye=pe?e/2:-e/2,Ke=new b(0,Ye,0);v.push(Ke.x,Ke.y,Ke.z),x.push(0,pe?1:-1,0);let he=be.y+(be.w-be.y)*.5;A.push(be.x+(be.z-be.x)*.5,It?1-he:he),Ze&&S.push(Ze.r,Ze.g,Ze.b,Ze.a);let we=new Ne(.5,.5);for(ue=0;ue<=r;ue++){_e=Math.PI*2*ue*c/r;let Vt=Math.cos(-_e),re=Math.sin(-_e);Pe=new b(Vt*ie,Ye,re*ie);let di=new Ne(Vt*we.x+.5,re*we.y+.5);v.push(Pe.x,Pe.y,Pe.z),x.push(0,pe?1:-1,0);let Xt=be.y+(be.w-be.y)*di.y;A.push(be.x+(be.z-be.x)*di.x,It?1-Xt:Xt),Ze&&S.push(Ze.r,Ze.g,Ze.b,Ze.a)}for(ue=0;ue{Ge();zt();Di();lr();ps();Pu();Qr();Ie.CreateCylinder=iG;j.CreateCylinder=(n,e,t,i,r,s,a,o,l)=>((a===void 0||!(a instanceof Qt))&&(a!==void 0&&(l=o||j.DEFAULTSIDE,o=a),a=s,s=1),_y(n,{height:e,diameterTop:t,diameterBottom:i,tessellation:r,subdivisions:s,sideOrientation:l,updatable:o},a))});function nG(n){let e=[],t=[],i=[],r=[],s=n.diameter||1,a=n.thickness||.5,o=(n.tessellation||16)|0,l=n.sideOrientation===0?0:n.sideOrientation||Ie.DEFAULTSIDE,c=o+1;for(let h=0;h<=o;h++){let d=h/o,u=h*Math.PI*2/o-Math.PI/2,m=K.Translation(s/2,0,0).multiply(K.RotationY(u));for(let _=0;_<=o;_++){let p=1-_/o,g=_*Math.PI*2/o+Math.PI,v=Math.cos(g),x=Math.sin(g),A=new b(v,x,0),S=A.scale(a/2),E=new Ne(d,p);S=b.TransformCoordinates(S,m),A=b.TransformNormal(A,m),t.push(S.x,S.y,S.z),i.push(A.x,A.y,A.z),r.push(E.x,It?1-E.y:E.y);let R=(h+1)%c,I=(_+1)%c;e.push(h*c+_),e.push(h*c+I),e.push(R*c+_),e.push(h*c+I),e.push(R*c+I),e.push(R*c+_)}}Ie._ComputeSides(l,t,e,i,r,n.frontUVs,n.backUVs);let f=new Ie;return f.indices=e,f.positions=t,f.normals=i,f.uvs=r,f}function gy(n,e={},t){let i=new j(n,t);return e.sideOrientation=j._GetDefaultSideOrientation(e.sideOrientation),i._originalBuilderSideOrientation=e.sideOrientation,nG(e).applyToMesh(i,e.updatable),i}var sG=C(()=>{Ge();Di();lr();Qr();Ie.CreateTorus=nG;j.CreateTorus=(n,e,t,i,r,s,a)=>gy(n,{diameter:e,thickness:t,tessellation:i,sideOrientation:a,updatable:s},r)});function aG(n){let e=[],t=[],i=[],r=[],s=n.radius||2,a=n.tube||.5,o=n.radialSegments||32,l=n.tubularSegments||32,c=n.p||2,f=n.q||3,h=n.sideOrientation===0?0:n.sideOrientation||Ie.DEFAULTSIDE,d=p=>{let g=Math.cos(p),v=Math.sin(p),x=f/c*p,A=Math.cos(x),S=s*(2+A)*.5*g,E=s*(2+A)*v*.5,R=s*Math.sin(x)*.5;return new b(S,E,R)},u,m;for(u=0;u<=o;u++){let g=u%o/o*2*c*Math.PI,v=d(g),x=d(g+.01),A=x.subtract(v),S=x.add(v),E=b.Cross(A,S);for(S=b.Cross(E,A),E.normalize(),S.normalize(),m=0;m{Ge();Di();lr();Qr();Ie.CreateTorusKnot=aG;j.CreateTorusKnot=(n,e,t,i,r,s,a,o,l,c)=>vy(n,{radius:e,tube:t,radialSegments:i,tubularSegments:r,p:s,q:a,sideOrientation:c,updatable:l},o)});var Zl,Ey=C(()=>{Ge();Pt();im();Di();R_();kh();Ui();Ci();Vi();j._instancedMeshFactory=(n,e)=>{let t=new Zl(n,e);if(e.instancedBuffers){t.instancedBuffers={};for(let i in e.instancedBuffers)t.instancedBuffers[i]=e.instancedBuffers[i]}return t};Zl=class extends pr{constructor(e,t){super(e,t.getScene()),this._indexInSourceMeshInstanceArray=-1,this._distanceToCamera=0,t.addInstance(this),this._sourceMesh=t,this._unIndexed=t._unIndexed,this.position.copyFrom(t.position),this.rotation.copyFrom(t.rotation),this.scaling.copyFrom(t.scaling),t.rotationQuaternion&&(this.rotationQuaternion=t.rotationQuaternion.clone()),this.animations=t.animations.slice();for(let i of t.getAnimationRanges())i!=null&&this.createAnimationRange(i.name,i.from,i.to);if(this.infiniteDistance=t.infiniteDistance,this.setPivotMatrix(t.getPivotMatrix()),!t.skeleton&&!t.morphTargetManager&&t.hasBoundingInfo){let i=t.getBoundingInfo();this.buildBoundingInfo(i.minimum,i.maximum)}else this.refreshBoundingInfo(!0,!0);this._syncSubMeshes()}getClassName(){return"InstancedMesh"}get lightSources(){return this._sourceMesh._lightSources}_resyncLightSources(){}_resyncLightSource(){}_removeLightSource(){}get receiveShadows(){return this._sourceMesh.receiveShadows}set receiveShadows(e){var t;((t=this._sourceMesh)==null?void 0:t.receiveShadows)!==e&&de.Warn("Setting receiveShadows on an instanced mesh has no effect")}get material(){return this._sourceMesh.material}set material(e){var t;((t=this._sourceMesh)==null?void 0:t.material)!==e&&de.Warn("Setting material on an instanced mesh has no effect")}get visibility(){return this._sourceMesh.visibility}set visibility(e){var t;((t=this._sourceMesh)==null?void 0:t.visibility)!==e&&de.Warn("Setting visibility on an instanced mesh has no effect")}get skeleton(){return this._sourceMesh.skeleton}set skeleton(e){var t;((t=this._sourceMesh)==null?void 0:t.skeleton)!==e&&de.Warn("Setting skeleton on an instanced mesh has no effect")}get renderingGroupId(){return this._sourceMesh.renderingGroupId}set renderingGroupId(e){!this._sourceMesh||e===this._sourceMesh.renderingGroupId||J.Warn("Note - setting renderingGroupId of an instanced mesh has no effect on the scene")}getTotalVertices(){return this._sourceMesh?this._sourceMesh.getTotalVertices():0}getTotalIndices(){return this._sourceMesh.getTotalIndices()}get sourceMesh(){return this._sourceMesh}get geometry(){return this._sourceMesh._geometry}createInstance(e){return this._sourceMesh.createInstance(e)}isReady(e=!1){return this._sourceMesh.isReady(e,!0)}getVerticesData(e,t,i){return this._sourceMesh.getVerticesData(e,t,i)}copyVerticesData(e,t){this._sourceMesh.copyVerticesData(e,t)}getVertexBuffer(e,t){return this._sourceMesh.getVertexBuffer(e,t)}setVerticesData(e,t,i,r){return this.sourceMesh&&this.sourceMesh.setVerticesData(e,t,i,r),this.sourceMesh}updateVerticesData(e,t,i,r){return this.sourceMesh&&this.sourceMesh.updateVerticesData(e,t,i,r),this.sourceMesh}setIndices(e,t=null){return this.sourceMesh&&this.sourceMesh.setIndices(e,t),this.sourceMesh}isVerticesDataPresent(e){return this._sourceMesh.isVerticesDataPresent(e)}getIndices(){return this._sourceMesh.getIndices()}get _positions(){return this._sourceMesh._positions}refreshBoundingInfo(e=!1,t=!1){if(this.hasBoundingInfo&&this.getBoundingInfo().isLocked)return this;let i;typeof e=="object"?i=e:i={applySkeleton:e,applyMorph:t};let r=this._sourceMesh.geometry?this._sourceMesh.geometry.boundingBias:null;return this._refreshBoundingInfo(this._sourceMesh._getData(i,null,L.PositionKind),r),this}_preActivate(){return this._currentLOD&&this._currentLOD._preActivate(),this}_activate(e,t){if(super._activate(e,t),this._sourceMesh.subMeshes||J.Warn("Instances should only be created for meshes with geometry."),this._currentLOD){if(this._currentLOD._getWorldMatrixDeterminant()>=0!=this._getWorldMatrixDeterminant()>=0)return this._internalAbstractMeshDataInfo._actAsRegularMesh=!0,!0;if(this._internalAbstractMeshDataInfo._actAsRegularMesh=!1,this._currentLOD._registerInstanceForRenderId(this,e),t){if(!this._currentLOD._internalAbstractMeshDataInfo._isActiveIntermediate)return this._currentLOD._internalAbstractMeshDataInfo._onlyForInstancesIntermediate=!0,!0}else if(!this._currentLOD._internalAbstractMeshDataInfo._isActive)return this._currentLOD._internalAbstractMeshDataInfo._onlyForInstances=!0,!0}return!1}_postActivate(){this._sourceMesh.edgesShareWithInstances&&this._sourceMesh._edgesRenderer&&this._sourceMesh._edgesRenderer.isEnabled&&this._sourceMesh._renderingGroup?(this._sourceMesh._renderingGroup._edgesRenderers.pushNoDuplicate(this._sourceMesh._edgesRenderer),this._sourceMesh._edgesRenderer.customInstances.push(this.getWorldMatrix())):this._edgesRenderer&&this._edgesRenderer.isEnabled&&this._sourceMesh._renderingGroup&&this._sourceMesh._renderingGroup._edgesRenderers.push(this._edgesRenderer)}getWorldMatrix(){if(this._currentLOD&&this._currentLOD!==this._sourceMesh&&this._currentLOD.billboardMode!==$t.BILLBOARDMODE_NONE&&this._currentLOD._masterMesh!==this){this._billboardWorldMatrix||(this._billboardWorldMatrix=new K);let e=this._currentLOD._masterMesh;return this._currentLOD._masterMesh=this,Q.Vector3[7].copyFrom(this._currentLOD.position),this._currentLOD.position.set(0,0,0),this._billboardWorldMatrix.copyFrom(this._currentLOD.computeWorldMatrix(!0)),this._currentLOD.position.copyFrom(Q.Vector3[7]),this._currentLOD._masterMesh=e,this._billboardWorldMatrix}return super.getWorldMatrix()}get isAnInstance(){return!0}getLOD(e){if(!e)return this;let t=this.sourceMesh.getLODLevels();if(!t||t.length===0)this._currentLOD=this.sourceMesh;else{let i=this.getBoundingInfo();this._currentLOD=this.sourceMesh.getLOD(e,i.boundingSphere)}return this._currentLOD}_preActivateForIntermediateRendering(e){return this.sourceMesh._preActivateForIntermediateRendering(e)}_syncSubMeshes(){if(this.releaseSubMeshes(),this._sourceMesh.subMeshes)for(let e=0;e{On=class{constructor(){this._defines={},this._currentRank=32,this._maxRank=-1,this._mesh=null}unBindMesh(){this._mesh=null}addFallback(e,t){this._defines[e]||(ethis._maxRank&&(this._maxRank=e),this._defines[e]=new Array),this._defines[e].push(t)}addCPUSkinningFallback(e,t){this._mesh=t,ethis._maxRank&&(this._maxRank=e)}get hasMoreFallbacks(){return this._currentRank<=this._maxRank}reduce(e,t){if(this._mesh&&this._mesh.computeBonesUsingShaders&&this._mesh.numBoneInfluencers>0){this._mesh.computeBonesUsingShaders=!1,e=e.replace("#define NUM_BONE_INFLUENCERS "+this._mesh.numBoneInfluencers,"#define NUM_BONE_INFLUENCERS 0"),t._bonesComputationForcedToCPU=!0;let i=this._mesh.getScene();for(let r=0;r0&&(s.computeBonesUsingShaders=!1);continue}if(!(!s.computeBonesUsingShaders||s.numBoneInfluencers===0)){if(s.material.getEffect()===t)s.computeBonesUsingShaders=!1;else if(s.subMeshes){for(let a of s.subMeshes)if(a.effect===t){s.computeBonesUsingShaders=!1;break}}}}}else{let i=this._defines[this._currentRank];if(i)for(let r=0;r{Ge();Pn();al=class extends ve{constructor(e,t,i=!0,r=!1){super(e,t,void 0,r),this._normalMatrix=new K,this._storeEffectOnSubMeshes=i}getEffect(){return this._storeEffectOnSubMeshes?this._activeEffect:super.getEffect()}isReady(e,t){return e?!this._storeEffectOnSubMeshes||!e.subMeshes||e.subMeshes.length===0?!0:this.isReadyForSubMesh(e,e.subMeshes[0],t):!1}_isReadyForSubMesh(e){let t=e.materialDefines;return!!(!this.checkReadyOnEveryCall&&e.effect&&t&&t._renderId===this.getScene().getRenderId())}bindOnlyWorldMatrix(e){this._activeEffect.setMatrix("world",e)}bindOnlyNormalMatrix(e){this._activeEffect.setMatrix("normalMatrix",e)}bind(e,t){t&&this.bindForSubMesh(e,t,t.subMeshes[0])}_afterBind(e,t=null,i){super._afterBind(e,t,i),this.getScene()._cachedEffect=t,i?i._drawWrapper._forceRebindOnNextCall=!1:this._drawWrapper._forceRebindOnNextCall=!1}_mustRebind(e,t,i,r=1){return i._drawWrapper._forceRebindOnNextCall||e.isCachedMaterialInvalid(this,t,r)}dispose(e,t,i){this._activeEffect=void 0,super.dispose(e,t,i)}}});function bf(n){let e=n.getVertexBuffers();if(!e)return null;let t=lG.get(n);if(!t)t=new Map,lG.set(n,t);else{let i=!1;for(let r in e)if(!t.has(r)){i=!0;break}if(!i)return t}for(let i in e){let r=e[i];if(r){let s=r.byteOffset,a=r.byteStride,o=r.type,l=r.normalized;t.set(i,{offset:s,stride:a,type:o,normalized:l})}}return t}function If(n,e){e.forEach((t,i)=>{let r=`vp_${i}_info`;n.setFloat4(r,t.offset,t.stride,t.type,t.normalized?1:0)})}var lG,$_=C(()=>{lG=new WeakMap});var Sy,mo,Ty=C(()=>{Er();ps();Ge();Ui();Gr();Vi();Rf();yh();Q_();Pi();il();yn();$_();Sy={effect:null,subMesh:null},mo=class n extends al{constructor(e,t,i,r={},s=!0){super(e,t,s),this._textures={},this._internalTextures={},this._textureArrays={},this._externalTextures={},this._floats={},this._ints={},this._uints={},this._floatsArrays={},this._colors3={},this._colors3Arrays={},this._colors4={},this._colors4Arrays={},this._vectors2={},this._vectors3={},this._vectors4={},this._quaternions={},this._quaternionsArrays={},this._matrices={},this._matrixArrays={},this._matrices3x3={},this._matrices2x2={},this._vectors2Arrays={},this._vectors3Arrays={},this._vectors4Arrays={},this._uniformBuffers={},this._textureSamplers={},this._storageBuffers={},this._cachedWorldViewMatrix=new K,this._cachedWorldViewProjectionMatrix=new K,this._multiview=!1,this._vertexPullingMetadata=null,this._materialHelperNeedsPreviousMatrices=!1,this._shaderPath=i,this._options={needAlphaBlending:!1,needAlphaTesting:!1,attributes:["position","normal","uv"],uniforms:["worldViewProjection"],uniformBuffers:[],samplers:[],externalTextures:[],samplerObjects:[],storageBuffers:[],defines:[],useClipPlane:!1,...r}}get shaderPath(){return this._shaderPath}set shaderPath(e){this._shaderPath=e}get options(){return this._options}get isMultiview(){return this._multiview}getClassName(){return"ShaderMaterial"}needAlphaBlending(){return this.alpha<1||this._options.needAlphaBlending}needAlphaTesting(){return this._options.needAlphaTesting}_checkUniform(e){this._options.uniforms.indexOf(e)===-1&&this._options.uniforms.push(e)}setTexture(e,t){return this._options.samplers.indexOf(e)===-1&&this._options.samplers.push(e),this._textures[e]=t,this}setInternalTexture(e,t){return this._options.samplers.indexOf(e)===-1&&this._options.samplers.push(e),this._internalTextures[e]=t,this}removeTexture(e){delete this._textures[e]}setTextureArray(e,t){return this._options.samplers.indexOf(e)===-1&&this._options.samplers.push(e),this._checkUniform(e),this._textureArrays[e]=t,this}setExternalTexture(e,t){return this._options.externalTextures.indexOf(e)===-1&&this._options.externalTextures.push(e),this._externalTextures[e]=t,this}setFloat(e,t){return this._checkUniform(e),this._floats[e]=t,this}setInt(e,t){return this._checkUniform(e),this._ints[e]=t,this}setUInt(e,t){return this._checkUniform(e),this._uints[e]=t,this}setFloats(e,t){return this._checkUniform(e),this._floatsArrays[e]=t,this}setColor3(e,t){return this._checkUniform(e),this._colors3[e]=t,this}setColor3Array(e,t){return this._checkUniform(e),this._colors3Arrays[e]=t.reduce((i,r)=>(i.push(r.r,r.g,r.b),i),[]),this}setColor4(e,t){return this._checkUniform(e),this._colors4[e]=t,this}setColor4Array(e,t){return this._checkUniform(e),this._colors4Arrays[e]=t.reduce((i,r)=>(i.push(r.r,r.g,r.b,r.a),i),[]),this}setVector2(e,t){return this._checkUniform(e),this._vectors2[e]=t,this}setVector3(e,t){return this._checkUniform(e),this._vectors3[e]=t,this}setVector4(e,t){return this._checkUniform(e),this._vectors4[e]=t,this}setQuaternion(e,t){return this._checkUniform(e),this._quaternions[e]=t,this}setQuaternionArray(e,t){return this._checkUniform(e),this._quaternionsArrays[e]=t.reduce((i,r)=>(r.toArray(i,i.length),i),[]),this}setMatrix(e,t){return this._checkUniform(e),this._matrices[e]=t,this}setMatrices(e,t){this._checkUniform(e);let i=new Float32Array(t.length*16);for(let r=0;rs===e||s.startsWith(i));return r>=0&&this.options.defines.splice(r,1),(typeof t!="boolean"||t)&&this.options.defines.push(i+t),this}isReadyForSubMesh(e,t,i){return this.isReady(e,i,t)}isReady(e,t,i){var E,R,I,y;let r=i&&this._storeEffectOnSubMeshes;if(this.isFrozen){let M=r?i._drawWrapper:this._drawWrapper;if(M.effect&&M._wasPreviouslyReady&&M._wasPreviouslyUsingInstances===t)return!0}let s=this.getScene(),a=s.getEngine(),o=[],l=[],c=null,f=this._shaderPath,h=this._options.uniforms,d=this._options.uniformBuffers,u=this._options.samplers;a.getCaps().multiview&&s.activeCamera&&s.activeCamera.outputRenderTarget&&s.activeCamera.outputRenderTarget.getViewCount()>1&&(this._multiview=!0,o.push("#define MULTIVIEW"),h.indexOf("viewProjection")!==-1&&h.indexOf("viewProjectionR")===-1&&h.push("viewProjectionR"));for(let M=0;M4&&(l.push(L.MatricesIndicesExtraKind),l.push(L.MatricesWeightsExtraKind));let M=e.skeleton;o.push("#define NUM_BONE_INFLUENCERS "+e.numBoneInfluencers),c=new On,c.addCPUSkinningFallback(0,e),M.isUsingTextureForMatrices?(o.push("#define BONETEXTURE"),h.indexOf("boneTextureInfo")===-1&&h.push("boneTextureInfo"),this._options.samplers.indexOf("boneSampler")===-1&&this._options.samplers.push("boneSampler")):(o.push("#define BonesPerMesh "+(M.bones.length+1)),h.indexOf("mBones")===-1&&h.push("mBones"))}else o.push("#define NUM_BONE_INFLUENCERS 0");let m=0,_=e?e.morphTargetManager:null;if(_){let M=o.indexOf("#define UV1")!==-1,D=o.indexOf("#define UV2")!==-1,O=o.indexOf("#define TANGENT")!==-1,V=o.indexOf("#define NORMAL")!==-1,N=o.indexOf("#define VERTEXCOLOR")!==-1;m=rl(_,o,l,e,!0,V,O,M,D,N),_.isUsingTextureForTargets&&(h.indexOf("morphTargetTextureIndices")===-1&&h.push("morphTargetTextureIndices"),this._options.samplers.indexOf("morphTargets")===-1&&this._options.samplers.push("morphTargets")),m>0&&(h=h.slice(),h.push("morphTargetInfluences"),h.push("morphTargetCount"),h.push("morphTargetTextureInfo"),h.push("morphTargetTextureIndices"))}else o.push("#define NUM_MORPH_INFLUENCERS 0");if(e){let M=e.bakedVertexAnimationManager;M&&M.isEnabled&&(o.push("#define BAKED_VERTEX_ANIMATION_TEXTURE"),h.indexOf("bakedVertexAnimationSettings")===-1&&h.push("bakedVertexAnimationSettings"),h.indexOf("bakedVertexAnimationTextureSizeInverted")===-1&&h.push("bakedVertexAnimationTextureSizeInverted"),h.indexOf("bakedVertexAnimationTime")===-1&&h.push("bakedVertexAnimationTime"),this._options.samplers.indexOf("bakedVertexAnimationTexture")===-1&&this._options.samplers.push("bakedVertexAnimationTexture"),t&&l.push("bakedVertexAnimationSettingsInstanced"))}for(let M in this._textures)if(!this._textures[M].isReady())return!1;for(let M in this._internalTextures)if(!this._internalTextures[M].isReady)return!1;e&&this.needAlphaTestingForMesh(e)&&o.push("#define ALPHATEST"),this._options.useClipPlane!==!1&&(In(h),tl(this,s,o)),s.fogEnabled&&(e!=null&&e.applyFog)&&s.fogMode!==Qt.FOGMODE_NONE&&(o.push("#define FOG"),h.indexOf("view")===-1&&h.push("view"),h.indexOf("vFogInfos")===-1&&h.push("vFogInfos"),h.indexOf("vFogColor")===-1&&h.push("vFogColor")),this._useLogarithmicDepth&&(o.push("#define LOGARITHMICDEPTH"),h.indexOf("logarithmicDepthConstant")===-1&&h.push("logarithmicDepthConstant"));let p=i?i.getRenderingMesh():e;if(p&&this.useVertexPulling){let M=p.geometry;M&&(this._vertexPullingMetadata=bf(M),this._vertexPullingMetadata&&this._vertexPullingMetadata.forEach((O,V)=>{h.push(`vp_${V}_info`)})),o.push("#define USE_VERTEX_PULLING");let D=(E=p.geometry)==null?void 0:E.getIndexBuffer();D&&!p.isUnIndexed&&(o.push("#define VERTEX_PULLING_USE_INDEX_BUFFER"),D.is32Bits&&o.push("#define VERTEX_PULLING_INDEX_BUFFER_32BITS"))}this.customShaderNameResolve&&(h=h.slice(),d=d.slice(),u=u.slice(),f=this.customShaderNameResolve(this.name,h,d,u,o,l));let g=r?i._getDrawWrapper(void 0,!0):this._drawWrapper,v=(R=g==null?void 0:g.effect)!=null?R:null,x=(I=g==null?void 0:g.defines)!=null?I:null,A=o.join(` +`),S=v;return x!==A&&(S=a.createEffect(f,{attributes:l,uniformsNames:h,uniformBuffersNames:d,samplers:u,defines:A,fallbacks:c,onCompiled:this.onCompiled,onError:this.onError,indexParameters:{maxSimultaneousMorphTargets:m},shaderLanguage:this._options.shaderLanguage,extraInitializationsAsync:this._options.extraInitializationsAsync},a),r?i.setEffect(S,A,this._materialContext):g&&g.setEffect(S,A),this._onEffectCreatedObservable&&(Sy.effect=S,Sy.subMesh=(y=i!=null?i:e==null?void 0:e.subMeshes[0])!=null?y:null,this._onEffectCreatedObservable.notifyObservers(Sy))),g._wasPreviouslyUsingInstances=!!t,S!=null&&S.isReady()?(v!==S&&s.resetCachedMaterial(),g._wasPreviouslyReady=!0,!0):!1}bindOnlyWorldMatrix(e,t){let i=t!=null?t:this.getEffect();if(!i)return;let r=this._options.uniforms;r.indexOf("world")!==-1&&i.setMatrix("world",e);let s=this.getScene();r.indexOf("worldView")!==-1&&(e.multiplyToRef(s.getViewMatrix(),this._cachedWorldViewMatrix),i.setMatrix("worldView",this._cachedWorldViewMatrix)),r.indexOf("worldViewProjection")!==-1&&(e.multiplyToRef(s.getTransformMatrix(),this._cachedWorldViewProjectionMatrix),i.setMatrix("worldViewProjection",this._cachedWorldViewProjectionMatrix)),r.indexOf("view")!==-1&&i.setMatrix("view",s.getViewMatrix())}bindForSubMesh(e,t,i){var r;this.bind(e,t,(r=i._drawWrapperOverride)==null?void 0:r.effect,i)}bind(e,t,i,r){var h;let s=r&&this._storeEffectOnSubMeshes,a=i!=null?i:s?r.effect:this.getEffect();if(!a)return;let o=this.getScene();this._activeEffect=a,this.bindOnlyWorldMatrix(e,i);let l=this._options.uniformBuffers,c=!1;if(a&&l&&l.length>0&&o.getEngine().supportsUniformBuffers)for(let d=0;dnew n(e,this.getScene(),this._shaderPath,this._options,this._storeEffectOnSubMeshes),this);t.name=e,t.id=e,typeof t._shaderPath=="object"&&(t._shaderPath={...t._shaderPath}),this._options={...this._options};let i=Object.keys(this._options);for(let r of i){let s=this._options[r];Array.isArray(s)&&(this._options[r]=s.slice(0))}this.stencil.copyTo(t.stencil);for(let r in this._textures)t.setTexture(r,this._textures[r]);for(let r in this._internalTextures)t.setInternalTexture(r,this._internalTextures[r]);for(let r in this._textureArrays)t.setTextureArray(r,this._textureArrays[r]);for(let r in this._externalTextures)t.setExternalTexture(r,this._externalTextures[r]);for(let r in this._ints)t.setInt(r,this._ints[r]);for(let r in this._uints)t.setUInt(r,this._uints[r]);for(let r in this._floats)t.setFloat(r,this._floats[r]);for(let r in this._floatsArrays)t.setFloats(r,this._floatsArrays[r]);for(let r in this._colors3)t.setColor3(r,this._colors3[r]);for(let r in this._colors3Arrays)t._colors3Arrays[r]=this._colors3Arrays[r];for(let r in this._colors4)t.setColor4(r,this._colors4[r]);for(let r in this._colors4Arrays)t._colors4Arrays[r]=this._colors4Arrays[r];for(let r in this._vectors2)t.setVector2(r,this._vectors2[r]);for(let r in this._vectors3)t.setVector3(r,this._vectors3[r]);for(let r in this._vectors4)t.setVector4(r,this._vectors4[r]);for(let r in this._quaternions)t.setQuaternion(r,this._quaternions[r]);for(let r in this._quaternionsArrays)t._quaternionsArrays[r]=this._quaternionsArrays[r];for(let r in this._matrices)t.setMatrix(r,this._matrices[r]);for(let r in this._matrixArrays)t._matrixArrays[r]=this._matrixArrays[r].slice();for(let r in this._matrices3x3)t.setMatrix3x3(r,this._matrices3x3[r]);for(let r in this._matrices2x2)t.setMatrix2x2(r,this._matrices2x2[r]);for(let r in this._vectors2Arrays)t.setArray2(r,this._vectors2Arrays[r]);for(let r in this._vectors3Arrays)t.setArray3(r,this._vectors3Arrays[r]);for(let r in this._vectors4Arrays)t.setArray4(r,this._vectors4Arrays[r]);for(let r in this._uniformBuffers)t.setUniformBuffer(r,this._uniformBuffers[r]);for(let r in this._textureSamplers)t.setTextureSampler(r,this._textureSamplers[r]);for(let r in this._storageBuffers)t.setStorageBuffer(r,this._storageBuffers[r]);return t}dispose(e,t,i){if(t){let r;for(r in this._textures)this._textures[r].dispose();for(r in this._internalTextures)this._internalTextures[r].dispose();for(r in this._textureArrays){let s=this._textureArrays[r];for(let a=0;anew n(e.name,t,e.shaderPath,e.options,e.storeEffectOnSubMeshes),e,t,i),s;e.stencil&&r.stencil.parse(e.stencil,t,i);for(s in e.textures)r.setTexture(s,ge.Parse(e.textures[s],t,i));for(s in e.textureArrays){let a=e.textureArrays[s],o=[];for(let l=0;l(c%3===0?o.push([l]):o[o.length-1].push(l),o),[]).map(o=>({r:o[0],g:o[1],b:o[2]}));r.setColor3Array(s,a)}for(s in e.colors4){let a=e.colors4[s];r.setColor4(s,{r:a[0],g:a[1],b:a[2],a:a[3]})}for(s in e.colors4Arrays){let a=e.colors4Arrays[s].reduce((o,l,c)=>(c%4===0?o.push([l]):o[o.length-1].push(l),o),[]).map(o=>({r:o[0],g:o[1],b:o[2],a:o[3]}));r.setColor4Array(s,a)}for(s in e.vectors2){let a=e.vectors2[s];r.setVector2(s,{x:a[0],y:a[1]})}for(s in e.vectors3){let a=e.vectors3[s];r.setVector3(s,{x:a[0],y:a[1],z:a[2]})}for(s in e.vectors4){let a=e.vectors4[s];r.setVector4(s,{x:a[0],y:a[1],z:a[2],w:a[3]})}for(s in e.quaternions)r.setQuaternion(s,ze.FromArray(e.quaternions[s]));for(s in e.matrices)r.setMatrix(s,K.FromArray(e.matrices[s]));for(s in e.matrixArray)r._matrixArrays[s]=new Float32Array(e.matrixArray[s]);for(s in e.matrices3x3)r.setMatrix3x3(s,e.matrices3x3[s]);for(s in e.matrices2x2)r.setMatrix2x2(s,e.matrices2x2[s]);for(s in e.vectors2Arrays)r.setArray2(s,e.vectors2Arrays[s]);for(s in e.vectors3Arrays)r.setArray3(s,e.vectors3Arrays[s]);for(s in e.vectors4Arrays)r.setArray4(s,e.vectors4Arrays[s]);for(s in e.quaternionsArrays)r.setArray4(s,e.quaternionsArrays[s]);return r}static async ParseFromFileAsync(e,t,i,r=""){return await new Promise((s,a)=>{let o=new br;o.addEventListener("readystatechange",()=>{if(o.readyState==4)if(o.status==200){let l=JSON.parse(o.responseText),c=this.Parse(l,i||Le.LastCreatedScene,r);e&&(c.name=e),s(c)}else a("Unable to load the ShaderMaterial")}),o.open("GET",t),o.send()})}static async ParseFromSnippetAsync(e,t,i=""){return await new Promise((r,s)=>{let a=new br;a.addEventListener("readystatechange",()=>{if(a.readyState==4)if(a.status==200){let o=JSON.parse(JSON.parse(a.responseText).jsonPayload),l=JSON.parse(o.shaderMaterial),c=this.Parse(l,t||Le.LastCreatedScene,i);c.snippetId=e,r(c)}else s("Unable to load the snippet "+e)}),a.open("GET",this.SnippetUrl+"/"+e.replace(/#/g,"/")),a.send()})}};mo.SnippetUrl="https://snippet.babylonjs.com";mo.CreateFromSnippetAsync=mo.ParseFromSnippetAsync;Ft("BABYLON.ShaderMaterial",mo)});var cG,Cne,Ql=C(()=>{G();cG="bonesDeclaration",Cne=`#if NUM_BONE_INFLUENCERS>0 #ifndef USE_VERTEX_PULLING attribute matricesIndices : vec4f;attribute matricesWeights : vec4f; #if NUM_BONE_INFLUENCERS>4 @@ -4461,7 +4461,7 @@ let textureWidth=i32(uniforms.boneTextureInfo.x);let y=offset/textureWidth;let x #endif #endif #endif -`;S.IncludesShadersStoreWGSL[JV]||(S.IncludesShadersStoreWGSL[JV]=ane)});var $V,one,Zl=C(()=>{k();$V="bakedVertexAnimationDeclaration",one=`#ifdef BAKED_VERTEX_ANIMATION_TEXTURE +`;T.IncludesShadersStoreWGSL[cG]||(T.IncludesShadersStoreWGSL[cG]=Cne)});var fG,yne,$l=C(()=>{G();fG="bakedVertexAnimationDeclaration",yne=`#ifdef BAKED_VERTEX_ANIMATION_TEXTURE uniform bakedVertexAnimationTime: f32;uniform bakedVertexAnimationSettings: vec4;var bakedVertexAnimationTexture : texture_2d; #ifdef INSTANCES attribute bakedVertexAnimationSettingsInstanced : vec4; @@ -4469,7 +4469,7 @@ attribute bakedVertexAnimationSettingsInstanced : vec4; fn readMatrixFromRawSamplerVAT(smp : texture_2d,index : f32,frame : f32)->mat4x4 {let offset=i32(index)*4;let frameUV=i32(frame);let m0=textureLoad(smp,vec2(offset+0,frameUV),0);let m1=textureLoad(smp,vec2(offset+1,frameUV),0);let m2=textureLoad(smp,vec2(offset+2,frameUV),0);let m3=textureLoad(smp,vec2(offset+3,frameUV),0);return mat4x4(m0,m1,m2,m3);} #endif -`;S.IncludesShadersStoreWGSL[$V]||(S.IncludesShadersStoreWGSL[$V]=one)});var eG,lne,Ql=C(()=>{k();eG="clipPlaneVertexDeclaration",lne=`#ifdef CLIPPLANE +`;T.IncludesShadersStoreWGSL[fG]||(T.IncludesShadersStoreWGSL[fG]=yne)});var hG,Pne,Jl=C(()=>{G();hG="clipPlaneVertexDeclaration",Pne=`#ifdef CLIPPLANE uniform vClipPlane: vec4;varying fClipDistance: f32; #endif #ifdef CLIPPLANE2 @@ -4487,10 +4487,10 @@ uniform vClipPlane5: vec4;varying fClipDistance5: f32; #ifdef CLIPPLANE6 uniform vClipPlane6: vec4;varying fClipDistance6: f32; #endif -`;S.IncludesShadersStoreWGSL[eG]||(S.IncludesShadersStoreWGSL[eG]=lne)});var tG,cne,X_=C(()=>{k();tG="fogVertexDeclaration",cne=`#ifdef FOG +`;T.IncludesShadersStoreWGSL[hG]||(T.IncludesShadersStoreWGSL[hG]=Pne)});var dG,Dne,J_=C(()=>{G();dG="fogVertexDeclaration",Dne=`#ifdef FOG varying vFogDistance: vec3f; #endif -`;S.IncludesShadersStoreWGSL[tG]||(S.IncludesShadersStoreWGSL[tG]=cne)});var iG,fne,Rf=C(()=>{k();iG="instancesDeclaration",fne=`#ifdef INSTANCES +`;T.IncludesShadersStoreWGSL[dG]||(T.IncludesShadersStoreWGSL[dG]=Dne)});var uG,Lne,Mf=C(()=>{G();uG="instancesDeclaration",Lne=`#ifdef INSTANCES attribute world0 : vec4;attribute world1 : vec4;attribute world2 : vec4;attribute world3 : vec4; #ifdef INSTANCESCOLOR attribute instanceColor : vec4; @@ -4512,7 +4512,7 @@ uniform world : mat4x4; uniform previousWorld : mat4x4; #endif #endif -`;S.IncludesShadersStoreWGSL[iG]||(S.IncludesShadersStoreWGSL[iG]=fne)});var rG,hne,Jl=C(()=>{k();rG="instancesVertex",hne=`#ifdef INSTANCES +`;T.IncludesShadersStoreWGSL[uG]||(T.IncludesShadersStoreWGSL[uG]=Lne)});var mG,One,ec=C(()=>{G();mG="instancesVertex",One=`#ifdef INSTANCES var finalWorld=mat4x4(vertexInputs.world0,vertexInputs.world1,vertexInputs.world2,vertexInputs.world3); #if defined(PREPASS_VELOCITY) || defined(VELOCITY) || defined(PREPASS_VELOCITY_LINEAR) || defined(VELOCITY_LINEAR) var finalPreviousWorld=mat4x4( @@ -4539,7 +4539,7 @@ var finalWorld=mesh.world; var finalPreviousWorld=uniforms.previousWorld; #endif #endif -`;S.IncludesShadersStoreWGSL[rG]||(S.IncludesShadersStoreWGSL[rG]=hne)});var nG,dne,$l=C(()=>{k();nG="bonesVertex",dne=`#ifndef BAKED_VERTEX_ANIMATION_TEXTURE +`;T.IncludesShadersStoreWGSL[mG]||(T.IncludesShadersStoreWGSL[mG]=One)});var pG,Nne,tc=C(()=>{G();pG="bonesVertex",Nne=`#ifndef BAKED_VERTEX_ANIMATION_TEXTURE #if NUM_BONE_INFLUENCERS>0 var influence : mat4x4; #ifdef BONETEXTURE @@ -4592,7 +4592,7 @@ influence=influence+uniforms.mBones[i32(vertexInputs.matricesIndicesExtra[3])]*v finalWorld=finalWorld*influence; #endif #endif -`;S.IncludesShadersStoreWGSL[nG]||(S.IncludesShadersStoreWGSL[nG]=dne)});var sG,une,ec=C(()=>{k();sG="bakedVertexAnimation",une=`#ifdef BAKED_VERTEX_ANIMATION_TEXTURE +`;T.IncludesShadersStoreWGSL[pG]||(T.IncludesShadersStoreWGSL[pG]=Nne)});var _G,wne,ic=C(()=>{G();_G="bakedVertexAnimation",wne=`#ifdef BAKED_VERTEX_ANIMATION_TEXTURE { #ifdef INSTANCES let VATStartFrame: f32=vertexInputs.bakedVertexAnimationSettingsInstanced.x;let VATEndFrame: f32=vertexInputs.bakedVertexAnimationSettingsInstanced.y;let VATOffsetFrame: f32=vertexInputs.bakedVertexAnimationSettingsInstanced.z;let VATSpeed: f32=vertexInputs.bakedVertexAnimationSettingsInstanced.w; @@ -4623,7 +4623,7 @@ VATInfluence=VATInfluence+readMatrixFromRawSamplerVAT(bakedVertexAnimationTextur #endif finalWorld=finalWorld*VATInfluence;} #endif -`;S.IncludesShadersStoreWGSL[sG]||(S.IncludesShadersStoreWGSL[sG]=une)});var aG,mne,tc=C(()=>{k();aG="clipPlaneVertex",mne=`#ifdef CLIPPLANE +`;T.IncludesShadersStoreWGSL[_G]||(T.IncludesShadersStoreWGSL[_G]=wne)});var gG,Fne,rc=C(()=>{G();gG="clipPlaneVertex",Fne=`#ifdef CLIPPLANE vertexOutputs.fClipDistance=dot(worldPos,uniforms.vClipPlane); #endif #ifdef CLIPPLANE2 @@ -4641,14 +4641,14 @@ vertexOutputs.fClipDistance5=dot(worldPos,uniforms.vClipPlane5); #ifdef CLIPPLANE6 vertexOutputs.fClipDistance6=dot(worldPos,uniforms.vClipPlane6); #endif -`;S.IncludesShadersStoreWGSL[aG]||(S.IncludesShadersStoreWGSL[aG]=mne)});var oG,pne,Y_=C(()=>{k();oG="fogVertex",pne=`#ifdef FOG +`;T.IncludesShadersStoreWGSL[gG]||(T.IncludesShadersStoreWGSL[gG]=Fne)});var vG,Bne,eg=C(()=>{G();vG="fogVertex",Bne=`#ifdef FOG #ifdef SCENE_UBO vertexOutputs.vFogDistance=(scene.view*worldPos).xyz; #else vertexOutputs.vFogDistance=(uniforms.view*worldPos).xyz; #endif #endif -`;S.IncludesShadersStoreWGSL[oG]||(S.IncludesShadersStoreWGSL[oG]=pne)});var lG,_ne,K_=C(()=>{k();lG="vertexColorMixing",_ne=`#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES) +`;T.IncludesShadersStoreWGSL[vG]||(T.IncludesShadersStoreWGSL[vG]=Bne)});var EG,Une,tg=C(()=>{G();EG="vertexColorMixing",Une=`#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES) vertexOutputs.vColor=vec4f(1.0); #ifdef VERTEXCOLOR #ifdef VERTEXALPHA @@ -4661,7 +4661,7 @@ vertexOutputs.vColor=vec4f(vertexOutputs.vColor.rgb*colorUpdated.rgb,vertexOutpu vertexOutputs.vColor*=vertexInputs.instanceColor; #endif #endif -`;S.IncludesShadersStoreWGSL[lG]||(S.IncludesShadersStoreWGSL[lG]=_ne)});var fG={};et(fG,{colorVertexShaderWGSL:()=>gne});var dy,cG,gne,hG=C(()=>{k();ql();Zl();Ql();X_();Rf();Jl();$l();ec();tc();Y_();K_();dy="colorVertexShader",cG=`attribute position: vec3f; +`;T.IncludesShadersStoreWGSL[EG]||(T.IncludesShadersStoreWGSL[EG]=Une)});var TG={};$e(TG,{colorVertexShaderWGSL:()=>Vne});var Ay,SG,Vne,AG=C(()=>{G();Ql();$l();Jl();J_();Mf();ec();tc();ic();rc();eg();tg();Ay="colorVertexShader",SG=`attribute position: vec3f; #ifdef VERTEXCOLOR attribute color: vec4f; #endif @@ -4692,7 +4692,7 @@ var worldPos: vec4f=finalWorld* vec4f(vertexInputs.position,1.0);vertexOutputs.p #include #include #define CUSTOM_VERTEX_MAIN_END -}`;S.ShadersStoreWGSL[dy]||(S.ShadersStoreWGSL[dy]=cG);gne={name:dy,shader:cG}});var dG,vne,ic=C(()=>{k();dG="clipPlaneFragmentDeclaration",vne=`#ifdef CLIPPLANE +}`;T.ShadersStoreWGSL[Ay]||(T.ShadersStoreWGSL[Ay]=SG);Vne={name:Ay,shader:SG}});var xG,Gne,nc=C(()=>{G();xG="clipPlaneFragmentDeclaration",Gne=`#ifdef CLIPPLANE varying fClipDistance: f32; #endif #ifdef CLIPPLANE2 @@ -4710,7 +4710,7 @@ varying fClipDistance5: f32; #ifdef CLIPPLANE6 varying fClipDistance6: f32; #endif -`;S.IncludesShadersStoreWGSL[dG]||(S.IncludesShadersStoreWGSL[dG]=vne)});var uG,Ene,j_=C(()=>{k();uG="fogFragmentDeclaration",Ene=`#ifdef FOG +`;T.IncludesShadersStoreWGSL[xG]||(T.IncludesShadersStoreWGSL[xG]=Gne)});var RG,kne,ig=C(()=>{G();RG="fogFragmentDeclaration",kne=`#ifdef FOG #define FOGMODE_NONE 0. #define FOGMODE_EXP 1. #define FOGMODE_EXP2 2. @@ -4724,7 +4724,7 @@ else if (FOGMODE_EXP2==uniforms.vFogInfos.x) {fogCoeff=1.0/pow(E,fogDistance*fogDistance*fogDensity*fogDensity);} return clamp(fogCoeff,0.0,1.0);} #endif -`;S.IncludesShadersStoreWGSL[uG]||(S.IncludesShadersStoreWGSL[uG]=Ene)});var mG,Sne,rc=C(()=>{k();mG="clipPlaneFragment",Sne=`#if defined(CLIPPLANE) || defined(CLIPPLANE2) || defined(CLIPPLANE3) || defined(CLIPPLANE4) || defined(CLIPPLANE5) || defined(CLIPPLANE6) +`;T.IncludesShadersStoreWGSL[RG]||(T.IncludesShadersStoreWGSL[RG]=kne)});var bG,Wne,sc=C(()=>{G();bG="clipPlaneFragment",Wne=`#if defined(CLIPPLANE) || defined(CLIPPLANE2) || defined(CLIPPLANE3) || defined(CLIPPLANE4) || defined(CLIPPLANE5) || defined(CLIPPLANE6) if (false) {} #endif #ifdef CLIPPLANE @@ -4751,14 +4751,14 @@ else if (fragmentInputs.fClipDistance5>0.0) else if (fragmentInputs.fClipDistance6>0.0) {discard;} #endif -`;S.IncludesShadersStoreWGSL[mG]||(S.IncludesShadersStoreWGSL[mG]=Sne)});var pG,Tne,q_=C(()=>{k();pG="fogFragment",Tne=`#ifdef FOG +`;T.IncludesShadersStoreWGSL[bG]||(T.IncludesShadersStoreWGSL[bG]=Wne)});var IG,Hne,rg=C(()=>{G();IG="fogFragment",Hne=`#ifdef FOG var fog: f32=CalcFogFactor(); #ifdef PBR fog=toLinearSpace(fog); #endif color= vec4f(mix(uniforms.vFogColor,color.rgb,fog),color.a); #endif -`;S.IncludesShadersStoreWGSL[pG]||(S.IncludesShadersStoreWGSL[pG]=Tne)});var gG={};et(gG,{colorPixelShaderWGSL:()=>Ane});var uy,_G,Ane,vG=C(()=>{k();ic();j_();rc();q_();uy="colorPixelShader",_G=`#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES) +`;T.IncludesShadersStoreWGSL[IG]||(T.IncludesShadersStoreWGSL[IG]=Hne)});var CG={};$e(CG,{colorPixelShaderWGSL:()=>zne});var xy,MG,zne,yG=C(()=>{G();nc();ig();sc();rg();xy="colorPixelShader",MG=`#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES) #define VERTEXCOLOR varying vColor: vec4f; #else @@ -4778,7 +4778,7 @@ fragmentOutputs.color=uniforms.color; #endif #include(color,fragmentOutputs.color) #define CUSTOM_FRAGMENT_MAIN_END -}`;S.ShadersStoreWGSL[uy]||(S.ShadersStoreWGSL[uy]=_G);Ane={name:uy,shader:_G}});var EG,xne,nc=C(()=>{k();EG="bonesDeclaration",xne=`#if NUM_BONE_INFLUENCERS>0 +}`;T.ShadersStoreWGSL[xy]||(T.ShadersStoreWGSL[xy]=MG);zne={name:xy,shader:MG}});var PG,Xne,ac=C(()=>{G();PG="bonesDeclaration",Xne=`#if NUM_BONE_INFLUENCERS>0 attribute vec4 matricesIndices;attribute vec4 matricesWeights; #if NUM_BONE_INFLUENCERS>4 attribute vec4 matricesIndicesExtra;attribute vec4 matricesWeightsExtra; @@ -4807,7 +4807,7 @@ return mat4(m0,m1,m2,m3); #endif #endif #endif -`;S.IncludesShadersStore[EG]||(S.IncludesShadersStore[EG]=xne)});var SG,Rne,sc=C(()=>{k();SG="bakedVertexAnimationDeclaration",Rne=`#ifdef BAKED_VERTEX_ANIMATION_TEXTURE +`;T.IncludesShadersStore[PG]||(T.IncludesShadersStore[PG]=Xne)});var DG,Yne,oc=C(()=>{G();DG="bakedVertexAnimationDeclaration",Yne=`#ifdef BAKED_VERTEX_ANIMATION_TEXTURE uniform float bakedVertexAnimationTime; #if !defined(WEBGL2) && !defined(WEBGPU) uniform vec2 bakedVertexAnimationTextureSizeInverted; @@ -4826,7 +4826,7 @@ float offset=index*4.0;float frameUV=(frame+0.5)*bakedVertexAnimationTextureSize #endif } #endif -`;S.IncludesShadersStore[SG]||(S.IncludesShadersStore[SG]=Rne)});var TG,bne,ac=C(()=>{k();TG="clipPlaneVertexDeclaration",bne=`#ifdef CLIPPLANE +`;T.IncludesShadersStore[DG]||(T.IncludesShadersStore[DG]=Yne)});var LG,Kne,lc=C(()=>{G();LG="clipPlaneVertexDeclaration",Kne=`#ifdef CLIPPLANE uniform vec4 vClipPlane;varying float fClipDistance; #endif #ifdef CLIPPLANE2 @@ -4844,10 +4844,10 @@ uniform vec4 vClipPlane5;varying float fClipDistance5; #ifdef CLIPPLANE6 uniform vec4 vClipPlane6;varying float fClipDistance6; #endif -`;S.IncludesShadersStore[TG]||(S.IncludesShadersStore[TG]=bne)});var AG,Ine,Z_=C(()=>{k();AG="fogVertexDeclaration",Ine=`#ifdef FOG +`;T.IncludesShadersStore[LG]||(T.IncludesShadersStore[LG]=Kne)});var OG,jne,ng=C(()=>{G();OG="fogVertexDeclaration",jne=`#ifdef FOG varying vec3 vFogDistance; #endif -`;S.IncludesShadersStore[AG]||(S.IncludesShadersStore[AG]=Ine)});var xG,Mne,bf=C(()=>{k();xG="instancesDeclaration",Mne=`#ifdef INSTANCES +`;T.IncludesShadersStore[OG]||(T.IncludesShadersStore[OG]=jne)});var NG,qne,Cf=C(()=>{G();NG="instancesDeclaration",qne=`#ifdef INSTANCES attribute vec4 world0;attribute vec4 world1;attribute vec4 world2;attribute vec4 world3; #ifdef INSTANCESCOLOR attribute vec4 instanceColor; @@ -4869,7 +4869,7 @@ uniform mat4 world; uniform mat4 previousWorld; #endif #endif -`;S.IncludesShadersStore[xG]||(S.IncludesShadersStore[xG]=Mne)});var RG,Cne,oc=C(()=>{k();RG="instancesVertex",Cne=`#ifdef INSTANCES +`;T.IncludesShadersStore[NG]||(T.IncludesShadersStore[NG]=qne)});var wG,Zne,cc=C(()=>{G();wG="instancesVertex",Zne=`#ifdef INSTANCES mat4 finalWorld=mat4(world0,world1,world2,world3); #if defined(PREPASS_VELOCITY) || defined(VELOCITY) || defined(PREPASS_VELOCITY_LINEAR) || defined(VELOCITY_LINEAR) mat4 finalPreviousWorld=mat4(previousWorld0,previousWorld1, @@ -4887,7 +4887,7 @@ mat4 finalWorld=world; mat4 finalPreviousWorld=previousWorld; #endif #endif -`;S.IncludesShadersStore[RG]||(S.IncludesShadersStore[RG]=Cne)});var bG,yne,lc=C(()=>{k();bG="bonesVertex",yne=`#ifndef BAKED_VERTEX_ANIMATION_TEXTURE +`;T.IncludesShadersStore[wG]||(T.IncludesShadersStore[wG]=Zne)});var FG,Qne,fc=C(()=>{G();FG="bonesVertex",Qne=`#ifndef BAKED_VERTEX_ANIMATION_TEXTURE #if NUM_BONE_INFLUENCERS>0 mat4 influence; #ifdef BONETEXTURE @@ -4940,7 +4940,7 @@ influence+=mBones[int(matricesIndicesExtra[3])]*matricesWeightsExtra[3]; finalWorld=finalWorld*influence; #endif #endif -`;S.IncludesShadersStore[bG]||(S.IncludesShadersStore[bG]=yne)});var IG,Pne,cc=C(()=>{k();IG="bakedVertexAnimation",Pne=`#ifdef BAKED_VERTEX_ANIMATION_TEXTURE +`;T.IncludesShadersStore[FG]||(T.IncludesShadersStore[FG]=Qne)});var BG,$ne,hc=C(()=>{G();BG="bakedVertexAnimation",$ne=`#ifdef BAKED_VERTEX_ANIMATION_TEXTURE { #ifdef INSTANCES #define BVASNAME bakedVertexAnimationSettingsInstanced @@ -4971,7 +4971,7 @@ VATInfluence+=readMatrixFromRawSamplerVAT(bakedVertexAnimationTexture,matricesIn #endif finalWorld=finalWorld*VATInfluence;} #endif -`;S.IncludesShadersStore[IG]||(S.IncludesShadersStore[IG]=Pne)});var MG,Dne,fc=C(()=>{k();MG="clipPlaneVertex",Dne=`#ifdef CLIPPLANE +`;T.IncludesShadersStore[BG]||(T.IncludesShadersStore[BG]=$ne)});var UG,Jne,dc=C(()=>{G();UG="clipPlaneVertex",Jne=`#ifdef CLIPPLANE fClipDistance=dot(worldPos,vClipPlane); #endif #ifdef CLIPPLANE2 @@ -4989,10 +4989,10 @@ fClipDistance5=dot(worldPos,vClipPlane5); #ifdef CLIPPLANE6 fClipDistance6=dot(worldPos,vClipPlane6); #endif -`;S.IncludesShadersStore[MG]||(S.IncludesShadersStore[MG]=Dne)});var CG,Lne,Q_=C(()=>{k();CG="fogVertex",Lne=`#ifdef FOG +`;T.IncludesShadersStore[UG]||(T.IncludesShadersStore[UG]=Jne)});var VG,ese,sg=C(()=>{G();VG="fogVertex",ese=`#ifdef FOG vFogDistance=(view*worldPos).xyz; #endif -`;S.IncludesShadersStore[CG]||(S.IncludesShadersStore[CG]=Lne)});var yG,One,J_=C(()=>{k();yG="vertexColorMixing",One=`#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES) +`;T.IncludesShadersStore[VG]||(T.IncludesShadersStore[VG]=ese)});var GG,tse,ag=C(()=>{G();GG="vertexColorMixing",tse=`#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES) vColor=vec4(1.0); #ifdef VERTEXCOLOR #ifdef VERTEXALPHA @@ -5005,7 +5005,7 @@ vColor.rgb*=colorUpdated.rgb; vColor*=instanceColor; #endif #endif -`;S.IncludesShadersStore[yG]||(S.IncludesShadersStore[yG]=One)});var DG={};et(DG,{colorVertexShader:()=>Nne});var my,PG,Nne,LG=C(()=>{k();nc();sc();ac();Z_();bf();oc();lc();cc();fc();Q_();J_();my="colorVertexShader",PG=`attribute vec3 position; +`;T.IncludesShadersStore[GG]||(T.IncludesShadersStore[GG]=tse)});var WG={};$e(WG,{colorVertexShader:()=>ise});var Ry,kG,ise,HG=C(()=>{G();ac();oc();lc();ng();Cf();cc();fc();hc();dc();sg();ag();Ry="colorVertexShader",kG=`attribute vec3 position; #ifdef VERTEXCOLOR attribute vec4 color; #endif @@ -5043,7 +5043,7 @@ gl_Position=viewProjection*worldPos; #include #include #define CUSTOM_VERTEX_MAIN_END -}`;S.ShadersStore[my]||(S.ShadersStore[my]=PG);Nne={name:my,shader:PG}});var OG,Fne,hc=C(()=>{k();OG="clipPlaneFragmentDeclaration",Fne=`#ifdef CLIPPLANE +}`;T.ShadersStore[Ry]||(T.ShadersStore[Ry]=kG);ise={name:Ry,shader:kG}});var zG,rse,uc=C(()=>{G();zG="clipPlaneFragmentDeclaration",rse=`#ifdef CLIPPLANE varying float fClipDistance; #endif #ifdef CLIPPLANE2 @@ -5061,7 +5061,7 @@ varying float fClipDistance5; #ifdef CLIPPLANE6 varying float fClipDistance6; #endif -`;S.IncludesShadersStore[OG]||(S.IncludesShadersStore[OG]=Fne)});var NG,wne,$_=C(()=>{k();NG="fogFragmentDeclaration",wne=`#ifdef FOG +`;T.IncludesShadersStore[zG]||(T.IncludesShadersStore[zG]=rse)});var XG,nse,og=C(()=>{G();XG="fogFragmentDeclaration",nse=`#ifdef FOG #define FOGMODE_NONE 0. #define FOGMODE_EXP 1. #define FOGMODE_EXP2 2. @@ -5076,7 +5076,7 @@ else if (FOGMODE_EXP2==vFogInfos.x) {fogCoeff=1.0/pow(E,fogDistance*fogDistance*fogDensity*fogDensity);} return clamp(fogCoeff,0.0,1.0);} #endif -`;S.IncludesShadersStore[NG]||(S.IncludesShadersStore[NG]=wne)});var FG,Bne,dc=C(()=>{k();FG="clipPlaneFragment",Bne=`#if defined(CLIPPLANE) || defined(CLIPPLANE2) || defined(CLIPPLANE3) || defined(CLIPPLANE4) || defined(CLIPPLANE5) || defined(CLIPPLANE6) +`;T.IncludesShadersStore[XG]||(T.IncludesShadersStore[XG]=nse)});var YG,sse,mc=C(()=>{G();YG="clipPlaneFragment",sse=`#if defined(CLIPPLANE) || defined(CLIPPLANE2) || defined(CLIPPLANE3) || defined(CLIPPLANE4) || defined(CLIPPLANE5) || defined(CLIPPLANE6) if (false) {} #endif #ifdef CLIPPLANE @@ -5103,14 +5103,14 @@ else if (fClipDistance5>0.0) else if (fClipDistance6>0.0) {discard;} #endif -`;S.IncludesShadersStore[FG]||(S.IncludesShadersStore[FG]=Bne)});var wG,Une,eg=C(()=>{k();wG="fogFragment",Une=`#ifdef FOG +`;T.IncludesShadersStore[YG]||(T.IncludesShadersStore[YG]=sse)});var KG,ase,lg=C(()=>{G();KG="fogFragment",ase=`#ifdef FOG float fog=CalcFogFactor(); #ifdef PBR fog=toLinearSpace(fog); #endif color.rgb=mix(vFogColor,color.rgb,fog); #endif -`;S.IncludesShadersStore[wG]||(S.IncludesShadersStore[wG]=Une)});var UG={};et(UG,{colorPixelShader:()=>Vne});var py,BG,Vne,VG=C(()=>{k();hc();$_();dc();eg();py="colorPixelShader",BG=`#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES) +`;T.IncludesShadersStore[KG]||(T.IncludesShadersStore[KG]=ase)});var qG={};$e(qG,{colorPixelShader:()=>ose});var by,jG,ose,ZG=C(()=>{G();uc();og();mc();lg();by="colorPixelShader",jG=`#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES) #define VERTEXCOLOR varying vec4 vColor; #else @@ -5129,18 +5129,18 @@ gl_FragColor=color; #endif #include(color,gl_FragColor) #define CUSTOM_FRAGMENT_MAIN_END -}`;S.ShadersStore[py]||(S.ShadersStore[py]=BG);Vne={name:py,shader:BG}});var zh,_y,GG=C(()=>{Ht();Ui();Di();cy();Pn();hy();q._LinesMeshParser=(n,e)=>zh.Parse(n,e);zh=class n extends q{_isShaderMaterial(e){return e?e.getClassName()==="ShaderMaterial":!1}constructor(e,t=null,i=null,r=null,s,a,o,l){super(e,t,i,r,s),this.useVertexColor=a,this.useVertexAlpha=o,this.color=new Te(1,1,1),this.alpha=1,this._shaderLanguage=0,this._ownsMaterial=!1,r&&(this.color=r.color.clone(),this.alpha=r.alpha,this.useVertexColor=r.useVertexColor,this.useVertexAlpha=r.useVertexAlpha),this.intersectionThreshold=.1;let c=[],f={attributes:[L.PositionKind],uniforms:["world","viewProjection"],needAlphaBlending:!0,defines:c,useClipPlane:null,shaderLanguage:0};if(this.useVertexAlpha?f.defines.push("#define VERTEXALPHA"):f.needAlphaBlending=!1,this.useVertexColor?(f.defines.push("#define VERTEXCOLOR"),f.attributes.push(L.ColorKind)):(f.uniforms.push("color"),this._color4=new lt),l)this.material=l;else{this.getScene().getEngine().isWebGPU&&!n.ForceGLSL&&(this._shaderLanguage=1),f.shaderLanguage=this._shaderLanguage,f.extraInitializationsAsync=async()=>{this._shaderLanguage===1?await Promise.all([Promise.resolve().then(()=>(hG(),fG)),Promise.resolve().then(()=>(vG(),gG))]):await Promise.all([Promise.resolve().then(()=>(LG(),DG)),Promise.resolve().then(()=>(VG(),UG))])};let d=new ho("colorShader",this.getScene(),"color",f,!1);d.doNotSerialize=!0,this._ownsMaterial=!0,this._setInternalMaterial(d)}}getClassName(){return"LinesMesh"}get material(){return this._internalAbstractMeshDataInfo._material}set material(e){let t=this.material;if(t===e)return;let i=t&&this._ownsMaterial;this._ownsMaterial=!1,this._setInternalMaterial(e),i&&(t==null||t.dispose())}_setInternalMaterial(e){this._setMaterial(e),this.material&&(this.material.fillMode=ve.LineListDrawMode,this.material.disableLighting=!0)}get checkCollisions(){return!1}set checkCollisions(e){}_bind(e,t){if(!this._geometry)return this;let i=this.isUnIndexed?null:this._geometry.getIndexBuffer();if(!this._userInstancedBuffersStorage||this.hasThinInstances?this._geometry._bind(t,i):this._geometry._bind(t,i,this._userInstancedBuffersStorage.vertexBuffers,this._userInstancedBuffersStorage.vertexArrayObjects),!this.useVertexColor&&this._isShaderMaterial(this.material)){let{r,g:s,b:a}=this.color;this._color4.set(r,s,a,this.alpha),this.material.setColor4("color",this._color4)}return this}_draw(e,t,i){if(!this._geometry||!this._geometry.getVertexBuffers()||!this._unIndexed&&!this._geometry.getIndexBuffer())return this;let r=this.getScene().getEngine();return this._unIndexed?r.drawArraysType(ve.LineListDrawMode,e.verticesStart,e.verticesCount,i):r.drawElementsType(ve.LineListDrawMode,e.indexStart,e.indexCount,i),this}dispose(e,t=!1,i){var r,s;i||(this._ownsMaterial?(r=this.material)==null||r.dispose(!1,!1,!0):t&&((s=this.material)==null||s.dispose(!1,!1,!0))),super.dispose(e)}clone(e,t=null,i){if(t&&t._addToSceneRootNodes===void 0){let r=t;return r.source=this,new n(e,this.getScene(),r.parent,r.source,r.doNotCloneChildren)}return new n(e,this.getScene(),t,this,i)}createInstance(e){let t=new _y(e,this);if(this.instancedBuffers){t.instancedBuffers={};for(let i in this.instancedBuffers)t.instancedBuffers[i]=this.instancedBuffers[i]}return t}serialize(e){super.serialize(e),e.color=this.color.asArray(),e.alpha=this.alpha}static Parse(e,t){let i=new n(e.name,t);return i.color=Te.FromArray(e.color),i.alpha=e.alpha,i}};zh.ForceGLSL=!1;_y=class extends jl{constructor(e,t){super(e,t),this.intersectionThreshold=t.intersectionThreshold}getClassName(){return"InstancedLinesMesh"}}});function kG(n){let e=[],t=[],i=n.lines,r=n.colors,s=[],a=0;for(let l=0;l0&&(e.push(a-1),e.push(a)),a++}}let o=new Ie;return o.indices=e,o.positions=t,r&&(o.colors=s),o}function WG(n){let e=n.dashSize||3,t=n.gapSize||1,i=n.dashNb||200,r=n.points,s=[],a=[],o=b.Zero(),l=0,c,f,h=0,d;for(d=0;d{let h=b.Zero(),d=f.length/6,u=0,m,_,p=0,g,v;for(g=0;g{Ve();Di();lr();GG();Ui();Pt();Ie.CreateLineSystem=kG;Ie.CreateDashedLines=WG;q.CreateLines=(n,e,t=null,i=!1,r=null)=>vy(n,{points:e,updatable:i,instance:r},t);q.CreateDashedLines=(n,e,t,i,r,s=null,a,o)=>Ey(n,{points:e,dashSize:t,gapSize:i,dashNb:r,updatable:a,instance:o},s)});var Sy,tg,cA,zG=C(()=>{Pt();Ve();Ui();Di();lr();Mh();An();Pi();Sy=class extends Ne{constructor(e,t){super(e.x,e.y),this.index=t}},tg=class{constructor(){this.elements=[]}add(e){let t=[];for(let i of e){let r=new Sy(i,this.elements.length);t.push(r),this.elements.push(r)}return t}computeBounds(){let e=new Ne(this.elements[0].x,this.elements[0].y),t=new Ne(this.elements[0].x,this.elements[0].y);for(let i of this.elements)i.xt.x&&(t.x=i.x),i.yt.y&&(t.y=i.y);return{min:e,max:t,width:t.x-e.x,height:t.y-e.y}}},cA=class{_addToepoint(e){for(let t of e)this._epoints.push(t.x,t.y)}constructor(e,t,i,r=earcut){this._points=new tg,this._outlinepoints=new tg,this._holes=new Array,this._epoints=new Array,this._eholes=new Array,this.bjsEarcut=r,this._name=e,this._scene=i||Le.LastCreatedScene;let s;t instanceof Ou?s=t.getPoints():s=t,this._addToepoint(s),this._points.add(s),this._outlinepoints.add(s),typeof this.bjsEarcut=="undefined"&&$.Warn("Earcut was not found, the polygon will not be built.")}addHole(e){this._points.add(e);let t=new tg;return t.add(e),this._holes.push(t),this._eholes.push(this._epoints.length/2),this._addToepoint(e),this}build(e=!1,t=0,i=2){let r=new q(this._name,this._scene),s=this.buildVertexData(t,i);return r.setVerticesData(L.PositionKind,s.positions,e),r.setVerticesData(L.NormalKind,s.normals,e),r.setVerticesData(L.UVKind,s.uvs,e),r.setIndices(s.indices),r}buildVertexData(e=0,t=2){let i=new Ie,r=[],s=[],a=[],o=this._points.computeBounds();for(let f of this._points.elements)r.push(0,1,0),s.push(f.x,0,f.y),a.push((f.x-o.min.x)/o.width,(f.y-o.min.y)/o.height);let l=[],c=this.bjsEarcut(this._epoints,this._eholes,2);for(let f=0;f0){let f=s.length/3;for(let d of this._points.elements)r.push(0,-1,0),s.push(d.x,-e,d.y),a.push(1-(d.x-o.min.x)/o.width,1-(d.y-o.min.y)/o.height);let h=l.length;for(let d=0;dc?Rc?I{Ve();Ht();Di();lr();zG();Ui();Pi();Qr();Ie.CreatePolygon=XG;q.CreatePolygon=(n,e,t,i,r,s,a=earcut)=>fA(n,{shape:e,holes:i,updatable:r,sideOrientation:s},t,a);q.ExtrudePolygon=(n,e,t,i,r,s,a,o=earcut)=>ig(n,{shape:e,holes:r,depth:t,updatable:s,sideOrientation:a},i,o)});function Ay(n,e,t=null){let i=e.path,r=e.shape,s=e.scale||1,a=e.rotation||0,o=e.cap===0?0:e.cap||q.NO_CAP,l=e.updatable,c=q._GetDefaultSideOrientation(e.sideOrientation),f=e.instance||null,h=e.invertUV||!1,d=e.closeShape||!1,u=e.closePath||!1,m=e.capFunction||null;return YG(n,r,i,s,a,null,null,u,d,o,!1,t,!!l,c,f,h,e.frontUVs||null,e.backUVs||null,e.firstNormal||null,!!e.adjustFrame,m)}function xy(n,e,t=null){var v;let i=e.path,r=e.shape,s=b.Zero(),a=(x,A)=>{var T,R;let E=(R=(T=e.scaleFunction)==null?void 0:T.call(e,x,A))!=null?R:1;return s.copyFromFloats(E,E,E)},o=e.rotationFunction||(()=>0),l=e.closePath||e.ribbonCloseArray||!1,c=e.closeShape||e.ribbonClosePath||!1,f=e.cap===0?0:e.cap||q.NO_CAP,h=e.updatable,d=e.firstNormal||null,u=e.adjustFrame||!1,m=q._GetDefaultSideOrientation(e.sideOrientation),_=e.instance,p=e.invertUV||!1,g=e.capFunction||null;return YG(n,r,i,null,null,(v=e.scaleVectorFunction)!=null?v:a,o,l,c,f,!0,t,!!h,m,_||null,p,e.frontUVs||null,e.backUVs||null,d,u,g||null)}function YG(n,e,t,i,r,s,a,o,l,c,f,h,d,u,m,_,p,g,v,x,A){let E=(D,O,V,N,w,U,G,J,Y,Q,X)=>{let j=V.getTangents(),me=V.getNormals(),xe=V.getBinormals(),Ge=V.getDistances();if(X){for(let Ye=0;Ye0){let Ke=j[Ye-1];b.Dot(Ke,j[Ye])<0&&j[Ye].scaleInPlace(-1),Ke=me[Ye-1],b.Dot(Ke,me[Ye])<0&&me[Ye].scaleInPlace(-1),Ke=xe[Ye-1],b.Dot(Ke,xe[Ye])<0&&xe[Ye].scaleInPlace(-1)}}let se=0,pe=()=>w!==null?w:b.OneReadOnly,_e=Q&&J?J:()=>U!==null?U:0,Pe=Q&&G?G:pe,de=Y===q.NO_CAP||Y===q.CAP_END?0:2,be=Z.Matrix[0];for(let Ye=0;Ye{let Ke=Array(),fe=b.Zero(),Fe;for(Fe=0;Fe3?0:c,R=E(e,t,I,y,T,r,s,a,c,f,x);let M=fo(n,{pathArray:R,closeArray:o,closePath:l,updatable:d,sideOrientation:u,invertUV:_,frontUVs:p||void 0,backUVs:g||void 0},h);return M._creationDataStorage.pathArray=R,M._creationDataStorage.path3D=I,M._creationDataStorage.cap=c,M}var KG=C(()=>{Ve();Di();W_();Mh();q.ExtrudeShape=(n,e,t,i,r,s,a=null,o,l,c)=>{let f={shape:e,path:t,scale:i,rotation:r,cap:s===0?0:s||q.NO_CAP,sideOrientation:l,instance:c,updatable:o};return Ay(n,f,a)};q.ExtrudeShapeCustom=(n,e,t,i,r,s,a,o,l,c,f,h)=>{let d={shape:e,path:t,scaleFunction:i,rotationFunction:r,ribbonCloseArray:s,ribbonClosePath:a,cap:o===0?0:o||q.NO_CAP,sideOrientation:f,instance:h,updatable:c};return xy(n,d,l)}});function Ry(n,e,t=null){let i=e.arc?e.arc<=0||e.arc>1?1:e.arc:1,r=e.closed===void 0?!0:e.closed,s=e.shape,a=e.radius||1,o=e.tessellation||64,l=e.clip||0,c=e.updatable,f=q._GetDefaultSideOrientation(e.sideOrientation),h=e.cap||q.NO_CAP,d=Math.PI*2,u=[],m=e.invertUV||!1,_,p,g=d/o*i,v,x;for(_=0;_<=o-l;_++){for(x=[],(h==q.CAP_START||h==q.CAP_ALL)&&(x.push(new b(0,s[0].y,0)),x.push(new b(Math.cos(_*g)*s[0].x*a,s[0].y,Math.sin(_*g)*s[0].x*a))),p=0;p{Ve();Di();W_();q.CreateLathe=(n,e,t,i,r,s,a)=>Ry(n,{shape:e,radius:t,tessellation:i,sideOrientation:a,updatable:s},r)});function qG(n){let e=[],t=[],i=[],r=[],s=n.width!==void 0?n.width:n.size!==void 0?n.size:1,a=n.height!==void 0?n.height:n.size!==void 0?n.size:1,o=n.sideOrientation===0?0:n.sideOrientation||Ie.DEFAULTSIDE,l=s/2,c=a/2;t.push(-l,-c,0),i.push(0,0,-1),r.push(0,It?1:0),t.push(l,-c,0),i.push(0,0,-1),r.push(1,It?1:0),t.push(l,c,0),i.push(0,0,-1),r.push(1,It?0:1),t.push(-l,c,0),i.push(0,0,-1),r.push(0,It?0:1),e.push(0),e.push(1),e.push(2),e.push(0),e.push(2),e.push(3),Ie._ComputeSides(o,t,e,i,r,n.frontUVs,n.backUVs);let f=new Ie;return f.indices=e,f.positions=t,f.normals=i,f.uvs=r,f}function by(n,e={},t=null){let i=new q(n,t);return e.sideOrientation=q._GetDefaultSideOrientation(e.sideOrientation),i._originalBuilderSideOrientation=e.sideOrientation,qG(e).applyToMesh(i,e.updatable),e.sourcePlane&&(i.translate(e.sourcePlane.normal,-e.sourcePlane.d),i.setDirection(e.sourcePlane.normal.scale(-1))),i}var ZG=C(()=>{Di();lr();Qr();Ie.CreatePlane=qG;q.CreatePlane=(n,e,t,i,r)=>by(n,{size:e,width:e,height:e,sideOrientation:r,updatable:i},t)});function Iy(n,e,t=null){let i=e.path,r=e.instance,s=1;e.radius!==void 0?s=e.radius:r&&(s=r._creationDataStorage.radius);let a=e.tessellation||64,o=e.radiusFunction||null,l=e.cap||q.NO_CAP,c=e.invertUV||!1,f=e.updatable,h=q._GetDefaultSideOrientation(e.sideOrientation);e.arc=e.arc&&(e.arc<=0||e.arc>1)?1:e.arc||1;let d=(g,v,x,A,E,T,R,I)=>{let y=v.getTangents(),M=v.getNormals(),D=v.getDistances(),V=Math.PI*2/E*I,w=T||(()=>A),U,G,J,Y,Q=Z.Matrix[0],X=R===q.NO_CAP||R===q.CAP_END?0:2;for(let me=0;me{let Ge=Array();for(let se=0;se3?0:l,m=d(i,u,_,s,a,o,l,e.arc);let p=fo(n,{pathArray:m,closePath:!0,closeArray:!1,updatable:f,sideOrientation:h,invertUV:c,frontUVs:e.frontUVs,backUVs:e.backUVs},t);return p._creationDataStorage.pathArray=m,p._creationDataStorage.path3D=u,p._creationDataStorage.tessellation=a,p._creationDataStorage.cap=l,p._creationDataStorage.arc=e.arc,p._creationDataStorage.radius=s,p}var QG=C(()=>{Ve();Di();W_();Mh();q.CreateTube=(n,e,t,i,r,s,a,o,l,c)=>Iy(n,{path:e,radius:t,tessellation:i,radiusFunction:r,arc:1,cap:s,updatable:o,sideOrientation:l,instance:c},a)});function JG(n){let e=[];e[0]={vertex:[[0,0,1.732051],[1.632993,0,-.5773503],[-.8164966,1.414214,-.5773503],[-.8164966,-1.414214,-.5773503]],face:[[0,1,2],[0,2,3],[0,3,1],[1,3,2]]},e[1]={vertex:[[0,0,1.414214],[1.414214,0,0],[0,1.414214,0],[-1.414214,0,0],[0,-1.414214,0],[0,0,-1.414214]],face:[[0,1,2],[0,2,3],[0,3,4],[0,4,1],[1,4,5],[1,5,2],[2,5,3],[3,5,4]]},e[2]={vertex:[[0,0,1.070466],[.7136442,0,.7978784],[-.3568221,.618034,.7978784],[-.3568221,-.618034,.7978784],[.7978784,.618034,.3568221],[.7978784,-.618034,.3568221],[-.9341724,.381966,.3568221],[.1362939,1,.3568221],[.1362939,-1,.3568221],[-.9341724,-.381966,.3568221],[.9341724,.381966,-.3568221],[.9341724,-.381966,-.3568221],[-.7978784,.618034,-.3568221],[-.1362939,1,-.3568221],[-.1362939,-1,-.3568221],[-.7978784,-.618034,-.3568221],[.3568221,.618034,-.7978784],[.3568221,-.618034,-.7978784],[-.7136442,0,-.7978784],[0,0,-1.070466]],face:[[0,1,4,7,2],[0,2,6,9,3],[0,3,8,5,1],[1,5,11,10,4],[2,7,13,12,6],[3,9,15,14,8],[4,10,16,13,7],[5,8,14,17,11],[6,12,18,15,9],[10,11,17,19,16],[12,13,16,19,18],[14,15,18,19,17]]},e[3]={vertex:[[0,0,1.175571],[1.051462,0,.5257311],[.3249197,1,.5257311],[-.8506508,.618034,.5257311],[-.8506508,-.618034,.5257311],[.3249197,-1,.5257311],[.8506508,.618034,-.5257311],[.8506508,-.618034,-.5257311],[-.3249197,1,-.5257311],[-1.051462,0,-.5257311],[-.3249197,-1,-.5257311],[0,0,-1.175571]],face:[[0,1,2],[0,2,3],[0,3,4],[0,4,5],[0,5,1],[1,5,7],[1,7,6],[1,6,2],[2,6,8],[2,8,3],[3,8,9],[3,9,4],[4,9,10],[4,10,5],[5,10,7],[6,7,11],[6,11,8],[7,10,11],[8,11,9],[9,11,10]]},e[4]={vertex:[[0,0,1.070722],[.7148135,0,.7971752],[-.104682,.7071068,.7971752],[-.6841528,.2071068,.7971752],[-.104682,-.7071068,.7971752],[.6101315,.7071068,.5236279],[1.04156,.2071068,.1367736],[.6101315,-.7071068,.5236279],[-.3574067,1,.1367736],[-.7888348,-.5,.5236279],[-.9368776,.5,.1367736],[-.3574067,-1,.1367736],[.3574067,1,-.1367736],[.9368776,-.5,-.1367736],[.7888348,.5,-.5236279],[.3574067,-1,-.1367736],[-.6101315,.7071068,-.5236279],[-1.04156,-.2071068,-.1367736],[-.6101315,-.7071068,-.5236279],[.104682,.7071068,-.7971752],[.6841528,-.2071068,-.7971752],[.104682,-.7071068,-.7971752],[-.7148135,0,-.7971752],[0,0,-1.070722]],face:[[0,2,3],[1,6,5],[4,9,11],[7,15,13],[8,16,10],[12,14,19],[17,22,18],[20,21,23],[0,1,5,2],[0,3,9,4],[0,4,7,1],[1,7,13,6],[2,5,12,8],[2,8,10,3],[3,10,17,9],[4,11,15,7],[5,6,14,12],[6,13,20,14],[8,12,19,16],[9,17,18,11],[10,16,22,17],[11,18,21,15],[13,15,21,20],[14,20,23,19],[16,19,23,22],[18,22,23,21]]},e[5]={vertex:[[0,0,1.322876],[1.309307,0,.1889822],[-.9819805,.8660254,.1889822],[.1636634,-1.299038,.1889822],[.3273268,.8660254,-.9449112],[-.8183171,-.4330127,-.9449112]],face:[[0,3,1],[2,4,5],[0,1,4,2],[0,2,5,3],[1,3,5,4]]},e[6]={vertex:[[0,0,1.159953],[1.013464,0,.5642542],[-.3501431,.9510565,.5642542],[-.7715208,-.6571639,.5642542],[.6633206,.9510565,-.03144481],[.8682979,-.6571639,-.3996071],[-1.121664,.2938926,-.03144481],[-.2348831,-1.063314,-.3996071],[.5181548,.2938926,-.9953061],[-.5850262,-.112257,-.9953061]],face:[[0,1,4,2],[0,2,6,3],[1,5,8,4],[3,6,9,7],[5,7,9,8],[0,3,7,5,1],[2,4,8,9,6]]},e[7]={vertex:[[0,0,1.118034],[.8944272,0,.6708204],[-.2236068,.8660254,.6708204],[-.7826238,-.4330127,.6708204],[.6708204,.8660254,.2236068],[1.006231,-.4330127,-.2236068],[-1.006231,.4330127,.2236068],[-.6708204,-.8660254,-.2236068],[.7826238,.4330127,-.6708204],[.2236068,-.8660254,-.6708204],[-.8944272,0,-.6708204],[0,0,-1.118034]],face:[[0,1,4,2],[0,2,6,3],[1,5,8,4],[3,6,10,7],[5,9,11,8],[7,10,11,9],[0,3,7,9,5,1],[2,4,8,11,10,6]]},e[8]={vertex:[[-.729665,.670121,.319155],[-.655235,-.29213,-.754096],[-.093922,-.607123,.537818],[.702196,.595691,.485187],[.776626,-.36656,-.588064]],face:[[1,4,2],[0,1,2],[3,0,2],[4,3,2],[4,1,0,3]]},e[9]={vertex:[[-.868849,-.100041,.61257],[-.329458,.976099,.28078],[-.26629,-.013796,-.477654],[-.13392,-1.034115,.229829],[.738834,.707117,-.307018],[.859683,-.535264,-.338508]],face:[[3,0,2],[5,3,2],[4,5,2],[1,4,2],[0,1,2],[0,3,5,4,1]]},e[10]={vertex:[[-.610389,.243975,.531213],[-.187812,-.48795,-.664016],[-.187812,.9759,-.664016],[.187812,-.9759,.664016],[.798201,.243975,.132803]],face:[[1,3,0],[3,4,0],[3,1,4],[0,2,1],[0,4,2],[2,4,1]]},e[11]={vertex:[[-1.028778,.392027,-.048786],[-.640503,-.646161,.621837],[-.125162,-.395663,-.540059],[.004683,.888447,-.651988],[.125161,.395663,.540059],[.632925,-.791376,.433102],[1.031672,.157063,-.354165]],face:[[3,2,0],[2,1,0],[2,5,1],[0,4,3],[0,1,4],[4,1,5],[2,3,6],[3,4,6],[5,2,6],[4,5,6]]},e[12]={vertex:[[-.669867,.334933,-.529576],[-.669867,.334933,.529577],[-.4043,1.212901,0],[-.334933,-.669867,-.529576],[-.334933,-.669867,.529577],[.334933,.669867,-.529576],[.334933,.669867,.529577],[.4043,-1.212901,0],[.669867,-.334933,-.529576],[.669867,-.334933,.529577]],face:[[8,9,7],[6,5,2],[3,8,7],[5,0,2],[4,3,7],[0,1,2],[9,4,7],[1,6,2],[9,8,5,6],[8,3,0,5],[3,4,1,0],[4,9,6,1]]},e[13]={vertex:[[-.931836,.219976,-.264632],[-.636706,.318353,.692816],[-.613483,-.735083,-.264632],[-.326545,.979634,0],[-.318353,-.636706,.692816],[-.159176,.477529,-.856368],[.159176,-.477529,-.856368],[.318353,.636706,.692816],[.326545,-.979634,0],[.613482,.735082,-.264632],[.636706,-.318353,.692816],[.931835,-.219977,-.264632]],face:[[11,10,8],[7,9,3],[6,11,8],[9,5,3],[2,6,8],[5,0,3],[4,2,8],[0,1,3],[10,4,8],[1,7,3],[10,11,9,7],[11,6,5,9],[6,2,0,5],[2,4,1,0],[4,10,7,1]]},e[14]={vertex:[[-.93465,.300459,-.271185],[-.838689,-.260219,-.516017],[-.711319,.717591,.128359],[-.710334,-.156922,.080946],[-.599799,.556003,-.725148],[-.503838,-.004675,-.969981],[-.487004,.26021,.48049],[-.460089,-.750282,-.512622],[-.376468,.973135,-.325605],[-.331735,-.646985,.084342],[-.254001,.831847,.530001],[-.125239,-.494738,-.966586],[.029622,.027949,.730817],[.056536,-.982543,-.262295],[.08085,1.087391,.076037],[.125583,-.532729,.485984],[.262625,.599586,.780328],[.391387,-.726999,-.716259],[.513854,-.868287,.139347],[.597475,.85513,.326364],[.641224,.109523,.783723],[.737185,-.451155,.538891],[.848705,-.612742,-.314616],[.976075,.365067,.32976],[1.072036,-.19561,.084927]],face:[[15,18,21],[12,20,16],[6,10,2],[3,0,1],[9,7,13],[2,8,4,0],[0,4,5,1],[1,5,11,7],[7,11,17,13],[13,17,22,18],[18,22,24,21],[21,24,23,20],[20,23,19,16],[16,19,14,10],[10,14,8,2],[15,9,13,18],[12,15,21,20],[6,12,16,10],[3,6,2,0],[9,3,1,7],[9,15,12,6,3],[22,17,11,5,4,8,14,19,23,24]]};let t=n.type&&(n.type<0||n.type>=e.length)?0:n.type||0,i=n.size,r=n.sizeX||i||1,s=n.sizeY||i||1,a=n.sizeZ||i||1,o=n.custom||e[t],l=o.face.length,c=n.faceUV||new Array(l),f=n.faceColors,h=n.flat===void 0?!0:n.flat,d=n.sideOrientation===0?0:n.sideOrientation||Ie.DEFAULTSIDE,u=[],m=[],_=[],p=[],g=[],v=0,x=0,A=[],E,T,R,I,y,M,D,O;if(h)for(T=0;T{Ve();Ht();Di();lr();Qr();Ie.CreatePolyhedron=JG;q.CreatePolyhedron=(n,e,t)=>rg(n,e,t)});function $G(n){let e=n.sideOrientation||Ie.DEFAULTSIDE,t=n.radius||1,i=n.flat===void 0?!0:n.flat,r=(n.subdivisions||4)|0,s=n.radiusX||t,a=n.radiusY||t,o=n.radiusZ||t,l=(1+Math.sqrt(5))/2,c=[-1,l,-0,1,l,0,-1,-l,0,1,-l,0,0,-1,-l,0,1,-l,0,-1,l,0,1,l,l,0,1,l,0,-1,-l,0,1,-l,0,-1],f=[0,11,5,0,5,1,0,1,7,0,7,10,12,22,23,1,5,20,5,11,4,23,22,13,22,18,6,7,1,8,14,21,4,14,4,2,16,13,6,15,6,19,3,8,9,4,21,5,13,17,23,6,13,22,19,6,18,9,8,1],h=[0,1,2,3,4,5,6,7,8,9,10,11,0,2,3,3,3,4,7,8,9,9,10,11],d=[5,1,3,1,6,4,0,0,5,3,4,2,2,2,4,0,2,0,1,1,6,0,6,2,0,4,3,3,4,4,3,1,4,2,4,4,0,2,1,1,2,2,3,3,1,3,2,4],u=138/1024,m=239/1024,_=60/1024,p=26/1024,g=-40/1024,v=20/1024,x=[0,0,0,0,1,0,0,1,1,0,0,0,1,1,0,0,1,1,1,0],A=[],E=[],T=[],R=[],I=0,y=new Array(3),M=new Array(3),D;for(D=0;D<3;D++)y[D]=b.Zero(),M[D]=Ne.Zero();for(let V=0;V<20;V++){for(D=0;D<3;D++){let w=f[3*V+D];y[D].copyFromFloats(c[3*h[w]],c[3*h[w]+1],c[3*h[w]+2]),y[D].normalize(),M[D].copyFromFloats(d[2*w]*u+_+x[V]*g,d[2*w+1]*m+p+x[V]*v)}let N=(w,U,G,J)=>{let Y=b.Lerp(y[0],y[2],U/r),Q=b.Lerp(y[1],y[2],U/r),X=r===U?y[2]:b.Lerp(Y,Q,w/(r-U));X.normalize();let j;if(i){let se=b.Lerp(y[0],y[2],J/r),pe=b.Lerp(y[1],y[2],J/r);j=b.Lerp(se,pe,G/(r-J))}else j=new b(X.x,X.y,X.z);j.x/=s,j.y/=a,j.z/=o,j.normalize();let me=Ne.Lerp(M[0],M[2],U/r),xe=Ne.Lerp(M[1],M[2],U/r),Ge=r===U?M[2]:Ne.Lerp(me,xe,w/(r-U));E.push(X.x*s,X.y*a,X.z*o),T.push(j.x,j.y,j.z),R.push(Ge.x,It?1-Ge.y:Ge.y),A.push(I),I++};for(let w=0;w{Ve();Di();lr();Qr();Ie.CreateIcoSphere=$G;q.CreateIcoSphere=(n,e,t)=>Cy(n,e,t)});function yy(n,e,t){var G,J,Y,Q,X;let i=!!e.skeleton,r=!!((G=e.morphTargetManager)!=null&&G.numTargets),s=t.localMode||i,a=e.getIndices(),o=i||r?e.getPositionData(!0,!0):e.getVerticesData(L.PositionKind),l=i||r?e.getNormalsData(!0,!0):e.getVerticesData(L.NormalKind),c=s?i?e.getVerticesData(L.PositionKind):o:null,f=s?i?e.getVerticesData(L.NormalKind):l:null,h=e.getVerticesData(L.UVKind),d=i?e.getVerticesData(L.MatricesIndicesKind):null,u=i?e.getVerticesData(L.MatricesWeightsKind):null,m=i?e.getVerticesData(L.MatricesIndicesExtraKind):null,_=i?e.getVerticesData(L.MatricesWeightsExtraKind):null,p=t.position||b.Zero(),g=t.normal||b.Up(),v=t.size||b.One(),x=t.angle||0;if(!g){let j=new b(0,0,1),me=e.getScene().activeCamera,xe=b.TransformCoordinates(j,me.getWorldMatrix());g=me.globalPosition.subtract(xe)}let A=-Math.atan2(g.z,g.x)-Math.PI/2,E=Math.sqrt(g.x*g.x+g.z*g.z),T=Math.atan2(g.y,E),R=new Ie;R.indices=[],R.positions=[],R.normals=[],R.uvs=[],R.matricesIndices=i?[]:null,R.matricesWeights=i?[]:null,R.matricesIndicesExtra=m?[]:null,R.matricesWeightsExtra=_?[]:null;let I=0,y=(j,me)=>{let xe=new hA;if(!a||!o||!l)return xe;let Ge=a[j];if(xe.vertexIdx=Ge*3,xe.vertexIdxForBones=Ge*4,xe.position=new b(o[Ge*3],o[Ge*3+1],o[Ge*3+2]),b.TransformCoordinatesToRef(xe.position,me,xe.position),xe.normal=new b(l[Ge*3],l[Ge*3+1],l[Ge*3+2]),b.TransformNormalToRef(xe.normal,me,xe.normal),t.captureUVS&&h){let se=h[Ge*2+1];xe.uv=new Ne(h[Ge*2],It?1-se:se)}return xe},M=[0,0,0,0],D=(j,me)=>{if(j.length===0)return j;let xe=.5*Math.abs(b.Dot(v,me)),Ge=(ie,_e,Pe,de)=>{for(let be=0;be{var Ce,Be,je,st,Me,De,mt,At,at,Je,jt,ti,Ii,ae,$e,ye;let Pe=b.GetClipFactor(ie.position,_e.position,me,xe),de=M,be=M;if(d&&u){let pt=ie.matrixIndicesOverride?0:ie.vertexIdxForBones,rt=(Ce=ie.matrixIndicesOverride)!=null?Ce:d,Ue=(Be=ie.matrixWeightsOverride)!=null?Be:u,Mt=_e.matrixIndicesOverride?0:_e.vertexIdxForBones,ei=(je=_e.matrixIndicesOverride)!=null?je:d,pr=(st=_e.matrixWeightsOverride)!=null?st:u;de=[0,0,0,0],be=[0,0,0,0];let xi=0;for(let Sr=0;Sr<4;++Sr)if(Ue[pt+Sr]>0){let cl=Ge(ei,rt[pt+Sr],Mt,4);de[xi]=rt[pt+Sr],be[xi]=Ka(Ue[pt+Sr],cl>=0?pr[cl]:0,Pe),xi++}for(let Sr=0;Sr<4&&xi<4;++Sr){let cl=ei[Mt+Sr];Ge(rt,cl,pt,4)===-1&&(de[xi]=cl,be[xi]=Ka(0,pr[Mt+Sr],Pe),xi++)}let Jn=be[0]+be[1]+be[2]+be[3];be[0]/=Jn,be[1]/=Jn,be[2]/=Jn,be[3]/=Jn}let Ze=ie.localPositionOverride?ie.localPositionOverride[0]:(Me=c==null?void 0:c[ie.vertexIdx])!=null?Me:0,Tt=ie.localPositionOverride?ie.localPositionOverride[1]:(De=c==null?void 0:c[ie.vertexIdx+1])!=null?De:0,Ye=ie.localPositionOverride?ie.localPositionOverride[2]:(mt=c==null?void 0:c[ie.vertexIdx+2])!=null?mt:0,Ke=_e.localPositionOverride?_e.localPositionOverride[0]:(At=c==null?void 0:c[_e.vertexIdx])!=null?At:0,fe=_e.localPositionOverride?_e.localPositionOverride[1]:(at=c==null?void 0:c[_e.vertexIdx+1])!=null?at:0,Fe=_e.localPositionOverride?_e.localPositionOverride[2]:(Je=c==null?void 0:c[_e.vertexIdx+2])!=null?Je:0,Vt=ie.localNormalOverride?ie.localNormalOverride[0]:(jt=f==null?void 0:f[ie.vertexIdx])!=null?jt:0,re=ie.localNormalOverride?ie.localNormalOverride[1]:(ti=f==null?void 0:f[ie.vertexIdx+1])!=null?ti:0,di=ie.localNormalOverride?ie.localNormalOverride[2]:(Ii=f==null?void 0:f[ie.vertexIdx+2])!=null?Ii:0,zt=_e.localNormalOverride?_e.localNormalOverride[0]:(ae=f==null?void 0:f[_e.vertexIdx])!=null?ae:0,bi=_e.localNormalOverride?_e.localNormalOverride[1]:($e=f==null?void 0:f[_e.vertexIdx+1])!=null?$e:0,ot=_e.localNormalOverride?_e.localNormalOverride[2]:(ye=f==null?void 0:f[_e.vertexIdx+2])!=null?ye:0,Xi=Vt+(zt-Vt)*Pe,z=re+(bi-re)*Pe,B=di+(ot-di)*Pe,ue=Math.sqrt(Xi*Xi+z*z+B*B);return new hA(b.Lerp(ie.position,_e.position,Pe),b.Lerp(ie.normal,_e.normal,Pe).normalize(),Ne.Lerp(ie.uv,_e.uv,Pe),-1,-1,c?[Ze+(Ke-Ze)*Pe,Tt+(fe-Tt)*Pe,Ye+(Fe-Ye)*Pe]:null,f?[Xi/ue,z/ue,B/ue]:null,de,be)},pe=null;j.length>3&&(pe=[]);for(let ie=0;ie0,fe=Tt>0,Fe=Ye>0;switch((Ke?1:0)+(fe?1:0)+(Fe?1:0)){case 0:j.length>3?(pe.push(j[ie]),pe.push(j[ie+1]),pe.push(j[ie+2])):pe=j;break;case 1:if(pe=pe!=null?pe:new Array,Ke&&(_e=j[ie+1],Pe=j[ie+2],de=se(j[ie],_e),be=se(j[ie],Pe)),fe){_e=j[ie],Pe=j[ie+2],de=se(j[ie+1],_e),be=se(j[ie+1],Pe),pe.push(de),pe.push(Pe.clone()),pe.push(_e.clone()),pe.push(Pe.clone()),pe.push(de.clone()),pe.push(be);break}Fe&&(_e=j[ie],Pe=j[ie+1],de=se(j[ie+2],_e),be=se(j[ie+2],Pe)),_e&&Pe&&de&&be&&(pe.push(_e.clone()),pe.push(Pe.clone()),pe.push(de),pe.push(be),pe.push(de.clone()),pe.push(Pe.clone()));break;case 2:pe=pe!=null?pe:new Array,Ke||(_e=j[ie].clone(),Pe=se(_e,j[ie+1]),de=se(_e,j[ie+2]),pe.push(_e),pe.push(Pe),pe.push(de)),fe||(_e=j[ie+1].clone(),Pe=se(_e,j[ie+2]),de=se(_e,j[ie]),pe.push(_e),pe.push(Pe),pe.push(de)),Fe||(_e=j[ie+2].clone(),Pe=se(_e,j[ie]),de=se(_e,j[ie+1]),pe.push(_e),pe.push(Pe),pe.push(de));break;case 3:break}}return pe},O=e instanceof q?e:null,V=O==null?void 0:O._thinInstanceDataStorage.matrixData,N=(O==null?void 0:O.thinInstanceCount)||1,w=Z.Matrix[0];w.copyFrom(K.IdentityReadOnly);for(let j=0;j{Ve();xn();Di();Ui();lr();Qr();Gne=new b(1,0,0),kne=new b(-1,0,0),Wne=new b(0,1,0),Hne=new b(0,-1,0),zne=new b(0,0,1),Xne=new b(0,0,-1),hA=class n{constructor(e=b.Zero(),t=b.Up(),i=Ne.Zero(),r=0,s=0,a=null,o=null,l=null,c=null){this.position=e,this.normal=t,this.uv=i,this.vertexIdx=r,this.vertexIdxForBones=s,this.localPositionOverride=a,this.localNormalOverride=o,this.matrixIndicesOverride=l,this.matrixWeightsOverride=c}clone(){var e,t,i,r;return new n(this.position.clone(),this.normal.clone(),this.uv.clone(),this.vertexIdx,this.vertexIdxForBones,(e=this.localPositionOverride)==null?void 0:e.slice(),(t=this.localNormalOverride)==null?void 0:t.slice(),(i=this.matrixIndicesOverride)==null?void 0:i.slice(),(r=this.matrixWeightsOverride)==null?void 0:r.slice())}};q.CreateDecal=(n,e,t,i,r,s)=>yy(n,e,{position:t,normal:i,size:r,angle:s})});function ik(n={subdivisions:2,tessellation:16,height:1,radius:.25,capSubdivisions:6}){let e=Math.max(n.subdivisions?n.subdivisions:2,1)|0,t=Math.max(n.tessellation?n.tessellation:16,3)|0,i=Math.max(n.height?n.height:1,0),r=Math.max(n.radius?n.radius:.25,0),s=Math.max(n.capSubdivisions?n.capSubdivisions:6,1)|0,a=t,o=e,l=Math.max(n.radiusTop?n.radiusTop:r,0),c=Math.max(n.radiusBottom?n.radiusBottom:r,0),f=i-(l+c),h=0,d=2*Math.PI,u=Math.max(n.topCapSubdivisions?n.topCapSubdivisions:s,1),m=Math.max(n.bottomCapSubdivisions?n.bottomCapSubdivisions:s,1),_=Math.acos((c-l)/i),p=[],g=[],v=[],x=[],A=0,E=[],T=f*.5,R=Math.PI*.5,I,y,M=b.Zero(),D=b.Zero(),O=Math.cos(_),V=Math.sin(_),N=new Ne(l*V,T+l*O).subtract(new Ne(c*V,-T+c*O)).length(),w=l*_+N+c*(R-_),U=0;for(y=0;y<=u;y++){let Q=[],X=R-_*(y/u);U+=l*_/u;let j=Math.cos(X),me=Math.sin(X),xe=j*l;for(I=0;I<=a;I++){let Ge=I/a,se=Ge*d+h,pe=Math.sin(se),ie=Math.cos(se);D.x=xe*pe,D.y=T+me*l,D.z=xe*ie,g.push(D.x,D.y,D.z),M.set(j*pe,me,j*ie),v.push(M.x,M.y,M.z),x.push(Ge,It?U/w:1-U/w),Q.push(A),A++}E.push(Q)}let G=i-l-c+O*l-O*c,J=V*(c-l)/G;for(y=1;y<=o;y++){let Q=[];U+=N/o;let X=V*(y*(c-l)/o+l);for(I=0;I<=a;I++){let j=I/a,me=j*d+h,xe=Math.sin(me),Ge=Math.cos(me);D.x=X*xe,D.y=T+O*l-y*G/o,D.z=X*Ge,g.push(D.x,D.y,D.z),M.set(xe,J,Ge).normalize(),v.push(M.x,M.y,M.z),x.push(j,It?U/w:1-U/w),Q.push(A),A++}E.push(Q)}for(y=1;y<=m;y++){let Q=[],X=R-_-(Math.PI-_)*(y/m);U+=c*_/m;let j=Math.cos(X),me=Math.sin(X),xe=j*c;for(I=0;I<=a;I++){let Ge=I/a,se=Ge*d+h,pe=Math.sin(se),ie=Math.cos(se);D.x=xe*pe,D.y=-T+me*c,D.z=xe*ie,g.push(D.x,D.y,D.z),M.set(j*pe,me,j*ie),v.push(M.x,M.y,M.z),x.push(Ge,It?U/w:1-U/w),Q.push(A),A++}E.push(Q)}for(I=0;I{lr();Ve();Di();Qr();q.CreateCapsule=(n,e,t)=>Py(n,e,t);Ie.CreateCapsule=ik});var Hi,nk=C(()=>{Pt();Ve();Hi=class n{constructor(e=0,t=0){this.x=e,this.y=t,e!==Math.floor(e)&&(e=Math.floor(e),$.Warn("x is not an integer, floor(x) used")),t!==Math.floor(t)&&(t=Math.floor(t),$.Warn("y is not an integer, floor(y) used"))}clone(){return new n(this.x,this.y)}rotate60About(e){let t=this.x;return this.x=e.x+e.y-this.y,this.y=t+this.y-e.x,this}rotateNeg60About(e){let t=this.x;return this.x=t+this.y-e.y,this.y=e.x+e.y-t,this}rotate120(e,t){e!==Math.floor(e)&&(e=Math.floor(e),$.Warn("m not an integer only floor(m) used")),t!==Math.floor(t)&&(t=Math.floor(t),$.Warn("n not an integer only floor(n) used"));let i=this.x;return this.x=e-i-this.y,this.y=t+i,this}rotateNeg120(e,t){e!==Math.floor(e)&&(e=Math.floor(e),$.Warn("m is not an integer, floor(m) used")),t!==Math.floor(t)&&(t=Math.floor(t),$.Warn("n is not an integer, floor(n) used"));let i=this.x;return this.x=this.y-t,this.y=e+t-i-this.y,this}toCartesianOrigin(e,t){let i=b.Zero();return i.x=e.x+2*this.x*t+this.y*t,i.y=e.y+Math.sqrt(3)*this.y*t,i}static Zero(){return new n(0,0)}}});var xm,ng,Rm,Dy=C(()=>{Ve();xn();An();nk();xm=class{constructor(){this.cartesian=[],this.vertices=[],this.max=[],this.min=[],this.closestTo=[],this.innerFacets=[],this.isoVecsABOB=[],this.isoVecsOBOA=[],this.isoVecsBAOA=[],this.vertexTypes=[],this.IDATA=new ng("icosahedron","Regular",[[0,hr,-1],[-hr,1,0],[-1,0,-hr],[1,0,-hr],[hr,1,0],[0,hr,1],[-1,0,hr],[-hr,-1,0],[0,-hr,-1],[hr,-1,0],[1,0,hr],[0,-hr,1]],[[0,2,1],[0,3,2],[0,4,3],[0,5,4],[0,1,5],[7,6,1],[8,7,2],[9,8,3],[10,9,4],[6,10,5],[2,7,1],[3,8,2],[4,9,3],[5,10,4],[1,6,5],[11,6,7],[11,7,8],[11,8,9],[11,9,10],[11,10,6]])}setIndices(){let e=12,t={},i=this.m,r=this.n,s=i;r!==0&&(s=$S(i,r));let a=i/s,o=r/s,l,c,f,h,d,u=Hi.Zero(),m=new Hi(i,r),_=new Hi(-r,i+r),p=Hi.Zero(),g=Hi.Zero(),v=Hi.Zero(),x=[],A,E,T,R,I=[],y=this.vertByDist,M=(D,O,V,N)=>{A=D+"|"+V,E=O+"|"+N,A in t||E in t?A in t&&!(E in t)?t[E]=t[A]:E in t&&!(A in t)&&(t[A]=t[E]):(t[A]=e,t[E]=e,e++),y[V][0]>2?I[t[A]]=[-y[V][0],y[V][1],t[A]]:I[t[A]]=[x[y[V][0]],y[V][1],t[A]]};this.IDATA.edgematch=[[1,"B"],[2,"B"],[3,"B"],[4,"B"],[0,"B"],[10,"O",14,"A"],[11,"O",10,"A"],[12,"O",11,"A"],[13,"O",12,"A"],[14,"O",13,"A"],[0,"O"],[1,"O"],[2,"O"],[3,"O"],[4,"O"],[19,"B",5,"A"],[15,"B",6,"A"],[16,"B",7,"A"],[17,"B",8,"A"],[18,"B",9,"A"]];for(let D=0;D<20;D++){if(x=this.IDATA.face[D],f=x[2],h=x[1],d=x[0],T=u.x+"|"+u.y,A=D+"|"+T,A in t||(t[A]=f,I[f]=[x[y[T][0]],y[T][1]]),T=m.x+"|"+m.y,A=D+"|"+T,A in t||(t[A]=h,I[h]=[x[y[T][0]],y[T][1]]),T=_.x+"|"+_.y,A=D+"|"+T,A in t||(t[A]=d,I[d]=[x[y[T][0]],y[T][1]]),l=this.IDATA.edgematch[D][0],c=this.IDATA.edgematch[D][1],c==="B")for(let O=1;O2?I[t[A]]=[-y[T][0],y[T][1],t[A]]:I[t[A]]=[x[y[T][0]],y[T][1],t[A]])}this.closestTo=I,this.vecToidx=t}calcCoeffs(){let e=this.m,t=this.n,i=Math.sqrt(3)/3,r=e*e+t*t+e*t;this.coau=(e+t)/r,this.cobu=-t/r,this.coav=-i*(e-t)/r,this.cobv=i*(2*e+t)/r}createInnerFacets(){let e=this.m,t=this.n;for(let i=0;i0&&r0){let E=$S(e,t),T=e/E,R=t/E;for(let y=1;yE.x-T.x),i.sort((E,T)=>E.y-T.y);let o=new Array(e+t+1),l=new Array(e+t+1);for(let E=0;E{let R=E.clone();return T==="A"&&R.rotateNeg120(e,t),T==="B"&&R.rotate120(e,t),R.x<0?R.y:R.x+R.y},u=[],m=[],_=[],p=[],g={},v=[],x=-1,A=-1;for(let E=0;EE[2]-T[2]),v.sort((E,T)=>E[3]-T[3]),v.sort((E,T)=>E[1]-T[1]),v.sort((E,T)=>E[0]-T[0]);for(let E=0;Et.vecToidx[e+r]))}mapABOBtoDATA(e,t){let i=t.IDATA.edgematch[e][0];for(let r=0;r-1?i[a][1]>0&&t[i[a][0]].push([a,i[a][1]]):t[12].push([a,i[a][0]]);let r=[];for(let a=0;a<12;a++)r[a]=a;let s=12;for(let a=0;a<12;a++){t[a].sort((o,l)=>o[1]-l[1]);for(let o=0;oa[3]-o[3]);for(let a=0;a0;)s=t[l],this.face[s].indexOf(o)>-1?(a=(this.face[s].indexOf(o)+1)%3,o=this.face[s][a],i.push(o),r.push(s),t.splice(l,1),l=0):l++;return this.adjacentFaces.push(i),r}toGoldbergPolyhedronData(){let e=new ng("GeoDual","Goldberg",[],[]);e.name="GD dual";let t=this.vertex.length,i=new Array(t);for(let c=0;ci){let c=r;r=i,i=c,$.Warn("n > m therefore m and n swapped")}let s=new xm;s.build(i,r);let o={custom:Rm.BuildGeodesicData(s),size:e.size,sizeX:e.sizeX,sizeY:e.sizeY,sizeZ:e.sizeZ,faceUV:e.faceUV,faceColors:e.faceColors,flat:e.flat,updatable:e.updatable,sideOrientation:e.sideOrientation,frontUVs:e.frontUVs,backUVs:e.backUVs};return rg(n,o,t)}var ak=C(()=>{My();Pt();Dy()});var sg,ok=C(()=>{Ve();Ui();Di();Ht();Pt();q._GoldbergMeshParser=(n,e)=>sg.Parse(n,e);sg=class n extends q{constructor(){super(...arguments),this.goldbergData={faceColors:[],faceCenters:[],faceZaxis:[],faceXaxis:[],faceYaxis:[],nbSharedFaces:0,nbUnsharedFaces:0,nbFaces:0,nbFacesAtPole:0,adjacentFaces:[]}}relatedGoldbergFace(e,t){return t===void 0?(e>this.goldbergData.nbUnsharedFaces-1&&($.Warn("Maximum number of unshared faces used"),e=this.goldbergData.nbUnsharedFaces-1),this.goldbergData.nbUnsharedFaces+e):(e>11&&($.Warn("Last pole used"),e=11),t>this.goldbergData.nbFacesAtPole-1&&($.Warn("Maximum number of faces at a pole used"),t=this.goldbergData.nbFacesAtPole-1),12+e*this.goldbergData.nbFacesAtPole+t)}_changeGoldbergFaceColors(e){for(let i=0;i1&&(h=1),c.push(h,d);for(let u=0;u<6;u++)h=a.x+o*Math.cos(l+u*Math.PI/3),d=a.y+o*Math.sin(l+u*Math.PI/3),h<0&&(h=0),h>1&&(h=1),f.push(h,d);for(let u=r;ult.FromArray(s)),i.faceCenters=i.faceCenters.map(s=>b.FromArray(s)),i.faceZaxis=i.faceZaxis.map(s=>b.FromArray(s)),i.faceXaxis=i.faceXaxis.map(s=>b.FromArray(s)),i.faceYaxis=i.faceYaxis.map(s=>b.FromArray(s));let r=new n(e.name,t);return r.goldbergData=i,r}}});function Yne(n,e){let t=n.size,i=n.sizeX||t||1,r=n.sizeY||t||1,s=n.sizeZ||t||1,a=n.sideOrientation===0?0:n.sideOrientation||Ie.DEFAULTSIDE,o=[],l=[],c=[],f=[],h=1/0,d=-1/0,u=1/0,m=-1/0;for(let g=0;go){let m=l;l=o,o=m,$.Warn("n > m therefore m and n swapped")}let c=new xm;c.build(o,l);let f=Rm.BuildGeodesicData(c),h=f.toGoldbergPolyhedronData(),d=new sg(n,t);e.sideOrientation=q._GetDefaultSideOrientation(e.sideOrientation),d._originalBuilderSideOrientation=e.sideOrientation,Yne(e,h).applyToMesh(d,e.updatable),d.goldbergData.nbSharedFaces=f.sharedNodes,d.goldbergData.nbUnsharedFaces=f.poleNodes,d.goldbergData.adjacentFaces=f.adjacentFaces,d.goldbergData.nbFaces=d.goldbergData.nbSharedFaces+d.goldbergData.nbUnsharedFaces,d.goldbergData.nbFacesAtPole=(d.goldbergData.nbUnsharedFaces-12)/12;for(let m=0;m{Ve();Ht();Di();lr();Pt();Dy();ok();Qr()});function Kne(n,e,t,i,r,s){let a=s.glyphs[n]||s.glyphs["?"];if(!a)return null;let o=new Ly(r);if(a.o){let l=a.o.split(" ");for(let c=0,f=l.length;c{Mh();Ve();Di();Gh();Ty();Ly=class{constructor(e){this._paths=[],this._tempPaths=[],this._holes=[],this._resolution=e}moveTo(e,t){this._currentPath=new Ou(e,t),this._tempPaths.push(this._currentPath)}lineTo(e,t){this._currentPath.addLineTo(e,t)}quadraticCurveTo(e,t,i,r){this._currentPath.addQuadraticCurveTo(e,t,i,r,this._resolution)}bezierCurveTo(e,t,i,r,s,a){this._currentPath.addBezierCurveTo(e,t,i,r,s,a,this._resolution)}extractHoles(){for(let e of this._tempPaths)e.area()>0?this._holes.push(e):this._paths.push(e);if(!this._paths.length&&this._holes.length){let e=this._holes;this._holes=this._paths,this._paths=e}this._tempPaths.length=0}get paths(){return this._paths}get holes(){return this._holes}}});var uc,Oy=C(()=>{W_();FV();iy();WV();zV();YV();jV();ZV();HG();Ty();KG();jG();ZG();ry();ey();QG();My();ek();tk();rk();ak();ck();hk();uc={CreateBox:ty,CreateTiledBox:kV,CreateSphere:sy,CreateDisc:qC,CreateIcoSphere:Cy,CreateRibbon:fo,CreateCylinder:ay,CreateTorus:oy,CreateTorusKnot:ly,CreateLineSystem:gy,CreateLines:vy,CreateDashedLines:Ey,ExtrudeShape:Ay,ExtrudeShapeCustom:xy,CreateLathe:Ry,CreateTiledPlane:VV,CreatePlane:by,CreateGround:QC,CreateTiledGround:JC,CreateGroundFromHeightMap:$C,CreatePolygon:fA,ExtrudePolygon:ig,CreateTube:Iy,CreatePolyhedron:rg,CreateGeodesic:sk,CreateGoldberg:lk,CreateDecal:yy,CreateCapsule:Py,CreateText:fk}});var Ts,dA=C(()=>{Ts=class{constructor(){this.previousWorldMatrices={},this.previousBones={}}static AddUniforms(e){e.push("previousWorld","previousViewProjection","mPreviousBones")}static AddSamplers(e){}bindForSubMesh(e,t,i,r,s){if(t.prePassRenderer&&t.prePassRenderer.enabled&&t.prePassRenderer.currentRTisSceneRT&&(t.prePassRenderer.getIndex(2)!==-1||t.prePassRenderer.getIndex(11)!==-1)){this.previousWorldMatrices[i.uniqueId]||(this.previousWorldMatrices[i.uniqueId]=r.clone()),this.previousViewProjection||(this.previousViewProjection=t.getTransformMatrix().clone(),this.currentViewProjection=t.getTransformMatrix().clone());let a=t.getEngine();this.currentViewProjection.updateFlag!==t.getTransformMatrix().updateFlag?(this._lastUpdateFrameId=a.frameId,this.previousViewProjection.copyFrom(this.currentViewProjection),this.currentViewProjection.copyFrom(t.getTransformMatrix())):this._lastUpdateFrameId!==a.frameId&&(this._lastUpdateFrameId=a.frameId,this.previousViewProjection.copyFrom(this.currentViewProjection)),e.setMatrix("previousWorld",this.previousWorldMatrices[i.uniqueId]),e.setMatrix("previousViewProjection",this.previousViewProjection),this.previousWorldMatrices[i.uniqueId]=r.clone()}}}});var vr,ba=C(()=>{vr=class{constructor(e){if(this.VERTEXOUTPUT_INVARIANT=!1,this._keys=[],this._isDirty=!0,this._areLightsDirty=!0,this._areLightsDisposed=!1,this._areAttributesDirty=!0,this._areTexturesDirty=!0,this._areFresnelDirty=!0,this._areMiscDirty=!0,this._arePrePassDirty=!0,this._areImageProcessingDirty=!0,this._normals=!1,this._uvs=!1,this._needNormals=!1,this._needUVs=!1,this._externalProperties=e,e)for(let t in e)Object.prototype.hasOwnProperty.call(e,t)&&this._setDefaultValue(t)}get isDirty(){return this._isDirty}markAsProcessed(){this._isDirty=!1,this._areAttributesDirty=!1,this._areTexturesDirty=!1,this._areFresnelDirty=!1,this._areLightsDirty=!1,this._areLightsDisposed=!1,this._areMiscDirty=!1,this._arePrePassDirty=!1,this._areImageProcessingDirty=!1}markAsUnprocessed(){this._isDirty=!0}markAllAsDirty(){this._areTexturesDirty=!0,this._areAttributesDirty=!0,this._areLightsDirty=!0,this._areFresnelDirty=!0,this._areMiscDirty=!0,this._arePrePassDirty=!0,this._areImageProcessingDirty=!0,this._isDirty=!0}markAsImageProcessingDirty(){this._areImageProcessingDirty=!0,this._isDirty=!0}markAsLightDirty(e=!1){this._areLightsDirty=!0,this._areLightsDisposed=this._areLightsDisposed||e,this._isDirty=!0}markAsAttributesDirty(){this._areAttributesDirty=!0,this._isDirty=!0}markAsTexturesDirty(){this._areTexturesDirty=!0,this._isDirty=!0}markAsFresnelDirty(){this._areFresnelDirty=!0,this._isDirty=!0}markAsMiscDirty(){this._areMiscDirty=!0,this._isDirty=!0}markAsPrePassDirty(){this._arePrePassDirty=!0,this._isDirty=!0}rebuild(){this._keys.length=0;for(let e of Object.keys(this))e[0]!=="_"&&this._keys.push(e);if(this._externalProperties)for(let e in this._externalProperties)this._keys.indexOf(e)===-1&&this._keys.push(e)}isEqual(e){if(this._keys.length!==e._keys.length)return!1;for(let t=0;t{zt();Ui();Di();Ey();Pn();Ty();j._LinesMeshParser=(n,e)=>Xh.Parse(n,e);Xh=class n extends j{_isShaderMaterial(e){return e?e.getClassName()==="ShaderMaterial":!1}constructor(e,t=null,i=null,r=null,s,a,o,l){super(e,t,i,r,s),this.useVertexColor=a,this.useVertexAlpha=o,this.color=new Te(1,1,1),this.alpha=1,this._shaderLanguage=0,this._ownsMaterial=!1,r&&(this.color=r.color.clone(),this.alpha=r.alpha,this.useVertexColor=r.useVertexColor,this.useVertexAlpha=r.useVertexAlpha),this.intersectionThreshold=.1;let c=[],f={attributes:[L.PositionKind],uniforms:["world","viewProjection"],needAlphaBlending:!0,defines:c,useClipPlane:null,shaderLanguage:0};if(this.useVertexAlpha?f.defines.push("#define VERTEXALPHA"):f.needAlphaBlending=!1,this.useVertexColor?(f.defines.push("#define VERTEXCOLOR"),f.attributes.push(L.ColorKind)):(f.uniforms.push("color"),this._color4=new lt),l)this.material=l;else{this.getScene().getEngine().isWebGPU&&!n.ForceGLSL&&(this._shaderLanguage=1),f.shaderLanguage=this._shaderLanguage,f.extraInitializationsAsync=async()=>{this._shaderLanguage===1?await Promise.all([Promise.resolve().then(()=>(AG(),TG)),Promise.resolve().then(()=>(yG(),CG))]):await Promise.all([Promise.resolve().then(()=>(HG(),WG)),Promise.resolve().then(()=>(ZG(),qG))])};let d=new mo("colorShader",this.getScene(),"color",f,!1);d.doNotSerialize=!0,this._ownsMaterial=!0,this._setInternalMaterial(d)}}getClassName(){return"LinesMesh"}get material(){return this._internalAbstractMeshDataInfo._material}set material(e){let t=this.material;if(t===e)return;let i=t&&this._ownsMaterial;this._ownsMaterial=!1,this._setInternalMaterial(e),i&&(t==null||t.dispose())}_setInternalMaterial(e){this._setMaterial(e),this.material&&(this.material.fillMode=ve.LineListDrawMode,this.material.disableLighting=!0)}get checkCollisions(){return!1}set checkCollisions(e){}_bind(e,t){if(!this._geometry)return this;let i=this.isUnIndexed?null:this._geometry.getIndexBuffer();if(!this._userInstancedBuffersStorage||this.hasThinInstances?this._geometry._bind(t,i):this._geometry._bind(t,i,this._userInstancedBuffersStorage.vertexBuffers,this._userInstancedBuffersStorage.vertexArrayObjects),!this.useVertexColor&&this._isShaderMaterial(this.material)){let{r,g:s,b:a}=this.color;this._color4.set(r,s,a,this.alpha),this.material.setColor4("color",this._color4)}return this}_draw(e,t,i){if(!this._geometry||!this._geometry.getVertexBuffers()||!this._unIndexed&&!this._geometry.getIndexBuffer())return this;let r=this.getScene().getEngine();return this._unIndexed?r.drawArraysType(ve.LineListDrawMode,e.verticesStart,e.verticesCount,i):r.drawElementsType(ve.LineListDrawMode,e.indexStart,e.indexCount,i),this}dispose(e,t=!1,i){var r,s;i||(this._ownsMaterial?(r=this.material)==null||r.dispose(!1,!1,!0):t&&((s=this.material)==null||s.dispose(!1,!1,!0))),super.dispose(e)}clone(e,t=null,i){if(t&&t._addToSceneRootNodes===void 0){let r=t;return r.source=this,new n(e,this.getScene(),r.parent,r.source,r.doNotCloneChildren)}return new n(e,this.getScene(),t,this,i)}createInstance(e){let t=new Iy(e,this);if(this.instancedBuffers){t.instancedBuffers={};for(let i in this.instancedBuffers)t.instancedBuffers[i]=this.instancedBuffers[i]}return t}serialize(e){super.serialize(e),e.color=this.color.asArray(),e.alpha=this.alpha}static Parse(e,t){let i=new n(e.name,t);return i.color=Te.FromArray(e.color),i.alpha=e.alpha,i}};Xh.ForceGLSL=!1;Iy=class extends Zl{constructor(e,t){super(e,t),this.intersectionThreshold=t.intersectionThreshold}getClassName(){return"InstancedLinesMesh"}}});function $G(n){let e=[],t=[],i=n.lines,r=n.colors,s=[],a=0;for(let l=0;l0&&(e.push(a-1),e.push(a)),a++}}let o=new Ie;return o.indices=e,o.positions=t,r&&(o.colors=s),o}function JG(n){let e=n.dashSize||3,t=n.gapSize||1,i=n.dashNb||200,r=n.points,s=[],a=[],o=b.Zero(),l=0,c,f,h=0,d;for(d=0;d{let h=b.Zero(),d=f.length/6,u=0,m,_,p=0,g,v;for(g=0;g{Ge();Di();lr();QG();Ui();Pt();Ie.CreateLineSystem=$G;Ie.CreateDashedLines=JG;j.CreateLines=(n,e,t=null,i=!1,r=null)=>Cy(n,{points:e,updatable:i,instance:r},t);j.CreateDashedLines=(n,e,t,i,r,s=null,a,o)=>yy(n,{points:e,dashSize:t,gapSize:i,dashNb:r,updatable:a,instance:o},s)});var Py,cg,EA,tk=C(()=>{Pt();Ge();Ui();Di();lr();Ch();An();Pi();Py=class extends Ne{constructor(e,t){super(e.x,e.y),this.index=t}},cg=class{constructor(){this.elements=[]}add(e){let t=[];for(let i of e){let r=new Py(i,this.elements.length);t.push(r),this.elements.push(r)}return t}computeBounds(){let e=new Ne(this.elements[0].x,this.elements[0].y),t=new Ne(this.elements[0].x,this.elements[0].y);for(let i of this.elements)i.xt.x&&(t.x=i.x),i.yt.y&&(t.y=i.y);return{min:e,max:t,width:t.x-e.x,height:t.y-e.y}}},EA=class{_addToepoint(e){for(let t of e)this._epoints.push(t.x,t.y)}constructor(e,t,i,r=earcut){this._points=new cg,this._outlinepoints=new cg,this._holes=new Array,this._epoints=new Array,this._eholes=new Array,this.bjsEarcut=r,this._name=e,this._scene=i||Le.LastCreatedScene;let s;t instanceof Bu?s=t.getPoints():s=t,this._addToepoint(s),this._points.add(s),this._outlinepoints.add(s),typeof this.bjsEarcut=="undefined"&&J.Warn("Earcut was not found, the polygon will not be built.")}addHole(e){this._points.add(e);let t=new cg;return t.add(e),this._holes.push(t),this._eholes.push(this._epoints.length/2),this._addToepoint(e),this}build(e=!1,t=0,i=2){let r=new j(this._name,this._scene),s=this.buildVertexData(t,i);return r.setVerticesData(L.PositionKind,s.positions,e),r.setVerticesData(L.NormalKind,s.normals,e),r.setVerticesData(L.UVKind,s.uvs,e),r.setIndices(s.indices),r}buildVertexData(e=0,t=2){let i=new Ie,r=[],s=[],a=[],o=this._points.computeBounds();for(let f of this._points.elements)r.push(0,1,0),s.push(f.x,0,f.y),a.push((f.x-o.min.x)/o.width,(f.y-o.min.y)/o.height);let l=[],c=this.bjsEarcut(this._epoints,this._eholes,2);for(let f=0;f0){let f=s.length/3;for(let d of this._points.elements)r.push(0,-1,0),s.push(d.x,-e,d.y),a.push(1-(d.x-o.min.x)/o.width,1-(d.y-o.min.y)/o.height);let h=l.length;for(let d=0;dc?Rc?I{Ge();zt();Di();lr();tk();Ui();Pi();Qr();Ie.CreatePolygon=ik;j.CreatePolygon=(n,e,t,i,r,s,a=earcut)=>SA(n,{shape:e,holes:i,updatable:r,sideOrientation:s},t,a);j.ExtrudePolygon=(n,e,t,i,r,s,a,o=earcut)=>fg(n,{shape:e,holes:r,depth:t,updatable:s,sideOrientation:a},i,o)});function Ly(n,e,t=null){let i=e.path,r=e.shape,s=e.scale||1,a=e.rotation||0,o=e.cap===0?0:e.cap||j.NO_CAP,l=e.updatable,c=j._GetDefaultSideOrientation(e.sideOrientation),f=e.instance||null,h=e.invertUV||!1,d=e.closeShape||!1,u=e.closePath||!1,m=e.capFunction||null;return rk(n,r,i,s,a,null,null,u,d,o,!1,t,!!l,c,f,h,e.frontUVs||null,e.backUVs||null,e.firstNormal||null,!!e.adjustFrame,m)}function Oy(n,e,t=null){var v;let i=e.path,r=e.shape,s=b.Zero(),a=(x,A)=>{var E,R;let S=(R=(E=e.scaleFunction)==null?void 0:E.call(e,x,A))!=null?R:1;return s.copyFromFloats(S,S,S)},o=e.rotationFunction||(()=>0),l=e.closePath||e.ribbonCloseArray||!1,c=e.closeShape||e.ribbonClosePath||!1,f=e.cap===0?0:e.cap||j.NO_CAP,h=e.updatable,d=e.firstNormal||null,u=e.adjustFrame||!1,m=j._GetDefaultSideOrientation(e.sideOrientation),_=e.instance,p=e.invertUV||!1,g=e.capFunction||null;return rk(n,r,i,null,null,(v=e.scaleVectorFunction)!=null?v:a,o,l,c,f,!0,t,!!h,m,_||null,p,e.frontUVs||null,e.backUVs||null,d,u,g||null)}function rk(n,e,t,i,r,s,a,o,l,c,f,h,d,u,m,_,p,g,v,x,A){let S=(D,O,V,N,F,U,W,$,q,Z,X)=>{let Y=V.getTangents(),fe=V.getNormals(),xe=V.getBinormals(),Fe=V.getDistances();if(X){for(let Ye=0;Ye0){let Ke=Y[Ye-1];b.Dot(Ke,Y[Ye])<0&&Y[Ye].scaleInPlace(-1),Ke=fe[Ye-1],b.Dot(Ke,fe[Ye])<0&&fe[Ye].scaleInPlace(-1),Ke=xe[Ye-1],b.Dot(Ke,xe[Ye])<0&&xe[Ye].scaleInPlace(-1)}}let se=0,pe=()=>F!==null?F:b.OneReadOnly,_e=Z&&$?$:()=>U!==null?U:0,Pe=Z&&W?W:pe,ue=q===j.NO_CAP||q===j.CAP_END?0:2,be=Q.Matrix[0];for(let Ye=0;Ye{let Ke=Array(),he=b.Zero(),we;for(we=0;we3?0:c,R=S(e,t,I,y,E,r,s,a,c,f,x);let M=uo(n,{pathArray:R,closeArray:o,closePath:l,updatable:d,sideOrientation:u,invertUV:_,frontUVs:p||void 0,backUVs:g||void 0},h);return M._creationDataStorage.pathArray=R,M._creationDataStorage.path3D=I,M._creationDataStorage.cap=c,M}var nk=C(()=>{Ge();Di();Z_();Ch();j.ExtrudeShape=(n,e,t,i,r,s,a=null,o,l,c)=>{let f={shape:e,path:t,scale:i,rotation:r,cap:s===0?0:s||j.NO_CAP,sideOrientation:l,instance:c,updatable:o};return Ly(n,f,a)};j.ExtrudeShapeCustom=(n,e,t,i,r,s,a,o,l,c,f,h)=>{let d={shape:e,path:t,scaleFunction:i,rotationFunction:r,ribbonCloseArray:s,ribbonClosePath:a,cap:o===0?0:o||j.NO_CAP,sideOrientation:f,instance:h,updatable:c};return Oy(n,d,l)}});function Ny(n,e,t=null){let i=e.arc?e.arc<=0||e.arc>1?1:e.arc:1,r=e.closed===void 0?!0:e.closed,s=e.shape,a=e.radius||1,o=e.tessellation||64,l=e.clip||0,c=e.updatable,f=j._GetDefaultSideOrientation(e.sideOrientation),h=e.cap||j.NO_CAP,d=Math.PI*2,u=[],m=e.invertUV||!1,_,p,g=d/o*i,v,x;for(_=0;_<=o-l;_++){for(x=[],(h==j.CAP_START||h==j.CAP_ALL)&&(x.push(new b(0,s[0].y,0)),x.push(new b(Math.cos(_*g)*s[0].x*a,s[0].y,Math.sin(_*g)*s[0].x*a))),p=0;p{Ge();Di();Z_();j.CreateLathe=(n,e,t,i,r,s,a)=>Ny(n,{shape:e,radius:t,tessellation:i,sideOrientation:a,updatable:s},r)});function ak(n){let e=[],t=[],i=[],r=[],s=n.width!==void 0?n.width:n.size!==void 0?n.size:1,a=n.height!==void 0?n.height:n.size!==void 0?n.size:1,o=n.sideOrientation===0?0:n.sideOrientation||Ie.DEFAULTSIDE,l=s/2,c=a/2;t.push(-l,-c,0),i.push(0,0,-1),r.push(0,It?1:0),t.push(l,-c,0),i.push(0,0,-1),r.push(1,It?1:0),t.push(l,c,0),i.push(0,0,-1),r.push(1,It?0:1),t.push(-l,c,0),i.push(0,0,-1),r.push(0,It?0:1),e.push(0),e.push(1),e.push(2),e.push(0),e.push(2),e.push(3),Ie._ComputeSides(o,t,e,i,r,n.frontUVs,n.backUVs);let f=new Ie;return f.indices=e,f.positions=t,f.normals=i,f.uvs=r,f}function wy(n,e={},t=null){let i=new j(n,t);return e.sideOrientation=j._GetDefaultSideOrientation(e.sideOrientation),i._originalBuilderSideOrientation=e.sideOrientation,ak(e).applyToMesh(i,e.updatable),e.sourcePlane&&(i.translate(e.sourcePlane.normal,-e.sourcePlane.d),i.setDirection(e.sourcePlane.normal.scale(-1))),i}var ok=C(()=>{Di();lr();Qr();Ie.CreatePlane=ak;j.CreatePlane=(n,e,t,i,r)=>wy(n,{size:e,width:e,height:e,sideOrientation:r,updatable:i},t)});function Fy(n,e,t=null){let i=e.path,r=e.instance,s=1;e.radius!==void 0?s=e.radius:r&&(s=r._creationDataStorage.radius);let a=e.tessellation||64,o=e.radiusFunction||null,l=e.cap||j.NO_CAP,c=e.invertUV||!1,f=e.updatable,h=j._GetDefaultSideOrientation(e.sideOrientation);e.arc=e.arc&&(e.arc<=0||e.arc>1)?1:e.arc||1;let d=(g,v,x,A,S,E,R,I)=>{let y=v.getTangents(),M=v.getNormals(),D=v.getDistances(),V=Math.PI*2/S*I,F=E||(()=>A),U,W,$,q,Z=Q.Matrix[0],X=R===j.NO_CAP||R===j.CAP_END?0:2;for(let fe=0;fe{let Fe=Array();for(let se=0;se3?0:l,m=d(i,u,_,s,a,o,l,e.arc);let p=uo(n,{pathArray:m,closePath:!0,closeArray:!1,updatable:f,sideOrientation:h,invertUV:c,frontUVs:e.frontUVs,backUVs:e.backUVs},t);return p._creationDataStorage.pathArray=m,p._creationDataStorage.path3D=u,p._creationDataStorage.tessellation=a,p._creationDataStorage.cap=l,p._creationDataStorage.arc=e.arc,p._creationDataStorage.radius=s,p}var lk=C(()=>{Ge();Di();Z_();Ch();j.CreateTube=(n,e,t,i,r,s,a,o,l,c)=>Fy(n,{path:e,radius:t,tessellation:i,radiusFunction:r,arc:1,cap:s,updatable:o,sideOrientation:l,instance:c},a)});function ck(n){let e=[];e[0]={vertex:[[0,0,1.732051],[1.632993,0,-.5773503],[-.8164966,1.414214,-.5773503],[-.8164966,-1.414214,-.5773503]],face:[[0,1,2],[0,2,3],[0,3,1],[1,3,2]]},e[1]={vertex:[[0,0,1.414214],[1.414214,0,0],[0,1.414214,0],[-1.414214,0,0],[0,-1.414214,0],[0,0,-1.414214]],face:[[0,1,2],[0,2,3],[0,3,4],[0,4,1],[1,4,5],[1,5,2],[2,5,3],[3,5,4]]},e[2]={vertex:[[0,0,1.070466],[.7136442,0,.7978784],[-.3568221,.618034,.7978784],[-.3568221,-.618034,.7978784],[.7978784,.618034,.3568221],[.7978784,-.618034,.3568221],[-.9341724,.381966,.3568221],[.1362939,1,.3568221],[.1362939,-1,.3568221],[-.9341724,-.381966,.3568221],[.9341724,.381966,-.3568221],[.9341724,-.381966,-.3568221],[-.7978784,.618034,-.3568221],[-.1362939,1,-.3568221],[-.1362939,-1,-.3568221],[-.7978784,-.618034,-.3568221],[.3568221,.618034,-.7978784],[.3568221,-.618034,-.7978784],[-.7136442,0,-.7978784],[0,0,-1.070466]],face:[[0,1,4,7,2],[0,2,6,9,3],[0,3,8,5,1],[1,5,11,10,4],[2,7,13,12,6],[3,9,15,14,8],[4,10,16,13,7],[5,8,14,17,11],[6,12,18,15,9],[10,11,17,19,16],[12,13,16,19,18],[14,15,18,19,17]]},e[3]={vertex:[[0,0,1.175571],[1.051462,0,.5257311],[.3249197,1,.5257311],[-.8506508,.618034,.5257311],[-.8506508,-.618034,.5257311],[.3249197,-1,.5257311],[.8506508,.618034,-.5257311],[.8506508,-.618034,-.5257311],[-.3249197,1,-.5257311],[-1.051462,0,-.5257311],[-.3249197,-1,-.5257311],[0,0,-1.175571]],face:[[0,1,2],[0,2,3],[0,3,4],[0,4,5],[0,5,1],[1,5,7],[1,7,6],[1,6,2],[2,6,8],[2,8,3],[3,8,9],[3,9,4],[4,9,10],[4,10,5],[5,10,7],[6,7,11],[6,11,8],[7,10,11],[8,11,9],[9,11,10]]},e[4]={vertex:[[0,0,1.070722],[.7148135,0,.7971752],[-.104682,.7071068,.7971752],[-.6841528,.2071068,.7971752],[-.104682,-.7071068,.7971752],[.6101315,.7071068,.5236279],[1.04156,.2071068,.1367736],[.6101315,-.7071068,.5236279],[-.3574067,1,.1367736],[-.7888348,-.5,.5236279],[-.9368776,.5,.1367736],[-.3574067,-1,.1367736],[.3574067,1,-.1367736],[.9368776,-.5,-.1367736],[.7888348,.5,-.5236279],[.3574067,-1,-.1367736],[-.6101315,.7071068,-.5236279],[-1.04156,-.2071068,-.1367736],[-.6101315,-.7071068,-.5236279],[.104682,.7071068,-.7971752],[.6841528,-.2071068,-.7971752],[.104682,-.7071068,-.7971752],[-.7148135,0,-.7971752],[0,0,-1.070722]],face:[[0,2,3],[1,6,5],[4,9,11],[7,15,13],[8,16,10],[12,14,19],[17,22,18],[20,21,23],[0,1,5,2],[0,3,9,4],[0,4,7,1],[1,7,13,6],[2,5,12,8],[2,8,10,3],[3,10,17,9],[4,11,15,7],[5,6,14,12],[6,13,20,14],[8,12,19,16],[9,17,18,11],[10,16,22,17],[11,18,21,15],[13,15,21,20],[14,20,23,19],[16,19,23,22],[18,22,23,21]]},e[5]={vertex:[[0,0,1.322876],[1.309307,0,.1889822],[-.9819805,.8660254,.1889822],[.1636634,-1.299038,.1889822],[.3273268,.8660254,-.9449112],[-.8183171,-.4330127,-.9449112]],face:[[0,3,1],[2,4,5],[0,1,4,2],[0,2,5,3],[1,3,5,4]]},e[6]={vertex:[[0,0,1.159953],[1.013464,0,.5642542],[-.3501431,.9510565,.5642542],[-.7715208,-.6571639,.5642542],[.6633206,.9510565,-.03144481],[.8682979,-.6571639,-.3996071],[-1.121664,.2938926,-.03144481],[-.2348831,-1.063314,-.3996071],[.5181548,.2938926,-.9953061],[-.5850262,-.112257,-.9953061]],face:[[0,1,4,2],[0,2,6,3],[1,5,8,4],[3,6,9,7],[5,7,9,8],[0,3,7,5,1],[2,4,8,9,6]]},e[7]={vertex:[[0,0,1.118034],[.8944272,0,.6708204],[-.2236068,.8660254,.6708204],[-.7826238,-.4330127,.6708204],[.6708204,.8660254,.2236068],[1.006231,-.4330127,-.2236068],[-1.006231,.4330127,.2236068],[-.6708204,-.8660254,-.2236068],[.7826238,.4330127,-.6708204],[.2236068,-.8660254,-.6708204],[-.8944272,0,-.6708204],[0,0,-1.118034]],face:[[0,1,4,2],[0,2,6,3],[1,5,8,4],[3,6,10,7],[5,9,11,8],[7,10,11,9],[0,3,7,9,5,1],[2,4,8,11,10,6]]},e[8]={vertex:[[-.729665,.670121,.319155],[-.655235,-.29213,-.754096],[-.093922,-.607123,.537818],[.702196,.595691,.485187],[.776626,-.36656,-.588064]],face:[[1,4,2],[0,1,2],[3,0,2],[4,3,2],[4,1,0,3]]},e[9]={vertex:[[-.868849,-.100041,.61257],[-.329458,.976099,.28078],[-.26629,-.013796,-.477654],[-.13392,-1.034115,.229829],[.738834,.707117,-.307018],[.859683,-.535264,-.338508]],face:[[3,0,2],[5,3,2],[4,5,2],[1,4,2],[0,1,2],[0,3,5,4,1]]},e[10]={vertex:[[-.610389,.243975,.531213],[-.187812,-.48795,-.664016],[-.187812,.9759,-.664016],[.187812,-.9759,.664016],[.798201,.243975,.132803]],face:[[1,3,0],[3,4,0],[3,1,4],[0,2,1],[0,4,2],[2,4,1]]},e[11]={vertex:[[-1.028778,.392027,-.048786],[-.640503,-.646161,.621837],[-.125162,-.395663,-.540059],[.004683,.888447,-.651988],[.125161,.395663,.540059],[.632925,-.791376,.433102],[1.031672,.157063,-.354165]],face:[[3,2,0],[2,1,0],[2,5,1],[0,4,3],[0,1,4],[4,1,5],[2,3,6],[3,4,6],[5,2,6],[4,5,6]]},e[12]={vertex:[[-.669867,.334933,-.529576],[-.669867,.334933,.529577],[-.4043,1.212901,0],[-.334933,-.669867,-.529576],[-.334933,-.669867,.529577],[.334933,.669867,-.529576],[.334933,.669867,.529577],[.4043,-1.212901,0],[.669867,-.334933,-.529576],[.669867,-.334933,.529577]],face:[[8,9,7],[6,5,2],[3,8,7],[5,0,2],[4,3,7],[0,1,2],[9,4,7],[1,6,2],[9,8,5,6],[8,3,0,5],[3,4,1,0],[4,9,6,1]]},e[13]={vertex:[[-.931836,.219976,-.264632],[-.636706,.318353,.692816],[-.613483,-.735083,-.264632],[-.326545,.979634,0],[-.318353,-.636706,.692816],[-.159176,.477529,-.856368],[.159176,-.477529,-.856368],[.318353,.636706,.692816],[.326545,-.979634,0],[.613482,.735082,-.264632],[.636706,-.318353,.692816],[.931835,-.219977,-.264632]],face:[[11,10,8],[7,9,3],[6,11,8],[9,5,3],[2,6,8],[5,0,3],[4,2,8],[0,1,3],[10,4,8],[1,7,3],[10,11,9,7],[11,6,5,9],[6,2,0,5],[2,4,1,0],[4,10,7,1]]},e[14]={vertex:[[-.93465,.300459,-.271185],[-.838689,-.260219,-.516017],[-.711319,.717591,.128359],[-.710334,-.156922,.080946],[-.599799,.556003,-.725148],[-.503838,-.004675,-.969981],[-.487004,.26021,.48049],[-.460089,-.750282,-.512622],[-.376468,.973135,-.325605],[-.331735,-.646985,.084342],[-.254001,.831847,.530001],[-.125239,-.494738,-.966586],[.029622,.027949,.730817],[.056536,-.982543,-.262295],[.08085,1.087391,.076037],[.125583,-.532729,.485984],[.262625,.599586,.780328],[.391387,-.726999,-.716259],[.513854,-.868287,.139347],[.597475,.85513,.326364],[.641224,.109523,.783723],[.737185,-.451155,.538891],[.848705,-.612742,-.314616],[.976075,.365067,.32976],[1.072036,-.19561,.084927]],face:[[15,18,21],[12,20,16],[6,10,2],[3,0,1],[9,7,13],[2,8,4,0],[0,4,5,1],[1,5,11,7],[7,11,17,13],[13,17,22,18],[18,22,24,21],[21,24,23,20],[20,23,19,16],[16,19,14,10],[10,14,8,2],[15,9,13,18],[12,15,21,20],[6,12,16,10],[3,6,2,0],[9,3,1,7],[9,15,12,6,3],[22,17,11,5,4,8,14,19,23,24]]};let t=n.type&&(n.type<0||n.type>=e.length)?0:n.type||0,i=n.size,r=n.sizeX||i||1,s=n.sizeY||i||1,a=n.sizeZ||i||1,o=n.custom||e[t],l=o.face.length,c=n.faceUV||new Array(l),f=n.faceColors,h=n.flat===void 0?!0:n.flat,d=n.sideOrientation===0?0:n.sideOrientation||Ie.DEFAULTSIDE,u=[],m=[],_=[],p=[],g=[],v=0,x=0,A=[],S,E,R,I,y,M,D,O;if(h)for(E=0;E{Ge();zt();Di();lr();Qr();Ie.CreatePolyhedron=ck;j.CreatePolyhedron=(n,e,t)=>hg(n,e,t)});function fk(n){let e=n.sideOrientation||Ie.DEFAULTSIDE,t=n.radius||1,i=n.flat===void 0?!0:n.flat,r=(n.subdivisions||4)|0,s=n.radiusX||t,a=n.radiusY||t,o=n.radiusZ||t,l=(1+Math.sqrt(5))/2,c=[-1,l,-0,1,l,0,-1,-l,0,1,-l,0,0,-1,-l,0,1,-l,0,-1,l,0,1,l,l,0,1,l,0,-1,-l,0,1,-l,0,-1],f=[0,11,5,0,5,1,0,1,7,0,7,10,12,22,23,1,5,20,5,11,4,23,22,13,22,18,6,7,1,8,14,21,4,14,4,2,16,13,6,15,6,19,3,8,9,4,21,5,13,17,23,6,13,22,19,6,18,9,8,1],h=[0,1,2,3,4,5,6,7,8,9,10,11,0,2,3,3,3,4,7,8,9,9,10,11],d=[5,1,3,1,6,4,0,0,5,3,4,2,2,2,4,0,2,0,1,1,6,0,6,2,0,4,3,3,4,4,3,1,4,2,4,4,0,2,1,1,2,2,3,3,1,3,2,4],u=138/1024,m=239/1024,_=60/1024,p=26/1024,g=-40/1024,v=20/1024,x=[0,0,0,0,1,0,0,1,1,0,0,0,1,1,0,0,1,1,1,0],A=[],S=[],E=[],R=[],I=0,y=new Array(3),M=new Array(3),D;for(D=0;D<3;D++)y[D]=b.Zero(),M[D]=Ne.Zero();for(let V=0;V<20;V++){for(D=0;D<3;D++){let F=f[3*V+D];y[D].copyFromFloats(c[3*h[F]],c[3*h[F]+1],c[3*h[F]+2]),y[D].normalize(),M[D].copyFromFloats(d[2*F]*u+_+x[V]*g,d[2*F+1]*m+p+x[V]*v)}let N=(F,U,W,$)=>{let q=b.Lerp(y[0],y[2],U/r),Z=b.Lerp(y[1],y[2],U/r),X=r===U?y[2]:b.Lerp(q,Z,F/(r-U));X.normalize();let Y;if(i){let se=b.Lerp(y[0],y[2],$/r),pe=b.Lerp(y[1],y[2],$/r);Y=b.Lerp(se,pe,W/(r-$))}else Y=new b(X.x,X.y,X.z);Y.x/=s,Y.y/=a,Y.z/=o,Y.normalize();let fe=Ne.Lerp(M[0],M[2],U/r),xe=Ne.Lerp(M[1],M[2],U/r),Fe=r===U?M[2]:Ne.Lerp(fe,xe,F/(r-U));S.push(X.x*s,X.y*a,X.z*o),E.push(Y.x,Y.y,Y.z),R.push(Fe.x,It?1-Fe.y:Fe.y),A.push(I),I++};for(let F=0;F{Ge();Di();lr();Qr();Ie.CreateIcoSphere=fk;j.CreateIcoSphere=(n,e,t)=>Uy(n,e,t)});function Vy(n,e,t){var W,$,q,Z,X;let i=!!e.skeleton,r=!!((W=e.morphTargetManager)!=null&&W.numTargets),s=t.localMode||i,a=e.getIndices(),o=i||r?e.getPositionData(!0,!0):e.getVerticesData(L.PositionKind),l=i||r?e.getNormalsData(!0,!0):e.getVerticesData(L.NormalKind),c=s?i?e.getVerticesData(L.PositionKind):o:null,f=s?i?e.getVerticesData(L.NormalKind):l:null,h=e.getVerticesData(L.UVKind),d=i?e.getVerticesData(L.MatricesIndicesKind):null,u=i?e.getVerticesData(L.MatricesWeightsKind):null,m=i?e.getVerticesData(L.MatricesIndicesExtraKind):null,_=i?e.getVerticesData(L.MatricesWeightsExtraKind):null,p=t.position||b.Zero(),g=t.normal||b.Up(),v=t.size||b.One(),x=t.angle||0;if(!g){let Y=new b(0,0,1),fe=e.getScene().activeCamera,xe=b.TransformCoordinates(Y,fe.getWorldMatrix());g=fe.globalPosition.subtract(xe)}let A=-Math.atan2(g.z,g.x)-Math.PI/2,S=Math.sqrt(g.x*g.x+g.z*g.z),E=Math.atan2(g.y,S),R=new Ie;R.indices=[],R.positions=[],R.normals=[],R.uvs=[],R.matricesIndices=i?[]:null,R.matricesWeights=i?[]:null,R.matricesIndicesExtra=m?[]:null,R.matricesWeightsExtra=_?[]:null;let I=0,y=(Y,fe)=>{let xe=new TA;if(!a||!o||!l)return xe;let Fe=a[Y];if(xe.vertexIdx=Fe*3,xe.vertexIdxForBones=Fe*4,xe.position=new b(o[Fe*3],o[Fe*3+1],o[Fe*3+2]),b.TransformCoordinatesToRef(xe.position,fe,xe.position),xe.normal=new b(l[Fe*3],l[Fe*3+1],l[Fe*3+2]),b.TransformNormalToRef(xe.normal,fe,xe.normal),t.captureUVS&&h){let se=h[Fe*2+1];xe.uv=new Ne(h[Fe*2],It?1-se:se)}return xe},M=[0,0,0,0],D=(Y,fe)=>{if(Y.length===0)return Y;let xe=.5*Math.abs(b.Dot(v,fe)),Fe=(ie,_e,Pe,ue)=>{for(let be=0;be{var Ce,Ue,je,st,Me,De,mt,At,at,Je,qt,ti,Ii,ae,et,ye;let Pe=b.GetClipFactor(ie.position,_e.position,fe,xe),ue=M,be=M;if(d&&u){let pt=ie.matrixIndicesOverride?0:ie.vertexIdxForBones,rt=(Ce=ie.matrixIndicesOverride)!=null?Ce:d,Ve=(Ue=ie.matrixWeightsOverride)!=null?Ue:u,Mt=_e.matrixIndicesOverride?0:_e.vertexIdxForBones,ei=(je=_e.matrixIndicesOverride)!=null?je:d,gr=(st=_e.matrixWeightsOverride)!=null?st:u;ue=[0,0,0,0],be=[0,0,0,0];let xi=0;for(let Ar=0;Ar<4;++Ar)if(Ve[pt+Ar]>0){let hl=Fe(ei,rt[pt+Ar],Mt,4);ue[xi]=rt[pt+Ar],be[xi]=qa(Ve[pt+Ar],hl>=0?gr[hl]:0,Pe),xi++}for(let Ar=0;Ar<4&&xi<4;++Ar){let hl=ei[Mt+Ar];Fe(rt,hl,pt,4)===-1&&(ue[xi]=hl,be[xi]=qa(0,gr[Mt+Ar],Pe),xi++)}let $n=be[0]+be[1]+be[2]+be[3];be[0]/=$n,be[1]/=$n,be[2]/=$n,be[3]/=$n}let Ze=ie.localPositionOverride?ie.localPositionOverride[0]:(Me=c==null?void 0:c[ie.vertexIdx])!=null?Me:0,Tt=ie.localPositionOverride?ie.localPositionOverride[1]:(De=c==null?void 0:c[ie.vertexIdx+1])!=null?De:0,Ye=ie.localPositionOverride?ie.localPositionOverride[2]:(mt=c==null?void 0:c[ie.vertexIdx+2])!=null?mt:0,Ke=_e.localPositionOverride?_e.localPositionOverride[0]:(At=c==null?void 0:c[_e.vertexIdx])!=null?At:0,he=_e.localPositionOverride?_e.localPositionOverride[1]:(at=c==null?void 0:c[_e.vertexIdx+1])!=null?at:0,we=_e.localPositionOverride?_e.localPositionOverride[2]:(Je=c==null?void 0:c[_e.vertexIdx+2])!=null?Je:0,Vt=ie.localNormalOverride?ie.localNormalOverride[0]:(qt=f==null?void 0:f[ie.vertexIdx])!=null?qt:0,re=ie.localNormalOverride?ie.localNormalOverride[1]:(ti=f==null?void 0:f[ie.vertexIdx+1])!=null?ti:0,di=ie.localNormalOverride?ie.localNormalOverride[2]:(Ii=f==null?void 0:f[ie.vertexIdx+2])!=null?Ii:0,Xt=_e.localNormalOverride?_e.localNormalOverride[0]:(ae=f==null?void 0:f[_e.vertexIdx])!=null?ae:0,bi=_e.localNormalOverride?_e.localNormalOverride[1]:(et=f==null?void 0:f[_e.vertexIdx+1])!=null?et:0,ot=_e.localNormalOverride?_e.localNormalOverride[2]:(ye=f==null?void 0:f[_e.vertexIdx+2])!=null?ye:0,Xi=Vt+(Xt-Vt)*Pe,z=re+(bi-re)*Pe,B=di+(ot-di)*Pe,me=Math.sqrt(Xi*Xi+z*z+B*B);return new TA(b.Lerp(ie.position,_e.position,Pe),b.Lerp(ie.normal,_e.normal,Pe).normalize(),Ne.Lerp(ie.uv,_e.uv,Pe),-1,-1,c?[Ze+(Ke-Ze)*Pe,Tt+(he-Tt)*Pe,Ye+(we-Ye)*Pe]:null,f?[Xi/me,z/me,B/me]:null,ue,be)},pe=null;Y.length>3&&(pe=[]);for(let ie=0;ie0,he=Tt>0,we=Ye>0;switch((Ke?1:0)+(he?1:0)+(we?1:0)){case 0:Y.length>3?(pe.push(Y[ie]),pe.push(Y[ie+1]),pe.push(Y[ie+2])):pe=Y;break;case 1:if(pe=pe!=null?pe:new Array,Ke&&(_e=Y[ie+1],Pe=Y[ie+2],ue=se(Y[ie],_e),be=se(Y[ie],Pe)),he){_e=Y[ie],Pe=Y[ie+2],ue=se(Y[ie+1],_e),be=se(Y[ie+1],Pe),pe.push(ue),pe.push(Pe.clone()),pe.push(_e.clone()),pe.push(Pe.clone()),pe.push(ue.clone()),pe.push(be);break}we&&(_e=Y[ie],Pe=Y[ie+1],ue=se(Y[ie+2],_e),be=se(Y[ie+2],Pe)),_e&&Pe&&ue&&be&&(pe.push(_e.clone()),pe.push(Pe.clone()),pe.push(ue),pe.push(be),pe.push(ue.clone()),pe.push(Pe.clone()));break;case 2:pe=pe!=null?pe:new Array,Ke||(_e=Y[ie].clone(),Pe=se(_e,Y[ie+1]),ue=se(_e,Y[ie+2]),pe.push(_e),pe.push(Pe),pe.push(ue)),he||(_e=Y[ie+1].clone(),Pe=se(_e,Y[ie+2]),ue=se(_e,Y[ie]),pe.push(_e),pe.push(Pe),pe.push(ue)),we||(_e=Y[ie+2].clone(),Pe=se(_e,Y[ie]),ue=se(_e,Y[ie+1]),pe.push(_e),pe.push(Pe),pe.push(ue));break;case 3:break}}return pe},O=e instanceof j?e:null,V=O==null?void 0:O._thinInstanceDataStorage.matrixData,N=(O==null?void 0:O.thinInstanceCount)||1,F=Q.Matrix[0];F.copyFrom(K.IdentityReadOnly);for(let Y=0;Y{Ge();xn();Di();Ui();lr();Qr();lse=new b(1,0,0),cse=new b(-1,0,0),fse=new b(0,1,0),hse=new b(0,-1,0),dse=new b(0,0,1),use=new b(0,0,-1),TA=class n{constructor(e=b.Zero(),t=b.Up(),i=Ne.Zero(),r=0,s=0,a=null,o=null,l=null,c=null){this.position=e,this.normal=t,this.uv=i,this.vertexIdx=r,this.vertexIdxForBones=s,this.localPositionOverride=a,this.localNormalOverride=o,this.matrixIndicesOverride=l,this.matrixWeightsOverride=c}clone(){var e,t,i,r;return new n(this.position.clone(),this.normal.clone(),this.uv.clone(),this.vertexIdx,this.vertexIdxForBones,(e=this.localPositionOverride)==null?void 0:e.slice(),(t=this.localNormalOverride)==null?void 0:t.slice(),(i=this.matrixIndicesOverride)==null?void 0:i.slice(),(r=this.matrixWeightsOverride)==null?void 0:r.slice())}};j.CreateDecal=(n,e,t,i,r,s)=>Vy(n,e,{position:t,normal:i,size:r,angle:s})});function uk(n={subdivisions:2,tessellation:16,height:1,radius:.25,capSubdivisions:6}){let e=Math.max(n.subdivisions?n.subdivisions:2,1)|0,t=Math.max(n.tessellation?n.tessellation:16,3)|0,i=Math.max(n.height?n.height:1,0),r=Math.max(n.radius?n.radius:.25,0),s=Math.max(n.capSubdivisions?n.capSubdivisions:6,1)|0,a=t,o=e,l=Math.max(n.radiusTop?n.radiusTop:r,0),c=Math.max(n.radiusBottom?n.radiusBottom:r,0),f=i-(l+c),h=0,d=2*Math.PI,u=Math.max(n.topCapSubdivisions?n.topCapSubdivisions:s,1),m=Math.max(n.bottomCapSubdivisions?n.bottomCapSubdivisions:s,1),_=Math.acos((c-l)/i),p=[],g=[],v=[],x=[],A=0,S=[],E=f*.5,R=Math.PI*.5,I,y,M=b.Zero(),D=b.Zero(),O=Math.cos(_),V=Math.sin(_),N=new Ne(l*V,E+l*O).subtract(new Ne(c*V,-E+c*O)).length(),F=l*_+N+c*(R-_),U=0;for(y=0;y<=u;y++){let Z=[],X=R-_*(y/u);U+=l*_/u;let Y=Math.cos(X),fe=Math.sin(X),xe=Y*l;for(I=0;I<=a;I++){let Fe=I/a,se=Fe*d+h,pe=Math.sin(se),ie=Math.cos(se);D.x=xe*pe,D.y=E+fe*l,D.z=xe*ie,g.push(D.x,D.y,D.z),M.set(Y*pe,fe,Y*ie),v.push(M.x,M.y,M.z),x.push(Fe,It?U/F:1-U/F),Z.push(A),A++}S.push(Z)}let W=i-l-c+O*l-O*c,$=V*(c-l)/W;for(y=1;y<=o;y++){let Z=[];U+=N/o;let X=V*(y*(c-l)/o+l);for(I=0;I<=a;I++){let Y=I/a,fe=Y*d+h,xe=Math.sin(fe),Fe=Math.cos(fe);D.x=X*xe,D.y=E+O*l-y*W/o,D.z=X*Fe,g.push(D.x,D.y,D.z),M.set(xe,$,Fe).normalize(),v.push(M.x,M.y,M.z),x.push(Y,It?U/F:1-U/F),Z.push(A),A++}S.push(Z)}for(y=1;y<=m;y++){let Z=[],X=R-_-(Math.PI-_)*(y/m);U+=c*_/m;let Y=Math.cos(X),fe=Math.sin(X),xe=Y*c;for(I=0;I<=a;I++){let Fe=I/a,se=Fe*d+h,pe=Math.sin(se),ie=Math.cos(se);D.x=xe*pe,D.y=-E+fe*c,D.z=xe*ie,g.push(D.x,D.y,D.z),M.set(Y*pe,fe,Y*ie),v.push(M.x,M.y,M.z),x.push(Fe,It?U/F:1-U/F),Z.push(A),A++}S.push(Z)}for(I=0;I{lr();Ge();Di();Qr();j.CreateCapsule=(n,e,t)=>Gy(n,e,t);Ie.CreateCapsule=uk});var Hi,pk=C(()=>{Pt();Ge();Hi=class n{constructor(e=0,t=0){this.x=e,this.y=t,e!==Math.floor(e)&&(e=Math.floor(e),J.Warn("x is not an integer, floor(x) used")),t!==Math.floor(t)&&(t=Math.floor(t),J.Warn("y is not an integer, floor(y) used"))}clone(){return new n(this.x,this.y)}rotate60About(e){let t=this.x;return this.x=e.x+e.y-this.y,this.y=t+this.y-e.x,this}rotateNeg60About(e){let t=this.x;return this.x=t+this.y-e.y,this.y=e.x+e.y-t,this}rotate120(e,t){e!==Math.floor(e)&&(e=Math.floor(e),J.Warn("m not an integer only floor(m) used")),t!==Math.floor(t)&&(t=Math.floor(t),J.Warn("n not an integer only floor(n) used"));let i=this.x;return this.x=e-i-this.y,this.y=t+i,this}rotateNeg120(e,t){e!==Math.floor(e)&&(e=Math.floor(e),J.Warn("m is not an integer, floor(m) used")),t!==Math.floor(t)&&(t=Math.floor(t),J.Warn("n is not an integer, floor(n) used"));let i=this.x;return this.x=this.y-t,this.y=e+t-i-this.y,this}toCartesianOrigin(e,t){let i=b.Zero();return i.x=e.x+2*this.x*t+this.y*t,i.y=e.y+Math.sqrt(3)*this.y*t,i}static Zero(){return new n(0,0)}}});var Mm,dg,Cm,ky=C(()=>{Ge();xn();An();pk();Mm=class{constructor(){this.cartesian=[],this.vertices=[],this.max=[],this.min=[],this.closestTo=[],this.innerFacets=[],this.isoVecsABOB=[],this.isoVecsOBOA=[],this.isoVecsBAOA=[],this.vertexTypes=[],this.IDATA=new dg("icosahedron","Regular",[[0,ur,-1],[-ur,1,0],[-1,0,-ur],[1,0,-ur],[ur,1,0],[0,ur,1],[-1,0,ur],[-ur,-1,0],[0,-ur,-1],[ur,-1,0],[1,0,ur],[0,-ur,1]],[[0,2,1],[0,3,2],[0,4,3],[0,5,4],[0,1,5],[7,6,1],[8,7,2],[9,8,3],[10,9,4],[6,10,5],[2,7,1],[3,8,2],[4,9,3],[5,10,4],[1,6,5],[11,6,7],[11,7,8],[11,8,9],[11,9,10],[11,10,6]])}setIndices(){let e=12,t={},i=this.m,r=this.n,s=i;r!==0&&(s=cT(i,r));let a=i/s,o=r/s,l,c,f,h,d,u=Hi.Zero(),m=new Hi(i,r),_=new Hi(-r,i+r),p=Hi.Zero(),g=Hi.Zero(),v=Hi.Zero(),x=[],A,S,E,R,I=[],y=this.vertByDist,M=(D,O,V,N)=>{A=D+"|"+V,S=O+"|"+N,A in t||S in t?A in t&&!(S in t)?t[S]=t[A]:S in t&&!(A in t)&&(t[A]=t[S]):(t[A]=e,t[S]=e,e++),y[V][0]>2?I[t[A]]=[-y[V][0],y[V][1],t[A]]:I[t[A]]=[x[y[V][0]],y[V][1],t[A]]};this.IDATA.edgematch=[[1,"B"],[2,"B"],[3,"B"],[4,"B"],[0,"B"],[10,"O",14,"A"],[11,"O",10,"A"],[12,"O",11,"A"],[13,"O",12,"A"],[14,"O",13,"A"],[0,"O"],[1,"O"],[2,"O"],[3,"O"],[4,"O"],[19,"B",5,"A"],[15,"B",6,"A"],[16,"B",7,"A"],[17,"B",8,"A"],[18,"B",9,"A"]];for(let D=0;D<20;D++){if(x=this.IDATA.face[D],f=x[2],h=x[1],d=x[0],E=u.x+"|"+u.y,A=D+"|"+E,A in t||(t[A]=f,I[f]=[x[y[E][0]],y[E][1]]),E=m.x+"|"+m.y,A=D+"|"+E,A in t||(t[A]=h,I[h]=[x[y[E][0]],y[E][1]]),E=_.x+"|"+_.y,A=D+"|"+E,A in t||(t[A]=d,I[d]=[x[y[E][0]],y[E][1]]),l=this.IDATA.edgematch[D][0],c=this.IDATA.edgematch[D][1],c==="B")for(let O=1;O2?I[t[A]]=[-y[E][0],y[E][1],t[A]]:I[t[A]]=[x[y[E][0]],y[E][1],t[A]])}this.closestTo=I,this.vecToidx=t}calcCoeffs(){let e=this.m,t=this.n,i=Math.sqrt(3)/3,r=e*e+t*t+e*t;this.coau=(e+t)/r,this.cobu=-t/r,this.coav=-i*(e-t)/r,this.cobv=i*(2*e+t)/r}createInnerFacets(){let e=this.m,t=this.n;for(let i=0;i0&&r0){let S=cT(e,t),E=e/S,R=t/S;for(let y=1;yS.x-E.x),i.sort((S,E)=>S.y-E.y);let o=new Array(e+t+1),l=new Array(e+t+1);for(let S=0;S{let R=S.clone();return E==="A"&&R.rotateNeg120(e,t),E==="B"&&R.rotate120(e,t),R.x<0?R.y:R.x+R.y},u=[],m=[],_=[],p=[],g={},v=[],x=-1,A=-1;for(let S=0;SS[2]-E[2]),v.sort((S,E)=>S[3]-E[3]),v.sort((S,E)=>S[1]-E[1]),v.sort((S,E)=>S[0]-E[0]);for(let S=0;St.vecToidx[e+r]))}mapABOBtoDATA(e,t){let i=t.IDATA.edgematch[e][0];for(let r=0;r-1?i[a][1]>0&&t[i[a][0]].push([a,i[a][1]]):t[12].push([a,i[a][0]]);let r=[];for(let a=0;a<12;a++)r[a]=a;let s=12;for(let a=0;a<12;a++){t[a].sort((o,l)=>o[1]-l[1]);for(let o=0;oa[3]-o[3]);for(let a=0;a0;)s=t[l],this.face[s].indexOf(o)>-1?(a=(this.face[s].indexOf(o)+1)%3,o=this.face[s][a],i.push(o),r.push(s),t.splice(l,1),l=0):l++;return this.adjacentFaces.push(i),r}toGoldbergPolyhedronData(){let e=new dg("GeoDual","Goldberg",[],[]);e.name="GD dual";let t=this.vertex.length,i=new Array(t);for(let c=0;ci){let c=r;r=i,i=c,J.Warn("n > m therefore m and n swapped")}let s=new Mm;s.build(i,r);let o={custom:Cm.BuildGeodesicData(s),size:e.size,sizeX:e.sizeX,sizeY:e.sizeY,sizeZ:e.sizeZ,faceUV:e.faceUV,faceColors:e.faceColors,flat:e.flat,updatable:e.updatable,sideOrientation:e.sideOrientation,frontUVs:e.frontUVs,backUVs:e.backUVs};return hg(n,o,t)}var gk=C(()=>{By();Pt();ky()});var ug,vk=C(()=>{Ge();Ui();Di();zt();Pt();j._GoldbergMeshParser=(n,e)=>ug.Parse(n,e);ug=class n extends j{constructor(){super(...arguments),this.goldbergData={faceColors:[],faceCenters:[],faceZaxis:[],faceXaxis:[],faceYaxis:[],nbSharedFaces:0,nbUnsharedFaces:0,nbFaces:0,nbFacesAtPole:0,adjacentFaces:[]}}relatedGoldbergFace(e,t){return t===void 0?(e>this.goldbergData.nbUnsharedFaces-1&&(J.Warn("Maximum number of unshared faces used"),e=this.goldbergData.nbUnsharedFaces-1),this.goldbergData.nbUnsharedFaces+e):(e>11&&(J.Warn("Last pole used"),e=11),t>this.goldbergData.nbFacesAtPole-1&&(J.Warn("Maximum number of faces at a pole used"),t=this.goldbergData.nbFacesAtPole-1),12+e*this.goldbergData.nbFacesAtPole+t)}_changeGoldbergFaceColors(e){for(let i=0;i1&&(h=1),c.push(h,d);for(let u=0;u<6;u++)h=a.x+o*Math.cos(l+u*Math.PI/3),d=a.y+o*Math.sin(l+u*Math.PI/3),h<0&&(h=0),h>1&&(h=1),f.push(h,d);for(let u=r;ult.FromArray(s)),i.faceCenters=i.faceCenters.map(s=>b.FromArray(s)),i.faceZaxis=i.faceZaxis.map(s=>b.FromArray(s)),i.faceXaxis=i.faceXaxis.map(s=>b.FromArray(s)),i.faceYaxis=i.faceYaxis.map(s=>b.FromArray(s));let r=new n(e.name,t);return r.goldbergData=i,r}}});function mse(n,e){let t=n.size,i=n.sizeX||t||1,r=n.sizeY||t||1,s=n.sizeZ||t||1,a=n.sideOrientation===0?0:n.sideOrientation||Ie.DEFAULTSIDE,o=[],l=[],c=[],f=[],h=1/0,d=-1/0,u=1/0,m=-1/0;for(let g=0;go){let m=l;l=o,o=m,J.Warn("n > m therefore m and n swapped")}let c=new Mm;c.build(o,l);let f=Cm.BuildGeodesicData(c),h=f.toGoldbergPolyhedronData(),d=new ug(n,t);e.sideOrientation=j._GetDefaultSideOrientation(e.sideOrientation),d._originalBuilderSideOrientation=e.sideOrientation,mse(e,h).applyToMesh(d,e.updatable),d.goldbergData.nbSharedFaces=f.sharedNodes,d.goldbergData.nbUnsharedFaces=f.poleNodes,d.goldbergData.adjacentFaces=f.adjacentFaces,d.goldbergData.nbFaces=d.goldbergData.nbSharedFaces+d.goldbergData.nbUnsharedFaces,d.goldbergData.nbFacesAtPole=(d.goldbergData.nbUnsharedFaces-12)/12;for(let m=0;m{Ge();zt();Di();lr();Pt();ky();vk();Qr()});function pse(n,e,t,i,r,s){let a=s.glyphs[n]||s.glyphs["?"];if(!a)return null;let o=new Wy(r);if(a.o){let l=a.o.split(" ");for(let c=0,f=l.length;c{Ch();Ge();Di();kh();Dy();Wy=class{constructor(e){this._paths=[],this._tempPaths=[],this._holes=[],this._resolution=e}moveTo(e,t){this._currentPath=new Bu(e,t),this._tempPaths.push(this._currentPath)}lineTo(e,t){this._currentPath.addLineTo(e,t)}quadraticCurveTo(e,t,i,r){this._currentPath.addQuadraticCurveTo(e,t,i,r,this._resolution)}bezierCurveTo(e,t,i,r,s,a){this._currentPath.addBezierCurveTo(e,t,i,r,s,a,this._resolution)}extractHoles(){for(let e of this._tempPaths)e.area()>0?this._holes.push(e):this._paths.push(e);if(!this._paths.length&&this._holes.length){let e=this._holes;this._holes=this._paths,this._paths=e}this._tempPaths.length=0}get paths(){return this._paths}get holes(){return this._holes}}});var pc,Hy=C(()=>{Z_();YV();dy();JV();tG();rG();sG();oG();ek();Dy();nk();sk();ok();uy();fy();lk();By();hk();dk();mk();gk();Sk();Ak();pc={CreateBox:hy,CreateTiledBox:$V,CreateSphere:py,CreateDisc:sy,CreateIcoSphere:Uy,CreateRibbon:uo,CreateCylinder:_y,CreateTorus:gy,CreateTorusKnot:vy,CreateLineSystem:My,CreateLines:Cy,CreateDashedLines:yy,ExtrudeShape:Ly,ExtrudeShapeCustom:Oy,CreateLathe:Ny,CreateTiledPlane:ZV,CreatePlane:wy,CreateGround:oy,CreateTiledGround:ly,CreateGroundFromHeightMap:cy,CreatePolygon:SA,ExtrudePolygon:fg,CreateTube:Fy,CreatePolyhedron:hg,CreateGeodesic:_k,CreateGoldberg:Ek,CreateDecal:Vy,CreateCapsule:Gy,CreateText:Tk}});var Ts,AA=C(()=>{Ts=class{constructor(){this.previousWorldMatrices={},this.previousBones={}}static AddUniforms(e){e.push("previousWorld","previousViewProjection","mPreviousBones")}static AddSamplers(e){}bindForSubMesh(e,t,i,r,s){if(t.prePassRenderer&&t.prePassRenderer.enabled&&t.prePassRenderer.currentRTisSceneRT&&(t.prePassRenderer.getIndex(2)!==-1||t.prePassRenderer.getIndex(11)!==-1)){this.previousWorldMatrices[i.uniqueId]||(this.previousWorldMatrices[i.uniqueId]=r.clone()),this.previousViewProjection||(this.previousViewProjection=t.getTransformMatrix().clone(),this.currentViewProjection=t.getTransformMatrix().clone());let a=t.getEngine();this.currentViewProjection.updateFlag!==t.getTransformMatrix().updateFlag?(this._lastUpdateFrameId=a.frameId,this.previousViewProjection.copyFrom(this.currentViewProjection),this.currentViewProjection.copyFrom(t.getTransformMatrix())):this._lastUpdateFrameId!==a.frameId&&(this._lastUpdateFrameId=a.frameId,this.previousViewProjection.copyFrom(this.currentViewProjection)),e.setMatrix("previousWorld",this.previousWorldMatrices[i.uniqueId]),e.setMatrix("previousViewProjection",this.previousViewProjection),this.previousWorldMatrices[i.uniqueId]=r.clone()}}}});var Sr,ya=C(()=>{Sr=class{constructor(e){if(this.VERTEXOUTPUT_INVARIANT=!1,this._keys=[],this._isDirty=!0,this._areLightsDirty=!0,this._areLightsDisposed=!1,this._areAttributesDirty=!0,this._areTexturesDirty=!0,this._areFresnelDirty=!0,this._areMiscDirty=!0,this._arePrePassDirty=!0,this._areImageProcessingDirty=!0,this._normals=!1,this._uvs=!1,this._needNormals=!1,this._needUVs=!1,this._externalProperties=e,e)for(let t in e)Object.prototype.hasOwnProperty.call(e,t)&&this._setDefaultValue(t)}get isDirty(){return this._isDirty}markAsProcessed(){this._isDirty=!1,this._areAttributesDirty=!1,this._areTexturesDirty=!1,this._areFresnelDirty=!1,this._areLightsDirty=!1,this._areLightsDisposed=!1,this._areMiscDirty=!1,this._arePrePassDirty=!1,this._areImageProcessingDirty=!1}markAsUnprocessed(){this._isDirty=!0}markAllAsDirty(){this._areTexturesDirty=!0,this._areAttributesDirty=!0,this._areLightsDirty=!0,this._areFresnelDirty=!0,this._areMiscDirty=!0,this._arePrePassDirty=!0,this._areImageProcessingDirty=!0,this._isDirty=!0}markAsImageProcessingDirty(){this._areImageProcessingDirty=!0,this._isDirty=!0}markAsLightDirty(e=!1){this._areLightsDirty=!0,this._areLightsDisposed=this._areLightsDisposed||e,this._isDirty=!0}markAsAttributesDirty(){this._areAttributesDirty=!0,this._isDirty=!0}markAsTexturesDirty(){this._areTexturesDirty=!0,this._isDirty=!0}markAsFresnelDirty(){this._areFresnelDirty=!0,this._isDirty=!0}markAsMiscDirty(){this._areMiscDirty=!0,this._isDirty=!0}markAsPrePassDirty(){this._arePrePassDirty=!0,this._isDirty=!0}rebuild(){this._keys.length=0;for(let e of Object.keys(this))e[0]!=="_"&&this._keys.push(e);if(this._externalProperties)for(let e in this._externalProperties)this._keys.indexOf(e)===-1&&this._keys.push(e)}isEqual(e){if(this._keys.length!==e._keys.length)return!1;for(let t=0;t{ba()});function Jne(){Zne.length=0,Qne=!1,ve.OnEventObservable.remove(dk),dk=null}var qne,Im,Zne,Qne,dk,uk=C(()=>{Pn();Pi();VS();k();qne=new RegExp("^([gimus]+)!"),Im=class n{constructor(e){this._plugins=[],this._activePlugins=[],this._activePluginsForExtraEvents=[],this._material=e,this._scene=e.getScene(),this._engine=this._scene.getEngine()}_addPlugin(e){for(let r=0;rthis._handlePluginEvent(r,s),this._plugins.push(e),this._plugins.sort((r,s)=>r.priority-s.priority),this._codeInjectionPoints={};let i={};i[n._MaterialPluginClassToMainDefine[t]]={type:"boolean",default:!0};for(let r of this._plugins)r.collectDefines(i),this._collectPointNames("vertex",r.getCustomCode("vertex",this._material.shaderLanguage)),this._collectPointNames("fragment",r.getCustomCode("fragment",this._material.shaderLanguage));return this._defineNamesFromPlugins=i,!0}_activatePlugin(e){this._activePlugins.indexOf(e)===-1&&(this._activePlugins.push(e),this._activePlugins.sort((t,i)=>t.priority-i.priority),this._material._callbackPluginEventIsReadyForSubMesh=this._handlePluginEventIsReadyForSubMesh.bind(this),this._material._callbackPluginEventPrepareDefinesBeforeAttributes=this._handlePluginEventPrepareDefinesBeforeAttributes.bind(this),this._material._callbackPluginEventPrepareDefines=this._handlePluginEventPrepareDefines.bind(this),this._material._callbackPluginEventBindForSubMesh=this._handlePluginEventBindForSubMesh.bind(this),e.registerForExtraEvents&&(this._activePluginsForExtraEvents.push(e),this._activePluginsForExtraEvents.sort((t,i)=>t.priority-i.priority),this._material._callbackPluginEventHasRenderTargetTextures=this._handlePluginEventHasRenderTargetTextures.bind(this),this._material._callbackPluginEventFillRenderTargetTextures=this._handlePluginEventFillRenderTargetTextures.bind(this),this._material._callbackPluginEventHardBindForSubMesh=this._handlePluginEventHardBindForSubMesh.bind(this)))}getPlugin(e){for(let t=0;t0&&r.uniforms.push(...this._uniformList),this._samplerList.length>0&&r.samplers.push(...this._samplerList),this._uboList.length>0&&r.uniformBuffersNames.push(...this._uboList),r.customCode=this._injectCustomCode(r,r.customCode);break}case 8:{let r=t;this._uboDeclaration="",this._vertexDeclaration="",this._fragmentDeclaration="",this._uniformList=[],this._samplerList=[],this._uboList=[];let s=this._material.shaderLanguage===1;for(let a of this._plugins){let o=a.getUniforms(this._material.shaderLanguage);if(o){if(o.ubo)for(let l of o.ubo){if(l.size&&l.type){let c=(i=l.arraySize)!=null?i:0;if(r.ubo.addUniform(l.name,l.size,c),s){let f;switch(l.type){case"mat4":f="mat4x4f";break;case"float":f="f32";break;default:f=`${l.type}f`;break}c>0?this._uboDeclaration+=`uniform ${l.name}: array<${f}, ${c}>; +`);break}}return e}}});function ym(n){return class extends n{constructor(){super(...arguments),this.IMAGEPROCESSING=!1,this.VIGNETTE=!1,this.VIGNETTEBLENDMODEMULTIPLY=!1,this.VIGNETTEBLENDMODEOPAQUE=!1,this.TONEMAPPING=0,this.CONTRAST=!1,this.COLORCURVES=!1,this.COLORGRADING=!1,this.COLORGRADING3D=!1,this.SAMPLER3DGREENDEPTH=!1,this.SAMPLER3DBGRMAP=!1,this.DITHER=!1,this.IMAGEPROCESSINGPOSTPROCESS=!1,this.SKIPFINALCOLORCLAMP=!1,this.EXPOSURE=!1}}}var xA=C(()=>{ya()});function Sse(){vse.length=0,Ese=!1,ve.OnEventObservable.remove(xk),xk=null}var gse,Pm,vse,Ese,xk,Rk=C(()=>{Pn();Pi();qS();G();gse=new RegExp("^([gimus]+)!"),Pm=class n{constructor(e){this._plugins=[],this._activePlugins=[],this._activePluginsForExtraEvents=[],this._material=e,this._scene=e.getScene(),this._engine=this._scene.getEngine()}_addPlugin(e){for(let r=0;rthis._handlePluginEvent(r,s),this._plugins.push(e),this._plugins.sort((r,s)=>r.priority-s.priority),this._codeInjectionPoints={};let i={};i[n._MaterialPluginClassToMainDefine[t]]={type:"boolean",default:!0};for(let r of this._plugins)r.collectDefines(i),this._collectPointNames("vertex",r.getCustomCode("vertex",this._material.shaderLanguage)),this._collectPointNames("fragment",r.getCustomCode("fragment",this._material.shaderLanguage));return this._defineNamesFromPlugins=i,!0}_activatePlugin(e){this._activePlugins.indexOf(e)===-1&&(this._activePlugins.push(e),this._activePlugins.sort((t,i)=>t.priority-i.priority),this._material._callbackPluginEventIsReadyForSubMesh=this._handlePluginEventIsReadyForSubMesh.bind(this),this._material._callbackPluginEventPrepareDefinesBeforeAttributes=this._handlePluginEventPrepareDefinesBeforeAttributes.bind(this),this._material._callbackPluginEventPrepareDefines=this._handlePluginEventPrepareDefines.bind(this),this._material._callbackPluginEventBindForSubMesh=this._handlePluginEventBindForSubMesh.bind(this),e.registerForExtraEvents&&(this._activePluginsForExtraEvents.push(e),this._activePluginsForExtraEvents.sort((t,i)=>t.priority-i.priority),this._material._callbackPluginEventHasRenderTargetTextures=this._handlePluginEventHasRenderTargetTextures.bind(this),this._material._callbackPluginEventFillRenderTargetTextures=this._handlePluginEventFillRenderTargetTextures.bind(this),this._material._callbackPluginEventHardBindForSubMesh=this._handlePluginEventHardBindForSubMesh.bind(this)))}getPlugin(e){for(let t=0;t0&&r.uniforms.push(...this._uniformList),this._samplerList.length>0&&r.samplers.push(...this._samplerList),this._uboList.length>0&&r.uniformBuffersNames.push(...this._uboList),r.customCode=this._injectCustomCode(r,r.customCode);break}case 8:{let r=t;this._uboDeclaration="",this._vertexDeclaration="",this._fragmentDeclaration="",this._uniformList=[],this._samplerList=[],this._uboList=[];let s=this._material.shaderLanguage===1;for(let a of this._plugins){let o=a.getUniforms(this._material.shaderLanguage);if(o){if(o.ubo)for(let l of o.ubo){if(l.size&&l.type){let c=(i=l.arraySize)!=null?i:0;if(r.ubo.addUniform(l.name,l.size,c),s){let f;switch(l.type){case"mat4":f="mat4x4f";break;case"float":f="f32";break;default:f=`${l.type}f`;break}c>0?this._uboDeclaration+=`uniform ${l.name}: array<${f}, ${c}>; `:this._uboDeclaration+=`uniform ${l.name}: ${f}; `}else this._uboDeclaration+=`${l.type} ${l.name}${c>0?`[${c}]`:""}; `}this._uniformList.push(l.name)}o.vertex&&(this._vertexDeclaration+=o.vertex+` `),o.fragment&&(this._fragmentDeclaration+=o.fragment+` -`),o.externalUniforms&&this._uniformList.push(...o.externalUniforms)}a.getSamplers(this._samplerList),a.getUniformBuffersNames(this._uboList)}break}}}_collectPointNames(e,t){if(t)for(let i in t)this._codeInjectionPoints[e]||(this._codeInjectionPoints[e]={}),this._codeInjectionPoints[e][i]=!0}_injectCustomCode(e,t){return(i,r)=>{var o,l;t&&(r=t(i,r)),this._uboDeclaration&&(r=r.replace("#define ADDITIONAL_UBO_DECLARATION",this._uboDeclaration)),this._vertexDeclaration&&(r=r.replace("#define ADDITIONAL_VERTEX_DECLARATION",this._vertexDeclaration)),this._fragmentDeclaration&&(r=r.replace("#define ADDITIONAL_FRAGMENT_DECLARATION",this._fragmentDeclaration));let s=(o=this._codeInjectionPoints)==null?void 0:o[i];if(!s)return r;let a=null;for(let c in s){let f="";for(let h of this._activePlugins){let d=this._material.shaderLanguage,u=(l=h.getCustomCode(i,d))==null?void 0:l[c];u&&(h.resolveIncludes&&(a===null&&(a={defines:[],indexParameters:e.indexParameters,isFragment:!1,shouldUseHighPrecisionShader:this._engine._shouldUseHighPrecisionShader,processor:void 0,supportsUniformBuffers:this._engine.supportsUniformBuffers,shadersRepository:S.GetShadersRepository(d),includesShadersStore:S.GetIncludesShadersStore(d),version:void 0,platformName:this._engine.shaderPlatformName,processingContext:void 0,isNDCHalfZRange:this._engine.isNDCHalfZRange,useReverseDepthBuffer:this._engine.useReverseDepthBuffer,processCodeAfterIncludes:void 0}),a.isFragment=i==="fragment",s_(u,a,m=>u=m)),f+=u+` -`)}if(f.length>0)if(c.charAt(0)==="!"){c=c.substring(1);let h="g";if(c.charAt(0)==="!")h="",c=c.substring(1);else{let _=qne.exec(c);_&&_.length>=2&&(h=_[1],c=c.substring(h.length+1))}h.indexOf("g")<0&&(h+="g");let d=r,u=new RegExp(c,h),m=u.exec(d);for(;m!==null;){let _=f;for(let p=0;p{var o,l;t&&(r=t(i,r)),this._uboDeclaration&&(r=r.replace("#define ADDITIONAL_UBO_DECLARATION",this._uboDeclaration)),this._vertexDeclaration&&(r=r.replace("#define ADDITIONAL_VERTEX_DECLARATION",this._vertexDeclaration)),this._fragmentDeclaration&&(r=r.replace("#define ADDITIONAL_FRAGMENT_DECLARATION",this._fragmentDeclaration));let s=(o=this._codeInjectionPoints)==null?void 0:o[i];if(!s)return r;let a=null;for(let c in s){let f="";for(let h of this._activePlugins){let d=this._material.shaderLanguage,u=(l=h.getCustomCode(i,d))==null?void 0:l[c];u&&(h.resolveIncludes&&(a===null&&(a={defines:[],indexParameters:e.indexParameters,isFragment:!1,shouldUseHighPrecisionShader:this._engine._shouldUseHighPrecisionShader,processor:void 0,supportsUniformBuffers:this._engine.supportsUniformBuffers,shadersRepository:T.GetShadersRepository(d),includesShadersStore:T.GetIncludesShadersStore(d),version:void 0,platformName:this._engine.shaderPlatformName,processingContext:void 0,isNDCHalfZRange:this._engine.isNDCHalfZRange,useReverseDepthBuffer:this._engine.useReverseDepthBuffer,processCodeAfterIncludes:void 0}),a.isFragment=i==="fragment",u_(u,a,m=>u=m)),f+=u+` +`)}if(f.length>0)if(c.charAt(0)==="!"){c=c.substring(1);let h="g";if(c.charAt(0)==="!")h="",c=c.substring(1);else{let _=gse.exec(c);_&&_.length>=2&&(h=_[1],c=c.substring(h.length+1))}h.indexOf("g")<0&&(h+="g");let d=r,u=new RegExp(c,h),m=u.exec(d);for(;m!==null;){let _=f;for(let p=0;p{Jne()});Zne=[],Qne=!1,dk=null});var Fr,If=C(()=>{kt();Ut();uk();_r();Vi();Fr=class{isCompatible(e){switch(e){case 0:return!0;default:return!1}}_enable(e){e&&this._pluginManager._activatePlugin(this)}constructor(e,t,i,r,s=!0,a=!1,o=!1){this.priority=500,this.resolveIncludes=!1,this.registerForExtraEvents=!1,this.doNotSerialize=!1,this._material=e,this.name=t,this.priority=i,this.resolveIncludes=o,e.pluginManager||(e.pluginManager=new Im(e),e.onDisposeObservable.add(()=>{e.pluginManager=void 0})),this._pluginDefineNames=r,this._pluginManager=e.pluginManager,s&&this._pluginManager._addPlugin(this),a&&this._enable(!0),this.markAllDefinesAsDirty=e._dirtyCallbacks[127]}getClassName(){return"MaterialPluginBase"}isReadyForSubMesh(e,t,i,r){return!0}hardBindForSubMesh(e,t,i,r){}bindForSubMesh(e,t,i,r){}dispose(e){}getCustomCode(e,t=0){return null}collectDefines(e){if(this._pluginDefineNames)for(let t of Object.keys(this._pluginDefineNames)){if(t[0]==="_")continue;let i=typeof this._pluginDefineNames[t];e[t]={type:i==="number"?"number":i==="string"?"string":i==="boolean"?"boolean":"object",default:this._pluginDefineNames[t]}}}prepareDefinesBeforeAttributes(e,t,i){}prepareDefines(e,t,i){}hasTexture(e){return!1}hasRenderTargetTextures(){return!1}fillRenderTargetTextures(e){}getActiveTextures(e){}getAnimatables(e){}addFallbacks(e,t,i){return i}getSamplers(e){}getAttributes(e,t,i){}getUniformBuffersNames(e){}getUniforms(e=0){return{}}copyTo(e){tt.Clone(()=>e,this)}serialize(){return tt.Serialize(this)}parse(e,t,i){tt.Parse(()=>this,e,t,i)}};P([F()],Fr.prototype,"name",void 0);P([F()],Fr.prototype,"priority",void 0);P([F()],Fr.prototype,"resolveIncludes",void 0);P([F()],Fr.prototype,"registerForExtraEvents",void 0);wt("BABYLON.MaterialPluginBase",Fr)});var Ny,Ia,Fy=C(()=>{kt();Pn();Ut();xa();ba();If();yn();Ny=class extends vr{constructor(){super(...arguments),this.DETAIL=!1,this.DETAILDIRECTUV=0,this.DETAIL_NORMALBLENDMETHOD=0}},Ia=class extends Fr{_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"DetailMap",140,new Ny,t),this._texture=null,this.diffuseBlendLevel=1,this.roughnessBlendLevel=1,this.bumpLevel=1,this._normalBlendMethod=ve.MATERIAL_NORMALBLENDMETHOD_WHITEOUT,this._isEnabled=!1,this.isEnabled=!1,this._internalMarkAllSubMeshesAsTexturesDirty=e._dirtyCallbacks[1]}isReadyForSubMesh(e,t,i){return this._isEnabled?!(e._areTexturesDirty&&t.texturesEnabled&&i.getCaps().standardDerivatives&&this._texture&&le.DetailTextureEnabled&&!this._texture.isReady()):!0}prepareDefines(e,t){if(this._isEnabled){e.DETAIL_NORMALBLENDMETHOD=this._normalBlendMethod;let i=t.getEngine();e._areTexturesDirty&&(i.getCaps().standardDerivatives&&this._texture&&le.DetailTextureEnabled&&this._isEnabled?(ri(this._texture,e,"DETAIL"),e.DETAIL_NORMALBLENDMETHOD=this._normalBlendMethod):e.DETAIL=!1)}else e.DETAIL=!1}bindForSubMesh(e,t){if(!this._isEnabled)return;let i=this._material.isFrozen;(!e.useUbo||!i||!e.isSync)&&this._texture&&le.DetailTextureEnabled&&(e.updateFloat4("vDetailInfos",this._texture.coordinatesIndex,this.diffuseBlendLevel,this.bumpLevel,this.roughnessBlendLevel),ni(this._texture,e,"detail")),t.texturesEnabled&&this._texture&&le.DetailTextureEnabled&&e.setTexture("detailSampler",this._texture)}hasTexture(e){return this._texture===e}getActiveTextures(e){this._texture&&e.push(this._texture)}getAnimatables(e){this._texture&&this._texture.animations&&this._texture.animations.length>0&&e.push(this._texture)}dispose(e){var t;e&&((t=this._texture)==null||t.dispose())}getClassName(){return"DetailMapConfiguration"}getSamplers(e){e.push("detailSampler")}getUniforms(){return{ubo:[{name:"vDetailInfos",size:4,type:"vec4"},{name:"detailMatrix",size:16,type:"mat4"}]}}};P([Bt("detailTexture"),oe("_markAllSubMeshesAsTexturesDirty")],Ia.prototype,"texture",void 0);P([F()],Ia.prototype,"diffuseBlendLevel",void 0);P([F()],Ia.prototype,"roughnessBlendLevel",void 0);P([F()],Ia.prototype,"bumpLevel",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Ia.prototype,"normalBlendMethod",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Ia.prototype,"isEnabled",void 0)});var mk,Nn,mA=C(()=>{Ve();(function(n){n[n.Zero=0]="Zero",n[n.One=1]="One",n[n.MaxViewZ=2]="MaxViewZ",n[n.NoClear=3]="NoClear"})(mk||(mk={}));Nn=class n{static CreateConfiguration(e){return n._Configurations[e]={defines:{},previousWorldMatrices:{},previousViewProjection:K.Zero(),currentViewProjection:K.Zero(),previousBones:{},lastUpdateFrameId:-1,excludedSkinnedMesh:[],reverseCulling:!1},n._Configurations[e]}static DeleteConfiguration(e){delete n._Configurations[e]}static GetConfiguration(e){return n._Configurations[e]}static AddUniformsAndSamplers(e,t){e.push("previousWorld","previousViewProjection","mPreviousBones")}static MarkAsDirty(e,t){for(let i of t)if(i.subMeshes)for(let r of i.subMeshes)r._removeDrawWrapper(e)}static PrepareDefines(e,t,i){if(!i._arePrePassDirty)return;let r=n._Configurations[e];if(!r)return;i.PREPASS=!0;let s=0;for(let a=0;a{});function Cm(n){return class extends n{constructor(){super(...arguments),this.PREPASS=!1,this.PREPASS_COLOR=!1,this.PREPASS_COLOR_INDEX=-1,this.PREPASS_IRRADIANCE_LEGACY=!1,this.PREPASS_IRRADIANCE_LEGACY_INDEX=-1,this.PREPASS_IRRADIANCE=!1,this.PREPASS_IRRADIANCE_INDEX=-1,this.PREPASS_ALBEDO=!1,this.PREPASS_ALBEDO_INDEX=-1,this.PREPASS_ALBEDO_SQRT=!1,this.PREPASS_ALBEDO_SQRT_INDEX=-1,this.PREPASS_DEPTH=!1,this.PREPASS_DEPTH_INDEX=-1,this.PREPASS_SCREENSPACE_DEPTH=!1,this.PREPASS_SCREENSPACE_DEPTH_INDEX=-1,this.PREPASS_NORMALIZED_VIEW_DEPTH=!1,this.PREPASS_NORMALIZED_VIEW_DEPTH_INDEX=-1,this.PREPASS_NORMAL=!1,this.PREPASS_NORMAL_INDEX=-1,this.PREPASS_NORMAL_WORLDSPACE=!1,this.PREPASS_WORLD_NORMAL=!1,this.PREPASS_WORLD_NORMAL_INDEX=-1,this.PREPASS_POSITION=!1,this.PREPASS_POSITION_INDEX=-1,this.PREPASS_LOCAL_POSITION=!1,this.PREPASS_LOCAL_POSITION_INDEX=-1,this.PREPASS_VELOCITY=!1,this.PREPASS_VELOCITY_INDEX=-1,this.PREPASS_VELOCITY_LINEAR=!1,this.PREPASS_VELOCITY_LINEAR_INDEX=-1,this.PREPASS_REFLECTIVITY=!1,this.PREPASS_REFLECTIVITY_INDEX=-1,this.SCENE_MRT_COUNT=0}}}var _A=C(()=>{});function ym(n){return class extends n{constructor(...e){super(...e),C3()(this,"_imageProcessingConfiguration")}get imageProcessingConfiguration(){return this._imageProcessingConfiguration}set imageProcessingConfiguration(e){this._attachImageProcessingConfiguration(e),this._markAllSubMeshesAsImageProcessingDirty&&this._markAllSubMeshesAsImageProcessingDirty()}_attachImageProcessingConfiguration(e){e!==this._imageProcessingConfiguration&&(this._imageProcessingConfiguration&&this._imageProcessingObserver&&this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver),!e&&this.getScene?this._imageProcessingConfiguration=this.getScene().imageProcessingConfiguration:e&&(this._imageProcessingConfiguration=e),this._imageProcessingConfiguration&&(this._imageProcessingObserver=this._imageProcessingConfiguration.onUpdateParameters.add(()=>{this._markAllSubMeshesAsImageProcessingDirty&&this._markAllSubMeshesAsImageProcessingDirty()})))}get cameraColorCurvesEnabled(){return this.imageProcessingConfiguration.colorCurvesEnabled}set cameraColorCurvesEnabled(e){this.imageProcessingConfiguration.colorCurvesEnabled=e}get cameraColorGradingEnabled(){return this.imageProcessingConfiguration.colorGradingEnabled}set cameraColorGradingEnabled(e){this.imageProcessingConfiguration.colorGradingEnabled=e}get cameraToneMappingEnabled(){return this._imageProcessingConfiguration.toneMappingEnabled}set cameraToneMappingEnabled(e){this._imageProcessingConfiguration.toneMappingEnabled=e}get cameraExposure(){return this._imageProcessingConfiguration.exposure}set cameraExposure(e){this._imageProcessingConfiguration.exposure=e}get cameraContrast(){return this._imageProcessingConfiguration.contrast}set cameraContrast(e){this._imageProcessingConfiguration.contrast=e}get cameraColorGradingTexture(){return this._imageProcessingConfiguration.colorGradingTexture}set cameraColorGradingTexture(e){this._imageProcessingConfiguration.colorGradingTexture=e}get cameraColorCurves(){return this._imageProcessingConfiguration.colorCurves}set cameraColorCurves(e){this._imageProcessingConfiguration.colorCurves=e}}}var gA=C(()=>{Ut()});var pk,$ne,Xh=C(()=>{k();pk="sceneUboDeclaration",$ne=`struct Scene {viewProjection : mat4x4, +`+h)}}return r}}};Pm._MaterialPluginClassToMainDefine={};Pm._MaterialPluginCounter=0;Le.OnEnginesDisposedObservable.add(()=>{Sse()});vse=[],Ese=!1,xk=null});var wr,yf=C(()=>{kt();Ut();Rk();Er();Vi();wr=class{isCompatible(e){switch(e){case 0:return!0;default:return!1}}_enable(e){e&&this._pluginManager._activatePlugin(this)}constructor(e,t,i,r,s=!0,a=!1,o=!1){this.priority=500,this.resolveIncludes=!1,this.registerForExtraEvents=!1,this.doNotSerialize=!1,this._material=e,this.name=t,this.priority=i,this.resolveIncludes=o,e.pluginManager||(e.pluginManager=new Pm(e),e.onDisposeObservable.add(()=>{e.pluginManager=void 0})),this._pluginDefineNames=r,this._pluginManager=e.pluginManager,s&&this._pluginManager._addPlugin(this),a&&this._enable(!0),this.markAllDefinesAsDirty=e._dirtyCallbacks[127]}getClassName(){return"MaterialPluginBase"}isReadyForSubMesh(e,t,i,r){return!0}hardBindForSubMesh(e,t,i,r){}bindForSubMesh(e,t,i,r){}dispose(e){}getCustomCode(e,t=0){return null}collectDefines(e){if(this._pluginDefineNames)for(let t of Object.keys(this._pluginDefineNames)){if(t[0]==="_")continue;let i=typeof this._pluginDefineNames[t];e[t]={type:i==="number"?"number":i==="string"?"string":i==="boolean"?"boolean":"object",default:this._pluginDefineNames[t]}}}prepareDefinesBeforeAttributes(e,t,i){}prepareDefines(e,t,i){}hasTexture(e){return!1}hasRenderTargetTextures(){return!1}fillRenderTargetTextures(e){}getActiveTextures(e){}getAnimatables(e){}addFallbacks(e,t,i){return i}getSamplers(e){}getAttributes(e,t,i){}getUniformBuffersNames(e){}getUniforms(e=0){return{}}copyTo(e){tt.Clone(()=>e,this)}serialize(){return tt.Serialize(this)}parse(e,t,i){tt.Parse(()=>this,e,t,i)}};P([w()],wr.prototype,"name",void 0);P([w()],wr.prototype,"priority",void 0);P([w()],wr.prototype,"resolveIncludes",void 0);P([w()],wr.prototype,"registerForExtraEvents",void 0);Ft("BABYLON.MaterialPluginBase",wr)});var zy,Pa,Xy=C(()=>{kt();Pn();Ut();Ma();ya();yf();yn();zy=class extends Sr{constructor(){super(...arguments),this.DETAIL=!1,this.DETAILDIRECTUV=0,this.DETAIL_NORMALBLENDMETHOD=0}},Pa=class extends wr{_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"DetailMap",140,new zy,t),this._texture=null,this.diffuseBlendLevel=1,this.roughnessBlendLevel=1,this.bumpLevel=1,this._normalBlendMethod=ve.MATERIAL_NORMALBLENDMETHOD_WHITEOUT,this._isEnabled=!1,this.isEnabled=!1,this._internalMarkAllSubMeshesAsTexturesDirty=e._dirtyCallbacks[1]}isReadyForSubMesh(e,t,i){return this._isEnabled?!(e._areTexturesDirty&&t.texturesEnabled&&i.getCaps().standardDerivatives&&this._texture&&le.DetailTextureEnabled&&!this._texture.isReady()):!0}prepareDefines(e,t){if(this._isEnabled){e.DETAIL_NORMALBLENDMETHOD=this._normalBlendMethod;let i=t.getEngine();e._areTexturesDirty&&(i.getCaps().standardDerivatives&&this._texture&&le.DetailTextureEnabled&&this._isEnabled?(ri(this._texture,e,"DETAIL"),e.DETAIL_NORMALBLENDMETHOD=this._normalBlendMethod):e.DETAIL=!1)}else e.DETAIL=!1}bindForSubMesh(e,t){if(!this._isEnabled)return;let i=this._material.isFrozen;(!e.useUbo||!i||!e.isSync)&&this._texture&&le.DetailTextureEnabled&&(e.updateFloat4("vDetailInfos",this._texture.coordinatesIndex,this.diffuseBlendLevel,this.bumpLevel,this.roughnessBlendLevel),ni(this._texture,e,"detail")),t.texturesEnabled&&this._texture&&le.DetailTextureEnabled&&e.setTexture("detailSampler",this._texture)}hasTexture(e){return this._texture===e}getActiveTextures(e){this._texture&&e.push(this._texture)}getAnimatables(e){this._texture&&this._texture.animations&&this._texture.animations.length>0&&e.push(this._texture)}dispose(e){var t;e&&((t=this._texture)==null||t.dispose())}getClassName(){return"DetailMapConfiguration"}getSamplers(e){e.push("detailSampler")}getUniforms(){return{ubo:[{name:"vDetailInfos",size:4,type:"vec4"},{name:"detailMatrix",size:16,type:"mat4"}]}}};P([Bt("detailTexture"),oe("_markAllSubMeshesAsTexturesDirty")],Pa.prototype,"texture",void 0);P([w()],Pa.prototype,"diffuseBlendLevel",void 0);P([w()],Pa.prototype,"roughnessBlendLevel",void 0);P([w()],Pa.prototype,"bumpLevel",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Pa.prototype,"normalBlendMethod",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Pa.prototype,"isEnabled",void 0)});var bk,Nn,RA=C(()=>{Ge();(function(n){n[n.Zero=0]="Zero",n[n.One=1]="One",n[n.MaxViewZ=2]="MaxViewZ",n[n.NoClear=3]="NoClear"})(bk||(bk={}));Nn=class n{static CreateConfiguration(e){return n._Configurations[e]={defines:{},previousWorldMatrices:{},previousViewProjection:K.Zero(),currentViewProjection:K.Zero(),previousBones:{},lastUpdateFrameId:-1,excludedSkinnedMesh:[],reverseCulling:!1},n._Configurations[e]}static DeleteConfiguration(e){delete n._Configurations[e]}static GetConfiguration(e){return n._Configurations[e]}static AddUniformsAndSamplers(e,t){e.push("previousWorld","previousViewProjection","mPreviousBones")}static MarkAsDirty(e,t){for(let i of t)if(i.subMeshes)for(let r of i.subMeshes)r._removeDrawWrapper(e)}static PrepareDefines(e,t,i){if(!i._arePrePassDirty)return;let r=n._Configurations[e];if(!r)return;i.PREPASS=!0;let s=0;for(let a=0;a{});function Lm(n){return class extends n{constructor(){super(...arguments),this.PREPASS=!1,this.PREPASS_COLOR=!1,this.PREPASS_COLOR_INDEX=-1,this.PREPASS_IRRADIANCE_LEGACY=!1,this.PREPASS_IRRADIANCE_LEGACY_INDEX=-1,this.PREPASS_IRRADIANCE=!1,this.PREPASS_IRRADIANCE_INDEX=-1,this.PREPASS_ALBEDO=!1,this.PREPASS_ALBEDO_INDEX=-1,this.PREPASS_ALBEDO_SQRT=!1,this.PREPASS_ALBEDO_SQRT_INDEX=-1,this.PREPASS_DEPTH=!1,this.PREPASS_DEPTH_INDEX=-1,this.PREPASS_SCREENSPACE_DEPTH=!1,this.PREPASS_SCREENSPACE_DEPTH_INDEX=-1,this.PREPASS_NORMALIZED_VIEW_DEPTH=!1,this.PREPASS_NORMALIZED_VIEW_DEPTH_INDEX=-1,this.PREPASS_NORMAL=!1,this.PREPASS_NORMAL_INDEX=-1,this.PREPASS_NORMAL_WORLDSPACE=!1,this.PREPASS_WORLD_NORMAL=!1,this.PREPASS_WORLD_NORMAL_INDEX=-1,this.PREPASS_POSITION=!1,this.PREPASS_POSITION_INDEX=-1,this.PREPASS_LOCAL_POSITION=!1,this.PREPASS_LOCAL_POSITION_INDEX=-1,this.PREPASS_VELOCITY=!1,this.PREPASS_VELOCITY_INDEX=-1,this.PREPASS_VELOCITY_LINEAR=!1,this.PREPASS_VELOCITY_LINEAR_INDEX=-1,this.PREPASS_REFLECTIVITY=!1,this.PREPASS_REFLECTIVITY_INDEX=-1,this.SCENE_MRT_COUNT=0}}}var IA=C(()=>{});function Om(n){return class extends n{constructor(...e){super(...e),V3()(this,"_imageProcessingConfiguration")}get imageProcessingConfiguration(){return this._imageProcessingConfiguration}set imageProcessingConfiguration(e){this._attachImageProcessingConfiguration(e),this._markAllSubMeshesAsImageProcessingDirty&&this._markAllSubMeshesAsImageProcessingDirty()}_attachImageProcessingConfiguration(e){e!==this._imageProcessingConfiguration&&(this._imageProcessingConfiguration&&this._imageProcessingObserver&&this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver),!e&&this.getScene?this._imageProcessingConfiguration=this.getScene().imageProcessingConfiguration:e&&(this._imageProcessingConfiguration=e),this._imageProcessingConfiguration&&(this._imageProcessingObserver=this._imageProcessingConfiguration.onUpdateParameters.add(()=>{this._markAllSubMeshesAsImageProcessingDirty&&this._markAllSubMeshesAsImageProcessingDirty()})))}get cameraColorCurvesEnabled(){return this.imageProcessingConfiguration.colorCurvesEnabled}set cameraColorCurvesEnabled(e){this.imageProcessingConfiguration.colorCurvesEnabled=e}get cameraColorGradingEnabled(){return this.imageProcessingConfiguration.colorGradingEnabled}set cameraColorGradingEnabled(e){this.imageProcessingConfiguration.colorGradingEnabled=e}get cameraToneMappingEnabled(){return this._imageProcessingConfiguration.toneMappingEnabled}set cameraToneMappingEnabled(e){this._imageProcessingConfiguration.toneMappingEnabled=e}get cameraExposure(){return this._imageProcessingConfiguration.exposure}set cameraExposure(e){this._imageProcessingConfiguration.exposure=e}get cameraContrast(){return this._imageProcessingConfiguration.contrast}set cameraContrast(e){this._imageProcessingConfiguration.contrast=e}get cameraColorGradingTexture(){return this._imageProcessingConfiguration.colorGradingTexture}set cameraColorGradingTexture(e){this._imageProcessingConfiguration.colorGradingTexture=e}get cameraColorCurves(){return this._imageProcessingConfiguration.colorCurves}set cameraColorCurves(e){this._imageProcessingConfiguration.colorCurves=e}}}var MA=C(()=>{Ut()});var Ik,Tse,Yh=C(()=>{G();Ik="sceneUboDeclaration",Tse=`struct Scene {viewProjection : mat4x4, #ifdef MULTIVIEW viewProjectionR : mat4x4, #endif @@ -5150,17 +5150,17 @@ vEyePosition : vec4, inverseProjection : mat4x4,}; #define SCENE_UBO var scene : Scene; -`;S.IncludesShadersStoreWGSL[pk]||(S.IncludesShadersStoreWGSL[pk]=$ne)});var _k,ese,ag=C(()=>{k();_k="meshUboDeclaration",ese=`struct Mesh {world : mat4x4, +`;T.IncludesShadersStoreWGSL[Ik]||(T.IncludesShadersStoreWGSL[Ik]=Tse)});var Mk,Ase,mg=C(()=>{G();Mk="meshUboDeclaration",Ase=`struct Mesh {world : mat4x4, visibility : f32,};var mesh : Mesh; #define WORLD_UBO -`;S.IncludesShadersStoreWGSL[_k]||(S.IncludesShadersStoreWGSL[_k]=ese)});var gk,tse,wy=C(()=>{k();Xh();ag();gk="defaultUboDeclaration",tse=`uniform diffuseLeftColor: vec4f;uniform diffuseRightColor: vec4f;uniform opacityParts: vec4f;uniform reflectionLeftColor: vec4f;uniform reflectionRightColor: vec4f;uniform refractionLeftColor: vec4f;uniform refractionRightColor: vec4f;uniform emissiveLeftColor: vec4f;uniform emissiveRightColor: vec4f;uniform vDiffuseInfos: vec2f;uniform vAmbientInfos: vec2f;uniform vOpacityInfos: vec2f;uniform vEmissiveInfos: vec2f;uniform vLightmapInfos: vec2f;uniform vSpecularInfos: vec2f;uniform vBumpInfos: vec3f;uniform diffuseMatrix: mat4x4f;uniform ambientMatrix: mat4x4f;uniform opacityMatrix: mat4x4f;uniform emissiveMatrix: mat4x4f;uniform lightmapMatrix: mat4x4f;uniform specularMatrix: mat4x4f;uniform bumpMatrix: mat4x4f;uniform vTangentSpaceParams: vec2f;uniform pointSize: f32;uniform alphaCutOff: f32;uniform refractionMatrix: mat4x4f;uniform vRefractionInfos: vec4f;uniform vRefractionPosition: vec3f;uniform vRefractionSize: vec3f;uniform vSpecularColor: vec4f;uniform vEmissiveColor: vec3f;uniform vDiffuseColor: vec4f;uniform vAmbientColor: vec3f;uniform cameraInfo: vec4f;uniform vReflectionInfos: vec2f;uniform reflectionMatrix: mat4x4f;uniform vReflectionPosition: vec3f;uniform vReflectionSize: vec3f; +`;T.IncludesShadersStoreWGSL[Mk]||(T.IncludesShadersStoreWGSL[Mk]=Ase)});var Ck,xse,Yy=C(()=>{G();Yh();mg();Ck="defaultUboDeclaration",xse=`uniform diffuseLeftColor: vec4f;uniform diffuseRightColor: vec4f;uniform opacityParts: vec4f;uniform reflectionLeftColor: vec4f;uniform reflectionRightColor: vec4f;uniform refractionLeftColor: vec4f;uniform refractionRightColor: vec4f;uniform emissiveLeftColor: vec4f;uniform emissiveRightColor: vec4f;uniform vDiffuseInfos: vec2f;uniform vAmbientInfos: vec2f;uniform vOpacityInfos: vec2f;uniform vEmissiveInfos: vec2f;uniform vLightmapInfos: vec2f;uniform vSpecularInfos: vec2f;uniform vBumpInfos: vec3f;uniform diffuseMatrix: mat4x4f;uniform ambientMatrix: mat4x4f;uniform opacityMatrix: mat4x4f;uniform emissiveMatrix: mat4x4f;uniform lightmapMatrix: mat4x4f;uniform specularMatrix: mat4x4f;uniform bumpMatrix: mat4x4f;uniform vTangentSpaceParams: vec2f;uniform pointSize: f32;uniform alphaCutOff: f32;uniform refractionMatrix: mat4x4f;uniform vRefractionInfos: vec4f;uniform vRefractionPosition: vec3f;uniform vRefractionSize: vec3f;uniform vSpecularColor: vec4f;uniform vEmissiveColor: vec3f;uniform vDiffuseColor: vec4f;uniform vAmbientColor: vec3f;uniform cameraInfo: vec4f;uniform vReflectionInfos: vec2f;uniform reflectionMatrix: mat4x4f;uniform vReflectionPosition: vec3f;uniform vReflectionSize: vec3f; #define ADDITIONAL_UBO_DECLARATION #include #include -`;S.IncludesShadersStoreWGSL[gk]||(S.IncludesShadersStoreWGSL[gk]=tse)});var vk,ise,vA=C(()=>{k();vk="uvAttributeDeclaration",ise=`#if defined(UV{X}) && !defined(USE_VERTEX_PULLING) +`;T.IncludesShadersStoreWGSL[Ck]||(T.IncludesShadersStoreWGSL[Ck]=xse)});var yk,Rse,CA=C(()=>{G();yk="uvAttributeDeclaration",Rse=`#if defined(UV{X}) && !defined(USE_VERTEX_PULLING) attribute uv{X}: vec2f; #endif -`;S.IncludesShadersStoreWGSL[vk]||(S.IncludesShadersStoreWGSL[vk]=ise)});var Ek,rse,EA=C(()=>{k();Ek="prePassVertexDeclaration",rse=`#ifdef PREPASS +`;T.IncludesShadersStoreWGSL[yk]||(T.IncludesShadersStoreWGSL[yk]=Rse)});var Pk,bse,yA=C(()=>{G();Pk="prePassVertexDeclaration",bse=`#ifdef PREPASS #ifdef PREPASS_LOCAL_POSITION varying vPosition : vec3f; #endif @@ -5174,18 +5174,18 @@ varying vNormViewDepth: f32; uniform previousViewProjection: mat4x4f;varying vCurrentPosition: vec4f;varying vPreviousPosition: vec4f; #endif #endif -`;S.IncludesShadersStoreWGSL[Ek]||(S.IncludesShadersStoreWGSL[Ek]=rse)});var Sk,nse,Pm=C(()=>{k();Sk="mainUVVaryingDeclaration",nse=`#ifdef MAINUV{X} +`;T.IncludesShadersStoreWGSL[Pk]||(T.IncludesShadersStoreWGSL[Pk]=bse)});var Dk,Ise,Nm=C(()=>{G();Dk="mainUVVaryingDeclaration",Ise=`#ifdef MAINUV{X} varying vMainUV{X}: vec2f; #endif -`;S.IncludesShadersStoreWGSL[Sk]||(S.IncludesShadersStoreWGSL[Sk]=nse)});var Tk,sse,SA=C(()=>{k();Tk="samplerVertexDeclaration",sse=`#if defined(_DEFINENAME_) && _DEFINENAME_DIRECTUV==0 +`;T.IncludesShadersStoreWGSL[Dk]||(T.IncludesShadersStoreWGSL[Dk]=Ise)});var Lk,Mse,PA=C(()=>{G();Lk="samplerVertexDeclaration",Mse=`#if defined(_DEFINENAME_) && _DEFINENAME_DIRECTUV==0 varying v_VARYINGNAME_UV: vec2f; #endif -`;S.IncludesShadersStoreWGSL[Tk]||(S.IncludesShadersStoreWGSL[Tk]=sse)});var Ak,ase,By=C(()=>{k();Ak="bumpVertexDeclaration",ase=`#if defined(BUMP) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) +`;T.IncludesShadersStoreWGSL[Lk]||(T.IncludesShadersStoreWGSL[Lk]=Mse)});var Ok,Cse,Ky=C(()=>{G();Ok="bumpVertexDeclaration",Cse=`#if defined(BUMP) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) #if defined(TANGENT) && defined(NORMAL) varying vTBN0: vec3f;varying vTBN1: vec3f;varying vTBN2: vec3f; #endif #endif -`;S.IncludesShadersStoreWGSL[Ak]||(S.IncludesShadersStoreWGSL[Ak]=ase)});var xk,ose,Rk=C(()=>{k();xk="lightVxFragmentDeclaration",ose=`#ifdef LIGHT{X} +`;T.IncludesShadersStoreWGSL[Ok]||(T.IncludesShadersStoreWGSL[Ok]=Cse)});var Nk,yse,wk=C(()=>{G();Nk="lightVxFragmentDeclaration",yse=`#ifdef LIGHT{X} uniform vLightData{X}: vec4f;uniform vLightDiffuse{X}: vec4f; #ifdef SPECULARTERM uniform vLightSpecular{X}: vec4f; @@ -5212,7 +5212,7 @@ uniform vLightGround{X}: vec3f; uniform vLightWidth{X}: vec4f;uniform vLightHeight{X}: vec4f; #endif #endif -`;S.IncludesShadersStoreWGSL[xk]||(S.IncludesShadersStoreWGSL[xk]=ose)});var bk,lse,TA=C(()=>{k();bk="lightVxUboDeclaration",lse=`#ifdef LIGHT{X} +`;T.IncludesShadersStoreWGSL[Nk]||(T.IncludesShadersStoreWGSL[Nk]=yse)});var Fk,Pse,DA=C(()=>{G();Fk="lightVxUboDeclaration",Pse=`#ifdef LIGHT{X} struct Light{X} {vLightData: vec4f, vLightDiffuse: vec4f, @@ -5243,7 +5243,7 @@ varying vPositionFromLight{X}: vec4f;varying vDepthMetric{X}: f32;uniform lightM #endif #endif #endif -`;S.IncludesShadersStoreWGSL[bk]||(S.IncludesShadersStoreWGSL[bk]=lse)});var Ik,cse,Mf=C(()=>{k();Ik="morphTargetsVertexGlobalDeclaration",cse=`#ifdef MORPHTARGETS +`;T.IncludesShadersStoreWGSL[Fk]||(T.IncludesShadersStoreWGSL[Fk]=Pse)});var Bk,Dse,Pf=C(()=>{G();Bk="morphTargetsVertexGlobalDeclaration",Dse=`#ifdef MORPHTARGETS uniform morphTargetInfluences : array; #ifdef MORPHTARGETS_TEXTURE uniform morphTargetTextureIndices : array;uniform morphTargetTextureInfo : vec3;var morphTargets : texture_2d_array;fn readVector3FromRawSampler(targetIndex : i32,vertexIndex : f32)->vec3 @@ -5255,7 +5255,7 @@ let textureWidth: i32=i32(uniforms.morphTargetTextureInfo.y); let y: i32=i32(vertexIndex)/textureWidth;let x: i32=i32(vertexIndex) % textureWidth;return textureLoad(morphTargets,vec2i(x,y),i32(uniforms.morphTargetTextureIndices[targetIndex]),0);} #endif #endif -`;S.IncludesShadersStoreWGSL[Ik]||(S.IncludesShadersStoreWGSL[Ik]=cse)});var Mk,fse,Cf=C(()=>{k();Mk="morphTargetsVertexDeclaration",fse=`#ifdef MORPHTARGETS +`;T.IncludesShadersStoreWGSL[Bk]||(T.IncludesShadersStoreWGSL[Bk]=Dse)});var Uk,Lse,Df=C(()=>{G();Uk="morphTargetsVertexDeclaration",Lse=`#ifdef MORPHTARGETS #ifndef MORPHTARGETS_TEXTURE #ifdef MORPHTARGETS_POSITION attribute position{X} : vec3; @@ -5279,10 +5279,10 @@ attribute color{X} : vec4; uniform morphTargetCount: f32; #endif #endif -`;S.IncludesShadersStoreWGSL[Mk]||(S.IncludesShadersStoreWGSL[Mk]=fse)});var Ck,hse,Yh=C(()=>{k();Ck="logDepthDeclaration",hse=`#ifdef LOGARITHMICDEPTH +`;T.IncludesShadersStoreWGSL[Uk]||(T.IncludesShadersStoreWGSL[Uk]=Lse)});var Vk,Ose,Kh=C(()=>{G();Vk="logDepthDeclaration",Ose=`#ifdef LOGARITHMICDEPTH uniform logarithmicDepthConstant: f32;varying vFragmentDepth: f32; #endif -`;S.IncludesShadersStoreWGSL[Ck]||(S.IncludesShadersStoreWGSL[Ck]=hse)});var yk,dse,AA=C(()=>{k();yk="vertexPullingDeclaration",dse=`#ifdef USE_VERTEX_PULLING +`;T.IncludesShadersStoreWGSL[Vk]||(T.IncludesShadersStoreWGSL[Vk]=Ose)});var Gk,Nse,LA=C(()=>{G();Gk="vertexPullingDeclaration",Nse=`#ifdef USE_VERTEX_PULLING #ifdef VERTEX_PULLING_USE_INDEX_BUFFER var indices : array; #endif @@ -5460,7 +5460,7 @@ vp_readMatrixWeightExtraValue(offset+cs*3u,dataType,normalized) #endif #endif #endif -`;S.IncludesShadersStoreWGSL[yk]||(S.IncludesShadersStoreWGSL[yk]=dse)});var Pk,use,xA=C(()=>{k();Pk="vertexPullingVertex",use=`#ifdef USE_VERTEX_PULLING +`;T.IncludesShadersStoreWGSL[Gk]||(T.IncludesShadersStoreWGSL[Gk]=Nse)});var kk,wse,OA=C(()=>{G();kk="vertexPullingVertex",wse=`#ifdef USE_VERTEX_PULLING let vpVertexIndex: u32=vp_readVertexIndex(vertexInputs.vertexIndex);positionUpdated=vp_readPosition(uniforms.vp_position_info,vpVertexIndex); #ifdef NORMAL normalUpdated=vp_readNormal(uniforms.vp_normal_info,vpVertexIndex); @@ -5514,12 +5514,12 @@ var vp_matricesIndicesExtra: vec4f=vp_readBoneIndicesExtra(uniforms.vp_matricesI #endif #endif #endif -`;S.IncludesShadersStoreWGSL[Pk]||(S.IncludesShadersStoreWGSL[Pk]=use)});var Dk,mse,yf=C(()=>{k();Dk="morphTargetsVertexGlobal",mse=`#ifdef MORPHTARGETS +`;T.IncludesShadersStoreWGSL[kk]||(T.IncludesShadersStoreWGSL[kk]=wse)});var Wk,Fse,Lf=C(()=>{G();Wk="morphTargetsVertexGlobal",Fse=`#ifdef MORPHTARGETS #ifdef MORPHTARGETS_TEXTURE var vertexID : f32; #endif #endif -`;S.IncludesShadersStoreWGSL[Dk]||(S.IncludesShadersStoreWGSL[Dk]=mse)});var Lk,pse,Pf=C(()=>{k();Lk="morphTargetsVertex",pse=`#ifdef MORPHTARGETS +`;T.IncludesShadersStoreWGSL[Wk]||(T.IncludesShadersStoreWGSL[Wk]=Fse)});var Hk,Bse,Of=C(()=>{G();Hk="morphTargetsVertex",Bse=`#ifdef MORPHTARGETS #ifdef MORPHTARGETS_TEXTURE #if {X}==0 for (var i=0; i=uniforms.morphTargetCount) {break;} @@ -5629,7 +5629,7 @@ colorUpdated=colorUpdated+(vertexInputs.color{X}-vertexInputs.color)*uniforms.mo #endif #endif #endif -`;S.IncludesShadersStoreWGSL[Lk]||(S.IncludesShadersStoreWGSL[Lk]=pse)});var Ok,_se,RA=C(()=>{k();Ok="prePassVertex",_se=`#ifdef PREPASS_DEPTH +`;T.IncludesShadersStoreWGSL[Hk]||(T.IncludesShadersStoreWGSL[Hk]=Bse)});var zk,Use,NA=C(()=>{G();zk="prePassVertex",Use=`#ifdef PREPASS_DEPTH vertexOutputs.vViewPos=(scene.view*worldPos).rgb; #endif #ifdef PREPASS_NORMALIZED_VIEW_DEPTH @@ -5668,7 +5668,7 @@ vertexOutputs.vPreviousPosition=uniforms.previousViewProjection*finalPreviousWor vertexOutputs.vPreviousPosition=uniforms.previousViewProjection*finalPreviousWorld* vec4f(positionUpdated,1.0); #endif #endif -`;S.IncludesShadersStoreWGSL[Ok]||(S.IncludesShadersStoreWGSL[Ok]=_se)});var Nk,gse,bA=C(()=>{k();Nk="uvVariableDeclaration",gse=`#ifdef MAINUV{X} +`;T.IncludesShadersStoreWGSL[zk]||(T.IncludesShadersStoreWGSL[zk]=Use)});var Xk,Vse,wA=C(()=>{G();Xk="uvVariableDeclaration",Vse=`#ifdef MAINUV{X} #if !defined(UV{X}) var uv{X}: vec2f=vec2f(0.,0.); #elif defined(USE_VERTEX_PULLING) @@ -5678,7 +5678,7 @@ var uv{X}: vec2f=vertexInputs.uv{X}; #endif vertexOutputs.vMainUV{X}=uv{X}; #endif -`;S.IncludesShadersStoreWGSL[Nk]||(S.IncludesShadersStoreWGSL[Nk]=gse)});var Fk,vse,IA=C(()=>{k();Fk="samplerVertexImplementation",vse=`#if defined(_DEFINENAME_) && _DEFINENAME_DIRECTUV==0 +`;T.IncludesShadersStoreWGSL[Xk]||(T.IncludesShadersStoreWGSL[Xk]=Vse)});var Yk,Gse,FA=C(()=>{G();Yk="samplerVertexImplementation",Gse=`#if defined(_DEFINENAME_) && _DEFINENAME_DIRECTUV==0 if (uniforms.v_INFONAME_==0.) {vertexOutputs.v_VARYINGNAME_UV= (uniforms._MATRIXNAME_Matrix* vec4f(uvUpdated,1.0,0.0)).xy;} #ifdef UV2 @@ -5702,12 +5702,12 @@ else if (uniforms.v_INFONAME_==5.) {vertexOutputs.v_VARYINGNAME_UV= (uniforms._MATRIXNAME_Matrix* vec4f(vertexInputs.uv6,1.0,0.0)).xy;} #endif #endif -`;S.IncludesShadersStoreWGSL[Fk]||(S.IncludesShadersStoreWGSL[Fk]=vse)});var wk,Ese,MA=C(()=>{k();wk="bumpVertex",Ese=`#if defined(BUMP) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) +`;T.IncludesShadersStoreWGSL[Yk]||(T.IncludesShadersStoreWGSL[Yk]=Gse)});var Kk,kse,BA=C(()=>{G();Kk="bumpVertex",kse=`#if defined(BUMP) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) #if defined(TANGENT) && defined(NORMAL) var tbnNormal: vec3f=normalize(normalUpdated);var tbnTangent: vec3f=normalize(tangentUpdated.xyz);var tbnBitangent: vec3f=cross(tbnNormal,tbnTangent)*tangentUpdated.w;var matTemp= mat3x3f(finalWorld[0].xyz,finalWorld[1].xyz,finalWorld[2].xyz)* mat3x3f(tbnTangent,tbnBitangent,tbnNormal);vertexOutputs.vTBN0=matTemp[0];vertexOutputs.vTBN1=matTemp[1];vertexOutputs.vTBN2=matTemp[2]; #endif #endif -`;S.IncludesShadersStoreWGSL[wk]||(S.IncludesShadersStoreWGSL[wk]=Ese)});var Bk,Sse,CA=C(()=>{k();Bk="shadowsVertex",Sse=`#ifdef SHADOWS +`;T.IncludesShadersStoreWGSL[Kk]||(T.IncludesShadersStoreWGSL[Kk]=kse)});var jk,Wse,UA=C(()=>{G();jk="shadowsVertex",Wse=`#ifdef SHADOWS #if defined(SHADOWCSM{X}) #ifdef SCENE_UBO vertexOutputs.vPositionFromCamera{X}=scene.view*worldPos; @@ -5755,10 +5755,10 @@ vertexOutputs.vDepthMetric{X}=(vertexOutputs.vPositionFromLight{X}.z+light{X}.de #endif #endif #endif -`;S.IncludesShadersStoreWGSL[Bk]||(S.IncludesShadersStoreWGSL[Bk]=Sse)});var Uk,Tse,yA=C(()=>{k();Uk="logDepthVertex",Tse=`#ifdef LOGARITHMICDEPTH +`;T.IncludesShadersStoreWGSL[jk]||(T.IncludesShadersStoreWGSL[jk]=Wse)});var qk,Hse,VA=C(()=>{G();qk="logDepthVertex",Hse=`#ifdef LOGARITHMICDEPTH vertexOutputs.vFragmentDepth=1.0+vertexOutputs.position.w;vertexOutputs.position.z=log2(max(0.000001,vertexOutputs.vFragmentDepth))*uniforms.logarithmicDepthConstant; #endif -`;S.IncludesShadersStoreWGSL[Uk]||(S.IncludesShadersStoreWGSL[Uk]=Tse)});var Gk={};et(Gk,{defaultVertexShaderWGSL:()=>Ase});var Uy,Vk,Ase,kk=C(()=>{k();wy();vA();Sa();ql();Zl();Rf();EA();Pm();SA();By();Ql();X_();Rk();TA();Mf();Cf();Yh();AA();xA();yf();Pf();Jl();$l();ec();RA();bA();IA();MA();tc();Y_();CA();K_();yA();Uy="defaultVertexShader",Vk=`#include +`;T.IncludesShadersStoreWGSL[qk]||(T.IncludesShadersStoreWGSL[qk]=Hse)});var Qk={};$e(Qk,{defaultVertexShaderWGSL:()=>zse});var jy,Zk,zse,$k=C(()=>{G();Yy();CA();Ra();Ql();$l();Mf();yA();Nm();PA();Ky();Jl();J_();wk();DA();Pf();Df();Kh();LA();OA();Lf();Of();ec();tc();ic();NA();wA();FA();BA();rc();eg();UA();tg();VA();jy="defaultVertexShader",Zk=`#include #define CUSTOM_VERTEX_BEGIN #ifndef USE_VERTEX_PULLING attribute position: vec3f; @@ -5939,7 +5939,7 @@ vertexOutputs.vMainUV2=uv2Updated; #include #define CUSTOM_VERTEX_MAIN_END } -`;S.ShadersStoreWGSL[Uy]||(S.ShadersStoreWGSL[Uy]=Vk);Ase={name:Uy,shader:Vk}});var Wk,xse,PA=C(()=>{k();Wk="prePassDeclaration",xse=`#ifdef PREPASS +`;T.ShadersStoreWGSL[jy]||(T.ShadersStoreWGSL[jy]=Zk);zse={name:jy,shader:Zk}});var Jk,Xse,GA=C(()=>{G();Jk="prePassDeclaration",Xse=`#ifdef PREPASS #ifdef PREPASS_LOCAL_POSITION varying vPosition : vec3f; #endif @@ -5953,11 +5953,11 @@ varying vNormViewDepth: f32; varying vCurrentPosition: vec4f;varying vPreviousPosition: vec4f; #endif #endif -`;S.IncludesShadersStoreWGSL[Wk]||(S.IncludesShadersStoreWGSL[Wk]=xse)});var Hk,Rse,DA=C(()=>{k();Hk="oitDeclaration",Rse=`#ifdef ORDER_INDEPENDENT_TRANSPARENCY +`;T.IncludesShadersStoreWGSL[Jk]||(T.IncludesShadersStoreWGSL[Jk]=Xse)});var eW,Yse,kA=C(()=>{G();eW="oitDeclaration",Yse=`#ifdef ORDER_INDEPENDENT_TRANSPARENCY #define MAX_DEPTH 99999.0 var oitDepthSamplerSampler: sampler;var oitDepthSampler: texture_2d;var oitFrontColorSamplerSampler: sampler;var oitFrontColorSampler: texture_2d; #endif -`;S.IncludesShadersStoreWGSL[Hk]||(S.IncludesShadersStoreWGSL[Hk]=Rse)});var zk,bse,LA=C(()=>{k();zk="lightUboDeclaration",bse=`#ifdef LIGHT{X} +`;T.IncludesShadersStoreWGSL[eW]||(T.IncludesShadersStoreWGSL[eW]=Yse)});var tW,Kse,WA=C(()=>{G();tW="lightUboDeclaration",Kse=`#ifdef LIGHT{X} struct Light{X} {vLightData: vec4f, vLightDiffuse: vec4f, @@ -6034,7 +6034,7 @@ uniform lightMatrix{X}: mat4x4f; #endif #endif #endif -`;S.IncludesShadersStoreWGSL[zk]||(S.IncludesShadersStoreWGSL[zk]=bse)});var Xk,Ise,Vy=C(()=>{k();Xk="ltcHelperFunctions",Ise=`fn LTCUv(N: vec3f,V: vec3f,roughness: f32)->vec2f {var LUTSIZE: f32=64.0;var LUTSCALE: f32=( LUTSIZE-1.0 )/LUTSIZE;var LUTBIAS:f32=0.5/LUTSIZE;var dotNV:f32=saturate( dot( N,V ) );var uv:vec2f=vec2f( roughness,sqrt( 1.0-dotNV ) );uv=uv*LUTSCALE+LUTBIAS;return uv;} +`;T.IncludesShadersStoreWGSL[tW]||(T.IncludesShadersStoreWGSL[tW]=Kse)});var iW,jse,qy=C(()=>{G();iW="ltcHelperFunctions",jse=`fn LTCUv(N: vec3f,V: vec3f,roughness: f32)->vec2f {var LUTSIZE: f32=64.0;var LUTSCALE: f32=( LUTSIZE-1.0 )/LUTSIZE;var LUTBIAS:f32=0.5/LUTSIZE;var dotNV:f32=saturate( dot( N,V ) );var uv:vec2f=vec2f( roughness,sqrt( 1.0-dotNV ) );uv=uv*LUTSCALE+LUTBIAS;return uv;} fn LTCClippedSphereFormFactor( f:vec3f )->f32 {var l: f32=length( f );return max( ( l*l+f.z )/( l+1.0 ),0.0 );} fn LTCEdgeVectorFormFactor( v1:vec3f,v2:vec3f )->vec3f {var x:f32=dot( v1,v2 );var y:f32=abs( x );var a:f32=0.8543985+( 0.4965155+0.0145206*y )*y;var b:f32=3.4175940+( 4.1616724+y )*y;var v:f32=a/b;var thetaSintheta:f32=0.0;if( x>0.0 ) {thetaSintheta=v;} @@ -6078,7 +6078,7 @@ vec3f(1,0,0), vec3f(0,1,0), vec3f(0,0,1) );result.Diffuse=LTCEvaluateWithEmission(normal,viewDir,position,mInvEmpty,rectCoords0,rectCoords1,rectCoords2,rectCoords3,emissionTexture,emissionTextureSampler);return result;} -`;S.IncludesShadersStoreWGSL[Xk]||(S.IncludesShadersStoreWGSL[Xk]=Ise)});var Yk,Mse,Gy=C(()=>{k();Yk="clusteredLightingFunctions",Mse=`struct ClusteredLight {vLightData: vec4f, +`;T.IncludesShadersStoreWGSL[iW]||(T.IncludesShadersStoreWGSL[iW]=jse)});var rW,qse,Zy=C(()=>{G();rW="clusteredLightingFunctions",qse=`struct ClusteredLight {vLightData: vec4f, vLightDiffuse: vec4f, vLightSpecular: vec4f, vLightDirection: vec4f, @@ -6091,7 +6091,7 @@ textureLoad(lightDataTexture,vec2u(3,index),0), textureLoad(lightDataTexture,vec2u(4,index),0) );} fn getClusteredSliceIndex(sliceData: vec2f,viewDepth: f32)->i32 {return i32(log(viewDepth)*sliceData.x+sliceData.y);} -`;S.IncludesShadersStoreWGSL[Yk]||(S.IncludesShadersStoreWGSL[Yk]=Mse)});var Kk,Cse,jk=C(()=>{k();Vy();Gy();Kk="lightsFragmentFunctions",Cse=`struct lightingInfo +`;T.IncludesShadersStoreWGSL[rW]||(T.IncludesShadersStoreWGSL[rW]=qse)});var nW,Zse,sW=C(()=>{G();qy();Zy();nW="lightsFragmentFunctions",Zse=`struct lightingInfo {diffuse: vec3f, #ifdef SPECULARTERM specular: vec3f, @@ -6188,7 +6188,7 @@ result.specular+=info.specular; batchOffset+=CLUSTLIGHT_BATCH;} return result;} #endif -`;S.IncludesShadersStoreWGSL[Kk]||(S.IncludesShadersStoreWGSL[Kk]=Cse)});var qk,yse,OA=C(()=>{k();qk="shadowsFragmentFunctions",yse=`#ifdef SHADOWS +`;T.IncludesShadersStoreWGSL[nW]||(T.IncludesShadersStoreWGSL[nW]=Zse)});var aW,Qse,HA=C(()=>{G();aW="shadowsFragmentFunctions",Qse=`#ifdef SHADOWS #ifndef SHADOWFLOAT fn unpack(color: vec4f)->f32 {const bit_shift: vec4f= vec4f(1.0/(255.0*255.0*255.0),1.0/(255.0*255.0),1.0/255.0,1.0);return dot(color,bit_shift);} @@ -6480,7 +6480,7 @@ fn computeShadowWithCSMPCSS32(layer: i32,vPositionFromLight: vec4f,depthMetric: fn computeShadowWithCSMPCSS64(layer: i32,vPositionFromLight: vec4f,depthMetric: f32,depthTexture: texture_2d_array,depthSampler: sampler,shadowTexture: texture_depth_2d_array,shadowSampler: sampler_comparison,shadowMapSizeInverse: f32,lightSizeUV: f32,darkness: f32,frustumEdgeFalloff: f32,lightSizeUVCorrection: vec2f,depthCorrection: f32,penumbraDarkness: f32)->f32 {return computeShadowWithCSMPCSS(layer,vPositionFromLight,depthMetric,depthTexture,depthSampler,shadowTexture,shadowSampler,shadowMapSizeInverse,lightSizeUV,darkness,frustumEdgeFalloff,32,64,PoissonSamplers64,lightSizeUVCorrection,depthCorrection,penumbraDarkness);} #endif -`;S.IncludesShadersStoreWGSL[qk]||(S.IncludesShadersStoreWGSL[qk]=yse)});var Zk,Pse,Kh=C(()=>{k();Zk="samplerFragmentDeclaration",Pse=`#ifdef _DEFINENAME_ +`;T.IncludesShadersStoreWGSL[aW]||(T.IncludesShadersStoreWGSL[aW]=Qse)});var oW,$se,jh=C(()=>{G();oW="samplerFragmentDeclaration",$se=`#ifdef _DEFINENAME_ #if _DEFINENAME_DIRECTUV==1 #define v_VARYINGNAME_UV vMainUV1 #elif _DEFINENAME_DIRECTUV==2 @@ -6498,11 +6498,11 @@ varying v_VARYINGNAME_UV: vec2f; #endif var _SAMPLERNAME_SamplerSampler: sampler;var _SAMPLERNAME_Sampler: texture_2d; #endif -`;S.IncludesShadersStoreWGSL[Zk]||(S.IncludesShadersStoreWGSL[Zk]=Pse)});var Qk,Dse,Jk=C(()=>{k();Qk="fresnelFunction",Dse=`#ifdef FRESNEL +`;T.IncludesShadersStoreWGSL[oW]||(T.IncludesShadersStoreWGSL[oW]=$se)});var lW,Jse,cW=C(()=>{G();lW="fresnelFunction",Jse=`#ifdef FRESNEL fn computeFresnelTerm(viewDirection: vec3f,worldNormal: vec3f,bias: f32,power: f32)->f32 {let fresnelTerm: f32=pow(bias+abs(dot(viewDirection,worldNormal)),power);return clamp(fresnelTerm,0.,1.);} #endif -`;S.IncludesShadersStoreWGSL[Qk]||(S.IncludesShadersStoreWGSL[Qk]=Dse)});var $k,Lse,og=C(()=>{k();$k="reflectionFunction",Lse=`fn computeFixedEquirectangularCoords(worldPos: vec4f,worldNormal: vec3f,direction: vec3f)->vec3f +`;T.IncludesShadersStoreWGSL[lW]||(T.IncludesShadersStoreWGSL[lW]=Jse)});var fW,eae,pg=C(()=>{G();fW="reflectionFunction",eae=`fn computeFixedEquirectangularCoords(worldPos: vec4f,worldNormal: vec3f,direction: vec3f)->vec3f {var lon: f32=atan2(direction.z,direction.x);var lat: f32=acos(direction.y);var sphereCoords: vec2f= vec2f(lon,lat)*RECIPROCAL_PI2*2.0;var s: f32=sphereCoords.x*0.5+0.5;var t: f32=sphereCoords.y;return vec3f(s,t,0); } fn computeMirroredFixedEquirectangularCoords(worldPos: vec4f,worldNormal: vec3f,direction: vec3f)->vec3f {var lon: f32=atan2(direction.z,direction.x);var lat: f32=acos(direction.y);var sphereCoords: vec2f= vec2f(lon,lat)*RECIPROCAL_PI2*2.0;var s: f32=sphereCoords.x*0.5+0.5;var t: f32=sphereCoords.y;return vec3f(1.0-s,t,0); } @@ -6566,7 +6566,7 @@ return vec3f(0,0,0); #endif } #endif -`;S.IncludesShadersStoreWGSL[$k]||(S.IncludesShadersStoreWGSL[$k]=Lse)});var eW,Ose,NA=C(()=>{k();eW="imageProcessingDeclaration",Ose=`#ifdef EXPOSURE +`;T.IncludesShadersStoreWGSL[fW]||(T.IncludesShadersStoreWGSL[fW]=eae)});var hW,tae,zA=C(()=>{G();hW="imageProcessingDeclaration",tae=`#ifdef EXPOSURE uniform exposureLinear: f32; #endif #ifdef CONTRAST @@ -6592,7 +6592,7 @@ uniform colorTransformSettings: vec4f; #ifdef DITHER uniform ditherIntensity: f32; #endif -`;S.IncludesShadersStoreWGSL[eW]||(S.IncludesShadersStoreWGSL[eW]=Ose)});var tW,Nse,FA=C(()=>{k();tW="imageProcessingFunctions",Nse=`#if TONEMAPPING==3 +`;T.IncludesShadersStoreWGSL[hW]||(T.IncludesShadersStoreWGSL[hW]=tae)});var dW,iae,XA=C(()=>{G();dW="imageProcessingFunctions",iae=`#if TONEMAPPING==3 const PBRNeutralStartCompression: f32=0.8-0.04;const PBRNeutralDesaturation: f32=0.15;fn PBRNeutralToneMapping( color: vec3f )->vec3f {var x: f32=min(color.r,min(color.g,color.b));var offset: f32=select(0.04,x-6.25*x*x,x<0.08);var result=color;result-=offset;var peak: f32=max(result.r,max(result.g,result.b));if (peak{k();iW="bumpFragmentMainFunctions",Fse=`#if defined(BUMP) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) || defined(DETAIL) +return vec4f(rgb,result.a);}`;T.IncludesShadersStoreWGSL[dW]||(T.IncludesShadersStoreWGSL[dW]=iae)});var uW,rae,YA=C(()=>{G();uW="bumpFragmentMainFunctions",rae=`#if defined(BUMP) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) || defined(DETAIL) #if defined(TANGENT) && defined(NORMAL) varying vTBN0: vec3f;varying vTBN1: vec3f;varying vTBN2: vec3f; #endif @@ -6694,7 +6694,7 @@ fn perturbNormal(cotangentFrame: mat3x3f,textureSample: vec3f,scale: f32)->vec3f fn cotangent_frame(normal: vec3f,p: vec3f,uv: vec2f,tangentSpaceParams: vec2f)->mat3x3f {var dp1: vec3f=dpdx(p);var dp2: vec3f=dpdy(p);var duv1: vec2f=dpdx(uv);var duv2: vec2f=dpdy(uv);var dp2perp: vec3f=cross(dp2,normal);var dp1perp: vec3f=cross(normal,dp1);var tangent: vec3f=dp2perp*duv1.x+dp1perp*duv2.x;var bitangent: vec3f=dp2perp*duv1.y+dp1perp*duv2.y;tangent*=tangentSpaceParams.x;bitangent*=tangentSpaceParams.y;var det: f32=max(dot(tangent,tangent),dot(bitangent,bitangent));var invmax: f32=select(inverseSqrt(det),0.0,det==0.0);return mat3x3f(tangent*invmax,bitangent*invmax,normal);} #endif -`;S.IncludesShadersStoreWGSL[iW]||(S.IncludesShadersStoreWGSL[iW]=Fse)});var rW,wse,BA=C(()=>{k();Kh();rW="bumpFragmentFunctions",wse=`#if defined(BUMP) +`;T.IncludesShadersStoreWGSL[uW]||(T.IncludesShadersStoreWGSL[uW]=rae)});var mW,nae,KA=C(()=>{G();jh();mW="bumpFragmentFunctions",nae=`#if defined(BUMP) #include(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump,_SAMPLERNAME_,bump) #endif #if defined(DETAIL) @@ -6724,7 +6724,7 @@ return -texCoordOffset; #endif } #endif -`;S.IncludesShadersStoreWGSL[rW]||(S.IncludesShadersStoreWGSL[rW]=wse)});var nW,Bse,UA=C(()=>{k();nW="bumpFragment",Bse=`var uvOffset: vec2f= vec2f(0.0,0.0); +`;T.IncludesShadersStoreWGSL[mW]||(T.IncludesShadersStoreWGSL[mW]=nae)});var pW,sae,jA=C(()=>{G();pW="bumpFragment",sae=`var uvOffset: vec2f= vec2f(0.0,0.0); #if defined(BUMP) || defined(PARALLAX) || defined(DETAIL) #ifdef NORMALXYSCALE var normalScale: f32=1.0; @@ -6776,7 +6776,7 @@ normalW=perturbNormalBase(TBN,blendedNormal,uniforms.vBumpInfos.y); #elif defined(DETAIL) detailNormal=vec3f(detailNormal.xy*uniforms.vDetailInfos.z,detailNormal.z);normalW=perturbNormalBase(TBN,detailNormal,uniforms.vDetailInfos.z); #endif -`;S.IncludesShadersStoreWGSL[nW]||(S.IncludesShadersStoreWGSL[nW]=Bse)});var sW,Use,ky=C(()=>{k();sW="decalFragment",Use=`#ifdef DECAL +`;T.IncludesShadersStoreWGSL[pW]||(T.IncludesShadersStoreWGSL[pW]=sae)});var _W,aae,Qy=C(()=>{G();_W="decalFragment",aae=`#ifdef DECAL var decalTempColor=decalColor.rgb;var decalTempAlpha=decalColor.a; #ifdef GAMMADECAL decalTempColor=toLinearSpaceVec3(decalColor.rgb); @@ -6786,13 +6786,13 @@ decalTempAlpha=decalColor.a*decalColor.a; #endif surfaceAlbedo=mix(surfaceAlbedo.rgb,decalTempColor,decalTempAlpha); #endif -`;S.IncludesShadersStoreWGSL[sW]||(S.IncludesShadersStoreWGSL[sW]=Use)});var aW,Vse,VA=C(()=>{k();aW="depthPrePass",Vse=`#ifdef DEPTHPREPASS +`;T.IncludesShadersStoreWGSL[_W]||(T.IncludesShadersStoreWGSL[_W]=aae)});var gW,oae,qA=C(()=>{G();gW="depthPrePass",oae=`#ifdef DEPTHPREPASS #if !defined(PREPASS) && !defined(ORDER_INDEPENDENT_TRANSPARENCY) fragmentOutputs.color= vec4f(0.,0.,0.,1.0); #endif return fragmentOutputs; #endif -`;S.IncludesShadersStoreWGSL[aW]||(S.IncludesShadersStoreWGSL[aW]=Vse)});var oW,Gse,Wy=C(()=>{k();oW="lightFragment",Gse=`#ifdef LIGHT{X} +`;T.IncludesShadersStoreWGSL[gW]||(T.IncludesShadersStoreWGSL[gW]=oae)});var vW,lae,$y=C(()=>{G();vW="lightFragment",lae=`#ifdef LIGHT{X} #if defined(SHADOWONLY) || defined(LIGHTMAP) && defined(LIGHTMAPEXCLUDED{X}) && defined(LIGHTMAPNOSPECULAR{X}) #else var diffuse{X}: vec4f=light{X}.vLightDiffuse; @@ -7179,10 +7179,10 @@ sheenBase+=info.sheen.rgb*shadow; #endif #endif #endif -`;S.IncludesShadersStoreWGSL[oW]||(S.IncludesShadersStoreWGSL[oW]=Gse)});var lW,kse,GA=C(()=>{k();lW="logDepthFragment",kse=`#ifdef LOGARITHMICDEPTH +`;T.IncludesShadersStoreWGSL[vW]||(T.IncludesShadersStoreWGSL[vW]=lae)});var EW,cae,ZA=C(()=>{G();EW="logDepthFragment",cae=`#ifdef LOGARITHMICDEPTH fragmentOutputs.fragDepth=log2(fragmentInputs.vFragmentDepth)*uniforms.logarithmicDepthConstant*0.5; #endif -`;S.IncludesShadersStoreWGSL[lW]||(S.IncludesShadersStoreWGSL[lW]=kse)});var cW,Wse,kA=C(()=>{k();cW="oitFragment",Wse=`#ifdef ORDER_INDEPENDENT_TRANSPARENCY +`;T.IncludesShadersStoreWGSL[EW]||(T.IncludesShadersStoreWGSL[EW]=cae)});var SW,fae,QA=C(()=>{G();SW="oitFragment",fae=`#ifdef ORDER_INDEPENDENT_TRANSPARENCY var fragDepth: f32=fragmentInputs.position.z; #ifdef ORDER_INDEPENDENT_TRANSPARENCY_16BITS var halfFloat: u32=pack2x16float( vec2f(fragDepth));var full: vec2f=unpack2x16float(halfFloat);fragDepth=full.x; @@ -7207,7 +7207,7 @@ if (fragDepth>nearestDepth && fragDepthHse});var Hy,fW,Hse,dW=C(()=>{k();wy();PA();DA();Pm();Sa();LA();jk();OA();Kh();Jk();og();NA();FA();wA();BA();ic();Yh();j_();rc();UA();ky();VA();Wy();GA();q_();kA();Hy="defaultPixelShader",fW=`#include +`;T.IncludesShadersStoreWGSL[SW]||(T.IncludesShadersStoreWGSL[SW]=fae)});var AW={};$e(AW,{defaultPixelShaderWGSL:()=>hae});var Jy,TW,hae,xW=C(()=>{G();Yy();GA();kA();Nm();Ra();WA();sW();HA();jh();cW();pg();zA();XA();YA();KA();nc();Kh();ig();sc();jA();Qy();qA();$y();ZA();rg();QA();Jy="defaultPixelShader",TW=`#include #include[SCENE_MRT_COUNT] #include #define CUSTOM_FRAGMENT_BEGIN @@ -7573,10 +7573,10 @@ if (fragDepth==nearestDepth) {fragmentOutputs.frontColor=vec4f(fragmentOutputs.f #endif #define CUSTOM_FRAGMENT_MAIN_END } -`;S.ShadersStoreWGSL[Hy]||(S.ShadersStoreWGSL[Hy]=fW);Hse={name:Hy,shader:fW}});var uW,zse,WA=C(()=>{k();uW="decalVertexDeclaration",zse=`#ifdef DECAL +`;T.ShadersStoreWGSL[Jy]||(T.ShadersStoreWGSL[Jy]=TW);hae={name:Jy,shader:TW}});var RW,dae,$A=C(()=>{G();RW="decalVertexDeclaration",dae=`#ifdef DECAL uniform vec4 vDecalInfos;uniform mat4 decalMatrix; #endif -`;S.IncludesShadersStore[uW]||(S.IncludesShadersStore[uW]=zse)});var mW,Xse,pW=C(()=>{k();WA();mW="defaultVertexDeclaration",Xse=`uniform mat4 viewProjection; +`;T.IncludesShadersStore[RW]||(T.IncludesShadersStore[RW]=dae)});var bW,uae,IW=C(()=>{G();$A();bW="defaultVertexDeclaration",uae=`uniform mat4 viewProjection; #ifdef MULTIVIEW mat4 viewProjectionR; #endif @@ -7614,28 +7614,28 @@ uniform vec4 vDetailInfos;uniform mat4 detailMatrix; uniform vec4 cameraInfo; #include #define ADDITIONAL_VERTEX_DECLARATION -`;S.IncludesShadersStore[mW]||(S.IncludesShadersStore[mW]=Xse)});var _W,Yse,jh=C(()=>{k();_W="sceneUboDeclaration",Yse=`layout(std140,column_major) uniform;uniform Scene {mat4 viewProjection; +`;T.IncludesShadersStore[bW]||(T.IncludesShadersStore[bW]=uae)});var MW,mae,qh=C(()=>{G();MW="sceneUboDeclaration",mae=`layout(std140,column_major) uniform;uniform Scene {mat4 viewProjection; #ifdef MULTIVIEW mat4 viewProjectionR; #endif mat4 view;mat4 projection;vec4 vEyePosition;mat4 inverseProjection;}; -`;S.IncludesShadersStore[_W]||(S.IncludesShadersStore[_W]=Yse)});var gW,Kse,lg=C(()=>{k();gW="meshUboDeclaration",Kse=`#ifdef WEBGL2 +`;T.IncludesShadersStore[MW]||(T.IncludesShadersStore[MW]=mae)});var CW,pae,_g=C(()=>{G();CW="meshUboDeclaration",pae=`#ifdef WEBGL2 uniform mat4 world;uniform float visibility; #else layout(std140,column_major) uniform;uniform Mesh {mat4 world;float visibility;}; #endif #define WORLD_UBO -`;S.IncludesShadersStore[gW]||(S.IncludesShadersStore[gW]=Kse)});var vW,jse,zy=C(()=>{k();jh();lg();vW="defaultUboDeclaration",jse=`layout(std140,column_major) uniform;uniform Material +`;T.IncludesShadersStore[CW]||(T.IncludesShadersStore[CW]=pae)});var yW,_ae,eP=C(()=>{G();qh();_g();yW="defaultUboDeclaration",_ae=`layout(std140,column_major) uniform;uniform Material {vec4 diffuseLeftColor;vec4 diffuseRightColor;vec4 opacityParts;vec4 reflectionLeftColor;vec4 reflectionRightColor;vec4 refractionLeftColor;vec4 refractionRightColor;vec4 emissiveLeftColor;vec4 emissiveRightColor;vec2 vDiffuseInfos;vec2 vAmbientInfos;vec2 vOpacityInfos;vec2 vEmissiveInfos;vec2 vLightmapInfos;vec2 vSpecularInfos;vec3 vBumpInfos;mat4 diffuseMatrix;mat4 ambientMatrix;mat4 opacityMatrix;mat4 emissiveMatrix;mat4 lightmapMatrix;mat4 specularMatrix;mat4 bumpMatrix;vec2 vTangentSpaceParams;float pointSize;float alphaCutOff;mat4 refractionMatrix;vec4 vRefractionInfos;vec3 vRefractionPosition;vec3 vRefractionSize;vec4 vSpecularColor;vec3 vEmissiveColor;vec4 vDiffuseColor;vec3 vAmbientColor;vec4 cameraInfo;vec2 vReflectionInfos;mat4 reflectionMatrix;vec3 vReflectionPosition;vec3 vReflectionSize; #define ADDITIONAL_UBO_DECLARATION }; #include #include -`;S.IncludesShadersStore[vW]||(S.IncludesShadersStore[vW]=jse)});var EW,qse,HA=C(()=>{k();EW="uvAttributeDeclaration",qse=`#ifdef UV{X} +`;T.IncludesShadersStore[yW]||(T.IncludesShadersStore[yW]=_ae)});var PW,gae,JA=C(()=>{G();PW="uvAttributeDeclaration",gae=`#ifdef UV{X} attribute vec2 uv{X}; #endif -`;S.IncludesShadersStore[EW]||(S.IncludesShadersStore[EW]=qse)});var SW,Zse,zA=C(()=>{k();SW="prePassVertexDeclaration",Zse=`#ifdef PREPASS +`;T.IncludesShadersStore[PW]||(T.IncludesShadersStore[PW]=gae)});var DW,vae,ex=C(()=>{G();DW="prePassVertexDeclaration",vae=`#ifdef PREPASS #ifdef PREPASS_LOCAL_POSITION varying vec3 vPosition; #endif @@ -7649,18 +7649,18 @@ varying float vNormViewDepth; uniform mat4 previousViewProjection;varying vec4 vCurrentPosition;varying vec4 vPreviousPosition; #endif #endif -`;S.IncludesShadersStore[SW]||(S.IncludesShadersStore[SW]=Zse)});var TW,Qse,Dm=C(()=>{k();TW="mainUVVaryingDeclaration",Qse=`#ifdef MAINUV{X} +`;T.IncludesShadersStore[DW]||(T.IncludesShadersStore[DW]=vae)});var LW,Eae,wm=C(()=>{G();LW="mainUVVaryingDeclaration",Eae=`#ifdef MAINUV{X} varying vec2 vMainUV{X}; #endif -`;S.IncludesShadersStore[TW]||(S.IncludesShadersStore[TW]=Qse)});var AW,Jse,XA=C(()=>{k();AW="samplerVertexDeclaration",Jse=`#if defined(_DEFINENAME_) && _DEFINENAME_DIRECTUV==0 +`;T.IncludesShadersStore[LW]||(T.IncludesShadersStore[LW]=Eae)});var OW,Sae,tx=C(()=>{G();OW="samplerVertexDeclaration",Sae=`#if defined(_DEFINENAME_) && _DEFINENAME_DIRECTUV==0 varying vec2 v_VARYINGNAME_UV; #endif -`;S.IncludesShadersStore[AW]||(S.IncludesShadersStore[AW]=Jse)});var xW,$se,Xy=C(()=>{k();xW="bumpVertexDeclaration",$se=`#if defined(BUMP) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) +`;T.IncludesShadersStore[OW]||(T.IncludesShadersStore[OW]=Sae)});var NW,Tae,tP=C(()=>{G();NW="bumpVertexDeclaration",Tae=`#if defined(BUMP) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) #if defined(TANGENT) && defined(NORMAL) varying mat3 vTBN; #endif #endif -`;S.IncludesShadersStore[xW]||(S.IncludesShadersStore[xW]=$se)});var RW,eae,YA=C(()=>{k();RW="lightVxFragmentDeclaration",eae=`#ifdef LIGHT{X} +`;T.IncludesShadersStore[NW]||(T.IncludesShadersStore[NW]=Tae)});var wW,Aae,ix=C(()=>{G();wW="lightVxFragmentDeclaration",Aae=`#ifdef LIGHT{X} uniform vec4 vLightData{X};uniform vec4 vLightDiffuse{X}; #ifdef SPECULARTERM uniform vec4 vLightSpecular{X}; @@ -7687,7 +7687,7 @@ uniform vec3 vLightGround{X}; uniform vec4 vLightWidth{X};uniform vec4 vLightHeight{X}; #endif #endif -`;S.IncludesShadersStore[RW]||(S.IncludesShadersStore[RW]=eae)});var bW,tae,KA=C(()=>{k();bW="lightVxUboDeclaration",tae=`#ifdef LIGHT{X} +`;T.IncludesShadersStore[wW]||(T.IncludesShadersStore[wW]=Aae)});var FW,xae,rx=C(()=>{G();FW="lightVxUboDeclaration",xae=`#ifdef LIGHT{X} uniform Light{X} {vec4 vLightData;vec4 vLightDiffuse;vec4 vLightSpecular; #ifdef SPOTLIGHT{X} @@ -7712,7 +7712,7 @@ varying vec4 vPositionFromLight{X};varying float vDepthMetric{X};uniform mat4 li #endif #endif #endif -`;S.IncludesShadersStore[bW]||(S.IncludesShadersStore[bW]=tae)});var IW,iae,Df=C(()=>{k();IW="morphTargetsVertexGlobalDeclaration",iae=`#ifdef MORPHTARGETS +`;T.IncludesShadersStore[FW]||(T.IncludesShadersStore[FW]=xae)});var BW,Rae,Nf=C(()=>{G();BW="morphTargetsVertexGlobalDeclaration",Rae=`#ifdef MORPHTARGETS uniform float morphTargetInfluences[NUM_MORPH_INFLUENCERS]; #ifdef MORPHTARGETS_TEXTURE uniform float morphTargetTextureIndices[NUM_MORPH_INFLUENCERS];uniform vec3 morphTargetTextureInfo;uniform highp sampler2DArray morphTargets;vec3 readVector3FromRawSampler(int targetIndex,float vertexIndex) @@ -7733,7 +7733,7 @@ float y=floor(vertexIndex/morphTargetTextureInfo.y);float x=vertexIndex-y*morphT } #endif #endif -`;S.IncludesShadersStore[IW]||(S.IncludesShadersStore[IW]=iae)});var MW,rae,Lf=C(()=>{k();MW="morphTargetsVertexDeclaration",rae=`#ifdef MORPHTARGETS +`;T.IncludesShadersStore[BW]||(T.IncludesShadersStore[BW]=Rae)});var UW,bae,wf=C(()=>{G();UW="morphTargetsVertexDeclaration",bae=`#ifdef MORPHTARGETS #ifndef MORPHTARGETS_TEXTURE #ifdef MORPHTARGETS_POSITION attribute vec3 position{X}; @@ -7757,15 +7757,15 @@ attribute vec4 color{X}; uniform float morphTargetCount; #endif #endif -`;S.IncludesShadersStore[MW]||(S.IncludesShadersStore[MW]=rae)});var CW,nae,qh=C(()=>{k();CW="logDepthDeclaration",nae=`#ifdef LOGARITHMICDEPTH +`;T.IncludesShadersStore[UW]||(T.IncludesShadersStore[UW]=bae)});var VW,Iae,Zh=C(()=>{G();VW="logDepthDeclaration",Iae=`#ifdef LOGARITHMICDEPTH uniform float logarithmicDepthConstant;varying float vFragmentDepth; #endif -`;S.IncludesShadersStore[CW]||(S.IncludesShadersStore[CW]=nae)});var yW,sae,Of=C(()=>{k();yW="morphTargetsVertexGlobal",sae=`#ifdef MORPHTARGETS +`;T.IncludesShadersStore[VW]||(T.IncludesShadersStore[VW]=Iae)});var GW,Mae,Ff=C(()=>{G();GW="morphTargetsVertexGlobal",Mae=`#ifdef MORPHTARGETS #ifdef MORPHTARGETS_TEXTURE float vertexID; #endif #endif -`;S.IncludesShadersStore[yW]||(S.IncludesShadersStore[yW]=sae)});var PW,aae,Nf=C(()=>{k();PW="morphTargetsVertex",aae=`#ifdef MORPHTARGETS +`;T.IncludesShadersStore[GW]||(T.IncludesShadersStore[GW]=Mae)});var kW,Cae,Bf=C(()=>{G();kW="morphTargetsVertex",Cae=`#ifdef MORPHTARGETS #ifdef MORPHTARGETS_TEXTURE #if {X}==0 for (int i=0; i=morphTargetCount) break;vertexID=float(gl_VertexID)*morphTargetTextureInfo.x; @@ -7825,7 +7825,7 @@ colorUpdated+=(color{X}-color)*morphTargetInfluences[{X}]; #endif #endif #endif -`;S.IncludesShadersStore[PW]||(S.IncludesShadersStore[PW]=aae)});var DW,oae,jA=C(()=>{k();DW="prePassVertex",oae=`#ifdef PREPASS_DEPTH +`;T.IncludesShadersStore[kW]||(T.IncludesShadersStore[kW]=Cae)});var WW,yae,nx=C(()=>{G();WW="prePassVertex",yae=`#ifdef PREPASS_DEPTH vViewPos=(view*worldPos).rgb; #endif #ifdef PREPASS_NORMALIZED_VIEW_DEPTH @@ -7864,13 +7864,13 @@ vPreviousPosition=previousViewProjection*finalPreviousWorld*previousInfluence*ve vPreviousPosition=previousViewProjection*finalPreviousWorld*vec4(positionUpdated,1.0); #endif #endif -`;S.IncludesShadersStore[DW]||(S.IncludesShadersStore[DW]=oae)});var LW,lae,qA=C(()=>{k();LW="uvVariableDeclaration",lae=`#if !defined(UV{X}) && defined(MAINUV{X}) +`;T.IncludesShadersStore[WW]||(T.IncludesShadersStore[WW]=yae)});var HW,Pae,sx=C(()=>{G();HW="uvVariableDeclaration",Pae=`#if !defined(UV{X}) && defined(MAINUV{X}) vec2 uv{X}=vec2(0.,0.); #endif #ifdef MAINUV{X} vMainUV{X}=uv{X}; #endif -`;S.IncludesShadersStore[LW]||(S.IncludesShadersStore[LW]=lae)});var OW,cae,ZA=C(()=>{k();OW="samplerVertexImplementation",cae=`#if defined(_DEFINENAME_) && _DEFINENAME_DIRECTUV==0 +`;T.IncludesShadersStore[HW]||(T.IncludesShadersStore[HW]=Pae)});var zW,Dae,ax=C(()=>{G();zW="samplerVertexImplementation",Dae=`#if defined(_DEFINENAME_) && _DEFINENAME_DIRECTUV==0 if (v_INFONAME_==0.) {v_VARYINGNAME_UV=vec2(_MATRIXNAME_Matrix*vec4(uvUpdated,1.0,0.0));} #ifdef UV2 @@ -7894,12 +7894,12 @@ else if (v_INFONAME_==5.) {v_VARYINGNAME_UV=vec2(_MATRIXNAME_Matrix*vec4(uv6,1.0,0.0));} #endif #endif -`;S.IncludesShadersStore[OW]||(S.IncludesShadersStore[OW]=cae)});var NW,fae,QA=C(()=>{k();NW="bumpVertex",fae=`#if defined(BUMP) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) +`;T.IncludesShadersStore[zW]||(T.IncludesShadersStore[zW]=Dae)});var XW,Lae,ox=C(()=>{G();XW="bumpVertex",Lae=`#if defined(BUMP) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) #if defined(TANGENT) && defined(NORMAL) vec3 tbnNormal=normalize(normalUpdated);vec3 tbnTangent=normalize(tangentUpdated.xyz);vec3 tbnBitangent=cross(tbnNormal,tbnTangent)*tangentUpdated.w;vTBN=mat3(finalWorld)*mat3(tbnTangent,tbnBitangent,tbnNormal); #endif #endif -`;S.IncludesShadersStore[NW]||(S.IncludesShadersStore[NW]=fae)});var FW,hae,JA=C(()=>{k();FW="shadowsVertex",hae=`#ifdef SHADOWS +`;T.IncludesShadersStore[XW]||(T.IncludesShadersStore[XW]=Lae)});var YW,Oae,lx=C(()=>{G();YW="shadowsVertex",Oae=`#ifdef SHADOWS #if defined(SHADOWCSM{X}) vPositionFromCamera{X}=view*worldPos;for (int i=0; i{k();wW="pointCloudVertex",dae=`#if defined(POINTSIZE) && !defined(WEBGPU) +`;T.IncludesShadersStore[YW]||(T.IncludesShadersStore[YW]=Oae)});var KW,Nae,iP=C(()=>{G();KW="pointCloudVertex",Nae=`#if defined(POINTSIZE) && !defined(WEBGPU) gl_PointSize=pointSize; #endif -`;S.IncludesShadersStore[wW]||(S.IncludesShadersStore[wW]=dae)});var BW,uae,$A=C(()=>{k();BW="logDepthVertex",uae=`#ifdef LOGARITHMICDEPTH +`;T.IncludesShadersStore[KW]||(T.IncludesShadersStore[KW]=Nae)});var jW,wae,cx=C(()=>{G();jW="logDepthVertex",wae=`#ifdef LOGARITHMICDEPTH vFragmentDepth=1.0+gl_Position.w;gl_Position.z=log2(max(0.000001,vFragmentDepth))*logarithmicDepthConstant; #endif -`;S.IncludesShadersStore[BW]||(S.IncludesShadersStore[BW]=uae)});var VW={};et(VW,{defaultVertexShader:()=>mae});var Ky,UW,mae,GW=C(()=>{k();pW();zy();HA();Ta();nc();sc();bf();zA();Dm();XA();Xy();ac();Z_();YA();KA();Df();Lf();qh();Of();Nf();oc();lc();cc();jA();qA();ZA();QA();fc();Q_();JA();J_();Yy();$A();Ky="defaultVertexShader",UW=`#define CUSTOM_VERTEX_EXTENSION +`;T.IncludesShadersStore[jW]||(T.IncludesShadersStore[jW]=wae)});var ZW={};$e(ZW,{defaultVertexShader:()=>Fae});var rP,qW,Fae,QW=C(()=>{G();IW();eP();JA();ba();ac();oc();Cf();ex();wm();tx();tP();lc();ng();ix();rx();Nf();wf();Zh();Ff();Bf();cc();fc();hc();nx();sx();ax();ox();dc();sg();lx();ag();iP();cx();rP="defaultVertexShader",qW=`#define CUSTOM_VERTEX_EXTENSION #include<__decl__defaultVertex> #define CUSTOM_VERTEX_BEGIN attribute vec3 position; @@ -8077,10 +8077,10 @@ vMainUV2=uv2Updated; #include #define CUSTOM_VERTEX_MAIN_END } -`;S.ShadersStore[Ky]||(S.ShadersStore[Ky]=UW);mae={name:Ky,shader:UW}});var kW,pae,ex=C(()=>{k();kW="decalFragmentDeclaration",pae=`#ifdef DECAL +`;T.ShadersStore[rP]||(T.ShadersStore[rP]=qW);Fae={name:rP,shader:qW}});var $W,Bae,fx=C(()=>{G();$W="decalFragmentDeclaration",Bae=`#ifdef DECAL uniform vec4 vDecalInfos; #endif -`;S.IncludesShadersStore[kW]||(S.IncludesShadersStore[kW]=pae)});var WW,_ae,HW=C(()=>{k();ex();WW="defaultFragmentDeclaration",_ae=`uniform vec4 vEyePosition;uniform vec4 vDiffuseColor;uniform vec4 vSpecularColor;uniform vec3 vEmissiveColor;uniform vec3 vAmbientColor;uniform float visibility; +`;T.IncludesShadersStore[$W]||(T.IncludesShadersStore[$W]=Bae)});var JW,Uae,eH=C(()=>{G();fx();JW="defaultFragmentDeclaration",Uae=`uniform vec4 vEyePosition;uniform vec4 vDiffuseColor;uniform vec4 vSpecularColor;uniform vec3 vEmissiveColor;uniform vec3 vAmbientColor;uniform float visibility; #ifdef DIFFUSE uniform vec2 vDiffuseInfos; #endif @@ -8148,7 +8148,7 @@ uniform vec4 vDetailInfos; #endif #include #define ADDITIONAL_FRAGMENT_DECLARATION -`;S.IncludesShadersStore[WW]||(S.IncludesShadersStore[WW]=_ae)});var zW,gae,tx=C(()=>{k();zW="prePassDeclaration",gae=`#ifdef PREPASS +`;T.IncludesShadersStore[JW]||(T.IncludesShadersStore[JW]=Uae)});var tH,Vae,hx=C(()=>{G();tH="prePassDeclaration",Vae=`#ifdef PREPASS #extension GL_EXT_draw_buffers : require layout(location=0) out highp vec4 glFragData[{X}];highp vec4 gl_FragColor; #ifdef PREPASS_LOCAL_POSITION @@ -8164,14 +8164,14 @@ varying highp float vNormViewDepth; varying highp vec4 vCurrentPosition;varying highp vec4 vPreviousPosition; #endif #endif -`;S.IncludesShadersStore[zW]||(S.IncludesShadersStore[zW]=gae)});var XW,vae,ix=C(()=>{k();XW="oitDeclaration",vae=`#ifdef ORDER_INDEPENDENT_TRANSPARENCY +`;T.IncludesShadersStore[tH]||(T.IncludesShadersStore[tH]=Vae)});var iH,Gae,dx=C(()=>{G();iH="oitDeclaration",Gae=`#ifdef ORDER_INDEPENDENT_TRANSPARENCY #extension GL_EXT_draw_buffers : require layout(location=0) out vec2 depth; layout(location=1) out vec4 frontColor;layout(location=2) out vec4 backColor; #define MAX_DEPTH 99999.0 highp vec4 gl_FragColor;uniform sampler2D oitDepthSampler;uniform sampler2D oitFrontColorSampler; #endif -`;S.IncludesShadersStore[XW]||(S.IncludesShadersStore[XW]=vae)});var YW,Eae,rx=C(()=>{k();YW="lightFragmentDeclaration",Eae=`#ifdef LIGHT{X} +`;T.IncludesShadersStore[iH]||(T.IncludesShadersStore[iH]=Gae)});var rH,kae,ux=C(()=>{G();rH="lightFragmentDeclaration",kae=`#ifdef LIGHT{X} uniform vec4 vLightData{X};uniform vec4 vLightDiffuse{X}; #ifdef SPECULARTERM uniform vec4 vLightSpecular{X}; @@ -8245,7 +8245,7 @@ uniform mat4 textureProjectionMatrix{X};uniform sampler2D projectionLightTexture uniform vec2 vSliceData{X};uniform vec2 vSliceRanges{X}[CLUSTLIGHT_SLICES];uniform sampler2D lightDataTexture{X};uniform highp sampler2D tileMaskTexture{X}; #endif #endif -`;S.IncludesShadersStore[YW]||(S.IncludesShadersStore[YW]=Eae)});var KW,Sae,nx=C(()=>{k();KW="lightUboDeclaration",Sae=`#ifdef LIGHT{X} +`;T.IncludesShadersStore[rH]||(T.IncludesShadersStore[rH]=kae)});var nH,Wae,mx=C(()=>{G();nH="lightUboDeclaration",Wae=`#ifdef LIGHT{X} uniform Light{X} {vec4 vLightData;vec4 vLightDiffuse;vec4 vLightSpecular; #ifdef SPOTLIGHT{X} @@ -8317,7 +8317,7 @@ uniform mat4 lightMatrix{X}; #endif #endif #endif -`;S.IncludesShadersStore[KW]||(S.IncludesShadersStore[KW]=Sae)});var jW,Tae,jy=C(()=>{k();jW="ltcHelperFunctions",Tae=`vec2 LTCUv( const in vec3 N,const in vec3 V,const in float roughness ) {const float LUTSIZE=64.0;const float LUTSCALE=( LUTSIZE-1.0 )/LUTSIZE;const float LUTBIAS=0.5/LUTSIZE;float dotNV=saturate( dot( N,V ) );vec2 uv=vec2( roughness,sqrt( 1.0-dotNV ) );uv=uv*LUTSCALE+LUTBIAS;return uv;} +`;T.IncludesShadersStore[nH]||(T.IncludesShadersStore[nH]=Wae)});var sH,Hae,nP=C(()=>{G();sH="ltcHelperFunctions",Hae=`vec2 LTCUv( const in vec3 N,const in vec3 V,const in float roughness ) {const float LUTSIZE=64.0;const float LUTSCALE=( LUTSIZE-1.0 )/LUTSIZE;const float LUTBIAS=0.5/LUTSIZE;float dotNV=saturate( dot( N,V ) );vec2 uv=vec2( roughness,sqrt( 1.0-dotNV ) );uv=uv*LUTSCALE+LUTBIAS;return uv;} float LTCClippedSphereFormFactor( const in vec3 f ) {float l=length( f );return max( ( l*l+f.z )/( l+1.0 ),0.0 );} vec3 LTCEdgeVectorFormFactor( const in vec3 v1,const in vec3 v2 ) {float x=dot( v1,v2 );float y=abs( x );float a=0.8543985+( 0.4965155+0.0145206*y )*y;float b=3.4175940+( 4.1616724+y )*y;float v=a/b;float thetaSintheta=0.0;if( x>0.0 ) {thetaSintheta=v;} @@ -8355,7 +8355,7 @@ vec3( 0,1, 0 ), vec3( t1.z,0,t1.w ) );result.Specular=LTCEvaluateWithEmission( normal,viewDir,position,mInv,rectCoords,texFilteredMap );result.Fresnel=t2; #endif -result.Diffuse=LTCEvaluateWithEmission( normal,viewDir,position,mat3( 1.0 ),rectCoords,texFilteredMap );return result;}`;S.IncludesShadersStore[jW]||(S.IncludesShadersStore[jW]=Tae)});var qW,Aae,qy=C(()=>{k();qW="clusteredLightingFunctions",Aae=`struct ClusteredLight {vec4 vLightData;vec4 vLightDiffuse;vec4 vLightSpecular;vec4 vLightDirection;vec4 vLightFalloff;}; +result.Diffuse=LTCEvaluateWithEmission( normal,viewDir,position,mat3( 1.0 ),rectCoords,texFilteredMap );return result;}`;T.IncludesShadersStore[sH]||(T.IncludesShadersStore[sH]=Hae)});var aH,zae,sP=C(()=>{G();aH="clusteredLightingFunctions",zae=`struct ClusteredLight {vec4 vLightData;vec4 vLightDiffuse;vec4 vLightSpecular;vec4 vLightDirection;vec4 vLightFalloff;}; #define inline ClusteredLight getClusteredLight(sampler2D lightDataTexture,int index) {return ClusteredLight( texelFetch(lightDataTexture,ivec2(0,index),0), @@ -8365,7 +8365,7 @@ texelFetch(lightDataTexture,ivec2(3,index),0), texelFetch(lightDataTexture,ivec2(4,index),0) );} int getClusteredSliceIndex(vec2 sliceData,float viewDepth) {return int(log(viewDepth)*sliceData.x+sliceData.y);} -`;S.IncludesShadersStore[qW]||(S.IncludesShadersStore[qW]=Aae)});var ZW,xae,QW=C(()=>{k();jy();qy();ZW="lightsFragmentFunctions",xae=`struct lightingInfo +`;T.IncludesShadersStore[aH]||(T.IncludesShadersStore[aH]=zae)});var oH,Xae,lH=C(()=>{G();nP();sP();oH="lightsFragmentFunctions",Xae=`struct lightingInfo {vec3 diffuse; #ifdef SPECULARTERM vec3 specular; @@ -8469,7 +8469,7 @@ result.specular+=info.specular; batchOffset+=CLUSTLIGHT_BATCH;} return result;} #endif -`;S.IncludesShadersStore[ZW]||(S.IncludesShadersStore[ZW]=xae)});var JW,Rae,sx=C(()=>{k();JW="shadowsFragmentFunctions",Rae=`#ifdef SHADOWS +`;T.IncludesShadersStore[oH]||(T.IncludesShadersStore[oH]=Xae)});var cH,Yae,px=C(()=>{G();cH="shadowsFragmentFunctions",Yae=`#ifdef SHADOWS #if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE) #define TEXTUREFUNC(s,c,l) texture2DLodEXT(s,c,l) #else @@ -8812,7 +8812,7 @@ float computeShadowWithCSMPCSS64(float layer,vec4 vPositionFromLight,float depth {return computeShadowWithCSMPCSS(layer,vPositionFromLight,depthMetric,depthSampler,shadowSampler,shadowMapSizeInverse,lightSizeUV,darkness,frustumEdgeFalloff,32,64,PoissonSamplers64,lightSizeUVCorrection,depthCorrection,penumbraDarkness);} #endif #endif -`;S.IncludesShadersStore[JW]||(S.IncludesShadersStore[JW]=Rae)});var $W,bae,Zh=C(()=>{k();$W="samplerFragmentDeclaration",bae=`#ifdef _DEFINENAME_ +`;T.IncludesShadersStore[cH]||(T.IncludesShadersStore[cH]=Yae)});var fH,Kae,Qh=C(()=>{G();fH="samplerFragmentDeclaration",Kae=`#ifdef _DEFINENAME_ #if _DEFINENAME_DIRECTUV==1 #define v_VARYINGNAME_UV vMainUV1 #elif _DEFINENAME_DIRECTUV==2 @@ -8830,11 +8830,11 @@ varying vec2 v_VARYINGNAME_UV; #endif uniform sampler2D _SAMPLERNAME_Sampler; #endif -`;S.IncludesShadersStore[$W]||(S.IncludesShadersStore[$W]=bae)});var eH,Iae,tH=C(()=>{k();eH="fresnelFunction",Iae=`#ifdef FRESNEL +`;T.IncludesShadersStore[fH]||(T.IncludesShadersStore[fH]=Kae)});var hH,jae,dH=C(()=>{G();hH="fresnelFunction",jae=`#ifdef FRESNEL float computeFresnelTerm(vec3 viewDirection,vec3 worldNormal,float bias,float power) {float fresnelTerm=pow(bias+abs(dot(viewDirection,worldNormal)),power);return clamp(fresnelTerm,0.,1.);} #endif -`;S.IncludesShadersStore[eH]||(S.IncludesShadersStore[eH]=Iae)});var iH,Mae,cg=C(()=>{k();iH="reflectionFunction",Mae=`vec3 computeFixedEquirectangularCoords(vec4 worldPos,vec3 worldNormal,vec3 direction) +`;T.IncludesShadersStore[hH]||(T.IncludesShadersStore[hH]=jae)});var uH,qae,gg=C(()=>{G();uH="reflectionFunction",qae=`vec3 computeFixedEquirectangularCoords(vec4 worldPos,vec3 worldNormal,vec3 direction) {float lon=atan(direction.z,direction.x);float lat=acos(direction.y);vec2 sphereCoords=vec2(lon,lat)*RECIPROCAL_PI2*2.0;float s=sphereCoords.x*0.5+0.5;float t=sphereCoords.y;return vec3(s,t,0); } vec3 computeMirroredFixedEquirectangularCoords(vec4 worldPos,vec3 worldNormal,vec3 direction) {float lon=atan(direction.z,direction.x);float lat=acos(direction.y);vec2 sphereCoords=vec2(lon,lat)*RECIPROCAL_PI2*2.0;float s=sphereCoords.x*0.5+0.5;float t=sphereCoords.y;return vec3(1.0-s,t,0); } @@ -8896,7 +8896,7 @@ return vec3(0,0,0); #endif } #endif -`;S.IncludesShadersStore[iH]||(S.IncludesShadersStore[iH]=Mae)});var rH,Cae,ax=C(()=>{k();rH="imageProcessingDeclaration",Cae=`#ifdef EXPOSURE +`;T.IncludesShadersStore[uH]||(T.IncludesShadersStore[uH]=qae)});var mH,Zae,_x=C(()=>{G();mH="imageProcessingDeclaration",Zae=`#ifdef EXPOSURE uniform float exposureLinear; #endif #ifdef CONTRAST @@ -8922,7 +8922,7 @@ uniform vec4 colorTransformSettings; #ifdef DITHER uniform float ditherIntensity; #endif -`;S.IncludesShadersStore[rH]||(S.IncludesShadersStore[rH]=Cae)});var nH,yae,ox=C(()=>{k();nH="imageProcessingFunctions",yae=`#if defined(COLORGRADING) && !defined(COLORGRADING3D) +`;T.IncludesShadersStore[mH]||(T.IncludesShadersStore[mH]=Zae)});var pH,Qae,gx=C(()=>{G();pH="imageProcessingFunctions",Qae=`#if defined(COLORGRADING) && !defined(COLORGRADING3D) /** * Polyfill for SAMPLE_TEXTURE_3D,which is unsupported in WebGL. * sampler3dSetting.x=textureOffset (0.5/textureSize). @@ -9010,7 +9010,7 @@ float luma=getLuminance(result.rgb);vec2 curveMix=clamp(vec2(luma*3.0-1.5,luma*- float rand=getRand(gl_FragCoord.xy*vInverseScreenSize);float dither=mix(-ditherIntensity,ditherIntensity,rand);result.rgb=saturate(result.rgb+vec3(dither)); #endif #define CUSTOM_IMAGEPROCESSINGFUNCTIONS_UPDATERESULT_ATEND -return result;}`;S.IncludesShadersStore[nH]||(S.IncludesShadersStore[nH]=yae)});var sH,Pae,lx=C(()=>{k();sH="bumpFragmentMainFunctions",Pae=`#if defined(BUMP) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) || defined(DETAIL) +return result;}`;T.IncludesShadersStore[pH]||(T.IncludesShadersStore[pH]=Qae)});var _H,$ae,vx=C(()=>{G();_H="bumpFragmentMainFunctions",$ae=`#if defined(BUMP) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) || defined(DETAIL) #if defined(TANGENT) && defined(NORMAL) varying mat3 vTBN; #endif @@ -9071,7 +9071,7 @@ vec3 perturbNormal(mat3 cotangentFrame,vec3 textureSample,float scale) mat3 cotangent_frame(vec3 normal,vec3 p,vec2 uv,vec2 tangentSpaceParams) {vec3 dp1=dFdx(p);vec3 dp2=dFdy(p);vec2 duv1=dFdx(uv);vec2 duv2=dFdy(uv);vec3 dp2perp=cross(dp2,normal);vec3 dp1perp=cross(normal,dp1);vec3 tangent=dp2perp*duv1.x+dp1perp*duv2.x;vec3 bitangent=dp2perp*duv1.y+dp1perp*duv2.y;tangent*=tangentSpaceParams.x;bitangent*=tangentSpaceParams.y;float det=max(dot(tangent,tangent),dot(bitangent,bitangent));float invmax=det==0.0 ? 0.0 : inversesqrt(det);return mat3(tangent*invmax,bitangent*invmax,normal);} #endif -`;S.IncludesShadersStore[sH]||(S.IncludesShadersStore[sH]=Pae)});var aH,Dae,cx=C(()=>{k();Zh();aH="bumpFragmentFunctions",Dae=`#if defined(BUMP) +`;T.IncludesShadersStore[_H]||(T.IncludesShadersStore[_H]=$ae)});var gH,Jae,Ex=C(()=>{G();Qh();gH="bumpFragmentFunctions",Jae=`#if defined(BUMP) #include(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump,_SAMPLERNAME_,bump) #endif #if defined(DETAIL) @@ -9101,7 +9101,7 @@ return -texCoordOffset; #endif } #endif -`;S.IncludesShadersStore[aH]||(S.IncludesShadersStore[aH]=Dae)});var oH,Lae,fx=C(()=>{k();oH="bumpFragment",Lae=`vec2 uvOffset=vec2(0.0,0.0); +`;T.IncludesShadersStore[gH]||(T.IncludesShadersStore[gH]=Jae)});var vH,eoe,Sx=C(()=>{G();vH="bumpFragment",eoe=`vec2 uvOffset=vec2(0.0,0.0); #if defined(BUMP) || defined(PARALLAX) || defined(DETAIL) #ifdef NORMALXYSCALE float normalScale=1.0; @@ -9153,7 +9153,7 @@ normalW=perturbNormalBase(TBN,blendedNormal,vBumpInfos.y); #elif defined(DETAIL) detailNormal.xy*=vDetailInfos.z;normalW=perturbNormalBase(TBN,detailNormal,vDetailInfos.z); #endif -`;S.IncludesShadersStore[oH]||(S.IncludesShadersStore[oH]=Lae)});var lH,Oae,Zy=C(()=>{k();lH="decalFragment",Oae=`#ifdef DECAL +`;T.IncludesShadersStore[vH]||(T.IncludesShadersStore[vH]=eoe)});var EH,toe,aP=C(()=>{G();EH="decalFragment",toe=`#ifdef DECAL #ifdef GAMMADECAL decalColor.rgb=toLinearSpace(decalColor.rgb); #endif @@ -9162,10 +9162,10 @@ decalColor.a*=decalColor.a; #endif surfaceAlbedo.rgb=mix(surfaceAlbedo.rgb,decalColor.rgb,decalColor.a); #endif -`;S.IncludesShadersStore[lH]||(S.IncludesShadersStore[lH]=Oae)});var cH,Nae,hx=C(()=>{k();cH="depthPrePass",Nae=`#ifdef DEPTHPREPASS +`;T.IncludesShadersStore[EH]||(T.IncludesShadersStore[EH]=toe)});var SH,ioe,Tx=C(()=>{G();SH="depthPrePass",ioe=`#ifdef DEPTHPREPASS gl_FragColor=vec4(0.,0.,0.,1.0);return; #endif -`;S.IncludesShadersStore[cH]||(S.IncludesShadersStore[cH]=Nae)});var fH,Fae,Qy=C(()=>{k();fH="lightFragment",Fae=`#ifdef LIGHT{X} +`;T.IncludesShadersStore[SH]||(T.IncludesShadersStore[SH]=ioe)});var TH,roe,oP=C(()=>{G();TH="lightFragment",roe=`#ifdef LIGHT{X} #if defined(SHADOWONLY) || defined(LIGHTMAP) && defined(LIGHTMAPEXCLUDED{X}) && defined(LIGHTMAPNOSPECULAR{X}) #else vec4 diffuse{X}=light{X}.vLightDiffuse; @@ -9543,10 +9543,10 @@ sheenBase+=info.sheen.rgb*shadow; #endif #endif #endif -`;S.IncludesShadersStore[fH]||(S.IncludesShadersStore[fH]=Fae)});var hH,wae,dx=C(()=>{k();hH="logDepthFragment",wae=`#ifdef LOGARITHMICDEPTH +`;T.IncludesShadersStore[TH]||(T.IncludesShadersStore[TH]=roe)});var AH,noe,Ax=C(()=>{G();AH="logDepthFragment",noe=`#ifdef LOGARITHMICDEPTH gl_FragDepthEXT=log2(vFragmentDepth)*logarithmicDepthConstant*0.5; #endif -`;S.IncludesShadersStore[hH]||(S.IncludesShadersStore[hH]=wae)});var dH,Bae,ux=C(()=>{k();dH="oitFragment",Bae=`#ifdef ORDER_INDEPENDENT_TRANSPARENCY +`;T.IncludesShadersStore[AH]||(T.IncludesShadersStore[AH]=noe)});var xH,soe,xx=C(()=>{G();xH="oitFragment",soe=`#ifdef ORDER_INDEPENDENT_TRANSPARENCY float fragDepth=gl_FragCoord.z; #ifdef ORDER_INDEPENDENT_TRANSPARENCY_16BITS uint halfFloat=packHalf2x16(vec2(fragDepth));vec2 full=unpackHalf2x16(halfFloat);fragDepth=full.x; @@ -9571,7 +9571,7 @@ if (fragDepth>nearestDepth && fragDepthUae});var Jy,uH,Uae,pH=C(()=>{k();HW();zy();tx();ix();Dm();Ta();rx();nx();QW();sx();Zh();tH();cg();ax();ox();lx();cx();hc();qh();$_();dc();fx();Zy();hx();Qy();dx();eg();ux();Jy="defaultPixelShader",uH=`#define CUSTOM_FRAGMENT_EXTENSION +`;T.IncludesShadersStore[xH]||(T.IncludesShadersStore[xH]=soe)});var bH={};$e(bH,{defaultPixelShader:()=>aoe});var lP,RH,aoe,IH=C(()=>{G();eH();eP();hx();dx();wm();ba();ux();mx();lH();px();Qh();dH();gg();_x();gx();vx();Ex();uc();Zh();og();mc();Sx();aP();Tx();oP();Ax();lg();xx();lP="defaultPixelShader",RH=`#define CUSTOM_FRAGMENT_EXTENSION #include<__decl__defaultFragment> #if defined(BUMP) || !defined(NORMAL) #extension GL_OES_standard_derivatives : enable @@ -9920,10 +9920,10 @@ if (fragDepth==nearestDepth) {frontColor.rgb+=color.rgb*color.a*alphaMultiplier; #endif #define CUSTOM_FRAGMENT_MAIN_END } -`;S.ShadersStore[Jy]||(S.ShadersStore[Jy]=uH);Uae={name:Jy,shader:uH}});var $y,eP,tP,iP,He,mc=C(()=>{kt();Ut();$a();ps();Ht();Ui();dA();uA();x_();Pn();ba();H_();Vi();xa();Tf();Fy();el();z_();yn();_r();mA();pA();_A();gA();$y={effect:null,subMesh:null},eP=class extends Cm(Mm(vr)){},tP=class extends bm(eP){constructor(e){super(e),this.DIFFUSE=!1,this.DIFFUSEDIRECTUV=0,this.BAKED_VERTEX_ANIMATION_TEXTURE=!1,this.AMBIENT=!1,this.AMBIENTDIRECTUV=0,this.OPACITY=!1,this.OPACITYDIRECTUV=0,this.OPACITYRGB=!1,this.REFLECTION=!1,this.EMISSIVE=!1,this.EMISSIVEDIRECTUV=0,this.SPECULAR=!1,this.SPECULARDIRECTUV=0,this.BUMP=!1,this.BUMPDIRECTUV=0,this.PARALLAX=!1,this.PARALLAX_RHS=!1,this.PARALLAXOCCLUSION=!1,this.SPECULAROVERALPHA=!1,this.CLIPPLANE=!1,this.CLIPPLANE2=!1,this.CLIPPLANE3=!1,this.CLIPPLANE4=!1,this.CLIPPLANE5=!1,this.CLIPPLANE6=!1,this.ALPHATEST=!1,this.DEPTHPREPASS=!1,this.ALPHAFROMDIFFUSE=!1,this.POINTSIZE=!1,this.FOG=!1,this.SPECULARTERM=!1,this.DIFFUSEFRESNEL=!1,this.OPACITYFRESNEL=!1,this.REFLECTIONFRESNEL=!1,this.REFRACTIONFRESNEL=!1,this.EMISSIVEFRESNEL=!1,this.FRESNEL=!1,this.NORMAL=!1,this.TANGENT=!1,this.VERTEXCOLOR=!1,this.VERTEXALPHA=!1,this.NUM_BONE_INFLUENCERS=0,this.BonesPerMesh=0,this.BONETEXTURE=!1,this.BONES_VELOCITY_ENABLED=!1,this.INSTANCES=!1,this.THIN_INSTANCES=!1,this.INSTANCESCOLOR=!1,this.GLOSSINESS=!1,this.ROUGHNESS=!1,this.EMISSIVEASILLUMINATION=!1,this.LINKEMISSIVEWITHDIFFUSE=!1,this.REFLECTIONFRESNELFROMSPECULAR=!1,this.LIGHTMAP=!1,this.LIGHTMAPDIRECTUV=0,this.OBJECTSPACE_NORMALMAP=!1,this.USELIGHTMAPASSHADOWMAP=!1,this.REFLECTIONMAP_3D=!1,this.REFLECTIONMAP_SPHERICAL=!1,this.REFLECTIONMAP_PLANAR=!1,this.REFLECTIONMAP_CUBIC=!1,this.USE_LOCAL_REFLECTIONMAP_CUBIC=!1,this.USE_LOCAL_REFRACTIONMAP_CUBIC=!1,this.REFLECTIONMAP_PROJECTION=!1,this.REFLECTIONMAP_SKYBOX=!1,this.REFLECTIONMAP_EXPLICIT=!1,this.REFLECTIONMAP_EQUIRECTANGULAR=!1,this.REFLECTIONMAP_EQUIRECTANGULAR_FIXED=!1,this.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED=!1,this.REFLECTIONMAP_OPPOSITEZ=!1,this.INVERTCUBICMAP=!1,this.LOGARITHMICDEPTH=!1,this.REFRACTION=!1,this.REFRACTIONMAP_3D=!1,this.REFLECTIONOVERALPHA=!1,this.TWOSIDEDLIGHTING=!1,this.SHADOWFLOAT=!1,this.MORPHTARGETS=!1,this.MORPHTARGETS_POSITION=!1,this.MORPHTARGETS_NORMAL=!1,this.MORPHTARGETS_TANGENT=!1,this.MORPHTARGETS_UV=!1,this.MORPHTARGETS_UV2=!1,this.MORPHTARGETS_COLOR=!1,this.MORPHTARGETTEXTURE_HASPOSITIONS=!1,this.MORPHTARGETTEXTURE_HASNORMALS=!1,this.MORPHTARGETTEXTURE_HASTANGENTS=!1,this.MORPHTARGETTEXTURE_HASUVS=!1,this.MORPHTARGETTEXTURE_HASUV2S=!1,this.MORPHTARGETTEXTURE_HASCOLORS=!1,this.NUM_MORPH_INFLUENCERS=0,this.MORPHTARGETS_TEXTURE=!1,this.NONUNIFORMSCALING=!1,this.PREMULTIPLYALPHA=!1,this.ALPHATEST_AFTERALLALPHACOMPUTATIONS=!1,this.ALPHABLEND=!0,this.RGBDLIGHTMAP=!1,this.RGBDREFLECTION=!1,this.RGBDREFRACTION=!1,this.MULTIVIEW=!1,this.ORDER_INDEPENDENT_TRANSPARENCY=!1,this.ORDER_INDEPENDENT_TRANSPARENCY_16BITS=!1,this.CAMERA_ORTHOGRAPHIC=!1,this.CAMERA_PERSPECTIVE=!1,this.AREALIGHTSUPPORTED=!0,this.USE_VERTEX_PULLING=!1,this.VERTEX_PULLING_USE_INDEX_BUFFER=!1,this.VERTEX_PULLING_INDEX_BUFFER_32BITS=!1,this.RIGHT_HANDED=!1,this.CLUSTLIGHT_SLICES=0,this.CLUSTLIGHT_BATCH=0,this.IS_REFLECTION_LINEAR=!1,this.IS_REFRACTION_LINEAR=!1,this.DECAL_AFTER_DETAIL=!1,this.rebuild()}},iP=class extends ym(nl){},He=class n extends iP{get isPrePassCapable(){return!this.disableDepthWrite}get canRenderToMRT(){return!0}constructor(e,t,i=!1){super(e,t,void 0,i||n.ForceGLSL),this._diffuseTexture=null,this._ambientTexture=null,this._opacityTexture=null,this._reflectionTexture=null,this._emissiveTexture=null,this._specularTexture=null,this._bumpTexture=null,this._lightmapTexture=null,this._refractionTexture=null,this.ambientColor=new Te(0,0,0),this.diffuseColor=new Te(1,1,1),this.specularColor=new Te(1,1,1),this.emissiveColor=new Te(0,0,0),this.specularPower=64,this._useAlphaFromDiffuseTexture=!1,this._useEmissiveAsIllumination=!1,this._linkEmissiveWithDiffuse=!1,this._useSpecularOverAlpha=!1,this._useReflectionOverAlpha=!1,this._disableLighting=!1,this._useObjectSpaceNormalMap=!1,this._useParallax=!1,this._useParallaxOcclusion=!1,this.parallaxScaleBias=.05,this._roughness=0,this.indexOfRefraction=.98,this.invertRefractionY=!0,this.alphaCutOff=.4,this._useLightmapAsShadowmap=!1,this._useReflectionFresnelFromSpecular=!1,this._useGlossinessFromSpecularMapAlpha=!1,this._maxSimultaneousLights=4,this._invertNormalMapX=!1,this._invertNormalMapY=!1,this._twoSidedLighting=!1,this._applyDecalMapAfterDetailMap=!1,this._shadersLoaded=!1,this._vertexPullingMetadata=null,this._renderTargets=new Fi(16),this._globalAmbientColor=new Te(0,0,0),this._cacheHasRenderTargetTextures=!1,this.detailMap=new Ia(this),this._attachImageProcessingConfiguration(null),this.prePassConfiguration=new Ts,this.getRenderTargetTextures=()=>(this._renderTargets.reset(),n.ReflectionTextureEnabled&&this._reflectionTexture&&this._reflectionTexture.isRenderTarget&&this._renderTargets.push(this._reflectionTexture),n.RefractionTextureEnabled&&this._refractionTexture&&this._refractionTexture.isRenderTarget&&this._renderTargets.push(this._refractionTexture),this._eventInfo.renderTargets=this._renderTargets,this._callbackPluginEventFillRenderTargetTextures(this._eventInfo),this._renderTargets)}get hasRenderTargetTextures(){return n.ReflectionTextureEnabled&&this._reflectionTexture&&this._reflectionTexture.isRenderTarget||n.RefractionTextureEnabled&&this._refractionTexture&&this._refractionTexture.isRenderTarget?!0:this._cacheHasRenderTargetTextures}getClassName(){return"StandardMaterial"}needAlphaBlending(){return this._hasTransparencyMode?this._transparencyModeIsBlend:this._disableAlphaBlending?!1:this.alpha<1||this._opacityTexture!=null||this._shouldUseAlphaFromDiffuseTexture()||this._opacityFresnelParameters&&this._opacityFresnelParameters.isEnabled}needAlphaTesting(){return this._hasTransparencyMode?this._transparencyModeIsTest:this._hasAlphaChannel()&&(this._transparencyMode==null||this._transparencyMode===ve.MATERIAL_ALPHATEST)}_shouldUseAlphaFromDiffuseTexture(){return this._diffuseTexture!=null&&this._diffuseTexture.hasAlpha&&this._useAlphaFromDiffuseTexture&&this._transparencyMode!==ve.MATERIAL_OPAQUE}_hasAlphaChannel(){return this._diffuseTexture!=null&&this._diffuseTexture.hasAlpha||this._opacityTexture!=null}getAlphaTestTexture(){return this._diffuseTexture}isReadyForSubMesh(e,t,i=!1){this._uniformBufferLayoutBuilt||this.buildUniformLayout();let r=t._drawWrapper;if(r.effect&&this.isFrozen&&r._wasPreviouslyReady&&r._wasPreviouslyUsingInstances===i)return!0;t.materialDefines||(this._callbackPluginEventGeneric(4,this._eventInfo),t.materialDefines=new tP(this._eventInfo.defineNames));let s=this.getScene(),a=t.materialDefines;if(this._isReadyForSubMesh(t))return!0;let o=s.getEngine();if(a._needNormals=lm(s,e,a,!0,this._maxSimultaneousLights,this._disableLighting),!om(s,e,this._maxSimultaneousLights,this._disableLighting))return!1;hm(s,a);let l=this.needAlphaBlendingForMesh(e)&&this.getScene().useOrderIndependentTransparency;if(um(s,a,this.canRenderToMRT&&!l),dm(s,a,l),Nn.PrepareDefines(o.currentRenderPassId,e,a),a._areTexturesDirty){this._eventInfo.hasRenderTargetTextures=!1,this._callbackPluginEventHasRenderTargetTextures(this._eventInfo),this._cacheHasRenderTargetTextures=this._eventInfo.hasRenderTargetTextures,a._needUVs=!1;for(let f=1;f<=6;++f)a["MAINUV"+f]=!1;if(s.texturesEnabled){if(a.DIFFUSEDIRECTUV=0,a.BUMPDIRECTUV=0,a.AMBIENTDIRECTUV=0,a.OPACITYDIRECTUV=0,a.EMISSIVEDIRECTUV=0,a.SPECULARDIRECTUV=0,a.LIGHTMAPDIRECTUV=0,this._diffuseTexture&&n.DiffuseTextureEnabled)if(this._diffuseTexture.isReadyOrNotBlocking())ri(this._diffuseTexture,a,"DIFFUSE");else return!1;else a.DIFFUSE=!1;if(this._ambientTexture&&n.AmbientTextureEnabled)if(this._ambientTexture.isReadyOrNotBlocking())ri(this._ambientTexture,a,"AMBIENT");else return!1;else a.AMBIENT=!1;if(this._opacityTexture&&n.OpacityTextureEnabled)if(this._opacityTexture.isReadyOrNotBlocking())ri(this._opacityTexture,a,"OPACITY"),a.OPACITYRGB=this._opacityTexture.getAlphaFromRGB;else return!1;else a.OPACITY=!1;if(this._reflectionTexture&&n.ReflectionTextureEnabled?(a.ROUGHNESS=this._roughness>0,a.REFLECTIONOVERALPHA=this._useReflectionOverAlpha):(a.ROUGHNESS=!1,a.REFLECTIONOVERALPHA=!1),!uf(s,this._reflectionTexture,a))return!1;if(this._emissiveTexture&&n.EmissiveTextureEnabled)if(this._emissiveTexture.isReadyOrNotBlocking())ri(this._emissiveTexture,a,"EMISSIVE");else return!1;else a.EMISSIVE=!1;if(this._lightmapTexture&&n.LightmapTextureEnabled)if(this._lightmapTexture.isReadyOrNotBlocking())ri(this._lightmapTexture,a,"LIGHTMAP"),a.USELIGHTMAPASSHADOWMAP=this._useLightmapAsShadowmap,a.RGBDLIGHTMAP=this._lightmapTexture.isRGBD;else return!1;else a.LIGHTMAP=!1;if(this._specularTexture&&n.SpecularTextureEnabled)if(this._specularTexture.isReadyOrNotBlocking())ri(this._specularTexture,a,"SPECULAR"),a.GLOSSINESS=this._useGlossinessFromSpecularMapAlpha;else return!1;else a.SPECULAR=!1;if(s.getEngine().getCaps().standardDerivatives&&this._bumpTexture&&n.BumpTextureEnabled){if(this._bumpTexture.isReady())ri(this._bumpTexture,a,"BUMP"),a.PARALLAX=this._useParallax,a.PARALLAX_RHS=s.useRightHandedSystem,a.PARALLAXOCCLUSION=this._useParallaxOcclusion;else return!1;a.OBJECTSPACE_NORMALMAP=this._useObjectSpaceNormalMap}else a.BUMP=!1,a.PARALLAX=!1,a.PARALLAX_RHS=!1,a.PARALLAXOCCLUSION=!1;if(this._refractionTexture&&n.RefractionTextureEnabled)if(this._refractionTexture.isReadyOrNotBlocking())a._needUVs=!0,a.REFRACTION=!0,a.REFRACTIONMAP_3D=this._refractionTexture.isCube,a.RGBDREFRACTION=this._refractionTexture.isRGBD,a.USE_LOCAL_REFRACTIONMAP_CUBIC=!!this._refractionTexture.boundingBoxSize;else return!1;else a.REFRACTION=!1;a.TWOSIDEDLIGHTING=!this._backFaceCulling&&this._twoSidedLighting}else a.DIFFUSE=!1,a.AMBIENT=!1,a.OPACITY=!1,a.REFLECTION=!1,a.EMISSIVE=!1,a.LIGHTMAP=!1,a.BUMP=!1,a.REFRACTION=!1;a.ALPHAFROMDIFFUSE=this._shouldUseAlphaFromDiffuseTexture(),a.EMISSIVEASILLUMINATION=this._useEmissiveAsIllumination,a.LINKEMISSIVEWITHDIFFUSE=this._linkEmissiveWithDiffuse,a.SPECULAROVERALPHA=this._useSpecularOverAlpha,a.PREMULTIPLYALPHA=this.alphaMode===7||this.alphaMode===8,a.ALPHATEST_AFTERALLALPHACOMPUTATIONS=this.transparencyMode!==null,a.ALPHABLEND=this.transparencyMode===null||this.needAlphaBlendingForMesh(e)}if(this._eventInfo.isReadyForSubMesh=!0,this._eventInfo.defines=a,this._eventInfo.subMesh=t,this._callbackPluginEventIsReadyForSubMesh(this._eventInfo),!this._eventInfo.isReadyForSubMesh)return!1;if(a._areImageProcessingDirty&&this._imageProcessingConfiguration){if(!this._imageProcessingConfiguration.isReady())return!1;this._imageProcessingConfiguration.prepareDefines(a),a.IS_REFLECTION_LINEAR=this.reflectionTexture!=null&&!this.reflectionTexture.gammaSpace,a.IS_REFRACTION_LINEAR=this.refractionTexture!=null&&!this.refractionTexture.gammaSpace}if(a._areFresnelDirty&&(n.FresnelEnabled?(this._diffuseFresnelParameters||this._opacityFresnelParameters||this._emissiveFresnelParameters||this._refractionFresnelParameters||this._reflectionFresnelParameters)&&(a.DIFFUSEFRESNEL=this._diffuseFresnelParameters&&this._diffuseFresnelParameters.isEnabled,a.OPACITYFRESNEL=this._opacityFresnelParameters&&this._opacityFresnelParameters.isEnabled,a.REFLECTIONFRESNEL=this._reflectionFresnelParameters&&this._reflectionFresnelParameters.isEnabled,a.REFLECTIONFRESNELFROMSPECULAR=this._useReflectionFresnelFromSpecular,a.REFRACTIONFRESNEL=this._refractionFresnelParameters&&this._refractionFresnelParameters.isEnabled,a.EMISSIVEFRESNEL=this._emissiveFresnelParameters&&this._emissiveFresnelParameters.isEnabled,a._needNormals=!0,a.FRESNEL=!0):a.FRESNEL=!1),a.AREALIGHTUSED||a.CLUSTLIGHT_BATCH){for(let f=0;f{m.push(`vp_${y}_info`)}))}else this._vertexPullingMetadata=null;let v={};this.customShaderNameResolve&&(u=this.customShaderNameResolve(u,m,p,_,a,d,v));let x=a.toString(),A=t.effect,E=s.getEngine().createEffect(u,{attributes:d,uniformsNames:m,uniformBuffersNames:p,samplers:_,defines:x,fallbacks:h,onCompiled:this.onCompiled,onError:this.onError,indexParameters:g,processFinalCode:v.processFinalCode,processCodeAfterIncludes:this._eventInfo.customCode,multiTarget:a.PREPASS,shaderLanguage:this._shaderLanguage,extraInitializationsAsync:this._shadersLoaded?void 0:async()=>{this._shaderLanguage===1?await Promise.all([Promise.resolve().then(()=>(kk(),Gk)),Promise.resolve().then(()=>(dW(),hW))]):await Promise.all([Promise.resolve().then(()=>(GW(),VW)),Promise.resolve().then(()=>(pH(),mH))]),this._shadersLoaded=!0}},o);if(this._eventInfo.customCode=void 0,E)if(this._onEffectCreatedObservable&&($y.effect=E,$y.subMesh=t,this._onEffectCreatedObservable.notifyObservers($y)),this.allowShaderHotSwapping&&A&&!E.isReady()){if(a.markAsUnprocessed(),c=this.isFrozen,f)return a._areLightsDisposed=!0,!1}else s.resetCachedMaterial(),t.setEffect(E,a,this._materialContext)}return!t.effect||!t.effect.isReady()?!1:(a._renderId=s.getRenderId(),r._wasPreviouslyReady=!c,r._wasPreviouslyUsingInstances=i,this._checkScenePerformancePriority(),!0)}buildUniformLayout(){let e=this._uniformBuffer;e.addUniform("diffuseLeftColor",4),e.addUniform("diffuseRightColor",4),e.addUniform("opacityParts",4),e.addUniform("reflectionLeftColor",4),e.addUniform("reflectionRightColor",4),e.addUniform("refractionLeftColor",4),e.addUniform("refractionRightColor",4),e.addUniform("emissiveLeftColor",4),e.addUniform("emissiveRightColor",4),e.addUniform("vDiffuseInfos",2),e.addUniform("vAmbientInfos",2),e.addUniform("vOpacityInfos",2),e.addUniform("vEmissiveInfos",2),e.addUniform("vLightmapInfos",2),e.addUniform("vSpecularInfos",2),e.addUniform("vBumpInfos",3),e.addUniform("diffuseMatrix",16),e.addUniform("ambientMatrix",16),e.addUniform("opacityMatrix",16),e.addUniform("emissiveMatrix",16),e.addUniform("lightmapMatrix",16),e.addUniform("specularMatrix",16),e.addUniform("bumpMatrix",16),e.addUniform("vTangentSpaceParams",2),e.addUniform("pointSize",1),e.addUniform("alphaCutOff",1),e.addUniform("refractionMatrix",16),e.addUniform("vRefractionInfos",4),e.addUniform("vRefractionPosition",3),e.addUniform("vRefractionSize",3),e.addUniform("vSpecularColor",4),e.addUniform("vEmissiveColor",3),e.addUniform("vDiffuseColor",4),e.addUniform("vAmbientColor",3),e.addUniform("cameraInfo",4),pm(e,!1,!0),super.buildUniformLayout()}bindForSubMesh(e,t,i){var f;let r=this.getScene(),s=i.materialDefines;if(!s)return;let a=i.effect;if(!a)return;this._activeEffect=a,t.getMeshUniformBuffer().bindToEffect(a,"Mesh"),t.transferToEffect(e),this._uniformBuffer.bindToEffect(a,"Material"),this.prePassConfiguration.bindForSubMesh(this._activeEffect,r,t,e,this.isFrozen),Nn.Bind(r.getEngine().currentRenderPassId,this._activeEffect,t,e,this);let o=r.activeCamera;o?this._uniformBuffer.updateFloat4("cameraInfo",o.minZ,o.maxZ,0,0):this._uniformBuffer.updateFloat4("cameraInfo",0,0,0,0),this._eventInfo.subMesh=i,this._callbackPluginEventHardBindForSubMesh(this._eventInfo),s.OBJECTSPACE_NORMALMAP&&(e.toNormalMatrix(this._normalMatrix),this.bindOnlyNormalMatrix(this._normalMatrix));let l=this._mustRebind(r,a,i,t.visibility);gs(t,a),this._vertexPullingMetadata&&xf(a,this._vertexPullingMetadata);let c=this._uniformBuffer;if(l){if(this.bindViewProjection(a),!c.useUbo||!this.isFrozen||!c.isSync||i._drawWrapper._forceRebindOnNextCall){if(n.FresnelEnabled&&s.FRESNEL){if(this.diffuseFresnelParameters&&this.diffuseFresnelParameters.isEnabled&&(c.updateColor4("diffuseLeftColor",this.diffuseFresnelParameters.leftColor,this.diffuseFresnelParameters.power),c.updateColor4("diffuseRightColor",this.diffuseFresnelParameters.rightColor,this.diffuseFresnelParameters.bias)),this.opacityFresnelParameters&&this.opacityFresnelParameters.isEnabled){let h=un.Color3[0];h.set(this.opacityFresnelParameters.leftColor.toLuminance(),this.opacityFresnelParameters.rightColor.toLuminance(),this.opacityFresnelParameters.bias),c.updateColor4("opacityParts",h,this.opacityFresnelParameters.power)}this.reflectionFresnelParameters&&this.reflectionFresnelParameters.isEnabled&&(c.updateColor4("reflectionLeftColor",this.reflectionFresnelParameters.leftColor,this.reflectionFresnelParameters.power),c.updateColor4("reflectionRightColor",this.reflectionFresnelParameters.rightColor,this.reflectionFresnelParameters.bias)),this.refractionFresnelParameters&&this.refractionFresnelParameters.isEnabled&&(c.updateColor4("refractionLeftColor",this.refractionFresnelParameters.leftColor,this.refractionFresnelParameters.power),c.updateColor4("refractionRightColor",this.refractionFresnelParameters.rightColor,this.refractionFresnelParameters.bias)),this.emissiveFresnelParameters&&this.emissiveFresnelParameters.isEnabled&&(c.updateColor4("emissiveLeftColor",this.emissiveFresnelParameters.leftColor,this.emissiveFresnelParameters.power),c.updateColor4("emissiveRightColor",this.emissiveFresnelParameters.rightColor,this.emissiveFresnelParameters.bias))}if(r.texturesEnabled&&(this._diffuseTexture&&n.DiffuseTextureEnabled&&(c.updateFloat2("vDiffuseInfos",this._diffuseTexture.coordinatesIndex,this._diffuseTexture.level),ni(this._diffuseTexture,c,"diffuse")),this._ambientTexture&&n.AmbientTextureEnabled&&(c.updateFloat2("vAmbientInfos",this._ambientTexture.coordinatesIndex,this._ambientTexture.level),ni(this._ambientTexture,c,"ambient")),this._opacityTexture&&n.OpacityTextureEnabled&&(c.updateFloat2("vOpacityInfos",this._opacityTexture.coordinatesIndex,this._opacityTexture.level),ni(this._opacityTexture,c,"opacity")),this._hasAlphaChannel()&&c.updateFloat("alphaCutOff",this.alphaCutOff),em(r,s,c,Te.White(),this._reflectionTexture,!1,!1,!0,!1,!1,!1,this.roughness),(!this._reflectionTexture||!n.ReflectionTextureEnabled)&&c.updateFloat2("vReflectionInfos",0,this.roughness),this._emissiveTexture&&n.EmissiveTextureEnabled&&(c.updateFloat2("vEmissiveInfos",this._emissiveTexture.coordinatesIndex,this._emissiveTexture.level),ni(this._emissiveTexture,c,"emissive")),this._lightmapTexture&&n.LightmapTextureEnabled&&(c.updateFloat2("vLightmapInfos",this._lightmapTexture.coordinatesIndex,this._lightmapTexture.level),ni(this._lightmapTexture,c,"lightmap")),this._specularTexture&&n.SpecularTextureEnabled&&(c.updateFloat2("vSpecularInfos",this._specularTexture.coordinatesIndex,this._specularTexture.level),ni(this._specularTexture,c,"specular")),this._bumpTexture&&r.getEngine().getCaps().standardDerivatives&&n.BumpTextureEnabled&&(c.updateFloat3("vBumpInfos",this._bumpTexture.coordinatesIndex,1/this._bumpTexture.level,this.parallaxScaleBias),ni(this._bumpTexture,c,"bump"),r._mirroredCameraPosition?c.updateFloat2("vTangentSpaceParams",this._invertNormalMapX?1:-1,this._invertNormalMapY?1:-1):c.updateFloat2("vTangentSpaceParams",this._invertNormalMapX?-1:1,this._invertNormalMapY?-1:1)),this._refractionTexture&&n.RefractionTextureEnabled)){let h=1;if(this._refractionTexture.isCube||(c.updateMatrix("refractionMatrix",this._refractionTexture.getReflectionTextureMatrix()),this._refractionTexture.depth&&(h=this._refractionTexture.depth)),c.updateFloat4("vRefractionInfos",this._refractionTexture.level,this.indexOfRefraction,h,this.invertRefractionY?-1:1),this._refractionTexture.boundingBoxSize){let d=this._refractionTexture;c.updateVector3("vRefractionPosition",d.boundingBoxPosition),c.updateVector3("vRefractionSize",d.boundingBoxSize)}}this.pointsCloud&&c.updateFloat("pointSize",this.pointSize),c.updateColor4("vSpecularColor",this.specularColor,this.specularPower),c.updateColor3("vEmissiveColor",n.EmissiveTextureEnabled?this.emissiveColor:Te.BlackReadOnly),c.updateColor4("vDiffuseColor",this.diffuseColor,this.alpha),r.ambientColor.multiplyToRef(this.ambientColor,this._globalAmbientColor),c.updateColor3("vAmbientColor",this._globalAmbientColor)}r.texturesEnabled&&(this._diffuseTexture&&n.DiffuseTextureEnabled&&a.setTexture("diffuseSampler",this._diffuseTexture),this._ambientTexture&&n.AmbientTextureEnabled&&a.setTexture("ambientSampler",this._ambientTexture),this._opacityTexture&&n.OpacityTextureEnabled&&a.setTexture("opacitySampler",this._opacityTexture),this._reflectionTexture&&n.ReflectionTextureEnabled&&(this._reflectionTexture.isCube?a.setTexture("reflectionCubeSampler",this._reflectionTexture):a.setTexture("reflection2DSampler",this._reflectionTexture)),this._emissiveTexture&&n.EmissiveTextureEnabled&&a.setTexture("emissiveSampler",this._emissiveTexture),this._lightmapTexture&&n.LightmapTextureEnabled&&a.setTexture("lightmapSampler",this._lightmapTexture),this._specularTexture&&n.SpecularTextureEnabled&&a.setTexture("specularSampler",this._specularTexture),this._bumpTexture&&r.getEngine().getCaps().standardDerivatives&&n.BumpTextureEnabled&&a.setTexture("bumpSampler",this._bumpTexture),this._refractionTexture&&n.RefractionTextureEnabled&&(this._refractionTexture.isCube?a.setTexture("refractionCubeSampler",this._refractionTexture):a.setTexture("refraction2DSampler",this._refractionTexture))),this.getScene().useOrderIndependentTransparency&&this.needAlphaBlendingForMesh(t)&&this.getScene().depthPeelingRenderer.bind(a),this._eventInfo.subMesh=i,this._callbackPluginEventBindForSubMesh(this._eventInfo),Mn(a,this,r),this.bindEyePosition(a)}else r.getEngine()._features.needToAlwaysBindUniformBuffers&&(this._needToBindSceneUbo=!0);(l||!this.isFrozen)&&(r.lightsEnabled&&!this._disableLighting&&im(r,t,a,s,this._maxSimultaneousLights),(r.fogEnabled&&t.applyFog&&r.fogMode!==Qt.FOGMODE_NONE||this._reflectionTexture||this._refractionTexture||t.receiveShadows||s.PREPASS||s.CLUSTLIGHT_BATCH)&&this.bindView(a),hf(r,t,a),s.NUM_MORPH_INFLUENCERS&&Cn(t,a),s.BAKED_VERTEX_ANIMATION_TEXTURE&&((f=t.bakedVertexAnimationManager)==null||f.bind(a,s.INSTANCES)),this.useLogarithmicDepth&&ff(s,a,r),this._imageProcessingConfiguration&&!this._imageProcessingConfiguration.applyByPostProcess&&this._imageProcessingConfiguration.bind(this._activeEffect)),this._afterBind(t,this._activeEffect,i),c.update()}getAnimatables(){let e=super.getAnimatables();return this._diffuseTexture&&this._diffuseTexture.animations&&this._diffuseTexture.animations.length>0&&e.push(this._diffuseTexture),this._ambientTexture&&this._ambientTexture.animations&&this._ambientTexture.animations.length>0&&e.push(this._ambientTexture),this._opacityTexture&&this._opacityTexture.animations&&this._opacityTexture.animations.length>0&&e.push(this._opacityTexture),this._reflectionTexture&&this._reflectionTexture.animations&&this._reflectionTexture.animations.length>0&&e.push(this._reflectionTexture),this._emissiveTexture&&this._emissiveTexture.animations&&this._emissiveTexture.animations.length>0&&e.push(this._emissiveTexture),this._specularTexture&&this._specularTexture.animations&&this._specularTexture.animations.length>0&&e.push(this._specularTexture),this._bumpTexture&&this._bumpTexture.animations&&this._bumpTexture.animations.length>0&&e.push(this._bumpTexture),this._lightmapTexture&&this._lightmapTexture.animations&&this._lightmapTexture.animations.length>0&&e.push(this._lightmapTexture),this._refractionTexture&&this._refractionTexture.animations&&this._refractionTexture.animations.length>0&&e.push(this._refractionTexture),e}getActiveTextures(){let e=super.getActiveTextures();return this._diffuseTexture&&e.push(this._diffuseTexture),this._ambientTexture&&e.push(this._ambientTexture),this._opacityTexture&&e.push(this._opacityTexture),this._reflectionTexture&&e.push(this._reflectionTexture),this._emissiveTexture&&e.push(this._emissiveTexture),this._specularTexture&&e.push(this._specularTexture),this._bumpTexture&&e.push(this._bumpTexture),this._lightmapTexture&&e.push(this._lightmapTexture),this._refractionTexture&&e.push(this._refractionTexture),e}hasTexture(e){return!!(super.hasTexture(e)||this._diffuseTexture===e||this._ambientTexture===e||this._opacityTexture===e||this._reflectionTexture===e||this._emissiveTexture===e||this._specularTexture===e||this._bumpTexture===e||this._lightmapTexture===e||this._refractionTexture===e)}dispose(e,t){var i,r,s,a,o,l,c,f,h;t&&((i=this._diffuseTexture)==null||i.dispose(),(r=this._ambientTexture)==null||r.dispose(),(s=this._opacityTexture)==null||s.dispose(),(a=this._reflectionTexture)==null||a.dispose(),(o=this._emissiveTexture)==null||o.dispose(),(l=this._specularTexture)==null||l.dispose(),(c=this._bumpTexture)==null||c.dispose(),(f=this._lightmapTexture)==null||f.dispose(),(h=this._refractionTexture)==null||h.dispose()),this._imageProcessingConfiguration&&this._imageProcessingObserver&&this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver),super.dispose(e,t)}clone(e,t=!0,i=""){let r=tt.Clone(()=>new n(e,this.getScene()),this,{cloneTexturesOnlyOnce:t});return r.name=e,r.id=e,this.stencil.copyTo(r.stencil),this._clonePlugins(r,i),r}static Parse(e,t,i){let r=tt.Parse(()=>new n(e.name,t),e,t,i);return e.stencil&&r.stencil.parse(e.stencil,t,i),ve._ParsePlugins(e,r,t,i),r}static get DiffuseTextureEnabled(){return le.DiffuseTextureEnabled}static set DiffuseTextureEnabled(e){le.DiffuseTextureEnabled=e}static get DetailTextureEnabled(){return le.DetailTextureEnabled}static set DetailTextureEnabled(e){le.DetailTextureEnabled=e}static get AmbientTextureEnabled(){return le.AmbientTextureEnabled}static set AmbientTextureEnabled(e){le.AmbientTextureEnabled=e}static get OpacityTextureEnabled(){return le.OpacityTextureEnabled}static set OpacityTextureEnabled(e){le.OpacityTextureEnabled=e}static get ReflectionTextureEnabled(){return le.ReflectionTextureEnabled}static set ReflectionTextureEnabled(e){le.ReflectionTextureEnabled=e}static get EmissiveTextureEnabled(){return le.EmissiveTextureEnabled}static set EmissiveTextureEnabled(e){le.EmissiveTextureEnabled=e}static get SpecularTextureEnabled(){return le.SpecularTextureEnabled}static set SpecularTextureEnabled(e){le.SpecularTextureEnabled=e}static get BumpTextureEnabled(){return le.BumpTextureEnabled}static set BumpTextureEnabled(e){le.BumpTextureEnabled=e}static get LightmapTextureEnabled(){return le.LightmapTextureEnabled}static set LightmapTextureEnabled(e){le.LightmapTextureEnabled=e}static get RefractionTextureEnabled(){return le.RefractionTextureEnabled}static set RefractionTextureEnabled(e){le.RefractionTextureEnabled=e}static get ColorGradingTextureEnabled(){return le.ColorGradingTextureEnabled}static set ColorGradingTextureEnabled(e){le.ColorGradingTextureEnabled=e}static get FresnelEnabled(){return le.FresnelEnabled}static set FresnelEnabled(e){le.FresnelEnabled=e}};He.ForceGLSL=!1;P([Bt("diffuseTexture")],He.prototype,"_diffuseTexture",void 0);P([oe("_markAllSubMeshesAsTexturesAndMiscDirty")],He.prototype,"diffuseTexture",void 0);P([Bt("ambientTexture")],He.prototype,"_ambientTexture",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"ambientTexture",void 0);P([Bt("opacityTexture")],He.prototype,"_opacityTexture",void 0);P([oe("_markAllSubMeshesAsTexturesAndMiscDirty")],He.prototype,"opacityTexture",void 0);P([Bt("reflectionTexture")],He.prototype,"_reflectionTexture",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"reflectionTexture",void 0);P([Bt("emissiveTexture")],He.prototype,"_emissiveTexture",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"emissiveTexture",void 0);P([Bt("specularTexture")],He.prototype,"_specularTexture",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"specularTexture",void 0);P([Bt("bumpTexture")],He.prototype,"_bumpTexture",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"bumpTexture",void 0);P([Bt("lightmapTexture")],He.prototype,"_lightmapTexture",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"lightmapTexture",void 0);P([Bt("refractionTexture")],He.prototype,"_refractionTexture",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"refractionTexture",void 0);P([dr("ambient")],He.prototype,"ambientColor",void 0);P([dr("diffuse")],He.prototype,"diffuseColor",void 0);P([dr("specular")],He.prototype,"specularColor",void 0);P([dr("emissive")],He.prototype,"emissiveColor",void 0);P([F()],He.prototype,"specularPower",void 0);P([F("useAlphaFromDiffuseTexture")],He.prototype,"_useAlphaFromDiffuseTexture",void 0);P([oe("_markAllSubMeshesAsTexturesAndMiscDirty")],He.prototype,"useAlphaFromDiffuseTexture",void 0);P([F("useEmissiveAsIllumination")],He.prototype,"_useEmissiveAsIllumination",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"useEmissiveAsIllumination",void 0);P([F("linkEmissiveWithDiffuse")],He.prototype,"_linkEmissiveWithDiffuse",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"linkEmissiveWithDiffuse",void 0);P([F("useSpecularOverAlpha")],He.prototype,"_useSpecularOverAlpha",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"useSpecularOverAlpha",void 0);P([F("useReflectionOverAlpha")],He.prototype,"_useReflectionOverAlpha",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"useReflectionOverAlpha",void 0);P([F("disableLighting")],He.prototype,"_disableLighting",void 0);P([oe("_markAllSubMeshesAsLightsDirty")],He.prototype,"disableLighting",void 0);P([F("useObjectSpaceNormalMap")],He.prototype,"_useObjectSpaceNormalMap",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"useObjectSpaceNormalMap",void 0);P([F("useParallax")],He.prototype,"_useParallax",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"useParallax",void 0);P([F("useParallaxOcclusion")],He.prototype,"_useParallaxOcclusion",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"useParallaxOcclusion",void 0);P([F()],He.prototype,"parallaxScaleBias",void 0);P([F("roughness")],He.prototype,"_roughness",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"roughness",void 0);P([F()],He.prototype,"indexOfRefraction",void 0);P([F()],He.prototype,"invertRefractionY",void 0);P([F()],He.prototype,"alphaCutOff",void 0);P([F("useLightmapAsShadowmap")],He.prototype,"_useLightmapAsShadowmap",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"useLightmapAsShadowmap",void 0);P([Fu("diffuseFresnelParameters")],He.prototype,"_diffuseFresnelParameters",void 0);P([oe("_markAllSubMeshesAsFresnelDirty")],He.prototype,"diffuseFresnelParameters",void 0);P([Fu("opacityFresnelParameters")],He.prototype,"_opacityFresnelParameters",void 0);P([oe("_markAllSubMeshesAsFresnelAndMiscDirty")],He.prototype,"opacityFresnelParameters",void 0);P([Fu("reflectionFresnelParameters")],He.prototype,"_reflectionFresnelParameters",void 0);P([oe("_markAllSubMeshesAsFresnelDirty")],He.prototype,"reflectionFresnelParameters",void 0);P([Fu("refractionFresnelParameters")],He.prototype,"_refractionFresnelParameters",void 0);P([oe("_markAllSubMeshesAsFresnelDirty")],He.prototype,"refractionFresnelParameters",void 0);P([Fu("emissiveFresnelParameters")],He.prototype,"_emissiveFresnelParameters",void 0);P([oe("_markAllSubMeshesAsFresnelDirty")],He.prototype,"emissiveFresnelParameters",void 0);P([F("useReflectionFresnelFromSpecular")],He.prototype,"_useReflectionFresnelFromSpecular",void 0);P([oe("_markAllSubMeshesAsFresnelDirty")],He.prototype,"useReflectionFresnelFromSpecular",void 0);P([F("useGlossinessFromSpecularMapAlpha")],He.prototype,"_useGlossinessFromSpecularMapAlpha",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"useGlossinessFromSpecularMapAlpha",void 0);P([F("maxSimultaneousLights")],He.prototype,"_maxSimultaneousLights",void 0);P([oe("_markAllSubMeshesAsLightsDirty")],He.prototype,"maxSimultaneousLights",void 0);P([F("invertNormalMapX")],He.prototype,"_invertNormalMapX",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"invertNormalMapX",void 0);P([F("invertNormalMapY")],He.prototype,"_invertNormalMapY",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"invertNormalMapY",void 0);P([F("twoSidedLighting")],He.prototype,"_twoSidedLighting",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"twoSidedLighting",void 0);P([F("applyDecalMapAfterDetailMap")],He.prototype,"_applyDecalMapAfterDetailMap",void 0);P([oe("_markAllSubMeshesAsMiscDirty")],He.prototype,"applyDecalMapAfterDetailMap",void 0);wt("BABYLON.StandardMaterial",He);Qt.DefaultMaterialFactory=n=>new He("default material",n)});function px(n,e,t,i,r,s=!1){let a=Hr.Zero();return fg(n,e,t,i,a,r,s),a}function fg(n,e,t,i,r,s,a=!1,o=!1){let l=n.getEngine();if(!s&&!(s=n.activeCamera)&&!(s=n.cameraToUseForPointers))return n;let c=s.viewport,f=l.getRenderHeight(),{x:h,y:d,width:u,height:m}=c.toGlobal(l.getRenderWidth(),f),_=1/l.getHardwareScalingLevel();return e=e*_-h,t=t*_-(f-d-m),r.update(e,t,u,m,i||K.IdentityReadOnly,a?K.IdentityReadOnly:s.getViewMatrix(),s.getProjectionMatrix(),o),n}function vH(n,e,t,i){let r=Hr.Zero();return rP(n,e,t,r,i),r}function rP(n,e,t,i,r){if(!Hn)return n;let s=n.getEngine();if(!r&&!(r=n.activeCamera)&&!(r=n.cameraToUseForPointers))throw new Error("Active camera not set");let a=r.viewport,o=s.getRenderHeight(),{x:l,y:c,width:f,height:h}=a.toGlobal(s.getRenderWidth(),o),d=K.Identity(),u=1/s.getHardwareScalingLevel();return e=e*u-l,t=t*u-(o-c-h),i.update(e,t,f,h,d,d,r.getProjectionMatrix()),n}function mx(n,e,t,i,r,s,a,o){let l=e(i,t.enableDistantPicking);return nP(n,t,i,l,r,s,a,o)}function nP(n,e,t,i,r,s,a,o){let l=e.intersects(i,r,a,s,t,o);return!l||!l.hit||!r&&n!=null&&l.distance>=n.distance?null:l}function Vae(n,e){return n==="InstancedLinesMesh"||n==="LinesMesh"?e.intersectionThreshold:0}function EH(n){let e=n.getClassName();if(e==="GreasedLineMesh")return{rawBoundingInfo:null,intersectionThreshold:0};let t=n.rawBoundingInfo;return{rawBoundingInfo:t,intersectionThreshold:t?Vae(e,n):0}}function SH(n,e,t,i,r){let s=n(t,e.enableDistantPicking);return!s.intersectsSphere(i.boundingSphere,r)||!s.intersectsBox(i.boundingBox,r)?null:s}function sP(n,e,t,i,r,s){let a=null,o=!!(n.activeCameras&&n.activeCameras.length>1&&n.cameraToUseForPointers!==n.activeCamera),l=n.cameraToUseForPointers||n.activeCamera,c=gH.internalPickerForMesh||mx,f=c===mx;for(let h=0;h>4);for(let T=0;T1&&n.cameraToUseForPointers!==n.activeCamera),a=n.cameraToUseForPointers||n.activeCamera,o=gH.internalPickerForMesh||mx,l=o===mx;for(let c=0;c>4);for(let A=0;A(n._tempPickingRay||(n._tempPickingRay=Hr.Zero()),fg(n,e,t,o,n._tempPickingRay,s||null),n._tempPickingRay),i,r,!0);return a&&(a.ray=px(n,e,t,K.Identity(),s||null)),a}function xH(n,e,t,i,r,s,a,o=!1){let l=sP(n,(c,f)=>(n._tempPickingRay||(n._tempPickingRay=Hr.Zero()),fg(n,e,t,c,n._tempPickingRay,s||null,!1,f),n._tempPickingRay),i,r,!1,a);return l&&(l.ray=px(n,e,t,K.Identity(),s||null)),l}function RH(n,e,t,i,r){let s=sP(n,a=>(n._pickWithRayInverseMatrix||(n._pickWithRayInverseMatrix=K.Identity()),a.invertToRef(n._pickWithRayInverseMatrix),n._cachedRayForTransform||(n._cachedRayForTransform=Hr.Zero()),Hr.TransformToRef(e,n._pickWithRayInverseMatrix,n._cachedRayForTransform),n._cachedRayForTransform),t,i,!1,r);return s&&(s.ray=e),s}function bH(n,e,t,i,r,s){return TH(n,a=>px(n,e,t,a,r||null),i,s)}function IH(n,e,t,i){return TH(n,r=>(n._pickWithRayInverseMatrix||(n._pickWithRayInverseMatrix=K.Identity()),r.invertToRef(n._pickWithRayInverseMatrix),n._cachedRayForTransform||(n._cachedRayForTransform=Hr.Zero()),Hr.TransformToRef(e,n._pickWithRayInverseMatrix,n._cachedRayForTransform),n._cachedRayForTransform),t,i)}function _H(n,e,t=100,i,r){i||(i=n.getWorldMatrix()),e.length=t,r?e.origin.copyFrom(r):e.origin.copyFrom(n.position);let s=Z.Vector3[2];s.set(0,0,n._scene.useRightHandedSystem?-1:1);let a=Z.Vector3[3];return b.TransformNormalToRef(s,i,a),b.NormalizeToRef(a,e.direction),e}function MH(n,e){e&&(e.prototype.getForwardRay=function(t=100,i,r){return _H(this,new Hr(b.Zero(),b.Zero(),t),t,i,r)},e.prototype.getForwardRayToRef=function(t,i=100,r,s){return _H(this,t,i,r,s)}),n&&(Bh._IsPickingAvailable=!0,n.prototype.createPickingRay=function(t,i,r,s,a=!1){return px(this,t,i,r,s,a)})}var gH,Hr,aP=C(()=>{An();Ve();Ho();CC();R_();Pi();FM();gH={internalPickerForMesh:void 0},Hr=class n{constructor(e,t,i=Number.MAX_VALUE,r=Nt){this.origin=e,this.direction=t,this.length=i,this.epsilon=r}clone(){return new n(this.origin.clone(),this.direction.clone(),this.length)}intersectsBoxMinMax(e,t,i=0){let r=n._TmpVector3[0].copyFromFloats(e.x-i,e.y-i,e.z-i),s=n._TmpVector3[1].copyFromFloats(t.x+i,t.y+i,t.z+i),a=0,o=Number.MAX_VALUE,l,c,f,h;if(Math.abs(this.direction.x)<1e-7){if(this.origin.xs.x)return!1}else if(l=1/this.direction.x,c=(r.x-this.origin.x)*l,f=(s.x-this.origin.x)*l,f===-1/0&&(f=1/0),c>f&&(h=c,c=f,f=h),a=Math.max(c,a),o=Math.min(f,o),a>o)return!1;if(Math.abs(this.direction.y)<1e-7){if(this.origin.ys.y)return!1}else if(l=1/this.direction.y,c=(r.y-this.origin.y)*l,f=(s.y-this.origin.y)*l,f===-1/0&&(f=1/0),c>f&&(h=c,c=f,f=h),a=Math.max(c,a),o=Math.min(f,o),a>o)return!1;if(Math.abs(this.direction.z)<1e-7){if(this.origin.zs.z)return!1}else if(l=1/this.direction.z,c=(r.z-this.origin.z)*l,f=(s.z-this.origin.z)*l,f===-1/0&&(f=1/0),c>f&&(h=c,c=f,f=h),a=Math.max(c,a),o=Math.min(f,o),a>o)return!1;return!0}intersectsBox(e,t=0){return this.intersectsBoxMinMax(e.minimum,e.maximum,t)}intersectsSphere(e,t=0){let i=e.center.x-this.origin.x,r=e.center.y-this.origin.y,s=e.center.z-this.origin.z,a=i*i+r*r+s*s,o=e.radius+t,l=o*o;if(a<=l)return!0;let c=i*this.direction.x+r*this.direction.y+s*this.direction.z;return c<0?!1:a-c*c<=l}intersectsTriangle(e,t,i){let r=n._TmpVector3[0],s=n._TmpVector3[1],a=n._TmpVector3[2],o=n._TmpVector3[3],l=n._TmpVector3[4];t.subtractToRef(e,r),i.subtractToRef(e,s),b.CrossToRef(this.direction,s,a);let c=b.Dot(r,a);if(c===0)return null;let f=1/c;this.origin.subtractToRef(e,o);let h=b.Dot(o,a)*f;if(h<-this.epsilon||h>1+this.epsilon)return null;b.CrossToRef(o,r,l);let d=b.Dot(this.direction,l)*f;if(d<-this.epsilon||h+d>1+this.epsilon)return null;let u=b.Dot(s,l)*f;return u>this.length||u<0?null:new Vh(1-h-d,h,u)}intersectsPlane(e){let t,i=b.Dot(e.normal,this.direction);if(Math.abs(i)<999999997475243e-21)return null;{let r=b.Dot(e.normal,this.origin);return t=(-e.d-r)/i,t<0?t<-999999997475243e-21?null:0:t}}intersectsAxis(e,t=0){switch(e){case"y":{let i=(this.origin.y-t)/this.direction.y;return i>0?null:new b(this.origin.x+this.direction.x*-i,t,this.origin.z+this.direction.z*-i)}case"x":{let i=(this.origin.x-t)/this.direction.x;return i>0?null:new b(t,this.origin.y+this.direction.y*-i,this.origin.z+this.direction.z*-i)}case"z":{let i=(this.origin.z-t)/this.direction.z;return i>0?null:new b(this.origin.x+this.direction.x*-i,this.origin.y+this.direction.y*-i,t)}default:return null}}intersectsMesh(e,t,i,r=!1,s,a=!1){let o=Z.Matrix[0];return e.getWorldMatrix().invertToRef(o),this._tmpRay?n.TransformToRef(this,o,this._tmpRay):this._tmpRay=n.Transform(this,o),e.intersects(this._tmpRay,t,i,r,s,a)}intersectsMeshes(e,t,i){i?i.length=0:i=[];for(let r=0;rt.distance?1:0}intersectionSegment(e,t,i){let r=this.origin,s=Z.Vector3[0],a=Z.Vector3[1],o=Z.Vector3[2],l=Z.Vector3[3];t.subtractToRef(e,s),this.direction.scaleToRef(n._Rayl,o),r.addToRef(o,a),e.subtractToRef(r,l);let c=b.Dot(s,s),f=b.Dot(s,o),h=b.Dot(o,o),d=b.Dot(s,l),u=b.Dot(o,l),m=c*h-f*f,_,p=m,g,v=m;mp&&(_=p,g=u+f,v=h)),g<0?(g=0,-d<0?_=0:-d>c?_=p:(_=-d,p=c)):g>v&&(g=v,-d+f<0?_=0:-d+f>c?_=p:(_=-d+f,p=c));let x=Math.abs(_)0&&A<=this.length&&R.lengthSquared(){ps();Jo();aP();aP();MH(Qt,ut);Qt.prototype.createPickingRayToRef=function(n,e,t,i,r,s=!1,a=!1){return fg(this,n,e,t,i,r,s,a)};Qt.prototype.createPickingRayInCameraSpace=function(n,e,t){return vH(this,n,e,t)};Qt.prototype.createPickingRayInCameraSpaceToRef=function(n,e,t,i){return rP(this,n,e,t,i)};Qt.prototype.pickWithBoundingInfo=function(n,e,t,i,r){return AH(this,n,e,t,i,r)};Qt.prototype.pick=function(n,e,t,i,r,s,a=!1){return xH(this,n,e,t,i,r,s,a)};Qt.prototype.pickWithRay=function(n,e,t,i){return RH(this,n,e,t,i)};Qt.prototype.multiPick=function(n,e,t,i,r){return bH(this,n,e,t,i,r)};Qt.prototype.multiPickWithRay=function(n,e,t){return IH(this,n,e,t)}});var CH,Gae,lP=C(()=>{k();CH="kernelBlurVaryingDeclaration",Gae="varying sampleCoord{X}: vec2f;";S.IncludesShadersStoreWGSL[CH]||(S.IncludesShadersStoreWGSL[CH]=Gae)});var yH,kae,_x=C(()=>{k();yH="packingFunctions",kae=`fn pack(depth: f32)->vec4f +`;T.ShadersStore[lP]||(T.ShadersStore[lP]=RH);aoe={name:lP,shader:RH}});var cP,fP,hP,dP,He,_c=C(()=>{kt();Ut();to();ps();zt();Ui();AA();xA();D_();Pn();ya();Q_();Vi();Ma();Rf();Xy();il();$_();yn();Er();RA();bA();IA();MA();cP={effect:null,subMesh:null},fP=class extends Lm(Dm(Sr)){},hP=class extends ym(fP){constructor(e){super(e),this.DIFFUSE=!1,this.DIFFUSEDIRECTUV=0,this.BAKED_VERTEX_ANIMATION_TEXTURE=!1,this.AMBIENT=!1,this.AMBIENTDIRECTUV=0,this.OPACITY=!1,this.OPACITYDIRECTUV=0,this.OPACITYRGB=!1,this.REFLECTION=!1,this.EMISSIVE=!1,this.EMISSIVEDIRECTUV=0,this.SPECULAR=!1,this.SPECULARDIRECTUV=0,this.BUMP=!1,this.BUMPDIRECTUV=0,this.PARALLAX=!1,this.PARALLAX_RHS=!1,this.PARALLAXOCCLUSION=!1,this.SPECULAROVERALPHA=!1,this.CLIPPLANE=!1,this.CLIPPLANE2=!1,this.CLIPPLANE3=!1,this.CLIPPLANE4=!1,this.CLIPPLANE5=!1,this.CLIPPLANE6=!1,this.ALPHATEST=!1,this.DEPTHPREPASS=!1,this.ALPHAFROMDIFFUSE=!1,this.POINTSIZE=!1,this.FOG=!1,this.SPECULARTERM=!1,this.DIFFUSEFRESNEL=!1,this.OPACITYFRESNEL=!1,this.REFLECTIONFRESNEL=!1,this.REFRACTIONFRESNEL=!1,this.EMISSIVEFRESNEL=!1,this.FRESNEL=!1,this.NORMAL=!1,this.TANGENT=!1,this.VERTEXCOLOR=!1,this.VERTEXALPHA=!1,this.NUM_BONE_INFLUENCERS=0,this.BonesPerMesh=0,this.BONETEXTURE=!1,this.BONES_VELOCITY_ENABLED=!1,this.INSTANCES=!1,this.THIN_INSTANCES=!1,this.INSTANCESCOLOR=!1,this.GLOSSINESS=!1,this.ROUGHNESS=!1,this.EMISSIVEASILLUMINATION=!1,this.LINKEMISSIVEWITHDIFFUSE=!1,this.REFLECTIONFRESNELFROMSPECULAR=!1,this.LIGHTMAP=!1,this.LIGHTMAPDIRECTUV=0,this.OBJECTSPACE_NORMALMAP=!1,this.USELIGHTMAPASSHADOWMAP=!1,this.REFLECTIONMAP_3D=!1,this.REFLECTIONMAP_SPHERICAL=!1,this.REFLECTIONMAP_PLANAR=!1,this.REFLECTIONMAP_CUBIC=!1,this.USE_LOCAL_REFLECTIONMAP_CUBIC=!1,this.USE_LOCAL_REFRACTIONMAP_CUBIC=!1,this.REFLECTIONMAP_PROJECTION=!1,this.REFLECTIONMAP_SKYBOX=!1,this.REFLECTIONMAP_EXPLICIT=!1,this.REFLECTIONMAP_EQUIRECTANGULAR=!1,this.REFLECTIONMAP_EQUIRECTANGULAR_FIXED=!1,this.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED=!1,this.REFLECTIONMAP_OPPOSITEZ=!1,this.INVERTCUBICMAP=!1,this.LOGARITHMICDEPTH=!1,this.REFRACTION=!1,this.REFRACTIONMAP_3D=!1,this.REFLECTIONOVERALPHA=!1,this.TWOSIDEDLIGHTING=!1,this.SHADOWFLOAT=!1,this.MORPHTARGETS=!1,this.MORPHTARGETS_POSITION=!1,this.MORPHTARGETS_NORMAL=!1,this.MORPHTARGETS_TANGENT=!1,this.MORPHTARGETS_UV=!1,this.MORPHTARGETS_UV2=!1,this.MORPHTARGETS_COLOR=!1,this.MORPHTARGETTEXTURE_HASPOSITIONS=!1,this.MORPHTARGETTEXTURE_HASNORMALS=!1,this.MORPHTARGETTEXTURE_HASTANGENTS=!1,this.MORPHTARGETTEXTURE_HASUVS=!1,this.MORPHTARGETTEXTURE_HASUV2S=!1,this.MORPHTARGETTEXTURE_HASCOLORS=!1,this.NUM_MORPH_INFLUENCERS=0,this.MORPHTARGETS_TEXTURE=!1,this.NONUNIFORMSCALING=!1,this.PREMULTIPLYALPHA=!1,this.ALPHATEST_AFTERALLALPHACOMPUTATIONS=!1,this.ALPHABLEND=!0,this.RGBDLIGHTMAP=!1,this.RGBDREFLECTION=!1,this.RGBDREFRACTION=!1,this.MULTIVIEW=!1,this.ORDER_INDEPENDENT_TRANSPARENCY=!1,this.ORDER_INDEPENDENT_TRANSPARENCY_16BITS=!1,this.CAMERA_ORTHOGRAPHIC=!1,this.CAMERA_PERSPECTIVE=!1,this.AREALIGHTSUPPORTED=!0,this.USE_VERTEX_PULLING=!1,this.VERTEX_PULLING_USE_INDEX_BUFFER=!1,this.VERTEX_PULLING_INDEX_BUFFER_32BITS=!1,this.RIGHT_HANDED=!1,this.CLUSTLIGHT_SLICES=0,this.CLUSTLIGHT_BATCH=0,this.IS_REFLECTION_LINEAR=!1,this.IS_REFRACTION_LINEAR=!1,this.DECAL_AFTER_DETAIL=!1,this.rebuild()}},dP=class extends Om(al){},He=class n extends dP{get isPrePassCapable(){return!this.disableDepthWrite}get canRenderToMRT(){return!0}constructor(e,t,i=!1){super(e,t,void 0,i||n.ForceGLSL),this._diffuseTexture=null,this._ambientTexture=null,this._opacityTexture=null,this._reflectionTexture=null,this._emissiveTexture=null,this._specularTexture=null,this._bumpTexture=null,this._lightmapTexture=null,this._refractionTexture=null,this.ambientColor=new Te(0,0,0),this.diffuseColor=new Te(1,1,1),this.specularColor=new Te(1,1,1),this.emissiveColor=new Te(0,0,0),this.specularPower=64,this._useAlphaFromDiffuseTexture=!1,this._useEmissiveAsIllumination=!1,this._linkEmissiveWithDiffuse=!1,this._useSpecularOverAlpha=!1,this._useReflectionOverAlpha=!1,this._disableLighting=!1,this._useObjectSpaceNormalMap=!1,this._useParallax=!1,this._useParallaxOcclusion=!1,this.parallaxScaleBias=.05,this._roughness=0,this.indexOfRefraction=.98,this.invertRefractionY=!0,this.alphaCutOff=.4,this._useLightmapAsShadowmap=!1,this._useReflectionFresnelFromSpecular=!1,this._useGlossinessFromSpecularMapAlpha=!1,this._maxSimultaneousLights=4,this._invertNormalMapX=!1,this._invertNormalMapY=!1,this._twoSidedLighting=!1,this._applyDecalMapAfterDetailMap=!1,this._shadersLoaded=!1,this._vertexPullingMetadata=null,this._renderTargets=new wi(16),this._globalAmbientColor=new Te(0,0,0),this._cacheHasRenderTargetTextures=!1,this.detailMap=new Pa(this),this._attachImageProcessingConfiguration(null),this.prePassConfiguration=new Ts,this.getRenderTargetTextures=()=>(this._renderTargets.reset(),n.ReflectionTextureEnabled&&this._reflectionTexture&&this._reflectionTexture.isRenderTarget&&this._renderTargets.push(this._reflectionTexture),n.RefractionTextureEnabled&&this._refractionTexture&&this._refractionTexture.isRenderTarget&&this._renderTargets.push(this._refractionTexture),this._eventInfo.renderTargets=this._renderTargets,this._callbackPluginEventFillRenderTargetTextures(this._eventInfo),this._renderTargets)}get hasRenderTargetTextures(){return n.ReflectionTextureEnabled&&this._reflectionTexture&&this._reflectionTexture.isRenderTarget||n.RefractionTextureEnabled&&this._refractionTexture&&this._refractionTexture.isRenderTarget?!0:this._cacheHasRenderTargetTextures}getClassName(){return"StandardMaterial"}needAlphaBlending(){return this._hasTransparencyMode?this._transparencyModeIsBlend:this._disableAlphaBlending?!1:this.alpha<1||this._opacityTexture!=null||this._shouldUseAlphaFromDiffuseTexture()||this._opacityFresnelParameters&&this._opacityFresnelParameters.isEnabled}needAlphaTesting(){return this._hasTransparencyMode?this._transparencyModeIsTest:this._hasAlphaChannel()&&(this._transparencyMode==null||this._transparencyMode===ve.MATERIAL_ALPHATEST)}_shouldUseAlphaFromDiffuseTexture(){return this._diffuseTexture!=null&&this._diffuseTexture.hasAlpha&&this._useAlphaFromDiffuseTexture&&this._transparencyMode!==ve.MATERIAL_OPAQUE}_hasAlphaChannel(){return this._diffuseTexture!=null&&this._diffuseTexture.hasAlpha||this._opacityTexture!=null}getAlphaTestTexture(){return this._diffuseTexture}isReadyForSubMesh(e,t,i=!1){this._uniformBufferLayoutBuilt||this.buildUniformLayout();let r=t._drawWrapper;if(r.effect&&this.isFrozen&&r._wasPreviouslyReady&&r._wasPreviouslyUsingInstances===i)return!0;t.materialDefines||(this._callbackPluginEventGeneric(4,this._eventInfo),t.materialDefines=new hP(this._eventInfo.defineNames));let s=this.getScene(),a=t.materialDefines;if(this._isReadyForSubMesh(t))return!0;let o=s.getEngine();if(a._needNormals=dm(s,e,a,!0,this._maxSimultaneousLights,this._disableLighting),!hm(s,e,this._maxSimultaneousLights,this._disableLighting))return!1;pm(s,a);let l=this.needAlphaBlendingForMesh(e)&&this.getScene().useOrderIndependentTransparency;if(gm(s,a,this.canRenderToMRT&&!l),_m(s,a,l),Nn.PrepareDefines(o.currentRenderPassId,e,a),a._areTexturesDirty){this._eventInfo.hasRenderTargetTextures=!1,this._callbackPluginEventHasRenderTargetTextures(this._eventInfo),this._cacheHasRenderTargetTextures=this._eventInfo.hasRenderTargetTextures,a._needUVs=!1;for(let f=1;f<=6;++f)a["MAINUV"+f]=!1;if(s.texturesEnabled){if(a.DIFFUSEDIRECTUV=0,a.BUMPDIRECTUV=0,a.AMBIENTDIRECTUV=0,a.OPACITYDIRECTUV=0,a.EMISSIVEDIRECTUV=0,a.SPECULARDIRECTUV=0,a.LIGHTMAPDIRECTUV=0,this._diffuseTexture&&n.DiffuseTextureEnabled)if(this._diffuseTexture.isReadyOrNotBlocking())ri(this._diffuseTexture,a,"DIFFUSE");else return!1;else a.DIFFUSE=!1;if(this._ambientTexture&&n.AmbientTextureEnabled)if(this._ambientTexture.isReadyOrNotBlocking())ri(this._ambientTexture,a,"AMBIENT");else return!1;else a.AMBIENT=!1;if(this._opacityTexture&&n.OpacityTextureEnabled)if(this._opacityTexture.isReadyOrNotBlocking())ri(this._opacityTexture,a,"OPACITY"),a.OPACITYRGB=this._opacityTexture.getAlphaFromRGB;else return!1;else a.OPACITY=!1;if(this._reflectionTexture&&n.ReflectionTextureEnabled?(a.ROUGHNESS=this._roughness>0,a.REFLECTIONOVERALPHA=this._useReflectionOverAlpha):(a.ROUGHNESS=!1,a.REFLECTIONOVERALPHA=!1),!_f(s,this._reflectionTexture,a))return!1;if(this._emissiveTexture&&n.EmissiveTextureEnabled)if(this._emissiveTexture.isReadyOrNotBlocking())ri(this._emissiveTexture,a,"EMISSIVE");else return!1;else a.EMISSIVE=!1;if(this._lightmapTexture&&n.LightmapTextureEnabled)if(this._lightmapTexture.isReadyOrNotBlocking())ri(this._lightmapTexture,a,"LIGHTMAP"),a.USELIGHTMAPASSHADOWMAP=this._useLightmapAsShadowmap,a.RGBDLIGHTMAP=this._lightmapTexture.isRGBD;else return!1;else a.LIGHTMAP=!1;if(this._specularTexture&&n.SpecularTextureEnabled)if(this._specularTexture.isReadyOrNotBlocking())ri(this._specularTexture,a,"SPECULAR"),a.GLOSSINESS=this._useGlossinessFromSpecularMapAlpha;else return!1;else a.SPECULAR=!1;if(s.getEngine().getCaps().standardDerivatives&&this._bumpTexture&&n.BumpTextureEnabled){if(this._bumpTexture.isReady())ri(this._bumpTexture,a,"BUMP"),a.PARALLAX=this._useParallax,a.PARALLAX_RHS=s.useRightHandedSystem,a.PARALLAXOCCLUSION=this._useParallaxOcclusion;else return!1;a.OBJECTSPACE_NORMALMAP=this._useObjectSpaceNormalMap}else a.BUMP=!1,a.PARALLAX=!1,a.PARALLAX_RHS=!1,a.PARALLAXOCCLUSION=!1;if(this._refractionTexture&&n.RefractionTextureEnabled)if(this._refractionTexture.isReadyOrNotBlocking())a._needUVs=!0,a.REFRACTION=!0,a.REFRACTIONMAP_3D=this._refractionTexture.isCube,a.RGBDREFRACTION=this._refractionTexture.isRGBD,a.USE_LOCAL_REFRACTIONMAP_CUBIC=!!this._refractionTexture.boundingBoxSize;else return!1;else a.REFRACTION=!1;a.TWOSIDEDLIGHTING=!this._backFaceCulling&&this._twoSidedLighting}else a.DIFFUSE=!1,a.AMBIENT=!1,a.OPACITY=!1,a.REFLECTION=!1,a.EMISSIVE=!1,a.LIGHTMAP=!1,a.BUMP=!1,a.REFRACTION=!1;a.ALPHAFROMDIFFUSE=this._shouldUseAlphaFromDiffuseTexture(),a.EMISSIVEASILLUMINATION=this._useEmissiveAsIllumination,a.LINKEMISSIVEWITHDIFFUSE=this._linkEmissiveWithDiffuse,a.SPECULAROVERALPHA=this._useSpecularOverAlpha,a.PREMULTIPLYALPHA=this.alphaMode===7||this.alphaMode===8,a.ALPHATEST_AFTERALLALPHACOMPUTATIONS=this.transparencyMode!==null,a.ALPHABLEND=this.transparencyMode===null||this.needAlphaBlendingForMesh(e)}if(this._eventInfo.isReadyForSubMesh=!0,this._eventInfo.defines=a,this._eventInfo.subMesh=t,this._callbackPluginEventIsReadyForSubMesh(this._eventInfo),!this._eventInfo.isReadyForSubMesh)return!1;if(a._areImageProcessingDirty&&this._imageProcessingConfiguration){if(!this._imageProcessingConfiguration.isReady())return!1;this._imageProcessingConfiguration.prepareDefines(a),a.IS_REFLECTION_LINEAR=this.reflectionTexture!=null&&!this.reflectionTexture.gammaSpace,a.IS_REFRACTION_LINEAR=this.refractionTexture!=null&&!this.refractionTexture.gammaSpace}if(a._areFresnelDirty&&(n.FresnelEnabled?(this._diffuseFresnelParameters||this._opacityFresnelParameters||this._emissiveFresnelParameters||this._refractionFresnelParameters||this._reflectionFresnelParameters)&&(a.DIFFUSEFRESNEL=this._diffuseFresnelParameters&&this._diffuseFresnelParameters.isEnabled,a.OPACITYFRESNEL=this._opacityFresnelParameters&&this._opacityFresnelParameters.isEnabled,a.REFLECTIONFRESNEL=this._reflectionFresnelParameters&&this._reflectionFresnelParameters.isEnabled,a.REFLECTIONFRESNELFROMSPECULAR=this._useReflectionFresnelFromSpecular,a.REFRACTIONFRESNEL=this._refractionFresnelParameters&&this._refractionFresnelParameters.isEnabled,a.EMISSIVEFRESNEL=this._emissiveFresnelParameters&&this._emissiveFresnelParameters.isEnabled,a._needNormals=!0,a.FRESNEL=!0):a.FRESNEL=!1),a.AREALIGHTUSED||a.CLUSTLIGHT_BATCH){for(let f=0;f{m.push(`vp_${y}_info`)}))}else this._vertexPullingMetadata=null;let v={};this.customShaderNameResolve&&(u=this.customShaderNameResolve(u,m,p,_,a,d,v));let x=a.toString(),A=t.effect,S=s.getEngine().createEffect(u,{attributes:d,uniformsNames:m,uniformBuffersNames:p,samplers:_,defines:x,fallbacks:h,onCompiled:this.onCompiled,onError:this.onError,indexParameters:g,processFinalCode:v.processFinalCode,processCodeAfterIncludes:this._eventInfo.customCode,multiTarget:a.PREPASS,shaderLanguage:this._shaderLanguage,extraInitializationsAsync:this._shadersLoaded?void 0:async()=>{this._shaderLanguage===1?await Promise.all([Promise.resolve().then(()=>($k(),Qk)),Promise.resolve().then(()=>(xW(),AW))]):await Promise.all([Promise.resolve().then(()=>(QW(),ZW)),Promise.resolve().then(()=>(IH(),bH))]),this._shadersLoaded=!0}},o);if(this._eventInfo.customCode=void 0,S)if(this._onEffectCreatedObservable&&(cP.effect=S,cP.subMesh=t,this._onEffectCreatedObservable.notifyObservers(cP)),this.allowShaderHotSwapping&&A&&!S.isReady()){if(a.markAsUnprocessed(),c=this.isFrozen,f)return a._areLightsDisposed=!0,!1}else s.resetCachedMaterial(),t.setEffect(S,a,this._materialContext)}return!t.effect||!t.effect.isReady()?!1:(a._renderId=s.getRenderId(),r._wasPreviouslyReady=!c,r._wasPreviouslyUsingInstances=i,this._checkScenePerformancePriority(),!0)}buildUniformLayout(){let e=this._uniformBuffer;e.addUniform("diffuseLeftColor",4),e.addUniform("diffuseRightColor",4),e.addUniform("opacityParts",4),e.addUniform("reflectionLeftColor",4),e.addUniform("reflectionRightColor",4),e.addUniform("refractionLeftColor",4),e.addUniform("refractionRightColor",4),e.addUniform("emissiveLeftColor",4),e.addUniform("emissiveRightColor",4),e.addUniform("vDiffuseInfos",2),e.addUniform("vAmbientInfos",2),e.addUniform("vOpacityInfos",2),e.addUniform("vEmissiveInfos",2),e.addUniform("vLightmapInfos",2),e.addUniform("vSpecularInfos",2),e.addUniform("vBumpInfos",3),e.addUniform("diffuseMatrix",16),e.addUniform("ambientMatrix",16),e.addUniform("opacityMatrix",16),e.addUniform("emissiveMatrix",16),e.addUniform("lightmapMatrix",16),e.addUniform("specularMatrix",16),e.addUniform("bumpMatrix",16),e.addUniform("vTangentSpaceParams",2),e.addUniform("pointSize",1),e.addUniform("alphaCutOff",1),e.addUniform("refractionMatrix",16),e.addUniform("vRefractionInfos",4),e.addUniform("vRefractionPosition",3),e.addUniform("vRefractionSize",3),e.addUniform("vSpecularColor",4),e.addUniform("vEmissiveColor",3),e.addUniform("vDiffuseColor",4),e.addUniform("vAmbientColor",3),e.addUniform("cameraInfo",4),Em(e,!1,!0),super.buildUniformLayout()}bindForSubMesh(e,t,i){var f;let r=this.getScene(),s=i.materialDefines;if(!s)return;let a=i.effect;if(!a)return;this._activeEffect=a,t.getMeshUniformBuffer().bindToEffect(a,"Mesh"),t.transferToEffect(e),this._uniformBuffer.bindToEffect(a,"Material"),this.prePassConfiguration.bindForSubMesh(this._activeEffect,r,t,e,this.isFrozen),Nn.Bind(r.getEngine().currentRenderPassId,this._activeEffect,t,e,this);let o=r.activeCamera;o?this._uniformBuffer.updateFloat4("cameraInfo",o.minZ,o.maxZ,0,0):this._uniformBuffer.updateFloat4("cameraInfo",0,0,0,0),this._eventInfo.subMesh=i,this._callbackPluginEventHardBindForSubMesh(this._eventInfo),s.OBJECTSPACE_NORMALMAP&&(e.toNormalMatrix(this._normalMatrix),this.bindOnlyNormalMatrix(this._normalMatrix));let l=this._mustRebind(r,a,i,t.visibility);gs(t,a),this._vertexPullingMetadata&&If(a,this._vertexPullingMetadata);let c=this._uniformBuffer;if(l){if(this.bindViewProjection(a),!c.useUbo||!this.isFrozen||!c.isSync||i._drawWrapper._forceRebindOnNextCall){if(n.FresnelEnabled&&s.FRESNEL){if(this.diffuseFresnelParameters&&this.diffuseFresnelParameters.isEnabled&&(c.updateColor4("diffuseLeftColor",this.diffuseFresnelParameters.leftColor,this.diffuseFresnelParameters.power),c.updateColor4("diffuseRightColor",this.diffuseFresnelParameters.rightColor,this.diffuseFresnelParameters.bias)),this.opacityFresnelParameters&&this.opacityFresnelParameters.isEnabled){let h=pn.Color3[0];h.set(this.opacityFresnelParameters.leftColor.toLuminance(),this.opacityFresnelParameters.rightColor.toLuminance(),this.opacityFresnelParameters.bias),c.updateColor4("opacityParts",h,this.opacityFresnelParameters.power)}this.reflectionFresnelParameters&&this.reflectionFresnelParameters.isEnabled&&(c.updateColor4("reflectionLeftColor",this.reflectionFresnelParameters.leftColor,this.reflectionFresnelParameters.power),c.updateColor4("reflectionRightColor",this.reflectionFresnelParameters.rightColor,this.reflectionFresnelParameters.bias)),this.refractionFresnelParameters&&this.refractionFresnelParameters.isEnabled&&(c.updateColor4("refractionLeftColor",this.refractionFresnelParameters.leftColor,this.refractionFresnelParameters.power),c.updateColor4("refractionRightColor",this.refractionFresnelParameters.rightColor,this.refractionFresnelParameters.bias)),this.emissiveFresnelParameters&&this.emissiveFresnelParameters.isEnabled&&(c.updateColor4("emissiveLeftColor",this.emissiveFresnelParameters.leftColor,this.emissiveFresnelParameters.power),c.updateColor4("emissiveRightColor",this.emissiveFresnelParameters.rightColor,this.emissiveFresnelParameters.bias))}if(r.texturesEnabled&&(this._diffuseTexture&&n.DiffuseTextureEnabled&&(c.updateFloat2("vDiffuseInfos",this._diffuseTexture.coordinatesIndex,this._diffuseTexture.level),ni(this._diffuseTexture,c,"diffuse")),this._ambientTexture&&n.AmbientTextureEnabled&&(c.updateFloat2("vAmbientInfos",this._ambientTexture.coordinatesIndex,this._ambientTexture.level),ni(this._ambientTexture,c,"ambient")),this._opacityTexture&&n.OpacityTextureEnabled&&(c.updateFloat2("vOpacityInfos",this._opacityTexture.coordinatesIndex,this._opacityTexture.level),ni(this._opacityTexture,c,"opacity")),this._hasAlphaChannel()&&c.updateFloat("alphaCutOff",this.alphaCutOff),nm(r,s,c,Te.White(),this._reflectionTexture,!1,!1,!0,!1,!1,!1,this.roughness),(!this._reflectionTexture||!n.ReflectionTextureEnabled)&&c.updateFloat2("vReflectionInfos",0,this.roughness),this._emissiveTexture&&n.EmissiveTextureEnabled&&(c.updateFloat2("vEmissiveInfos",this._emissiveTexture.coordinatesIndex,this._emissiveTexture.level),ni(this._emissiveTexture,c,"emissive")),this._lightmapTexture&&n.LightmapTextureEnabled&&(c.updateFloat2("vLightmapInfos",this._lightmapTexture.coordinatesIndex,this._lightmapTexture.level),ni(this._lightmapTexture,c,"lightmap")),this._specularTexture&&n.SpecularTextureEnabled&&(c.updateFloat2("vSpecularInfos",this._specularTexture.coordinatesIndex,this._specularTexture.level),ni(this._specularTexture,c,"specular")),this._bumpTexture&&r.getEngine().getCaps().standardDerivatives&&n.BumpTextureEnabled&&(c.updateFloat3("vBumpInfos",this._bumpTexture.coordinatesIndex,1/this._bumpTexture.level,this.parallaxScaleBias),ni(this._bumpTexture,c,"bump"),r._mirroredCameraPosition?c.updateFloat2("vTangentSpaceParams",this._invertNormalMapX?1:-1,this._invertNormalMapY?1:-1):c.updateFloat2("vTangentSpaceParams",this._invertNormalMapX?-1:1,this._invertNormalMapY?-1:1)),this._refractionTexture&&n.RefractionTextureEnabled)){let h=1;if(this._refractionTexture.isCube||(c.updateMatrix("refractionMatrix",this._refractionTexture.getReflectionTextureMatrix()),this._refractionTexture.depth&&(h=this._refractionTexture.depth)),c.updateFloat4("vRefractionInfos",this._refractionTexture.level,this.indexOfRefraction,h,this.invertRefractionY?-1:1),this._refractionTexture.boundingBoxSize){let d=this._refractionTexture;c.updateVector3("vRefractionPosition",d.boundingBoxPosition),c.updateVector3("vRefractionSize",d.boundingBoxSize)}}this.pointsCloud&&c.updateFloat("pointSize",this.pointSize),c.updateColor4("vSpecularColor",this.specularColor,this.specularPower),c.updateColor3("vEmissiveColor",n.EmissiveTextureEnabled?this.emissiveColor:Te.BlackReadOnly),c.updateColor4("vDiffuseColor",this.diffuseColor,this.alpha),r.ambientColor.multiplyToRef(this.ambientColor,this._globalAmbientColor),c.updateColor3("vAmbientColor",this._globalAmbientColor)}r.texturesEnabled&&(this._diffuseTexture&&n.DiffuseTextureEnabled&&a.setTexture("diffuseSampler",this._diffuseTexture),this._ambientTexture&&n.AmbientTextureEnabled&&a.setTexture("ambientSampler",this._ambientTexture),this._opacityTexture&&n.OpacityTextureEnabled&&a.setTexture("opacitySampler",this._opacityTexture),this._reflectionTexture&&n.ReflectionTextureEnabled&&(this._reflectionTexture.isCube?a.setTexture("reflectionCubeSampler",this._reflectionTexture):a.setTexture("reflection2DSampler",this._reflectionTexture)),this._emissiveTexture&&n.EmissiveTextureEnabled&&a.setTexture("emissiveSampler",this._emissiveTexture),this._lightmapTexture&&n.LightmapTextureEnabled&&a.setTexture("lightmapSampler",this._lightmapTexture),this._specularTexture&&n.SpecularTextureEnabled&&a.setTexture("specularSampler",this._specularTexture),this._bumpTexture&&r.getEngine().getCaps().standardDerivatives&&n.BumpTextureEnabled&&a.setTexture("bumpSampler",this._bumpTexture),this._refractionTexture&&n.RefractionTextureEnabled&&(this._refractionTexture.isCube?a.setTexture("refractionCubeSampler",this._refractionTexture):a.setTexture("refraction2DSampler",this._refractionTexture))),this.getScene().useOrderIndependentTransparency&&this.needAlphaBlendingForMesh(t)&&this.getScene().depthPeelingRenderer.bind(a),this._eventInfo.subMesh=i,this._callbackPluginEventBindForSubMesh(this._eventInfo),Mn(a,this,r),this.bindEyePosition(a)}else r.getEngine()._features.needToAlwaysBindUniformBuffers&&(this._needToBindSceneUbo=!0);(l||!this.isFrozen)&&(r.lightsEnabled&&!this._disableLighting&&am(r,t,a,s,this._maxSimultaneousLights),(r.fogEnabled&&t.applyFog&&r.fogMode!==Qt.FOGMODE_NONE||this._reflectionTexture||this._refractionTexture||t.receiveShadows||s.PREPASS||s.CLUSTLIGHT_BATCH)&&this.bindView(a),mf(r,t,a),s.NUM_MORPH_INFLUENCERS&&Cn(t,a),s.BAKED_VERTEX_ANIMATION_TEXTURE&&((f=t.bakedVertexAnimationManager)==null||f.bind(a,s.INSTANCES)),this.useLogarithmicDepth&&uf(s,a,r),this._imageProcessingConfiguration&&!this._imageProcessingConfiguration.applyByPostProcess&&this._imageProcessingConfiguration.bind(this._activeEffect)),this._afterBind(t,this._activeEffect,i),c.update()}getAnimatables(){let e=super.getAnimatables();return this._diffuseTexture&&this._diffuseTexture.animations&&this._diffuseTexture.animations.length>0&&e.push(this._diffuseTexture),this._ambientTexture&&this._ambientTexture.animations&&this._ambientTexture.animations.length>0&&e.push(this._ambientTexture),this._opacityTexture&&this._opacityTexture.animations&&this._opacityTexture.animations.length>0&&e.push(this._opacityTexture),this._reflectionTexture&&this._reflectionTexture.animations&&this._reflectionTexture.animations.length>0&&e.push(this._reflectionTexture),this._emissiveTexture&&this._emissiveTexture.animations&&this._emissiveTexture.animations.length>0&&e.push(this._emissiveTexture),this._specularTexture&&this._specularTexture.animations&&this._specularTexture.animations.length>0&&e.push(this._specularTexture),this._bumpTexture&&this._bumpTexture.animations&&this._bumpTexture.animations.length>0&&e.push(this._bumpTexture),this._lightmapTexture&&this._lightmapTexture.animations&&this._lightmapTexture.animations.length>0&&e.push(this._lightmapTexture),this._refractionTexture&&this._refractionTexture.animations&&this._refractionTexture.animations.length>0&&e.push(this._refractionTexture),e}getActiveTextures(){let e=super.getActiveTextures();return this._diffuseTexture&&e.push(this._diffuseTexture),this._ambientTexture&&e.push(this._ambientTexture),this._opacityTexture&&e.push(this._opacityTexture),this._reflectionTexture&&e.push(this._reflectionTexture),this._emissiveTexture&&e.push(this._emissiveTexture),this._specularTexture&&e.push(this._specularTexture),this._bumpTexture&&e.push(this._bumpTexture),this._lightmapTexture&&e.push(this._lightmapTexture),this._refractionTexture&&e.push(this._refractionTexture),e}hasTexture(e){return!!(super.hasTexture(e)||this._diffuseTexture===e||this._ambientTexture===e||this._opacityTexture===e||this._reflectionTexture===e||this._emissiveTexture===e||this._specularTexture===e||this._bumpTexture===e||this._lightmapTexture===e||this._refractionTexture===e)}dispose(e,t){var i,r,s,a,o,l,c,f,h;t&&((i=this._diffuseTexture)==null||i.dispose(),(r=this._ambientTexture)==null||r.dispose(),(s=this._opacityTexture)==null||s.dispose(),(a=this._reflectionTexture)==null||a.dispose(),(o=this._emissiveTexture)==null||o.dispose(),(l=this._specularTexture)==null||l.dispose(),(c=this._bumpTexture)==null||c.dispose(),(f=this._lightmapTexture)==null||f.dispose(),(h=this._refractionTexture)==null||h.dispose()),this._imageProcessingConfiguration&&this._imageProcessingObserver&&this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver),super.dispose(e,t)}clone(e,t=!0,i=""){let r=tt.Clone(()=>new n(e,this.getScene()),this,{cloneTexturesOnlyOnce:t});return r.name=e,r.id=e,this.stencil.copyTo(r.stencil),this._clonePlugins(r,i),r}static Parse(e,t,i){let r=tt.Parse(()=>new n(e.name,t),e,t,i);return e.stencil&&r.stencil.parse(e.stencil,t,i),ve._ParsePlugins(e,r,t,i),r}static get DiffuseTextureEnabled(){return le.DiffuseTextureEnabled}static set DiffuseTextureEnabled(e){le.DiffuseTextureEnabled=e}static get DetailTextureEnabled(){return le.DetailTextureEnabled}static set DetailTextureEnabled(e){le.DetailTextureEnabled=e}static get AmbientTextureEnabled(){return le.AmbientTextureEnabled}static set AmbientTextureEnabled(e){le.AmbientTextureEnabled=e}static get OpacityTextureEnabled(){return le.OpacityTextureEnabled}static set OpacityTextureEnabled(e){le.OpacityTextureEnabled=e}static get ReflectionTextureEnabled(){return le.ReflectionTextureEnabled}static set ReflectionTextureEnabled(e){le.ReflectionTextureEnabled=e}static get EmissiveTextureEnabled(){return le.EmissiveTextureEnabled}static set EmissiveTextureEnabled(e){le.EmissiveTextureEnabled=e}static get SpecularTextureEnabled(){return le.SpecularTextureEnabled}static set SpecularTextureEnabled(e){le.SpecularTextureEnabled=e}static get BumpTextureEnabled(){return le.BumpTextureEnabled}static set BumpTextureEnabled(e){le.BumpTextureEnabled=e}static get LightmapTextureEnabled(){return le.LightmapTextureEnabled}static set LightmapTextureEnabled(e){le.LightmapTextureEnabled=e}static get RefractionTextureEnabled(){return le.RefractionTextureEnabled}static set RefractionTextureEnabled(e){le.RefractionTextureEnabled=e}static get ColorGradingTextureEnabled(){return le.ColorGradingTextureEnabled}static set ColorGradingTextureEnabled(e){le.ColorGradingTextureEnabled=e}static get FresnelEnabled(){return le.FresnelEnabled}static set FresnelEnabled(e){le.FresnelEnabled=e}};He.ForceGLSL=!1;P([Bt("diffuseTexture")],He.prototype,"_diffuseTexture",void 0);P([oe("_markAllSubMeshesAsTexturesAndMiscDirty")],He.prototype,"diffuseTexture",void 0);P([Bt("ambientTexture")],He.prototype,"_ambientTexture",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"ambientTexture",void 0);P([Bt("opacityTexture")],He.prototype,"_opacityTexture",void 0);P([oe("_markAllSubMeshesAsTexturesAndMiscDirty")],He.prototype,"opacityTexture",void 0);P([Bt("reflectionTexture")],He.prototype,"_reflectionTexture",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"reflectionTexture",void 0);P([Bt("emissiveTexture")],He.prototype,"_emissiveTexture",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"emissiveTexture",void 0);P([Bt("specularTexture")],He.prototype,"_specularTexture",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"specularTexture",void 0);P([Bt("bumpTexture")],He.prototype,"_bumpTexture",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"bumpTexture",void 0);P([Bt("lightmapTexture")],He.prototype,"_lightmapTexture",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"lightmapTexture",void 0);P([Bt("refractionTexture")],He.prototype,"_refractionTexture",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"refractionTexture",void 0);P([mr("ambient")],He.prototype,"ambientColor",void 0);P([mr("diffuse")],He.prototype,"diffuseColor",void 0);P([mr("specular")],He.prototype,"specularColor",void 0);P([mr("emissive")],He.prototype,"emissiveColor",void 0);P([w()],He.prototype,"specularPower",void 0);P([w("useAlphaFromDiffuseTexture")],He.prototype,"_useAlphaFromDiffuseTexture",void 0);P([oe("_markAllSubMeshesAsTexturesAndMiscDirty")],He.prototype,"useAlphaFromDiffuseTexture",void 0);P([w("useEmissiveAsIllumination")],He.prototype,"_useEmissiveAsIllumination",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"useEmissiveAsIllumination",void 0);P([w("linkEmissiveWithDiffuse")],He.prototype,"_linkEmissiveWithDiffuse",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"linkEmissiveWithDiffuse",void 0);P([w("useSpecularOverAlpha")],He.prototype,"_useSpecularOverAlpha",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"useSpecularOverAlpha",void 0);P([w("useReflectionOverAlpha")],He.prototype,"_useReflectionOverAlpha",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"useReflectionOverAlpha",void 0);P([w("disableLighting")],He.prototype,"_disableLighting",void 0);P([oe("_markAllSubMeshesAsLightsDirty")],He.prototype,"disableLighting",void 0);P([w("useObjectSpaceNormalMap")],He.prototype,"_useObjectSpaceNormalMap",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"useObjectSpaceNormalMap",void 0);P([w("useParallax")],He.prototype,"_useParallax",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"useParallax",void 0);P([w("useParallaxOcclusion")],He.prototype,"_useParallaxOcclusion",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"useParallaxOcclusion",void 0);P([w()],He.prototype,"parallaxScaleBias",void 0);P([w("roughness")],He.prototype,"_roughness",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"roughness",void 0);P([w()],He.prototype,"indexOfRefraction",void 0);P([w()],He.prototype,"invertRefractionY",void 0);P([w()],He.prototype,"alphaCutOff",void 0);P([w("useLightmapAsShadowmap")],He.prototype,"_useLightmapAsShadowmap",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"useLightmapAsShadowmap",void 0);P([Vu("diffuseFresnelParameters")],He.prototype,"_diffuseFresnelParameters",void 0);P([oe("_markAllSubMeshesAsFresnelDirty")],He.prototype,"diffuseFresnelParameters",void 0);P([Vu("opacityFresnelParameters")],He.prototype,"_opacityFresnelParameters",void 0);P([oe("_markAllSubMeshesAsFresnelAndMiscDirty")],He.prototype,"opacityFresnelParameters",void 0);P([Vu("reflectionFresnelParameters")],He.prototype,"_reflectionFresnelParameters",void 0);P([oe("_markAllSubMeshesAsFresnelDirty")],He.prototype,"reflectionFresnelParameters",void 0);P([Vu("refractionFresnelParameters")],He.prototype,"_refractionFresnelParameters",void 0);P([oe("_markAllSubMeshesAsFresnelDirty")],He.prototype,"refractionFresnelParameters",void 0);P([Vu("emissiveFresnelParameters")],He.prototype,"_emissiveFresnelParameters",void 0);P([oe("_markAllSubMeshesAsFresnelDirty")],He.prototype,"emissiveFresnelParameters",void 0);P([w("useReflectionFresnelFromSpecular")],He.prototype,"_useReflectionFresnelFromSpecular",void 0);P([oe("_markAllSubMeshesAsFresnelDirty")],He.prototype,"useReflectionFresnelFromSpecular",void 0);P([w("useGlossinessFromSpecularMapAlpha")],He.prototype,"_useGlossinessFromSpecularMapAlpha",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"useGlossinessFromSpecularMapAlpha",void 0);P([w("maxSimultaneousLights")],He.prototype,"_maxSimultaneousLights",void 0);P([oe("_markAllSubMeshesAsLightsDirty")],He.prototype,"maxSimultaneousLights",void 0);P([w("invertNormalMapX")],He.prototype,"_invertNormalMapX",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"invertNormalMapX",void 0);P([w("invertNormalMapY")],He.prototype,"_invertNormalMapY",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"invertNormalMapY",void 0);P([w("twoSidedLighting")],He.prototype,"_twoSidedLighting",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],He.prototype,"twoSidedLighting",void 0);P([w("applyDecalMapAfterDetailMap")],He.prototype,"_applyDecalMapAfterDetailMap",void 0);P([oe("_markAllSubMeshesAsMiscDirty")],He.prototype,"applyDecalMapAfterDetailMap",void 0);Ft("BABYLON.StandardMaterial",He);Qt.DefaultMaterialFactory=n=>new He("default material",n)});function bx(n,e,t,i,r,s=!1){let a=Hr.Zero();return vg(n,e,t,i,a,r,s),a}function vg(n,e,t,i,r,s,a=!1,o=!1){let l=n.getEngine();if(!s&&!(s=n.activeCamera)&&!(s=n.cameraToUseForPointers))return n;let c=s.viewport,f=l.getRenderHeight(),{x:h,y:d,width:u,height:m}=c.toGlobal(l.getRenderWidth(),f),_=1/l.getHardwareScalingLevel();return e=e*_-h,t=t*_-(f-d-m),r.update(e,t,u,m,i||K.IdentityReadOnly,a?K.IdentityReadOnly:s.getViewMatrix(),s.getProjectionMatrix(),o),n}function yH(n,e,t,i){let r=Hr.Zero();return uP(n,e,t,r,i),r}function uP(n,e,t,i,r){if(!Hn)return n;let s=n.getEngine();if(!r&&!(r=n.activeCamera)&&!(r=n.cameraToUseForPointers))throw new Error("Active camera not set");let a=r.viewport,o=s.getRenderHeight(),{x:l,y:c,width:f,height:h}=a.toGlobal(s.getRenderWidth(),o),d=K.Identity(),u=1/s.getHardwareScalingLevel();return e=e*u-l,t=t*u-(o-c-h),i.update(e,t,f,h,d,d,r.getProjectionMatrix()),n}function Rx(n,e,t,i,r,s,a,o){let l=e(i,t.enableDistantPicking);return mP(n,t,i,l,r,s,a,o)}function mP(n,e,t,i,r,s,a,o){let l=e.intersects(i,r,a,s,t,o);return!l||!l.hit||!r&&n!=null&&l.distance>=n.distance?null:l}function ooe(n,e){return n==="InstancedLinesMesh"||n==="LinesMesh"?e.intersectionThreshold:0}function PH(n){let e=n.getClassName();if(e==="GreasedLineMesh")return{rawBoundingInfo:null,intersectionThreshold:0};let t=n.rawBoundingInfo;return{rawBoundingInfo:t,intersectionThreshold:t?ooe(e,n):0}}function DH(n,e,t,i,r){let s=n(t,e.enableDistantPicking);return!s.intersectsSphere(i.boundingSphere,r)||!s.intersectsBox(i.boundingBox,r)?null:s}function pP(n,e,t,i,r,s){let a=null,o=!!(n.activeCameras&&n.activeCameras.length>1&&n.cameraToUseForPointers!==n.activeCamera),l=n.cameraToUseForPointers||n.activeCamera,c=CH.internalPickerForMesh||Rx,f=c===Rx;for(let h=0;h>4);for(let E=0;E1&&n.cameraToUseForPointers!==n.activeCamera),a=n.cameraToUseForPointers||n.activeCamera,o=CH.internalPickerForMesh||Rx,l=o===Rx;for(let c=0;c>4);for(let A=0;A(n._tempPickingRay||(n._tempPickingRay=Hr.Zero()),vg(n,e,t,o,n._tempPickingRay,s||null),n._tempPickingRay),i,r,!0);return a&&(a.ray=bx(n,e,t,K.Identity(),s||null)),a}function NH(n,e,t,i,r,s,a,o=!1){let l=pP(n,(c,f)=>(n._tempPickingRay||(n._tempPickingRay=Hr.Zero()),vg(n,e,t,c,n._tempPickingRay,s||null,!1,f),n._tempPickingRay),i,r,!1,a);return l&&(l.ray=bx(n,e,t,K.Identity(),s||null)),l}function wH(n,e,t,i,r){let s=pP(n,a=>(n._pickWithRayInverseMatrix||(n._pickWithRayInverseMatrix=K.Identity()),a.invertToRef(n._pickWithRayInverseMatrix),n._cachedRayForTransform||(n._cachedRayForTransform=Hr.Zero()),Hr.TransformToRef(e,n._pickWithRayInverseMatrix,n._cachedRayForTransform),n._cachedRayForTransform),t,i,!1,r);return s&&(s.ray=e),s}function FH(n,e,t,i,r,s){return LH(n,a=>bx(n,e,t,a,r||null),i,s)}function BH(n,e,t,i){return LH(n,r=>(n._pickWithRayInverseMatrix||(n._pickWithRayInverseMatrix=K.Identity()),r.invertToRef(n._pickWithRayInverseMatrix),n._cachedRayForTransform||(n._cachedRayForTransform=Hr.Zero()),Hr.TransformToRef(e,n._pickWithRayInverseMatrix,n._cachedRayForTransform),n._cachedRayForTransform),t,i)}function MH(n,e,t=100,i,r){i||(i=n.getWorldMatrix()),e.length=t,r?e.origin.copyFrom(r):e.origin.copyFrom(n.position);let s=Q.Vector3[2];s.set(0,0,n._scene.useRightHandedSystem?-1:1);let a=Q.Vector3[3];return b.TransformNormalToRef(s,i,a),b.NormalizeToRef(a,e.direction),e}function UH(n,e){e&&(e.prototype.getForwardRay=function(t=100,i,r){return MH(this,new Hr(b.Zero(),b.Zero(),t),t,i,r)},e.prototype.getForwardRayToRef=function(t,i=100,r,s){return MH(this,t,i,r,s)}),n&&(Uh._IsPickingAvailable=!0,n.prototype.createPickingRay=function(t,i,r,s,a=!1){return bx(this,t,i,r,s,a)})}var CH,Hr,_P=C(()=>{An();Ge();Xo();UC();L_();Pi();XM();CH={internalPickerForMesh:void 0},Hr=class n{constructor(e,t,i=Number.MAX_VALUE,r=Nt){this.origin=e,this.direction=t,this.length=i,this.epsilon=r}clone(){return new n(this.origin.clone(),this.direction.clone(),this.length)}intersectsBoxMinMax(e,t,i=0){let r=n._TmpVector3[0].copyFromFloats(e.x-i,e.y-i,e.z-i),s=n._TmpVector3[1].copyFromFloats(t.x+i,t.y+i,t.z+i),a=0,o=Number.MAX_VALUE,l,c,f,h;if(Math.abs(this.direction.x)<1e-7){if(this.origin.xs.x)return!1}else if(l=1/this.direction.x,c=(r.x-this.origin.x)*l,f=(s.x-this.origin.x)*l,f===-1/0&&(f=1/0),c>f&&(h=c,c=f,f=h),a=Math.max(c,a),o=Math.min(f,o),a>o)return!1;if(Math.abs(this.direction.y)<1e-7){if(this.origin.ys.y)return!1}else if(l=1/this.direction.y,c=(r.y-this.origin.y)*l,f=(s.y-this.origin.y)*l,f===-1/0&&(f=1/0),c>f&&(h=c,c=f,f=h),a=Math.max(c,a),o=Math.min(f,o),a>o)return!1;if(Math.abs(this.direction.z)<1e-7){if(this.origin.zs.z)return!1}else if(l=1/this.direction.z,c=(r.z-this.origin.z)*l,f=(s.z-this.origin.z)*l,f===-1/0&&(f=1/0),c>f&&(h=c,c=f,f=h),a=Math.max(c,a),o=Math.min(f,o),a>o)return!1;return!0}intersectsBox(e,t=0){return this.intersectsBoxMinMax(e.minimum,e.maximum,t)}intersectsSphere(e,t=0){let i=e.center.x-this.origin.x,r=e.center.y-this.origin.y,s=e.center.z-this.origin.z,a=i*i+r*r+s*s,o=e.radius+t,l=o*o;if(a<=l)return!0;let c=i*this.direction.x+r*this.direction.y+s*this.direction.z;return c<0?!1:a-c*c<=l}intersectsTriangle(e,t,i){let r=n._TmpVector3[0],s=n._TmpVector3[1],a=n._TmpVector3[2],o=n._TmpVector3[3],l=n._TmpVector3[4];t.subtractToRef(e,r),i.subtractToRef(e,s),b.CrossToRef(this.direction,s,a);let c=b.Dot(r,a);if(c===0)return null;let f=1/c;this.origin.subtractToRef(e,o);let h=b.Dot(o,a)*f;if(h<-this.epsilon||h>1+this.epsilon)return null;b.CrossToRef(o,r,l);let d=b.Dot(this.direction,l)*f;if(d<-this.epsilon||h+d>1+this.epsilon)return null;let u=b.Dot(s,l)*f;return u>this.length||u<0?null:new Gh(1-h-d,h,u)}intersectsPlane(e){let t,i=b.Dot(e.normal,this.direction);if(Math.abs(i)<999999997475243e-21)return null;{let r=b.Dot(e.normal,this.origin);return t=(-e.d-r)/i,t<0?t<-999999997475243e-21?null:0:t}}intersectsAxis(e,t=0){switch(e){case"y":{let i=(this.origin.y-t)/this.direction.y;return i>0?null:new b(this.origin.x+this.direction.x*-i,t,this.origin.z+this.direction.z*-i)}case"x":{let i=(this.origin.x-t)/this.direction.x;return i>0?null:new b(t,this.origin.y+this.direction.y*-i,this.origin.z+this.direction.z*-i)}case"z":{let i=(this.origin.z-t)/this.direction.z;return i>0?null:new b(this.origin.x+this.direction.x*-i,this.origin.y+this.direction.y*-i,t)}default:return null}}intersectsMesh(e,t,i,r=!1,s,a=!1){let o=Q.Matrix[0];return e.getWorldMatrix().invertToRef(o),this._tmpRay?n.TransformToRef(this,o,this._tmpRay):this._tmpRay=n.Transform(this,o),e.intersects(this._tmpRay,t,i,r,s,a)}intersectsMeshes(e,t,i){i?i.length=0:i=[];for(let r=0;rt.distance?1:0}intersectionSegment(e,t,i){let r=this.origin,s=Q.Vector3[0],a=Q.Vector3[1],o=Q.Vector3[2],l=Q.Vector3[3];t.subtractToRef(e,s),this.direction.scaleToRef(n._Rayl,o),r.addToRef(o,a),e.subtractToRef(r,l);let c=b.Dot(s,s),f=b.Dot(s,o),h=b.Dot(o,o),d=b.Dot(s,l),u=b.Dot(o,l),m=c*h-f*f,_,p=m,g,v=m;mp&&(_=p,g=u+f,v=h)),g<0?(g=0,-d<0?_=0:-d>c?_=p:(_=-d,p=c)):g>v&&(g=v,-d+f<0?_=0:-d+f>c?_=p:(_=-d+f,p=c));let x=Math.abs(_)0&&A<=this.length&&R.lengthSquared(){ps();el();_P();_P();UH(Qt,ut);Qt.prototype.createPickingRayToRef=function(n,e,t,i,r,s=!1,a=!1){return vg(this,n,e,t,i,r,s,a)};Qt.prototype.createPickingRayInCameraSpace=function(n,e,t){return yH(this,n,e,t)};Qt.prototype.createPickingRayInCameraSpaceToRef=function(n,e,t,i){return uP(this,n,e,t,i)};Qt.prototype.pickWithBoundingInfo=function(n,e,t,i,r){return OH(this,n,e,t,i,r)};Qt.prototype.pick=function(n,e,t,i,r,s,a=!1){return NH(this,n,e,t,i,r,s,a)};Qt.prototype.pickWithRay=function(n,e,t,i){return wH(this,n,e,t,i)};Qt.prototype.multiPick=function(n,e,t,i,r){return FH(this,n,e,t,i,r)};Qt.prototype.multiPickWithRay=function(n,e,t){return BH(this,n,e,t)}});var VH,loe,vP=C(()=>{G();VH="kernelBlurVaryingDeclaration",loe="varying sampleCoord{X}: vec2f;";T.IncludesShadersStoreWGSL[VH]||(T.IncludesShadersStoreWGSL[VH]=loe)});var GH,coe,Ix=C(()=>{G();GH="packingFunctions",coe=`fn pack(depth: f32)->vec4f {const bit_shift: vec4f= vec4f(255.0*255.0*255.0,255.0*255.0,255.0,1.0);const bit_mask: vec4f= vec4f(0.0,1.0/255.0,1.0/255.0,1.0/255.0);var res: vec4f=fract(depth*bit_shift);res-=res.xxyz*bit_mask;return res;} fn unpack(color: vec4f)->f32 -{const bit_shift: vec4f= vec4f(1.0/(255.0*255.0*255.0),1.0/(255.0*255.0),1.0/255.0,1.0);return dot(color,bit_shift);}`;S.IncludesShadersStoreWGSL[yH]||(S.IncludesShadersStoreWGSL[yH]=kae)});var PH,Wae,DH=C(()=>{k();PH="kernelBlurFragment",Wae=`#ifdef DOF +{const bit_shift: vec4f= vec4f(1.0/(255.0*255.0*255.0),1.0/(255.0*255.0),1.0/255.0,1.0);return dot(color,bit_shift);}`;T.IncludesShadersStoreWGSL[GH]||(T.IncludesShadersStoreWGSL[GH]=coe)});var kH,foe,WH=C(()=>{G();kH="kernelBlurFragment",foe=`#ifdef DOF factor=sampleCoC(fragmentInputs.sampleCoord{X}); computedWeight=KERNEL_WEIGHT{X}*factor;sumOfWeights+=computedWeight; #else @@ -9934,7 +9934,7 @@ blend+=unpack(textureSample(textureSampler,textureSamplerSampler,fragmentInputs. #else blend+=textureSample(textureSampler,textureSamplerSampler,fragmentInputs.sampleCoord{X})*computedWeight; #endif -`;S.IncludesShadersStoreWGSL[PH]||(S.IncludesShadersStoreWGSL[PH]=Wae)});var LH,Hae,OH=C(()=>{k();LH="kernelBlurFragment2",Hae=`#ifdef DOF +`;T.IncludesShadersStoreWGSL[kH]||(T.IncludesShadersStoreWGSL[kH]=foe)});var HH,hoe,zH=C(()=>{G();HH="kernelBlurFragment2",hoe=`#ifdef DOF factor=sampleCoC(fragmentInputs.sampleCenter+uniforms.delta*KERNEL_DEP_OFFSET{X});computedWeight=KERNEL_DEP_WEIGHT{X}*factor;sumOfWeights+=computedWeight; #else computedWeight=KERNEL_DEP_WEIGHT{X}; @@ -9944,7 +9944,7 @@ blend+=unpack(textureSample(textureSampler,textureSamplerSampler,fragmentInputs. #else blend+=textureSample(textureSampler,textureSamplerSampler,fragmentInputs.sampleCenter+uniforms.delta*KERNEL_DEP_OFFSET{X})*computedWeight; #endif -`;S.IncludesShadersStoreWGSL[LH]||(S.IncludesShadersStoreWGSL[LH]=Hae)});var FH={};et(FH,{kernelBlurPixelShaderWGSL:()=>zae});var cP,NH,zae,wH=C(()=>{k();lP();_x();DH();OH();cP="kernelBlurPixelShader",NH=`var textureSamplerSampler: sampler;var textureSampler: texture_2d;uniform delta: vec2f;varying sampleCenter: vec2f; +`;T.IncludesShadersStoreWGSL[HH]||(T.IncludesShadersStoreWGSL[HH]=hoe)});var YH={};$e(YH,{kernelBlurPixelShaderWGSL:()=>doe});var EP,XH,doe,KH=C(()=>{G();vP();Ix();WH();zH();EP="kernelBlurPixelShader",XH=`var textureSamplerSampler: sampler;var textureSampler: texture_2d;uniform delta: vec2f;varying sampleCenter: vec2f; #ifdef DOF var circleOfConfusionSamplerSampler: sampler;var circleOfConfusionSampler: texture_2d;fn sampleCoC(offset: vec2f)->f32 {var coc: f32=textureSample(circleOfConfusionSampler,circleOfConfusionSamplerSampler,offset).r;return coc; } #endif @@ -9979,7 +9979,7 @@ fragmentOutputs.color=blend; #ifdef DOF fragmentOutputs.color/=sumOfWeights; #endif -}`;S.ShadersStoreWGSL[cP]||(S.ShadersStoreWGSL[cP]=NH);zae={name:cP,shader:NH}});var BH,Xae,UH=C(()=>{k();BH="kernelBlurVertex",Xae="vertexOutputs.sampleCoord{X}=vertexOutputs.sampleCenter+uniforms.delta*KERNEL_OFFSET{X};";S.IncludesShadersStoreWGSL[BH]||(S.IncludesShadersStoreWGSL[BH]=Xae)});var GH={};et(GH,{kernelBlurVertexShaderWGSL:()=>Yae});var fP,VH,Yae,kH=C(()=>{k();lP();UH();fP="kernelBlurVertexShader",VH=`attribute position: vec2f;uniform delta: vec2f;varying sampleCenter: vec2f; +}`;T.ShadersStoreWGSL[EP]||(T.ShadersStoreWGSL[EP]=XH);doe={name:EP,shader:XH}});var jH,uoe,qH=C(()=>{G();jH="kernelBlurVertex",uoe="vertexOutputs.sampleCoord{X}=vertexOutputs.sampleCenter+uniforms.delta*KERNEL_OFFSET{X};";T.IncludesShadersStoreWGSL[jH]||(T.IncludesShadersStoreWGSL[jH]=uoe)});var QH={};$e(QH,{kernelBlurVertexShaderWGSL:()=>moe});var SP,ZH,moe,$H=C(()=>{G();vP();qH();SP="kernelBlurVertexShader",ZH=`attribute position: vec2f;uniform delta: vec2f;varying sampleCenter: vec2f; #include[0..varyingCount] #define CUSTOM_VERTEX_DEFINITIONS @vertex @@ -9989,10 +9989,10 @@ vertexOutputs.sampleCenter=(vertexInputs.position*madd+madd); #include[0..varyingCount] vertexOutputs.position= vec4f(vertexInputs.position,0.0,1.0); #define CUSTOM_VERTEX_MAIN_END -}`;S.ShadersStoreWGSL[fP]||(S.ShadersStoreWGSL[fP]=VH);Yae={name:fP,shader:VH}});var WH,Kae,hP=C(()=>{k();WH="kernelBlurVaryingDeclaration",Kae="varying vec2 sampleCoord{X};";S.IncludesShadersStore[WH]||(S.IncludesShadersStore[WH]=Kae)});var HH,jae,gx=C(()=>{k();HH="packingFunctions",jae=`vec4 pack(float depth) +}`;T.ShadersStoreWGSL[SP]||(T.ShadersStoreWGSL[SP]=ZH);moe={name:SP,shader:ZH}});var JH,poe,TP=C(()=>{G();JH="kernelBlurVaryingDeclaration",poe="varying vec2 sampleCoord{X};";T.IncludesShadersStore[JH]||(T.IncludesShadersStore[JH]=poe)});var ez,_oe,Mx=C(()=>{G();ez="packingFunctions",_oe=`vec4 pack(float depth) {const vec4 bit_shift=vec4(255.0*255.0*255.0,255.0*255.0,255.0,1.0);const vec4 bit_mask=vec4(0.0,1.0/255.0,1.0/255.0,1.0/255.0);vec4 res=fract(depth*bit_shift);res-=res.xxyz*bit_mask;return res;} float unpack(vec4 color) -{const vec4 bit_shift=vec4(1.0/(255.0*255.0*255.0),1.0/(255.0*255.0),1.0/255.0,1.0);return dot(color,bit_shift);}`;S.IncludesShadersStore[HH]||(S.IncludesShadersStore[HH]=jae)});var zH,qae,XH=C(()=>{k();zH="kernelBlurFragment",qae=`#ifdef DOF +{const vec4 bit_shift=vec4(1.0/(255.0*255.0*255.0),1.0/(255.0*255.0),1.0/255.0,1.0);return dot(color,bit_shift);}`;T.IncludesShadersStore[ez]||(T.IncludesShadersStore[ez]=_oe)});var tz,goe,iz=C(()=>{G();tz="kernelBlurFragment",goe=`#ifdef DOF factor=sampleCoC(sampleCoord{X}); computedWeight=KERNEL_WEIGHT{X}*factor;sumOfWeights+=computedWeight; #else @@ -10003,7 +10003,7 @@ blend+=unpack(texture2D(textureSampler,sampleCoord{X}))*computedWeight; #else blend+=texture2D(textureSampler,sampleCoord{X})*computedWeight; #endif -`;S.IncludesShadersStore[zH]||(S.IncludesShadersStore[zH]=qae)});var YH,Zae,KH=C(()=>{k();YH="kernelBlurFragment2",Zae=`#ifdef DOF +`;T.IncludesShadersStore[tz]||(T.IncludesShadersStore[tz]=goe)});var rz,voe,nz=C(()=>{G();rz="kernelBlurFragment2",voe=`#ifdef DOF factor=sampleCoC(sampleCenter+delta*KERNEL_DEP_OFFSET{X});computedWeight=KERNEL_DEP_WEIGHT{X}*factor;sumOfWeights+=computedWeight; #else computedWeight=KERNEL_DEP_WEIGHT{X}; @@ -10013,7 +10013,7 @@ blend+=unpack(texture2D(textureSampler,sampleCenter+delta*KERNEL_DEP_OFFSET{X})) #else blend+=texture2D(textureSampler,sampleCenter+delta*KERNEL_DEP_OFFSET{X})*computedWeight; #endif -`;S.IncludesShadersStore[YH]||(S.IncludesShadersStore[YH]=Zae)});var qH={};et(qH,{kernelBlurPixelShader:()=>Qae});var dP,jH,Qae,ZH=C(()=>{k();hP();gx();XH();KH();dP="kernelBlurPixelShader",jH=`uniform sampler2D textureSampler;uniform vec2 delta;varying vec2 sampleCenter; +`;T.IncludesShadersStore[rz]||(T.IncludesShadersStore[rz]=voe)});var az={};$e(az,{kernelBlurPixelShader:()=>Eoe});var AP,sz,Eoe,oz=C(()=>{G();TP();Mx();iz();nz();AP="kernelBlurPixelShader",sz=`uniform sampler2D textureSampler;uniform vec2 delta;varying vec2 sampleCenter; #ifdef DOF uniform sampler2D circleOfConfusionSampler;float sampleCoC(in vec2 offset) {float coc=texture2D(circleOfConfusionSampler,offset).r;return coc; } #endif @@ -10048,7 +10048,7 @@ gl_FragColor=blend; #ifdef DOF gl_FragColor/=sumOfWeights; #endif -}`;S.ShadersStore[dP]||(S.ShadersStore[dP]=jH);Qae={name:dP,shader:jH}});var QH,Jae,JH=C(()=>{k();QH="kernelBlurVertex",Jae="sampleCoord{X}=sampleCenter+delta*KERNEL_OFFSET{X};";S.IncludesShadersStore[QH]||(S.IncludesShadersStore[QH]=Jae)});var ez={};et(ez,{kernelBlurVertexShader:()=>$ae});var uP,$H,$ae,tz=C(()=>{k();hP();JH();uP="kernelBlurVertexShader",$H=`attribute vec2 position;uniform vec2 delta;varying vec2 sampleCenter; +}`;T.ShadersStore[AP]||(T.ShadersStore[AP]=sz);Eoe={name:AP,shader:sz}});var lz,Soe,cz=C(()=>{G();lz="kernelBlurVertex",Soe="sampleCoord{X}=sampleCenter+delta*KERNEL_OFFSET{X};";T.IncludesShadersStore[lz]||(T.IncludesShadersStore[lz]=Soe)});var hz={};$e(hz,{kernelBlurVertexShader:()=>Toe});var xP,fz,Toe,dz=C(()=>{G();TP();cz();xP="kernelBlurVertexShader",fz=`attribute vec2 position;uniform vec2 delta;varying vec2 sampleCenter; #include[0..varyingCount] const vec2 madd=vec2(0.5,0.5); #define CUSTOM_VERTEX_DEFINITIONS @@ -10058,13 +10058,13 @@ sampleCenter=(position*madd+madd); #include[0..varyingCount] gl_Position=vec4(position,0.0,1.0); #define CUSTOM_VERTEX_MAIN_END -}`;S.ShadersStore[uP]||(S.ShadersStore[uP]=$H);$ae={name:uP,shader:$H}});var Xn,mP=C(()=>{Lh();Pi();Xn=class n extends kr{_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.all([Promise.resolve().then(()=>(wH(),FH)),Promise.resolve().then(()=>(kH(),GH))]))):t.push(Promise.all([Promise.resolve().then(()=>(ZH(),qH)),Promise.resolve().then(()=>(tz(),ez))]))}constructor(e,t=null,i,r,s){let a=!!(s!=null&&s.blockCompilation);super({...s,name:e,engine:t||Le.LastCreatedEngine,useShaderStore:!0,useAsPostProcess:!0,fragmentShader:n.FragmentUrl,uniforms:n.Uniforms,samplers:n.Samplers,vertexUrl:n.VertexUrl,blockCompilation:!0}),this._packedFloat=!1,this._staticDefines="",this.textureWidth=0,this.textureHeight=0,this._staticDefines=s?Array.isArray(s.defines)?s.defines.join(` -`):s.defines||"":"",this.options.blockCompilation=a,i!==void 0&&(this.direction=i),r!==void 0&&(this.kernel=r)}set kernel(e){this._idealKernel!==e&&(e=Math.max(e,1),this._idealKernel=e,this._kernel=this._nearestBestKernel(e),this.options.blockCompilation||this._updateParameters())}get kernel(){return this._idealKernel}set packedFloat(e){this._packedFloat!==e&&(this._packedFloat=e,this.options.blockCompilation||this._updateParameters())}get packedFloat(){return this._packedFloat}bind(e=!1){super.bind(e),this._drawWrapper.effect.setFloat2("delta",1/this.textureWidth*this.direction.x,1/this.textureHeight*this.direction.y)}_updateParameters(e,t){let i=this._kernel,r=(i-1)/2,s=[],a=[],o=0;for(let p=0;p{Oh();Pi();Xn=class n extends kr{_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.all([Promise.resolve().then(()=>(KH(),YH)),Promise.resolve().then(()=>($H(),QH))]))):t.push(Promise.all([Promise.resolve().then(()=>(oz(),az)),Promise.resolve().then(()=>(dz(),hz))]))}constructor(e,t=null,i,r,s){let a=!!(s!=null&&s.blockCompilation);super({...s,name:e,engine:t||Le.LastCreatedEngine,useShaderStore:!0,useAsPostProcess:!0,fragmentShader:n.FragmentUrl,uniforms:n.Uniforms,samplers:n.Samplers,vertexUrl:n.VertexUrl,blockCompilation:!0}),this._packedFloat=!1,this._staticDefines="",this.textureWidth=0,this.textureHeight=0,this._staticDefines=s?Array.isArray(s.defines)?s.defines.join(` +`):s.defines||"":"",this.options.blockCompilation=a,i!==void 0&&(this.direction=i),r!==void 0&&(this.kernel=r)}set kernel(e){this._idealKernel!==e&&(e=Math.max(e,1),this._idealKernel=e,this._kernel=this._nearestBestKernel(e),this.options.blockCompilation||this._updateParameters())}get kernel(){return this._idealKernel}set packedFloat(e){this._packedFloat!==e&&(this._packedFloat=e,this.options.blockCompilation||this._updateParameters())}get packedFloat(){return this._packedFloat}bind(e=!1){super.bind(e),this._drawWrapper.effect.setFloat2("delta",1/this.textureWidth*this.direction.x,1/this.textureHeight*this.direction.y)}_updateParameters(e,t){let i=this._kernel,r=(i-1)/2,s=[],a=[],o=0;for(let p=0;p0)return Math.max(i,3);return Math.max(t,3)}_gaussianWeight(e){let t=.3333333333333333,i=Math.sqrt(2*Math.PI)*t,r=-(e*e/(2*t*t));return 1/i*Math.exp(r)}_glslFloat(e,t=8){return e.toFixed(t).replace(/0+$/,"")}};Xn.VertexUrl="kernelBlur";Xn.FragmentUrl="kernelBlur";Xn.Uniforms=["delta","direction"];Xn.Samplers=["circleOfConfusionSampler"]});var Ma,pP=C(()=>{kt();Vl();Gr();Vi();Ut();_r();mP();Ma=class n extends Ri{get direction(){return this._effectWrapper.direction}set direction(e){this._effectWrapper.direction=e}set kernel(e){this._effectWrapper.kernel=e}get kernel(){return this._effectWrapper.kernel}set packedFloat(e){this._effectWrapper.packedFloat=e}get packedFloat(){return this._effectWrapper.packedFloat}getClassName(){return"BlurPostProcess"}constructor(e,t,i,r,s=null,a=ge.BILINEAR_SAMPLINGMODE,o,l,c=0,f="",h=!1,d=5){let u=typeof r=="number"?h:!!r.blockCompilation,m={uniforms:Xn.Uniforms,samplers:Xn.Samplers,size:typeof r=="number"?r:void 0,camera:s,samplingMode:a,engine:o,reusable:l,textureType:c,vertexUrl:Xn.VertexUrl,indexParameters:{varyingCount:0,depCount:0},textureFormat:d,defines:f,...r,blockCompilation:!0};super(e,Xn.FragmentUrl,{effectWrapper:typeof r=="number"||!r.effectWrapper?new Xn(e,o,void 0,void 0,m):void 0,...m}),this._effectWrapper.options.blockCompilation=u,this.direction=t,this.onApplyObservable.add(()=>{this._effectWrapper.textureWidth=this._outputTexture?this._outputTexture.width:this.width,this._effectWrapper.textureHeight=this._outputTexture?this._outputTexture.height:this.height}),this.kernel=i}updateEffect(e=null,t=null,i=null,r,s,a){this._effectWrapper._updateParameters(s,a)}static _Parse(e,t,i,r){return tt.Parse(()=>new n(e.name,e.direction,e.kernel,e.options,t,e.renderTargetSamplingMode,i.getEngine(),e.reusable,e.textureType,void 0,!1),e,i,r)}};P([wu()],Ma.prototype,"direction",null);P([F()],Ma.prototype,"kernel",null);P([F()],Ma.prototype,"packedFloat",null);wt("BABYLON.BlurPostProcess",Ma)});var iz,eoe,rz=C(()=>{k();iz="bayerDitherFunctions",eoe=`fn bayerDither2(_P: vec2f)->f32 {return ((2.0*_P.y+_P.x+1.0)%(4.0));} +`,_++;this.packedFloat&&(m+="#define PACKEDFLOAT 1"),this.options.blockCompilation=!1,this.updateEffect(m,null,null,{varyingCount:u,depCount:_},e,t)}_nearestBestKernel(e){let t=Math.round(e);for(let i of[t,t-1,t+1,t-2,t+2])if(i%2!==0&&Math.floor(i/2)%2===0&&i>0)return Math.max(i,3);return Math.max(t,3)}_gaussianWeight(e){let t=.3333333333333333,i=Math.sqrt(2*Math.PI)*t,r=-(e*e/(2*t*t));return 1/i*Math.exp(r)}_glslFloat(e,t=8){return e.toFixed(t).replace(/0+$/,"")}};Xn.VertexUrl="kernelBlur";Xn.FragmentUrl="kernelBlur";Xn.Uniforms=["delta","direction"];Xn.Samplers=["circleOfConfusionSampler"]});var Da,bP=C(()=>{kt();kl();Gr();Vi();Ut();Er();RP();Da=class n extends Ri{get direction(){return this._effectWrapper.direction}set direction(e){this._effectWrapper.direction=e}set kernel(e){this._effectWrapper.kernel=e}get kernel(){return this._effectWrapper.kernel}set packedFloat(e){this._effectWrapper.packedFloat=e}get packedFloat(){return this._effectWrapper.packedFloat}getClassName(){return"BlurPostProcess"}constructor(e,t,i,r,s=null,a=ge.BILINEAR_SAMPLINGMODE,o,l,c=0,f="",h=!1,d=5){let u=typeof r=="number"?h:!!r.blockCompilation,m={uniforms:Xn.Uniforms,samplers:Xn.Samplers,size:typeof r=="number"?r:void 0,camera:s,samplingMode:a,engine:o,reusable:l,textureType:c,vertexUrl:Xn.VertexUrl,indexParameters:{varyingCount:0,depCount:0},textureFormat:d,defines:f,...r,blockCompilation:!0};super(e,Xn.FragmentUrl,{effectWrapper:typeof r=="number"||!r.effectWrapper?new Xn(e,o,void 0,void 0,m):void 0,...m}),this._effectWrapper.options.blockCompilation=u,this.direction=t,this.onApplyObservable.add(()=>{this._effectWrapper.textureWidth=this._outputTexture?this._outputTexture.width:this.width,this._effectWrapper.textureHeight=this._outputTexture?this._outputTexture.height:this.height}),this.kernel=i}updateEffect(e=null,t=null,i=null,r,s,a){this._effectWrapper._updateParameters(s,a)}static _Parse(e,t,i,r){return tt.Parse(()=>new n(e.name,e.direction,e.kernel,e.options,t,e.renderTargetSamplingMode,i.getEngine(),e.reusable,e.textureType,void 0,!1),e,i,r)}};P([Gu()],Da.prototype,"direction",null);P([w()],Da.prototype,"kernel",null);P([w()],Da.prototype,"packedFloat",null);Ft("BABYLON.BlurPostProcess",Da)});var uz,Aoe,mz=C(()=>{G();uz="bayerDitherFunctions",Aoe=`fn bayerDither2(_P: vec2f)->f32 {return ((2.0*_P.y+_P.x+1.0)%(4.0));} fn bayerDither4(_P: vec2f)->f32 {var P1: vec2f=((_P)%(2.0)); var P2: vec2f=floor(0.5*((_P)%(4.0))); return 4.0*bayerDither2(P1)+bayerDither2(P2);} @@ -10072,7 +10072,7 @@ fn bayerDither8(_P: vec2f)->f32 {var P1: vec2f=((_P)%(2.0)); var P2: vec2f=floor(0.5 *((_P)%(4.0))); var P4: vec2f=floor(0.25*((_P)%(8.0))); return 4.0*(4.0*bayerDither2(P1)+bayerDither2(P2))+bayerDither2(P4);} -`;S.IncludesShadersStoreWGSL[iz]||(S.IncludesShadersStoreWGSL[iz]=eoe)});var nz,toe,sz=C(()=>{k();_x();rz();nz="shadowMapFragmentExtraDeclaration",toe=`#if SM_FLOAT==0 +`;T.IncludesShadersStoreWGSL[uz]||(T.IncludesShadersStoreWGSL[uz]=Aoe)});var pz,xoe,_z=C(()=>{G();Ix();mz();pz="shadowMapFragmentExtraDeclaration",xoe=`#if SM_FLOAT==0 #include #endif #if SM_SOFTTRANSPARENTSHADOW==1 @@ -10087,7 +10087,7 @@ uniform biasAndScaleSM: vec3f;uniform depthValuesSM: vec2f; #if defined(SM_DEPTHCLAMP) && SM_DEPTHCLAMP==1 varying zSM: f32; #endif -`;S.IncludesShadersStoreWGSL[nz]||(S.IncludesShadersStoreWGSL[nz]=toe)});var az,ioe,oz=C(()=>{k();az="shadowMapFragment",ioe=`var depthSM: f32=fragmentInputs.vDepthMetricSM; +`;T.IncludesShadersStoreWGSL[pz]||(T.IncludesShadersStoreWGSL[pz]=xoe)});var gz,Roe,vz=C(()=>{G();gz="shadowMapFragment",Roe=`var depthSM: f32=fragmentInputs.vDepthMetricSM; #if defined(SM_DEPTHCLAMP) && SM_DEPTHCLAMP==1 #if SM_USEDISTANCE==1 depthSM=(length(fragmentInputs.vPositionWSM-uniforms.lightDataSM)+uniforms.depthValuesSM.x)/uniforms.depthValuesSM.y+uniforms.biasAndScaleSM.x; @@ -10115,7 +10115,7 @@ fragmentOutputs.color= vec4f(depthSM,1.0,1.0,1.0); #else fragmentOutputs.color=pack(depthSM); #endif -`;S.IncludesShadersStoreWGSL[az]||(S.IncludesShadersStoreWGSL[az]=ioe)});var cz={};et(cz,{shadowMapPixelShaderWGSL:()=>roe});var _P,lz,roe,fz=C(()=>{k();sz();ic();rc();oz();_P="shadowMapPixelShader",lz=`#include +`;T.IncludesShadersStoreWGSL[gz]||(T.IncludesShadersStoreWGSL[gz]=Roe)});var Sz={};$e(Sz,{shadowMapPixelShaderWGSL:()=>boe});var IP,Ez,boe,Tz=C(()=>{G();_z();nc();sc();vz();IP="shadowMapPixelShader",Ez=`#include #ifdef ALPHATEXTURE varying vUV: vec2f;var diffuseSamplerSampler: sampler;var diffuseSampler: texture_2d; #endif @@ -10141,7 +10141,7 @@ if ((bayerDither8(floor(((fragmentInputs.position.xy)%(8.0)))))/64.0>=uniforms.s #endif #endif #include -}`;S.ShadersStoreWGSL[_P]||(S.ShadersStoreWGSL[_P]=lz);roe={name:_P,shader:lz}});var hz,noe,dz=C(()=>{k();hz="shadowMapVertexExtraDeclaration",noe=`#if SM_NORMALBIAS==1 +}`;T.ShadersStoreWGSL[IP]||(T.ShadersStoreWGSL[IP]=Ez);boe={name:IP,shader:Ez}});var Az,Ioe,xz=C(()=>{G();Az="shadowMapVertexExtraDeclaration",Ioe=`#if SM_NORMALBIAS==1 uniform lightDataSM: vec3f; #endif uniform biasAndScaleSM: vec3f;uniform depthValuesSM: vec2f;varying vDepthMetricSM: f32; @@ -10151,7 +10151,7 @@ varying vPositionWSM: vec3f; #if defined(SM_DEPTHCLAMP) && SM_DEPTHCLAMP==1 varying zSM: f32; #endif -`;S.IncludesShadersStoreWGSL[hz]||(S.IncludesShadersStoreWGSL[hz]=noe)});var uz,soe,mz=C(()=>{k();uz="shadowMapVertexNormalBias",soe=`#if SM_NORMALBIAS==1 +`;T.IncludesShadersStoreWGSL[Az]||(T.IncludesShadersStoreWGSL[Az]=Ioe)});var Rz,Moe,bz=C(()=>{G();Rz="shadowMapVertexNormalBias",Moe=`#if SM_NORMALBIAS==1 #if SM_DIRECTIONINLIGHTDATA==1 var worldLightDirSM: vec3f=normalize(-uniforms.lightDataSM.xyz); #else @@ -10159,7 +10159,7 @@ var directionToLightSM: vec3f=uniforms.lightDataSM.xyz-worldPos.xyz;var worldLig #endif var ndlSM: f32=dot(vNormalW,worldLightDirSM);var sinNLSM: f32=sqrt(1.0-ndlSM*ndlSM);var normalBiasSM: f32=uniforms.biasAndScaleSM.y*sinNLSM;worldPos=vec4f(worldPos.xyz-vNormalW*normalBiasSM,worldPos.w); #endif -`;S.IncludesShadersStoreWGSL[uz]||(S.IncludesShadersStoreWGSL[uz]=soe)});var pz,aoe,_z=C(()=>{k();pz="shadowMapVertexMetric",aoe=`#if SM_USEDISTANCE==1 +`;T.IncludesShadersStoreWGSL[Rz]||(T.IncludesShadersStoreWGSL[Rz]=Moe)});var Iz,Coe,Mz=C(()=>{G();Iz="shadowMapVertexMetric",Coe=`#if SM_USEDISTANCE==1 vertexOutputs.vPositionWSM=worldPos.xyz; #endif #if SM_DEPTHTEXTURE==1 @@ -10183,7 +10183,7 @@ vertexOutputs.vDepthMetricSM=(-vertexOutputs.position.z+uniforms.depthValuesSM.x vertexOutputs.vDepthMetricSM=(vertexOutputs.position.z+uniforms.depthValuesSM.x)/uniforms.depthValuesSM.y+uniforms.biasAndScaleSM.x; #endif #endif -`;S.IncludesShadersStoreWGSL[pz]||(S.IncludesShadersStoreWGSL[pz]=aoe)});var vz={};et(vz,{shadowMapVertexShaderWGSL:()=>ooe});var gP,gz,ooe,Ez=C(()=>{k();ql();Zl();Mf();Cf();Sa();Xh();ag();dz();Ql();yf();Pf();Jl();$l();ec();mz();_z();tc();gP="shadowMapVertexShader",gz=`attribute position: vec3f; +`;T.IncludesShadersStoreWGSL[Iz]||(T.IncludesShadersStoreWGSL[Iz]=Coe)});var yz={};$e(yz,{shadowMapVertexShaderWGSL:()=>yoe});var MP,Cz,yoe,Pz=C(()=>{G();Ql();$l();Pf();Df();Ra();Yh();mg();xz();Jl();Lf();Of();ec();tc();ic();bz();Mz();rc();MP="shadowMapVertexShader",Cz=`attribute position: vec3f; #ifdef NORMAL attribute normal: vec3f; #endif @@ -10249,14 +10249,14 @@ vertexOutputs.vUV= (uniforms.diffuseMatrix* vec4f(uv2Updated,1.0,0.0)).xy; #endif #endif #include -}`;S.ShadersStoreWGSL[gP]||(S.ShadersStoreWGSL[gP]=gz);ooe={name:gP,shader:gz}});var Tz={};et(Tz,{depthBoxBlurPixelShaderWGSL:()=>loe});var vP,Sz,loe,Az=C(()=>{k();vP="depthBoxBlurPixelShader",Sz=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_2d;uniform screenSize: vec2f; +}`;T.ShadersStoreWGSL[MP]||(T.ShadersStoreWGSL[MP]=Cz);yoe={name:MP,shader:Cz}});var Lz={};$e(Lz,{depthBoxBlurPixelShaderWGSL:()=>Poe});var CP,Dz,Poe,Oz=C(()=>{G();CP="depthBoxBlurPixelShader",Dz=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_2d;uniform screenSize: vec2f; #define CUSTOM_FRAGMENT_DEFINITIONS @fragment fn main(input: FragmentInputs)->FragmentOutputs {var colorDepth: vec4f=vec4f(0.0);for (var x: i32=-OFFSET; x<=OFFSET; x++) {for (var y: i32=-OFFSET; y<=OFFSET; y++) {colorDepth+=textureSample(textureSampler,textureSamplerSampler,input.vUV+ vec2f(f32(x),f32(y))/uniforms.screenSize);}} -fragmentOutputs.color=(colorDepth/ f32((OFFSET*2+1)*(OFFSET*2+1)));}`;S.ShadersStoreWGSL[vP]||(S.ShadersStoreWGSL[vP]=Sz);loe={name:vP,shader:Sz}});var Rz={};et(Rz,{shadowMapFragmentSoftTransparentShadowWGSL:()=>coe});var EP,xz,coe,bz=C(()=>{k();EP="shadowMapFragmentSoftTransparentShadow",xz=`#if SM_SOFTTRANSPARENTSHADOW==1 +fragmentOutputs.color=(colorDepth/ f32((OFFSET*2+1)*(OFFSET*2+1)));}`;T.ShadersStoreWGSL[CP]||(T.ShadersStoreWGSL[CP]=Dz);Poe={name:CP,shader:Dz}});var wz={};$e(wz,{shadowMapFragmentSoftTransparentShadowWGSL:()=>Doe});var yP,Nz,Doe,Fz=C(()=>{G();yP="shadowMapFragmentSoftTransparentShadow",Nz=`#if SM_SOFTTRANSPARENTSHADOW==1 if ((bayerDither8(floor(((fragmentInputs.position.xy)%(8.0)))))/64.0>=uniforms.softTransparentShadowSM.x*alpha) {discard;} #endif -`;S.IncludesShadersStoreWGSL[EP]||(S.IncludesShadersStoreWGSL[EP]=xz);coe={name:EP,shader:xz}});var Iz,foe,Mz=C(()=>{k();Iz="bayerDitherFunctions",foe=`float bayerDither2(vec2 _P) {return mod(2.0*_P.y+_P.x+1.0,4.0);} +`;T.IncludesShadersStoreWGSL[yP]||(T.IncludesShadersStoreWGSL[yP]=Nz);Doe={name:yP,shader:Nz}});var Bz,Loe,Uz=C(()=>{G();Bz="bayerDitherFunctions",Loe=`float bayerDither2(vec2 _P) {return mod(2.0*_P.y+_P.x+1.0,4.0);} float bayerDither4(vec2 _P) {vec2 P1=mod(_P,2.0); vec2 P2=floor(0.5*mod(_P,4.0)); return 4.0*bayerDither2(P1)+bayerDither2(P2);} @@ -10264,7 +10264,7 @@ float bayerDither8(vec2 _P) {vec2 P1=mod(_P,2.0); vec2 P2=floor(0.5 *mod(_P,4.0)); vec2 P4=floor(0.25*mod(_P,8.0)); return 4.0*(4.0*bayerDither2(P1)+bayerDither2(P2))+bayerDither2(P4);} -`;S.IncludesShadersStore[Iz]||(S.IncludesShadersStore[Iz]=foe)});var Cz,hoe,yz=C(()=>{k();gx();Mz();Cz="shadowMapFragmentExtraDeclaration",hoe=`#if SM_FLOAT==0 +`;T.IncludesShadersStore[Bz]||(T.IncludesShadersStore[Bz]=Loe)});var Vz,Ooe,Gz=C(()=>{G();Mx();Uz();Vz="shadowMapFragmentExtraDeclaration",Ooe=`#if SM_FLOAT==0 #include #endif #if SM_SOFTTRANSPARENTSHADOW==1 @@ -10279,7 +10279,7 @@ uniform vec3 biasAndScaleSM;uniform vec2 depthValuesSM; #if defined(SM_DEPTHCLAMP) && SM_DEPTHCLAMP==1 varying float zSM; #endif -`;S.IncludesShadersStore[Cz]||(S.IncludesShadersStore[Cz]=hoe)});var Pz,doe,Dz=C(()=>{k();Pz="shadowMapFragment",doe=`float depthSM=vDepthMetricSM; +`;T.IncludesShadersStore[Vz]||(T.IncludesShadersStore[Vz]=Ooe)});var kz,Noe,Wz=C(()=>{G();kz="shadowMapFragment",Noe=`float depthSM=vDepthMetricSM; #if defined(SM_DEPTHCLAMP) && SM_DEPTHCLAMP==1 #if SM_USEDISTANCE==1 depthSM=(length(vPositionWSM-lightDataSM)+depthValuesSM.x)/depthValuesSM.y+biasAndScaleSM.x; @@ -10307,7 +10307,7 @@ gl_FragColor=vec4(depthSM,1.0,1.0,1.0); #else gl_FragColor=pack(depthSM); #endif -return;`;S.IncludesShadersStore[Pz]||(S.IncludesShadersStore[Pz]=doe)});var Oz={};et(Oz,{shadowMapPixelShader:()=>uoe});var SP,Lz,uoe,Nz=C(()=>{k();yz();hc();dc();Dz();SP="shadowMapPixelShader",Lz=`#include +return;`;T.IncludesShadersStore[kz]||(T.IncludesShadersStore[kz]=Noe)});var zz={};$e(zz,{shadowMapPixelShader:()=>woe});var PP,Hz,woe,Xz=C(()=>{G();Gz();uc();mc();Wz();PP="shadowMapPixelShader",Hz=`#include #ifdef ALPHATEXTURE varying vec2 vUV;uniform sampler2D diffuseSampler; #endif @@ -10334,18 +10334,18 @@ if ((bayerDither8(floor(mod(gl_FragCoord.xy,8.0))))/64.0>=softTransparentShadowS #endif #endif #include -}`;S.ShadersStore[SP]||(S.ShadersStore[SP]=Lz);uoe={name:SP,shader:Lz}});var Fz,moe,TP=C(()=>{k();Fz="sceneVertexDeclaration",moe=`uniform mat4 viewProjection; +}`;T.ShadersStore[PP]||(T.ShadersStore[PP]=Hz);woe={name:PP,shader:Hz}});var Yz,Foe,DP=C(()=>{G();Yz="sceneVertexDeclaration",Foe=`uniform mat4 viewProjection; #ifdef MULTIVIEW uniform mat4 viewProjectionR; #endif uniform mat4 view;uniform mat4 projection;uniform vec4 vEyePosition; -`;S.IncludesShadersStore[Fz]||(S.IncludesShadersStore[Fz]=moe)});var wz,poe,Bz=C(()=>{k();wz="meshVertexDeclaration",poe=`uniform mat4 world;uniform float visibility; -`;S.IncludesShadersStore[wz]||(S.IncludesShadersStore[wz]=poe)});var Uz,_oe,Vz=C(()=>{k();TP();Bz();Uz="shadowMapVertexDeclaration",_oe=`#include +`;T.IncludesShadersStore[Yz]||(T.IncludesShadersStore[Yz]=Foe)});var Kz,Boe,jz=C(()=>{G();Kz="meshVertexDeclaration",Boe=`uniform mat4 world;uniform float visibility; +`;T.IncludesShadersStore[Kz]||(T.IncludesShadersStore[Kz]=Boe)});var qz,Uoe,Zz=C(()=>{G();DP();jz();qz="shadowMapVertexDeclaration",Uoe=`#include #include -`;S.IncludesShadersStore[Uz]||(S.IncludesShadersStore[Uz]=_oe)});var Gz,goe,kz=C(()=>{k();jh();lg();Gz="shadowMapUboDeclaration",goe=`layout(std140,column_major) uniform; +`;T.IncludesShadersStore[qz]||(T.IncludesShadersStore[qz]=Uoe)});var Qz,Voe,$z=C(()=>{G();qh();_g();Qz="shadowMapUboDeclaration",Voe=`layout(std140,column_major) uniform; #include #include -`;S.IncludesShadersStore[Gz]||(S.IncludesShadersStore[Gz]=goe)});var Wz,voe,Hz=C(()=>{k();Wz="shadowMapVertexExtraDeclaration",voe=`#if SM_NORMALBIAS==1 +`;T.IncludesShadersStore[Qz]||(T.IncludesShadersStore[Qz]=Voe)});var Jz,Goe,e4=C(()=>{G();Jz="shadowMapVertexExtraDeclaration",Goe=`#if SM_NORMALBIAS==1 uniform vec3 lightDataSM; #endif uniform vec3 biasAndScaleSM;uniform vec2 depthValuesSM;varying float vDepthMetricSM; @@ -10355,7 +10355,7 @@ varying vec3 vPositionWSM; #if defined(SM_DEPTHCLAMP) && SM_DEPTHCLAMP==1 varying float zSM; #endif -`;S.IncludesShadersStore[Wz]||(S.IncludesShadersStore[Wz]=voe)});var zz,Eoe,Xz=C(()=>{k();zz="shadowMapVertexNormalBias",Eoe=`#if SM_NORMALBIAS==1 +`;T.IncludesShadersStore[Jz]||(T.IncludesShadersStore[Jz]=Goe)});var t4,koe,i4=C(()=>{G();t4="shadowMapVertexNormalBias",koe=`#if SM_NORMALBIAS==1 #if SM_DIRECTIONINLIGHTDATA==1 vec3 worldLightDirSM=normalize(-lightDataSM.xyz); #else @@ -10363,7 +10363,7 @@ vec3 directionToLightSM=lightDataSM.xyz-worldPos.xyz;vec3 worldLightDirSM=normal #endif float ndlSM=dot(vNormalW,worldLightDirSM);float sinNLSM=sqrt(1.0-ndlSM*ndlSM);float normalBiasSM=biasAndScaleSM.y*sinNLSM;worldPos.xyz-=vNormalW*normalBiasSM; #endif -`;S.IncludesShadersStore[zz]||(S.IncludesShadersStore[zz]=Eoe)});var Yz,Soe,Kz=C(()=>{k();Yz="shadowMapVertexMetric",Soe=`#if SM_USEDISTANCE==1 +`;T.IncludesShadersStore[t4]||(T.IncludesShadersStore[t4]=koe)});var r4,Woe,n4=C(()=>{G();r4="shadowMapVertexMetric",Woe=`#if SM_USEDISTANCE==1 vPositionWSM=worldPos.xyz; #endif #if SM_DEPTHTEXTURE==1 @@ -10387,7 +10387,7 @@ vDepthMetricSM=(-gl_Position.z+depthValuesSM.x)/depthValuesSM.y+biasAndScaleSM.x vDepthMetricSM=(gl_Position.z+depthValuesSM.x)/depthValuesSM.y+biasAndScaleSM.x; #endif #endif -`;S.IncludesShadersStore[Yz]||(S.IncludesShadersStore[Yz]=Soe)});var qz={};et(qz,{shadowMapVertexShader:()=>Toe});var AP,jz,Toe,Zz=C(()=>{k();nc();sc();Df();Lf();Ta();Vz();kz();Hz();ac();Of();Nf();oc();lc();cc();Xz();Kz();fc();AP="shadowMapVertexShader",jz=`attribute vec3 position; +`;T.IncludesShadersStore[r4]||(T.IncludesShadersStore[r4]=Woe)});var a4={};$e(a4,{shadowMapVertexShader:()=>Hoe});var LP,s4,Hoe,o4=C(()=>{G();ac();oc();Nf();wf();ba();Zz();$z();e4();lc();Ff();Bf();cc();fc();hc();i4();n4();dc();LP="shadowMapVertexShader",s4=`attribute vec3 position; #ifdef NORMAL attribute vec3 normal; #endif @@ -10452,16 +10452,16 @@ vUV=vec2(diffuseMatrix*vec4(uv2Updated,1.0,0.0)); #endif #endif #include -}`;S.ShadersStore[AP]||(S.ShadersStore[AP]=jz);Toe={name:AP,shader:jz}});var Jz={};et(Jz,{depthBoxBlurPixelShader:()=>Aoe});var xP,Qz,Aoe,$z=C(()=>{k();xP="depthBoxBlurPixelShader",Qz=`varying vec2 vUV;uniform sampler2D textureSampler;uniform vec2 screenSize; +}`;T.ShadersStore[LP]||(T.ShadersStore[LP]=s4);Hoe={name:LP,shader:s4}});var c4={};$e(c4,{depthBoxBlurPixelShader:()=>zoe});var OP,l4,zoe,f4=C(()=>{G();OP="depthBoxBlurPixelShader",l4=`varying vec2 vUV;uniform sampler2D textureSampler;uniform vec2 screenSize; #define CUSTOM_FRAGMENT_DEFINITIONS void main(void) {vec4 colorDepth=vec4(0.0);for (int x=-OFFSET; x<=OFFSET; x++) for (int y=-OFFSET; y<=OFFSET; y++) -colorDepth+=texture2D(textureSampler,vUV+vec2(x,y)/screenSize);gl_FragColor=(colorDepth/float((OFFSET*2+1)*(OFFSET*2+1)));}`;S.ShadersStore[xP]||(S.ShadersStore[xP]=Qz);Aoe={name:xP,shader:Qz}});var t4={};et(t4,{shadowMapFragmentSoftTransparentShadow:()=>xoe});var RP,e4,xoe,i4=C(()=>{k();RP="shadowMapFragmentSoftTransparentShadow",e4=`#if SM_SOFTTRANSPARENTSHADOW==1 +colorDepth+=texture2D(textureSampler,vUV+vec2(x,y)/screenSize);gl_FragColor=(colorDepth/float((OFFSET*2+1)*(OFFSET*2+1)));}`;T.ShadersStore[OP]||(T.ShadersStore[OP]=l4);zoe={name:OP,shader:l4}});var d4={};$e(d4,{shadowMapFragmentSoftTransparentShadow:()=>Xoe});var NP,h4,Xoe,u4=C(()=>{G();NP="shadowMapFragmentSoftTransparentShadow",h4=`#if SM_SOFTTRANSPARENTSHADOW==1 if ((bayerDither8(floor(mod(gl_FragCoord.xy,8.0))))/64.0>=softTransparentShadowSM.x*alpha) discard; #endif -`;S.IncludesShadersStore[RP]||(S.IncludesShadersStore[RP]=e4);xoe={name:RP,shader:e4}});var yi,vx=C(()=>{Ve();Ht();Ui();Ef();Gr();af();Vl();pP();hi();an();Tf();pT();Dh();el();yn();M_();yi=class n{get bias(){return this._bias}set bias(e){this._bias=e}get normalBias(){return this._normalBias}set normalBias(e){this._normalBias=e}get blurBoxOffset(){return this._blurBoxOffset}set blurBoxOffset(e){this._blurBoxOffset!==e&&(this._blurBoxOffset=e,this._disposeBlurPostProcesses())}get blurScale(){return this._blurScale}set blurScale(e){this._blurScale!==e&&(this._blurScale=e,this._disposeBlurPostProcesses())}get blurKernel(){return this._blurKernel}set blurKernel(e){this._blurKernel!==e&&(this._blurKernel=e,this._disposeBlurPostProcesses())}get useKernelBlur(){return this._useKernelBlur}set useKernelBlur(e){this._useKernelBlur!==e&&(this._useKernelBlur=e,this._disposeBlurPostProcesses())}get depthScale(){return this._depthScale!==void 0?this._depthScale:this._light.getDepthScale()}set depthScale(e){this._depthScale=e}_validateFilter(e){return e}get filter(){return this._filter}set filter(e){if(e=this._validateFilter(e),this._light.needCube()){if(e===n.FILTER_BLUREXPONENTIALSHADOWMAP){this.useExponentialShadowMap=!0;return}else if(e===n.FILTER_BLURCLOSEEXPONENTIALSHADOWMAP){this.useCloseExponentialShadowMap=!0;return}else if(e===n.FILTER_PCF||e===n.FILTER_PCSS){this.usePoissonSampling=!0;return}}if((e===n.FILTER_PCF||e===n.FILTER_PCSS)&&!this._scene.getEngine()._features.supportShadowSamplers){this.usePoissonSampling=!0;return}this._filter!==e&&(this._filter=e,this._disposeBlurPostProcesses(),this._applyFilterValues(),this._light._markMeshesAsLightDirty())}get usePoissonSampling(){return this.filter===n.FILTER_POISSONSAMPLING}set usePoissonSampling(e){let t=this._validateFilter(n.FILTER_POISSONSAMPLING);!e&&this.filter!==n.FILTER_POISSONSAMPLING||(this.filter=e?t:n.FILTER_NONE)}get useExponentialShadowMap(){return this.filter===n.FILTER_EXPONENTIALSHADOWMAP}set useExponentialShadowMap(e){let t=this._validateFilter(n.FILTER_EXPONENTIALSHADOWMAP);!e&&this.filter!==n.FILTER_EXPONENTIALSHADOWMAP||(this.filter=e?t:n.FILTER_NONE)}get useBlurExponentialShadowMap(){return this.filter===n.FILTER_BLUREXPONENTIALSHADOWMAP}set useBlurExponentialShadowMap(e){let t=this._validateFilter(n.FILTER_BLUREXPONENTIALSHADOWMAP);!e&&this.filter!==n.FILTER_BLUREXPONENTIALSHADOWMAP||(this.filter=e?t:n.FILTER_NONE)}get useCloseExponentialShadowMap(){return this.filter===n.FILTER_CLOSEEXPONENTIALSHADOWMAP}set useCloseExponentialShadowMap(e){let t=this._validateFilter(n.FILTER_CLOSEEXPONENTIALSHADOWMAP);!e&&this.filter!==n.FILTER_CLOSEEXPONENTIALSHADOWMAP||(this.filter=e?t:n.FILTER_NONE)}get useBlurCloseExponentialShadowMap(){return this.filter===n.FILTER_BLURCLOSEEXPONENTIALSHADOWMAP}set useBlurCloseExponentialShadowMap(e){let t=this._validateFilter(n.FILTER_BLURCLOSEEXPONENTIALSHADOWMAP);!e&&this.filter!==n.FILTER_BLURCLOSEEXPONENTIALSHADOWMAP||(this.filter=e?t:n.FILTER_NONE)}get usePercentageCloserFiltering(){return this.filter===n.FILTER_PCF}set usePercentageCloserFiltering(e){let t=this._validateFilter(n.FILTER_PCF);!e&&this.filter!==n.FILTER_PCF||(this.filter=e?t:n.FILTER_NONE)}get filteringQuality(){return this._filteringQuality}set filteringQuality(e){this._filteringQuality!==e&&(this._filteringQuality=e,this._disposeBlurPostProcesses(),this._applyFilterValues(),this._light._markMeshesAsLightDirty())}get useContactHardeningShadow(){return this.filter===n.FILTER_PCSS}set useContactHardeningShadow(e){let t=this._validateFilter(n.FILTER_PCSS);!e&&this.filter!==n.FILTER_PCSS||(this.filter=e?t:n.FILTER_NONE)}get contactHardeningLightSizeUVRatio(){return this._contactHardeningLightSizeUVRatio}set contactHardeningLightSizeUVRatio(e){this._contactHardeningLightSizeUVRatio=e}get darkness(){return this._darkness}set darkness(e){this.setDarkness(e)}getDarkness(){return this._darkness}setDarkness(e){return e>=1?this._darkness=1:e<=0?this._darkness=0:this._darkness=e,this}get transparencyShadow(){return this._transparencyShadow}set transparencyShadow(e){this.setTransparencyShadow(e)}setTransparencyShadow(e){return this._transparencyShadow=e,this}getShadowMap(){return this._shadowMap}getShadowMapForRendering(){return this._shadowMap2?this._shadowMap2:this._shadowMap}getClassName(){return n.CLASSNAME}addShadowCaster(e,t=!0){if(!this._shadowMap)return this;if(this._shadowMap.renderList||(this._shadowMap.renderList=[]),this._shadowMap.renderList.indexOf(e)===-1&&this._shadowMap.renderList.push(e),t)for(let i of e.getChildMeshes())this._shadowMap.renderList.indexOf(i)===-1&&this._shadowMap.renderList.push(i);return this}removeShadowCaster(e,t=!0){if(!this._shadowMap||!this._shadowMap.renderList)return this;let i=this._shadowMap.renderList.indexOf(e);if(i!==-1&&this._shadowMap.renderList.splice(i,1),t)for(let r of e.getChildren())this.removeShadowCaster(r);return this}getLight(){return this._light}get shaderLanguage(){return this._shaderLanguage}_getCamera(){var e;return(e=this._camera)!=null?e:this._scene.activeCamera}get mapSize(){return this._mapSize}set mapSize(e){this._mapSize=e,this._light._markMeshesAsLightDirty(),this.recreateShadowMap()}get light(){return this._light}set light(e){this._light!==e&&(this.dispose(!1),this._light=e,this._createInstance())}get useFloat32TextureType(){return this._usefullFloatFirst}set useFloat32TextureType(e){this._usefullFloatFirst!==e&&(this.dispose(!1),this._usefullFloatFirst=e,this._createInstance())}get camera(){return this._camera}set camera(e){this._camera!==e&&(this.dispose(!1),this._camera=e,this._createInstance())}get useRedTextureFormat(){return this._useRedTextureType}set useRedTextureFormat(e){this._useRedTextureType!==e&&(this.dispose(!1),this._useRedTextureType=e,this._createInstance())}constructor(e,t,i,r,s,a=!1){this.onBeforeShadowMapRenderObservable=new ee,this.onAfterShadowMapRenderObservable=new ee,this.onBeforeShadowMapRenderMeshObservable=new ee,this.onAfterShadowMapRenderMeshObservable=new ee,this.doNotSerialize=!1,this._bias=5e-5,this._normalBias=0,this._blurBoxOffset=1,this._blurScale=2,this._blurKernel=1,this._useKernelBlur=!1,this._filter=n.FILTER_NONE,this._filteringQuality=n.QUALITY_HIGH,this._contactHardeningLightSizeUVRatio=.1,this._darkness=0,this._transparencyShadow=!1,this.enableSoftTransparentShadow=!1,this.useOpacityTextureForTransparentShadow=!1,this.frustumEdgeFalloff=0,this._shaderLanguage=0,this.forceBackFacesOnly=!1,this._lightDirection=b.Zero(),this._viewMatrix=K.Zero(),this._projectionMatrix=K.Zero(),this._transformMatrix=K.Zero(),this._cachedPosition=new b(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),this._cachedDirection=new b(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),this._currentFaceIndex=0,this._currentFaceIndexCache=0,this._defaultTextureMatrix=K.Identity(),this._shadersLoaded=!1,this._mapSize=e,this._light=t,this._usefullFloatFirst=!!i,this._scene=t.getScene(),this._camera=r!=null?r:null,this._useRedTextureType=!!s,this._forceGLSL=a,this._createInstance()}_createInstance(){this._initShaderSourceAsync(this._forceGLSL);let e=this._light._shadowGenerators;e||(e=this._light._shadowGenerators=new Map),e.set(this._camera,this),this.id=this._light.id,this._useUBO=this._scene.getEngine().supportsUniformBuffers,this._useUBO&&(this._sceneUBOs=[this._scene.createSceneUniformBuffer(`Scene for Shadow Generator (light "${this._light.name}")`,{forceMono:!0})]),n._SceneComponentInitialization(this._scene);let t=this._scene.getEngine().getCaps();this._usefullFloatFirst?t.textureFloatRender&&t.textureFloatLinearFiltering?this._textureType=1:t.textureHalfFloatRender&&t.textureHalfFloatLinearFiltering?this._textureType=2:this._textureType=0:t.textureHalfFloatRender&&t.textureHalfFloatLinearFiltering?this._textureType=2:t.textureFloatRender&&t.textureFloatLinearFiltering?this._textureType=1:this._textureType=0,this._initializeGenerator(),this._applyFilterValues()}_initializeGenerator(){this._light._markMeshesAsLightDirty(),this._initializeShadowMap()}_createTargetRenderTexture(){var t;let e=this._scene.getEngine();(t=this._shadowMap)==null||t.dispose(),e._features.supportDepthStencilTexture?(this._shadowMap=new Or(this._light.name+"_shadowMap",this._mapSize,this._scene,!1,!0,this._textureType,this._light.needCube(),void 0,!1,!1,void 0,this._useRedTextureType?6:5),this._shadowMap.createDepthStencilTexture(e.useReverseDepthBuffer?516:513,!0,void 0,void 0,void 0,`DepthStencilForShadowGenerator-${this._light.name}`)):this._shadowMap=new Or(this._light.name+"_shadowMap",this._mapSize,this._scene,!1,!0,this._textureType,this._light.needCube()),this._shadowMap.noPrePassRenderer=!0}_initializeShadowMap(){if(this._createTargetRenderTexture(),this._shadowMap===null)return;this._shadowMap.wrapU=ge.CLAMP_ADDRESSMODE,this._shadowMap.wrapV=ge.CLAMP_ADDRESSMODE,this._shadowMap.anisotropicFilteringLevel=1,this._shadowMap.updateSamplingMode(ge.BILINEAR_SAMPLINGMODE),this._shadowMap.renderParticles=!1,this._shadowMap.ignoreCameraViewport=!0,this._storedUniqueId&&(this._shadowMap.uniqueId=this._storedUniqueId),this._shadowMap.customRenderFunction=(r,s,a,o)=>this._renderForShadowMap(r,s,a,o),this._shadowMap.customIsReadyFunction=(r,s,a)=>{if(!a||!r.subMeshes)return!0;let o=!0;for(let l of r.subMeshes){let c=l.getRenderingMesh(),h=this._scene.getEngine(),d=l.getMaterial();if(!d||l.verticesCount===0||this.customAllowRendering&&!this.customAllowRendering(l))continue;let u=c._getInstancesRenderList(l._id,!!l.getReplacementMesh());if(u.mustReturn)continue;let m=h.getCaps().instancedArrays&&(u.visibleInstances[l._id]!==null&&u.visibleInstances[l._id]!==void 0||c.hasThinInstances),_=d.needAlphaBlendingForMesh(c);o=this.isReady(l,m,_)&&o}return o};let e=this._scene.getEngine();this._shadowMap.onBeforeBindObservable.add(()=>{var r;this._currentSceneUBO=this._scene.getSceneUniformBuffer(),e._enableGPUDebugMarkers&&((r=e._debugPushGroup)==null||r.call(e,`Shadow map generation for pass id ${e.currentRenderPassId}`))}),this._shadowMap.onBeforeRenderObservable.add(r=>{this._sceneUBOs&&this._scene.setSceneUniformBuffer(this._sceneUBOs[0]),this._currentFaceIndex=r,this._filter===n.FILTER_PCF&&e.setColorWrite(!1),this.getTransformMatrix(),va.eyeAtCamera=!1,this._scene.setTransformMatrix(this._viewMatrix,this._projectionMatrix),this._sceneUBOs&&(this._scene.getSceneUniformBuffer().unbindEffect(),this._scene.finalizeSceneUbo())}),this._shadowMap.onAfterUnbindObservable.add(()=>{var s,a;if(this._sceneUBOs&&this._scene.setSceneUniformBuffer(this._currentSceneUBO),va.eyeAtCamera=!0,this._scene.updateTransformMatrix(),this._filter===n.FILTER_PCF&&e.setColorWrite(!0),!this.useBlurExponentialShadowMap&&!this.useBlurCloseExponentialShadowMap){(s=e._debugPopGroup)==null||s.call(e);return}let r=this.getShadowMapForRendering();r&&(this._scene.postProcessManager.directRender(this._blurPostProcesses,r.renderTarget,!0),e.unBindFramebuffer(r.renderTarget,!0)),e._enableGPUDebugMarkers&&((a=e._debugPopGroup)==null||a.call(e))});let t=new lt(0,0,0,0),i=new lt(1,1,1,1);this._shadowMap.onClearObservable.add(r=>{this._filter===n.FILTER_PCF?r.clear(i,!1,!0,!1):this.useExponentialShadowMap||this.useBlurExponentialShadowMap?r.clear(t,!0,!0,!1):r.clear(i,!0,!0,!1)}),this._shadowMap.onResizeObservable.add(r=>{this._storedUniqueId=this._shadowMap.uniqueId,this._mapSize=r.getRenderSize(),this._light._markMeshesAsLightDirty(),this.recreateShadowMap()});for(let r=ua.MIN_RENDERINGGROUPS;r(fz(),cz)),Promise.resolve().then(()=>(Ez(),vz)),Promise.resolve().then(()=>(Az(),Tz)),Promise.resolve().then(()=>(bz(),Rz))])):await Promise.all([Promise.resolve().then(()=>(Nz(),Oz)),Promise.resolve().then(()=>(Zz(),qz)),Promise.resolve().then(()=>($z(),Jz)),Promise.resolve().then(()=>(i4(),t4))]),this._shadersLoaded=!0}_initializeBlurRTTAndPostProcesses(){let e=this._scene.getEngine(),t=this._mapSize/this.blurScale;(!this.useKernelBlur||this.blurScale!==1)&&(this._shadowMap2=new Or(this._light.name+"_shadowMap2",t,this._scene,!1,!0,this._textureType,void 0,void 0,!1),this._shadowMap2.wrapU=ge.CLAMP_ADDRESSMODE,this._shadowMap2.wrapV=ge.CLAMP_ADDRESSMODE,this._shadowMap2.updateSamplingMode(ge.BILINEAR_SAMPLINGMODE)),this.useKernelBlur?(this._kernelBlurXPostprocess=new Ma(this._light.name+"KernelBlurX",new Ne(1,0),this.blurKernel,1,null,ge.BILINEAR_SAMPLINGMODE,e,!1,this._textureType),this._kernelBlurXPostprocess.width=t,this._kernelBlurXPostprocess.height=t,this._kernelBlurXPostprocess.externalTextureSamplerBinding=!0,this._kernelBlurXPostprocess.onApplyObservable.add(i=>{i.setTexture("textureSampler",this._shadowMap)}),this._kernelBlurYPostprocess=new Ma(this._light.name+"KernelBlurY",new Ne(0,1),this.blurKernel,1,null,ge.BILINEAR_SAMPLINGMODE,e,!1,this._textureType),this._kernelBlurXPostprocess.autoClear=!1,this._kernelBlurYPostprocess.autoClear=!1,this._textureType===0&&(this._kernelBlurXPostprocess.packedFloat=!0,this._kernelBlurYPostprocess.packedFloat=!0),this._blurPostProcesses=[this._kernelBlurXPostprocess,this._kernelBlurYPostprocess]):(this._boxBlurPostprocess=new Ri(this._light.name+"DepthBoxBlur","depthBoxBlur",["screenSize","boxOffset"],[],1,null,ge.BILINEAR_SAMPLINGMODE,e,!1,"#define OFFSET "+this._blurBoxOffset,this._textureType,void 0,void 0,void 0,void 0,this._shaderLanguage),this._boxBlurPostprocess.externalTextureSamplerBinding=!0,this._boxBlurPostprocess.onApplyObservable.add(i=>{i.setFloat2("screenSize",t,t),i.setTexture("textureSampler",this._shadowMap)}),this._boxBlurPostprocess.autoClear=!1,this._blurPostProcesses=[this._boxBlurPostprocess])}_renderForShadowMap(e,t,i,r){let s;if(r.length)for(s=0;s{r!==i&&!E?(i.getMeshUniformBuffer().bindToEffect(v,"Mesh"),i.transferToEffect(T)):(r.getMeshUniformBuffer().bindToEffect(v,"Mesh"),r.transferToEffect(E?T:A))}),this.forceBackFacesOnly&&a.setState(!0,0,!1,!1,o.cullBackFaces),this.onAfterShadowMapRenderObservable.notifyObservers(v),this.onAfterShadowMapRenderMeshObservable.notifyObservers(i)}else this._shadowMap&&this._shadowMap.resetRefreshCounter()}_applyFilterValues(){this._shadowMap&&(this.filter===n.FILTER_NONE||this.filter===n.FILTER_PCSS?this._shadowMap.updateSamplingMode(ge.NEAREST_SAMPLINGMODE):this._shadowMap.updateSamplingMode(ge.BILINEAR_SAMPLINGMODE))}forceCompilation(e,t){let i={useInstances:!1,...t},r=this.getShadowMap();if(!r){e&&e(this);return}let s=r.renderList;if(!s){e&&e(this);return}let a=[];for(let c of s)a.push(...c.subMeshes);if(a.length===0){e&&e(this);return}let o=0,l=()=>{var c,f;if(!(!this._scene||!this._scene.getEngine())){for(;this.isReady(a[o],i.useInstances,(f=(c=a[o].getMaterial())==null?void 0:c.needAlphaBlendingForMesh(a[o].getMesh()))!=null?f:!1);)if(o++,o>=a.length){e&&e(this);return}setTimeout(l,16)}};l()}async forceCompilationAsync(e){return await new Promise(t=>{this.forceCompilation(()=>{t()},e)})}_isReadyCustomDefines(e,t,i){}_prepareShadowDefines(e,t,i,r){i.push("#define SM_LIGHTTYPE_"+this._light.getClassName().toUpperCase()),i.push("#define SM_FLOAT "+(this._textureType!==0?"1":"0")),i.push("#define SM_ESM "+(this.useExponentialShadowMap||this.useBlurExponentialShadowMap?"1":"0")),i.push("#define SM_DEPTHTEXTURE "+(this.usePercentageCloserFiltering||this.useContactHardeningShadow?"1":"0"));let s=e.getMesh();return i.push("#define SM_NORMALBIAS "+(this.normalBias&&s.isVerticesDataPresent(L.NormalKind)?"1":"0")),i.push("#define SM_DIRECTIONINLIGHTDATA "+(this.getLight().getTypeID()===Xt.LIGHTTYPEID_DIRECTIONALLIGHT?"1":"0")),i.push("#define SM_USEDISTANCE "+(this._light.needCube()?"1":"0")),i.push("#define SM_SOFTTRANSPARENTSHADOW "+(this.enableSoftTransparentShadow&&r?"1":"0")),this._isReadyCustomDefines(i,e,t),i}isReady(e,t,i){var o;if(!this._shadersLoaded)return!1;let r=e.getMaterial(),s=r==null?void 0:r.shadowDepthWrapper;if(this._opacityTexture=null,!r)return!1;let a=[];if(this._prepareShadowDefines(e,t,a,i),s){if(!s.isReadyForSubMesh(e,a,this,t,this._scene.getEngine().currentRenderPassId))return!1}else{let l=e._getDrawWrapper(void 0,!0),c=l.effect,f=l.defines,h=[L.PositionKind],d=e.getMesh(),u=!1,m=!1,_=!1,p=!1;this.normalBias&&d.isVerticesDataPresent(L.NormalKind)&&(h.push(L.NormalKind),a.push("#define NORMAL"),u=!0,d.nonUniformScaling&&a.push("#define NONUNIFORMSCALING"));let g=r.needAlphaTestingForMesh(d);if((g||r.needAlphaBlendingForMesh(d))&&(this.useOpacityTextureForTransparentShadow?this._opacityTexture=r.opacityTexture:this._opacityTexture=r.getAlphaTestTexture(),this._opacityTexture)){if(!this._opacityTexture.isReady())return!1;let T=(o=r.alphaCutOff)!=null?o:n.DEFAULT_ALPHA_CUTOFF;a.push("#define ALPHATEXTURE"),g&&a.push(`#define ALPHATESTVALUE ${T}${T%1===0?".":""}`),d.isVerticesDataPresent(L.UVKind)&&(h.push(L.UVKind),a.push("#define UV1"),m=!0),d.isVerticesDataPresent(L.UV2Kind)&&this._opacityTexture.coordinatesIndex===1&&(h.push(L.UV2Kind),a.push("#define UV2"),_=!0)}let v=new On;if(d.useBones&&d.computeBonesUsingShaders&&d.skeleton){h.push(L.MatricesIndicesKind),h.push(L.MatricesWeightsKind),d.numBoneInfluencers>4&&(h.push(L.MatricesIndicesExtraKind),h.push(L.MatricesWeightsExtraKind));let T=d.skeleton;a.push("#define NUM_BONE_INFLUENCERS "+d.numBoneInfluencers),d.numBoneInfluencers>0&&v.addCPUSkinningFallback(0,d),T.isUsingTextureForMatrices?a.push("#define BONETEXTURE"):a.push("#define BonesPerMesh "+(T.bones.length+1))}else a.push("#define NUM_BONE_INFLUENCERS 0");let x=d.morphTargetManager?tl(d.morphTargetManager,a,h,d,!0,u,!1,m,_,p):0;if($o(r,this._scene,a),t&&(a.push("#define INSTANCES"),oo(h),e.getRenderingMesh().hasThinInstances&&a.push("#define THIN_INSTANCES")),this.customShaderOptions&&this.customShaderOptions.defines)for(let T of this.customShaderOptions.defines)a.indexOf(T)===-1&&a.push(T);let A=d.bakedVertexAnimationManager;A&&A.isEnabled&&(a.push("#define BAKED_VERTEX_ANIMATION_TEXTURE"),t&&h.push("bakedVertexAnimationSettingsInstanced"));let E=a.join(` -`);if(f!==E){f=E;let T="shadowMap",R=["world","mBones","viewProjection","diffuseMatrix","lightDataSM","depthValuesSM","biasAndScaleSM","morphTargetInfluences","morphTargetCount","boneTextureInfo","softTransparentShadowSM","morphTargetTextureInfo","morphTargetTextureIndices","bakedVertexAnimationSettings","bakedVertexAnimationTextureSizeInverted","bakedVertexAnimationTime","bakedVertexAnimationTexture"],I=["diffuseSampler","boneSampler","morphTargets","bakedVertexAnimationTexture"],y=["Scene","Mesh"];if(In(R),this.customShaderOptions){if(T=this.customShaderOptions.shaderName,this.customShaderOptions.attributes)for(let D of this.customShaderOptions.attributes)h.indexOf(D)===-1&&h.push(D);if(this.customShaderOptions.uniforms)for(let D of this.customShaderOptions.uniforms)R.indexOf(D)===-1&&R.push(D);if(this.customShaderOptions.samplers)for(let D of this.customShaderOptions.samplers)I.indexOf(D)===-1&&I.push(D)}let M=this._scene.getEngine();c=M.createEffect(T,{attributes:h,uniformsNames:R,uniformBuffersNames:y,samplers:I,defines:E,fallbacks:v,onCompiled:null,onError:null,indexParameters:{maxSimultaneousMorphTargets:x},shaderLanguage:this._shaderLanguage},M),l.setEffect(c,f)}if(!c.isReady())return!1}return(this.useBlurExponentialShadowMap||this.useBlurCloseExponentialShadowMap)&&(!this._blurPostProcesses||!this._blurPostProcesses.length)&&this._initializeBlurRTTAndPostProcesses(),!(this._kernelBlurXPostprocess&&!this._kernelBlurXPostprocess.isReady()||this._kernelBlurYPostprocess&&!this._kernelBlurYPostprocess.isReady()||this._boxBlurPostprocess&&!this._boxBlurPostprocess.isReady())}prepareDefines(e,t){let i=this._scene,r=this._light;!i.shadowsEnabled||!r.shadowEnabled||(e["SHADOW"+t]=!0,this.useContactHardeningShadow?(e["SHADOWPCSS"+t]=!0,this._filteringQuality===n.QUALITY_LOW?e["SHADOWLOWQUALITY"+t]=!0:this._filteringQuality===n.QUALITY_MEDIUM&&(e["SHADOWMEDIUMQUALITY"+t]=!0)):this.usePercentageCloserFiltering?(e["SHADOWPCF"+t]=!0,this._filteringQuality===n.QUALITY_LOW?e["SHADOWLOWQUALITY"+t]=!0:this._filteringQuality===n.QUALITY_MEDIUM&&(e["SHADOWMEDIUMQUALITY"+t]=!0)):this.usePoissonSampling?e["SHADOWPOISSON"+t]=!0:this.useExponentialShadowMap||this.useBlurExponentialShadowMap?e["SHADOWESM"+t]=!0:(this.useCloseExponentialShadowMap||this.useBlurCloseExponentialShadowMap)&&(e["SHADOWCLOSEESM"+t]=!0),r.needCube()&&(e["SHADOWCUBE"+t]=!0))}bindShadowLight(e,t){let i=this._light,r=this._scene;if(!r.shadowsEnabled||!i.shadowEnabled)return;let s=this._getCamera(),a=this.getShadowMap();if(!a)return;if(!i.needCube()){let l=r.floatingOriginOffset,c=this.getTransformMatrix(),f=r.floatingOriginMode?OM(l,this._viewMatrix,this._projectionMatrix,Z.Matrix[0]):c;t.setMatrix("lightMatrix"+e,f)}let o=this.getShadowMapForRendering();this._filter===n.FILTER_PCF?(t.setDepthStencilTexture("shadowTexture"+e,o),i._uniformBuffer.updateFloat4("shadowsInfo",this.getDarkness(),a.getSize().width,1/a.getSize().width,this.frustumEdgeFalloff,e)):this._filter===n.FILTER_PCSS?(t.setDepthStencilTexture("shadowTexture"+e,o),t.setTexture("depthTexture"+e,o),i._uniformBuffer.updateFloat4("shadowsInfo",this.getDarkness(),1/a.getSize().width,this._contactHardeningLightSizeUVRatio*a.getSize().width,this.frustumEdgeFalloff,e)):(t.setTexture("shadowTexture"+e,o),i._uniformBuffer.updateFloat4("shadowsInfo",this.getDarkness(),this.blurScale/a.getSize().width,this.depthScale,this.frustumEdgeFalloff,e)),i._uniformBuffer.updateFloat2("depthValues",this.getLight().getDepthMinZ(s),this.getLight().getDepthMinZ(s)+this.getLight().getDepthMaxZ(s),e)}get viewMatrix(){return this._viewMatrix}get projectionMatrix(){return this._projectionMatrix}getTransformMatrix(){let e=this._scene;if(this._currentRenderId===e.getRenderId()&&this._currentFaceIndexCache===this._currentFaceIndex)return this._transformMatrix;this._currentRenderId=e.getRenderId(),this._currentFaceIndexCache=this._currentFaceIndex;let t=this._light.position;if(this._light.computeTransformedInformation()&&(t=this._light.transformedPosition),b.NormalizeToRef(this._light.getShadowDirection(this._currentFaceIndex),this._lightDirection),Math.abs(b.Dot(this._lightDirection,b.Up()))===1&&(this._lightDirection.z=1e-13),this._light.needProjectionMatrixCompute()||!this._cachedPosition||!this._cachedDirection||!t.equals(this._cachedPosition)||!this._lightDirection.equals(this._cachedDirection)){this._cachedPosition.copyFrom(t),this._cachedDirection.copyFrom(this._lightDirection),K.LookAtLHToRef(t,t.add(this._lightDirection),b.Up(),this._viewMatrix);let i=this.getShadowMap();if(i){let r=i.renderList;r&&this._light.setShadowProjectionMatrix(this._projectionMatrix,this._viewMatrix,r)}this._viewMatrix.multiplyToRef(this._projectionMatrix,this._transformMatrix)}return this._transformMatrix}recreateShadowMap(){let e=this._shadowMap;if(!e)return;let t=e.renderList;if(this._disposeRTTandPostProcesses(),this._initializeGenerator(),this.filter=this._filter,this._applyFilterValues(),t){this._shadowMap.renderList||(this._shadowMap.renderList=[]);for(let i of t)this._shadowMap.renderList.push(i)}else this._shadowMap.renderList=null}_disposeBlurPostProcesses(){this._shadowMap2&&(this._shadowMap2.dispose(),this._shadowMap2=null),this._boxBlurPostprocess&&(this._boxBlurPostprocess.dispose(),this._boxBlurPostprocess=null),this._kernelBlurXPostprocess&&(this._kernelBlurXPostprocess.dispose(),this._kernelBlurXPostprocess=null),this._kernelBlurYPostprocess&&(this._kernelBlurYPostprocess.dispose(),this._kernelBlurYPostprocess=null),this._blurPostProcesses=[]}_disposeRTTandPostProcesses(){this._shadowMap&&(this._shadowMap.dispose(),this._shadowMap=null),this._disposeBlurPostProcesses()}_disposeSceneUBOs(){if(this._sceneUBOs){for(let e of this._sceneUBOs)e.dispose();this._sceneUBOs=[]}}dispose(e=!0){if(this._disposeRTTandPostProcesses(),this._disposeSceneUBOs(),this._light){if(this._light._shadowGenerators){let t=this._light._shadowGenerators.entries();for(let i=t.next();i.done!==!0;i=t.next()){let[r,s]=i.value;s===this&&this._light._shadowGenerators.delete(r)}this._light._shadowGenerators.size===0&&(this._light._shadowGenerators=null)}this._light._markMeshesAsLightDirty()}e&&(this.onBeforeShadowMapRenderMeshObservable.clear(),this.onBeforeShadowMapRenderObservable.clear(),this.onAfterShadowMapRenderMeshObservable.clear(),this.onAfterShadowMapRenderObservable.clear())}serialize(){var i;let e={},t=this.getShadowMap();if(!t)return e;if(e.className=this.getClassName(),e.lightId=this._light.id,e.cameraId=(i=this._camera)==null?void 0:i.id,e.id=this.id,e.mapSize=t.getRenderSize(),e.forceBackFacesOnly=this.forceBackFacesOnly,e.darkness=this.getDarkness(),e.transparencyShadow=this._transparencyShadow,e.frustumEdgeFalloff=this.frustumEdgeFalloff,e.bias=this.bias,e.normalBias=this.normalBias,e.usePercentageCloserFiltering=this.usePercentageCloserFiltering,e.useContactHardeningShadow=this.useContactHardeningShadow,e.contactHardeningLightSizeUVRatio=this.contactHardeningLightSizeUVRatio,e.filteringQuality=this.filteringQuality,e.useExponentialShadowMap=this.useExponentialShadowMap,e.useBlurExponentialShadowMap=this.useBlurExponentialShadowMap,e.useCloseExponentialShadowMap=this.useBlurExponentialShadowMap,e.useBlurCloseExponentialShadowMap=this.useBlurExponentialShadowMap,e.usePoissonSampling=this.usePoissonSampling,e.depthScale=this.depthScale,e.blurBoxOffset=this.blurBoxOffset,e.blurKernel=this.blurKernel,e.blurScale=this.blurScale,e.useKernelBlur=this.useKernelBlur,e.renderList=[],t.renderList)for(let r=0;r{throw Xe("ShadowGeneratorSceneComponent")}});var n4={};et(n4,{depthPixelShader:()=>Roe});var bP,r4,Roe,IP=C(()=>{k();hc();gx();dc();bP="depthPixelShader",r4=`#ifdef ALPHATEST +`;T.IncludesShadersStore[NP]||(T.IncludesShadersStore[NP]=h4);Xoe={name:NP,shader:h4}});var yi,Cx=C(()=>{Ge();zt();Ui();Af();Gr();cf();kl();bP();hi();ln();Rf();bT();Lh();il();yn();w_();yi=class n{get bias(){return this._bias}set bias(e){this._bias=e}get normalBias(){return this._normalBias}set normalBias(e){this._normalBias=e}get blurBoxOffset(){return this._blurBoxOffset}set blurBoxOffset(e){this._blurBoxOffset!==e&&(this._blurBoxOffset=e,this._disposeBlurPostProcesses())}get blurScale(){return this._blurScale}set blurScale(e){this._blurScale!==e&&(this._blurScale=e,this._disposeBlurPostProcesses())}get blurKernel(){return this._blurKernel}set blurKernel(e){this._blurKernel!==e&&(this._blurKernel=e,this._disposeBlurPostProcesses())}get useKernelBlur(){return this._useKernelBlur}set useKernelBlur(e){this._useKernelBlur!==e&&(this._useKernelBlur=e,this._disposeBlurPostProcesses())}get depthScale(){return this._depthScale!==void 0?this._depthScale:this._light.getDepthScale()}set depthScale(e){this._depthScale=e}_validateFilter(e){return e}get filter(){return this._filter}set filter(e){if(e=this._validateFilter(e),this._light.needCube()){if(e===n.FILTER_BLUREXPONENTIALSHADOWMAP){this.useExponentialShadowMap=!0;return}else if(e===n.FILTER_BLURCLOSEEXPONENTIALSHADOWMAP){this.useCloseExponentialShadowMap=!0;return}else if(e===n.FILTER_PCF||e===n.FILTER_PCSS){this.usePoissonSampling=!0;return}}if((e===n.FILTER_PCF||e===n.FILTER_PCSS)&&!this._scene.getEngine()._features.supportShadowSamplers){this.usePoissonSampling=!0;return}this._filter!==e&&(this._filter=e,this._disposeBlurPostProcesses(),this._applyFilterValues(),this._light._markMeshesAsLightDirty())}get usePoissonSampling(){return this.filter===n.FILTER_POISSONSAMPLING}set usePoissonSampling(e){let t=this._validateFilter(n.FILTER_POISSONSAMPLING);!e&&this.filter!==n.FILTER_POISSONSAMPLING||(this.filter=e?t:n.FILTER_NONE)}get useExponentialShadowMap(){return this.filter===n.FILTER_EXPONENTIALSHADOWMAP}set useExponentialShadowMap(e){let t=this._validateFilter(n.FILTER_EXPONENTIALSHADOWMAP);!e&&this.filter!==n.FILTER_EXPONENTIALSHADOWMAP||(this.filter=e?t:n.FILTER_NONE)}get useBlurExponentialShadowMap(){return this.filter===n.FILTER_BLUREXPONENTIALSHADOWMAP}set useBlurExponentialShadowMap(e){let t=this._validateFilter(n.FILTER_BLUREXPONENTIALSHADOWMAP);!e&&this.filter!==n.FILTER_BLUREXPONENTIALSHADOWMAP||(this.filter=e?t:n.FILTER_NONE)}get useCloseExponentialShadowMap(){return this.filter===n.FILTER_CLOSEEXPONENTIALSHADOWMAP}set useCloseExponentialShadowMap(e){let t=this._validateFilter(n.FILTER_CLOSEEXPONENTIALSHADOWMAP);!e&&this.filter!==n.FILTER_CLOSEEXPONENTIALSHADOWMAP||(this.filter=e?t:n.FILTER_NONE)}get useBlurCloseExponentialShadowMap(){return this.filter===n.FILTER_BLURCLOSEEXPONENTIALSHADOWMAP}set useBlurCloseExponentialShadowMap(e){let t=this._validateFilter(n.FILTER_BLURCLOSEEXPONENTIALSHADOWMAP);!e&&this.filter!==n.FILTER_BLURCLOSEEXPONENTIALSHADOWMAP||(this.filter=e?t:n.FILTER_NONE)}get usePercentageCloserFiltering(){return this.filter===n.FILTER_PCF}set usePercentageCloserFiltering(e){let t=this._validateFilter(n.FILTER_PCF);!e&&this.filter!==n.FILTER_PCF||(this.filter=e?t:n.FILTER_NONE)}get filteringQuality(){return this._filteringQuality}set filteringQuality(e){this._filteringQuality!==e&&(this._filteringQuality=e,this._disposeBlurPostProcesses(),this._applyFilterValues(),this._light._markMeshesAsLightDirty())}get useContactHardeningShadow(){return this.filter===n.FILTER_PCSS}set useContactHardeningShadow(e){let t=this._validateFilter(n.FILTER_PCSS);!e&&this.filter!==n.FILTER_PCSS||(this.filter=e?t:n.FILTER_NONE)}get contactHardeningLightSizeUVRatio(){return this._contactHardeningLightSizeUVRatio}set contactHardeningLightSizeUVRatio(e){this._contactHardeningLightSizeUVRatio=e}get darkness(){return this._darkness}set darkness(e){this.setDarkness(e)}getDarkness(){return this._darkness}setDarkness(e){return e>=1?this._darkness=1:e<=0?this._darkness=0:this._darkness=e,this}get transparencyShadow(){return this._transparencyShadow}set transparencyShadow(e){this.setTransparencyShadow(e)}setTransparencyShadow(e){return this._transparencyShadow=e,this}getShadowMap(){return this._shadowMap}getShadowMapForRendering(){return this._shadowMap2?this._shadowMap2:this._shadowMap}getClassName(){return n.CLASSNAME}addShadowCaster(e,t=!0){if(!this._shadowMap)return this;if(this._shadowMap.renderList||(this._shadowMap.renderList=[]),this._shadowMap.renderList.indexOf(e)===-1&&this._shadowMap.renderList.push(e),t)for(let i of e.getChildMeshes())this._shadowMap.renderList.indexOf(i)===-1&&this._shadowMap.renderList.push(i);return this}removeShadowCaster(e,t=!0){if(!this._shadowMap||!this._shadowMap.renderList)return this;let i=this._shadowMap.renderList.indexOf(e);if(i!==-1&&this._shadowMap.renderList.splice(i,1),t)for(let r of e.getChildren())this.removeShadowCaster(r);return this}getLight(){return this._light}get shaderLanguage(){return this._shaderLanguage}_getCamera(){var e;return(e=this._camera)!=null?e:this._scene.activeCamera}get mapSize(){return this._mapSize}set mapSize(e){this._mapSize=e,this._light._markMeshesAsLightDirty(),this.recreateShadowMap()}get light(){return this._light}set light(e){this._light!==e&&(this.dispose(!1),this._light=e,this._createInstance())}get useFloat32TextureType(){return this._usefullFloatFirst}set useFloat32TextureType(e){this._usefullFloatFirst!==e&&(this.dispose(!1),this._usefullFloatFirst=e,this._createInstance())}get camera(){return this._camera}set camera(e){this._camera!==e&&(this.dispose(!1),this._camera=e,this._createInstance())}get useRedTextureFormat(){return this._useRedTextureType}set useRedTextureFormat(e){this._useRedTextureType!==e&&(this.dispose(!1),this._useRedTextureType=e,this._createInstance())}constructor(e,t,i,r,s,a=!1){this.onBeforeShadowMapRenderObservable=new te,this.onAfterShadowMapRenderObservable=new te,this.onBeforeShadowMapRenderMeshObservable=new te,this.onAfterShadowMapRenderMeshObservable=new te,this.doNotSerialize=!1,this._bias=5e-5,this._normalBias=0,this._blurBoxOffset=1,this._blurScale=2,this._blurKernel=1,this._useKernelBlur=!1,this._filter=n.FILTER_NONE,this._filteringQuality=n.QUALITY_HIGH,this._contactHardeningLightSizeUVRatio=.1,this._darkness=0,this._transparencyShadow=!1,this.enableSoftTransparentShadow=!1,this.useOpacityTextureForTransparentShadow=!1,this.frustumEdgeFalloff=0,this._shaderLanguage=0,this.forceBackFacesOnly=!1,this._lightDirection=b.Zero(),this._viewMatrix=K.Zero(),this._projectionMatrix=K.Zero(),this._transformMatrix=K.Zero(),this._cachedPosition=new b(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),this._cachedDirection=new b(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),this._currentFaceIndex=0,this._currentFaceIndexCache=0,this._defaultTextureMatrix=K.Identity(),this._shadersLoaded=!1,this._mapSize=e,this._light=t,this._usefullFloatFirst=!!i,this._scene=t.getScene(),this._camera=r!=null?r:null,this._useRedTextureType=!!s,this._forceGLSL=a,this._createInstance()}_createInstance(){this._initShaderSourceAsync(this._forceGLSL);let e=this._light._shadowGenerators;e||(e=this._light._shadowGenerators=new Map),e.set(this._camera,this),this.id=this._light.id,this._useUBO=this._scene.getEngine().supportsUniformBuffers,this._useUBO&&(this._sceneUBOs=[this._scene.createSceneUniformBuffer(`Scene for Shadow Generator (light "${this._light.name}")`,{forceMono:!0})]),n._SceneComponentInitialization(this._scene);let t=this._scene.getEngine().getCaps();this._usefullFloatFirst?t.textureFloatRender&&t.textureFloatLinearFiltering?this._textureType=1:t.textureHalfFloatRender&&t.textureHalfFloatLinearFiltering?this._textureType=2:this._textureType=0:t.textureHalfFloatRender&&t.textureHalfFloatLinearFiltering?this._textureType=2:t.textureFloatRender&&t.textureFloatLinearFiltering?this._textureType=1:this._textureType=0,this._initializeGenerator(),this._applyFilterValues()}_initializeGenerator(){this._light._markMeshesAsLightDirty(),this._initializeShadowMap()}_createTargetRenderTexture(){var t;let e=this._scene.getEngine();(t=this._shadowMap)==null||t.dispose(),e._features.supportDepthStencilTexture?(this._shadowMap=new Or(this._light.name+"_shadowMap",this._mapSize,this._scene,!1,!0,this._textureType,this._light.needCube(),void 0,!1,!1,void 0,this._useRedTextureType?6:5),this._shadowMap.createDepthStencilTexture(e.useReverseDepthBuffer?516:513,!0,void 0,void 0,void 0,`DepthStencilForShadowGenerator-${this._light.name}`)):this._shadowMap=new Or(this._light.name+"_shadowMap",this._mapSize,this._scene,!1,!0,this._textureType,this._light.needCube()),this._shadowMap.noPrePassRenderer=!0}_initializeShadowMap(){if(this._createTargetRenderTexture(),this._shadowMap===null)return;this._shadowMap.wrapU=ge.CLAMP_ADDRESSMODE,this._shadowMap.wrapV=ge.CLAMP_ADDRESSMODE,this._shadowMap.anisotropicFilteringLevel=1,this._shadowMap.updateSamplingMode(ge.BILINEAR_SAMPLINGMODE),this._shadowMap.renderParticles=!1,this._shadowMap.ignoreCameraViewport=!0,this._storedUniqueId&&(this._shadowMap.uniqueId=this._storedUniqueId),this._shadowMap.customRenderFunction=(r,s,a,o)=>this._renderForShadowMap(r,s,a,o),this._shadowMap.customIsReadyFunction=(r,s,a)=>{if(!a||!r.subMeshes)return!0;let o=!0;for(let l of r.subMeshes){let c=l.getRenderingMesh(),h=this._scene.getEngine(),d=l.getMaterial();if(!d||l.verticesCount===0||this.customAllowRendering&&!this.customAllowRendering(l))continue;let u=c._getInstancesRenderList(l._id,!!l.getReplacementMesh());if(u.mustReturn)continue;let m=h.getCaps().instancedArrays&&(u.visibleInstances[l._id]!==null&&u.visibleInstances[l._id]!==void 0||c.hasThinInstances),_=d.needAlphaBlendingForMesh(c);o=this.isReady(l,m,_)&&o}return o};let e=this._scene.getEngine();this._shadowMap.onBeforeBindObservable.add(()=>{var r;this._currentSceneUBO=this._scene.getSceneUniformBuffer(),e._enableGPUDebugMarkers&&((r=e._debugPushGroup)==null||r.call(e,`Shadow map generation for pass id ${e.currentRenderPassId}`))}),this._shadowMap.onBeforeRenderObservable.add(r=>{this._sceneUBOs&&this._scene.setSceneUniformBuffer(this._sceneUBOs[0]),this._currentFaceIndex=r,this._filter===n.FILTER_PCF&&e.setColorWrite(!1),this.getTransformMatrix(),Aa.eyeAtCamera=!1,this._scene.setTransformMatrix(this._viewMatrix,this._projectionMatrix),this._sceneUBOs&&(this._scene.getSceneUniformBuffer().unbindEffect(),this._scene.finalizeSceneUbo())}),this._shadowMap.onAfterUnbindObservable.add(()=>{var s,a;if(this._sceneUBOs&&this._scene.setSceneUniformBuffer(this._currentSceneUBO),Aa.eyeAtCamera=!0,this._scene.updateTransformMatrix(),this._filter===n.FILTER_PCF&&e.setColorWrite(!0),!this.useBlurExponentialShadowMap&&!this.useBlurCloseExponentialShadowMap){(s=e._debugPopGroup)==null||s.call(e);return}let r=this.getShadowMapForRendering();r&&(this._scene.postProcessManager.directRender(this._blurPostProcesses,r.renderTarget,!0),e.unBindFramebuffer(r.renderTarget,!0)),e._enableGPUDebugMarkers&&((a=e._debugPopGroup)==null||a.call(e))});let t=new lt(0,0,0,0),i=new lt(1,1,1,1);this._shadowMap.onClearObservable.add(r=>{this._filter===n.FILTER_PCF?r.clear(i,!1,!0,!1):this.useExponentialShadowMap||this.useBlurExponentialShadowMap?r.clear(t,!0,!0,!1):r.clear(i,!0,!0,!1)}),this._shadowMap.onResizeObservable.add(r=>{this._storedUniqueId=this._shadowMap.uniqueId,this._mapSize=r.getRenderSize(),this._light._markMeshesAsLightDirty(),this.recreateShadowMap()});for(let r=ga.MIN_RENDERINGGROUPS;r(Tz(),Sz)),Promise.resolve().then(()=>(Pz(),yz)),Promise.resolve().then(()=>(Oz(),Lz)),Promise.resolve().then(()=>(Fz(),wz))])):await Promise.all([Promise.resolve().then(()=>(Xz(),zz)),Promise.resolve().then(()=>(o4(),a4)),Promise.resolve().then(()=>(f4(),c4)),Promise.resolve().then(()=>(u4(),d4))]),this._shadersLoaded=!0}_initializeBlurRTTAndPostProcesses(){let e=this._scene.getEngine(),t=this._mapSize/this.blurScale;(!this.useKernelBlur||this.blurScale!==1)&&(this._shadowMap2=new Or(this._light.name+"_shadowMap2",t,this._scene,!1,!0,this._textureType,void 0,void 0,!1),this._shadowMap2.wrapU=ge.CLAMP_ADDRESSMODE,this._shadowMap2.wrapV=ge.CLAMP_ADDRESSMODE,this._shadowMap2.updateSamplingMode(ge.BILINEAR_SAMPLINGMODE)),this.useKernelBlur?(this._kernelBlurXPostprocess=new Da(this._light.name+"KernelBlurX",new Ne(1,0),this.blurKernel,1,null,ge.BILINEAR_SAMPLINGMODE,e,!1,this._textureType),this._kernelBlurXPostprocess.width=t,this._kernelBlurXPostprocess.height=t,this._kernelBlurXPostprocess.externalTextureSamplerBinding=!0,this._kernelBlurXPostprocess.onApplyObservable.add(i=>{i.setTexture("textureSampler",this._shadowMap)}),this._kernelBlurYPostprocess=new Da(this._light.name+"KernelBlurY",new Ne(0,1),this.blurKernel,1,null,ge.BILINEAR_SAMPLINGMODE,e,!1,this._textureType),this._kernelBlurXPostprocess.autoClear=!1,this._kernelBlurYPostprocess.autoClear=!1,this._textureType===0&&(this._kernelBlurXPostprocess.packedFloat=!0,this._kernelBlurYPostprocess.packedFloat=!0),this._blurPostProcesses=[this._kernelBlurXPostprocess,this._kernelBlurYPostprocess]):(this._boxBlurPostprocess=new Ri(this._light.name+"DepthBoxBlur","depthBoxBlur",["screenSize","boxOffset"],[],1,null,ge.BILINEAR_SAMPLINGMODE,e,!1,"#define OFFSET "+this._blurBoxOffset,this._textureType,void 0,void 0,void 0,void 0,this._shaderLanguage),this._boxBlurPostprocess.externalTextureSamplerBinding=!0,this._boxBlurPostprocess.onApplyObservable.add(i=>{i.setFloat2("screenSize",t,t),i.setTexture("textureSampler",this._shadowMap)}),this._boxBlurPostprocess.autoClear=!1,this._blurPostProcesses=[this._boxBlurPostprocess])}_renderForShadowMap(e,t,i,r){let s;if(r.length)for(s=0;s{r!==i&&!S?(i.getMeshUniformBuffer().bindToEffect(v,"Mesh"),i.transferToEffect(E)):(r.getMeshUniformBuffer().bindToEffect(v,"Mesh"),r.transferToEffect(S?E:A))}),this.forceBackFacesOnly&&a.setState(!0,0,!1,!1,o.cullBackFaces),this.onAfterShadowMapRenderObservable.notifyObservers(v),this.onAfterShadowMapRenderMeshObservable.notifyObservers(i)}else this._shadowMap&&this._shadowMap.resetRefreshCounter()}_applyFilterValues(){this._shadowMap&&(this.filter===n.FILTER_NONE||this.filter===n.FILTER_PCSS?this._shadowMap.updateSamplingMode(ge.NEAREST_SAMPLINGMODE):this._shadowMap.updateSamplingMode(ge.BILINEAR_SAMPLINGMODE))}forceCompilation(e,t){let i={useInstances:!1,...t},r=this.getShadowMap();if(!r){e&&e(this);return}let s=r.renderList;if(!s){e&&e(this);return}let a=[];for(let c of s)a.push(...c.subMeshes);if(a.length===0){e&&e(this);return}let o=0,l=()=>{var c,f;if(!(!this._scene||!this._scene.getEngine())){for(;this.isReady(a[o],i.useInstances,(f=(c=a[o].getMaterial())==null?void 0:c.needAlphaBlendingForMesh(a[o].getMesh()))!=null?f:!1);)if(o++,o>=a.length){e&&e(this);return}setTimeout(l,16)}};l()}async forceCompilationAsync(e){return await new Promise(t=>{this.forceCompilation(()=>{t()},e)})}_isReadyCustomDefines(e,t,i){}_prepareShadowDefines(e,t,i,r){i.push("#define SM_LIGHTTYPE_"+this._light.getClassName().toUpperCase()),i.push("#define SM_FLOAT "+(this._textureType!==0?"1":"0")),i.push("#define SM_ESM "+(this.useExponentialShadowMap||this.useBlurExponentialShadowMap?"1":"0")),i.push("#define SM_DEPTHTEXTURE "+(this.usePercentageCloserFiltering||this.useContactHardeningShadow?"1":"0"));let s=e.getMesh();return i.push("#define SM_NORMALBIAS "+(this.normalBias&&s.isVerticesDataPresent(L.NormalKind)?"1":"0")),i.push("#define SM_DIRECTIONINLIGHTDATA "+(this.getLight().getTypeID()===Yt.LIGHTTYPEID_DIRECTIONALLIGHT?"1":"0")),i.push("#define SM_USEDISTANCE "+(this._light.needCube()?"1":"0")),i.push("#define SM_SOFTTRANSPARENTSHADOW "+(this.enableSoftTransparentShadow&&r?"1":"0")),this._isReadyCustomDefines(i,e,t),i}isReady(e,t,i){var o;if(!this._shadersLoaded)return!1;let r=e.getMaterial(),s=r==null?void 0:r.shadowDepthWrapper;if(this._opacityTexture=null,!r)return!1;let a=[];if(this._prepareShadowDefines(e,t,a,i),s){if(!s.isReadyForSubMesh(e,a,this,t,this._scene.getEngine().currentRenderPassId))return!1}else{let l=e._getDrawWrapper(void 0,!0),c=l.effect,f=l.defines,h=[L.PositionKind],d=e.getMesh(),u=!1,m=!1,_=!1,p=!1;this.normalBias&&d.isVerticesDataPresent(L.NormalKind)&&(h.push(L.NormalKind),a.push("#define NORMAL"),u=!0,d.nonUniformScaling&&a.push("#define NONUNIFORMSCALING"));let g=r.needAlphaTestingForMesh(d);if((g||r.needAlphaBlendingForMesh(d))&&(this.useOpacityTextureForTransparentShadow?this._opacityTexture=r.opacityTexture:this._opacityTexture=r.getAlphaTestTexture(),this._opacityTexture)){if(!this._opacityTexture.isReady())return!1;let E=(o=r.alphaCutOff)!=null?o:n.DEFAULT_ALPHA_CUTOFF;a.push("#define ALPHATEXTURE"),g&&a.push(`#define ALPHATESTVALUE ${E}${E%1===0?".":""}`),d.isVerticesDataPresent(L.UVKind)&&(h.push(L.UVKind),a.push("#define UV1"),m=!0),d.isVerticesDataPresent(L.UV2Kind)&&this._opacityTexture.coordinatesIndex===1&&(h.push(L.UV2Kind),a.push("#define UV2"),_=!0)}let v=new On;if(d.useBones&&d.computeBonesUsingShaders&&d.skeleton){h.push(L.MatricesIndicesKind),h.push(L.MatricesWeightsKind),d.numBoneInfluencers>4&&(h.push(L.MatricesIndicesExtraKind),h.push(L.MatricesWeightsExtraKind));let E=d.skeleton;a.push("#define NUM_BONE_INFLUENCERS "+d.numBoneInfluencers),d.numBoneInfluencers>0&&v.addCPUSkinningFallback(0,d),E.isUsingTextureForMatrices?a.push("#define BONETEXTURE"):a.push("#define BonesPerMesh "+(E.bones.length+1))}else a.push("#define NUM_BONE_INFLUENCERS 0");let x=d.morphTargetManager?rl(d.morphTargetManager,a,h,d,!0,u,!1,m,_,p):0;if(tl(r,this._scene,a),t&&(a.push("#define INSTANCES"),co(h),e.getRenderingMesh().hasThinInstances&&a.push("#define THIN_INSTANCES")),this.customShaderOptions&&this.customShaderOptions.defines)for(let E of this.customShaderOptions.defines)a.indexOf(E)===-1&&a.push(E);let A=d.bakedVertexAnimationManager;A&&A.isEnabled&&(a.push("#define BAKED_VERTEX_ANIMATION_TEXTURE"),t&&h.push("bakedVertexAnimationSettingsInstanced"));let S=a.join(` +`);if(f!==S){f=S;let E="shadowMap",R=["world","mBones","viewProjection","diffuseMatrix","lightDataSM","depthValuesSM","biasAndScaleSM","morphTargetInfluences","morphTargetCount","boneTextureInfo","softTransparentShadowSM","morphTargetTextureInfo","morphTargetTextureIndices","bakedVertexAnimationSettings","bakedVertexAnimationTextureSizeInverted","bakedVertexAnimationTime","bakedVertexAnimationTexture"],I=["diffuseSampler","boneSampler","morphTargets","bakedVertexAnimationTexture"],y=["Scene","Mesh"];if(In(R),this.customShaderOptions){if(E=this.customShaderOptions.shaderName,this.customShaderOptions.attributes)for(let D of this.customShaderOptions.attributes)h.indexOf(D)===-1&&h.push(D);if(this.customShaderOptions.uniforms)for(let D of this.customShaderOptions.uniforms)R.indexOf(D)===-1&&R.push(D);if(this.customShaderOptions.samplers)for(let D of this.customShaderOptions.samplers)I.indexOf(D)===-1&&I.push(D)}let M=this._scene.getEngine();c=M.createEffect(E,{attributes:h,uniformsNames:R,uniformBuffersNames:y,samplers:I,defines:S,fallbacks:v,onCompiled:null,onError:null,indexParameters:{maxSimultaneousMorphTargets:x},shaderLanguage:this._shaderLanguage},M),l.setEffect(c,f)}if(!c.isReady())return!1}return(this.useBlurExponentialShadowMap||this.useBlurCloseExponentialShadowMap)&&(!this._blurPostProcesses||!this._blurPostProcesses.length)&&this._initializeBlurRTTAndPostProcesses(),!(this._kernelBlurXPostprocess&&!this._kernelBlurXPostprocess.isReady()||this._kernelBlurYPostprocess&&!this._kernelBlurYPostprocess.isReady()||this._boxBlurPostprocess&&!this._boxBlurPostprocess.isReady())}prepareDefines(e,t){let i=this._scene,r=this._light;!i.shadowsEnabled||!r.shadowEnabled||(e["SHADOW"+t]=!0,this.useContactHardeningShadow?(e["SHADOWPCSS"+t]=!0,this._filteringQuality===n.QUALITY_LOW?e["SHADOWLOWQUALITY"+t]=!0:this._filteringQuality===n.QUALITY_MEDIUM&&(e["SHADOWMEDIUMQUALITY"+t]=!0)):this.usePercentageCloserFiltering?(e["SHADOWPCF"+t]=!0,this._filteringQuality===n.QUALITY_LOW?e["SHADOWLOWQUALITY"+t]=!0:this._filteringQuality===n.QUALITY_MEDIUM&&(e["SHADOWMEDIUMQUALITY"+t]=!0)):this.usePoissonSampling?e["SHADOWPOISSON"+t]=!0:this.useExponentialShadowMap||this.useBlurExponentialShadowMap?e["SHADOWESM"+t]=!0:(this.useCloseExponentialShadowMap||this.useBlurCloseExponentialShadowMap)&&(e["SHADOWCLOSEESM"+t]=!0),r.needCube()&&(e["SHADOWCUBE"+t]=!0))}bindShadowLight(e,t){let i=this._light,r=this._scene;if(!r.shadowsEnabled||!i.shadowEnabled)return;let s=this._getCamera(),a=this.getShadowMap();if(!a)return;if(!i.needCube()){let l=r.floatingOriginOffset,c=this.getTransformMatrix(),f=r.floatingOriginMode?HM(l,this._viewMatrix,this._projectionMatrix,Q.Matrix[0]):c;t.setMatrix("lightMatrix"+e,f)}let o=this.getShadowMapForRendering();this._filter===n.FILTER_PCF?(t.setDepthStencilTexture("shadowTexture"+e,o),i._uniformBuffer.updateFloat4("shadowsInfo",this.getDarkness(),a.getSize().width,1/a.getSize().width,this.frustumEdgeFalloff,e)):this._filter===n.FILTER_PCSS?(t.setDepthStencilTexture("shadowTexture"+e,o),t.setTexture("depthTexture"+e,o),i._uniformBuffer.updateFloat4("shadowsInfo",this.getDarkness(),1/a.getSize().width,this._contactHardeningLightSizeUVRatio*a.getSize().width,this.frustumEdgeFalloff,e)):(t.setTexture("shadowTexture"+e,o),i._uniformBuffer.updateFloat4("shadowsInfo",this.getDarkness(),this.blurScale/a.getSize().width,this.depthScale,this.frustumEdgeFalloff,e)),i._uniformBuffer.updateFloat2("depthValues",this.getLight().getDepthMinZ(s),this.getLight().getDepthMinZ(s)+this.getLight().getDepthMaxZ(s),e)}get viewMatrix(){return this._viewMatrix}get projectionMatrix(){return this._projectionMatrix}getTransformMatrix(){let e=this._scene;if(this._currentRenderId===e.getRenderId()&&this._currentFaceIndexCache===this._currentFaceIndex)return this._transformMatrix;this._currentRenderId=e.getRenderId(),this._currentFaceIndexCache=this._currentFaceIndex;let t=this._light.position;if(this._light.computeTransformedInformation()&&(t=this._light.transformedPosition),b.NormalizeToRef(this._light.getShadowDirection(this._currentFaceIndex),this._lightDirection),Math.abs(b.Dot(this._lightDirection,b.Up()))===1&&(this._lightDirection.z=1e-13),this._light.needProjectionMatrixCompute()||!this._cachedPosition||!this._cachedDirection||!t.equals(this._cachedPosition)||!this._lightDirection.equals(this._cachedDirection)){this._cachedPosition.copyFrom(t),this._cachedDirection.copyFrom(this._lightDirection),K.LookAtLHToRef(t,t.add(this._lightDirection),b.Up(),this._viewMatrix);let i=this.getShadowMap();if(i){let r=i.renderList;r&&this._light.setShadowProjectionMatrix(this._projectionMatrix,this._viewMatrix,r)}this._viewMatrix.multiplyToRef(this._projectionMatrix,this._transformMatrix)}return this._transformMatrix}recreateShadowMap(){let e=this._shadowMap;if(!e)return;let t=e.renderList;if(this._disposeRTTandPostProcesses(),this._initializeGenerator(),this.filter=this._filter,this._applyFilterValues(),t){this._shadowMap.renderList||(this._shadowMap.renderList=[]);for(let i of t)this._shadowMap.renderList.push(i)}else this._shadowMap.renderList=null}_disposeBlurPostProcesses(){this._shadowMap2&&(this._shadowMap2.dispose(),this._shadowMap2=null),this._boxBlurPostprocess&&(this._boxBlurPostprocess.dispose(),this._boxBlurPostprocess=null),this._kernelBlurXPostprocess&&(this._kernelBlurXPostprocess.dispose(),this._kernelBlurXPostprocess=null),this._kernelBlurYPostprocess&&(this._kernelBlurYPostprocess.dispose(),this._kernelBlurYPostprocess=null),this._blurPostProcesses=[]}_disposeRTTandPostProcesses(){this._shadowMap&&(this._shadowMap.dispose(),this._shadowMap=null),this._disposeBlurPostProcesses()}_disposeSceneUBOs(){if(this._sceneUBOs){for(let e of this._sceneUBOs)e.dispose();this._sceneUBOs=[]}}dispose(e=!0){if(this._disposeRTTandPostProcesses(),this._disposeSceneUBOs(),this._light){if(this._light._shadowGenerators){let t=this._light._shadowGenerators.entries();for(let i=t.next();i.done!==!0;i=t.next()){let[r,s]=i.value;s===this&&this._light._shadowGenerators.delete(r)}this._light._shadowGenerators.size===0&&(this._light._shadowGenerators=null)}this._light._markMeshesAsLightDirty()}e&&(this.onBeforeShadowMapRenderMeshObservable.clear(),this.onBeforeShadowMapRenderObservable.clear(),this.onAfterShadowMapRenderMeshObservable.clear(),this.onAfterShadowMapRenderObservable.clear())}serialize(){var i;let e={},t=this.getShadowMap();if(!t)return e;if(e.className=this.getClassName(),e.lightId=this._light.id,e.cameraId=(i=this._camera)==null?void 0:i.id,e.id=this.id,e.mapSize=t.getRenderSize(),e.forceBackFacesOnly=this.forceBackFacesOnly,e.darkness=this.getDarkness(),e.transparencyShadow=this._transparencyShadow,e.frustumEdgeFalloff=this.frustumEdgeFalloff,e.bias=this.bias,e.normalBias=this.normalBias,e.usePercentageCloserFiltering=this.usePercentageCloserFiltering,e.useContactHardeningShadow=this.useContactHardeningShadow,e.contactHardeningLightSizeUVRatio=this.contactHardeningLightSizeUVRatio,e.filteringQuality=this.filteringQuality,e.useExponentialShadowMap=this.useExponentialShadowMap,e.useBlurExponentialShadowMap=this.useBlurExponentialShadowMap,e.useCloseExponentialShadowMap=this.useBlurExponentialShadowMap,e.useBlurCloseExponentialShadowMap=this.useBlurExponentialShadowMap,e.usePoissonSampling=this.usePoissonSampling,e.depthScale=this.depthScale,e.blurBoxOffset=this.blurBoxOffset,e.blurKernel=this.blurKernel,e.blurScale=this.blurScale,e.useKernelBlur=this.useKernelBlur,e.renderList=[],t.renderList)for(let r=0;r{throw Xe("ShadowGeneratorSceneComponent")}});var p4={};$e(p4,{depthPixelShader:()=>Yoe});var wP,m4,Yoe,FP=C(()=>{G();uc();Mx();mc();wP="depthPixelShader",m4=`#ifdef ALPHATEST varying vec2 vUV;uniform sampler2D diffuseSampler; #endif #include @@ -10501,10 +10501,10 @@ gl_FragColor=vec4(vDepthMetric,0.0,0.0,1.0); #endif #endif #endif -}`;S.ShadersStore[bP]||(S.ShadersStore[bP]=r4);Roe={name:bP,shader:r4}});var s4,boe,a4=C(()=>{k();s4="pointCloudVertexDeclaration",boe=`#ifdef POINTSIZE +}`;T.ShadersStore[wP]||(T.ShadersStore[wP]=m4);Yoe={name:wP,shader:m4}});var _4,Koe,g4=C(()=>{G();_4="pointCloudVertexDeclaration",Koe=`#ifdef POINTSIZE uniform float pointSize; #endif -`;S.IncludesShadersStore[s4]||(S.IncludesShadersStore[s4]=boe)});var l4={};et(l4,{depthVertexShader:()=>Ioe});var MP,o4,Ioe,CP=C(()=>{k();nc();sc();Df();Lf();ac();bf();a4();Of();Nf();oc();lc();cc();fc();Yy();MP="depthVertexShader",o4=`attribute vec3 position; +`;T.IncludesShadersStore[_4]||(T.IncludesShadersStore[_4]=Koe)});var E4={};$e(E4,{depthVertexShader:()=>joe});var BP,v4,joe,UP=C(()=>{G();ac();oc();Nf();wf();lc();Cf();g4();Ff();Bf();cc();fc();hc();dc();iP();BP="depthVertexShader",v4=`attribute vec3 position; #include #include #include @@ -10562,7 +10562,7 @@ vUV=vec2(diffuseMatrix*vec4(uv2Updated,1.0,0.0)); #endif #include } -`;S.ShadersStore[MP]||(S.ShadersStore[MP]=o4);Ioe={name:MP,shader:o4}});var f4={};et(f4,{depthVertexShaderWGSL:()=>Moe});var yP,c4,Moe,h4=C(()=>{k();ql();Zl();Mf();Cf();Ql();Rf();yf();Pf();Jl();$l();ec();tc();yP="depthVertexShader",c4=`attribute position: vec3f; +`;T.ShadersStore[BP]||(T.ShadersStore[BP]=v4);joe={name:BP,shader:v4}});var T4={};$e(T4,{depthVertexShaderWGSL:()=>qoe});var VP,S4,qoe,A4=C(()=>{G();Ql();$l();Pf();Df();Jl();Mf();Lf();Of();ec();tc();ic();rc();VP="depthVertexShader",S4=`attribute position: vec3f; #include #include #include @@ -10618,7 +10618,7 @@ vertexOutputs.vUV= (uniforms.diffuseMatrix* vec4f(uv2Updated,1.0,0.0)).xy; #endif #endif } -`;S.ShadersStoreWGSL[yP]||(S.ShadersStoreWGSL[yP]=c4);Moe={name:yP,shader:c4}});var u4={};et(u4,{depthPixelShaderWGSL:()=>Coe});var PP,d4,Coe,m4=C(()=>{k();ic();_x();rc();PP="depthPixelShader",d4=`#ifdef ALPHATEST +`;T.ShadersStoreWGSL[VP]||(T.ShadersStoreWGSL[VP]=S4);qoe={name:VP,shader:S4}});var R4={};$e(R4,{depthPixelShaderWGSL:()=>Zoe});var GP,x4,Zoe,b4=C(()=>{G();nc();Ix();sc();GP="depthPixelShader",x4=`#ifdef ALPHATEST varying vUV: vec2f;var diffuseSamplerSampler: sampler;var diffuseSampler: texture_2d; #endif #include @@ -10657,8 +10657,8 @@ fragmentOutputs.color= vec4f(input.vDepthMetric,0.0,0.0,1.0); #endif #endif #endif -}`;S.ShadersStoreWGSL[PP]||(S.ShadersStoreWGSL[PP]=d4);Coe={name:PP,shader:d4}});var Lm,p4=C(()=>{Ht();Ui();Gr();af();Jo();IP();CP();an();el();yn();Tf();Lm=class n{get shaderLanguage(){return this._shaderLanguage}get alphaBlendedDepth(){return this._alphaBlendedDepth}set alphaBlendedDepth(e){this._alphaBlendedDepth!==e&&(this._alphaBlendedDepth=e,this._alphaBlendedDepthMaterialCache.clear())}setMaterialForRendering(e,t){this._depthMap.setMaterialForRendering(e,t)}_ensureGaussianSplattingDepthMaterial(e,t){var s;let i=(s=e._internalAbstractMeshDataInfo._materialForRenderPass)==null?void 0:s[t],r=this._alphaBlendedDepthMaterialCache.get(e.uniqueId);if(i===void 0||r!==this.alphaBlendedDepth){let a=e.material;if(!a)return null;let o=e.isCompound;i=a.makeDepthRenderingMaterial(this._scene,this._shaderLanguage,this.alphaBlendedDepth,o),this.setMaterialForRendering(e,i),this._alphaBlendedDepthMaterialCache.set(e.uniqueId,this.alphaBlendedDepth)}return i}constructor(e,t=1,i=null,r=!1,s=ge.TRILINEAR_SAMPLINGMODE,a=!1,o,l){this._shaderLanguage=0,this.enabled=!0,this.forceDepthWriteTransparentMeshes=!1,this._alphaBlendedDepth=!1,this._alphaBlendedDepthMaterialCache=new Map,this.useOnlyInActiveCamera=!1,this.reverseCulling=!1,this._shadersLoaded=!1,this._scene=e,this._storeNonLinearDepth=r,this._storeCameraSpaceZ=a,this.isPacked=t===0,this.isPacked?this.clearColor=new lt(1,1,1,1):this.clearColor=new lt(a?0:1,0,0,1),this._initShaderSourceAsync(),n._SceneComponentInitialization(this._scene);let c=e.getEngine();this._camera=i,s!==ge.NEAREST_SAMPLINGMODE&&(t===1&&!c._caps.textureFloatLinearFiltering&&(s=ge.NEAREST_SAMPLINGMODE),t===2&&!c._caps.textureHalfFloatLinearFiltering&&(s=ge.NEAREST_SAMPLINGMODE));let f=this.isPacked||!c._features.supportExtendedTextureFormats?5:6;this._depthMap=l!=null?l:new Or(o!=null?o:"DepthRenderer",{width:c.getRenderWidth(),height:c.getRenderHeight()},this._scene,!1,!0,t,!1,s,void 0,void 0,void 0,f),this._depthMap.wrapU=ge.CLAMP_ADDRESSMODE,this._depthMap.wrapV=ge.CLAMP_ADDRESSMODE,this._depthMap.refreshRate=1,this._depthMap.renderParticles=!1,this._depthMap.renderList=null,this._depthMap.noPrePassRenderer=!0,this._depthMap.activeCamera=this._camera,this._depthMap.ignoreCameraViewport=!0,this._depthMap.useCameraPostProcesses=!1,this._depthMap.onClearObservable.add(d=>{d.clear(this.clearColor,!0,!0,!0)}),this._depthMap.customIsReadyFunction=(d,u,m)=>{if((m||u===0)&&d.subMeshes)for(let _=0;_{var I;let u=d.getRenderingMesh(),m=d.getEffectiveMesh(),_=this._scene,p=_.getEngine(),g=d.getMaterial();if(m._internalAbstractMeshDataInfo._isActiveIntermediate=!1,!g||m.infiniteDistance||g.disableDepthWrite||d.verticesCount===0||d._renderId===_.getRenderId())return;let v=m._getWorldMatrixDeterminant()<0,x=g._getEffectiveOrientation(u);v&&(x=x===0?1:0);let A=x===0;p.setState(g.backFaceCulling,0,!1,A,this.reverseCulling?!g.cullBackFaces:g.cullBackFaces);let E=u._getInstancesRenderList(d._id,!!d.getReplacementMesh());if(E.mustReturn)return;let T=p.getCaps().instancedArrays&&(E.visibleInstances[d._id]!==null&&E.visibleInstances[d._id]!==void 0||u.hasThinInstances),R=this._camera||_.activeCamera;if(this.isReady(d,T)&&R){if(d._renderId=_.getRenderId(),m.getClassName()==="GaussianSplattingMesh"){let U=this._ensureGaussianSplattingDepthMaterial(m,p.currentRenderPassId);if(U&&!U.isReadyForSubMesh(m,d,T))return;this.alphaBlendedDepth&&g.needAlphaBlendingForMesh(m)?p.setAlphaMode(2):p.setAlphaMode(0),m.render(d,!1);return}let M=(I=m._internalAbstractMeshDataInfo._materialForRenderPass)==null?void 0:I[p.currentRenderPassId],D=d._getDrawWrapper();!D&&M&&(D=M._getDrawWrapper());let O=R.mode===ut.ORTHOGRAPHIC_CAMERA;if(!D)return;let V=D.effect;p.enableEffect(D),T||u._bind(d,V,g.fillMode),M?M.bindForSubMesh(m.getWorldMatrix(),m,d):(V.setMatrix("viewProjection",_.getTransformMatrix()),V.setMatrix("world",m.getWorldMatrix()),this._storeCameraSpaceZ&&V.setMatrix("view",_.getViewMatrix()));let N,w;if(O?(N=!p.useReverseDepthBuffer&&p.isNDCHalfZRange?0:1,w=p.useReverseDepthBuffer&&p.isNDCHalfZRange?0:1):(N=p.useReverseDepthBuffer&&p.isNDCHalfZRange?R.minZ:p.isNDCHalfZRange?0:R.minZ,w=p.useReverseDepthBuffer&&p.isNDCHalfZRange?0:R.maxZ),V.setFloat2("depthValues",N,N+w),!M){if(g.needAlphaTestingForMesh(m)){let G=g.getAlphaTestTexture();G&&(V.setTexture("diffuseSampler",G),V.setMatrix("diffuseMatrix",G.getTextureMatrix()))}gs(u,V),Mn(V,g,_),Cn(u,V),u.morphTargetManager&&u.morphTargetManager.isUsingTextureForTargets&&u.morphTargetManager._bind(V);let U=d.getMesh().bakedVertexAnimationManager;U&&U.isEnabled&&U.bind(V,T),g.pointsCloud&&V.setFloat("pointSize",g.pointSize)}this.alphaBlendedDepth&&g.needAlphaBlendingForMesh(m)?p.setAlphaMode(2):p.setAlphaMode(0),u._processRendering(m,d,V,g.fillMode,E,T,(U,G)=>V.setMatrix("world",G))}};this._depthMap.customRenderFunction=(d,u,m,_)=>{let p=this._scene.getEngine(),g=p.getAlphaMode(),v;if(_.length)for(v=0;v<_.length;v++)h(_.data[v]);for(v=0;v(h4(),f4)),Promise.resolve().then(()=>(m4(),u4))])):await Promise.all([Promise.resolve().then(()=>(CP(),l4)),Promise.resolve().then(()=>(IP(),n4))]),this._shadersLoaded=!0}isReady(e,t){var R,I;if(!this._shadersLoaded)return!1;let i=this._scene.getEngine(),r=e.getMesh(),s=r.getScene(),a=this._depthMap.renderPassId,o=(I=(R=r._internalAbstractMeshDataInfo._materialForRenderPass)==null?void 0:R[a])!=null?I:null;if(r.getClassName()==="GaussianSplattingMesh"&&(o=this._ensureGaussianSplattingDepthMaterial(r,a)),o)return o.isReadyForSubMesh(r,e,t);let l=e.getMaterial();if(!l||l.disableDepthWrite)return!1;let c=[],f=[L.PositionKind],h=!1,d=!1,u=!1;l.needAlphaTestingForMesh(r)&&l.getAlphaTestTexture()&&(c.push("#define ALPHATEST"),r.isVerticesDataPresent(L.UVKind)&&(f.push(L.UVKind),c.push("#define UV1"),h=!0),r.isVerticesDataPresent(L.UV2Kind)&&(f.push(L.UV2Kind),c.push("#define UV2"),d=!0));let m=new On;if(r.useBones&&r.computeBonesUsingShaders&&r.skeleton){f.push(L.MatricesIndicesKind),f.push(L.MatricesWeightsKind),r.numBoneInfluencers>4&&(f.push(L.MatricesIndicesExtraKind),f.push(L.MatricesWeightsExtraKind)),c.push("#define NUM_BONE_INFLUENCERS "+r.numBoneInfluencers),r.numBoneInfluencers>0&&m.addCPUSkinningFallback(0,r);let y=r.skeleton;y.isUsingTextureForMatrices?c.push("#define BONETEXTURE"):c.push("#define BonesPerMesh "+(y.bones.length+1))}else c.push("#define NUM_BONE_INFLUENCERS 0");let _=r.morphTargetManager?tl(r.morphTargetManager,c,f,r,!0,!1,!1,h,d,u):0;l.pointsCloud&&c.push("#define POINTSIZE"),t&&(c.push("#define INSTANCES"),oo(f),e.getRenderingMesh().hasThinInstances&&c.push("#define THIN_INSTANCES"));let p=r.bakedVertexAnimationManager;p&&p.isEnabled&&(c.push("#define BAKED_VERTEX_ANIMATION_TEXTURE"),t&&f.push("bakedVertexAnimationSettingsInstanced")),this._storeNonLinearDepth&&c.push("#define NONLINEARDEPTH"),this._storeCameraSpaceZ&&c.push("#define STORE_CAMERASPACE_Z"),this.isPacked&&c.push("#define PACKED"),$o(l,s,c);let g=i.currentRenderPassId,x=this._depthMap.renderPassIds.includes(g)?g:this._depthMap.renderPassId,A=e._getDrawWrapper(x,!0),E=A.defines,T=c.join(` -`);if(E!==T){let y=["world","mBones","boneTextureInfo","pointSize","viewProjection","view","diffuseMatrix","depthValues","morphTargetInfluences","morphTargetCount","morphTargetTextureInfo","morphTargetTextureIndices","bakedVertexAnimationSettings","bakedVertexAnimationTextureSizeInverted","bakedVertexAnimationTime","bakedVertexAnimationTexture"],M=["diffuseSampler","morphTargets","boneSampler","bakedVertexAnimationTexture"];In(y),A.setEffect(i.createEffect("depth",{attributes:f,uniformsNames:y,uniformBuffersNames:[],samplers:M,defines:T,fallbacks:m,onCompiled:null,onError:null,indexParameters:{maxSimultaneousMorphTargets:_},shaderLanguage:this._shaderLanguage},i),T)}return A.effect.isReady()}getDepthMap(){return this._depthMap}dispose(){let e=[];for(let t in this._scene._depthRenderer)this._scene._depthRenderer[t]===this&&e.push(t);if(e.length>0){this._depthMap.dispose();for(let t of e)delete this._scene._depthRenderer[t]}}};Lm.ForceGLSL=!1;Lm._SceneComponentInitialization=n=>{throw Xe("DepthRendererSceneComponent")}});var g4={};et(g4,{minmaxReduxPixelShaderWGSL:()=>yoe});var DP,_4,yoe,LP=C(()=>{k();DP="minmaxReduxPixelShader",_4=`varying vUV: vec2f;var textureSampler: texture_2d; +}`;T.ShadersStoreWGSL[GP]||(T.ShadersStoreWGSL[GP]=x4);Zoe={name:GP,shader:x4}});var Fm,I4=C(()=>{zt();Ui();Gr();cf();el();FP();UP();ln();il();yn();Rf();Fm=class n{get shaderLanguage(){return this._shaderLanguage}get alphaBlendedDepth(){return this._alphaBlendedDepth}set alphaBlendedDepth(e){this._alphaBlendedDepth!==e&&(this._alphaBlendedDepth=e,this._alphaBlendedDepthMaterialCache.clear())}setMaterialForRendering(e,t){this._depthMap.setMaterialForRendering(e,t)}_ensureGaussianSplattingDepthMaterial(e,t){var s;let i=(s=e._internalAbstractMeshDataInfo._materialForRenderPass)==null?void 0:s[t],r=this._alphaBlendedDepthMaterialCache.get(e.uniqueId);if(i===void 0||r!==this.alphaBlendedDepth){let a=e.material;if(!a)return null;let o=e.isCompound;i=a.makeDepthRenderingMaterial(this._scene,this._shaderLanguage,this.alphaBlendedDepth,o),this.setMaterialForRendering(e,i),this._alphaBlendedDepthMaterialCache.set(e.uniqueId,this.alphaBlendedDepth)}return i}constructor(e,t=1,i=null,r=!1,s=ge.TRILINEAR_SAMPLINGMODE,a=!1,o,l){this._shaderLanguage=0,this.enabled=!0,this.forceDepthWriteTransparentMeshes=!1,this._alphaBlendedDepth=!1,this._alphaBlendedDepthMaterialCache=new Map,this.useOnlyInActiveCamera=!1,this.reverseCulling=!1,this._shadersLoaded=!1,this._scene=e,this._storeNonLinearDepth=r,this._storeCameraSpaceZ=a,this.isPacked=t===0,this.isPacked?this.clearColor=new lt(1,1,1,1):this.clearColor=new lt(a?0:1,0,0,1),this._initShaderSourceAsync(),n._SceneComponentInitialization(this._scene);let c=e.getEngine();this._camera=i,s!==ge.NEAREST_SAMPLINGMODE&&(t===1&&!c._caps.textureFloatLinearFiltering&&(s=ge.NEAREST_SAMPLINGMODE),t===2&&!c._caps.textureHalfFloatLinearFiltering&&(s=ge.NEAREST_SAMPLINGMODE));let f=this.isPacked||!c._features.supportExtendedTextureFormats?5:6;this._depthMap=l!=null?l:new Or(o!=null?o:"DepthRenderer",{width:c.getRenderWidth(),height:c.getRenderHeight()},this._scene,!1,!0,t,!1,s,void 0,void 0,void 0,f),this._depthMap.wrapU=ge.CLAMP_ADDRESSMODE,this._depthMap.wrapV=ge.CLAMP_ADDRESSMODE,this._depthMap.refreshRate=1,this._depthMap.renderParticles=!1,this._depthMap.renderList=null,this._depthMap.noPrePassRenderer=!0,this._depthMap.activeCamera=this._camera,this._depthMap.ignoreCameraViewport=!0,this._depthMap.useCameraPostProcesses=!1,this._depthMap.onClearObservable.add(d=>{d.clear(this.clearColor,!0,!0,!0)}),this._depthMap.customIsReadyFunction=(d,u,m)=>{if((m||u===0)&&d.subMeshes)for(let _=0;_{var I;let u=d.getRenderingMesh(),m=d.getEffectiveMesh(),_=this._scene,p=_.getEngine(),g=d.getMaterial();if(m._internalAbstractMeshDataInfo._isActiveIntermediate=!1,!g||m.infiniteDistance||g.disableDepthWrite||d.verticesCount===0||d._renderId===_.getRenderId())return;let v=m._getWorldMatrixDeterminant()<0,x=g._getEffectiveOrientation(u);v&&(x=x===0?1:0);let A=x===0;p.setState(g.backFaceCulling,0,!1,A,this.reverseCulling?!g.cullBackFaces:g.cullBackFaces);let S=u._getInstancesRenderList(d._id,!!d.getReplacementMesh());if(S.mustReturn)return;let E=p.getCaps().instancedArrays&&(S.visibleInstances[d._id]!==null&&S.visibleInstances[d._id]!==void 0||u.hasThinInstances),R=this._camera||_.activeCamera;if(this.isReady(d,E)&&R){if(d._renderId=_.getRenderId(),m.getClassName()==="GaussianSplattingMesh"){let U=this._ensureGaussianSplattingDepthMaterial(m,p.currentRenderPassId);if(U&&!U.isReadyForSubMesh(m,d,E))return;this.alphaBlendedDepth&&g.needAlphaBlendingForMesh(m)?p.setAlphaMode(2):p.setAlphaMode(0),m.render(d,!1);return}let M=(I=m._internalAbstractMeshDataInfo._materialForRenderPass)==null?void 0:I[p.currentRenderPassId],D=d._getDrawWrapper();!D&&M&&(D=M._getDrawWrapper());let O=R.mode===ut.ORTHOGRAPHIC_CAMERA;if(!D)return;let V=D.effect;p.enableEffect(D),E||u._bind(d,V,g.fillMode),M?M.bindForSubMesh(m.getWorldMatrix(),m,d):(V.setMatrix("viewProjection",_.getTransformMatrix()),V.setMatrix("world",m.getWorldMatrix()),this._storeCameraSpaceZ&&V.setMatrix("view",_.getViewMatrix()));let N,F;if(O?(N=!p.useReverseDepthBuffer&&p.isNDCHalfZRange?0:1,F=p.useReverseDepthBuffer&&p.isNDCHalfZRange?0:1):(N=p.useReverseDepthBuffer&&p.isNDCHalfZRange?R.minZ:p.isNDCHalfZRange?0:R.minZ,F=p.useReverseDepthBuffer&&p.isNDCHalfZRange?0:R.maxZ),V.setFloat2("depthValues",N,N+F),!M){if(g.needAlphaTestingForMesh(m)){let W=g.getAlphaTestTexture();W&&(V.setTexture("diffuseSampler",W),V.setMatrix("diffuseMatrix",W.getTextureMatrix()))}gs(u,V),Mn(V,g,_),Cn(u,V),u.morphTargetManager&&u.morphTargetManager.isUsingTextureForTargets&&u.morphTargetManager._bind(V);let U=d.getMesh().bakedVertexAnimationManager;U&&U.isEnabled&&U.bind(V,E),g.pointsCloud&&V.setFloat("pointSize",g.pointSize)}this.alphaBlendedDepth&&g.needAlphaBlendingForMesh(m)?p.setAlphaMode(2):p.setAlphaMode(0),u._processRendering(m,d,V,g.fillMode,S,E,(U,W)=>V.setMatrix("world",W))}};this._depthMap.customRenderFunction=(d,u,m,_)=>{let p=this._scene.getEngine(),g=p.getAlphaMode(),v;if(_.length)for(v=0;v<_.length;v++)h(_.data[v]);for(v=0;v(A4(),T4)),Promise.resolve().then(()=>(b4(),R4))])):await Promise.all([Promise.resolve().then(()=>(UP(),E4)),Promise.resolve().then(()=>(FP(),p4))]),this._shadersLoaded=!0}isReady(e,t){var R,I;if(!this._shadersLoaded)return!1;let i=this._scene.getEngine(),r=e.getMesh(),s=r.getScene(),a=this._depthMap.renderPassId,o=(I=(R=r._internalAbstractMeshDataInfo._materialForRenderPass)==null?void 0:R[a])!=null?I:null;if(r.getClassName()==="GaussianSplattingMesh"&&(o=this._ensureGaussianSplattingDepthMaterial(r,a)),o)return o.isReadyForSubMesh(r,e,t);let l=e.getMaterial();if(!l||l.disableDepthWrite)return!1;let c=[],f=[L.PositionKind],h=!1,d=!1,u=!1;l.needAlphaTestingForMesh(r)&&l.getAlphaTestTexture()&&(c.push("#define ALPHATEST"),r.isVerticesDataPresent(L.UVKind)&&(f.push(L.UVKind),c.push("#define UV1"),h=!0),r.isVerticesDataPresent(L.UV2Kind)&&(f.push(L.UV2Kind),c.push("#define UV2"),d=!0));let m=new On;if(r.useBones&&r.computeBonesUsingShaders&&r.skeleton){f.push(L.MatricesIndicesKind),f.push(L.MatricesWeightsKind),r.numBoneInfluencers>4&&(f.push(L.MatricesIndicesExtraKind),f.push(L.MatricesWeightsExtraKind)),c.push("#define NUM_BONE_INFLUENCERS "+r.numBoneInfluencers),r.numBoneInfluencers>0&&m.addCPUSkinningFallback(0,r);let y=r.skeleton;y.isUsingTextureForMatrices?c.push("#define BONETEXTURE"):c.push("#define BonesPerMesh "+(y.bones.length+1))}else c.push("#define NUM_BONE_INFLUENCERS 0");let _=r.morphTargetManager?rl(r.morphTargetManager,c,f,r,!0,!1,!1,h,d,u):0;l.pointsCloud&&c.push("#define POINTSIZE"),t&&(c.push("#define INSTANCES"),co(f),e.getRenderingMesh().hasThinInstances&&c.push("#define THIN_INSTANCES"));let p=r.bakedVertexAnimationManager;p&&p.isEnabled&&(c.push("#define BAKED_VERTEX_ANIMATION_TEXTURE"),t&&f.push("bakedVertexAnimationSettingsInstanced")),this._storeNonLinearDepth&&c.push("#define NONLINEARDEPTH"),this._storeCameraSpaceZ&&c.push("#define STORE_CAMERASPACE_Z"),this.isPacked&&c.push("#define PACKED"),tl(l,s,c);let g=i.currentRenderPassId,x=this._depthMap.renderPassIds.includes(g)?g:this._depthMap.renderPassId,A=e._getDrawWrapper(x,!0),S=A.defines,E=c.join(` +`);if(S!==E){let y=["world","mBones","boneTextureInfo","pointSize","viewProjection","view","diffuseMatrix","depthValues","morphTargetInfluences","morphTargetCount","morphTargetTextureInfo","morphTargetTextureIndices","bakedVertexAnimationSettings","bakedVertexAnimationTextureSizeInverted","bakedVertexAnimationTime","bakedVertexAnimationTexture"],M=["diffuseSampler","morphTargets","boneSampler","bakedVertexAnimationTexture"];In(y),A.setEffect(i.createEffect("depth",{attributes:f,uniformsNames:y,uniformBuffersNames:[],samplers:M,defines:E,fallbacks:m,onCompiled:null,onError:null,indexParameters:{maxSimultaneousMorphTargets:_},shaderLanguage:this._shaderLanguage},i),E)}return A.effect.isReady()}getDepthMap(){return this._depthMap}dispose(){let e=[];for(let t in this._scene._depthRenderer)this._scene._depthRenderer[t]===this&&e.push(t);if(e.length>0){this._depthMap.dispose();for(let t of e)delete this._scene._depthRenderer[t]}}};Fm.ForceGLSL=!1;Fm._SceneComponentInitialization=n=>{throw Xe("DepthRendererSceneComponent")}});var C4={};$e(C4,{minmaxReduxPixelShaderWGSL:()=>Qoe});var kP,M4,Qoe,WP=C(()=>{G();kP="minmaxReduxPixelShader",M4=`varying vUV: vec2f;var textureSampler: texture_2d; #if defined(INITIAL) uniform texSize: vec2f;@fragment fn main(input: FragmentInputs)->FragmentOutputs {let coord=vec2i(fragmentInputs.vUV*(uniforms.texSize-1.0));let f1=textureLoad(textureSampler,coord,0).r;let f2=textureLoad(textureSampler,coord+vec2i(1,0),0).r;let f3=textureLoad(textureSampler,coord+vec2i(1,1),0).r;let f4=textureLoad(textureSampler,coord+vec2i(0,1),0).r; @@ -10687,7 +10687,7 @@ fn main(input: FragmentInputs)->FragmentOutputs {let coord=vec2i(fragmentInputs. fn main(input: FragmentInputs)->FragmentOutputs {fragmentOutputs.color=vec4f(0.);if (true) { discard;}} #endif -`;S.ShadersStoreWGSL[DP]||(S.ShadersStoreWGSL[DP]=_4);yoe={name:DP,shader:_4}});var E4={};et(E4,{minmaxReduxPixelShader:()=>Poe});var OP,v4,Poe,NP=C(()=>{k();OP="minmaxReduxPixelShader",v4=`varying vec2 vUV;uniform sampler2D textureSampler; +`;T.ShadersStoreWGSL[kP]||(T.ShadersStoreWGSL[kP]=M4);Qoe={name:kP,shader:M4}});var P4={};$e(P4,{minmaxReduxPixelShader:()=>$oe});var HP,y4,$oe,zP=C(()=>{G();HP="minmaxReduxPixelShader",y4=`varying vec2 vUV;uniform sampler2D textureSampler; #if defined(INITIAL) uniform vec2 texSize;void main(void) {ivec2 coord=ivec2(vUV*(texSize-1.0));float f1=texelFetch(textureSampler,coord,0).r;float f2=texelFetch(textureSampler,coord+ivec2(1,0),0).r;float f3=texelFetch(textureSampler,coord+ivec2(1,1),0).r;float f4=texelFetch(textureSampler,coord+ivec2(0,1),0).r; @@ -10716,12 +10716,12 @@ void main(void) {glFragColor=vec4(0.);if (true) { discard;}} #endif -`;S.ShadersStore[OP]||(S.ShadersStore[OP]=v4);Poe={name:OP,shader:v4}});var S4,Ff,Doe,Loe,uo,Ex,T4=C(()=>{hi();Lh();Pi();(function(n){n[n.NormalizedViewDepth=0]="NormalizedViewDepth",n[n.ViewDepth=1]="ViewDepth",n[n.ScreenDepth=2]="ScreenDepth"})(S4||(S4={}));Ff=class n extends kr{_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.resolve().then(()=>(LP(),g4)))):t.push(Promise.resolve().then(()=>(NP(),E4)))}constructor(e,t=null,i="",r){super({...r,name:e,engine:t||Le.LastCreatedEngine,useShaderStore:!0,useAsPostProcess:!0,fragmentShader:n.FragmentUrl,uniforms:n.Uniforms,defines:i}),this.textureWidth=0,this.textureHeight=0}bind(e=!1){super.bind(e);let t=this.drawWrapper.effect;this.textureWidth===1||this.textureHeight===1?t.setInt2("texSize",this.textureWidth,this.textureHeight):t.setFloat2("texSize",this.textureWidth,this.textureHeight)}};Ff.FragmentUrl="minmaxRedux";Ff.Uniforms=["texSize"];Doe=new Float32Array(4),Loe=new Uint8Array(4),uo={min:0,max:0},Ex=class{get depthRedux(){return this._depthRedux}set depthRedux(e){this._depthRedux!==e&&(this._depthRedux=e,this._recreatePostProcesses())}get textureWidth(){return this._textureWidth}get textureHeight(){return this._textureHeight}constructor(e,t=!0){this.onAfterReductionPerformed=new ee,this._textureWidth=0,this._textureHeight=0,this._scene=e,this._depthRedux=t,this.reductionSteps=[]}setTextureDimensions(e,t,i=0){return e===this._textureWidth&&t===this._textureHeight&&i===this._depthTextureType?!1:(this._textureWidth=e,this._textureHeight=t,this._depthTextureType=i,this._recreatePostProcesses(),!0)}readMinMax(e){let t=e.type===1||e.type===2,i=t?Doe:Loe;this._scene.getEngine()._readTexturePixels(e,1,1,-1,0,i,!1),uo.min=i[0],uo.max=i[1],t||(uo.min=uo.min/255,uo.max=uo.max/255),uo.min>=uo.max&&(uo.min=0,uo.max=1),this.onAfterReductionPerformed.notifyObservers(uo)}dispose(e=!0){e&&(this.onAfterReductionPerformed.clear(),this._textureWidth=0,this._textureHeight=0);for(let t=0;t{hi();Oh();Pi();(function(n){n[n.NormalizedViewDepth=0]="NormalizedViewDepth",n[n.ViewDepth=1]="ViewDepth",n[n.ScreenDepth=2]="ScreenDepth"})(D4||(D4={}));Uf=class n extends kr{_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.resolve().then(()=>(WP(),C4)))):t.push(Promise.resolve().then(()=>(zP(),P4)))}constructor(e,t=null,i="",r){super({...r,name:e,engine:t||Le.LastCreatedEngine,useShaderStore:!0,useAsPostProcess:!0,fragmentShader:n.FragmentUrl,uniforms:n.Uniforms,defines:i}),this.textureWidth=0,this.textureHeight=0}bind(e=!1){super.bind(e);let t=this.drawWrapper.effect;this.textureWidth===1||this.textureHeight===1?t.setInt2("texSize",this.textureWidth,this.textureHeight):t.setFloat2("texSize",this.textureWidth,this.textureHeight)}};Uf.FragmentUrl="minmaxRedux";Uf.Uniforms=["texSize"];Joe=new Float32Array(4),ele=new Uint8Array(4),po={min:0,max:0},yx=class{get depthRedux(){return this._depthRedux}set depthRedux(e){this._depthRedux!==e&&(this._depthRedux=e,this._recreatePostProcesses())}get textureWidth(){return this._textureWidth}get textureHeight(){return this._textureHeight}constructor(e,t=!0){this.onAfterReductionPerformed=new te,this._textureWidth=0,this._textureHeight=0,this._scene=e,this._depthRedux=t,this.reductionSteps=[]}setTextureDimensions(e,t,i=0){return e===this._textureWidth&&t===this._textureHeight&&i===this._depthTextureType?!1:(this._textureWidth=e,this._textureHeight=t,this._depthTextureType=i,this._recreatePostProcesses(),!0)}readMinMax(e){let t=e.type===1||e.type===2,i=t?Joe:ele;this._scene.getEngine()._readTexturePixels(e,1,1,-1,0,i,!1),po.min=i[0],po.max=i[1],t||(po.min=po.min/255,po.max=po.max/255),po.min>=po.max&&(po.min=0,po.max=1),this.onAfterReductionPerformed.notifyObservers(po)}dispose(e=!0){e&&(this.onAfterReductionPerformed.clear(),this._textureWidth=0,this._textureHeight=0);for(let t=0;t1||i>1;){t=Math.max(Math.round(t/2),1),i=Math.max(Math.round(i/2),1);let a=new Ff("Reduction phase "+s,e.getEngine(),"#define "+(t==1&&i==1?"LAST":t==1||i==1?"ONEBEFORELAST":"MAIN"));a.textureWidth=t,a.textureHeight=i,this.reductionSteps.push(a),s++}}}});var Sx,A4=C(()=>{Vl();uT();T4();NP();LP();Sx=class{get onAfterReductionPerformed(){return this._thinMinMaxReducer.onAfterReductionPerformed}constructor(e){this._onAfterUnbindObserver=null,this._forceFullscreenViewport=!0,this._activated=!1,this._camera=e,this._postProcessManager=new Ul(e.getScene()),this._thinMinMaxReducer=new Ex(e.getScene()),this._reductionSteps=[],this._onContextRestoredObserver=e.getEngine().onContextRestoredObservable.add(()=>{this._postProcessManager._rebuild()})}get sourceTexture(){return this._sourceTexture}setSourceTexture(e,t,i=2,r=!0){if(e!==this._sourceTexture&&(this._thinMinMaxReducer.depthRedux=t,this.deactivate(),this._sourceTexture=e,this._forceFullscreenViewport=r,this._thinMinMaxReducer.setTextureDimensions(e.getRenderWidth(),e.getRenderHeight()))){this._disposePostProcesses();let s=this._thinMinMaxReducer.reductionSteps;for(let a=0;a{c.setTexture("textureSampler",this._sourceTexture)})),a===s.length-1&&this._reductionSteps[a-1].onAfterRenderObservable.add(()=>{this._thinMinMaxReducer.readMinMax(l.inputTexture.texture)})}}}get refreshRate(){return this._sourceTexture?this._sourceTexture.refreshRate:-1}set refreshRate(e){this._sourceTexture&&(this._sourceTexture.refreshRate=e)}get activated(){return this._activated}activate(){this._onAfterUnbindObserver||!this._sourceTexture||(this._onAfterUnbindObserver=this._sourceTexture.onAfterUnbindObservable.add(()=>{var t,i;let e=this._camera.getScene().getEngine();(t=e._debugPushGroup)==null||t.call(e,"min max reduction"),this._reductionSteps[0].activate(this._camera),this._postProcessManager.directRender(this._reductionSteps,this._reductionSteps[0].inputTexture,this._forceFullscreenViewport,0,0,!0,this._reductionSteps.length-1),e.unBindFramebuffer(this._reductionSteps[this._reductionSteps.length-1].inputTexture,!1),(i=e._debugPopGroup)==null||i.call(e)}),this._activated=!0)}deactivate(){!this._onAfterUnbindObserver||!this._sourceTexture||(this._sourceTexture.onAfterUnbindObservable.remove(this._onAfterUnbindObserver),this._onAfterUnbindObserver=null,this._activated=!1)}dispose(e=!0){e&&(this.onAfterReductionPerformed.clear(),this._camera.getEngine().onContextRestoredObservable.remove(this._onContextRestoredObserver),this._onContextRestoredObserver=void 0,this._disposePostProcesses(),this._postProcessManager.dispose(),this._postProcessManager=void 0,this._thinMinMaxReducer.dispose(),this._thinMinMaxReducer=void 0,this._sourceTexture=null)}_disposePostProcesses(){for(let e=0;e{p4();A4();Tx=class extends Sx{get depthRenderer(){return this._depthRenderer}constructor(e){super(e)}setDepthRenderer(e=null,t=2,i=!0){let r=this._camera.getScene();this._depthRenderer&&(delete r._depthRenderer[this._depthRendererId],this._depthRenderer.dispose(),this._depthRenderer=null),e===null&&(r._depthRenderer||(r._depthRenderer={}),this._depthRendererId="minmax_"+this._camera.uniqueId,e=this._depthRenderer=new Lm(r,t,this._camera,!1,1,!1,`DepthRenderer ${this._depthRendererId}`),e.enabled=!1,r._depthRenderer[this._depthRendererId]=e),super.setSourceTexture(e.getDepthMap(),!0,t,i)}setSourceTexture(e,t,i=2,r=!0){super.setSourceTexture(e,t,i,r)}activate(){this._depthRenderer&&(this._depthRenderer.enabled=!0),super.activate()}deactivate(){super.deactivate(),this._depthRenderer&&(this._depthRenderer.enabled=!1)}dispose(e=!0){super.dispose(e),this._depthRenderer&&e&&(this._depthRenderer.dispose(),this._depthRenderer=null)}}});var R4,Ooe,Er,Om,Ax,mo,b4=C(()=>{Ve();af();an();vx();Zu();x4();Pt();Pi();M_();R4=b.Up(),Ooe=b.Zero(),Er=new b,Om=new b,Ax=new K,mo=class n extends yi{_validateFilter(e){return e===yi.FILTER_NONE||e===yi.FILTER_PCF||e===yi.FILTER_PCSS?e:($.Error('Unsupported filter "'+e+'"!'),yi.FILTER_NONE)}get numCascades(){return this._numCascades}set numCascades(e){e=Math.min(Math.max(e,n.MIN_CASCADES_COUNT),n.MAX_CASCADES_COUNT),e!==this._numCascades&&(this._numCascades=e,this.recreateShadowMap(),this._recreateSceneUBOs())}get freezeShadowCastersBoundingInfo(){return this._freezeShadowCastersBoundingInfo}set freezeShadowCastersBoundingInfo(e){this._freezeShadowCastersBoundingInfoObservable&&e&&(this._scene.onBeforeRenderObservable.remove(this._freezeShadowCastersBoundingInfoObservable),this._freezeShadowCastersBoundingInfoObservable=null),!this._freezeShadowCastersBoundingInfoObservable&&!e&&(this._freezeShadowCastersBoundingInfoObservable=this._scene.onBeforeRenderObservable.add(()=>this._computeShadowCastersBoundingInfo())),this._freezeShadowCastersBoundingInfo=e,e&&this._computeShadowCastersBoundingInfo()}_computeShadowCastersBoundingInfo(){if(this._scbiMin.copyFromFloats(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),this._scbiMax.copyFromFloats(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE),this._shadowMap&&this._shadowMap.renderList){let e=this._shadowMap.renderList;for(let t=0;tt&&(e=0,t=1),e<0&&(e=0),t>1&&(t=1),this._minDistance=e,this._maxDistance=t,this._breaksAreDirty=!0)}get minDistance(){return this._minDistance}get maxDistance(){return this._maxDistance}getClassName(){return n.CLASSNAME}getCascadeMinExtents(e){return e>=0&&e=0&&et.maxZ&&t.maxZ!==0||(this._shadowMaxZ=e,this._light._markMeshesAsLightDirty(),this._breaksAreDirty=!0)}get debug(){return this._debug}set debug(e){this._debug=e,this._light._markMeshesAsLightDirty()}get depthClamp(){return this._depthClamp}set depthClamp(e){this._depthClamp=e}get cascadeBlendPercentage(){return this._cascadeBlendPercentage}set cascadeBlendPercentage(e){this._cascadeBlendPercentage=e,this._light._markMeshesAsLightDirty()}get lambda(){return this._lambda}set lambda(e){let t=Math.min(Math.max(e,0),1);this._lambda!=t&&(this._lambda=t,this._breaksAreDirty=!0)}getCascadeViewMatrix(e){return e>=0&&e=0&&e=0&&e{let r=i.min,s=i.max;r>=s&&(r=0,s=1),(r!=this._minDistance||s!=this._maxDistance)&&this.setMinMaxDistance(r,s)}),this._depthReducer.setDepthRenderer(this._depthRenderer)),this._depthReducer.activate()}}get autoCalcDepthBoundsRefreshRate(){var e,t,i;return(i=(t=(e=this._depthReducer)==null?void 0:e.depthRenderer)==null?void 0:t.getDepthMap().refreshRate)!=null?i:-1}set autoCalcDepthBoundsRefreshRate(e){var t;(t=this._depthReducer)!=null&&t.depthRenderer&&(this._depthReducer.depthRenderer.getDepthMap().refreshRate=e)}splitFrustum(){this._breaksAreDirty=!0}_splitFrustum(){let e=this._getCamera();if(!e)return;let t=e.minZ,i=e.maxZ||this._shadowMaxZ,r=i-t,s=this._minDistance,a=this._shadowMaxZ=t?Math.min((this._shadowMaxZ-t)/(i-t),this._maxDistance):this._maxDistance,o=t+s*r,l=t+a*r,c=l-o,f=l/o;for(let h=0;ha||(!this._depthClamp||this.filter===yi.FILTER_PCSS?(s=Math.min(s,l),this.filter!==yi.FILTER_PCSS&&(a=Math.min(a,c))):(a=Math.min(a,c),s=Math.max(s,l),a=Math.max(s+1,a))),K.OrthoOffCenterLHToRef(this._cascadeMinExtents[r].x,this._cascadeMaxExtents[r].x,this._cascadeMinExtents[r].y,this._cascadeMaxExtents[r].y,i?a:s,i?s:a,this._projectionMatrices[r],e.getEngine().isNDCHalfZRange),this._cascadeMinExtents[r].z=s,this._cascadeMaxExtents[r].z=a,this._viewMatrices[r].multiplyToRef(this._projectionMatrices[r],this._transformMatrices[r]),b.TransformCoordinatesToRef(Ooe,this._transformMatrices[r],Er),Er.scaleInPlace(this._mapSize/2),Om.copyFromFloats(Math.round(Er.x),Math.round(Er.y),Math.round(Er.z)),Om.subtractInPlace(Er).scaleInPlace(2/this._mapSize),K.TranslationToRef(Om.x,Om.y,0,Ax),this._projectionMatrices[r].multiplyToRef(Ax,this._projectionMatrices[r]),this._viewMatrices[r].multiplyToRef(this._projectionMatrices[r],this._transformMatrices[r]),this._transformMatrices[r].copyToArray(this._transformMatricesAsArray,r*16)}}_computeFrustumInWorldSpace(e){let t=this._getCamera();if(!t)return;let i=this._cascades[e].prevBreakDistance,r=this._cascades[e].breakDistance,s=this._scene.getEngine().isNDCHalfZRange;t.getViewMatrix();let a=t.maxZ===0,o=t.maxZ;a&&(t.maxZ=this._shadowMaxZ,t.getProjectionMatrix(!0));let l=K.Invert(t.getTransformationMatrix());a&&(t.maxZ=o,t.getProjectionMatrix(!0));let c=this._scene.getEngine().useReverseDepthBuffer?4:0;for(let f=0;f{this._sceneUBOs&&this._scene.setSceneUniformBuffer(this._sceneUBOs[t]),this._currentLayer=t,this._filter===yi.FILTER_PCF&&e.setColorWrite(!1),va.eyeAtCamera=!1,this._scene.setTransformMatrix(this.getCascadeViewMatrix(t),this.getCascadeProjectionMatrix(t)),this._useUBO&&(this._scene.getSceneUniformBuffer().unbindEffect(),this._scene.finalizeSceneUbo())}),this._shadowMap.onBeforeBindObservable.add(()=>{var t;this._currentSceneUBO=this._scene.getSceneUniformBuffer(),e._enableGPUDebugMarkers&&((t=e._debugPushGroup)==null||t.call(e,`Cascaded shadow map generation for pass id ${e.currentRenderPassId}`)),this._breaksAreDirty&&this._splitFrustum(),this._computeMatrices()}),this._splitFrustum()}_bindCustomEffectForRenderSubMeshForShadowMap(e,t){t.setMatrix("viewProjection",this.getCascadeTransformMatrix(this._currentLayer))}_isReadyCustomDefines(e){e.push("#define SM_DEPTHCLAMP "+(this._depthClamp&&this._filter!==yi.FILTER_PCSS?"1":"0"))}prepareDefines(e,t){super.prepareDefines(e,t);let i=this._scene,r=this._light;if(!i.shadowsEnabled||!r.shadowEnabled)return;e["SHADOWCSM"+t]=!0,e["SHADOWCSMDEBUG"+t]=this.debug,e["SHADOWCSMNUM_CASCADES"+t]=this.numCascades,e["SHADOWCSM_RIGHTHANDED"+t]=i.useRightHandedSystem;let s=this._getCamera();s&&this._shadowMaxZ<=(s.maxZ||this._shadowMaxZ)&&(e["SHADOWCSMUSESHADOWMAXZ"+t]=!0),this.cascadeBlendPercentage===0&&(e["SHADOWCSMNOBLEND"+t]=!0)}bindShadowLight(e,t){let i=this._light,r=this._scene;if(!r.shadowsEnabled||!i.shadowEnabled)return;let s=this._getCamera();if(!s)return;let a=this.getShadowMap();if(!a)return;let o=a.getSize().width,l=this._transformMatricesAsArray,c=r.floatingOriginMode?w2(this._scene.floatingOriginOffset,this._viewMatrices,this._projectionMatrices,this._numCascades,this._tempTransformMatricesAsArray):l;if(t.setMatrices("lightMatrix"+e,c),t.setArray("viewFrustumZ"+e,this._viewSpaceFrustumsZ),t.setFloat("cascadeBlendFactor"+e,this.cascadeBlendPercentage===0?1e4:1/this.cascadeBlendPercentage),t.setArray("frustumLengths"+e,this._frustumLengths),this._filter===yi.FILTER_PCF)t.setDepthStencilTexture("shadowTexture"+e,a),i._uniformBuffer.updateFloat4("shadowsInfo",this.getDarkness(),o,1/o,this.frustumEdgeFalloff,e);else if(this._filter===yi.FILTER_PCSS){for(let f=0;fnew n(r,s,void 0,a));return e.numCascades!==void 0&&(i.numCascades=e.numCascades),e.debug!==void 0&&(i.debug=e.debug),e.stabilizeCascades!==void 0&&(i.stabilizeCascades=e.stabilizeCascades),e.lambda!==void 0&&(i.lambda=e.lambda),e.cascadeBlendPercentage!==void 0&&(i.cascadeBlendPercentage=e.cascadeBlendPercentage),e.depthClamp!==void 0&&(i.depthClamp=e.depthClamp),e.autoCalcDepthBounds!==void 0&&(i.autoCalcDepthBounds=e.autoCalcDepthBounds),e.shadowMaxZ!==void 0&&(i.shadowMaxZ=e.shadowMaxZ),e.penumbraDarkness!==void 0&&(i.penumbraDarkness=e.penumbraDarkness),e.freezeShadowCastersBoundingInfo!==void 0&&(i.freezeShadowCastersBoundingInfo=e.freezeShadowCastersBoundingInfo),e.minDistance!==void 0&&e.maxDistance!==void 0&&i.setMinMaxDistance(e.minDistance,e.maxDistance),i}};mo._FrustumCornersNdcSpace=[new b(-1,1,-1),new b(1,1,-1),new b(1,-1,-1),new b(-1,-1,-1),new b(-1,1,1),new b(1,1,1),new b(1,-1,1),new b(-1,-1,1)];mo.CLASSNAME="CascadedShadowGenerator";mo.DEFAULT_CASCADES_COUNT=4;mo.MIN_CASCADES_COUNT=2;mo.MAX_CASCADES_COUNT=4;mo._SceneComponentInitialization=n=>{throw Xe("ShadowGeneratorSceneComponent")}});function xx(n,e){Noe[n]=e}var Noe,FP=C(()=>{Noe={}});var wP,I4=C(()=>{vx();b4();Wu();FP();xx(Qe.NAME_SHADOWGENERATOR,(n,e)=>{if(n.shadowGenerators!==void 0&&n.shadowGenerators!==null)for(let t=0,i=n.shadowGenerators.length;t{let e=n._getComponent(Qe.NAME_SHADOWGENERATOR);e||(e=new wP(n),n._addComponent(e))}});async function M4(n,e){let t=e.method||"GET";return await new Promise((i,r)=>{let s=new Rr;s.addEventListener("readystatechange",()=>{if(s.readyState==4)if(s.status==200){let a={};if(e.responseHeaders)for(let o of e.responseHeaders)a[o]=s.getResponseHeader(o)||"";i({response:s.response,headerValues:a})}else r(`Unable to fetch data from ${n}. Error code: ${s.status}`)}),s.open(t,n),s.send()})}var C4=C(()=>{Ch()});function Foe(n){return!!n.createPlugin}function woe(n){return!!n.name}function Rx(){return sl[".babylon"]}function Boe(n){for(let e in sl){let t=sl[e];if(t.mimeType===n)return t}}function UP(n,e){let t=sl[n];return t||($.Warn("Unable to find a plugin to load "+n+" files. Trying to use .babylon default plugin. To load from a specific filetype (eg. gltf) see: https://doc.babylonjs.com/features/featuresDeepDive/importers/loadingFileTypes"),e?Rx():void 0)}function Uoe(n){return!!sl[n]}function Voe(n){for(let e in sl){let t=sl[e].plugin;if(t.canDirectLoad&&t.canDirectLoad(n))return sl[e]}return Rx()}function Goe(n){let e=n.indexOf("?");e!==-1&&(n=n.substring(0,e));let t=n.lastIndexOf(".");return n.substring(t,n.length).toLowerCase()}function koe(n){return n.substring(0,5)==="data:"?n.substring(5):null}function VP(n,e,t){let r="Unable to load from "+(n.rawData?"binary data":n.url);return e?r+=`: ${e}`:t&&(r+=`: ${t}`),r}async function GP(n,e,t,i,r,s,a,o,l){var u;let c=koe(n.url);if(n.rawData&&!a)throw"When using ArrayBufferView to load data the file extension must be provided.";let f=!c&&!a?Goe(n.url):"",h=a?UP(a,!0):c?Voe(n.url):UP(f,!1);if(!h&&f){if(n.url&&!n.url.startsWith("blob:")){let m=await M4(n.url,{method:"HEAD",responseHeaders:["Content-Type"]}),_=m.headerValues?m.headerValues["Content-Type"]:"";_&&(h=Boe(_))}h||(h=Rx())}if(!h)throw new Error(`No plugin or fallback for ${a!=null?a:n.url}`);if(((u=l==null?void 0:l[h.plugin.name])==null?void 0:u.enabled)===!1)throw new Error(`The '${h.plugin.name}' plugin is disabled via the loader options passed to the loading operation.`);if(n.rawData&&!h.isBinary)throw"Loading from ArrayBufferView can not be used with plugins that don't support binary loading.";return(m=>{if(Foe(h.plugin)){let p=h.plugin.createPlugin(l!=null?l:{});return p instanceof Promise?(p.then(m).catch(g=>{r("Error instantiating plugin.",g)}),null):(m(p),p)}else return m(h.plugin),h.plugin})(m=>{var T;if(!m)throw`The loader plugin corresponding to the '${a}' file type has not been found. If using es6, please import the plugin you wish to use before.`;if(P4.notifyObservers(m),c&&(m.canDirectLoad&&m.canDirectLoad(n.url)||!$c(n.url))){if(m.directLoad){let R=m.directLoad(e,c);R instanceof Promise?R.then(I=>{t(m,I)}).catch(I=>{r("Error in directLoad of _loadData: "+I,I)}):t(m,R)}else t(m,c);return}let _=h.isBinary,p=(R,I)=>{if(e.isDisposed){r("Scene has been disposed");return}t(m,R,I)},g=null,v=!1;(T=m.onDisposeObservable)==null||T.add(()=>{v=!0,g&&(g.abort(),g=null),s()});let x=()=>{if(v)return;let R=(I,y)=>{r(I==null?void 0:I.statusText,y)};if(!m.loadFile&&n.rawData)throw"Plugin does not support loading ArrayBufferView.";g=m.loadFile?m.loadFile(e,n.rawData||n.file||n.url,n.rootUrl,p,i,_,R,o):e._loadFile(n.file||n.url,p,i,!0,_,R)},A=e.getEngine(),E=A.enableOfflineSupport;if(E){let R=!1;for(let I of e.disableOfflineSupportExceptionRules)if(I.test(n.url)){R=!0;break}E=!R}E&&Re.OfflineProviderFactory?e.offlineProvider=Re.OfflineProviderFactory(n.url,x,A.disableManifestCheck):x()})}function kP(n,e){let t,i,r=null,s=null;if(!e)t=n,i=he.GetFilename(n),n=he.GetFolderPath(n);else if(woe(e))t=`file:${e.name}`,i=e.name,r=e;else if(ArrayBuffer.isView(e))t="",i=Qc(),s=e;else if(e.startsWith("data:"))t=e,i="";else if(n){let a=e;if(a.substring(0,1)==="/")return he.Error("Wrong sceneFilename parameter"),null;t=n+a,i=a}else t=e,i=he.GetFilename(e),n=he.GetFolderPath(e);return{url:t,rootUrl:n,name:i,file:r,rawData:s}}function wf(n){if(typeof n.extensions=="string"){let e=n.extensions;sl[e.toLowerCase()]={plugin:n,isBinary:!1}}else{let e=n.extensions,t=Object.keys(e);for(let i of t)sl[i.toLowerCase()]={plugin:n,isBinary:e[i].isBinary,mimeType:e[i].mimeType}}}async function hg(n,e,t){let{meshNames:i,rootUrl:r="",onProgress:s,pluginExtension:a,name:o,pluginOptions:l}=t!=null?t:{};return await L4(i,r,n,e,s,a,o,l)}async function D4(n,e,t="",i=Le.LastCreatedScene,r=null,s=null,a=null,o=null,l="",c={}){if(!i)return $.Error("No scene available to import mesh to"),null;let f=kP(e,t);if(!f)return null;let h={};i.addPendingData(h);let d=()=>{i.removePendingData(h)},u=(p,g)=>{let v=VP(f,p,g);a?a(i,v,new ms(v,da.SceneLoaderError,g)):$.Error(v),d()},m=s?p=>{try{s(p)}catch(g){u("Error in onProgress callback: "+g,g)}}:void 0,_=(p,g,v,x,A,E,T,R)=>{if(i.importedMeshesFiles.push(f.url),r)try{r(p,g,v,x,A,E,T,R)}catch(I){u("Error in onSuccess callback: "+I,I)}i.removePendingData(h)};return await GP(f,i,(p,g,v)=>{if(p.rewriteRootURL&&(f.rootUrl=p.rewriteRootURL(f.rootUrl,v)),p.importMesh){let x=p,A=[],E=[],T=[];if(!x.importMesh(n,i,g,f.rootUrl,A,E,T,u))return;i.loadingPluginName=p.name,_(A,E,T,[],[],[],[],[])}else p.importMeshAsync(n,i,g,f.rootUrl,m,f.name).then(A=>{i.loadingPluginName=p.name,_(A.meshes,A.particleSystems,A.skeletons,A.animationGroups,A.transformNodes,A.geometries,A.lights,A.spriteManagers)}).catch(A=>{u(A.message,A)})},m,u,d,o,l,c)}async function L4(n,e,t,i,r,s,a,o){return await new Promise((l,c)=>{try{D4(n,e,t,i,(f,h,d,u,m,_,p,g)=>{l({meshes:f,particleSystems:h,skeletons:d,animationGroups:u,transformNodes:m,geometries:_,lights:p,spriteManagers:g})},r,(f,h,d)=>{c(d||new Error(h))},s,a,o).catch(c)}catch(f){c(f)}})}async function O4(n,e="",t=Le.LastCreatedEngine,i=null,r=null,s=null,a=null,o="",l={}){if(!t){he.Error("No engine available");return}await WP(n,e,new Qt(t),i,r,s,a,o,l)}async function Woe(n,e,t,i,r,s,a){return await new Promise((o,l)=>{O4(n,e,t,c=>{o(c)},i,(c,f,h)=>{l(h||new Error(f))},r,s,a)})}async function WP(n,e="",t=Le.LastCreatedScene,i=null,r=null,s=null,a=null,o="",l={}){if(!t)return $.Error("No scene available to append to"),null;let c=kP(n,e);if(!c)return null;let f={};t.addPendingData(f);let h=()=>{t.removePendingData(f)};Wr.ShowLoadingScreen&&!BP&&(BP=!0,t.getEngine().displayLoadingUI(),t.executeWhenReady(()=>{t.getEngine().hideLoadingUI(),BP=!1}));let d=(_,p)=>{let g=VP(c,_,p);s?s(t,g,new ms(g,da.SceneLoaderError,p)):$.Error(g),h()},u=r?_=>{try{r(_)}catch(p){d("Error in onProgress callback",p)}}:void 0,m=()=>{if(i)try{i(t)}catch(_){d("Error in onSuccess callback",_)}t.removePendingData(f)};return await GP(c,t,(_,p)=>{if(_.load){if(!_.load(t,p,c.rootUrl,d))return;t.loadingPluginName=_.name,m()}else _.loadAsync(t,p,c.rootUrl,u,c.name).then(()=>{t.loadingPluginName=_.name,m()}).catch(v=>{d(v.message,v)})},u,d,h,a,o,l)}async function Hoe(n,e,t,i,r,s,a){return await new Promise((o,l)=>{try{WP(n,e,t,c=>{o(c)},i,(c,f,h)=>{l(h||new Error(f))},r,s,a).catch(l)}catch(c){l(c)}})}async function HP(n,e="",t=Le.LastCreatedScene,i=null,r=null,s=null,a=null,o="",l={}){if(!t)return $.Error("No scene available to load asset container to"),null;let c=kP(n,e);if(!c)return null;let f={};t.addPendingData(f);let h=()=>{t.removePendingData(f)},d=(_,p)=>{let g=VP(c,_,p);s?s(t,g,new ms(g,da.SceneLoaderError,p)):$.Error(g),h()},u=r?_=>{try{r(_)}catch(p){d("Error in onProgress callback",p)}}:void 0,m=_=>{if(i)try{i(_)}catch(p){d("Error in onSuccess callback",p)}t.removePendingData(f)};return await GP(c,t,(_,p)=>{if(_.loadAssetContainer){let v=_.loadAssetContainer(t,p,c.rootUrl,d);if(!v)return;v.populateRootNodes(),t.loadingPluginName=_.name,m(v)}else _.loadAssetContainerAsync?_.loadAssetContainerAsync(t,p,c.rootUrl,u,c.name).then(v=>{v.populateRootNodes(),t.loadingPluginName=_.name,m(v)}).catch(v=>{d(v.message,v)}):d("LoadAssetContainer is not supported by this plugin. Plugin did not provide a loadAssetContainer or loadAssetContainerAsync method.")},u,d,h,a,o,l)}async function zoe(n,e,t,i,r,s,a){return await new Promise((o,l)=>{try{HP(n,e,t,c=>{o(c)},i,(c,f,h)=>{l(h||new Error(f))},r,s,a).catch(l)}catch(c){l(c)}})}async function N4(n,e="",t=Le.LastCreatedScene,i=!0,r=0,s=null,a=null,o=null,l=null,c=null,f="",h={}){if(!t){$.Error("No scene available to load animations to");return}if(i){for(let p of t.animatables)p.reset();t.stopAllAnimations();let m=t.animationGroups.slice();for(let p of m)p.dispose();let _=t.getNodes();for(let p of _)p.animations&&(p.animations=[])}else switch(r){case 0:let m=t.animationGroups.slice();for(let _ of m)_.dispose();break;case 1:for(let _ of t.animationGroups)_.stop();break;case 2:for(let _ of t.animationGroups)_.reset(),_.restart();break;case 3:break;default:$.Error("Unknown animation group loading mode value '"+r+"'");return}let d=t.animatables.length;await HP(n,e,t,m=>{m.mergeAnimationsTo(t,t.animatables.slice(d),s),m.dispose(),t.onAnimationFileImportedObservable.notifyObservers(t),a&&a(t)},o,l,c,f,h)}async function Xoe(n,e,t,i,r,s,a,o,l,c){return await new Promise((f,h)=>{try{N4(n,e,t,i,r,s,d=>{f(d)},a,(d,u,m)=>{h(m||new Error(u))},o,l,c).catch(h)}catch(d){h(d)}})}var y4,P4,sl,BP,Qh,Nm=C(()=>{Ci();hi();ps();Pi();Pt();YT();Fl();d_();h_();Lr();C4();(function(n){n[n.Clean=0]="Clean",n[n.Stop=1]="Stop",n[n.Sync=2]="Sync",n[n.NoSync=3]="NoSync"})(y4||(y4={}));P4=new ee,sl={},BP=!1;Qh=class{static get ForceFullSceneLoadingForIncremental(){return Wr.ForceFullSceneLoadingForIncremental}static set ForceFullSceneLoadingForIncremental(e){Wr.ForceFullSceneLoadingForIncremental=e}static get ShowLoadingScreen(){return Wr.ShowLoadingScreen}static set ShowLoadingScreen(e){Wr.ShowLoadingScreen=e}static get loggingLevel(){return Wr.loggingLevel}static set loggingLevel(e){Wr.loggingLevel=e}static get CleanBoneMatrixWeights(){return Wr.CleanBoneMatrixWeights}static set CleanBoneMatrixWeights(e){Wr.CleanBoneMatrixWeights=e}static GetDefaultPlugin(){return Rx()}static GetPluginForExtension(e){var t;return(t=UP(e,!0))==null?void 0:t.plugin}static IsPluginForExtensionAvailable(e){return Uoe(e)}static RegisterPlugin(e){wf(e)}static ImportMesh(e,t,i,r,s,a,o,l,c,f){D4(e,t,i,r,s,a,o,l,c,f).catch(h=>o==null?void 0:o(Le.LastCreatedScene,h==null?void 0:h.message,h))}static async ImportMeshAsync(e,t,i,r,s,a,o){return await L4(e,t,i,r,s,a,o)}static Load(e,t,i,r,s,a,o,l){O4(e,t,i,r,s,a,o,l).catch(c=>a==null?void 0:a(Le.LastCreatedScene,c==null?void 0:c.message,c))}static async LoadAsync(e,t,i,r,s,a){return await Woe(e,t,i,r,s,a)}static Append(e,t,i,r,s,a,o,l){WP(e,t,i,r,s,a,o,l).catch(c=>a==null?void 0:a(i!=null?i:Le.LastCreatedScene,c==null?void 0:c.message,c))}static async AppendAsync(e,t,i,r,s,a){return await Hoe(e,t,i,r,s,a)}static LoadAssetContainer(e,t,i,r,s,a,o,l){HP(e,t,i,r,s,a,o,l).catch(c=>a==null?void 0:a(i!=null?i:Le.LastCreatedScene,c==null?void 0:c.message,c))}static async LoadAssetContainerAsync(e,t,i,r,s,a){return await zoe(e,t,i,r,s,a)}static ImportAnimations(e,t,i,r,s,a,o,l,c,f,h){N4(e,t,i,r,s,a,o,l,c,f,h).catch(d=>c==null?void 0:c(i!=null?i:Le.LastCreatedScene,d==null?void 0:d.message,d))}static async ImportAnimationsAsync(e,t,i,r,s,a,o,l,c,f,h){return await Xoe(e,t,i,r,s,a,l,f,h)}};Qh.NO_LOGGING=0;Qh.MINIMAL_LOGGING=1;Qh.SUMMARY_LOGGING=2;Qh.DETAILED_LOGGING=3;Qh.OnPluginActivatedObservable=P4});var bx,zP,XP,al,dg=C(()=>{Di();Gh();Ju();Pt();Pi();cy();Ef();Jo();Ci();tf();bx=class{constructor(){this.rootNodes=[],this.cameras=[],this.lights=[],this.meshes=[],this.skeletons=[],this.particleSystems=[],this.animations=[],this.animationGroups=[],this.multiMaterials=[],this.materials=[],this.morphTargetManagers=[],this.geometries=[],this.transformNodes=[],this.actionManagers=[],this.textures=[],this._environmentTexture=null,this.postProcesses=[],this.sounds=null,this.effectLayers=[],this.layers=[],this.reflectionProbes=[],this.spriteManagers=[]}get environmentTexture(){return this._environmentTexture}set environmentTexture(e){this._environmentTexture=e}getNodes(){let e=[];e=e.concat(this.meshes),e=e.concat(this.lights),e=e.concat(this.cameras),e=e.concat(this.transformNodes);for(let t of this.skeletons)e=e.concat(t.bones);return e}},zP=class extends bx{},XP=class{constructor(){this.rootNodes=[],this.skeletons=[],this.animationGroups=[]}dispose(){let e=this.rootNodes;for(let r of e)r.dispose();e.length=0;let t=this.skeletons;for(let r of t)r.dispose();t.length=0;let i=this.animationGroups;for(let r of i)r.dispose();i.length=0}},al=class extends bx{constructor(e){super(),this._wasAddedToScene=!1,e=e||Le.LastCreatedScene,e&&(this.scene=e,this.proceduralTextures=[],e.onDisposeObservable.add(()=>{this._wasAddedToScene||this.dispose()}),this._onContextRestoredObserver=e.getEngine().onContextRestoredObservable.add(()=>{for(let t of this.geometries)t._rebuild();for(let t of this.meshes)t._rebuild();for(let t of this.particleSystems)t.rebuild();for(let t of this.textures)t._rebuild();for(let t of this.spriteManagers)t.rebuild()}))}_topologicalSort(e){let t=new Map;for(let o of e)t.set(o.uniqueId,o);let i={dependsOn:new Map,dependedBy:new Map};for(let o of e){let l=o.uniqueId;i.dependsOn.set(l,new Set),i.dependedBy.set(l,new Set)}for(let o of e){let l=o.uniqueId,c=i.dependsOn.get(l);if(o instanceof jl){let h=o.sourceMesh;t.has(h.uniqueId)&&(c.add(h.uniqueId),i.dependedBy.get(h.uniqueId).add(l))}let f=i.dependedBy.get(l);for(let h of o.getDescendants()){let d=h.uniqueId;t.has(d)&&(f.add(d),i.dependsOn.get(d).add(l))}}let r=[],s=[];for(let o of e){let l=o.uniqueId;i.dependsOn.get(l).size===0&&(s.push(o),t.delete(l))}let a=s;for(;a.length>0;){let o=a.shift();r.push(o);let l=i.dependedBy.get(o.uniqueId);for(let c of Array.from(l.values())){let f=i.dependsOn.get(c);f.delete(o.uniqueId),f.size===0&&t.get(c)&&(a.push(t.get(c)),t.delete(c))}}return t.size>0&&($.Error("SceneSerializer._topologicalSort: There were unvisited nodes:"),t.forEach(o=>{$.Error(o.name)})),r}_addNodeAndDescendantsToList(e,t,i,r){if(!(!i||r&&!r(i)||t.has(i.uniqueId))){e.push(i),t.add(i.uniqueId);for(let s of i.getDescendants(!0))this._addNodeAndDescendantsToList(e,t,s,r)}}_isNodeInContainer(e){return e instanceof ur&&this.meshes.indexOf(e)!==-1||e instanceof Jt&&this.transformNodes.indexOf(e)!==-1||e instanceof Xt&&this.lights.indexOf(e)!==-1||e instanceof ut&&this.cameras.indexOf(e)!==-1}_isValidHierarchy(){for(let e of this.meshes)if(e.parent&&!this._isNodeInContainer(e.parent))return $.Warn(`Node ${e.name} has a parent that is not in the container.`),!1;for(let e of this.transformNodes)if(e.parent&&!this._isNodeInContainer(e.parent))return $.Warn(`Node ${e.name} has a parent that is not in the container.`),!1;for(let e of this.lights)if(e.parent&&!this._isNodeInContainer(e.parent))return $.Warn(`Node ${e.name} has a parent that is not in the container.`),!1;for(let e of this.cameras)if(e.parent&&!this._isNodeInContainer(e.parent))return $.Warn(`Node ${e.name} has a parent that is not in the container.`),!1;return!0}instantiateModelsToScene(e,t=!1,i){this._isValidHierarchy()||he.Warn("SceneSerializer.InstantiateModelsToScene: The Asset Container hierarchy is not valid.");let r={},s={},a=new XP,o=[],l=[],c={doNotInstantiate:!0,...i},f=(_,p)=>{if(r[_.uniqueId]=p.uniqueId,s[p.uniqueId]=p,e&&(p.name=e(_.name)),p instanceof q){let g=p;if(g.morphTargetManager){let v=_.morphTargetManager;g.morphTargetManager=v.clone();for(let x=0;x{if(f(_,p),_.parent){let g=r[_.parent.uniqueId],v=s[g];v?p.parent=v:p.parent=_.parent}if(p.position&&_.position&&p.position.copyFrom(_.position),p.rotationQuaternion&&_.rotationQuaternion&&p.rotationQuaternion.copyFrom(_.rotationQuaternion),p.rotation&&_.rotation&&p.rotation.copyFrom(_.rotation),p.scaling&&_.scaling&&p.scaling.copyFrom(_.scaling),p.material){let g=p;if(g.material)if(t){let v=_.material;if(l.indexOf(v)===-1){let x=v.clone(e?e(v.name):"Clone of "+v.name);if(l.push(v),r[v.uniqueId]=x.uniqueId,s[x.uniqueId]=x,v.getClassName()==="MultiMaterial"){let A=v;for(let E of A.subMaterials)E&&(x=E.clone(e?e(E.name):"Clone of "+E.name),l.push(E),r[E.uniqueId]=x.uniqueId,s[x.uniqueId]=x);A.subMaterials=A.subMaterials.map(E=>E&&s[r[E.uniqueId]])}}g.getClassName()!=="InstancedMesh"&&(g.material=s[r[v.uniqueId]])}else g.material.getClassName()==="MultiMaterial"?this.scene.multiMaterials.indexOf(g.material)===-1&&this.scene.addMultiMaterial(g.material):this.scene.materials.indexOf(g.material)===-1&&this.scene.addMaterial(g.material)}p.parent===null&&a.rootNodes.push(p)};for(let _ of u)if(_.getClassName()==="InstancedMesh"){let p=_,g=p.sourceMesh,v=r[g.uniqueId],A=(typeof v=="number"?s[v]:g).createInstance(p.name);m(p,A)}else{let p=!0;_.getClassName()==="TransformNode"||_.getClassName()==="Node"||_.skeleton||!_.getTotalVertices||_.getTotalVertices()===0?p=!1:c.doNotInstantiate&&(typeof c.doNotInstantiate=="function"?p=!c.doNotInstantiate(_):p=!c.doNotInstantiate);let g=p?_.createInstance(`instance of ${_.name}`):_.clone(`Clone of ${_.name}`,null,!0);if(!g)throw new Error(`Could not clone or instantiate node on Asset Container ${_.name}`);m(_,g)}for(let _ of this.skeletons){if(c.predicate&&!c.predicate(_))continue;let p=_.clone(e?e(_.name):"Clone of "+_.name);for(let g of this.meshes)if(g.skeleton===_&&!g.isAnInstance){let v=s[r[g.uniqueId]];if(!v||v.isAnInstance||(v.skeleton=p,o.indexOf(p)!==-1))continue;o.push(p);for(let x of p.bones)x._linkedTransformNode&&(x._linkedTransformNode=s[r[x._linkedTransformNode.uniqueId]])}a.skeletons.push(p)}for(let _ of this.animationGroups){if(c.predicate&&!c.predicate(_))continue;let p=_.clone(e?e(_.name):"Clone of "+_.name,g=>s[r[g.uniqueId]]||g);a.animationGroups.push(p)}return a}addAllToScene(){if(!this._wasAddedToScene){this._isValidHierarchy()||he.Warn("SceneSerializer.addAllToScene: The Asset Container hierarchy is not valid."),this._wasAddedToScene=!0,this.addToScene(null),this.environmentTexture&&(this.scene.environmentTexture=this.environmentTexture);for(let e of this.scene._serializableComponents)e.addFromContainer(this);this.scene.getEngine().onContextRestoredObservable.remove(this._onContextRestoredObserver),this._onContextRestoredObserver=null}}addToScene(e=null){let t=[];for(let i of this.cameras)e&&!e(i)||(this.scene.addCamera(i),t.push(i));for(let i of this.lights)e&&!e(i)||(this.scene.addLight(i),t.push(i));for(let i of this.meshes)e&&!e(i)||(this.scene.addMesh(i),t.push(i));for(let i of this.skeletons)e&&!e(i)||this.scene.addSkeleton(i);for(let i of this.animations)e&&!e(i)||this.scene.addAnimation(i);for(let i of this.animationGroups)e&&!e(i)||this.scene.addAnimationGroup(i);for(let i of this.multiMaterials)e&&!e(i)||this.scene.addMultiMaterial(i);for(let i of this.materials)e&&!e(i)||this.scene.addMaterial(i);for(let i of this.morphTargetManagers)e&&!e(i)||this.scene.addMorphTargetManager(i);for(let i of this.geometries)e&&!e(i)||this.scene.addGeometry(i);for(let i of this.transformNodes)e&&!e(i)||(this.scene.addTransformNode(i),t.push(i));for(let i of this.actionManagers)e&&!e(i)||this.scene.addActionManager(i);for(let i of this.textures)e&&!e(i)||this.scene.addTexture(i);for(let i of this.reflectionProbes)e&&!e(i)||this.scene.addReflectionProbe(i);for(let i of this.spriteManagers)e&&!e(i)||(this.scene.spriteManagers||(this.scene.spriteManagers=[]),this.scene.spriteManagers.push(i));if(t.length){let i=new Set(this.scene.meshes);for(let r of this.scene.lights)i.add(r);for(let r of this.scene.cameras)i.add(r);for(let r of this.scene.transformNodes)i.add(r);for(let r of this.skeletons)for(let s of r.bones)i.add(s);for(let r of t)r.parent&&!i.has(r.parent)&&(r.setParent?r.setParent(null):r.parent=null)}}removeAllFromScene(){this._isValidHierarchy()||he.Warn("SceneSerializer.removeAllFromScene: The Asset Container hierarchy is not valid."),this._wasAddedToScene=!1,this.removeFromScene(null),this.environmentTexture===this.scene.environmentTexture&&(this.scene.environmentTexture=null);for(let e of this.scene._serializableComponents)e.removeFromContainer(this)}removeFromScene(e=null){for(let t of this.cameras)e&&!e(t)||this.scene.removeCamera(t);for(let t of this.lights)e&&!e(t)||this.scene.removeLight(t);for(let t of this.meshes)e&&!e(t)||this.scene.removeMesh(t,!0);for(let t of this.skeletons)e&&!e(t)||this.scene.removeSkeleton(t);for(let t of this.animations)e&&!e(t)||this.scene.removeAnimation(t);for(let t of this.animationGroups)e&&!e(t)||this.scene.removeAnimationGroup(t);for(let t of this.multiMaterials)e&&!e(t)||this.scene.removeMultiMaterial(t);for(let t of this.materials)e&&!e(t)||this.scene.removeMaterial(t);for(let t of this.morphTargetManagers)e&&!e(t)||this.scene.removeMorphTargetManager(t);for(let t of this.geometries)e&&!e(t)||this.scene.removeGeometry(t);for(let t of this.transformNodes)e&&!e(t)||this.scene.removeTransformNode(t);for(let t of this.actionManagers)e&&!e(t)||this.scene.removeActionManager(t);for(let t of this.textures)e&&!e(t)||this.scene.removeTexture(t);for(let t of this.reflectionProbes)e&&!e(t)||this.scene.removeReflectionProbe(t);for(let t of this.spriteManagers)if(!(e&&!e(t))&&this.scene.spriteManagers){let i=this.scene.spriteManagers.indexOf(t);i!==-1&&this.scene.spriteManagers.splice(i,1)}}dispose(){let e=this.cameras.slice(0);for(let _ of e)_.dispose();this.cameras.length=0;let t=this.lights.slice(0);for(let _ of t)_.dispose();this.lights.length=0;let i=this.meshes.slice(0);for(let _ of i)_.dispose();this.meshes.length=0;let r=this.skeletons.slice(0);for(let _ of r)_.dispose();this.skeletons.length=0;let s=this.animationGroups.slice(0);for(let _ of s)_.dispose();this.animationGroups.length=0;let a=this.multiMaterials.slice(0);for(let _ of a)_.dispose();this.multiMaterials.length=0;let o=this.materials.slice(0);for(let _ of o)_.dispose();this.materials.length=0;let l=this.geometries.slice(0);for(let _ of l)_.dispose();this.geometries.length=0;let c=this.transformNodes.slice(0);for(let _ of c)_.dispose();this.transformNodes.length=0;let f=this.actionManagers.slice(0);for(let _ of f)_.dispose();this.actionManagers.length=0;let h=this.textures.slice(0);for(let _ of h)_.dispose();this.textures.length=0;let d=this.reflectionProbes.slice(0);for(let _ of d)_.dispose();this.reflectionProbes.length=0;let u=this.morphTargetManagers.slice(0);for(let _ of u)_.dispose();this.morphTargetManagers.length=0;let m=this.spriteManagers.slice(0);for(let _ of m)_.dispose();this.spriteManagers.length=0,this.environmentTexture&&(this.environmentTexture.dispose(),this.environmentTexture=null);for(let _ of this.scene._serializableComponents)_.removeFromContainer(this,!0);this._onContextRestoredObserver&&(this.scene.getEngine().onContextRestoredObservable.remove(this._onContextRestoredObserver),this._onContextRestoredObserver=null)}_moveAssets(e,t,i){if(!(!e||!t))for(let r of e){let s=!0;if(i){for(let a of i)if(r===a){s=!1;break}}s&&(t.push(r),r._parentContainer=this)}}moveAllFromScene(e){this._wasAddedToScene=!1,e===void 0&&(e=new zP);for(let t in this)Object.prototype.hasOwnProperty.call(this,t)&&(this[t]=this[t]||(t==="_environmentTexture"?null:[]),this._moveAssets(this.scene[t],this[t],e[t]));this.environmentTexture=this.scene.environmentTexture,this.removeAllFromScene()}createRootMesh(){let e=new q("assetContainerRootMesh",this.scene);for(let t of this.meshes)t.parent||e.addChild(t);return this.meshes.unshift(e),e}mergeAnimationsTo(e=Le.LastCreatedScene,t,i=null){if(!e)return $.Error("No scene available to merge animations to"),[];let r=i||(l=>{let c,f=l.animations.length?l.animations[0].targetProperty:"",h=l.name.split(".").join("").split("_primitive")[0];switch(f){case"position":case"rotationQuaternion":c=e.getTransformNodeByName(l.name)||e.getTransformNodeByName(h);break;case"influence":c=e.getMorphTargetByName(l.name)||e.getMorphTargetByName(h);break;default:c=e.getNodeByName(l.name)||e.getNodeByName(h)}return c}),s=this.getNodes();for(let l of s){let c=r(l);if(c!==null){for(let f of l.animations){let h=c.animations.filter(d=>d.targetProperty===f.targetProperty);for(let d of h){let u=c.animations.indexOf(d,0);u>-1&&c.animations.splice(u,1)}}c.animations=c.animations.concat(l.animations)}}let a=[],o=this.animationGroups.slice();for(let l of o){a.push(l.clone(l.name,r));for(let c of l.animatables)c.stop()}for(let l of t){let c=r(l.target);c&&(e.beginAnimation(c,l.fromFrame,l.toFrame,l.loopAnimation,l.speedRatio,l.onAnimationEnd?l.onAnimationEnd:void 0,void 0,!0,void 0,l.onAnimationLoop?l.onAnimationLoop:void 0),e.stopAnimation(l.target))}return a}populateRootNodes(){this.rootNodes.length=0;for(let e of this.meshes)!e.parent&&this.rootNodes.indexOf(e)===-1&&this.rootNodes.push(e);for(let e of this.transformNodes)!e.parent&&this.rootNodes.indexOf(e)===-1&&this.rootNodes.push(e);for(let e of this.lights)!e.parent&&this.rootNodes.indexOf(e)===-1&&this.rootNodes.push(e);for(let e of this.cameras)!e.parent&&this.rootNodes.indexOf(e)===-1&&this.rootNodes.push(e)}addAllAssetsToContainer(e){if(!e)return;let t=[],i=new Set;for(t.push(e);t.length>0;){let r=t.pop();if(r instanceof q?(r.geometry&&this.geometries.indexOf(r.geometry)===-1&&this.geometries.push(r.geometry),this.meshes.push(r)):r instanceof jl?this.meshes.push(r):r instanceof Jt?this.transformNodes.push(r):r instanceof Xt?this.lights.push(r):r instanceof ut&&this.cameras.push(r),r instanceof ur){if(r.material&&this.materials.indexOf(r.material)===-1){this.materials.push(r.material);for(let s of r.material.getActiveTextures())this.textures.indexOf(s)===-1&&this.textures.push(s)}r.skeleton&&this.skeletons.indexOf(r.skeleton)===-1&&this.skeletons.push(r.skeleton),r.morphTargetManager&&this.morphTargetManagers.indexOf(r.morphTargetManager)===-1&&this.morphTargetManagers.push(r.morphTargetManager)}for(let s of r.getChildren())i.has(s)||t.push(s);i.add(r)}this.populateRootNodes()}_getByTags(e,t,i){if(t===void 0)return e;let r=[];for(let s in e){let a=e[s];qt&&qt.MatchesQuery(a,t)&&(!i||i(a))&&r.push(a)}return r}getMeshesByTags(e,t){return this._getByTags(this.meshes,e,t)}getCamerasByTags(e,t){return this._getByTags(this.cameras,e,t)}getLightsByTags(e,t){return this._getByTags(this.lights,e,t)}getMaterialsByTags(e,t){return this._getByTags(this.materials,e,t).concat(this._getByTags(this.multiMaterials,e,t))}getTransformNodesByTags(e,t){return this._getByTags(this.transformNodes,e,t)}}});var Jh,F4=C(()=>{u_();Jh=class{constructor(e){this.byteOffset=0,this.buffer=e}async loadAsync(e){let t=await this.buffer.readAsync(this.byteOffset,e);this._dataView=new DataView(t.buffer,t.byteOffset,t.byteLength),this._dataByteOffset=0}readUint32(){let e=this._dataView.getUint32(this._dataByteOffset,!0);return this._dataByteOffset+=4,this.byteOffset+=4,e}readUint8Array(e){let t=new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+this._dataByteOffset,e);return this._dataByteOffset+=e,this.byteOffset+=e,t}readString(e){return O3(this.readUint8Array(e))}skipBytes(e){this._dataByteOffset+=e,this.byteOffset+=e}}});function YP(n,e,t,i){let r={externalResourceFunction:i};return t&&(r.uri=e==="file:"?t:e+t),ArrayBuffer.isView(n)?GLTFValidator.validateBytes(n,r):GLTFValidator.validateString(n,r)}function Yoe(){let n=[];onmessage=e=>{let t=e.data;switch(t.id){case"init":{importScripts(t.url);break}case"validate":{YP(t.data,t.rootUrl,t.fileName,i=>new Promise((r,s)=>{let a=n.length;n.push({resolve:r,reject:s}),postMessage({id:"getExternalResource",index:a,uri:i})})).then(i=>{postMessage({id:"validate.resolve",value:i})},i=>{postMessage({id:"validate.reject",reason:i})});break}case"getExternalResource.resolve":{n[t.index].resolve(t.value);break}case"getExternalResource.reject":{n[t.index].reject(t.reason);break}}}}var Fm,w4=C(()=>{Ci();Fm=class n{static ValidateAsync(e,t,i,r){return typeof Worker=="function"?new Promise((s,a)=>{let o=`${YP}(${Yoe})()`,l=URL.createObjectURL(new Blob([o],{type:"application/javascript"})),c=new Worker(l),f=d=>{c.removeEventListener("error",f),c.removeEventListener("message",h),a(d)},h=d=>{let u=d.data;switch(u.id){case"getExternalResource":{r(u.uri).then(m=>{c.postMessage({id:"getExternalResource.resolve",index:u.index,value:m},[m.buffer])},m=>{c.postMessage({id:"getExternalResource.reject",index:u.index,reason:m})});break}case"validate.resolve":{c.removeEventListener("error",f),c.removeEventListener("message",h),n._LastResults=u.value,s(u.value),c.terminate();break}case"validate.reject":c.removeEventListener("error",f),c.removeEventListener("message",h),a(u.reason),c.terminate()}};if(c.addEventListener("error",f),c.addEventListener("message",h),c.postMessage({id:"init",url:he.GetBabylonScriptURL(this.Configuration.url)}),ArrayBuffer.isView(e)){let d=e.slice();c.postMessage({id:"validate",data:d,rootUrl:t,fileName:i},[d.buffer])}else c.postMessage({id:"validate",data:e,rootUrl:t,fileName:i})}):(this._LoadScriptPromise||(this._LoadScriptPromise=he.LoadBabylonScriptAsync(this.Configuration.url)),this._LoadScriptPromise.then(()=>YP(e,t,i,r)))}};Fm.Configuration={url:`${he._DefaultCdnUrl}/gltf_validator.js`};Fm._LastResults=null});var pc,ug,B4=C(()=>{pc="Z2xURg",ug={name:"gltf",extensions:{".gltf":{isBinary:!1,mimeType:"model/gltf+json"},".glb":{isBinary:!0,mimeType:"model/gltf-binary"}},canDirectLoad(n){return n.indexOf("asset")!==-1&&n.indexOf("version")!==-1||n.startsWith("data:base64,"+pc)||n.startsWith("data:;base64,"+pc)||n.startsWith("data:application/octet-stream;base64,"+pc)||n.startsWith("data:model/gltf-binary;base64,"+pc)}}});function U4(n,e,t){try{return Promise.resolve(new Uint8Array(n,e,t))}catch(i){return Promise.reject(i)}}function Koe(n,e,t){try{if(e<0||e>=n.byteLength)throw new RangeError("Offset is out of range.");if(e+t>n.byteLength)throw new RangeError("Length is out of range.");return Promise.resolve(new Uint8Array(n.buffer,n.byteOffset+e,t))}catch(i){return Promise.reject(i)}}var wm,$h,Yn,Ix,joe,KP,Bf,jP=C(()=>{hi();Ci();Nm();dg();Pt();F4();w4();B4();Fl();d_();(function(n){n[n.AUTO=0]="AUTO",n[n.FORCE_RIGHT_HANDED=1]="FORCE_RIGHT_HANDED"})(wm||(wm={}));(function(n){n[n.NONE=0]="NONE",n[n.FIRST=1]="FIRST",n[n.ALL=2]="ALL"})($h||($h={}));(function(n){n[n.LOADING=0]="LOADING",n[n.READY=1]="READY",n[n.COMPLETE=2]="COMPLETE"})(Yn||(Yn={}));Ix=class{constructor(){this.alwaysComputeBoundingBox=!1,this.alwaysComputeSkeletonRootNode=!1,this.animationStartMode=$h.FIRST,this.compileMaterials=!1,this.compileShadowGenerators=!1,this.coordinateSystemMode=wm.AUTO,this.createInstances=!0,this.loadAllMaterials=!1,this.loadMorphTargets=!0,this.loadNodeAnimations=!0,this.loadOnlyMaterials=!1,this.loadSkins=!0,this.skipMaterials=!1,this.targetFps=60,this.transparencyAsCoverage=!1,this.useClipPlane=!1,this.useGltfTextureNames=!1,this.useRangeRequests=!1,this.useSRGBBuffers=!0,this.validate=!1,this.useOpenPBR=!1,this.dontUseTransmissionHelper=!1}},joe=new Ix,KP=class extends Ix{constructor(){super(...arguments),this.extensionOptions={},this.preprocessUrlAsync=e=>Promise.resolve(e)}copyFrom(e){var t,i,r,s,a,o,l,c,f,h,d,u,m,_,p,g,v,x,A,E,T,R,I,y,M,D;e&&(this.alwaysComputeBoundingBox=(t=e.alwaysComputeBoundingBox)!=null?t:this.alwaysComputeBoundingBox,this.alwaysComputeSkeletonRootNode=(i=e.alwaysComputeSkeletonRootNode)!=null?i:this.alwaysComputeSkeletonRootNode,this.animationStartMode=(r=e.animationStartMode)!=null?r:this.animationStartMode,this.capturePerformanceCounters=(s=e.capturePerformanceCounters)!=null?s:this.capturePerformanceCounters,this.compileMaterials=(a=e.compileMaterials)!=null?a:this.compileMaterials,this.compileShadowGenerators=(o=e.compileShadowGenerators)!=null?o:this.compileShadowGenerators,this.coordinateSystemMode=(l=e.coordinateSystemMode)!=null?l:this.coordinateSystemMode,this.createInstances=(c=e.createInstances)!=null?c:this.createInstances,this.customRootNode=e.customRootNode,this.extensionOptions=(f=e.extensionOptions)!=null?f:this.extensionOptions,this.loadAllMaterials=(h=e.loadAllMaterials)!=null?h:this.loadAllMaterials,this.loadMorphTargets=(d=e.loadMorphTargets)!=null?d:this.loadMorphTargets,this.loadNodeAnimations=(u=e.loadNodeAnimations)!=null?u:this.loadNodeAnimations,this.loadOnlyMaterials=(m=e.loadOnlyMaterials)!=null?m:this.loadOnlyMaterials,this.loadSkins=(_=e.loadSkins)!=null?_:this.loadSkins,this.loggingEnabled=(p=e.loggingEnabled)!=null?p:this.loggingEnabled,this.onCameraLoaded=e.onCameraLoaded,this.onMaterialLoaded=e.onMaterialLoaded,this.onMeshLoaded=e.onMeshLoaded,this.onParsed=e.onParsed,this.onSkinLoaded=e.onSkinLoaded,this.onTextureLoaded=e.onTextureLoaded,this.onValidated=e.onValidated,this.preprocessUrlAsync=(g=e.preprocessUrlAsync)!=null?g:this.preprocessUrlAsync,this.skipMaterials=(v=e.skipMaterials)!=null?v:this.skipMaterials,this.targetFps=(x=e.targetFps)!=null?x:this.targetFps,this.transparencyAsCoverage=(A=e.transparencyAsCoverage)!=null?A:this.transparencyAsCoverage,this.useClipPlane=(E=e.useClipPlane)!=null?E:this.useClipPlane,this.useGltfTextureNames=(T=e.useGltfTextureNames)!=null?T:this.useGltfTextureNames,this.useOpenPBR=(R=e.useOpenPBR)!=null?R:this.useOpenPBR,this.useRangeRequests=(I=e.useRangeRequests)!=null?I:this.useRangeRequests,this.useSRGBBuffers=(y=e.useSRGBBuffers)!=null?y:this.useSRGBBuffers,this.validate=(M=e.validate)!=null?M:this.validate,this.dontUseTransmissionHelper=(D=e.dontUseTransmissionHelper)!=null?D:this.dontUseTransmissionHelper)}},Bf=class n extends KP{constructor(e){super(),this.onParsedObservable=new ee,this.onMeshLoadedObservable=new ee,this.onSkinLoadedObservable=new ee,this.onTextureLoadedObservable=new ee,this.onMaterialLoadedObservable=new ee,this.onCameraLoadedObservable=new ee,this.onCompleteObservable=new ee,this.onErrorObservable=new ee,this.onDisposeObservable=new ee,this.onExtensionLoadedObservable=new ee,this.onValidatedObservable=new ee,this._loader=null,this._state=null,this._requests=new Array,this.name=ug.name,this.extensions=ug.extensions,this.onLoaderStateChangedObservable=new ee,this._logIndentLevel=0,this._loggingEnabled=!1,this._log=this._logDisabled,this._capturePerformanceCounters=!1,this._startPerformanceCounter=this._startPerformanceCounterDisabled,this._endPerformanceCounter=this._endPerformanceCounterDisabled,this.copyFrom(Object.assign({...joe},e))}set onParsed(e){this._onParsedObserver&&this.onParsedObservable.remove(this._onParsedObserver),e&&(this._onParsedObserver=this.onParsedObservable.add(e))}set onMeshLoaded(e){this._onMeshLoadedObserver&&this.onMeshLoadedObservable.remove(this._onMeshLoadedObserver),e&&(this._onMeshLoadedObserver=this.onMeshLoadedObservable.add(e))}set onSkinLoaded(e){this._onSkinLoadedObserver&&this.onSkinLoadedObservable.remove(this._onSkinLoadedObserver),e&&(this._onSkinLoadedObserver=this.onSkinLoadedObservable.add(t=>e(t.node,t.skinnedNode)))}set onTextureLoaded(e){this._onTextureLoadedObserver&&this.onTextureLoadedObservable.remove(this._onTextureLoadedObserver),e&&(this._onTextureLoadedObserver=this.onTextureLoadedObservable.add(e))}set onMaterialLoaded(e){this._onMaterialLoadedObserver&&this.onMaterialLoadedObservable.remove(this._onMaterialLoadedObserver),e&&(this._onMaterialLoadedObserver=this.onMaterialLoadedObservable.add(e))}set onCameraLoaded(e){this._onCameraLoadedObserver&&this.onCameraLoadedObservable.remove(this._onCameraLoadedObserver),e&&(this._onCameraLoadedObserver=this.onCameraLoadedObservable.add(e))}set onComplete(e){this._onCompleteObserver&&this.onCompleteObservable.remove(this._onCompleteObserver),this._onCompleteObserver=this.onCompleteObservable.add(e)}set onError(e){this._onErrorObserver&&this.onErrorObservable.remove(this._onErrorObserver),this._onErrorObserver=this.onErrorObservable.add(e)}set onDispose(e){this._onDisposeObserver&&this.onDisposeObservable.remove(this._onDisposeObserver),this._onDisposeObserver=this.onDisposeObservable.add(e)}set onExtensionLoaded(e){this._onExtensionLoadedObserver&&this.onExtensionLoadedObservable.remove(this._onExtensionLoadedObserver),this._onExtensionLoadedObserver=this.onExtensionLoadedObservable.add(e)}get loggingEnabled(){return this._loggingEnabled}set loggingEnabled(e){this._loggingEnabled!==e&&(this._loggingEnabled=e,this._loggingEnabled?this._log=this._logEnabled:this._log=this._logDisabled)}get capturePerformanceCounters(){return this._capturePerformanceCounters}set capturePerformanceCounters(e){this._capturePerformanceCounters!==e&&(this._capturePerformanceCounters=e,this._capturePerformanceCounters?(this._startPerformanceCounter=this._startPerformanceCounterEnabled,this._endPerformanceCounter=this._endPerformanceCounterEnabled):(this._startPerformanceCounter=this._startPerformanceCounterDisabled,this._endPerformanceCounter=this._endPerformanceCounterDisabled))}set onValidated(e){this._onValidatedObserver&&this.onValidatedObservable.remove(this._onValidatedObserver),this._onValidatedObserver=this.onValidatedObservable.add(e)}dispose(){this._loader&&(this._loader.dispose(),this._loader=null);for(let e of this._requests)e.abort();this._requests.length=0,delete this._progressCallback,this.preprocessUrlAsync=e=>Promise.resolve(e),this.onMeshLoadedObservable.clear(),this.onSkinLoadedObservable.clear(),this.onTextureLoadedObservable.clear(),this.onMaterialLoadedObservable.clear(),this.onCameraLoadedObservable.clear(),this.onCompleteObservable.clear(),this.onExtensionLoadedObservable.clear(),this.onDisposeObservable.notifyObservers(void 0),this.onDisposeObservable.clear()}loadFile(e,t,i,r,s,a,o,l){if(ArrayBuffer.isView(t))return this._loadBinary(e,t,i,r,o,l),null;this._progressCallback=s;let c=t.name||he.GetFilename(t);if(a){if(this.useRangeRequests){this.validate&&$.Warn("glTF validation is not supported when range requests are enabled");let f={abort:()=>{},onCompleteObservable:new ee},h={readAsync:(d,u)=>new Promise((m,_)=>{this._loadFile(e,t,p=>{m(new Uint8Array(p))},!0,p=>{_(p)},p=>{p.setRequestHeader("Range",`bytes=${d}-${d+u-1}`)})}),byteLength:0};return this._unpackBinaryAsync(new Jh(h)).then(d=>{f.onCompleteObservable.notifyObservers(f),r(d)},o?d=>o(void 0,d):void 0),f}return this._loadFile(e,t,f=>{this._validate(e,new Uint8Array(f,0,f.byteLength),i,c),this._unpackBinaryAsync(new Jh({readAsync:(h,d)=>U4(f,h,d),byteLength:f.byteLength})).then(h=>{r(h)},o?h=>o(void 0,h):void 0)},!0,o)}else return this._loadFile(e,t,f=>{try{this._validate(e,f,i,c),r({json:this._parseJson(f)})}catch(h){o&&o()}},!1,o)}_loadBinary(e,t,i,r,s,a){this._validate(e,new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i,a),this._unpackBinaryAsync(new Jh({readAsync:(o,l)=>Koe(t,o,l),byteLength:t.byteLength})).then(o=>{r(o)},s?o=>s(void 0,o):void 0)}importMeshAsync(e,t,i,r,s,a){return Promise.resolve().then(()=>(this.onParsedObservable.notifyObservers(i),this.onParsedObservable.clear(),this._log(`Loading ${a||""}`),this._loader=this._getLoader(i),this._loader.importMeshAsync(e,t,null,i,r,s,a)))}loadAsync(e,t,i,r,s){return Promise.resolve().then(()=>(this.onParsedObservable.notifyObservers(t),this.onParsedObservable.clear(),this._log(`Loading ${s||""}`),this._loader=this._getLoader(t),this._loader.loadAsync(e,t,i,r,s)))}loadAssetContainerAsync(e,t,i,r,s){return Promise.resolve().then(()=>{this.onParsedObservable.notifyObservers(t),this.onParsedObservable.clear(),this._log(`Loading ${s||""}`),this._loader=this._getLoader(t);let a=new al(e),o=[];this.onMaterialLoadedObservable.add(h=>{o.push(h)});let l=[];this.onTextureLoadedObservable.add(h=>{l.push(h)});let c=[];this.onCameraLoadedObservable.add(h=>{c.push(h)});let f=[];return this.onMeshLoadedObservable.add(h=>{h.morphTargetManager&&f.push(h.morphTargetManager)}),this._loader.importMeshAsync(null,e,a,t,i,r,s).then(h=>(Array.prototype.push.apply(a.geometries,h.geometries),Array.prototype.push.apply(a.meshes,h.meshes),Array.prototype.push.apply(a.particleSystems,h.particleSystems),Array.prototype.push.apply(a.skeletons,h.skeletons),Array.prototype.push.apply(a.animationGroups,h.animationGroups),Array.prototype.push.apply(a.materials,o),Array.prototype.push.apply(a.textures,l),Array.prototype.push.apply(a.lights,h.lights),Array.prototype.push.apply(a.transformNodes,h.transformNodes),Array.prototype.push.apply(a.cameras,c),Array.prototype.push.apply(a.morphTargetManagers,f),a))})}canDirectLoad(e){return ug.canDirectLoad(e)}directLoad(e,t){if(t.startsWith("base64,"+pc)||t.startsWith(";base64,"+pc)||t.startsWith("application/octet-stream;base64,"+pc)||t.startsWith("model/gltf-binary;base64,"+pc)){let i=ef(t);return this._validate(e,new Uint8Array(i,0,i.byteLength)),this._unpackBinaryAsync(new Jh({readAsync:(r,s)=>U4(i,r,s),byteLength:i.byteLength}))}return this._validate(e,t),Promise.resolve({json:this._parseJson(t)})}createPlugin(e){return new n(e[ug.name])}get loaderState(){return this._state}whenCompleteAsync(){return new Promise((e,t)=>{this.onCompleteObservable.addOnce(()=>{e()}),this.onErrorObservable.addOnce(i=>{t(i)})})}_setState(e){this._state!==e&&(this._state=e,this.onLoaderStateChangedObservable.notifyObservers(this._state),this._log(Yn[this._state]))}_loadFile(e,t,i,r,s,a){let o=e._loadFile(t,i,l=>{this._onProgress(l,o)},!0,r,s,a);return o.onCompleteObservable.add(()=>{o._lengthComputable=!0,o._total=o._loaded}),this._requests.push(o),o}_onProgress(e,t){if(!this._progressCallback)return;t._lengthComputable=e.lengthComputable,t._loaded=e.loaded,t._total=e.total;let i=!0,r=0,s=0;for(let a of this._requests){if(a._lengthComputable===void 0||a._loaded===void 0||a._total===void 0)return;i=i&&a._lengthComputable,r+=a._loaded,s+=a._total}this._progressCallback({lengthComputable:i,loaded:r,total:i?s:0})}_validate(e,t,i="",r=""){this.validate&&(this._startPerformanceCounter("Validate JSON"),Fm.ValidateAsync(t,i,r,s=>this.preprocessUrlAsync(i+s).then(a=>e._loadFileAsync(a,void 0,!0,!0).then(o=>new Uint8Array(o,0,o.byteLength)))).then(s=>{this._endPerformanceCounter("Validate JSON"),this.onValidatedObservable.notifyObservers(s),this.onValidatedObservable.clear()},s=>{this._endPerformanceCounter("Validate JSON"),he.Warn(`Failed to validate: ${s.message}`),this.onValidatedObservable.clear()}))}_getLoader(e){let t=e.json.asset||{};this._log(`Asset version: ${t.version}`),t.minVersion&&this._log(`Asset minimum version: ${t.minVersion}`),t.generator&&this._log(`Asset generator: ${t.generator}`);let i=n._parseVersion(t.version);if(!i)throw new Error("Invalid version: "+t.version);if(t.minVersion!==void 0){let a=n._parseVersion(t.minVersion);if(!a)throw new Error("Invalid minimum version: "+t.minVersion);if(n._compareVersion(a,{major:2,minor:0})>0)throw new Error("Incompatible minimum version: "+t.minVersion)}let s={1:n._CreateGLTF1Loader,2:n._CreateGLTF2Loader}[i.major];if(!s)throw new Error("Unsupported version: "+t.version);return s(this)}_parseJson(e){this._startPerformanceCounter("Parse JSON"),this._log(`JSON length: ${e.length}`);let t=JSON.parse(e);return this._endPerformanceCounter("Parse JSON"),t}_unpackBinaryAsync(e){return this._startPerformanceCounter("Unpack Binary"),e.loadAsync(20).then(()=>{let t={Magic:1179937895},i=e.readUint32();if(i!==t.Magic)throw new ms("Unexpected magic: "+i,da.GLTFLoaderUnexpectedMagicError);let r=e.readUint32();this.loggingEnabled&&this._log(`Binary version: ${r}`);let s=e.readUint32();!this.useRangeRequests&&s!==e.buffer.byteLength&&$.Warn(`Length in header does not match actual data length: ${s} != ${e.buffer.byteLength}`);let a;switch(r){case 1:{a=this._unpackBinaryV1Async(e,s);break}case 2:{a=this._unpackBinaryV2Async(e,s);break}default:throw new Error("Unsupported version: "+r)}return this._endPerformanceCounter("Unpack Binary"),a})}_unpackBinaryV1Async(e,t){let i={JSON:0},r=e.readUint32(),s=e.readUint32();if(s!==i.JSON)throw new Error(`Unexpected content format: ${s}`);let a=t-e.byteOffset,o={json:this._parseJson(e.readString(r)),bin:null};if(a!==0){let l=e.byteOffset;o.bin={readAsync:(c,f)=>e.buffer.readAsync(l+c,f),byteLength:a}}return Promise.resolve(o)}_unpackBinaryV2Async(e,t){let i={JSON:1313821514,BIN:5130562},r=e.readUint32();if(e.readUint32()!==i.JSON)throw new Error("First chunk format is not JSON");return e.byteOffset+r===t?e.loadAsync(r).then(()=>({json:this._parseJson(e.readString(r)),bin:null})):e.loadAsync(r+8).then(()=>{let a={json:this._parseJson(e.readString(r)),bin:null},o=()=>{let l=e.readUint32();switch(e.readUint32()){case i.JSON:throw new Error("Unexpected JSON chunk");case i.BIN:{let f=e.byteOffset;a.bin={readAsync:(h,d)=>e.buffer.readAsync(f+h,d),byteLength:l},e.skipBytes(l);break}default:{e.skipBytes(l);break}}return e.byteOffset!==t?e.loadAsync(8).then(o):Promise.resolve(a)};return o()})}static _parseVersion(e){if(e==="1.0"||e==="1.0.1")return{major:1,minor:0};let t=(e+"").match(/^(\d+)\.(\d+)/);return t?{major:parseInt(t[1]),minor:parseInt(t[2])}:null}static _compareVersion(e,t){return e.major>t.major?1:e.majort.minor?1:e.minor{Mx=class{get resolve(){return this._resolve}get reject(){return this._reject}constructor(){this.promise=new Promise((e,t)=>{this._resolve=e,this._reject=t})}}});var Fn,G4=C(()=>{kt();Ut();rl();IT();Ve();Ci();Fn=class{constructor(){this.keysUp=[38],this.keysUpward=[33],this.keysDown=[40],this.keysDownward=[34],this.keysLeft=[37],this.keysRight=[39],this.rotationSpeed=.5,this.keysRotateLeft=[],this.keysRotateRight=[],this.keysRotateUp=[],this.keysRotateDown=[],this._keys=new Array}attachControl(e){e=he.BackCompatCameraNoPreventDefault(arguments),!this._onCanvasBlurObserver&&(this._scene=this.camera.getScene(),this._engine=this._scene.getEngine(),this._onCanvasBlurObserver=this._engine.onCanvasBlurObservable.add(()=>{this._keys.length=0}),this._onKeyboardObserver=this._scene.onKeyboardObservable.add(t=>{let i=t.event;if(!i.metaKey){if(t.type===io.KEYDOWN)(this.keysUp.indexOf(i.keyCode)!==-1||this.keysDown.indexOf(i.keyCode)!==-1||this.keysLeft.indexOf(i.keyCode)!==-1||this.keysRight.indexOf(i.keyCode)!==-1||this.keysUpward.indexOf(i.keyCode)!==-1||this.keysDownward.indexOf(i.keyCode)!==-1||this.keysRotateLeft.indexOf(i.keyCode)!==-1||this.keysRotateRight.indexOf(i.keyCode)!==-1||this.keysRotateUp.indexOf(i.keyCode)!==-1||this.keysRotateDown.indexOf(i.keyCode)!==-1)&&(this._keys.indexOf(i.keyCode)===-1&&this._keys.push(i.keyCode),e||i.preventDefault());else if(this.keysUp.indexOf(i.keyCode)!==-1||this.keysDown.indexOf(i.keyCode)!==-1||this.keysLeft.indexOf(i.keyCode)!==-1||this.keysRight.indexOf(i.keyCode)!==-1||this.keysUpward.indexOf(i.keyCode)!==-1||this.keysDownward.indexOf(i.keyCode)!==-1||this.keysRotateLeft.indexOf(i.keyCode)!==-1||this.keysRotateRight.indexOf(i.keyCode)!==-1||this.keysRotateUp.indexOf(i.keyCode)!==-1||this.keysRotateDown.indexOf(i.keyCode)!==-1){let r=this._keys.indexOf(i.keyCode);r>=0&&this._keys.splice(r,1),e||i.preventDefault()}}}))}detachControl(){this._scene&&(this._onKeyboardObserver&&this._scene.onKeyboardObservable.remove(this._onKeyboardObserver),this._onCanvasBlurObserver&&this._engine.onCanvasBlurObservable.remove(this._onCanvasBlurObserver),this._onKeyboardObserver=null,this._onCanvasBlurObserver=null),this._keys.length=0}checkInputs(){if(this._onKeyboardObserver){let e=this.camera;for(let t=0;t{kt();hi();Ut();rl();to();Ci();ed=class{constructor(e=!0){this.touchEnabled=e,this.buttons=[0,1,2],this.angularSensibility=2e3,this._previousPosition=null,this.onPointerMovedObservable=new ee,this._allowCameraRotation=!0,this._currentActiveButton=-1,this._activePointerId=-1}attachControl(e){e=he.BackCompatCameraNoPreventDefault(arguments);let t=this.camera.getEngine(),i=t.getInputElement();this._pointerInput||(this._pointerInput=r=>{let s=r.event,a=s.pointerType==="touch";if(!this.touchEnabled&&a||r.type!==it.POINTERMOVE&&this.buttons.indexOf(s.button)===-1)return;let o=s.target;if(r.type===it.POINTERDOWN){if(a&&this._activePointerId!==-1||!a&&this._currentActiveButton!==-1)return;this._activePointerId=s.pointerId;try{o==null||o.setPointerCapture(s.pointerId)}catch(l){}this._currentActiveButton===-1&&(this._currentActiveButton=s.button),this._previousPosition={x:s.clientX,y:s.clientY},e||(s.preventDefault(),i&&i.focus()),t.isPointerLock&&this._onMouseMove&&this._onMouseMove(r.event)}else if(r.type===it.POINTERUP){if(a&&this._activePointerId!==s.pointerId||!a&&this._currentActiveButton!==s.button)return;try{o==null||o.releasePointerCapture(s.pointerId)}catch(l){}this._currentActiveButton=-1,this._previousPosition=null,e||s.preventDefault(),this._activePointerId=-1}else if(r.type===it.POINTERMOVE&&(this._activePointerId===s.pointerId||!a)){if(t.isPointerLock&&this._onMouseMove)this._onMouseMove(r.event);else if(this._previousPosition){let l=this.camera._calculateHandednessMultiplier(),c=(s.clientX-this._previousPosition.x)*l,f=(s.clientY-this._previousPosition.y)*l;this._allowCameraRotation&&(this.camera.cameraRotation.y+=c/this.angularSensibility,this.camera.cameraRotation.x+=f/this.angularSensibility),this.onPointerMovedObservable.notifyObservers({offsetX:c,offsetY:f}),this._previousPosition={x:s.clientX,y:s.clientY},e||s.preventDefault()}}}),this._onMouseMove=r=>{if(!t.isPointerLock)return;let s=this.camera._calculateHandednessMultiplier();this.camera.cameraRotation.y+=r.movementX*s/this.angularSensibility,this.camera.cameraRotation.x+=r.movementY*s/this.angularSensibility,this._previousPosition=null,e||r.preventDefault()},this._observer=this.camera.getScene()._inputManager._addCameraPointerObserver(this._pointerInput,it.POINTERDOWN|it.POINTERUP|it.POINTERMOVE),i&&(this._contextMenuBind=r=>this.onContextMenu(r),i.addEventListener("contextmenu",this._contextMenuBind,!1))}onContextMenu(e){e.preventDefault()}detachControl(){if(this._observer){if(this.camera.getScene()._inputManager._removeCameraPointerObserver(this._observer),this._contextMenuBind){let t=this.camera.getEngine().getInputElement();t&&t.removeEventListener("contextmenu",this._contextMenuBind)}this.onPointerMovedObservable&&this.onPointerMovedObservable.clear(),this._observer=null,this._onMouseMove=null,this._previousPosition=null}this._activePointerId=-1,this._currentActiveButton=-1}getClassName(){return"FreeCameraMouseInput"}getSimpleName(){return"mouse"}};P([F()],ed.prototype,"buttons",void 0);P([F()],ed.prototype,"angularSensibility",void 0);Dn.FreeCameraMouseInput=ed});var td,W4=C(()=>{kt();Ut();hi();to();MT();Ci();td=class{constructor(){this.wheelPrecisionX=3,this.wheelPrecisionY=3,this.wheelPrecisionZ=3,this.onChangedObservable=new ee,this._wheelDeltaX=0,this._wheelDeltaY=0,this._wheelDeltaZ=0,this._ffMultiplier=12,this._normalize=120}attachControl(e){e=he.BackCompatCameraNoPreventDefault(arguments),this._wheel=t=>{if(t.type!==it.POINTERWHEEL)return;let i=t.event,r=i.deltaMode===ro.DOM_DELTA_LINE?this._ffMultiplier:1;this._wheelDeltaX+=this.wheelPrecisionX*r*i.deltaX/this._normalize,this._wheelDeltaY-=this.wheelPrecisionY*r*i.deltaY/this._normalize,this._wheelDeltaZ+=this.wheelPrecisionZ*r*i.deltaZ/this._normalize,i.preventDefault&&(e||i.preventDefault())},this._observer=this.camera.getScene()._inputManager._addCameraPointerObserver(this._wheel,it.POINTERWHEEL)}detachControl(){this._observer&&(this.camera.getScene()._inputManager._removeCameraPointerObserver(this._observer),this._observer=null,this._wheel=null),this.onChangedObservable&&this.onChangedObservable.clear()}checkInputs(){this.onChangedObservable.notifyObservers({wheelDeltaX:this._wheelDeltaX,wheelDeltaY:this._wheelDeltaY,wheelDeltaZ:this._wheelDeltaZ}),this._wheelDeltaX=0,this._wheelDeltaY=0,this._wheelDeltaZ=0}getClassName(){return"BaseCameraMouseWheelInput"}getSimpleName(){return"mousewheel"}};P([F()],td.prototype,"wheelPrecisionX",void 0);P([F()],td.prototype,"wheelPrecisionY",void 0);P([F()],td.prototype,"wheelPrecisionZ",void 0)});var Li,As,H4=C(()=>{kt();Ut();rl();W4();Ve();(function(n){n[n.MoveRelative=0]="MoveRelative",n[n.RotateRelative=1]="RotateRelative",n[n.MoveScene=2]="MoveScene"})(Li||(Li={}));As=class extends td{constructor(){super(...arguments),this._moveRelative=b.Zero(),this._rotateRelative=b.Zero(),this._moveScene=b.Zero(),this._wheelXAction=Li.MoveRelative,this._wheelXActionCoordinate=0,this._wheelYAction=Li.MoveRelative,this._wheelYActionCoordinate=2,this._wheelZAction=null,this._wheelZActionCoordinate=null}getClassName(){return"FreeCameraMouseWheelInput"}set wheelXMoveRelative(e){e===null&&this._wheelXAction!==Li.MoveRelative||(this._wheelXAction=Li.MoveRelative,this._wheelXActionCoordinate=e)}get wheelXMoveRelative(){return this._wheelXAction!==Li.MoveRelative?null:this._wheelXActionCoordinate}set wheelYMoveRelative(e){e===null&&this._wheelYAction!==Li.MoveRelative||(this._wheelYAction=Li.MoveRelative,this._wheelYActionCoordinate=e)}get wheelYMoveRelative(){return this._wheelYAction!==Li.MoveRelative?null:this._wheelYActionCoordinate}set wheelZMoveRelative(e){e===null&&this._wheelZAction!==Li.MoveRelative||(this._wheelZAction=Li.MoveRelative,this._wheelZActionCoordinate=e)}get wheelZMoveRelative(){return this._wheelZAction!==Li.MoveRelative?null:this._wheelZActionCoordinate}set wheelXRotateRelative(e){e===null&&this._wheelXAction!==Li.RotateRelative||(this._wheelXAction=Li.RotateRelative,this._wheelXActionCoordinate=e)}get wheelXRotateRelative(){return this._wheelXAction!==Li.RotateRelative?null:this._wheelXActionCoordinate}set wheelYRotateRelative(e){e===null&&this._wheelYAction!==Li.RotateRelative||(this._wheelYAction=Li.RotateRelative,this._wheelYActionCoordinate=e)}get wheelYRotateRelative(){return this._wheelYAction!==Li.RotateRelative?null:this._wheelYActionCoordinate}set wheelZRotateRelative(e){e===null&&this._wheelZAction!==Li.RotateRelative||(this._wheelZAction=Li.RotateRelative,this._wheelZActionCoordinate=e)}get wheelZRotateRelative(){return this._wheelZAction!==Li.RotateRelative?null:this._wheelZActionCoordinate}set wheelXMoveScene(e){e===null&&this._wheelXAction!==Li.MoveScene||(this._wheelXAction=Li.MoveScene,this._wheelXActionCoordinate=e)}get wheelXMoveScene(){return this._wheelXAction!==Li.MoveScene?null:this._wheelXActionCoordinate}set wheelYMoveScene(e){e===null&&this._wheelYAction!==Li.MoveScene||(this._wheelYAction=Li.MoveScene,this._wheelYActionCoordinate=e)}get wheelYMoveScene(){return this._wheelYAction!==Li.MoveScene?null:this._wheelYActionCoordinate}set wheelZMoveScene(e){e===null&&this._wheelZAction!==Li.MoveScene||(this._wheelZAction=Li.MoveScene,this._wheelZActionCoordinate=e)}get wheelZMoveScene(){return this._wheelZAction!==Li.MoveScene?null:this._wheelZActionCoordinate}checkInputs(){if(this._wheelDeltaX===0&&this._wheelDeltaY===0&&this._wheelDeltaZ==0)return;this._moveRelative.setAll(0),this._rotateRelative.setAll(0),this._moveScene.setAll(0),this._updateCamera(),this.camera.getScene().useRightHandedSystem&&(this._moveRelative.z*=-1);let e=K.Zero();this.camera.getViewMatrix().invertToRef(e);let t=b.Zero();b.TransformNormalToRef(this._moveRelative,e,t),this.camera.cameraRotation.x+=this._rotateRelative.x/200,this.camera.cameraRotation.y+=this._rotateRelative.y/200,this.camera.cameraDirection.addInPlace(t),this.camera.cameraDirection.addInPlace(this._moveScene),super.checkInputs()}_updateCamera(){this._updateCameraProperty(this._wheelDeltaX,this._wheelXAction,this._wheelXActionCoordinate),this._updateCameraProperty(this._wheelDeltaY,this._wheelYAction,this._wheelYActionCoordinate),this._updateCameraProperty(this._wheelDeltaZ,this._wheelZAction,this._wheelZActionCoordinate)}_updateCameraProperty(e,t,i){if(e===0||t===null||i===null)return;let r=null;switch(t){case Li.MoveRelative:r=this._moveRelative;break;case Li.RotateRelative:r=this._rotateRelative;break;case Li.MoveScene:r=this._moveScene;break}switch(i){case 0:r.set(e,0,0);break;case 1:r.set(0,e,0);break;case 2:r.set(0,0,e);break}}};P([F()],As.prototype,"wheelXMoveRelative",null);P([F()],As.prototype,"wheelYMoveRelative",null);P([F()],As.prototype,"wheelZMoveRelative",null);P([F()],As.prototype,"wheelXRotateRelative",null);P([F()],As.prototype,"wheelYRotateRelative",null);P([F()],As.prototype,"wheelZRotateRelative",null);P([F()],As.prototype,"wheelXMoveScene",null);P([F()],As.prototype,"wheelYMoveScene",null);P([F()],As.prototype,"wheelZMoveScene",null);Dn.FreeCameraMouseWheelInput=As});var id,z4=C(()=>{kt();Ut();rl();to();Ve();Ci();id=class{constructor(e=!1){this.allowMouse=e,this.touchAngularSensibility=2e5,this.touchMoveSensibility=250,this.singleFingerRotate=!1,this._offsetX=null,this._offsetY=null,this._pointerPressed=new Array,this._isSafari=he.IsSafari()}attachControl(e){e=he.BackCompatCameraNoPreventDefault(arguments);let t=null;if(this._pointerInput===void 0&&(this._onLostFocus=()=>{this._offsetX=null,this._offsetY=null},this._pointerInput=i=>{let r=i.event,s=r.pointerType==="mouse"||this._isSafari&&typeof r.pointerType=="undefined";if(!(!this.allowMouse&&s)){if(i.type===it.POINTERDOWN){if(e||r.preventDefault(),this._pointerPressed.push(r.pointerId),this._pointerPressed.length!==1)return;t={x:r.clientX,y:r.clientY}}else if(i.type===it.POINTERUP){e||r.preventDefault();let a=this._pointerPressed.indexOf(r.pointerId);if(a===-1||(this._pointerPressed.splice(a,1),a!=0))return;t=null,this._offsetX=null,this._offsetY=null}else if(i.type===it.POINTERMOVE){if(e||r.preventDefault(),!t||this._pointerPressed.indexOf(r.pointerId)!=0)return;this._offsetX=r.clientX-t.x,this._offsetY=-(r.clientY-t.y)}}}),this._observer=this.camera.getScene()._inputManager._addCameraPointerObserver(this._pointerInput,it.POINTERDOWN|it.POINTERUP|it.POINTERMOVE),this._onLostFocus){let r=this.camera.getEngine().getInputElement();r&&r.addEventListener("blur",this._onLostFocus)}}detachControl(){if(this._pointerInput){if(this._observer&&(this.camera.getScene()._inputManager._removeCameraPointerObserver(this._observer),this._observer=null),this._onLostFocus){let t=this.camera.getEngine().getInputElement();t&&t.removeEventListener("blur",this._onLostFocus),this._onLostFocus=null}this._pointerPressed.length=0,this._offsetX=null,this._offsetY=null}}checkInputs(){if(this._offsetX===null||this._offsetY===null||this._offsetX===0&&this._offsetY===0)return;let e=this.camera,t=e._calculateHandednessMultiplier();if(e.cameraRotation.y=this._offsetX*t/this.touchAngularSensibility,this.singleFingerRotate&&this._pointerPressed.length===1||!this.singleFingerRotate&&this._pointerPressed.length>1)e.cameraRotation.x=-(this._offsetY*t)/this.touchAngularSensibility;else{let r=e._computeLocalCameraSpeed(),s=Z.Vector3[0];s.copyFromFloats(0,0,this.touchMoveSensibility!==0?r*this._offsetY/this.touchMoveSensibility:0),K.RotationYawPitchRollToRef(e.rotation.y,e.rotation.x,0,e._cameraRotationMatrix),b.TransformCoordinatesToRef(s,e._cameraRotationMatrix,s),e.cameraDirection.addInPlace(s)}}getClassName(){return"FreeCameraTouchInput"}getSimpleName(){return"touch"}};P([F()],id.prototype,"touchAngularSensibility",void 0);P([F()],id.prototype,"touchMoveSensibility",void 0);Dn.FreeCameraTouchInput=id});var Cx,X4=C(()=>{rl();G4();k4();H4();z4();Cx=class extends Sm{constructor(e){super(e),this._mouseInput=null,this._mouseWheelInput=null}addKeyboard(){return this.add(new Fn),this}addMouse(e=!0){return this._mouseInput||(this._mouseInput=new ed(e),this.add(this._mouseInput)),this}removeMouse(){return this._mouseInput&&this.remove(this._mouseInput),this}addMouseWheel(){return this._mouseWheelInput||(this._mouseWheelInput=new As,this.add(this._mouseWheelInput)),this}removeMouseWheel(){return this._mouseWheelInput&&this.remove(this._mouseWheelInput),this}addTouch(){return this.add(new id),this}clear(){super.clear(),this._mouseInput=null}}});var _c,Y4=C(()=>{kt();Ut();Ve();KC();X4();Ci();Vi();Lr();_c=class extends vs{get angularSensibility(){let e=this.inputs.attached.mouse;return e?e.angularSensibility:0}set angularSensibility(e){let t=this.inputs.attached.mouse;t&&(t.angularSensibility=e)}get keysUp(){let e=this.inputs.attached.keyboard;return e?e.keysUp:[]}set keysUp(e){let t=this.inputs.attached.keyboard;t&&(t.keysUp=e)}get keysUpward(){let e=this.inputs.attached.keyboard;return e?e.keysUpward:[]}set keysUpward(e){let t=this.inputs.attached.keyboard;t&&(t.keysUpward=e)}get keysDown(){let e=this.inputs.attached.keyboard;return e?e.keysDown:[]}set keysDown(e){let t=this.inputs.attached.keyboard;t&&(t.keysDown=e)}get keysDownward(){let e=this.inputs.attached.keyboard;return e?e.keysDownward:[]}set keysDownward(e){let t=this.inputs.attached.keyboard;t&&(t.keysDownward=e)}get keysLeft(){let e=this.inputs.attached.keyboard;return e?e.keysLeft:[]}set keysLeft(e){let t=this.inputs.attached.keyboard;t&&(t.keysLeft=e)}get keysRight(){let e=this.inputs.attached.keyboard;return e?e.keysRight:[]}set keysRight(e){let t=this.inputs.attached.keyboard;t&&(t.keysRight=e)}get keysRotateLeft(){let e=this.inputs.attached.keyboard;return e?e.keysRotateLeft:[]}set keysRotateLeft(e){let t=this.inputs.attached.keyboard;t&&(t.keysRotateLeft=e)}get keysRotateRight(){let e=this.inputs.attached.keyboard;return e?e.keysRotateRight:[]}set keysRotateRight(e){let t=this.inputs.attached.keyboard;t&&(t.keysRotateRight=e)}get keysRotateUp(){let e=this.inputs.attached.keyboard;return e?e.keysRotateUp:[]}set keysRotateUp(e){let t=this.inputs.attached.keyboard;t&&(t.keysRotateUp=e)}get keysRotateDown(){let e=this.inputs.attached.keyboard;return e?e.keysRotateDown:[]}set keysRotateDown(e){let t=this.inputs.attached.keyboard;t&&(t.keysRotateDown=e)}constructor(e,t,i,r=!0){super(e,t,i,r),this.ellipsoid=new b(.5,1,.5),this.ellipsoidOffset=new b(0,0,0),this.checkCollisions=!1,this.applyGravity=!1,this._needMoveForGravity=!1,this._oldPosition=b.Zero(),this._diffPosition=b.Zero(),this._newPosition=b.Zero(),this._collisionMask=-1,this._onCollisionPositionChange=(s,a,o=null)=>{this._newPosition.copyFrom(a),this._newPosition.subtractToRef(this._oldPosition,this._diffPosition),this._diffPosition.length()>Re.CollisionsEpsilon&&(this.position.addToRef(this._diffPosition,this._deferredPositionUpdate),this._deferOnly?this._deferredUpdated=!0:this.position.copyFrom(this._deferredPositionUpdate),this.onCollide&&o&&this.onCollide(o))},this.inputs=new Cx(this),this.inputs.addKeyboard().addMouse()}attachControl(e,t){t=he.BackCompatCameraNoPreventDefault(arguments),this.inputs.attachElement(t)}detachControl(){this.inputs.detachElement(),this.cameraDirection=new b(0,0,0),this.cameraRotation=new Ne(0,0)}get collisionMask(){return this._collisionMask}set collisionMask(e){this._collisionMask=isNaN(e)?-1:e}_collideWithWorld(e){let t;this.parent?t=b.TransformCoordinates(this.position,this.parent.getWorldMatrix()):t=this.position,t.subtractFromFloatsToRef(0,this.ellipsoid.y,0,this._oldPosition),this._oldPosition.addInPlace(this.ellipsoidOffset);let i=this.getScene().collisionCoordinator;this._collider||(this._collider=i.createCollider()),this._collider._radius=this.ellipsoid,this._collider.collisionMask=this._collisionMask;let r=e;this.applyGravity&&(r=e.add(this.getScene().gravity)),i.getNewPosition(this._oldPosition,r,this._collider,3,null,this._onCollisionPositionChange,this.uniqueId)}_checkInputs(){this._localDirection||(this._localDirection=b.Zero(),this._transformedDirection=b.Zero()),this.inputs.checkInputs(),super._checkInputs()}set needMoveForGravity(e){this._needMoveForGravity=e}get needMoveForGravity(){return this._needMoveForGravity}_decideIfNeedsToMove(){return this._needMoveForGravity||Math.abs(this.cameraDirection.x)>0||Math.abs(this.cameraDirection.y)>0||Math.abs(this.cameraDirection.z)>0}_updatePosition(){this.checkCollisions&&this.getScene().collisionsEnabled?this._collideWithWorld(this.cameraDirection):super._updatePosition()}dispose(){this.inputs.clear(),super.dispose()}getClassName(){return"FreeCamera"}};P([Vr()],_c.prototype,"ellipsoid",void 0);P([Vr()],_c.prototype,"ellipsoidOffset",void 0);P([F()],_c.prototype,"checkCollisions",void 0);P([F()],_c.prototype,"applyGravity",void 0);wt("BABYLON.FreeCamera",_c)});var Ca,yx=C(()=>{Ve();Ho();Hs();Ca=class n extends _i{get _matrix(){return this._compose(),this._localMatrix}set _matrix(e){e.updateFlag===this._localMatrix.updateFlag&&!this._needToCompose||(this._needToCompose=!1,this._localMatrix.copyFrom(e),this._markAsDirtyAndDecompose())}constructor(e,t,i=null,r=null,s=null,a=null,o=null){var l;super(e,t.getScene(),!1),this.name=e,this.children=[],this.animations=[],this._index=null,this._scalingDeterminant=1,this._needToDecompose=!0,this._needToCompose=!1,this._linkedTransformNode=null,this._waitingTransformNodeId=null,this._waitingTransformNodeUniqueId=null,this._skeleton=t,this._localMatrix=(l=r==null?void 0:r.clone())!=null?l:K.Identity(),this._restMatrix=s!=null?s:this._localMatrix.clone(),this._bindMatrix=a!=null?a:this._localMatrix.clone(),this._index=o,this._absoluteMatrix=new K,this._absoluteBindMatrix=new K,this._absoluteInverseBindMatrix=new K,this._finalMatrix=new K,t.bones.push(this),this.setParent(i,!1),this._updateAbsoluteBindMatrices()}getClassName(){return"Bone"}getSkeleton(){return this._skeleton}get parent(){return this._parentNode}getParent(){return this.parent}getChildren(){return this.children}getIndex(){return this._index===null?this.getSkeleton().bones.indexOf(this):this._index}set parent(e){this.setParent(e)}setParent(e,t=!0){if(this.parent!==e){if(this.parent){let i=this.parent.children.indexOf(this);i!==-1&&this.parent.children.splice(i,1)}this._parentNode=e,this.parent&&this.parent.children.push(this),t&&this._updateAbsoluteBindMatrices(),this.markAsDirty()}}getLocalMatrix(){return this._compose(),this._localMatrix}getBindMatrix(){return this._bindMatrix}getBaseMatrix(){return this.getBindMatrix()}getRestMatrix(){return this._restMatrix}getRestPose(){return this.getRestMatrix()}setRestMatrix(e){this._restMatrix.copyFrom(e)}setRestPose(e){this.setRestMatrix(e)}getBindPose(){return this.getBindMatrix()}setBindMatrix(e){this.updateMatrix(e)}setBindPose(e){this.setBindMatrix(e)}getFinalMatrix(){return this._finalMatrix}getWorldMatrix(){return this.getFinalMatrix()}returnToRest(){var e;if(this._linkedTransformNode){let t=Z.Vector3[0],i=Z.Quaternion[0],r=Z.Vector3[1];this.getRestMatrix().decompose(t,i,r),this._linkedTransformNode.position.copyFrom(r),this._linkedTransformNode.rotationQuaternion=(e=this._linkedTransformNode.rotationQuaternion)!=null?e:ze.Identity(),this._linkedTransformNode.rotationQuaternion.copyFrom(i),this._linkedTransformNode.scaling.copyFrom(t)}else this._matrix=this._restMatrix}getAbsoluteInverseBindMatrix(){return this._absoluteInverseBindMatrix}getInvertedAbsoluteTransform(){return this.getAbsoluteInverseBindMatrix()}getAbsoluteMatrix(){return this._skeleton.computeAbsoluteMatrices(),this._absoluteMatrix}getAbsoluteTransform(){return this.getAbsoluteMatrix()}linkTransformNode(e){this._linkedTransformNode&&this._skeleton._numBonesWithLinkedTransformNode--,this._linkedTransformNode=e,this._linkedTransformNode&&this._skeleton._numBonesWithLinkedTransformNode++}getTransformNode(){return this._linkedTransformNode}get position(){return this._decompose(),this._localPosition}set position(e){this._decompose(),this._localPosition.copyFrom(e),this._markAsDirtyAndCompose()}get rotation(){return this.getRotation()}set rotation(e){this.setRotation(e)}get rotationQuaternion(){return this._decompose(),this._localRotation}set rotationQuaternion(e){this.setRotationQuaternion(e)}get scaling(){return this.getScale()}set scaling(e){this.setScale(e)}get animationPropertiesOverride(){return this._skeleton.animationPropertiesOverride}_decompose(){this._needToDecompose&&(this._needToDecompose=!1,this._localScaling||(this._localScaling=b.Zero(),this._localRotation=ze.Zero(),this._localPosition=b.Zero()),this._localMatrix.decompose(this._localScaling,this._localRotation,this._localPosition))}_compose(){if(this._needToCompose){if(!this._localScaling){this._needToCompose=!1;return}this._needToCompose=!1,K.ComposeToRef(this._localScaling,this._localRotation,this._localPosition,this._localMatrix)}}updateMatrix(e,t=!0,i=!0){this._bindMatrix.copyFrom(e),t&&this._updateAbsoluteBindMatrices(),i?this._matrix=e:this.markAsDirty()}_updateAbsoluteBindMatrices(e,t=!0){if(e||(e=this._bindMatrix),this.parent?e.multiplyToRef(this.parent._absoluteBindMatrix,this._absoluteBindMatrix):this._absoluteBindMatrix.copyFrom(e),this._absoluteBindMatrix.invertToRef(this._absoluteInverseBindMatrix),t)for(let i=0;i{Gr();mg=class n extends ge{constructor(e,t,i,r,s,a=!0,o=!1,l=3,c=0,f,h,d,u){super(null,s,!a,o,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,f),this.format=r,this._engine&&(!this._engine._caps.textureFloatLinearFiltering&&c===1&&(l=1),!this._engine._caps.textureHalfFloatLinearFiltering&&c===2&&(l=1),this._texture=this._engine.createRawTexture(e,t,i,r,a,o,l,null,c,f!=null?f:0,h!=null?h:!1,u),this.wrapU=ge.CLAMP_ADDRESSMODE,this.wrapV=ge.CLAMP_ADDRESSMODE,this._waitingForData=!!d&&!e)}update(e){this.updateMipLevel(e,0)}updateMipLevel(e,t){this._getEngine().updateRawTexture(this._texture,e,this._texture.format,this._texture.invertY,null,this._texture.type,this._texture._useSRGBBuffer,t),this._waitingForData=!1}clone(){if(!this._texture)return super.clone();let e=new n(null,this.getSize().width,this.getSize().height,this.format,this.getScene(),this._texture.generateMipMaps,this._invertY,this.samplingMode,this._texture.type,this._texture._creationFlags,this._useSRGBBuffer);return e._texture=this._texture,this._texture.incrementReferences(),e}isReady(){return super.isReady()&&!this._waitingForData}static CreateLuminanceTexture(e,t,i,r,s=!0,a=!1,o=3){return new n(e,t,i,1,r,s,a,o)}static CreateLuminanceAlphaTexture(e,t,i,r,s=!0,a=!1,o=3){return new n(e,t,i,2,r,s,a,o)}static CreateAlphaTexture(e,t,i,r,s=!0,a=!1,o=3){return new n(e,t,i,0,r,s,a,o)}static CreateRGBTexture(e,t,i,r,s=!0,a=!1,o=3,l=0,c=0,f=!1){return new n(e,t,i,4,r,s,a,o,l,c,f)}static CreateRGBATexture(e,t,i,r,s=!0,a=!1,o=3,l=0,c=0,f=!1,h=!1){return new n(e,t,i,5,r,s,a,o,l,c,f,h)}static CreateRGBAStorageTexture(e,t,i,r,s=!0,a=!1,o=3,l=0,c=!1){return new n(e,t,i,5,r,s,a,o,l,1,c)}static CreateRTexture(e,t,i,r,s=!0,a=!1,o=ge.TRILINEAR_SAMPLINGMODE,l=1){return new n(e,t,i,6,r,s,a,o,l)}static CreateRStorageTexture(e,t,i,r,s=!0,a=!1,o=ge.TRILINEAR_SAMPLINGMODE,l=1){return new n(e,t,i,6,r,s,a,o,l,1)}}});var Px,j4=C(()=>{yx();hi();Ve();K4();_f();VC();Pi();Pt();__();Px=class n{get useTextureToStoreBoneMatrices(){return this._useTextureToStoreBoneMatrices}set useTextureToStoreBoneMatrices(e){this._useTextureToStoreBoneMatrices=e,this._markAsDirty()}get animationPropertiesOverride(){return this._animationPropertiesOverride?this._animationPropertiesOverride:this._scene.animationPropertiesOverride}set animationPropertiesOverride(e){this._animationPropertiesOverride=e}get isUsingTextureForMatrices(){return this.useTextureToStoreBoneMatrices&&this._canUseTextureForBones}get uniqueId(){return this._uniqueId}constructor(e,t,i){this.name=e,this.id=t,this.bones=[],this.needInitialSkinMatrix=!1,this._isDirty=!0,this._meshesWithPoseMatrix=new Array,this._identity=K.Identity(),this._currentRenderId=-1,this._textureWidth=0,this._textureHeight=1,this._ranges={},this._absoluteTransformIsDirty=!0,this._canUseTextureForBones=!1,this._uniqueId=0,this._numBonesWithLinkedTransformNode=0,this._hasWaitingData=null,this._parentContainer=null,this.doNotSerialize=!1,this._useTextureToStoreBoneMatrices=!0,this._animationPropertiesOverride=null,this.onBeforeComputeObservable=new ee,this.metadata=null,this.bones=[],this._scene=i||Le.LastCreatedScene,this._uniqueId=this._scene.getUniqueId(),this._scene.addSkeleton(this),this._isDirty=!0;let r=this._scene.getEngine().getCaps();this._canUseTextureForBones=r.textureFloat&&r.maxVertexTextureImageUnits>0}getClassName(){return"Skeleton"}getChildren(){return this.bones.filter(e=>!e.getParent())}getTransformMatrices(e){if(this.needInitialSkinMatrix){if(!e)throw new Error("getTransformMatrices: When using the needInitialSkinMatrix flag, a mesh must be provided");return e._bonesTransformMatrices||this.prepare(!0),e._bonesTransformMatrices}return(!this._transformMatrices||this._isDirty)&&this.prepare(!this._transformMatrices),this._transformMatrices}getTransformMatrixTexture(e){return this.needInitialSkinMatrix&&e._transformMatrixTexture?e._transformMatrixTexture:this._transformMatrixTexture}getScene(){return this._scene}toString(e){let t=`Name: ${this.name}, nBones: ${this.bones.length}`;if(t+=`, nAnimationRanges: ${this._ranges?Object.keys(this._ranges).length:"none"}`,e){t+=", Ranges: {";let i=!0;for(let r in this._ranges)i&&(t+=", ",i=!1),t+=r;t+="}"}return t}getBoneIndexByName(e){for(let t=0,i=this.bones.length;t-1&&this._meshesWithPoseMatrix.splice(t,1)}_computeTransformMatrices(e,t){this.onBeforeComputeObservable.notifyObservers(this);for(let i=0;i0){for(let r of this.bones)if(r._linkedTransformNode){let s=r._linkedTransformNode;r.position=s.position,s.rotationQuaternion?r.rotationQuaternion=s.rotationQuaternion:r.rotation=s.rotation,r.scaling=s.scaling}}let t=null;if(this.needInitialSkinMatrix)for(let r of this._meshesWithPoseMatrix){let s=r.getPoseMatrix(),a=this._isDirty;if(t===null&&(t=this._computeTextureSize()),(!r._bonesTransformMatrices||r._bonesTransformMatrices.length!==t)&&(r._bonesTransformMatrices=new Float32Array(t),a=!0),!!a){if(this._synchronizedWithMesh!==r){this._synchronizedWithMesh=r;for(let o of this.bones)o.getParent()||(o.getBindMatrix().multiplyToRef(s,Z.Matrix[1]),o._updateAbsoluteBindMatrices(Z.Matrix[1]));if(this.isUsingTextureForMatrices){let o=(i=r._transformMatrixTexture)==null?void 0:i.getSize(),l=o?o.width*o.height*4:0;(!r._transformMatrixTexture||l!==t)&&(r._transformMatrixTexture&&r._transformMatrixTexture.dispose(),r._transformMatrixTexture=mg.CreateRGBATexture(r._bonesTransformMatrices,this._textureWidth,this._textureHeight,this._scene,!1,!1,1,1))}}this._computeTransformMatrices(r._bonesTransformMatrices,s),this.isUsingTextureForMatrices&&r._transformMatrixTexture&&r._transformMatrixTexture.update(r._bonesTransformMatrices)}}else{if(!this._isDirty)return;t===null&&(t=this._computeTextureSize()),(!this._transformMatrices||this._transformMatrices.length!==t)&&(this._transformMatrices=new Float32Array(t),this.isUsingTextureForMatrices&&(this._transformMatrixTexture&&this._transformMatrixTexture.dispose(),this._transformMatrixTexture=mg.CreateRGBATexture(this._transformMatrices,this._textureWidth,this._textureHeight,this._scene,!1,!1,1,1))),this._computeTransformMatrices(this._transformMatrices,null),this.isUsingTextureForMatrices&&this._transformMatrixTexture&&this._transformMatrixTexture.update(this._transformMatrices)}this._isDirty=!1}getAnimatables(){if(!this._animatables||this._animatables.length!==this.bones.length){this._animatables=[];for(let e=0;e-1&&this._parentContainer.skeletons.splice(e,1),this._parentContainer=null}this._transformMatrixTexture&&(this._transformMatrixTexture.dispose(),this._transformMatrixTexture=null)}serialize(){var t,i;let e={};e.name=this.name,e.id=this.id,e.uniqueId=this.uniqueId,this.dimensionsAtRest&&(e.dimensionsAtRest=this.dimensionsAtRest.asArray()),e.bones=[],e.needInitialSkinMatrix=this.needInitialSkinMatrix,this.metadata&&(e.metadata=this.metadata);for(let r=0;r0&&(o.animation=s.animations[0].serialize()),e.ranges=[];for(let l in this._ranges){let c=this._ranges[l];if(!c)continue;let f={};f.name=l,f.from=c.from,f.to=c.to,e.ranges.push(f)}}return e}static Parse(e,t){let i=new n(e.name,e.id,t);e.dimensionsAtRest&&(i.dimensionsAtRest=b.FromArray(e.dimensionsAtRest)),i.needInitialSkinMatrix=e.needInitialSkinMatrix,e.metadata&&(i.metadata=e.metadata);let r;for(r=0;r-1&&(o=i.bones[s.parentBoneIndex]);let l=s.rest?K.FromArray(s.rest):null,c=new Ca(s.name,i,o,K.FromArray(s.matrix),l,null,a);s.id!==void 0&&s.id!==null&&(c.id=s.id),s.length&&(c.length=s.length),s.metadata&&(c.metadata=s.metadata),s.animation&&c.animations.push(ft.Parse(s.animation)),s.linkedTransformNodeId!==void 0&&s.linkedTransformNodeId!==null&&(i._hasWaitingData=!0,c._waitingTransformNodeId=s.linkedTransformNodeId),s.linkedTransformNodeUniqueId!==void 0&&s.linkedTransformNodeUniqueId!==null&&(i._hasWaitingData=!0,c._waitingTransformNodeUniqueId=s.linkedTransformNodeUniqueId)}if(e.ranges)for(r=0;r0&&(e=this._meshesWithPoseMatrix[0].getPoseMatrix()),e}sortBones(){let e=[],t=new Array(this.bones.length);for(let i=0;i{kt();hi();Pi();Ui();Ut();_r();Vi();Uf=class n{get influence(){return this._influence}set influence(e){if(this._influence===e)return;let t=this._influence;this._influence=e,this.onInfluenceChanged.hasObservers()&&this.onInfluenceChanged.notifyObservers(t===0||e===0)}get animationPropertiesOverride(){return!this._animationPropertiesOverride&&this._scene?this._scene.animationPropertiesOverride:this._animationPropertiesOverride}set animationPropertiesOverride(e){this._animationPropertiesOverride=e}constructor(e,t=0,i=null,r=null){this.name=e,this.animations=[],this._positions=null,this._normals=null,this._tangents=null,this._uvs=null,this._uv2s=null,this._colors=null,this._uniqueId=0,this.onInfluenceChanged=new ee,this._onDataLayoutChanged=new ee,this.morphTargetManager=null,this._animationPropertiesOverride=null,this.id=e,this.morphTargetManager=r,this._scene=i||Le.LastCreatedScene,this.influence=t,this._scene&&(this._uniqueId=this._scene.getUniqueId())}get uniqueId(){return this._uniqueId}get hasPositions(){return!!this._positions}get hasNormals(){return!!this._normals}get hasTangents(){return!!this._tangents}get hasUVs(){return!!this._uvs}get hasUV2s(){return!!this._uv2s}get hasColors(){return!!this._colors}get vertexCount(){return this._positions?this._positions.length/3:this._normals?this._normals.length/3:this._tangents?this._tangents.length/3:this._uvs?this._uvs.length/2:this._uv2s?this._uv2s.length/2:this._colors?this._colors.length/4:0}setPositions(e){let t=this.hasPositions;this._positions=e,t!==this.hasPositions&&this._onDataLayoutChanged.notifyObservers(void 0)}getPositions(){return this._positions}setNormals(e){let t=this.hasNormals;this._normals=e,t!==this.hasNormals&&this._onDataLayoutChanged.notifyObservers(void 0)}getNormals(){return this._normals}setTangents(e){let t=this.hasTangents;this._tangents=e,t!==this.hasTangents&&this._onDataLayoutChanged.notifyObservers(void 0)}getTangents(){return this._tangents}setUVs(e){let t=this.hasUVs;this._uvs=e,t!==this.hasUVs&&this._onDataLayoutChanged.notifyObservers(void 0)}getUVs(){return this._uvs}setUV2s(e){let t=this.hasUV2s;this._uv2s=e,t!==this.hasUV2s&&this._onDataLayoutChanged.notifyObservers(void 0)}getUV2s(){return this._uv2s}setColors(e){let t=this.hasColors;this._colors=e,t!==this.hasColors&&this._onDataLayoutChanged.notifyObservers(void 0)}getColors(){return this._colors}clone(){let e=tt.Clone(()=>new n(this.name,this.influence,this._scene,this.morphTargetManager),this);return e._positions=this._positions,e._normals=this._normals,e._tangents=this._tangents,e._uvs=this._uvs,e._uv2s=this._uv2s,e._colors=this._colors,e}serialize(){let e={};return e.name=this.name,e.influence=this.influence,this.id!=null&&(e.id=this.id),e.uniqueId=this.uniqueId,e.positions=Array.prototype.slice.call(this.getPositions()),this.hasNormals&&(e.normals=Array.prototype.slice.call(this.getNormals())),this.hasTangents&&(e.tangents=Array.prototype.slice.call(this.getTangents())),this.hasUVs&&(e.uvs=Array.prototype.slice.call(this.getUVs())),this.hasUV2s&&(e.uv2s=Array.prototype.slice.call(this.getUV2s())),this.hasColors&&(e.colors=Array.prototype.slice.call(this.getColors())),tt.AppendSerializedAnimations(this,e),e}getClassName(){return"MorphTarget"}static Parse(e,t,i=null){let r=new n(e.name,e.influence,t,i);if(r.setPositions(e.positions),e.id!=null&&(r.id=e.id),e.normals&&r.setNormals(e.normals),e.tangents&&r.setTangents(e.tangents),e.uvs&&r.setUVs(e.uvs),e.uv2s&&r.setUV2s(e.uv2s),e.colors&&r.setColors(e.colors),e.animations){for(let s=0;s{Gr();Dx=class n extends ge{get depth(){return this._depth}constructor(e,t,i,r,s,a,o=!0,l=!1,c=ge.TRILINEAR_SAMPLINGMODE,f=0,h,d){super(null,a,!o,l),this.format=s,this._texture=a.getEngine().createRawTexture2DArray(e,t,i,r,s,o,l,c,null,f,h!=null?h:0,d),this._depth=r,this.is2DArray=!0}update(e){this.updateMipLevel(e,0)}updateMipLevel(e,t){this._texture&&this._getEngine().updateRawTexture2DArray(this._texture,e,this._texture.format,this._texture.invertY,null,this._texture.type,t)}static CreateRGBATexture(e,t,i,r,s,a=!0,o=!1,l=3,c=0){return new n(e,t,i,r,5,s,a,o,l,c)}}});var rd,Z4=C(()=>{$a();Pt();Pi();qP();q4();rd=class n{set areUpdatesFrozen(e){e?this._blockCounter++:(this._blockCounter--,this._blockCounter<=0&&(this._blockCounter=0,this._syncActiveTargets(this._forceUpdateWhenUnfrozen),this._forceUpdateWhenUnfrozen=!1))}get areUpdatesFrozen(){return this._blockCounter>0}constructor(e=null,t){if(this.meshName=t,this._targets=new Array,this._targetInfluenceChangedObservers=new Array,this._targetDataLayoutChangedObservers=new Array,this._activeTargets=new Fi(16),this._supportsPositions=!1,this._supportsNormals=!1,this._supportsTangents=!1,this._supportsUVs=!1,this._supportsUV2s=!1,this._supportsColors=!1,this._vertexCount=0,this._uniqueId=0,this._tempInfluences=new Array,this._canUseTextureForTargets=!1,this._blockCounter=0,this._mustSynchronize=!0,this._forceUpdateWhenUnfrozen=!1,this._textureVertexStride=0,this._textureWidth=0,this._textureHeight=1,this._parentContainer=null,this.optimizeInfluencers=!0,this.enablePositionMorphing=!0,this.enableNormalMorphing=!0,this.enableTangentMorphing=!0,this.enableUVMorphing=!0,this.enableUV2Morphing=!0,this.enableColorMorphing=!0,this._numMaxInfluencers=0,this._useTextureToStoreTargets=!0,this.metadata=null,this._influencesAreDirty=!1,this._needUpdateInfluences=!1,e||(e=Le.LastCreatedScene),this._scene=e,this._scene){this._scene.addMorphTargetManager(this),this._uniqueId=this._scene.getUniqueId();let i=this._scene.getEngine().getCaps();this._canUseTextureForTargets=i.canUseGLVertexID&&i.textureFloat&&i.maxVertexTextureImageUnits>0&&i.texture2DArrayMaxLayerCount>1}}get numMaxInfluencers(){return n.ConstantTargetCountForTextureMode>0&&this.isUsingTextureForTargets?n.ConstantTargetCountForTextureMode:this._numMaxInfluencers}set numMaxInfluencers(e){this._numMaxInfluencers!==e&&(this._numMaxInfluencers=e,this._mustSynchronize=!0,this._syncActiveTargets())}get uniqueId(){return this._uniqueId}get vertexCount(){return this._vertexCount}get supportsPositions(){return this._supportsPositions&&this.enablePositionMorphing}get supportsNormals(){return this._supportsNormals&&this.enableNormalMorphing}get supportsTangents(){return this._supportsTangents&&this.enableTangentMorphing}get supportsUVs(){return this._supportsUVs&&this.enableUVMorphing}get supportsUV2s(){return this._supportsUV2s&&this.enableUV2Morphing}get supportsColors(){return this._supportsColors&&this.enableColorMorphing}get hasPositions(){return this._supportsPositions}get hasNormals(){return this._supportsNormals}get hasTangents(){return this._supportsTangents}get hasUVs(){return this._supportsUVs}get hasUV2s(){return this._supportsUV2s}get hasColors(){return this._supportsColors}get numTargets(){return this._targets.length}get numInfluencers(){return this._influencesAreDirty&&this._syncActiveTargets(),this._activeTargets.length}get influences(){return this._influencesAreDirty&&this._syncActiveTargets(),this._influences}get useTextureToStoreTargets(){return this._useTextureToStoreTargets}set useTextureToStoreTargets(e){this._useTextureToStoreTargets!==e&&(this._useTextureToStoreTargets=e,this._mustSynchronize=!0,this._syncActiveTargets())}get isUsingTextureForTargets(){var e;return n.EnableTextureStorage&&this.useTextureToStoreTargets&&this._canUseTextureForTargets&&!((e=this._scene)!=null&&e.getEngine().getCaps().disableMorphTargetTexture)}getActiveTarget(e){return this._influencesAreDirty&&this._syncActiveTargets(),this._activeTargets.data[e]}getTarget(e){return this._targets[e]}getTargetByName(e){for(let t of this._targets)if(t.name===e)return t;return null}addTarget(e){this._targets.push(e),this._targetInfluenceChangedObservers.push(e.onInfluenceChanged.add(t=>{this.areUpdatesFrozen&&t&&(this._forceUpdateWhenUnfrozen=!0),this._influencesAreDirty=!0,this._needUpdateInfluences=this._needUpdateInfluences||t})),this._targetDataLayoutChangedObservers.push(e._onDataLayoutChanged.add(()=>{this._mustSynchronize=!0,this._syncActiveTargets()})),this._mustSynchronize=!0,this._syncActiveTargets()}removeTarget(e){let t=this._targets.indexOf(e);t>=0&&(this._targets.splice(t,1),e.onInfluenceChanged.remove(this._targetInfluenceChangedObservers.splice(t,1)[0]),e._onDataLayoutChanged.remove(this._targetDataLayoutChangedObservers.splice(t,1)[0]),this._mustSynchronize=!0,this._syncActiveTargets()),this._scene&&this._scene.stopAnimation(e)}_bind(e){this._influencesAreDirty&&this._syncActiveTargets(),e.setFloat3("morphTargetTextureInfo",this._textureVertexStride,this._textureWidth,this._textureHeight),e.setFloatArray("morphTargetTextureIndices",this._morphTargetTextureIndices),e.setTexture("morphTargets",this._targetStoreTexture),e.setFloat("morphTargetCount",this.numInfluencers)}clone(){let e=new n(this._scene);e.areUpdatesFrozen=!0;for(let t of this._targets)e.addTarget(t.clone());return e.areUpdatesFrozen=!1,e.enablePositionMorphing=this.enablePositionMorphing,e.enableNormalMorphing=this.enableNormalMorphing,e.enableTangentMorphing=this.enableTangentMorphing,e.enableUVMorphing=this.enableUVMorphing,e.enableUV2Morphing=this.enableUV2Morphing,e.enableColorMorphing=this.enableColorMorphing,e.metadata=this.metadata,e}serialize(){let e={};e.id=this.uniqueId,e.meshName=this.meshName,e.targets=[];for(let t of this._targets)e.targets.push(t.serialize());return this.metadata&&(e.metadata=this.metadata),e}_syncActiveTargets(e=!1){if(this.areUpdatesFrozen)return;e=e||this._needUpdateInfluences,this._needUpdateInfluences=!1,this._influencesAreDirty=!1;let t=!!this._targetStoreTexture,i=this.isUsingTextureForTargets;(this._mustSynchronize||t!==i)&&(this._mustSynchronize=!1,this.synchronize());let r=0;this._activeTargets.reset(),(!this._morphTargetTextureIndices||this._morphTargetTextureIndices.length!==this._targets.length)&&(this._morphTargetTextureIndices=new Float32Array(this._targets.length));let s=-1;for(let a of this._targets)if(s++,!(a.influence===0&&this.optimizeInfluencers)){if(this._activeTargets.length>=n.MaxActiveMorphTargetsInVertexAttributeMode&&!this.isUsingTextureForTargets)break;this._activeTargets.push(a),this._morphTargetTextureIndices[r]=s,this._tempInfluences[r++]=a.influence}this._morphTargetTextureIndices.length!==r&&(this._morphTargetTextureIndices=this._morphTargetTextureIndices.slice(0,r)),(!this._influences||this._influences.length!==r)&&(this._influences=new Float32Array(r));for(let a=0;ae.getCaps().texture2DArrayMaxLayerCount&&(this.useTextureToStoreTargets=!1);for(let i of this._targets){this._supportsPositions=this._supportsPositions&&i.hasPositions,this._supportsNormals=this._supportsNormals&&i.hasNormals,this._supportsTangents=this._supportsTangents&&i.hasTangents,this._supportsUVs=this._supportsUVs&&i.hasUVs,this._supportsUV2s=this._supportsUV2s&&i.hasUV2s,this._supportsColors=this._supportsColors&&i.hasColors;let r=i.vertexCount;if(this._vertexCount===0)this._vertexCount=r;else if(this._vertexCount!==r){$.Error(`Incompatible target. Targets must all have the same vertices count. Current vertex count: ${this._vertexCount}, vertex count for target "${i.name}": ${r}`);return}}if(this.isUsingTextureForTargets){this._textureVertexStride=0,this._supportsPositions&&this._textureVertexStride++,this._supportsNormals&&this._textureVertexStride++,this._supportsTangents&&this._textureVertexStride++,this._supportsUVs&&this._textureVertexStride++,this._supportsUV2s&&this._textureVertexStride++,this._supportsColors&&this._textureVertexStride++,this._textureWidth=this._vertexCount*this._textureVertexStride||1,this._textureHeight=1;let i=e.getCaps().maxTextureSize;this._textureWidth>i&&(this._textureHeight=Math.ceil(this._textureWidth/i),this._textureWidth=i);let r=this._targets.length,s=new Float32Array(r*this._textureWidth*this._textureHeight*4),a;for(let o=0;o-1&&this._parentContainer.morphTargetManagers.splice(e,1),this._parentContainer=null}for(let e of this._targets)this._scene.stopAnimation(e)}}static Parse(e,t){let i=new n(t);for(let r of e.targets)i.addTarget(Uf.Parse(r,t,i));return e.metadata&&(i.metadata=e.metadata),i}};rd.EnableTextureStorage=!0;rd.MaxActiveMorphTargetsInVertexAttributeMode=8;rd.ConstantTargetCountForTextureMode=0});function J4(n,e,t){QP(n)&&$.Warn(`Extension with the name '${n}' already exists`),ZP.set(n,{isGLTFExtension:e,factory:t})}function QP(n){return ZP.delete(n)}var ZP,Q4,$4=C(()=>{Pt();ZP=new Map,Q4=ZP});var W,JP=C(()=>{W=class{};W.AUTOSAMPLERSUFFIX="Sampler";W.DISABLEUA="#define DISABLE_UNIFORMITY_ANALYSIS";W.ALPHA_DISABLE=0;W.ALPHA_ADD=1;W.ALPHA_COMBINE=2;W.ALPHA_SUBTRACT=3;W.ALPHA_MULTIPLY=4;W.ALPHA_MAXIMIZED=5;W.ALPHA_ONEONE=6;W.ALPHA_PREMULTIPLIED=7;W.ALPHA_PREMULTIPLIED_PORTERDUFF=8;W.ALPHA_INTERPOLATE=9;W.ALPHA_SCREENMODE=10;W.ALPHA_ONEONE_ONEONE=11;W.ALPHA_ALPHATOCOLOR=12;W.ALPHA_REVERSEONEMINUS=13;W.ALPHA_SRC_DSTONEMINUSSRCALPHA=14;W.ALPHA_ONEONE_ONEZERO=15;W.ALPHA_EXCLUSION=16;W.ALPHA_LAYER_ACCUMULATE=17;W.ALPHA_MIN=18;W.ALPHA_MAX=19;W.ALPHA_DUAL_SRC0_ADD_SRC1xDST=20;W.ALPHA_EQUATION_ADD=0;W.ALPHA_EQUATION_SUBSTRACT=1;W.ALPHA_EQUATION_REVERSE_SUBTRACT=2;W.ALPHA_EQUATION_MAX=3;W.ALPHA_EQUATION_MIN=4;W.ALPHA_EQUATION_DARKEN=5;W.DELAYLOADSTATE_NONE=0;W.DELAYLOADSTATE_LOADED=1;W.DELAYLOADSTATE_LOADING=2;W.DELAYLOADSTATE_NOTLOADED=4;W.NEVER=512;W.ALWAYS=519;W.LESS=513;W.EQUAL=514;W.LEQUAL=515;W.GREATER=516;W.GEQUAL=518;W.NOTEQUAL=517;W.KEEP=7680;W.ZERO=0;W.REPLACE=7681;W.INCR=7682;W.DECR=7683;W.INVERT=5386;W.INCR_WRAP=34055;W.DECR_WRAP=34056;W.TEXTURE_CLAMP_ADDRESSMODE=0;W.TEXTURE_WRAP_ADDRESSMODE=1;W.TEXTURE_MIRROR_ADDRESSMODE=2;W.TEXTURE_CREATIONFLAG_STORAGE=1;W.TEXTUREFORMAT_ALPHA=0;W.TEXTUREFORMAT_LUMINANCE=1;W.TEXTUREFORMAT_LUMINANCE_ALPHA=2;W.TEXTUREFORMAT_RGB=4;W.TEXTUREFORMAT_RGBA=5;W.TEXTUREFORMAT_RED=6;W.TEXTUREFORMAT_R=6;W.TEXTUREFORMAT_R16_UNORM=33322;W.TEXTUREFORMAT_RG16_UNORM=33324;W.TEXTUREFORMAT_RGB16_UNORM=32852;W.TEXTUREFORMAT_RGBA16_UNORM=32859;W.TEXTUREFORMAT_R16_SNORM=36760;W.TEXTUREFORMAT_RG16_SNORM=36761;W.TEXTUREFORMAT_RGB16_SNORM=36762;W.TEXTUREFORMAT_RGBA16_SNORM=36763;W.TEXTUREFORMAT_RG=7;W.TEXTUREFORMAT_RED_INTEGER=8;W.TEXTUREFORMAT_R_INTEGER=8;W.TEXTUREFORMAT_RG_INTEGER=9;W.TEXTUREFORMAT_RGB_INTEGER=10;W.TEXTUREFORMAT_RGBA_INTEGER=11;W.TEXTUREFORMAT_BGRA=12;W.TEXTUREFORMAT_DEPTH24_STENCIL8=13;W.TEXTUREFORMAT_DEPTH32_FLOAT=14;W.TEXTUREFORMAT_DEPTH16=15;W.TEXTUREFORMAT_DEPTH24=16;W.TEXTUREFORMAT_DEPTH24UNORM_STENCIL8=17;W.TEXTUREFORMAT_DEPTH32FLOAT_STENCIL8=18;W.TEXTUREFORMAT_STENCIL8=19;W.TEXTUREFORMAT_UNDEFINED=4294967295;W.TEXTUREFORMAT_COMPRESSED_RGBA_BPTC_UNORM=36492;W.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_BPTC_UNORM=36493;W.TEXTUREFORMAT_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT=36495;W.TEXTUREFORMAT_COMPRESSED_RGB_BPTC_SIGNED_FLOAT=36494;W.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT5=33779;W.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT=35919;W.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT3=33778;W.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT=35918;W.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT1=33777;W.TEXTUREFORMAT_COMPRESSED_RGB_S3TC_DXT1=33776;W.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT=35917;W.TEXTUREFORMAT_COMPRESSED_SRGB_S3TC_DXT1_EXT=35916;W.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_4x4=37808;W.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_5x4=37809;W.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_5x5=37810;W.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_6x5=37811;W.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_6x6=37812;W.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_8x5=37813;W.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_8x6=37814;W.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_8x8=37815;W.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_10x5=37816;W.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_10x6=37817;W.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_10x8=37818;W.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_10x10=37819;W.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_12x10=37820;W.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_12x12=37821;W.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR=37840;W.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR=37841;W.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR=37842;W.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR=37843;W.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR=37844;W.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR=37845;W.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR=37846;W.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR=37847;W.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR=37848;W.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR=37849;W.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR=37850;W.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR=37851;W.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR=37852;W.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR=37853;W.TEXTUREFORMAT_COMPRESSED_RGB_ETC1_WEBGL=36196;W.TEXTUREFORMAT_COMPRESSED_RGB8_ETC2=37492;W.TEXTUREFORMAT_COMPRESSED_SRGB8_ETC2=37493;W.TEXTUREFORMAT_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2=37494;W.TEXTUREFORMAT_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2=37495;W.TEXTUREFORMAT_COMPRESSED_RGBA8_ETC2_EAC=37496;W.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC=37497;W.TEXTURETYPE_UNSIGNED_BYTE=0;W.TEXTURETYPE_UNSIGNED_INT=0;W.TEXTURETYPE_FLOAT=1;W.TEXTURETYPE_HALF_FLOAT=2;W.TEXTURETYPE_BYTE=3;W.TEXTURETYPE_SHORT=4;W.TEXTURETYPE_UNSIGNED_SHORT=5;W.TEXTURETYPE_INT=6;W.TEXTURETYPE_UNSIGNED_INTEGER=7;W.TEXTURETYPE_UNSIGNED_SHORT_4_4_4_4=8;W.TEXTURETYPE_UNSIGNED_SHORT_5_5_5_1=9;W.TEXTURETYPE_UNSIGNED_SHORT_5_6_5=10;W.TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV=11;W.TEXTURETYPE_UNSIGNED_INT_24_8=12;W.TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV=13;W.TEXTURETYPE_UNSIGNED_INT_5_9_9_9_REV=14;W.TEXTURETYPE_FLOAT_32_UNSIGNED_INT_24_8_REV=15;W.TEXTURETYPE_UNDEFINED=16;W.TEXTURE_2D=3553;W.TEXTURE_2D_ARRAY=35866;W.TEXTURE_CUBE_MAP=34067;W.TEXTURE_CUBE_MAP_ARRAY=3735928559;W.TEXTURE_3D=32879;W.TEXTURE_NEAREST_SAMPLINGMODE=1;W.TEXTURE_NEAREST_NEAREST=1;W.TEXTURE_BILINEAR_SAMPLINGMODE=2;W.TEXTURE_LINEAR_LINEAR=2;W.TEXTURE_TRILINEAR_SAMPLINGMODE=3;W.TEXTURE_LINEAR_LINEAR_MIPLINEAR=3;W.TEXTURE_NEAREST_NEAREST_MIPNEAREST=4;W.TEXTURE_NEAREST_LINEAR_MIPNEAREST=5;W.TEXTURE_NEAREST_LINEAR_MIPLINEAR=6;W.TEXTURE_NEAREST_LINEAR=7;W.TEXTURE_NEAREST_NEAREST_MIPLINEAR=8;W.TEXTURE_LINEAR_NEAREST_MIPNEAREST=9;W.TEXTURE_LINEAR_NEAREST_MIPLINEAR=10;W.TEXTURE_LINEAR_LINEAR_MIPNEAREST=11;W.TEXTURE_LINEAR_NEAREST=12;W.TEXTURE_EXPLICIT_MODE=0;W.TEXTURE_SPHERICAL_MODE=1;W.TEXTURE_PLANAR_MODE=2;W.TEXTURE_CUBIC_MODE=3;W.TEXTURE_PROJECTION_MODE=4;W.TEXTURE_SKYBOX_MODE=5;W.TEXTURE_INVCUBIC_MODE=6;W.TEXTURE_EQUIRECTANGULAR_MODE=7;W.TEXTURE_FIXED_EQUIRECTANGULAR_MODE=8;W.TEXTURE_FIXED_EQUIRECTANGULAR_MIRRORED_MODE=9;W.TEXTURE_FILTERING_QUALITY_OFFLINE=4096;W.TEXTURE_FILTERING_QUALITY_HIGH=64;W.TEXTURE_FILTERING_QUALITY_MEDIUM=16;W.TEXTURE_FILTERING_QUALITY_LOW=8;W.SCALEMODE_FLOOR=1;W.SCALEMODE_NEAREST=2;W.SCALEMODE_CEILING=3;W.MATERIAL_TextureDirtyFlag=1;W.MATERIAL_LightDirtyFlag=2;W.MATERIAL_FresnelDirtyFlag=4;W.MATERIAL_AttributesDirtyFlag=8;W.MATERIAL_MiscDirtyFlag=16;W.MATERIAL_PrePassDirtyFlag=32;W.MATERIAL_ImageProcessingDirtyFlag=64;W.MATERIAL_AllDirtyFlag=127;W.MATERIAL_TriangleFillMode=0;W.MATERIAL_WireFrameFillMode=1;W.MATERIAL_PointFillMode=2;W.MATERIAL_PointListDrawMode=3;W.MATERIAL_LineListDrawMode=4;W.MATERIAL_LineLoopDrawMode=5;W.MATERIAL_LineStripDrawMode=6;W.MATERIAL_TriangleStripDrawMode=7;W.MATERIAL_TriangleFanDrawMode=8;W.MATERIAL_ClockWiseSideOrientation=0;W.MATERIAL_CounterClockWiseSideOrientation=1;W.MATERIAL_DIFFUSE_MODEL_E_OREN_NAYAR=0;W.MATERIAL_DIFFUSE_MODEL_BURLEY=1;W.MATERIAL_DIFFUSE_MODEL_LAMBERT=2;W.MATERIAL_DIFFUSE_MODEL_LEGACY=3;W.MATERIAL_DIELECTRIC_SPECULAR_MODEL_GLTF=0;W.MATERIAL_DIELECTRIC_SPECULAR_MODEL_OPENPBR=1;W.MATERIAL_CONDUCTOR_SPECULAR_MODEL_GLTF=0;W.MATERIAL_CONDUCTOR_SPECULAR_MODEL_OPENPBR=1;W.ACTION_NothingTrigger=0;W.ACTION_OnPickTrigger=1;W.ACTION_OnLeftPickTrigger=2;W.ACTION_OnRightPickTrigger=3;W.ACTION_OnCenterPickTrigger=4;W.ACTION_OnPickDownTrigger=5;W.ACTION_OnDoublePickTrigger=6;W.ACTION_OnPickUpTrigger=7;W.ACTION_OnPickOutTrigger=16;W.ACTION_OnLongPressTrigger=8;W.ACTION_OnPointerOverTrigger=9;W.ACTION_OnPointerOutTrigger=10;W.ACTION_OnEveryFrameTrigger=11;W.ACTION_OnIntersectionEnterTrigger=12;W.ACTION_OnIntersectionExitTrigger=13;W.ACTION_OnKeyDownTrigger=14;W.ACTION_OnKeyUpTrigger=15;W.PARTICLES_BILLBOARDMODE_Y=2;W.PARTICLES_BILLBOARDMODE_ALL=7;W.PARTICLES_BILLBOARDMODE_STRETCHED=8;W.PARTICLES_BILLBOARDMODE_STRETCHED_LOCAL=9;W.MESHES_CULLINGSTRATEGY_STANDARD=0;W.MESHES_CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY=1;W.MESHES_CULLINGSTRATEGY_OPTIMISTIC_INCLUSION=2;W.MESHES_CULLINGSTRATEGY_OPTIMISTIC_INCLUSION_THEN_BSPHERE_ONLY=3;W.SCENELOADER_NO_LOGGING=0;W.SCENELOADER_MINIMAL_LOGGING=1;W.SCENELOADER_SUMMARY_LOGGING=2;W.SCENELOADER_DETAILED_LOGGING=3;W.PREPASS_IRRADIANCE_LEGACY_TEXTURE_TYPE=0;W.PREPASS_POSITION_TEXTURE_TYPE=1;W.PREPASS_VELOCITY_TEXTURE_TYPE=2;W.PREPASS_REFLECTIVITY_TEXTURE_TYPE=3;W.PREPASS_COLOR_TEXTURE_TYPE=4;W.PREPASS_DEPTH_TEXTURE_TYPE=5;W.PREPASS_NORMAL_TEXTURE_TYPE=6;W.PREPASS_ALBEDO_SQRT_TEXTURE_TYPE=7;W.PREPASS_WORLD_NORMAL_TEXTURE_TYPE=8;W.PREPASS_LOCAL_POSITION_TEXTURE_TYPE=9;W.PREPASS_SCREENSPACE_DEPTH_TEXTURE_TYPE=10;W.PREPASS_VELOCITY_LINEAR_TEXTURE_TYPE=11;W.PREPASS_ALBEDO_TEXTURE_TYPE=12;W.PREPASS_NORMALIZED_VIEW_DEPTH_TEXTURE_TYPE=13;W.PREPASS_IRRADIANCE_TEXTURE_TYPE=14;W.BUFFER_CREATIONFLAG_READ=1;W.BUFFER_CREATIONFLAG_WRITE=2;W.BUFFER_CREATIONFLAG_READWRITE=3;W.BUFFER_CREATIONFLAG_UNIFORM=4;W.BUFFER_CREATIONFLAG_VERTEX=8;W.BUFFER_CREATIONFLAG_INDEX=16;W.BUFFER_CREATIONFLAG_STORAGE=32;W.BUFFER_CREATIONFLAG_INDIRECT=64;W.RENDERPASS_MAIN=0;W.INPUT_ALT_KEY=18;W.INPUT_CTRL_KEY=17;W.INPUT_META_KEY1=91;W.INPUT_META_KEY2=92;W.INPUT_META_KEY3=93;W.INPUT_SHIFT_KEY=16;W.SNAPSHOTRENDERING_STANDARD=0;W.SNAPSHOTRENDERING_FAST=1;W.PERSPECTIVE_CAMERA=0;W.ORTHOGRAPHIC_CAMERA=1;W.FOVMODE_VERTICAL_FIXED=0;W.FOVMODE_HORIZONTAL_FIXED=1;W.RIG_MODE_NONE=0;W.RIG_MODE_STEREOSCOPIC_ANAGLYPH=10;W.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL=11;W.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED=12;W.RIG_MODE_STEREOSCOPIC_OVERUNDER=13;W.RIG_MODE_STEREOSCOPIC_INTERLACED=14;W.RIG_MODE_VR=20;W.RIG_MODE_CUSTOM=22;W.MAX_SUPPORTED_UV_SETS=6;W.GL_ALPHA_EQUATION_ADD=32774;W.GL_ALPHA_EQUATION_MIN=32775;W.GL_ALPHA_EQUATION_MAX=32776;W.GL_ALPHA_EQUATION_SUBTRACT=32778;W.GL_ALPHA_EQUATION_REVERSE_SUBTRACT=32779;W.GL_ALPHA_FUNCTION_SRC=768;W.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_COLOR=769;W.GL_ALPHA_FUNCTION_SRC_ALPHA=770;W.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA=771;W.GL_ALPHA_FUNCTION_DST_ALPHA=772;W.GL_ALPHA_FUNCTION_ONE_MINUS_DST_ALPHA=773;W.GL_ALPHA_FUNCTION_DST_COLOR=774;W.GL_ALPHA_FUNCTION_ONE_MINUS_DST_COLOR=775;W.GL_ALPHA_FUNCTION_SRC_ALPHA_SATURATED=776;W.GL_ALPHA_FUNCTION_CONSTANT_COLOR=32769;W.GL_ALPHA_FUNCTION_ONE_MINUS_CONSTANT_COLOR=32770;W.GL_ALPHA_FUNCTION_CONSTANT_ALPHA=32771;W.GL_ALPHA_FUNCTION_ONE_MINUS_CONSTANT_ALPHA=32772;W.GL_ALPHA_FUNCTION_SRC1_COLOR=35065;W.GL_ALPHA_FUNCTION_ONE_MINUS_SRC1_COLOR=35066;W.GL_ALPHA_FUNCTION_SRC1_ALPHA=34185;W.GL_ALPHA_FUNCTION_ONE_MINUS_SRC1_ALPHA=35067;W.SnippetUrl="https://snippet.babylonjs.com";W.FOGMODE_NONE=0;W.FOGMODE_EXP=1;W.FOGMODE_EXP2=2;W.FOGMODE_LINEAR=3;W.BYTE=5120;W.UNSIGNED_BYTE=5121;W.SHORT=5122;W.UNSIGNED_SHORT=5123;W.INT=5124;W.UNSIGNED_INT=5125;W.FLOAT=5126;W.PositionKind="position";W.NormalKind="normal";W.TangentKind="tangent";W.UVKind="uv";W.UV2Kind="uv2";W.UV3Kind="uv3";W.UV4Kind="uv4";W.UV5Kind="uv5";W.UV6Kind="uv6";W.ColorKind="color";W.ColorInstanceKind="instanceColor";W.MatricesIndicesKind="matricesIndices";W.MatricesWeightsKind="matricesWeights";W.MatricesIndicesExtraKind="matricesIndicesExtra";W.MatricesWeightsExtraKind="matricesWeightsExtra";W.ANIMATIONTYPE_FLOAT=0;W.ANIMATIONTYPE_VECTOR3=1;W.ANIMATIONTYPE_QUATERNION=2;W.ANIMATIONTYPE_MATRIX=3;W.ANIMATIONTYPE_COLOR3=4;W.ANIMATIONTYPE_COLOR4=7;W.ANIMATIONTYPE_VECTOR2=5;W.ANIMATIONTYPE_SIZE=6;W.ShadowMinZ=0;W.ShadowMaxZ=1e4;W.OUTLINELAYER_SAMPLING_TRIDIRECTIONAL=0;W.OUTLINELAYER_SAMPLING_OCTADIRECTIONAL=1});var _7e,eX=C(()=>{_7e=[{regex:new RegExp("^/nodes/\\d+/extensions/")}]});function Vf(n,e,t,i){let r=nt(n,e);return i?r[t][i]:r[t]}function nt(n,e,t){var i,r,s;return(s=(r=n._data)==null?void 0:r[(i=t==null?void 0:t.fillMode)!=null?i:W.MATERIAL_TriangleFillMode])==null?void 0:s.babylonMaterial}function en(n,e){return{offset:{componentsCount:2,type:"Vector2",get:(t,i,r)=>{let s=Vf(t,r,n,e);return new Ne(s==null?void 0:s.uOffset,s==null?void 0:s.vOffset)},getTarget:nt,set:(t,i,r,s)=>{let a=Vf(i,s,n,e);a.uOffset=t.x,a.vOffset=t.y},getPropertyName:[()=>`${n}${e?"."+e:""}.uOffset`,()=>`${n}${e?"."+e:""}.vOffset`]},rotation:{type:"number",get:(t,i,r)=>{var s;return(s=Vf(t,r,n,e))==null?void 0:s.wAng},getTarget:nt,set:(t,i,r,s)=>Vf(i,s,n,e).wAng=t,getPropertyName:[()=>`${n}${e?"."+e:""}.wAng`]},scale:{componentsCount:2,type:"Vector2",get:(t,i,r)=>{let s=Vf(t,r,n,e);return new Ne(s==null?void 0:s.uScale,s==null?void 0:s.vScale)},getTarget:nt,set:(t,i,r,s)=>{let a=Vf(i,s,n,e);a.uScale=t.x,a.vScale=t.y},getPropertyName:[()=>`${n}${e?"."+e:""}.uScale`,()=>`${n}${e?"."+e:""}.vScale`]}}}function pg(n){let e=n.split("/").map(i=>i.replace(/{}/g,"__array__")),t=tX;for(let i of e)i&&(t=t[i]);if(t&&t.type&&t.get)return t}function _g(n,e){let t=n.split("/").map(r=>r.replace(/{}/g,"__array__")),i=tX;for(let r of t)r&&(i=i[r]);i&&i.type&&i.get&&(i.interpolation=e)}var qoe,Zoe,Qoe,Joe,$oe,ele,tX,$P=C(()=>{Ve();JP();Ht();jC();eX();qoe={length:{type:"number",get:n=>n.length,getTarget:n=>n.map(e=>e._babylonTransformNode),getPropertyName:[()=>"length"]},__array__:{__target__:!0,translation:{type:"Vector3",get:n=>{var e;return(e=n._babylonTransformNode)==null?void 0:e.position},set:(n,e)=>{var t;return(t=e._babylonTransformNode)==null?void 0:t.position.copyFrom(n)},getTarget:n=>n._babylonTransformNode,getPropertyName:[()=>"position"]},rotation:{type:"Quaternion",get:n=>{var e;return(e=n._babylonTransformNode)==null?void 0:e.rotationQuaternion},set:(n,e)=>{var t,i;return(i=(t=e._babylonTransformNode)==null?void 0:t.rotationQuaternion)==null?void 0:i.copyFrom(n)},getTarget:n=>n._babylonTransformNode,getPropertyName:[()=>"rotationQuaternion"]},scale:{type:"Vector3",get:n=>{var e;return(e=n._babylonTransformNode)==null?void 0:e.scaling},set:(n,e)=>{var t;return(t=e._babylonTransformNode)==null?void 0:t.scaling.copyFrom(n)},getTarget:n=>n._babylonTransformNode,getPropertyName:[()=>"scaling"]},weights:{length:{type:"number",get:n=>n._numMorphTargets,getTarget:n=>n._babylonTransformNode,getPropertyName:[()=>"influence"]},__array__:{__target__:!0,type:"number",get:(n,e)=>{var t,i;return e!==void 0?(i=(t=n._primitiveBabylonMeshes)==null?void 0:t[0].morphTargetManager)==null?void 0:i.getTarget(e).influence:void 0},getTarget:n=>n._babylonTransformNode,getPropertyName:[()=>"influence"]},type:"number[]",get:(n,e)=>[0],getTarget:n=>n._babylonTransformNode,getPropertyName:[()=>"influence"]},matrix:{type:"Matrix",get:n=>{var e,t,i;return K.Compose((e=n._babylonTransformNode)==null?void 0:e.scaling,(t=n._babylonTransformNode)==null?void 0:t.rotationQuaternion,(i=n._babylonTransformNode)==null?void 0:i.position)},getTarget:n=>n._babylonTransformNode,isReadOnly:!0},globalMatrix:{type:"Matrix",get:n=>{var r,s,a,o,l,c,f;let e=K.Identity(),t=n.parent;for(;t&&t.parent;)t=t.parent;let i=((r=n._babylonTransformNode)==null?void 0:r.position._isDirty)||((a=(s=n._babylonTransformNode)==null?void 0:s.rotationQuaternion)==null?void 0:a._isDirty)||((o=n._babylonTransformNode)==null?void 0:o.scaling._isDirty);if(t){let h=(l=t._babylonTransformNode)==null?void 0:l.computeWorldMatrix(!0).invert();h&&((f=(c=n._babylonTransformNode)==null?void 0:c.computeWorldMatrix(i))==null||f.multiplyToRef(h,e))}else n._babylonTransformNode&&e.copyFrom(n._babylonTransformNode.computeWorldMatrix(i));return e},getTarget:n=>n._babylonTransformNode,isReadOnly:!0},extensions:{EXT_lights_ies:{multiplier:{type:"number",get:n=>{var e,t;return(t=(e=n._babylonTransformNode)==null?void 0:e.getChildren(i=>i instanceof Nr,!0)[0])==null?void 0:t.intensity},getTarget:n=>{var e;return(e=n._babylonTransformNode)==null?void 0:e.getChildren(t=>t instanceof Nr,!0)[0]},set:(n,e)=>{if(e._babylonTransformNode){let t=e._babylonTransformNode.getChildren(i=>i instanceof Nr,!0)[0];t&&(t.intensity=n)}}},color:{type:"Color3",get:n=>{var e,t;return(t=(e=n._babylonTransformNode)==null?void 0:e.getChildren(i=>i instanceof Nr,!0)[0])==null?void 0:t.diffuse},getTarget:n=>{var e;return(e=n._babylonTransformNode)==null?void 0:e.getChildren(t=>t instanceof Nr,!0)[0]},set:(n,e)=>{if(e._babylonTransformNode){let t=e._babylonTransformNode.getChildren(i=>i instanceof Nr,!0)[0];t&&(t.diffuse=n)}}}},KHR_node_visibility:{visible:{type:"boolean",get:n=>n._primitiveBabylonMeshes?n._primitiveBabylonMeshes[0].isVisible:!1,getTarget:()=>{},set:(n,e)=>{e._primitiveBabylonMeshes&&e._primitiveBabylonMeshes.forEach(t=>t.isVisible=n)}}}}}},Zoe={length:{type:"number",get:n=>n.length,getTarget:n=>n.map(e=>e._babylonAnimationGroup),getPropertyName:[()=>"length"]},__array__:{}},Qoe={length:{type:"number",get:n=>n.length,getTarget:n=>n.map(e=>{var t;return(t=e.primitives[0]._instanceData)==null?void 0:t.babylonSourceMesh}),getPropertyName:[()=>"length"]},__array__:{}},Joe={__array__:{__target__:!0,orthographic:{xmag:{componentsCount:2,type:"Vector2",get:n=>{var e,t,i,r;return new Ne((t=(e=n._babylonCamera)==null?void 0:e.orthoLeft)!=null?t:0,(r=(i=n._babylonCamera)==null?void 0:i.orthoRight)!=null?r:0)},set:(n,e)=>{e._babylonCamera&&(e._babylonCamera.orthoLeft=n.x,e._babylonCamera.orthoRight=n.y)},getTarget:n=>n,getPropertyName:[()=>"orthoLeft",()=>"orthoRight"]},ymag:{componentsCount:2,type:"Vector2",get:n=>{var e,t,i,r;return new Ne((t=(e=n._babylonCamera)==null?void 0:e.orthoBottom)!=null?t:0,(r=(i=n._babylonCamera)==null?void 0:i.orthoTop)!=null?r:0)},set:(n,e)=>{e._babylonCamera&&(e._babylonCamera.orthoBottom=n.x,e._babylonCamera.orthoTop=n.y)},getTarget:n=>n,getPropertyName:[()=>"orthoBottom",()=>"orthoTop"]},zfar:{type:"number",get:n=>{var e;return(e=n._babylonCamera)==null?void 0:e.maxZ},set:(n,e)=>{e._babylonCamera&&(e._babylonCamera.maxZ=n)},getTarget:n=>n,getPropertyName:[()=>"maxZ"]},znear:{type:"number",get:n=>{var e;return(e=n._babylonCamera)==null?void 0:e.minZ},set:(n,e)=>{e._babylonCamera&&(e._babylonCamera.minZ=n)},getTarget:n=>n,getPropertyName:[()=>"minZ"]}},perspective:{aspectRatio:{type:"number",get:n=>{var e;return(e=n._babylonCamera)==null?void 0:e.getEngine().getAspectRatio(n._babylonCamera)},getTarget:n=>n,getPropertyName:[()=>"aspectRatio"],isReadOnly:!0},yfov:{type:"number",get:n=>{var e;return(e=n._babylonCamera)==null?void 0:e.fov},set:(n,e)=>{e._babylonCamera&&(e._babylonCamera.fov=n)},getTarget:n=>n,getPropertyName:[()=>"fov"]},zfar:{type:"number",get:n=>{var e;return(e=n._babylonCamera)==null?void 0:e.maxZ},set:(n,e)=>{e._babylonCamera&&(e._babylonCamera.maxZ=n)},getTarget:n=>n,getPropertyName:[()=>"maxZ"]},znear:{type:"number",get:n=>{var e;return(e=n._babylonCamera)==null?void 0:e.minZ},set:(n,e)=>{e._babylonCamera&&(e._babylonCamera.minZ=n)},getTarget:n=>n,getPropertyName:[()=>"minZ"]}}}},$oe={__array__:{__target__:!0,emissiveFactor:{type:"Color3",get:(n,e,t)=>nt(n,e,t).emissiveColor,set:(n,e,t,i)=>nt(e,t,i).emissiveColor.copyFrom(n),getTarget:(n,e,t)=>nt(n,e,t),getPropertyName:[()=>"emissiveColor"]},emissiveTexture:{extensions:{KHR_texture_transform:en("emissiveTexture")}},normalTexture:{scale:{type:"number",get:(n,e,t)=>{var i;return(i=Vf(n,t,"bumpTexture"))==null?void 0:i.level},set:(n,e,t,i)=>{let r=Vf(e,i,"bumpTexture");r&&(r.level=n)},getTarget:(n,e,t)=>nt(n,e,t),getPropertyName:[()=>"level"]},extensions:{KHR_texture_transform:en("bumpTexture")}},occlusionTexture:{strength:{type:"number",get:(n,e,t)=>nt(n,e,t).ambientTextureStrength,set:(n,e,t,i)=>{let r=nt(e,t,i);r&&(r.ambientTextureStrength=n)},getTarget:(n,e,t)=>nt(n,e,t),getPropertyName:[()=>"ambientTextureStrength"]},extensions:{KHR_texture_transform:en("ambientTexture")}},pbrMetallicRoughness:{baseColorFactor:{type:"Color4",get:(n,e,t)=>{let i=nt(n,e,t);return lt.FromColor3(i.albedoColor,i.alpha)},set:(n,e,t,i)=>{let r=nt(e,t,i);r.albedoColor.set(n.r,n.g,n.b),r.alpha=n.a},getTarget:(n,e,t)=>nt(n,e,t),getPropertyName:[()=>"albedoColor",()=>"alpha"]},baseColorTexture:{extensions:{KHR_texture_transform:en("albedoTexture")}},metallicFactor:{type:"number",get:(n,e,t)=>nt(n,e,t).metallic,set:(n,e,t,i)=>{let r=nt(e,t,i);r&&(r.metallic=n)},getTarget:(n,e,t)=>nt(n,e,t),getPropertyName:[()=>"metallic"]},roughnessFactor:{type:"number",get:(n,e,t)=>nt(n,e,t).roughness,set:(n,e,t,i)=>{let r=nt(e,t,i);r&&(r.roughness=n)},getTarget:(n,e,t)=>nt(n,e,t),getPropertyName:[()=>"roughness"]},metallicRoughnessTexture:{extensions:{KHR_texture_transform:en("metallicTexture")}}},extensions:{KHR_materials_anisotropy:{anisotropyStrength:{type:"number",get:(n,e,t)=>nt(n,e,t).anisotropy.intensity,set:(n,e,t,i)=>{nt(e,t,i).anisotropy.intensity=n},getTarget:(n,e,t)=>nt(n,e,t),getPropertyName:[()=>"anisotropy.intensity"]},anisotropyRotation:{type:"number",get:(n,e,t)=>nt(n,e,t).anisotropy.angle,set:(n,e,t,i)=>{nt(e,t,i).anisotropy.angle=n},getTarget:(n,e,t)=>nt(n,e,t),getPropertyName:[()=>"anisotropy.angle"]},anisotropyTexture:{extensions:{KHR_texture_transform:en("anisotropy","texture")}}},KHR_materials_clearcoat:{clearcoatFactor:{type:"number",get:(n,e,t)=>nt(n,e,t).clearCoat.intensity,set:(n,e,t,i)=>{nt(e,t,i).clearCoat.intensity=n},getTarget:(n,e,t)=>nt(n,e,t),getPropertyName:[()=>"clearCoat.intensity"]},clearcoatRoughnessFactor:{type:"number",get:(n,e,t)=>nt(n,e,t).clearCoat.roughness,set:(n,e,t,i)=>{nt(e,t,i).clearCoat.roughness=n},getTarget:(n,e,t)=>nt(n,e,t),getPropertyName:[()=>"clearCoat.roughness"]},clearcoatTexture:{extensions:{KHR_texture_transform:en("clearCoat","texture")}},clearcoatNormalTexture:{scale:{type:"number",get:(n,e,t)=>{var i;return(i=nt(n,e,t).clearCoat.bumpTexture)==null?void 0:i.level},getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).clearCoat.bumpTexture.level=n},extensions:{KHR_texture_transform:en("clearCoat","bumpTexture")}},clearcoatRoughnessTexture:{extensions:{KHR_texture_transform:en("clearCoat","textureRoughness")}}},KHR_materials_dispersion:{dispersion:{type:"number",get:(n,e,t)=>nt(n,e,t).subSurface.dispersion,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).subSurface.dispersion=n}},KHR_materials_emissive_strength:{emissiveStrength:{type:"number",get:(n,e,t)=>nt(n,e,t).emissiveIntensity,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).emissiveIntensity=n}},KHR_materials_ior:{ior:{type:"number",get:(n,e,t)=>nt(n,e,t).indexOfRefraction,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).indexOfRefraction=n}},KHR_materials_iridescence:{iridescenceFactor:{type:"number",get:(n,e,t)=>nt(n,e,t).iridescence.intensity,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).iridescence.intensity=n},iridescenceIor:{type:"number",get:(n,e,t)=>nt(n,e,t).iridescence.indexOfRefraction,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).iridescence.indexOfRefraction=n},iridescenceTexture:{extensions:{KHR_texture_transform:en("iridescence","texture")}},iridescenceThicknessMaximum:{type:"number",get:(n,e,t)=>nt(n,e,t).iridescence.maximumThickness,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).iridescence.maximumThickness=n},iridescenceThicknessMinimum:{type:"number",get:(n,e,t)=>nt(n,e,t).iridescence.minimumThickness,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).iridescence.minimumThickness=n},iridescenceThicknessTexture:{extensions:{KHR_texture_transform:en("iridescence","thicknessTexture")}}},KHR_materials_sheen:{sheenColorFactor:{type:"Color3",get:(n,e,t)=>nt(n,e,t).sheen.color,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).sheen.color.copyFrom(n)},sheenColorTexture:{extensions:{KHR_texture_transform:en("sheen","texture")}},sheenRoughnessFactor:{type:"number",get:(n,e,t)=>nt(n,e,t).sheen.intensity,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).sheen.intensity=n},sheenRoughnessTexture:{extensions:{KHR_texture_transform:en("sheen","thicknessTexture")}}},KHR_materials_specular:{specularFactor:{type:"number",get:(n,e,t)=>nt(n,e,t).metallicF0Factor,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).metallicF0Factor=n,getPropertyName:[()=>"metallicF0Factor"]},specularColorFactor:{type:"Color3",get:(n,e,t)=>nt(n,e,t).metallicReflectanceColor,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).metallicReflectanceColor.copyFrom(n),getPropertyName:[()=>"metallicReflectanceColor"]},specularTexture:{extensions:{KHR_texture_transform:en("metallicReflectanceTexture")}},specularColorTexture:{extensions:{KHR_texture_transform:en("reflectanceTexture")}}},KHR_materials_transmission:{transmissionFactor:{type:"number",get:(n,e,t)=>nt(n,e,t).subSurface.refractionIntensity,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).subSurface.refractionIntensity=n,getPropertyName:[()=>"subSurface.refractionIntensity"]},transmissionTexture:{extensions:{KHR_texture_transform:en("subSurface","refractionIntensityTexture")}}},KHR_materials_diffuse_transmission:{diffuseTransmissionFactor:{type:"number",get:(n,e,t)=>nt(n,e,t).subSurface.translucencyIntensity,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).subSurface.translucencyIntensity=n},diffuseTransmissionTexture:{extensions:{KHR_texture_transform:en("subSurface","translucencyIntensityTexture")}},diffuseTransmissionColorFactor:{type:"Color3",get:(n,e,t)=>nt(n,e,t).subSurface.translucencyColor,getTarget:nt,set:(n,e,t,i)=>{var r;return n&&((r=nt(e,t,i).subSurface.translucencyColor)==null?void 0:r.copyFrom(n))}},diffuseTransmissionColorTexture:{extensions:{KHR_texture_transform:en("subSurface","translucencyColorTexture")}}},KHR_materials_volume:{attenuationColor:{type:"Color3",get:(n,e,t)=>nt(n,e,t).subSurface.tintColor,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).subSurface.tintColor.copyFrom(n)},attenuationDistance:{type:"number",get:(n,e,t)=>nt(n,e,t).subSurface.tintColorAtDistance,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).subSurface.tintColorAtDistance=n},thicknessFactor:{type:"number",get:(n,e,t)=>nt(n,e,t).subSurface.maximumThickness,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).subSurface.maximumThickness=n},thicknessTexture:{extensions:{KHR_texture_transform:en("subSurface","thicknessTexture")}}}}}},ele={KHR_lights_punctual:{lights:{length:{type:"number",get:n=>n.length,getTarget:n=>n.map(e=>e._babylonLight),getPropertyName:[n=>"length"]},__array__:{__target__:!0,color:{type:"Color3",get:n=>{var e;return(e=n._babylonLight)==null?void 0:e.diffuse},set:(n,e)=>{var t;return(t=e._babylonLight)==null?void 0:t.diffuse.copyFrom(n)},getTarget:n=>n._babylonLight,getPropertyName:[n=>"diffuse"]},intensity:{type:"number",get:n=>{var e;return(e=n._babylonLight)==null?void 0:e.intensity},set:(n,e)=>e._babylonLight?e._babylonLight.intensity=n:void 0,getTarget:n=>n._babylonLight,getPropertyName:[n=>"intensity"]},range:{type:"number",get:n=>{var e;return(e=n._babylonLight)==null?void 0:e.range},set:(n,e)=>e._babylonLight?e._babylonLight.range=n:void 0,getTarget:n=>n._babylonLight,getPropertyName:[n=>"range"]},spot:{innerConeAngle:{type:"number",get:n=>{var e;return(e=n._babylonLight)==null?void 0:e.innerAngle},set:(n,e)=>e._babylonLight?e._babylonLight.innerAngle=n:void 0,getTarget:n=>n._babylonLight,getPropertyName:[n=>"innerConeAngle"]},outerConeAngle:{type:"number",get:n=>{var e;return(e=n._babylonLight)==null?void 0:e.angle},set:(n,e)=>e._babylonLight?e._babylonLight.angle=n:void 0,getTarget:n=>n._babylonLight,getPropertyName:[n=>"outerConeAngle"]}}}}},EXT_lights_area:{lights:{length:{type:"number",get:n=>n.length,getTarget:n=>n.map(e=>e._babylonLight),getPropertyName:[n=>"length"]},__array__:{__target__:!0,color:{type:"Color3",get:n=>{var e;return(e=n._babylonLight)==null?void 0:e.diffuse},set:(n,e)=>{var t;return(t=e._babylonLight)==null?void 0:t.diffuse.copyFrom(n)},getTarget:n=>n._babylonLight,getPropertyName:[n=>"diffuse"]},intensity:{type:"number",get:n=>{var e;return(e=n._babylonLight)==null?void 0:e.intensity},set:(n,e)=>e._babylonLight?e._babylonLight.intensity=n:void 0,getTarget:n=>n._babylonLight,getPropertyName:[n=>"intensity"]},size:{type:"number",get:n=>{var e;return(e=n._babylonLight)==null?void 0:e.height},set:(n,e)=>e._babylonLight?e._babylonLight.height=n:void 0,getTarget:n=>n._babylonLight,getPropertyName:[n=>"size"]},rect:{aspect:{type:"number",get:n=>{var e,t;return((e=n._babylonLight)==null?void 0:e.width)/((t=n._babylonLight)==null?void 0:t.height)},set:(n,e)=>e._babylonLight?e._babylonLight.width=n*e._babylonLight.height:void 0,getTarget:n=>n._babylonLight,getPropertyName:[n=>"aspect"]}}}}},EXT_lights_ies:{lights:{length:{type:"number",get:n=>n.length,getTarget:n=>n.map(e=>e._babylonLight),getPropertyName:[n=>"length"]}}},EXT_lights_image_based:{lights:{length:{type:"number",get:n=>n.length,getTarget:n=>n.map(e=>e._babylonTexture),getPropertyName:[n=>"length"]},__array__:{__target__:!0,intensity:{type:"number",get:n=>{var e;return(e=n._babylonTexture)==null?void 0:e.level},set:(n,e)=>{e._babylonTexture&&(e._babylonTexture.level=n)},getTarget:n=>n._babylonTexture},rotation:{type:"Quaternion",get:n=>{var e;return n._babylonTexture&&ze.FromRotationMatrix((e=n._babylonTexture)==null?void 0:e.getReflectionTextureMatrix())},set:(n,e)=>{var t;e._babylonTexture&&((t=e._babylonTexture.getScene())!=null&&t.useRightHandedSystem||(n=ze.Inverse(n)),K.FromQuaternionToRef(n,e._babylonTexture.getReflectionTextureMatrix()))},getTarget:n=>n._babylonTexture}}}}};tX={cameras:Joe,nodes:qoe,materials:$oe,extensions:ele,animations:Zoe,meshes:Qoe}});function eD(...n){let e=t=>!!t&&typeof t=="object";return n.reduce((t,i)=>{let r=Object.keys(i);for(let s of r){let a=t[s],o=i[s];Array.isArray(a)&&Array.isArray(o)?t[s]=a.concat(...o):e(a)&&e(o)?t[s]=eD(a,o):t[s]=o}return t},{})}var iX=C(()=>{});var gg,rX=C(()=>{gg=class{constructor(e){this._factory=e}get value(){return this._factory&&(this._value=this._factory(),this._factory=void 0),this._value}}});var Lx,nX=C(()=>{Ve();_f();Lx=class{get currentFrame(){return this._currentFrame}get weight(){return this._weight}get currentValue(){return this._currentValue}get targetPath(){return this._targetPath}get target(){return this._currentActiveTarget}get isAdditive(){return this._host&&this._host.isAdditive}constructor(e,t,i,r){if(this._events=new Array,this._currentFrame=0,this._originalValue=new Array,this._originalBlendValue=null,this._offsetsCache={},this._highLimitsCache={},this._stopped=!1,this._blendingFactor=0,this._currentValue=null,this._currentActiveTarget=null,this._directTarget=null,this._targetPath="",this._weight=1,this._absoluteFrameOffset=0,this._previousElapsedTime=0,this._yoyoDirection=1,this._previousAbsoluteFrame=0,this._targetIsArray=!1,this._coreRuntimeAnimation=null,this._animation=t,this._target=e,this._scene=i,this._host=r,this._activeTargets=[],t._runtimeAnimations.push(this),this._animationState={key:0,repeatCount:0,loopMode:this._getCorrectLoopMode()},this._animation.dataType===ft.ANIMATIONTYPE_MATRIX&&(this._animationState.workValue=K.Zero()),this._keys=this._animation.getKeys(),this._minFrame=this._keys[0].frame,this._maxFrame=this._keys[this._keys.length-1].frame,this._minFrame!==0){let a={frame:0,value:this._keys[0].value};this._keys.splice(0,0,a)}if(this._target instanceof Array){let a=0;for(let o of this._target)this._preparePath(o,a),this._getOriginalValues(a),a++;this._targetIsArray=!0}else this._preparePath(this._target),this._getOriginalValues(),this._targetIsArray=!1,this._directTarget=this._activeTargets[0];let s=t.getEvents();if(s&&s.length>0)for(let a of s)this._events.push(a._clone());this._enableBlending=e&&e.animationPropertiesOverride?e.animationPropertiesOverride.enableBlending:this._animation.enableBlending}_preparePath(e,t=0){let i=this._animation.targetPropertyPath;if(i.length>1){let r=e;for(let s=0;s-1&&this._animation.runtimeAnimations.splice(e,1)}setValue(e,t){if(this._targetIsArray){for(let i=0;ii[i.length-1].frame&&(e=i[i.length-1].frame);let r=this._events;if(r.length)for(let a=0;athis._maxFrame)&&(t=this._minFrame),(ithis._maxFrame)&&(i=this._maxFrame),d=i-t;let m,_=e*(o.framePerSecond*s)/1e3+this._absoluteFrameOffset,p=0,g=!1,v=r&&this._animationState.loopMode===ft.ANIMATIONLOOPMODE_YOYO;if(v){let x=(_-t)/d,A=Math.sin(x*Math.PI);_=Math.abs(A)*d+t;let T=A>=0?1:-1;this._yoyoDirection!==T&&(g=!0),this._yoyoDirection=T}if(this._previousElapsedTime=e,this._previousAbsoluteFrame=_,!r&&i>=t&&(_>=d&&s>0||_<=0&&s<0))c=!1,p=o.evaluate(i);else if(!r&&t>=i&&(_<=d&&s<0||_>=0&&s>0))c=!1,p=o.evaluate(t);else if(this._animationState.loopMode!==ft.ANIMATIONLOOPMODE_CYCLE){let x=i.toString()+t.toString();if(!this._offsetsCache[x]){this._animationState.repeatCount=0,this._animationState.loopMode=ft.ANIMATIONLOOPMODE_CYCLE;let A=o._interpolate(t,this._animationState),E=o._interpolate(i,this._animationState);switch(this._animationState.loopMode=this._getCorrectLoopMode(),o.dataType){case ft.ANIMATIONTYPE_FLOAT:this._offsetsCache[x]=E-A;break;case ft.ANIMATIONTYPE_QUATERNION:this._offsetsCache[x]=E.subtract(A);break;case ft.ANIMATIONTYPE_VECTOR3:this._offsetsCache[x]=E.subtract(A);break;case ft.ANIMATIONTYPE_VECTOR2:this._offsetsCache[x]=E.subtract(A);break;case ft.ANIMATIONTYPE_SIZE:this._offsetsCache[x]=E.subtract(A);break;case ft.ANIMATIONTYPE_COLOR3:this._offsetsCache[x]=E.subtract(A);break;default:break}this._highLimitsCache[x]=E}p=this._highLimitsCache[x],m=this._offsetsCache[x]}if(m===void 0)switch(o.dataType){case ft.ANIMATIONTYPE_FLOAT:m=0;break;case ft.ANIMATIONTYPE_QUATERNION:m=GC;break;case ft.ANIMATIONTYPE_VECTOR3:m=kC;break;case ft.ANIMATIONTYPE_VECTOR2:m=WC;break;case ft.ANIMATIONTYPE_SIZE:m=HC;break;case ft.ANIMATIONTYPE_COLOR3:m=zC;break;case ft.ANIMATIONTYPE_COLOR4:m=XC;break}if(this._host&&this._host.syncRoot){let x=this._host.syncRoot,A=(x.masterFrame-x.fromFrame)/(x.toFrame-x.fromFrame);f=t+d*A}else _>0&&t>i||_<0&&t0&&this.currentFrame>f||s<0&&this.currentFrame0?0:o.getKeys().length-1}this._currentFrame=f,this._animationState.repeatCount=d===0?0:_/d>>0,this._animationState.highLimitValue=p,this._animationState.offsetValue=m}let u=o._interpolate(f,this._animationState);if(this.setValue(u,a),h.length){for(let m=0;m=0&&f>=h[m].frame&&h[m].frame>=t||d<0&&f<=h[m].frame&&h[m].frame<=t){let _=h[m];_.isDone||(_.onlyOnce&&(h.splice(m,1),m--),_.isDone=!0,_.action(f))}}return c||(this._stopped=!0),c}}});function tle(n){if(n.totalWeight===0&&n.totalAdditiveWeight===0)return n.originalValue;let e=1,t=Z.Vector3[0],i=Z.Vector3[1],r=Z.Quaternion[0],s=0,a=n.animations[0],o=n.originalValue,l,c=!1;if(n.totalWeight<1)l=1-n.totalWeight,o.decompose(i,r,t);else{if(s=1,e=n.totalWeight,l=a.weight/e,l==1)if(n.totalAdditiveWeight)c=!0;else return a.currentValue;a.currentValue.decompose(i,r,t)}if(!c){i.scaleInPlace(l),t.scaleInPlace(l),r.scaleInPlace(l);for(let h=s;h0?l:-l,r),u.scaleAndAddToRef(l,t)}r.normalize()}for(let h=0;h0)r.copyFrom(i);else if(n.animations.length===1){if(ze.SlerpToRef(i,t.currentValue,Math.min(1,n.totalWeight),r),n.totalAdditiveWeight===0)return r}else if(n.animations.length>1){let s=1,a,o;if(n.totalWeight<1){let c=1-n.totalWeight;a=[],o=[],a.push(i),o.push(c)}else{if(n.animations.length===2&&(ze.SlerpToRef(n.animations[0].currentValue,n.animations[1].currentValue,n.animations[1].weight/n.totalWeight,e),n.totalAdditiveWeight===0))return e;a=[],o=[],s=n.totalWeight}for(let c=0;c=l&&v.frame<=c&&(s?(A=v.value.clone(),m?(x=A.getTranslation(),A.setTranslation(x.scaleInPlace(_))):p&&a?(x=A.getTranslation(),A.setTranslation(x.multiplyInPlace(a))):A=v.value):A=v.value,g.push({frame:v.frame+r,value:A}));return this.animations[0].createRange(i,l+r,c+r),!0}),n&&(n.prototype._animate=function(t){if(!this.animationsEnabled)return;let i=fr.Now;if(!this._animationTimeLast){if(this._pendingData.length>0)return;this._animationTimeLast=i}this.deltaTime=t!==void 0?t:this.useConstantAnimationDeltaTime?16:(i-this._animationTimeLast)*this.animationTimeScale,this._animationTimeLast=i;let r=this._activeAnimatables;if(r.length===0)return;this._animationTime+=this.deltaTime;let s=this._animationTime;for(let a=0;at.playOrder-i.playOrder)},n.prototype.beginWeightedAnimation=function(t,i,r,s=1,a,o=1,l,c,f,h,d=!1){let u=this.beginAnimation(t,i,r,a,o,l,c,!1,f,h,d);return u.weight=s,u},n.prototype.beginAnimation=function(t,i,r,s,a=1,o,l,c=!0,f,h,d=!1){if(a<0){let m=i;i=r,r=m,a=-a}i>r&&(a=-a),c&&this.stopAnimation(t,void 0,f),l||(l=new vg(this,t,i,r,s,a,o,void 0,h,d));let u=f?f(t):!0;if(t.animations&&u&&l.appendAnimations(t,t.animations),t.getAnimatables){let m=t.getAnimatables();for(let _=0;_s&&(o=-o),new vg(this,t,r,s,a,o,l,i,c,f)},n.prototype.beginDirectHierarchyAnimation=function(t,i,r,s,a,o,l,c,f,h=!1){let d=t.getDescendants(i),u=[];u.push(this.beginDirectAnimation(t,r,s,a,o,l,c,f,h));for(let m of d)u.push(this.beginDirectAnimation(m,r,s,a,o,l,c,f,h));return u},n.prototype.getAnimatableByTarget=function(t){for(let i=0;i{hi();nX();_f();Cl();Ve();vg=class n{get syncRoot(){return this._syncRoot}get masterFrame(){return this._runtimeAnimations.length===0?0:this._runtimeAnimations[0].currentFrame}get weight(){return this._weight}set weight(e){if(e===-1){this._weight=-1;return}this._weight=Math.min(Math.max(e,0),1)}get speedRatio(){return this._speedRatio}set speedRatio(e){for(let t=0;t-1&&(this._scene._activeAnimatables.splice(t,1),this._scene._activeAnimatables.push(this))}return this}getAnimations(){return this._runtimeAnimations}appendAnimations(e,t){for(let i=0;i{this.onAnimationLoopObservable.notifyObservers(this),this.onAnimationLoop&&this.onAnimationLoop()},this._runtimeAnimations.push(s)}}getAnimationByTargetProperty(e){let t=this._runtimeAnimations;for(let i=0;i-1){let a=this._runtimeAnimations;for(let o=a.length-1;o>=0;o--){let l=a[o];e&&l.animation.name!=e||t&&!t(l.target)||(l.dispose(),a.splice(o,1))}a.length==0&&(i||this._scene._activeAnimatables.splice(s,1),r||this._raiseOnAnimationEnd())}}else{let s=this._scene._activeAnimatables.indexOf(this);if(s>-1){i||this._scene._activeAnimatables.splice(s,1);let a=this._runtimeAnimations;for(let o=0;o{this.onAnimationEndObservable.add(()=>{e(this)},void 0,void 0,this,!0)})}_animate(e){if(this._paused)return this.animationStarted=!1,this._pausedDelay===null&&(this._pausedDelay=e),!0;if(this._localDelayOffset===null?(this._localDelayOffset=e,this._pausedDelay=null):this._pausedDelay!==null&&(this._localDelayOffset+=e-this._pausedDelay,this._pausedDelay=null),this._manualJumpDelay!==null&&(this._localDelayOffset+=this.speedRatio<0?-this._manualJumpDelay:this._manualJumpDelay,this._manualJumpDelay=null,this._frameToSyncFromJump=null),this._goToFrame=null,!n.ProcessPausedAnimatables&&this._weight===0&&this._previousWeight===0)return!0;this._previousWeight=this._weight;let t=!1,i=this._runtimeAnimations,r;for(r=0;r{yx();tD();ps();tD();sX(Qt,Ca)});var oX={};et(oX,{AnimationGroup:()=>iD,TargetedAnimation:()=>Ox});var Ox,iD,lX=C(()=>{_f();hi();Pi();tf();aX();OT();Ox=class{getClassName(){return"TargetedAnimation"}constructor(e){this.parent=e,this.uniqueId=zl.UniqueId}serialize(){let e={};return e.animation=this.animation.serialize(),e.targetId=this.target.id,e.targetUniqueId=this.target.uniqueId,e}},iD=class n{get mask(){return this._mask}set mask(e){this._mask!==e&&(this._mask=e,this.syncWithMask(!0))}syncWithMask(e=!1){if(!this.mask&&!e){this._numActiveAnimatables=this._targetedAnimations.length;return}this._numActiveAnimatables=0;for(let t=0;t0)){for(let t=0;ta&&(a=l.to);let o=new n(e[0].name+"_merged",e[0]._scene,r);for(let l of e){i&&l.normalize(s,a);for(let c of l.targetedAnimations)o.addTargetedAnimation(c.animation,c.target);t&&l.dispose()}return o}getScene(){return this._scene}constructor(e,t=null,i=-1,r=0){this.name=e,this._targetedAnimations=new Array,this._animatables=new Array,this._from=Number.MAX_VALUE,this._to=-Number.MAX_VALUE,this._speedRatio=1,this._loopAnimation=!1,this._isAdditive=!1,this._weight=-1,this._playOrder=0,this._enableBlending=null,this._blendingSpeed=null,this._numActiveAnimatables=0,this._shouldStart=!0,this._parentContainer=null,this.onAnimationEndObservable=new ee,this.onAnimationLoopObservable=new ee,this.onAnimationGroupLoopObservable=new ee,this.onAnimationGroupEndObservable=new ee,this.onAnimationGroupPauseObservable=new ee,this.onAnimationGroupPlayObservable=new ee,this.metadata=null,this._mask=null,this._animationLoopFlags=[],this._scene=t||Le.LastCreatedScene,this._weight=i,this._playOrder=r,this.uniqueId=this._scene.getUniqueId(),this._scene.addAnimationGroup(this)}addTargetedAnimation(e,t){let i=new Ox(this);i.animation=e,i.target=t;let r=e.getKeys();return this._from>r[0].frame&&(this._from=r[0].frame),this._to-1;t--)this._targetedAnimations[t].animation===e&&this._targetedAnimations.splice(t,1)}normalize(e=null,t=null){e==null&&(e=this._from),t==null&&(t=this._to);for(let i=0;ie){let l={frame:e,value:a.value,inTangent:a.inTangent,outTangent:a.outTangent,interpolation:a.interpolation};s.splice(0,0,l)}if(o.frame{this.onAnimationLoopObservable.notifyObservers(t),!this._animationLoopFlags[i]&&(this._animationLoopFlags[i]=!0,this._animationLoopCount++,this._animationLoopCount===this._numActiveAnimatables&&(this.onAnimationGroupLoopObservable.notifyObservers(this),this._animationLoopCount=0,this._animationLoopFlags.length=0))}}start(e=!1,t=1,i,r,s){if(this._isStarted||this._targetedAnimations.length===0)return this;this._loopAnimation=e,this._shouldStart=!1,this._animationLoopCount=0,this._animationLoopFlags.length=0;for(let a=0;a{this.onAnimationEndObservable.notifyObservers(o),this._checkAnimationGroupEnded(l)},this._processLoop(l,o,a),this._animatables.push(l)}return this.syncWithMask(),this._scene.sortActiveAnimatables(),this._speedRatio=t,this._isStarted=!0,this._isPaused=!1,this.onAnimationGroupPlayObservable.notifyObservers(this),this}pause(){if(!this._isStarted)return this;this._isPaused=!0;for(let e=0;e0?this._scene._activeAnimatables[i++]=s:e&&this._checkAnimationGroupEnded(s,e)}return this._scene._activeAnimatables.length=i,this._isStarted=!1,this}setWeightForAllAnimatables(e){for(let t=0;t-1&&this._parentContainer.animationGroups.splice(e,1),this._parentContainer=null}this.onAnimationEndObservable.clear(),this.onAnimationGroupEndObservable.clear(),this.onAnimationGroupPauseObservable.clear(),this.onAnimationGroupPlayObservable.clear(),this.onAnimationLoopObservable.clear(),this.onAnimationGroupLoopObservable.clear()}_checkAnimationGroupEnded(e,t=!1){let i=this._animatables.indexOf(e);i>-1&&this._animatables.splice(i,1),this._animatables.length===this._targetedAnimations.length-this._numActiveAnimatables&&(this._isStarted=!1,t||this.onAnimationGroupEndObservable.notifyObservers(this),this._animatables.length=0)}clone(e,t,i=!1,r=!1){let s=new n(e||this.name,this._scene,this._weight,this._playOrder);s._from=this.from,s._to=this.to,s._speedRatio=this.speedRatio,s._loopAnimation=this.loopAnimation,s._isAdditive=this.isAdditive,s._enableBlending=this.enableBlending,s._blendingSpeed=this.blendingSpeed,s.metadata=this.metadata,s.mask=this.mask;for(let a of this._targetedAnimations)s.addTargetedAnimation(i?a.animation.clone(r):a.animation,t?t(a.target):a.target);return s}serialize(){let e={};e.name=this.name,e.from=this.from,e.to=this.to,e.speedRatio=this.speedRatio,e.loopAnimation=this.loopAnimation,e.isAdditive=this.isAdditive,e.weight=this.weight,e.playOrder=this.playOrder,e.enableBlending=this.enableBlending,e.blendingSpeed=this.blendingSpeed,e.targetedAnimations=[];for(let t=0;t_[0].frame&&(c=_[0].frame),f<_[_.length-1].frame&&(f=_[_.length-1].frame)}o._from=c,o._to=f}return o}static ClipKeys(e,t,i,r,s){let a=e.clone(r||e.name);return n.ClipKeysInPlace(a,t,i,s)}static ClipKeysInPlace(e,t,i,r){return n.ClipInPlace(e,t,i,r,!1)}static ClipFrames(e,t,i,r,s){let a=e.clone(r||e.name);return n.ClipFramesInPlace(a,t,i,s)}static ClipFramesInPlace(e,t,i,r){return n.ClipInPlace(e,t,i,r,!0)}static ClipInPlace(e,t,i,r,s=!1){let a=Number.MAX_VALUE,o=-Number.MAX_VALUE,l=e.targetedAnimations;for(let c=0;c=t&&_<=i||s&&p.frame>=t&&p.frame<=i){let g={frame:p.frame,value:p.value.clone?p.value.clone():p.value,inTangent:p.inTangent,outTangent:p.outTangent,interpolation:p.interpolation,lockedTangent:p.lockedTangent};m===Number.MAX_VALUE&&(m=g.frame),g.frame-=m,u.push(g)}}if(u.length===0){l.splice(c,1),c--;continue}a>u[0].frame&&(a=u[0].frame),oEg,TransformNodeAnimationPropertyInfo:()=>Bm,WeightAnimationPropertyInfo:()=>Nx,getQuaternion:()=>cX,getVector3:()=>rD,getWeights:()=>fX});function rD(n,e,t,i){return b.FromArray(e,t).scaleInPlace(i)}function cX(n,e,t,i){return ze.FromArray(e,t).scaleInPlace(i)}function fX(n,e,t,i){let r=new Array(n._numMorphTargets);for(let s=0;s{_f();Ve();$P();Eg=class{constructor(e,t,i,r){this.type=e,this.name=t,this.getValue=i,this.getStride=r}_buildAnimation(e,t,i){let r=new ft(e,this.name,t,this.type);return r.setKeys(i,!0),r}},Bm=class extends Eg{buildAnimations(e,t,i,r){let s=[];return s.push({babylonAnimatable:e._babylonTransformNode,babylonAnimation:this._buildAnimation(t,i,r)}),s}},Nx=class extends Eg{buildAnimations(e,t,i,r){let s=[];if(e._numMorphTargets)for(let a=0;a({frame:l.frame,inTangent:l.inTangent?l.inTangent[a]:void 0,value:l.value[a],outTangent:l.outTangent?l.outTangent[a]:void 0,interpolation:l.interpolation})),!0),e._primitiveBabylonMeshes){for(let l of e._primitiveBabylonMeshes)if(l.morphTargetManager){let c=l.morphTargetManager.getTarget(a),f=o.clone();c.animations.push(f),s.push({babylonAnimatable:c,babylonAnimation:f})}}}return s}};_g("/nodes/{}/translation",[new Bm(ft.ANIMATIONTYPE_VECTOR3,"position",rD,()=>3)]);_g("/nodes/{}/rotation",[new Bm(ft.ANIMATIONTYPE_QUATERNION,"rotationQuaternion",cX,()=>4)]);_g("/nodes/{}/scale",[new Bm(ft.ANIMATIONTYPE_VECTOR3,"scaling",rD,()=>3)]);_g("/nodes/{}/weights",[new Nx(ft.ANIMATIONTYPE_FLOAT,"influence",fX,n=>n._numMorphTargets)])});var nle,sle,ale,ole,nD,Fx,sD,uX,wx=C(()=>{Gr();XM();nle="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAgAElEQVR42u29yY5tWXIlZnbuiSaTbZFUkZRKrCKhElASQA0EoQABgn6hJvoXzfUP+gP9hWb6Bg00IgRoQJaKqUxmZmTEe8/v0uB2u7Fm2T7HIyIrnz88uPvt3f2a2WrMbOvf/u3PvvzP/sUf/N6//i8vf/lv/3v5H//d//Sb//Uq/5u8yf8hV/m/5Cp/L1f5hVzlG7nKJ7mKyJuIXN/hPwqXI/g++zq6rPI5u8z+WqfLre+zy7PrVv9L8brsMiGvk8XLmM/sdfHXal4e3ad6GXPdyu2ij8u/+uv/5cuf/OSLfdtEfvUr+dnf/d0X//t3H/7bf/hP//N/928h/0Yg/4VA/kogfyGQP5Wr/IFAvhbIlwK5CGQTPP+9z5uPeePJSW+yo2+s/GtN30Rnv1E+f5zxof9R/lSXv/nr//mrr3+i+5dfyX7ZZQP07Tffys//8R/l/9TtX7790T/7r/8G8pdy+/8XAvnnAvkzgfwzgfyxQP5AIL8vkJ8K5KsmMVzu1U7p5PA5AXxOAJ8TwPf7sX/51ZeXfcemqnp9w/W77/S7X/6T/vzf/7383RWCX3/z05/9i3/13/0PX//eX/2FyP8tIv+PiPy9iPy/IvIzEfm5iPxCRH4lIt/c/393//9BRD6KyKf7f488fP74/PH544dJAF9cLl98IZfLBZtuqterXr/7Dt9982v95S9+Lv+gF/3i7Spv/8lf/vnf/vGf/dF/JfKnIvLnIvLvReQ/NEngn0TklyLy6/v/34jIt00iGJOBlxAsdvv54/PH5493SQCXy9t2ueh2ueimKorrFbjq9eNH+fDtb+TXv/ol/vHyhX4Fxfbx7euPf/Lnf/PfiPyeiPyhiPxxkwB+fk8AvxzQgJcIrGTwFsiAEXH4/PH54/PHUgLY7whgu2C7bLqpQgHB2xvePn6SDx8+6G9+84384vKF/IPu8iVU9Y/+7C/+jWxffiHytYj8VER+X0T+oEEBvxqQwCMJeIngo5EI3goIwVMIPn98/vj8ESaAbbtu2ybbvl8u2ybbdtluSECA65u8ffqIDx8+6G++/VZ/efkV/sO261dQXP7wT/7kX8vl8qXIFyLylbySwe/dE0CLAr65B/9vGn0gQwRMMqgmhM/J4fPH548eAezbZd/lsm3YtssNAYiqiogAAkCvb5/k46cP8u2HD/rrb7+R/2/b9Wu9yJe//8d/9Ney6S5yEZFdRL68/38khG/uKOCnAwoYkcCoEXwkEgGDDq7CeQfyOTl8/vhd1QCum26ybZtu2yabbrKpQvXue1yvuF6v+vbpTT5+/CDffviAX1++1V9sO77WXb/66R/+4V/dgkbllQi+aBLBV/dE8LWRALwkYCWCNyMZXElkwLTMeMkga/P4/PH547ccAVwuctkvdxSw6bbdtYDbTfSZBN7e8PHTR/3u4wf55vKd/nL7DX6mu3791U9//5+/gkNFZGuSgZUQvnKowKgLWLTAQgRtEniTuEfwaELw0MJvf3LQzynud+53uG+X6y3gN9kul+2y6XVT1U27JCDAFVc8ksAn/e7jR/nN5YP+avtWfq6Xy9f7Vz/9w1dgRYngiyYhfNkkgzYBWHTg44AEMmqQUYQKOmDaiCIa8TmsfmzB+DnZDQjgcpGLbti2y3bZHjRAdRMVvb/dcYU8kcDbPQlsH/CrbddfbF98+RPZfvLFnAQeieCRDC5DMvju/vmD4JkEvjRQgKULeGggowdHkAHTYxihg89vu88I5UeGAPSOAFTlrgPopiqbKPSmCKreUoAAkCcSePukHz590m8vH+WbD9/JP335k6/+tA86KxFchv8jMvhiogE4JQm8XhfKqOAqx5qRPyeGzx8/cgSwbXcUoLJtim27C4Oi93+4v6VxQwKAvl2v+Hj9pB8+fZJvt4/yzfbF9lPdv/wJnsE2BogmyeCRED40tGFvksIXiSbgiYSRRpDNDZ6BDI6ghM+J4fPHeyKAO+zX7cb9t4tedMMNAQju5V+f1uAtBSiu1zsduMrHy5t8ePsk3376KN98sX/xE5FPAnm7/782o0DiUINXMkCXCB7/P94/e87AWUmARQWVvgMuKej9t1RLBp+Tw+ePgwngsutFFdu26WXbbl+rSvdfbnqAiuA23QcBgCugV1zl7e1NPm5v+LC96XfbJ/1W9y++fgXjA3bDYXV+MuhRwSPwL3JLMFYC+HS/LU8HYrGwIhwyNOF12SvgM4SgztdifP85MXz+KGsA2C6X7aJ6bXSAOwrY5OYIqGy3d5uq4P5GhABXuV6veLvRAf10fZMPb2/y3b7vX7+g+9v98/WOBq7GG7RNAlYy+Dgkhhb+Xxp0sE8IAC4SGAP/TbgVJK/PoJPBnAiwPKxsXfbbnRg+i3s/JAK4Q/4b9NfLtomBAqCickMBjy7BuywAUVyv8na94tMjCVzf9KNcLl/0SeA6oAEYb1i9g+FtSALb/bKL8/+t+wxXFMyswqiHoK4ToIgKqslgpg1qUC0QoYbvJZg/B/q5v4szHmPX7YEAsD0CX25OwEUVm9xag1+agKg+nxQArnKjAtDr9U0+Xd/k4/UqH7bL5YsewrcBBiMJZPRAp6TwQgWfjM9vgRbgUYGL8AvLWH2gqhesCokeUmCSwPsnhs8fP2YNYMO2XeSmAWxy2VQaXeDmDIhApf33rD4PTUCuV+DtCn27XuXT5ir8VmCJ2G5BpBM8/r/dEcJb8/0lEQMtJHA5TAlqNuLRhJChhEpSqFabH3di+G1AGj+W1/dyAR4IYJNNnuLf6+tWC9CHHiAtFhAIFLjK2/Uqn65X+SS67aK+3QeTDoy/IG2ogQ7fb/dAtz5vBgrYGqrwNtCHsVfgIvwK07OTQBURVNCBFpKCOjqCHn5L/67TgTN+fpySAC56nwSUi256kXsSuFGAVyLoUIDo8/Pz7fdoErr/v17lk162HbgHvFpIYDfoAJJfW4sGPjkU4VNAF8ZEcLmLhdc7kljdY1y1Dq9yLiI4IiRqcLujb138KIPn80ejATwRwIbtBvn1cqv+2J78/5EI5N4cJA8qIPcmwRsKAHDF9WYP6mV7VmrgLuTpxYTcMEW0LAmoQxFsuvAI8tv/a/C5fV2ZMMiKg++FCM7RDPRu8ebWY7VG6VJi+Bzk35MI2LsAckMAgwvQ0gC5DQjd3ABg2HQLAPpEAlZ1Bu7VV7MGHDFRAbo3VKsTbAY9sPWC/uvx86gBbDK3D1eEQS8pbAeSgSwmhepnJb6uBv/o/PzHLzxWA/X7TH77De5j6AGQi6o0CUGfCOD2X7cXAlCFQABtEsGLDtxuOyQB2UTQBKZe5GUPXgkUYCUAbZJRhBDeuq8xBf+bgwbehDm+BFQi2IJksOocvA8ysIMfxluVcRsY/eB3JzH8GFDAXQO48X/dcIf9jyDHptIigDsFkEe066tBSETQUYF7ElDdYEBytN4+rk9UcBPfrKaZqFHWcw3i4J8/X4ev2//bSXqAhwTay6OEIPLD2Ipt8OtAGzxkwLw9WVFRjTc/qC6H3+YK/b1oAA0KuOizHfieCLaHHiAb5NYTIC9EMEbZrVEQt1xwhVy1UfBh8PUOquMizwaap3tQXfY5B//tea/NZdfhsvbz+PURQTDSGWB87VX/7WSd4KxjUqrIgE0IUkoKGnhIvwvawpGf6eECXJ7tv4qbA7DJgwpsKthEmmYgfaAAffYF3HLxo0vwNjJ0SwRWMG4db4eh1gPNm18vQ+us/0eGmxDemu/fnM/X4evq/8342ksGHgLY5LyT/zg0wM8lcMjgGFXwqIOVFJBQw99eCvF9oZL9Mfl3QwAvIXDsBRC9R+fz8x0FPBLB0xJEpwUobrfAkARgIAF41h3wQgP6QAmX5E/7eI43IxGwwf/moIkRyWRJQIPgt9CA9b39nzt4bYUWjAlCjWDPgv8IEjgLJfzuaAsrv9VdVG4OwOXW/fdoA35qAdL0BDwvf6AAUVHd8LIEu94A3K+Q+2YxaB84MOH62P//qoo38fCRDERE2zf0JfmDa+MieElAjcDPKz+mRKCOtdgGtXaBjgNJ4H2owSpNeAW/rRH4CaHSpMwnBYYycjgSJwfie9CR6mPu20Uv8kABF206AvXlBMiIBPSlB9wjBW1fwEuSb94296VCqgMaGCt/G1BbExi3IG+r3a3J6P48Gv/J0YmEYoiGY7V/SxwFCwGoE/xa0AJ0CEiV9QPCJb1OJ5F1VTjEY2/MO9AEJvj1BJTQpqLfTlGwjABuzT962e4IoKnyrdh3+/6mzDVJ4PHOxj0JqGKoy20+wBMN6D1gLWi9NQHfVP5MEEPzjGYy8BMAOnTAJgEr8HUIejRo5xrA5xkR5AngmiSHs+zDDAmMgWzTg55GSJEmHE8IvWPAoYTfhWak/Wn/bQ0CGLSAjv83SUEfKp5q24LXuQICpzrjrgWoza8xVE00CQCORdhMJuTUT/rjuls0gO4Iby8BIEgK6gS7BsGuTtDrScH/fR68biUHNVGBnxjeNyHEvQe/ve3LZQqgG3rof6cEclsNflG9J4KtaQ8WHcVBHS1BtHE4QP9OBMS98mpbKTeDW7dJwRsnHpMBTFJpV4I+b0kY/NqInVFSyBLANbnMSgBM8F+Fqfxq/h657/Up+GaBnwV9hRqc9bZ/vA6vu+T9E8KPJWns94UfTeCj2QXwCHS9dNL8Xf3Ho/rfewSeFODGDV69AU0y6NFAE1DP3qK++rdB7/1HRxf86gT376zOr99T/h/ioBiXWQkgQgVeIrCC/WomhDmQK+hASI2ARQZKooHMLdCJwGEBBXC3+uERwg+VOHZ9ioAt9H80AI06wGgJ3nQA3BoCut6AhxYwgcPOFnxuFnrphk+NIKIGrWPQtgz3b0i7Y6D5rs1GKqTop0nQX52vmQC4BkjA+r4a7Kx9WLENGeegkhSETBCrNXIMdi/444Rw1n6E96ry7OPuj8UfLxtQ78NA2iSBbg7gIiIbdDLsb5agPhLC3RkYKv8NDbS2YGsatNRAG2oQwf9ZIOydgy1MAzBkAw8UwEEIDzSAqdPQ6za0PkeJAMH3Z0wXniUSZoHvBXU2mcjQgv56TedIKglCpIoQfgwCIjOytd8WgN0bfxoR8Fn9Gx0Aj5Zgq0lIZbsH/ibSJoFnS+C98g9ooHEELI3gliy25yONIiE6pb0NfBlyNEYyENoodkKwgl6I6s8kARgJ4ZoEfuYWHLEJa0LhSBXm7kImGeSfVdoJ1DO2G7WXsehAptupSOoyrCSF904k+6vt98X/ZcM98Hsd4JYIXhQAIg3/f9AAUYhsLQKAtkHVBnzjCKhOoYl2ym+iBtvzDzQ2DLXJ4PUmbJHAVnBQX4jkxfvHhNDqAdHXGQJgv0aSDGItgOseHIU+K9hXnIJzkoGlEKzNHagTdJ6VWEUH4iCKH4fd2AwDPaYBm4Wgng4gQ9V/CoGiuNmD04AQtNGMGzSAAQ2I2pzfogY9LRh7BrbOh4+D30sAencljFu2CUFrwY8UAWRfWwGvVOVfbx2uIILM0pwDv082dUTw8hYs8L+uIWiHGpWgClnAa1lMPJogovvvbePPs/q3Xr++kgCsfgB5oQF9WYKPJqEn6G+OE3i5AqouF59FQOmahQC8rlPLj38kg1c2f30vw+XaoIX24/pMGIgSBoZqoH3wo0sIIGlA9PWcCPrAtpPB8eBf6x1o6cHra+2+tpIFP4PgBfxZtZUJfo4qxELT948D9ucK8Mt9+ccjIQw6QJcEbrD/1g340ATuDgDkFfx6twSf1f9xvuBECYxq/7ythQQGm+5JDx6Brw4CkMGT3wgscCUoQ4sU2t6DR2ciBjTgtcpenQoZVX9NuL4Owc+dVaDursYVkVALX+shjSBKBuvCYDUZjE5BdNkxdHAUBexyHwB6NP7Iyw7sxUDViwge1t+mz8B/LAvVx/c3PeBBCToB8IUGOgqA3iV4yUg6UAOxaUFHDx6CYS8SorMOue0CCJGAf5YfRhoAI+A1CvwxqNkAY5yAIx2EQmkFfeWOXi+nEdSQQA0ZHMEItiagJArQxDXIrj8nCfQi4HZPAttrIahso9oPQ/2/JwV5JQU8zw+7I4D7/sBn4EO6rjw0FR+i3Z9fHtahzsFvJgM0X+tmVH5vaYiNDGAigewAz+gyNLThnjCURQFR1b9d3lZvnVqmj9mEPDKIUIC4KCCjBXywS4N+otp/Hk3QVthOkwEKlV9PQwXjT7s/zwF4Qf9toAAzFdjuaEB6S7D1//U5FIQu2MevO0rQQH8ZmoXE6B/IkgE60XCjVoq8gt2iCG0S8L5GdxkM1cGsfsCMArSCAnrr7dzAZxCEEpepvB8tqHJ/q+bmJGGts/AcAXFOMMeTwC7Pw0B6CtCtA2vWgonqBQJFSwH0JQK29OB2kvgj2HHXAoyeAIsCQO0kMNECAhFMqCBf8mElAkyBbX1tJQP2RJ/ha0gpAfS9l+/5n00CkrQpq0MZbOdAuxmMvHswog62jZj7BnYQe19b14kxNq2D/ehX/p68HEcF+x3yP7z/V/A/q/5DA3i5A/dzA5pdgbKp3v3/wQF4Bb70WkCTHGRAA6+KL0bFl6FJaFw0ImZwm6igSwbbwPn9RMBWf3sN2JgA/BVh/Rg0kQBgePf6HglAHLFQwqQQOwDjbdVxNZjR4iM6Qa3WxwvNxh0JFb3g/WzFQQS8b/ttKcDWoABtUMAd8j9hf0MB2uDXhzX4CHj03L9DBU3Qjz0C0l4mLSLQPicOOwZoVCB6P6dA7nDbGkVuxcNr8PU2JQO4wX5trEqmccZaHU4q8oCDFOpzAnOwqyMIMktNNNAHouDGxO37DgArQZzlmp/14W1QlqHTMaIIx7SCx0+5yza7AKJ3IXBrNAHVDcMZAU/BT/vgv/ULPOA+XiLggAREDF2g0ci6xNDRglegd7P7TWWH5oJfayliEg7bScQRBVgI4Ookg/F6rvpLWP29swREqA3CaG8/FpKqS8DTAV4TiBqIqtxfzaQRLys5I0XEFIFrPbZRQb+16Fgi2LvJv8EFUPW1gGfQv1T/F/d/HBnccP7rAwnIIyHI4ArgWeGbU4eHy6Tx/EeTZIb5bo/BsMBjmjBE08f/RB0PHYBd9eVRAGY7cHRwiBf8WeCPHY1bgBTa9xKTELzEkQX9CPtl0gJiqsAmCT7I8xbjivh3JGFI+D2nBcSJQJ8agDX+O9iBL7UfG4bzAkcaICrbtYHz1ycSmGmAjJfL3CMgT3tQpmrfB7gxSzC1DnvdhQMieG47u75+kTouKNkM8c/+vq/Q7ZYjO/hhVvRq8F/9gGfhP8aqE9EIdR6LTwJ1h0BItyDqB8iFwuNqASscRnYioxOg9ApvnYA35f8e9Ohbfe8J4rknoFkO0lmA2gmAG0YK0DkB4ieEjiLoMD8wBzom27ANZkzIoU8EMHk/uo1mzeVoEoRWKn8L/62EYAX/lsB7D/LXg74uAMr9oGivJ0CNJCGD6i9DhZdQF+gtOp4S+NODRzsDVbhdgv4BqTMNyIL9SCKwL9/FGPp5oQKxIf8A/UX6r231H7YIqLML0Ae2GtrADOvRQH5b/MPE9dt9BGLNG8jVTAQvIaK5TtvvvWQgDvyXIClUA78S9Nfg7VtIBlO7cbsEYkQDMot+ygQ7QwmOawTHnAM2XUSnJvPIYRYMmYPS+sv3J+cfP3d04JYIXsF/EwMbBKB9Q9AY+BiSwFj9mzrSXmcJhFPVHySTbgHJCPvRQ/z7G/SVUETsg0ZF+i3CRoCjhf7y1A9mOiDD7TwdwEoEXjLwAv+avLE2B7Jnb+OqDpBoAchoQJskxKnss0vu7Q2YhcDv4ySeLOg9GsCKiUIihP7yfW7zbTsBh0TQfN0iAWn9f72Z56/Ax9P7j5OAH/Qvv3/QxKfk0DgDuP+R3USg3bzBC7bO/QT9Eeh9QvDPG7glBQzJwK740lAFFgFk8P88CqDGAa223YckWYhr+c0BPdwetl2ocnsfzePAWcVnnAIp6gDVhDLyfV4nqFEDPxHsbWD3k4BDkN+pARqKMLYBPzYEvxp9xmCHQQdgWH/9EtH2TIFpu3AH/cdGydv1j0TQbRrq+D/mLcX3ZACZ15bF378CG0My6Kq/zoGOQwhASDFwFbxyNGBuSxbCEhQ/uEPe/6gAERWQObCVVfjPpQX+rexxYhYFxIkgpgX7Y/vPs+Pvxf9vwt8kAs7i32t3QCP+3SPaTwIytQXP38u0PESm+YER+o9B3vr8mETAUfDrEkPI80ck0FZ0dXh9U+HRbhey0cAc2H7A4y4egoD6y8JfkBiigLdFP8v2W00E8deT2IeAKujZ/QAVKpAtKI20gLWksHedfgPcb+0+NEHefd9vB9rayi8h7J91gBbaw20MsnWAF5xHkyDUCOoXp+yrOwwxcKj0aL6fFppaaKDv6OpHR5sgx5BAlK/+fYhuP1D196o8e7lFBaKqv5YIMnFQpd0FGVR35RJCnCDaABaXBtgbiSwtICMtalKC+1JQ6bx/PLcDPQL91QFodQNKpwOgF/9eqcBxBBqRcKAAVk+ArQOMx1RYGgB6naDhlK+uQQwJYx4meQbxtNnYQwMjt/d4f3M9ZE4UOld1LAh99fbfzOxiEkKFCkTJIUIMUeVnJ/9sDt8/e1NEJOi9oVHDGYhgnSLss9DX2IAqw1zALUncKcDr0FB5NP+0cBQNrEezDiyiADPkt9qGpwoPdL0AGPx/NOKeyf3b9WJNdfcFv6bKd2cLMJVfJ6Y3B6wB9WFUfWWEwKMfGiQL+3bz9XGQz2EHKhF41GCtZyDi/gUCsNhYoAr3UNJ58YidHKqnMb/6AB5J4N73/4L+t7mAkeeP3P+1LNSB/l0SkMEd8DcEuUlguEw6t2AU/PCE/q++Akw6QFf1u6SBrj1ZnnhG50AfkoGIdf7gJv1KcSfgzWWkQ9U33Z3tHXYASKJ9e/YhU90rvD+q9Ej69/wxYJVs506Eg/r3DkMDzEdDBRGgcZay49XihLA30P+l8N+hf1f57/0AoxbQbwYaan/rBMirE9Dk+sBzTkC8JNDEUlv5McB8PP19Y01Gayep+hC/2zvQ/2HGLAurowsNGlA1cnqGGzeH5weiYLZm7h3QQC4O2tXdhvMMk1ZS5ebpgI8eMrPvPGkwaxayk8Yc6PMOBPEdC1XZ+2UfbfOPtxLMQQAG9BcZFoF0gp/RKjxe7+oAw9T7ZPWhgedodgz0gf5KBtrtIZhQAZpAV1Bi36w6t98qVfH7hqGI318lLCjLCUFlxRHwqYEH9a2qb4XjWvDT7kBwfbZA5P0+PNuRuW1yf4yNQH3zzwv6b70QOJ0G9OT/dhoYRUGT15uQH/71MjQLtQlxfDuiCXrtM+SkA+icQdH6sU/xz7Ze7FlubV4TpoTQ2osdpaEjtqADmEU7OkBEFoLeC3IWFFeswJXKXzkboNL+wzcFHU8hTGKIboO7CLi1/P+5F+gydQhuvRbwEgxvtACmANikhLTbj0gCYk8KdlYgmj+4Ymaod7TwahwadICuX0Cm2fE5iNHPK0x/CDV66Kyg1MnqjNFBnhBoLQCgUULfaVe5nq/6EQWY67bXCszUb+7232fVPz51iGB12owK9peyP1T4raMFF/OEYJP792mgXYfZ04GHMAhBkCSmSj+dKqRPgVFGHbpLEGMiGFeQWfSgrY52VxaeDUPSNJI0P7NoisG729HHl78z6hxfs9rV3m4JjgM/lsui2qmThjCfDFSb+I9vwUqG5wwL55U7C+6ot8B+7N2o6r3q37T9trfpjgmTvv7PSQATLLeRAOZhIJHBQfDQQJPBdUwEbVW3+L08EcEE/9G4ANrCeWcnPKRHDupbNynMx5AA9IRYLmrc/YLSiD5EaEBS/s/TgnU9ILcH19n+CpHwegLejx7Mn/d25fdN+e9U/1vgb7bqf08MOtf8EXxaoh+GY8L6gDfhvs4i6HQ7seYI2sv1GchdMsBIG3xlvxcCRzdgCPTn+6q/TW00VE8Q9FaFv+R2VlOM1vm/hhjhDCdgNflVKME5B47I9xT8z0YgPAJ8myb/LqHy36j/Mwqw9AALxuO1JVjiuQAYLcFzIhiEPe05fk8tRjGw7yWQbsfuLAT2VqOId1osnr0F49VM8INACPHDoBz4B5mqqSnUgyh3ArjXxfQH5BbgUS8gP7aU+w0zHD9GGD0CGHf+P1p/DeivlhU4BbxR9a2kYFR58YaDZCUR2P0DMmgED2eg77puegy6PgDphEB0CwlG/i9d+/Hs34pBEQrBn0W51mqGnJAk3ACCHeiqkQ1XFQA5AlKH7Lk8yJKWY3/nym14h2C3JvxeMwD9ZVMz0BPMi1n1RbKl1cYhIVblF3G0ATsRiCMUvoK9//OgcwYMoe+ZKOLlC6/Xk50br9NFz9fanqA8UIYSpCwlBO4kHc4WLLBfBHVaKwKgLQjmP4Un61Vq+3s7Bsyi0WztmLjJwJwFeE0I2vD/1Q6MVwefxfUf32skCPbCnxQqf+QMPEUDHZ7vGeyj020JgkPXXwsldA7SYR1RE3h94NvNtugswcgxXEkIcBPCGZ1rmrgDC0A4K88nm2fn/eTnpQtWyZfybRoK8Dro4zYDIMGsf7saTBzvX0SMbkAD6o9CYbsfMK38cJKD9l2FJt9/VGs0h5Gib33pxMKWNsigFUh3G2un+/N1WUglI/EEx8fq27vUNnwsiOoKecL7kQS8VnWAGCFUgn6dBtQhv40CmIYggwK0uwDHRGAuBXVdfwzHUjZzATLMAoyJ4FmBhzaWBlrHld9CCWpPHRqofBqMReMGTJ78q9rDes1Tv7/0m0v0AFHXNR6P6g30SHivin7V1BOhh3iWPwvps/yE836L2XiwnUT8x2iHgfqhnwn667QHEE8oLQjEvtEW7GYBZDrDVkwNIO4G5GiBDf9fGoFM6n+vbEtzXwP6u9AduaWnGYSLAlVdl/AU+ikrSeEIKgwdaZ4AACAASURBVKj4/wtgHcHtdO2nWKcBkPfxcvnNQvsj2Me9f02r76T8q0IBn9OLKfz1HX8yVXQYGoAB/2UeBQ5/5kCL6+H/OGGoRnLSwdd3oH8r7KkGTbgIxEwVWvnF8KOpHnyzfF9Jod5Px+IF1h8owyitDw/XEgRb5bPqbt1uvn7qBIQ16vtS/u+DP3cR7CH0WWJgd5mTJKYgNzoGjQrfvu99NDBC+bnyW1x/qhTatv2OaMKgJWPvv5kwnMgxHYGFRtJW8VMl3uP+MgoqSZyWFKr7+KIDw1d6+IiOgZI4+d5iYL3imzbgyO+tph9t2oSBxOM3ugHtPoFZ1LM0hF4kXNEBssvVgPdjdXZWK7uKvyS3q1Xb1WQwtVDqSUggq+Vw3t56JA2cz7PXOwGNW1ecwxPhfe3QEUsDsFaAz8jg0nf+iZMAHNg/XSazDuC18Iq1HBRrOsAQ8NLB+16g614jmuSgs3bROxE55D+WDDQNA4ivdMJ9M1b309UqknaDU8ObV9/PwmMPATvTMAxpABLBzugUtV9bLdhNDQA+7B9tQJ06/7QNDHGSwtgZOCIA47InIoDdROQGtt0U1HI3GaoUnCnC/rzBMQJteN17+VaAzYNA7e+PFqHQUyXPUYB7iQYa5ZFjq1Zqpx8Uqu/XT7+6BWC1Xaj0GlBIwMoHu7UzcI/6/Acb8KIq+hzmGWmAYnADrIpvKP7TZeLaf0LAeQkGgebbq9FToI44p654F47tekKkI0L5PQNZPsDwPBpy/ni+wKMN76Vav4+2cFZFf8+JwAraMt0DFB7beA/u4Zz/a+RXx0M/ct4/jwaNAS8G17eSwmta0Fhx0VRxJkHMivso+onMXr+YwdWKbgioy1jp4x4AzIKg5lEA7wvHEYCRmdx11TAuT6lDLVl4KvXkAET9P4RT8H2u+lg9EPQIpw+/NpJ7RwE8HaDv/Mu4f3OdNkq/EfAiEiOANjEALvcWL9gfFV4NZbgbQc6qPky4Pm35QZxtH1f4j+P/jXuaYPcWwIEH/fmEPBoAO4m4LGxV3txOQqDU+dXgey+UwSzuqP++uImO/u/6ogCb7wTc1n61sL+vZi87rxnrNas+giTg6QLzaUCjIp6JfhwtGI7AjBBB9JjDY4ePYVR6ZPgN4owVv6Q2N5hhVHwNeYrM+w6dN6K1sMHZm/Ce7bHe3dzKr1xw1w4JrSQMZtgnoQHlr18fzunAszD4qurNUg/TDqzx/lfCaO6t4tACMUQ6P6htWjDPC1hCoZ8kpODzJ70MUR9AODcgwyqyPhmE+wfHYB/hvSqt6qeXUShhXH+d9SR8DzrDaZZdpSp/HxqLMQuATgDU/qDPRgOIeT8cvz/h/XC6BtE7ACLOWPE0KIS4UUjmZaJ2grBphiWgT41BUVWZfP3AnEIT6OrfoF122l2rMycBoU5i/OXoUZ4/aglsXwLzHNU++FVF3qikOj5HXm2PBitT1WuvJRAB+6O//W0/PY8vQH5IrAsMs/WuVmAdHBrQgrbOxJShXwRSsu08h8JMBpo0+aDTALwV4tbswgzHrftG/dJKIAQb5h9KCssWIMeto+GYqG12/HWGjx8kzqNJaa0noMWOr2KwW01AMwJoNvhMQda2/RKQP/3ecABM3g9uD6BY68Ntz9+nDOMb5iV+hIE+dP/Zs/wwJhJ9mgBnohBuStABUXjugF3hkXF9ZZJAjefKdHZCc389LoStKvIl7QIEb1d9RyciQgFDI9Cjyccc/23Aam7/PZJBhgDgin5CtQvbCzX8ip9YgIFtOAt+w0owp/hOiCWgEGbVHuYjRigPGR/YOnEoqPDoV5z5YqB3mRq2ox5ICmSSgAP1Ne+XV2NE+/vuFbCTRADxtS70VRBCjgBk2OyDUQiUgfl77b7DwaHm2rAZ7osRSOOUoHgKfNBSLI767+oDYrfwZvqChSpGfj3pFwZFsCJg2jeIQQBUiyI4WgD68ww4qO8khuWkkIuDrxWv2nv+UTBpJYiPd0KemTA8qqFiuUF1jWS3BoG6pADJq751JqBI0wvAVPyMQvjcX1zbELltKK+zBiXRFiRxG+b7q3M9xuLdzR8g0gCGNzSM5gNYfqGO9CBT8OHct6oB3KsSDBisUnwsFuISQaRHxDSv0vptt2oeLHMERfRn/FG/Cx01EpgIQG8LP+/i37PKw53xn6sYCM4/JwSRrCnIeB1ZkLsawDhaPKv/njU3wnZ/dBdGE8+YTHSG8+ofGgIjsC19YnwdM/KAnTSsqj6ig7uGgIPw3nYFzhhIIvriAxFP9CQd4HSlnzgxONIdrE7A8ZDPx9fjib8ifgegNIliRgdx95+E1T7+3nQVNNhEzDgGA3T2rEDLduwtPpuuouPcs8swwXFjdTaMKt+jA5gUAQPcf95KJQxYU0cYxEDvsBSmYuukp7AwnqniC9Afa5z8vboI68ImT0t26CvwBzSggkj447r9IojvCn7U92J/Hw0QSdwZKNNjxPCfSxRqnATkdwpOwh88oc4J8KTSm/wdbZjrc+4iFP8YO0/5JJDCfaijK5xVXevqfg6zGRrQf83chvX4aRfAE//6vv5+6490U4ADdO7QgM/5bcHP/n4OtCQhBEFeDWSvos8DPq8/IwzLzjpa8/U6MMSkBklDm8e0mn3QIY7XG1Om8wzN48y7HwhOK3P0/ZwUQHHv4psbdoVeb9VlAjChBCdtDDpOKTh9ZfcagOYq31RFjN4/gwBYzp8lAwYNwBELhZoxECeZxMlAzWGdCRV0fQWGHo8+8Kx+AAxnCIzowAxy9KvNepWfsfp4RR9kUrD88CPVTuXRybhqqTHcnxEGndsgub1Gdug8yz9fHt3Hpl57x/mfCOC29FOSQ7/noAZR5W3Ob24UMpuPYAYiQrQgk1gnFoUIKr4vKFpV15pHUJO3Y5rfH3UFHU4bGkU+NKJ9f2hJyOMxDBDpjAgwiYqvk5TqNl9EH2Arb6fA3yaA4cBtPWewhkEcIQJBlGzYp6zRmr1v+e3Fv27xpzvyI44NGDkCIi7CGNV9Dw0M8NtHC2vUwHINumCGNG8erxOwtQINsW88Tlwdoc+F85nI559ngEDpt2F/Uu3hiXYrkN/pBFS26hYDAkFgErMK67y9mGBA3L5ore5izf8b3n805MOq/t7XU4WHv1DUF/5gugCSOAIW/59uMwl6CHWAib8bvfxWl9/rBGEMTTwDfG+ezEYG4yk6FvRPuPwE+wvc39IRjENWM+/cm5b0W4Pf4WuKUnw/vD6eDbB1ETs5vl77Dhnm/51g6wPWwQAqxnivgQaeS3gy/u/1H4hpTPrIgHAN0mSgXUX13YP5PMIuQAfBr/f70cdeE+QoCX3i8nFMLcAjInBoAIYqt1LhC1WdtvmSab28AYffaeivCB+ohdYQgfUa/WS4ToMsNLHLc9nnvPZLwn1/EefPVf+U/xvnCVSEQEkEQEnEQJO7S7RvYDxNeNYKrG7DKMhtsQ8cMmhgPKKKj+F7CiHYFR5KIIPxOmg5IVAtu3ACQSPh7CzUQOgAej5CWEkIe3vgxz0ROGO//qYfz/dnLT+ZxDr4QW0eNCJBorCFOVC312Ec2TiY5Bk0cAaQmiA1VH1MOwDHQ0kHdEDDf+2UTWhS4Z8diQMicLx8MLBfverLcP/jQzF0P8EJj5+NGK9RCz755S6F/f1+X/gxeP+Wsedv+vF8/54aSPJYFjIQd624MDz/UDLQnr8HU3ztKHRf8Qeno1vyAQJBaLcMtTV3cvgP56COCqd/QP9xLgBkH4BxO13n4hNUDtACC6G1S3zqooZ6Ba4lp/zcAFb7iERKQwQcF39IFJjdXECGADw0IE4gg674pYAnk4HoHPx54tD5daO5vxrugSkMjgiiqc7TVKAT6AT8R4ckbHEQCYR/IZBxJgA+XZjsR7vaoRpIxWqeqfXuGC2CxwudicwePEB1kNkaZCuwyF0DuKv/4sz9mzP/Qxdg3BDkBTMC8Q+loD6UGBzx0Kz6eAX/KArOQTlPHFoI4vVtf4rNuLrca9edRn4xBP7k8w+9AgZCgBfEUZWfEs8iFNZ3UO7TqmkjCO/rWdgco/yIqHcQWaC2EGTzgz5y/iXQAvyx3riyxxV/JeBriaGB9OrTA5g9/eokM+37GszqfA/UZk9iW5UnCtBqBl3XoNN6Ag/+zy6A5evPAp+TIFDn15gQw9rjrOzFX0s2JBVAxa/nP1a6AsNWYGjPNGPLTQgBsNUFvOA3Ht9o/rGDN0tWOCcxJGp+f7++kkP7PxcGv1+GjkaLt/fawpwwerQxBJNW4b+PJsYEgiAYYdEAGIlDNaAbRkIgK3ut0jKByp+8yz23X6GttmBmjwDvChgiYLP5V/zhH6/110sGcKo5CkggCngxnIPoPja0j2B+1BRkiYJiviaLJqghDI63G2nAgAxMCuDdnoD0wIQm+urMB3VuAwbBrFGgGgnhAFqg9+ujKsLxB3qGCQNEEtPinIQlAj4WgIw7/iXc9V/x/yUWFs2KH504bAh4aYWf4TrTLGTy9YbftyLeVOWNfYNyt/ji29mQnqMAltU3ioTtbX343yv/1u0YPUBz6zB702tQucnX0gWaFh6DgPdmhXaapGotw0SFz1qDiTMdd8h45HfcqCPRUhA3+NmKz1l9teCPaMd4urGaewRitNBDdahR5c3AfQmDCFT9vmtQEwqAYXX4XI2n23Z9B/Yb1FL+LWox6wHGbZSo6FR1LzyG+3hriSZvWT6jfXhl2cmQZJDrAbuYAqAHo1GA/EOgD8eGcU7A8eDvH4fQBuAhBL/Zp/vamPTrRENDGLTV/7E1WEPLDlP/PwzU4YhusIMUgfIPAr6Dhv5R4y2r8ldFwiFoYHnmr8TAHbhRQSZOctH598ZYhqt6wP7q/ouqe77RJxvzFYaji/z4vna4v5cUMDXqDAJ5ytktqtBDckyjvJg04hl16LB0xFfyMfD77PZjErGQRRjYIfSvoAXntks0ok8MsUC4KARWnYPlJBeIgLeFrUgDOHYCag0/XNAbWgRwQuLAsaQwIhC1g7+jCNKuT38JfnYSyTi+QQEwwHeT4/dWHYxJPxfOj5oAnRQqgU3YgGZSOaDyK3n/qkDYBKptzR3oD6B4fyRKjp2AzSl80YR/3P+/1vBjX18Jbu+YsrMRgbqPP8zrDLTAaupphfeZtyPs9BPztpLSBZjowF3woYRwBwOWaqbev15b7X4RWsiqYiY6ZkFEIoUwUA2OrkeEQE8HYNyD/rl3m88jCGgO/nPW3xy8x4Q/HBcM1dYg5q8N+B/SBSYhtD0EY1PRGLDoKIBHF3yLz4H/gSYQJRETgqeB2d4vC8L2NVnQn4PoVJJAcP0inahAfdXVI8CFszjRagCTtRdV7Sr895NBpRKXIT64RMFw/iw5eChhEvmmyUIH+k+Qu3cLzOAN6ILlFvgWnx3YWFDz0f38ze9GlfP6UQ3ojEY0gtqRIEbA5/WgQFhsEuIeL75uTzvqHktAWfj/OD6sQXssROcGiRgFn0QVkld7OznMDT7CJKzhMIqxW9B+LCOQdH4uyxIcE49VTSeLj0wKjzcp2oDXQA8YoDEGBLMW0BJw+eAxXejPV/IXd59/tp5rVyYXDw5BlRetSpQAcvgfOwVM8ObzBq/AQ2wX4lwkQV3vNhYFfn2LFgaoDU1ogqsfqGkJYmrj9Tr22KQwBLzbLuzDeA9yzyJjVRfwegWq0H+FThDPA6ZhZwX2M2Kh4waovCzAWJTzD/qY00c+6PM8coz08VNqglzx54LfHuTJK7z2rwX35ABLg1DzsZ7Qv7l/f2yXDlbf4C/irg0MJ0aCuD0wP74MrxfdFlX7tq+vtRdCpvt599EG9Yz3V+P+Oj/n4zLruZHcJ7oMt/MNp9eD6HEeFb6/TMfbWo85Pb79HJo8t3371/PuIAZqMvjPC34nVV6ZB4hEuA7AzA5cfU0y2n6ux89D/35/n2/vWY5Bf0qwf3tPLISO1Tap9qzFB6eap/beqI94NCCbGwgqOItY3CGl446CaQ8i2Q9g0AvmgJOnBoAA0gu17tsKtKS7D4udgCYERy2QIceCX/P7mBW+g/7D9S6Mn50CS0eAoQPDcBjopIA5+EcxEjLweRjXq0UbLIjcBxsGx2IZvlf0ATjz/6qypAmY7bhrk4ahsIis6ccXKHdueAfUgk+RWPCLh42c6zEeKyJpRTdRAOqBbl/Wq/uT+q+Fx3FoTIuCzc6+hN8j4veGjuAnhSE5gKnco3A3XwYlq2sq+lmP4yEOpqEoG0M+mGDYuYT0pKCFHgLHKt3T7T9p8GcWH+n1UwGa8X6kQt2x4CeqPexegT6o/Z4Cr313PHdgrsS2ZReLfpKIf+IMFnmVmwxQ9AhithYT73+p2s+JIVfrjwiHnpAZrSsr9CMstQXP1+1+510N/q8E/YoekMN9OMFvi5LvkRDsy9rgFCOoPdpgaQIWBZjf5KCSQszZJ1ivTvLokpen6tsJAVND0NFqb6GUGg2Im4Dyx9Pn7/0dm4pADAslJzTv+dKNrAPQ0wyySm7bj1RQgbAXsRa4R+mBJzpaQmHLmy0BLoL+Nh2ZRca8uUc6P37k97n451fvTieAE8BdZ2ItqFEK6oOJIYPsiU4woo140Oh+H/UC++gatHYcOFT+2y3AYvD1rM/fpxdUcsAi70c0OxAEP45X/hymE9XeoC0zfYhbcqfbhs09HpwnKMDR6g0mmYyKth/UcLl9ITGQ8N1S6s+gA1HvQCc2pluPvN2Br8SyZyfyxPP/VhCi1L1HWX2CQCuAE8TIq/sBYdANZmTIwqq0sb0HIzhhugBeUpBZLFyA8y+EErsBUYDZHYN9QAAooQwOws+uQlhdESSSqk5Qsh8LSYI6LDS1AbmOvLlRBqQIeITvM36+TP63VfE5hFClCTr9zEyVFwS3STQBy66DMHB+PJWIrfgGnYBx2dTboPa2X49GaBVlePA7CFx4iaGi4ns0aLVjMGvtPTDtmO4XEE8E5Kb/8qYai+NHl60LgAICcUCoJPVeiYG6Pxw/X9VFNVbFn9FNPzXoIRDTyzcpREYB5Fm1EQQn3KRi9wKApR8Tz48SwxnV3qM0q7ZhpdKvr0zfY+gO4oQf+EGPFYW/Xf5hwWsUgxiBbShGoGIx+D2eH1h2EeR3UQMH4zMaUKr4033nzkSkfQADelFbLOQCalxdxvN8mInhPas9bxtGJw29Fx3Y8429MAS0fL33Oeo7qFZeiToCC3B/VSNYuU0fgDnkhxGgMFdxiYEY7MYel+OHPH30IMeVFK1C79l+QdXVpFqHlMAXEf3EYDyfkkGdNvJ8f3RAXU0jpgM7jMNA5yCrtfzOicKG/M9bgEkEjqqPPDEcDfqVwGZv6zcO9avDfOhf4OmLFd9OLBHHdxp51HvOBlnAoQksYjASA1xnIhPsapTCPjbsGB2YevpPpgM73EYeSYIftgPgte6CWesVBB9QEgfnWYMgoeC8ql69bWoRIqYHvSIv/u26bj/jdqZ9KSGk74JRo6QS9PuTiSHm6Z62kLUGH0UO4rwWrhtRETkR4iKRdI8giJ2D2nUCMjsA0TXiVDb98NAf/rCMlajA9wesWHZrAe1dlwRyVI2jx4KkyUHSx7YDe6YD4tOC6XW01puEdAJwaEJzf1uATHi6ZlSCpBQscsh6C1xRcWEG4bCFeKcAVhVlDu54JQIkTT21hptIT/Afk0kMcS9BKfjBJozcDXCrtgbWXxbMAw3INQIxtQJPAGwXmYaBbYh4SCsuKwLOAQ5awKskCMmRg8P3xwlBfbosQaDqyZqBkyQe1CLQACoTgN4qbyHsPwkTiF2pYaj6MAXBmUosQHnUEYCsBL3MW39SNKMJ5PfoBsT33DVJCEbFnBCMOkHfvj6Xq8uw+dgRIhGgAiUqf5QgKDFyhe8nnYrlqn9sG1GoAfirubygX4H+8IM1CmQrMFAJ5ExzKIp54nPoVU2Auh6eBShDlTV4u5c4HE/fVvjFrsII0Ik6QX+Iq68jB19ziLoKC27FYe0gC+j1RSS+BgB7AvAM3m8HLdy5fV60C8RMVuhD1ieQB32MCCq0QPJuvuw5IHF/geMKwOPdpmsxBwVEfGEOgeincJqNmuSFIPhPq/xM81CWIIi+gCFBqDX3QPYd2OcCRo6GZBoA3AM+00aesAOQ7/2Pe/vBCXoguD4OBD1WfPwClzcui12AuH+gC0gEwW72KfjBCQRBr05D0IQc7N8PzOCMehPWK384MPVDJQim7yDdoiRTItzzFV/ZOX9sYFetP0fsQzb6O7wOoFjxk89YoQXv+BmSN+yYHYO+BsDRAXHhuJXsEFbdIEGZQWUkNVNzGA9NZUVBIQL7jASR0AclE4Pb7JN3BO72mG92+o8UG3nybj+mASh0FsLKn9GPxDrEcS2Au35BzHO1BksriIJdpqWjKR1wlpR4fN977rZqI+XbYjYDgVDpcYQalOYKMiuQbB3G6Pu/HlMbi9a0EMkksXtjvvXTfgMKAEZRN/i/O7yD8Da2S2Bdh3ICWfp8yuMkYl5a4df4vVWt4UF0yyqEnaT6swYyWB8/j111Y1ERS9oB0SLMtBGDEBD1PEHwtdjUEAHnqmoHU4wCDAoAS+lHwtu9eQLUAgmxVvAuMB9cELMV3m8EUtcBYYI9nkNIEEJYrQeUHfnzzRyC39j8CgSkir/E0P2odnAmAqDnDIhqrtV9BDNS2POjv/0pwKr6z1h/PMz3uf9ykFYq9TtoAXSwpz0HljdvBCVAPY6t7osv6gFhMpkX13rcfXQMIpuTsfTibkfOPRAC2meLRipI4mDPwMD5x+v3+Ey+qEfACwoUEkKQSMZxYJDz9R68PyP43yvo2aYf881rNQbZgRU/jp80QnW/hdXqJxMvCFxXQSNHpE8QiF4XI+wFfQcw7VL2Md7RRajsKgh2D+6SLAKPF356+/7yXYBTUgFy/38StUjFHweD+iiHh8/LV/i/TSvGk4L5x7F6AsIKbgb4C0YjgdGRIToGUx7cgS3JKP8pRcgak95BJGQbjaJdBYQ1qHYnYHL8F45QgHx2gLMQ2cDxBD/4SeR0LSDi5XzPQNjM4ySE/HGG6g+ugltLNSARn281BPtNO72eJLjdX4ITSEgpQvJYFEUg24f1qAYQNQdxx6Q/RcB85j9f+03zf2QV33IDPHegNgPABTfqFR8cZK9TA7/ll0EQbUUHW8Gr1d+MSadia+LRHwhunv87yWoJ3h/pRDwJAbDNQQFd2P2mH4kP/wDT/ZeN3CK3+ZjvgVpw4r20AMafb58j4N1UMknuj6iCx883PU9g2VHVH5JX2eEcPghSgRBCKPzK0Q3fknwPN0Hk0CyC0zBkz//7duEetgFjVtypASDI4CsknYJgYDhqsBxxy29+eyxrAZX75EEf8f+CkOcijMDDHx4ASYGGu8WHgPwpHJc0qOG8FgFTuVk0cRZVePFwHEIUEu8xSHoL5qWg4I7/HgOKXe2dcnu2SSdCGIDTA+AcxY1zYL6Q6AAFu+/1GvjKPSe"+"EoJV3NiM4Dz9C6oWkEav+NWjPWXNOIkKgNTi2I8LeBgaZHJxqrC4oNXoB9pzzMws/OW3ghSyQJgjbygOVEDhoj4nHLld8HPD6UUMFVLIgKrTL7cFoBRLQgEdXIseZ2/HhFPKbk4d5tYWwwR0nIFQSD2P5gQhs6meVfB+Bkyz2fOIvX/zxqsSODuAGIOLtPNnmIPCrv6Kqvgz3q4tCwNl9lWYfnsdHj2HTgQw5IBHwULmfSu1jEV3gDFSxTBmqSEVqiYK2IkWcRiAkwV/cyW9YhqHXDw9dkNQAcO6HFNJT7oChfrPUYc3KY17zAd+evAwF2w5SCKLV4EuCEKsKfjBVWHu9Q9Arh4CoBqEMWYBsNX7YgKP/69uC3M7/mOOz232QT+ox4iCyJGEFP4oBHd+GVvXBwX35nqp7qeIbV6L6tdZub3ueJ+gBIKgC6S5gOQFxDoGr+Bv2nzqbknd7ph/EmXzO0o+kZdc/wqvQkAOUffVMzKtYgx5Vob1/+HAfCdzHSiXHenX35/2JTr3KZ9Ruj2lYiMhLIFoNyMq9hFroeYMTE0bSLbhb4l3YlFPa6hMd2jk8dmrDgdQCnC4/+ANFlYTB6ATlx2GDGXP1rvL+SnWHw+cJes5/rRWt4H2pw9GklD4uSMpwasIQiaYR92gIyFX5S8dtRZt/nCAH48VXW3hRE/HKOsGquj8EM85Q9cfeAV4XwNGAlmIFIwPYrfLKuxV476RRetzcdeAsRSZhiHizCKEIOHn3EMOWy5X4uIJnXX6sFiBFLaBm/THOQAkVJK9j6TKwiSDTBWpwHkSPQJX7U959uAkoaTUuug6oQCBz1Zlxm0OJSIoIw04M+7zCGuYiznCfHww9AN6Ir+HXA7lfn2oBSJ2FOOh8SzINfmcAyITq8JX/sOMPx6A9LeYtVfwgCBZhdu25OB9/XmWWNPUEPD5dUuJ68wd1AqD2+w1PI9KxE9BW5t3z/igdYGWiL7L+wPv9jgVY8f0ZcbCKCuLAHN+c5wa69Zpr0J9t2KnpAGzyiAIPiFalJ8/xXrrA6Y+/8NoDnWCPNwFJzf5DpVkHte8hx76P+HU1+HEytEeSEIzAsu5r6wPJGu6oLz8VrKofXLce+ywIHhNa/Dmw8LrptWXZ4NKZm4pr/QQ7Qk8ehMrPtAF7PQCD309QgRgRZMKgAbFREAfBBXNalbHA9cEHMo4IgIUuPjjBWEUFEQpYTkhVO43eRiynJw9Jjj8TOUIlJExK+0wA4gWgQvcFBHAc7P4/u78/Ff4CC5ATB3P3oUwFClYgcALcxzp/B9Ez4DUV8RjBbsCBrMH4dLNwIDaCGhA6o3pXksdBvYBsktrXDgNJKAFy1Z+ZGIy5NXgXoBT8a3ZgVSPIUAMV6DjLxhsV8wX4n4ibbONObHNyCr8Z4FinNFjg8ziiF5zSV8A99u7Zdf5OisvVaAAAG3VJREFU/kIPAJLWX3hUIFD6o7MD4WkHIMXBk4IftSrPNBJVk0OoC7ice8HGS8XBKDoz/YFBLaQi392lGpCMJfhD9xVkx5Xbj73P9V4m1j0v73x9FjDDPlYvATkgFAVWcdNvJBamliOjAwRV0EpeRymAe717kMYRyy/j5FwFBX0fP7Dyx8gq8wn2ZXi8GfGYR+lFcGJSxa3Y84WgzBHetlU4cvKY44Ps4iP9fsgsPGEhQTAcHqwwGCj61SoPexKwasXFqtxq8qhD9SixoBBYcJEDNzmIoi3J7QkoJActVHocTVpPBCDhElAvMDK1PT/Sq3DwB/ygmyB9GNhYDH4so4Foy48kkPtZfZEv1PQTxYpyX0EI3Bu+/5krcN8fgwVdwWu2JNVNWAk+PcOOPMNdGFyAZ5Aj6gicgzNfwuHZg0HrLxBWfjSRl88fVCo/apX/IBrIvf65ZxtEoK9Bec4KZIPLe76osQns46NwW0pUPCPAyMc4A/KXOwZzFLGbAqD5xhhbgBcWfoJBAlarcCSQgdQJ+Movnih4gjZQTw51rz588y/ZgxVUEAQ8soCfX8OR26JwujCLGFAMsOjnwGrlPuQw9D/PPv8BYVR7pG/eeFtQpsLzR2KFI8SwKj9KlX++HeLOPuSBKrKeHBi7L4b+Kx184+ptAp4Trcscv69oARVYzWgaK01H1X0K3zNSmARKtxXYHvwJuT+8gLGGWgpHcWOmBeljFB2Ckg6wiAYOqfxEK3GMCAj6kIiTWdCBCXhkjUKMgJcLk271N9uLSbtvvK0S69OXAvoA5z94VsFubbmZvx4QAnXgBnJxENyQjy38wef81uPhxMpPJIQzr5ckuUTKe0wZyN57iFTWga8GvCwlh5UqvYgmaNV9XSxEVWs40kkosFwA70RgNOu8mLZfR6wDiwRa35y7j08NksqPQhcfkRBK/J8R75Iz+9C8gJpqzwiIeZII3QnYOkJWbVEI5jNuA+o2BwK82ifwnpSgHwaC+GNAdmW2VXfC+vPu6wR6lBj84C9WfvivZyUhZMJlJhjSukDlFJ3g4AvGJfC1iEpQJ/CaEd7G9wds7p71+odruKrHip/C7RdsxeVjzIxhoNkFGOW/+sk/YVAGtltfzZAIfzix8gcHhZCXpcGN2u69qWqD9OlRFAy7x2fQBhHUiETB+DocqvArYt98f+AEAXApsEmEcNLC0t2uPHCqPQIXwHYDfI4/9+8LMpchqr5HK39MJSrBXwnutNqjovjHFdq+fcHLp7YLR4mGgduW5hFpAXUoL4cTTuW5HJSkB5PC0S7A+8c+837DyoM1J9iv/po/o3BunlDqPjOSO/YbLFd+FGy9sxKFeT8b+nLNPrkAyD53FtT27yUS32yqUaEGTMBiASGcZ0FmK8nWxbvjC1q6WQC4VdWdAcBY8eFoAzIrC0b7Wt8wlPcIdE1FhUWeKU1Igv8Q/0dl4k/NnYSxdlDon8diUDeuQB4c8XVzcahRgyyZmNC+LAgeCfSVALde8/t1DCYawNoePGT83wlOpFUdOZKwxn89OsMEf0X8CxJCBN/dwKbFwkSMgx0ACJJDJD4iC1JEYh6XcEqVHpx4+J4I4UiAl26r5x64sttvSlAn3LBuQCz6edU8C+J5epBrC4YP52EFDgHrCw1B0eU9bOaTgh3wmYvQV3Oqqcf53XnVNXUBELX1xtSgFrirlII5d3HFulxBCNEfZx0h7K2f34XwdHpuYQcguN189Ow/nPXclaUcqMH5leCXjKOjbv3F0a7i2ZaRHmBe5zwnhA9S736ZC8AH8LHkg/T5znYgmES1dtuzGo92qwHIquiWX+4KgVLd8utv9Ml1BQNhEJW/FOgweiTguCUoQHkEwYhjfQIgm8eAzPKzHqAG5xGiiPyxeGRRaYetUpDVpHVC1T9bHGyaknb/TQTnuG7rDYwYCUT7/cMjtILzA+Go/FPw581F/mWeTkDuBsBCAK8ki+A29nMzPn4Rzjv6QV7xWW4fzQFUxb9jQQ1qc28kMi4mDl1NBr4usIsz5ltZqNm7AeJXfuTHd7nioLEyPBISU+8/tP1AC4Il/n+YGmjg2NiBRdl6yCw//zG5ph7bqaBuz8B4VMU/TqSsNPbwCeZA1cdxyG9SgKzRZPL+GXFOiH1/SFZ9wX8M3zUgvH8a4rMBjZj/h1W9MrwTiN6MlsCKiI4gycBzgV/xUaQGjGDHwHiYi0VIzeEAasCpNuL76AC7BIEl7i4AIxnAfoMxk35eJbZ68wWEUChs8IPz/EEE9BkUoNA4RCWSLJkY1h0Y/dG9bVCtUVPe7QRhtStXG4nOECDfUxc4Uw/Ik8JkA9o9+a83IrfHH11EdFUWc4phNgVFWkPsIHBnCvCCYBSgqEN9qtoXuwHhByYoJJA7BxIkkRwpDGgAHo+vQ3ZGOwCFJCJKUAx4MBpFZWvReeLgtBBkDDQu2OJxXa7SE/P4ZiUPHABjY1DsFIhPAaygWewiXK72hHjow/k8gCL6gKES8qcDZ7A+EhYlWCPGCX1wXIwzkQEKt8cP6iqkC0FEhFj/ZYtvXCtwuBLcDT5wXN+9H6ZEIkTwV/x/s78fXFX3siWHEKrC3tw7EFZ31Ll7ttknQyEMGgAqCaVe1bGk8r8nFWCQQR0h7CY0dsU/mIeIuA1AGCo02Q0YVXxub36sG1Qgfo0CBBUXxap+ECFEycQVyViBEBFPt14TK9rZHB9EwMG7DPXOv0OVHkdtx7OSCXfb3av4CFZGTwQBwT7/hKPHE4PzpJ4L4+FM9r1n8B+B+9R9I4Fu9brYUZgCunZWNxdQgIs8mASBQ4F8hJpEiaf4GPihk8FdAxin/kybjZjTj+mAQy6ihZ9whDvHAWB6BKrBXQr+5SBfqPaINwiz12UIwoTmbPACZY/fshBBBKNlW8ZCHwH/cVKSOZMm4Mxk4OwE9JeB+EFkn1IzcPQoiSB4vGgNeJSoik1A7m0TCmE/HrggB+/1M12C1Z18ACGoIeH1pH2IhAqFWgBq+kDFEWAvA3X8tpW0cnSD5WAOriOHhnYraF1eLTkS8P/QsHUBdtMPnOrMaANJE9AZiaKWII5Ue/8PTHn/UcCSTgIF2xN4zdmAQYIAKeBFl6FiO0aKfq5jcImHfPwTxcEdRmD3LcFoAva1Hdjm9UgGggI9YOoPkOBYLsT8HlG3nucMDGkOOJ8CkNOELdSO7D5qqAeJYBb2GpABgRi2gxLITgrOQ9C937HgB+0i7MeRx3gfPWCXLtgbLJAu/gCFBPzRX8eADJqCvA3FViC/BlOQC4LZyrBq8BdQAOUKoKjqR7v7EFfVFMojPgEoSlJesNIePyLHwW9NRgq7E6HvUN8A0yj0wyWDHRZ3J2A1jHdMyu3hCGwSDwdRir7h9VP7AKLgPoMCgKziOFLtrUm8aIFHlgxYfz8WBYUU55iAXauo+evJaIK/NTgRJM9sUcZRzcCnMdNKMJc7usnAyrpxHYkTRHK+n1HxS01LheAHqRWwKIDqLvQC0+PupHZgBawfVGsiniTVHwZHRqbUI/D4Cd+ftgyLAR1ehkIiqaKFw7MJEwUIuK5zsu4svoFYCFKgBJZACBuppOId2RDkPZas8H9kULcA9a0KTCQDGtpnzT+RMJiOGseHl4BQ1C29AWUXIIf/OIwwqoNEK3SCuA7FRiBrE9B4/PcrGJ1OQNj83F4Xbol/TgVHfMiIZLAdcaVkgh8sLrd+liNQH/FqsNTfj15m1J0X+ffZuq/gTY7QnvIfJz6UzBJLs83ItQpt3RfZz5iuGfNPajpngUm0R8DoA5jDlzsOTAwZjzsC3Jjxg7H914PjlcskGdghgx9HG4OOQH34uwQyzz61/0qiYNQjXxECuWYbGM/DrjtPH/Mw/K+gBLLSA+cEfPr4MroArzcDuybbr8Zc72i2UnzeHnTgzD4Ug78SzIvCoARVOQxaFFR3TzWnkkHUVFShEuqKxZnKz4p4YYcf8ZhYhuu8wFgSHcuuwCJagI4bgchJQK/qe9c/RT6nGcg6KGREJpb+MI0EY/b0jcsni3AJBeCQNsBOFVYoApcM2Aom4VFgIRdHpeIG8D3YaxBD+qCiQ+rBOSVnci8hzkAG1t/pgHA4uwDzmu8xFKkkkIqCfkIRs204r/hiDgutoAAcowBMZ9+KS0CcXVBOHCvJw2jMQSJyeoeExF2DuTuRcuWAo9sefyUQ6/oBaIjPtiRH1KvQKvygAHb171d+vc4GRMDPoxN/kL5pwlVh1mBQ1quQJAJ5j0TgOAis+h8d3mnC8xTKE34+8sDNjyVXE6nFMN+H39TQDmocHScENvN74LoGScGU4f7g6IG3n3C3qnG6JBS+Z5tHOOzRYQx+u7MZmAl0OSsRLAS/VIKfRAWU92+12aaVPksGDBWQuCMvgNy2M2Mt8EwqbjosZAec5xLEAmXmcFTHiOWARWglpNpjdEtBQRxJJU5VL5/7F1X86XntXgUK4q+KggsUoIIK8oA+kgy4+zLaACqQGTVOX6MBWdehL6BxHn+tlyBMDGAqufd7WOX5WTJwKYDfXJJP2GXDPk7Tj5Ed7BOG7DMFaBRAJgI/+H2Ngeb2SKb0zkoGlQBHkefDr7xMA5HZeJPtKIzyApI9gmnPgf1c3mulfhe0gFekDCdNFnrOwi4Gs6eTACNjB+Uegcgojog4V25P8bctRYY6RL8AJklE9ACFAGZdBEahd4d4CmghFhbzcwaXYH5qTlS6DY+KfNH5Avzjo2JJ0poDkSCMxLn73H/eB+ifvgvyIFCWAji7BWC8hd0qj0FziMdrS70BlVbgamIgcmotGZDNPwm0L9l5iHv7WRoAFx57ScFS2r2iwot8oKu8l+TOCOg2mZ2nFdjTgOFQENzKkJ8OjEnsE8f6AzyXwT6MNF3RDRnuj0Lwo6wTlBMDIyqaz6G+RiLJMg/KUrQV/rh9uH0tWduwoxmky0kSMQ+rnXxZsGadgnxfgk1pCnsIsGYltvfdzTOBIclIsN8MLAGcz5gBwj94AE8DuC9Molip/JGwB57nRyJiyD3pyk6q5ij+3TzRLohcqyqCEQBTepF15+WVmW8SEr5jMUUkx3oMIsrH3ndwAQganKzyMpOJNxMQooGBYwcByw7axIhgPRGEr6GSGJhkAELoQ1YRg+dPeD5IIRDIqq5PA2Jh0Rq0YcS8XBi0ghGRFpCtWTdum5+yLOsQf2EuYY8AfnbQZDgCjHxBSKwTGpt8QCIDVH3/4H5OwEvldhliINwAFLsEyyIfGKV+vm3eEehVqKTdNxtDiPoLHCRiuwTJxCECxMDqDjTvZ63KaPKvRgV2i/F3ohm88V8LN8hgJcXD5pVGIPPNn9EBqSQC0I4AMxBUcQNCkarkFgSn/oCs9GCVep4eUG5BRAOcQOCWlGSc3If0IFqRfURQGRrKewPKEJ9sLnIowKCcw+f48N6UHjqYtgInaCCkBbPSj8VEkCr2g8U43wY1xX/BNkwreQrzg+oaJghOCGTU8RBxuIp6VFOGoEXgEsBLIgV6gBgxoLSI5CgiYNT+GBHsU01GthrceiMUtv9KgAYktgVNeGrBbtiOQVi9x8WjiAW7UNUnm4Vet7WtsFgDCDYEwQ/EVL1PnQf/xCDLTowTh4c4HPRDoQaiwhKIAae4B7xgCBydI/CDPOrevK0FR4p6w3VfoXgQiB3T1N8Y1PCD0X19JqcHGfzB5WkQE4p/kdeXBcEVUXEIFqSij82lMyrWq/7c+LFHA7z5/dwOHHg8s/Y8C2CmhbmALtare+4UWLfb25BmXABKABTniC8gRAP2yvDAiUAsElnrxFzITQa/sAFecAOY7zPV/8jMQHSbWAiUPGkQNABhw85xrSCv+mMSzFR8+7mjw01A8f4F8S/td4jnDHYxpT8/OEyV3gz2+GTfdAeAszswfJNGlQhEIjB0Bls0BKn4Iw7WKu9f1gmSagmvqleEwJwnZwjO7npz1HdCJ1hS/mlBcRXyF3i/M7NxqJFoeH27z7nnJaBmpUZKHsTbGUc1ALEoIGsGYl9ixS50gjAT/VhB8IzvGTrBVfWEz1MzAkRFTtecW731VdjNQPukVdhdn0Y8d/a7WYH6i/TBPBzUFwAlHwtGHOQISrgb1AMUgDETTA3+THAdeRJhg59V/Ektofa9I8wxVICkC7QQSAd2O3cftzPzdMK6aA4iZI4ILfYRbb9RgqICt2AxVnYZ4kkBvHOBxT/zN9ybHx/f5Ql2fkGCX6ANm6F8WCfqAS+Eq5AGcHJd2IFHagTMHAAj+mWBnDXuc81CjhsAi5dL2K8QCYI1aJ/PJtSSxEFXASv7C2I3ZB9/a0j/7nDn/j1pHsz9Jr8fNpxPBUAUUYD4wz5GBlmyAiORjtAIGDFwzSUwqiNZ1d1tPiB7/Q9VeI9KeJU16/knkEeQJEALjY4rkp74fCZiMDSA/PgvT/aT2gYgp5E/P29AKBQAo6TRth5T4VesQFb0i4K7RA2MZpgyFXCEQHCOixuYMPgy2L7+45ezSSKt2oUkURlpXkEMOLSiXPuDQZjk63N5bmzOSxQdLHX7AhwUEA0BAeQPJIQzkAuFlOK/GtyLdiGDKEBdllQ7YouxV2Xdwza9So4Kp5Z0yAgUhTlJgFzSFrznIHYIwKcCu2/L3LsCg6UI1b1/CA+ApIV5/32HqOIjdQusE4azip5Wc1b0q/QGIAlaWEJbXP3r/L+AEipw/+BtkQVY9fIM2i/ZhgVEgJO6DZ1ksVtlYdoQAPhVO0oKmYBmnAYco4DRCRB3TwCziptaE0auER9/VzRqKNOEYINOQg2m1l9GpGNQAhh1v6UmxNQh2M4+LmlUzll0OTjYQOaGlZAEMCrdhmBphaMBwBADrSQQc3//He8KgFETT7p6BHnjj2X9EXsDjrgBS6ihoAmcSQVYmE4JgYWFpp1waAQRoqDzxDhU+HxSnZHz/9JEY6Y5MJA+cwoWrt99+U3Mc/9g/NQTFaigAEtwB1yBzwzucZSX7RZEILhR1d5GDCsBLVUdIQvsldZfEJt5i/MHx2hGJZFkVVyK242iFeh58oBUFqIQbkfp2DV2X0CkAYgv1sU+P+I/HmBu8nErugdRnUWhfp+A/ddlbEH3uQlBsNobUEMHasK1HOYn8BEEvCUaiuigXRIKj+sGOPA4KAWz9/s7WxcgB4+a6/fI2osEwv4yOENAiPf+wQhbc/5f0gGisWuQaRFmGoIqguARWsBQgTTocDLMT5OJUQnhqdCEig+/EShKSEgTVV0MBMnz04BcshPnLk/+OaV0/dwKzB4QUt1NB6uTDfGOP+cNm9mEsBAFiM7AQh9AKVEU75vy68jeOxrUC4mDEuYO0oLqoSdHaEF2eXYYSm0V+oEOwpLmYFOF3Z4CmAeBTIGueiIw2xoKPzDBJVBXQ5g5O8/twwA+QguIjJt3+g0NQEcDfUXgO5gsqlTBLkQLdl86K3CWneitQ8sg/5oWAUJP2C3V3RoEyji5n4b9lB4t9pz2CA+cAFn1Z9I/uzYsU/ELtEBOCHYQQqGcFejV+yeuRJX31zsKV5IGjway9z6PLDxKwNEPsBuOEiqw57jGgOtZ1Y++T50AuMFl7hPIbhskiOwsATtRoc7rS7dXrpcgrMCGJca6ELJo+Y0be0BW5ZKGcFz4y8W9BduwcDnK9iO5fagsKpp9ANnvDPxeP8THNyIVFo1AMas8Qk5v2Ytm0LCCYAXqn+wQsPTBh/5Bcnne14Os3uCQt28vsK1WUESJFviBgAW//3u9PLxusXchcCR2WsNzv/ImvgZzzkUByDUAIrjTvmSHAowpJBQE4SUlxMxnARlQbIqkArVAJ6pBBvELCCKlkyCDAP45BYfEPfcUpfMch3Vn4bheYK4E66BxAxHSVd5INgEPgU/NBCDfNQ8Ho1CoINAPQAW/QT8OCIZlNFCB84XhoDChFByHGjx35v9BLgyhmojqHYb5QYXnuAecvua0hZe6BV9f7v4ibvgvamrmAc1TmaEir0LQ9h97eYAYVoM/nWA60i8Q3Ifezha9BqaaL3zvqd6IAuwwLSCCuCLuJWch4h30giPtyiAphKEBcCu9BV5wwzkMxID8rhMwdwMhcSFgrBT3RUTQboAUg3+p+Qe1IGarOioVnazmefV3lHpwA0AcLWCahUiXwePHWJsP+GH1gnp/we5KfOhJAbsj0H/BIEb04TbrTPsAyb2LLu93KwfCvn5PLAwrOXAa72eEQRo1CNdw5IprsAZ3hApy9zlcITG2vpCihsRSYxNS+J4vdBZ6B52eqRcQ/QXmSjAWSfa/5GA5qEg4iJFtm624AqXLrSA2gx8p1Mdqcghv41S0lSp/xAYs9gakQc4Ie2RTUYwYgt748mV+FU1Xgp14eW3XYZ6cdqGTNHwHICTwEeTPl0jEZwIgP9gDEaogeg5IHWCF+1eoAhvEKPB/EAeTRsM/pSAP5wjWEUMM1/NJRhwJbpJSgK7S7zF3EOsI5jBQBK9DV80Z8Y0COzvmWzJXgDl40KEC6cqvqgi4OB5cpgLFYK/1CvDiItXqC6/S87wfAUfPtxqfGNzlYaOjlf1IsHPPvffHgDAoEeEST4ZLZUd/RSo91/BjXY5ggWgQ4In3fyj4mUqPrInHOCLKO3wUwRsfyXpt1nEIRLrqcWeTuk7bigsbid1zD4iDRQtnIdQsyIXnFCn1I9D7ADgxEhOvR5AJosoUbu1FkJyYCi9OhQERoIx+4AX/YqUXQhtYEwKN4Cy1HntLMmtaAQpqfrT/UCoLSxeswjA5UWPPi0mjajUWxMTdVusNvt/ChMdmILK5IRMFu90BMEzFYHdg2GAgeYVHMMJIBTA7EFTx/5fpgTFXz9w/en0ZjD8kCDoKPNGwlB01BmoWQbh+AxR689mBponGJOr9OwmMu3dtJ/ylW1Tik4ElUPmR9RqII+pVhD9ychABMQ51gOIZg+/G+5mGIzLB1JJC5WhzYjhJ7IWmLDpA8jzsAafUPkB2WnFBF4iSxkq1ty7f25rv/+EQLOxs2oUdTSA9HIR9swdBlCcFe9owPC3XWDDC0ISVzsEVbSCF/sWdA5Fu4HJqankp2SeQCYYrImNalfmhpVxYrGkUS4LeSUjg8dD7+D7w/ybIfy7vlB9/HJ978zr7/45Qgajzj+4EjIK/ULHPRAOlKr/aG0AFcqCyu0GcW45Igh6JMJmhA49/U+cEssHNJhtXDC1MOya3j/sAiAGcrEtqtgjBD6wEzSDc7D8o6C8rIqAZyPk+NQoNLAZ1hR64Yl1FBY648smUYKnSg1Xwk/0DyRyArByMUobyByhCcPnOaPyoegREFS4jNfYAw+IHCjdC1J2WDZBke/OyN85J24WiXwDYPoJyYuCD238ulvuzwt6KgHf0shWKsqCFFGjB/w8HU8eeTED9wAAAAABJRU5ErkJggg==",sle="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAF9UlEQVR4nGWVy64eVxGF16X27u7/HMcyuZGYAINwmTBigngBXoc34El4B0ZMGDJjFCExQUIKiRKZYBITHdvn/L1rF4P+c+yEUqmH9WmtrrWLkdB4C1/91h/9yn947D8+8CfdlBeGGAMtqwNd6K7VWAJrw9qwLtw2nDaernh6wKuHPD3S1Vs6vaPT97W9r/Wx1seKUWj7Uzz6vX79T//wF/Gbx/7rw/jsFB/39nlrX7q99LKrp5bJZXAtrqW1uJIncbNOXafBU+o0tZW28got0AJ3KACsE4OfYvmzfvDMb/+4//Td9snD9rfr9vHWnyz9361/1fpNLLde0mt5pTZ7a9pCm32SrqQTfZI3aqNXHAwvcAB4BPwnk/oMEcqX8eaz1t9cHjxs7133f5z6p2v/Ylme9eWmLbexjlhnrPBirz3WxWv30rw0L/Yi96PpDrcDcPMEfq+qvQCfsFF1blcv2js3vb2xLNd9O/XT1p8u/Vlfnvd+25bResXC6BFLj2WJpUdv7uEe0exGByPoOAC//BH+cgNqUjfkU4mOEetde+O2vf+y8br71Nva+9q/XpYXvZ97z9ardUXrra3RerQWrUU4myLk4AzYiADwJ+NRQ41i7MSNEBIcM5YR1+f21rnlXcPWtbVYW1/a7dL21mZvbK211lv01lpEtIi0MxTmFGzMAABAN6gF1CTPxI1gkXa5Z5xGPNrbfo6xB/bQubW9nXvkHtXDPfqIJd2bI+1mpZjmNK17QFuxDzhBJued8Fy0KLvcp7fpNzJuM3JE7daIWGKMqAylW0bLiHQ0e1ppTXEK8Qrwkzv8fUIua6oG553wQpRIme7lbfpBxm3GnoEMZ+wZlYGMlu6pNh1pT3nqALCEugCeAB2ohKqYk9hZd4JFS5ThDm/lB9N305nGtKfnNKZiqk23qZhySZOcYhHFewXfI54UMCBDOYlU3TMkSaYWaCtdwXu5yprOKUxrqk9FyUWXNKXiBfCNgucGboGAUBwUJzFYO3G+MCwFtdAn6K6UZZSyXCXBAUVdGCoS5IVxAcQNujAHKCiLLHJqDtWZh1GHV0Et8EYNqOABTUhglKJoyKBBgSwCBC6Ajz7Azz+GiJbwhFTkZCXnEM6EJcuHDmmlztCkBE2IkMGAAhQoSCBBvgYA0G6xN4DgLE5IU5iqZA1hJ8zDqCY2qktJHfEnZSpIk6bE++kEXwHUEBMCmBBBFzE5UzNZuyBRshlSSF0aEg6MaDHIgyFCPAqvA/YdIjTgQ3WBLNZkpWoQPnRIUljdGiIkHd9jumgeO0ESEI97cNTPJj6Z4ISOZh1JUSVLwiAs7pRp02aTypRUhwIzjvhfPCKF1wH/BTqwA5pQlnYyipgs6dDBQVncZatZaZUlsUxZYVq0jyfm8kNeBzz/Gu0ETrjABAURAoTJOVVJpDAoM3ZOc5olfmMK42CYMrRTAr6tIK6QiSA84VtIIEosslSTNYUkUxyS5aEDQ6tMmQ7YDMOmjziYx8E56oPEl8DdDgM2/BLeIJVw9CRSTClZg97ZrDl0BF6m49V0GTIZQL4CvNuxFj47w4ASmqUkAalYU+DBoIbK8hAG506aZTLonWFG0IMa1AAHXlegW9wFGuAJG97hhFkqiuCxUZyqSSWR5GCZHKxB7nSwDcZADHiACQ4eJ/Oot9+BvsaLQD2Hby9RUEEs1cUlcdKpmWKSQ2VyqAY56J0RiEEPOqHxXYv2W4yJuANWxBkBOKEGFcwyjlhMYdLJSjLJpA8FAxqMwXZRQA0wgdQ94Hcf4nqDFnQhBDcY5YJUIqSSpnxpRqone6ol+2Af7Il2MJJxnN/8lgIA8yWQUKItaBMRsGEdDIrQoYNTnGSyBqdZQSY16IEYaANOOKn/A+htXH+OdgLOiB1BBOEGCz5ejmO6JpGEeexVJTmohJNORqIlnVDyO4CvvsT2AGm0BVEHo0IMHeEooeQipzDFY5eSNcigLgwoGYlIKHF/ky9Z+xD/WrCfoQUuRCGAKBhlwIBRQvmSuykkMYHkqx7EAPK+/wdqEbWmfB0bfwAAAABJRU5ErkJggg==",ale="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAABGSklEQVR42u3cx4tb6brvcf0DmmpUoxrUoAY1KCgwFAZjME1jjGmMTWNs2tjY2MY2DjjinHPOOeec3dXOOeecU2VlaSksSc/9aq1X0pJKqmD3Dn3upvnCSe197v38nlfS2fscW1x+kbCMloAsFY/skEY5KbVySb7JXfkoT+WtvJGX8ol/67s8lDr+o065KW65Jl7+q/zyF3/nWTpJx+gQ/7H94pPd/Oe38yduEZds4E9dK/Wykj95GX/OYvkq8/kz58h7mcmfP41/hMnyTCbIIxkn9/nv5raMlOsyTK7IELkgg6RKBshp6ScnpI8ckd5yQHrJHvmd/3578I/QjX+E32SNdOEfobMskV9lAf+vmiOdZIZ0lKnSQSZKe/7kSv7kdjKchkoFf2q59Ke+UsafWCY9pZQ/rZQ/rUS6Umcp5k8q5k8p5k8p4k8p4k8o4u928Hc7+Dsd/F1mpWLn7zArVhWpHOlsRvYC/Yf++t8A/j8fQCxrADvTA/j6vwH8/zGAaOzX/w3g/+cBaJEuEkqMMQbg/t8A2jiA8n/+AHzB7qLFx8K2zBhAA5Q16QE8+98A/q8PwOXvLYHYePEllsO666cGcPR/A/jnDaDRN0C80Ynija8QV2K3GsBlywDe5h3AVYAvAv0X4IUH4P7fAP7bB9DgGyau0BRx6yvFGd8j9YlTUp24LF+g/gDKGwbwAqwnwD1o5QD2/VcPYMT/BmD9q94/Thq0GeKMrpbG2B6pi5+S78kBJAoNoDFrAFU/PICP/+UD6PL/xwDqAlOlNjBH6sMQ6XulJnZavsWvyGcG8D7BABJvsgZwxxiAK2sAZ9ID8P/gAF78QwbQ/v/eAGqDc6Tav1BqtA1SE90v1fpp+Rq7Ip/id+UdA3jNAJ4nPsnjRGYAN0C9whe8C+kB+BmAP2sAu/jPNx1AjRrAlzwDeNqKARz/3wD+7r+qtSXy1QdLcJN8Dx+Qb9Ez8kW/Ih9id+Vt/Jm8sgzgfqL5ARwxBuBjAN70ADbznSE5gDWMJzWARekBvGsygLFy738D+Hf+9T20Sj77VsuXwFb5oh2SL5Gz8lG/Ku8ZwJvYM3kZfyPP4h/lUeIbA6iV24lGuZ5IDcALjQ8aP4+zOYCD/Pt70wNwqQE0WAbwLWcAr/MM4FbOAP78Bw+g6L97AN/CG+Sjb6N89O+Qj9oR+Rg+J++jV+Wtfk9eMYAXsTfyhAE8jH+TuwzgVqLBGMDlhFvOJ7zyZyI5AB8D8EHjyxrAtjYN4EnWAEYYA7j8XzCAXwoMoOJvHsB/aARfwtvkvS/ZHnkfOCbvtCp5G74mb6L35KX+TJ4xgMexj/IgOYB4rdyMN8i1hFMuGQPwyDlGcJoRHE+YAzgA/l7jn1VwqwE0WgZQLUuNAXxmAB+MAcyQVxClBvCQAdxtxQD25x1A1x8ewB9tGEAljO3+7wzgU2SPvPPvlje+A/LGf0LeBP+S16Fr8jJyT55Hn8kT/Y080j/K/dhXuROvYQD1cjWeHIBL/lIDOEXH6TAdoD0JcwBbGcAmBrCeL4Br+AWQO4DZ/MQ0B/C8mQGczxnA4YIDaM0LUNmqAfz2LxmA/b9xAB8iB+VN4IC88h2Rl/5T8jJwXl5o1+V56L48jTyTx9HX8kD/IHf1r3IrViPXY/VyJd4oF+IuqYq75SzYJ0E/ZgzAI/tpD6/DDgaylZdiE9efHMBqYwDfGcBXBvBJ5uUMYJIxgAeWAVyzDODcv2gAA35oAEV5BpAZwT9sAO+iR+VV4Ii88B2X576z8tx/QZ4Fb8gT7b48Dj+Vh5HXcj/6Qe7oX+SmXi3XYnVyOdbAAJwMwCVnGMHJuEeOAn/IGICbAbiMAWzhC+NGvjOs49fD6kSNrFADWGgM4L0awEs1gMeWAdxUA7jUxgGs+Le8AP+nBvAmelJeBE/IM99peeqrkif+S/I4cFMeMYAHoadyP/xK7kTey63oF7muf5creq1c4hU4H2uUczGXnGYEJxjBETpE+4DfbQzAqQZQzwBqZVWiWlbwS2JJ4ossTHxUA3ijBvDMGMB4YwB3ZFTeAZz6FwzA+gL0+jcN4L/sl8BL/Yw8004Df04e+87LI98Veei/JQ+CD+Se9lTuhF7JrfB7uRH5JNei3+SyXiMX9Hqp0hvkbMwppxjBcTrCEA7SXtrF67Ad/C1c/wauf60awHJjAJ8ZwAeZm3gnsxJvZHrihUxNpAZwvxUDOKQGsJsBbP+bB/A7df/JAfzD/mcBz3WuXvtTHvmr5IHvotz3XZN7DOBu4IHcCT6VW9oruRF6J9fCn+RK5KtcjFbL+Wid/MkITuuNcpIRHKPDjGA/8HtoJ98RtvFrYTNfGDeAv5bnf2XiOwP4KosTn2SBMYC3DOCVMYApiacyKfFIxifuy5hEcgA3YLrKAC7KYPlLBjKA/nKSARzLM4DNagCr/4UD6PRvGsB/YARPda5eOy8PAhfknu+y3PVdlzu+O3LL/0BuBp7Kde2lXNPeyZXQR7kU/irnI9+lKlojZxnBKV6B44zgCB3iI2E/7aEd4G8Ff1O8Tjbw03FNvFpW8jNyGc//Yp7/BYn3lgE8ZwBPZKIxgHsM4LaMSlyXEYkrMjTBABJVDOCsMYC+lgH0VAPo/hMDqGhxAJ1bOYCyf+4AHuuX+Ky/yMVfAv6q3PLdlJsM4Ib/oVxnANeCL+WK9lYuaR/kQuiLVIW/yblItZyO1spJRnCMl+AwQzhAe2kXXxB38B1hC18WN4K/HvzV8e8M4KssjX+WRfGPMp/nfw7P/8zES5mWHsADGZe4ywBuGQMYbgzggjmAxBnpn2AAiaPSJ5EcwD4GsAuubWoA6/83gB/964F+Re6Grsjt4FW56b8uN3y35LrvrlzzPZQr/qdyOfBSLgbfyHntvVRpn+Rc6KucCX+Xk5EaOR6plSOM4FC0XvYzhD20U6+TbeBvidXKBn42rot9l1Vc/4r4FwbwiQF8kHnxtzI7/lpmxl8wgGcyOfE4awAjE9cYwGXLAE4zgBMM4AgDOCi9E3ulZ4IBJBhAYpN0S6QGsByyxX/bAEqyBtDxJwbwX/xL4J5+TW6Hr8nN4HW57r8B/G254rsnl32P5BIDuOB/IecDb6Qq+F7OaR/ljPZFToW+yXFGcJQRHGYEB3gN9tJufiHsoK18UdzET8YN4K+JfZOVsa+yPPZJlsQ+yML4OwbwhgG8khnx5zI1/lQmxx/JhPh9BnBHRiduqgFcYgDnGcCfWQP4Iz2AndkDSKySLgkGkGAAifnyS2K2GsCUv2UAxQUH8A//HwbdiV2Xm2HwtRtyNXAL/DtyyXdfLjCA876n8hcDqAq8lnOBd3Im+EFO8QqcYATHGMFhRnAwXC37GcIe2sl3g+18SdwC/kZ+Mq7Xv8lq/SsD+CzLYh9lcey9LIi9lbmx1zIr/lKmx58xgCcyKf6QAdyTsfHbMjp+Q0bGrxoDGMIABiXOqQEcVwM4wAD2qAFsVQNYl38ACQaQYAAJBpBgAIm2DKDrDwzg7/gp+G8ewc3YTbkevilXtZs897flov8u+PfBfyRVDOCc74Wc9b+S04G3cpJX4ETwoxzTPssR7ascYgT7+U6whyHs4svhDtoa/S6b+Lm4Afi1+hdZpX+WFfpHWap/kEWxdzI/9kbmxF7JzNgLmR57KlPijxnAAxkfv8sAbjEAvgDGr8iw+EUZEv9LBsX5CZjgJ6AxgMMMgF8AxgB2SA9jABuNAXRt7QASDCDBABIMIMEAEgwgwQAShQbQ+n9VUNP/WcA/4HvA9RhXH7nFl7xbciFwR84zgCrfA/mTAZzzPZEzvudy2v9STvrfyHFegaO8AkcYwSFGsJ+XYC/fCXbTDoawLfJNtvBTcSOtj36RNdFPshL85eAv0d/JQv2tzNNfyWzwZ8aeybTYE5kceyQTY/dlfOyOjInflFHxawzgMgO4wACqGMBZGRDnJ2D8mPSNH8oZwBY1gLUMYCUDWMYAFlkGML1tA0gwgAQDSDCARKEBFP7nA/6RA7jCAC5FbssFDfwg+P57wD8A/pGcZgAnGcAJ30s57n8tR/1v5XDgvRxiBPsZwV4+DvYwhJ38OthOW8JfZBNtiHyWtZFPsir6UVZEP8jS6DtZBP4C/bXM1V/KLP25zNCfylT9MQN4IBNid2Vc7LaMid2QUTGe/xif/3E+/+N/MoDTagD8AkgOIM4A4rulZ5wBxJMD2JBnAPPyDGAs+KPyDKBf4QEkGECCASQYQIIBJP5d/7OAf+MILvH/8Rcid+Sv0B35kwGcC9zn4h/IKQZwkgEc9z2TY3wMHPG9kkO8AgcZwX5GsJcR7GEEO/liuJ0hbAl9ks20IfxR1tHqyAdZGXkvyyPvZEn0rSyMvpZ50ZcyR+f69WcyHfwp+kOZpN+XCfodGcsQR/N9ZGTsCgO4KENjf8ngGJ//DKB//DgD4BdAnC+A8X0MgF8A8e3mAOIb5Lf4GukaTw5gqWUAsywDmNDGAXQrPIAEA0gwgAQDSDCABANIMIBEqZE9UaIqVhVZcqSzJf5LBnCep7cqeoefd3flrHaPz/r7PPcPuPpH4D+RowzgMK/AIV6BA3wX2M8I9vJ9YDcfBzv5TrCdIWzVPshm2hj6IOtpTei9rAy/kxW0NPJWFkVeywLw50ZfyOzoM5kRfSLT9EcyWX8gE/W7Ml6/LWP1GzKaXyQjYjz/sQsMoIoBnJWBsZPSP8bnf+wwA+ALYHwvA+ALYHwbA9icPYA4A4gvlF/jc+WXeGoAk/+GAfzSigGUtXEAagS5/bsHUMUAzkXv8tv+Lt/w78lJBnCcARxlAEd8j4F/KgcZwH5egX2MYA8j2M0IdjCC7bQ1+E4200btnayntbQq9FZW0rLwG1kSfiULIy9lXuSFzIk8k1ngT48+lqnRBzI5es+4/nH6TRmjX5dR+hUZoV+SYfp5GRLj+Y/x/BsD4PM/xvMf2y+9Y3z+x3YwgK0MgF8AcX4CxlczgBUMYEn2AOLTpGOcAcStAxje4gBK/5MDSGfL9K/86xwDOM0ATjGAEwzgePC+HAk8kMP+R+A/lgO8Avt5BfYygj2MYBcj2MEItvOdYEvgjWymjcE3sp7Wam9kNa2k5aFXsoQWhV/K/PBzmRt+JrMjT2RG5LFMizyUKdH7Mol/3PHRWzI2al7/SP2yDNe5fr1KhujnZJDOAHSe/9gRywB2mwOI8fzH+AIY4ydgfBUDWK4GsEANYGb2AOIMIM4A4gwgzgDihb4E9rAMoMvfMIDiHxxAzghy+7v+Os0ATgJxnAEcYwBHGMAhBnDQ/xD4R1z9Y+CfyG5GsJMR7GAE22gLvww2M4SNgVeyntYGX8lqWqm9kuXaS1lKi7UXsiD0XOaFnsmc8BOZGX4s08MPZWrkvkyO3JWJfPkcF+X6o9dkVJTrj15kAOcZwJ8yWD8jA/WT5gB0nn/9gPyh8/zHdjGA7WoAfAGMrZXfYiula4wBxBYbA/glPqd1A4gzgDgDiDOAOAOIM4A4A4gzgDgDiDOAeGoAnZoZQL7vAcXNvgI/PYC21NxfJ+N35Difw0cZwJHQPb7h35cDDGA/HwN7eQX2MIBdDGAHbWcEW2kLQ9jECDb4X8h6Wht4IatpZfCFLKelwefgP5eF2jOZrz2VOaHHMiv0SGaEHsi08H2Zwj/WJPAnRG7KuMh1GRO5ygAuMYALMizK9UfN6x+on5D++lHpqx9iAFy/vkd66Tulp87nf2yzGsAaYwBdYvwCiPEFMMZPwNgc6RSbwQCmMoBJDGA8AxhjGcCQtg0gzgDiDCDOAOK5A/iZL4L/xhEU6hgDOMIADnORB/kiuF+7L/sYwR5GsJtXYCevwA5GsI22MILNfCfYxAg20Hpa638uq2ll4LksDzyTpbQ4+EwWBp+A/0Tmao9ltvZIZoI/PQQ+/xiTwuCHwQ9fl7Hgj45clpGRCzI8wvVHuf7oGRkU5fqjxxkAz79+kOvfxwB2MwCef53Pf32TdNfXSzedz39jAEvVAPgFEJttDKBjjAHEGECMAcSSAxj59wwgzgDiDCBeYfZPHsARBnCIL2IHGcB+cPbyMbCHAeziy+AOXoHtvgdc/SPwH4H/WDbSBoawjtbQKlrpfyLLaWngiSymhYHHMj/4WOYGH4H/QGYyqun8uVO1uzI5dFsmhm7K+BD44WsyOnxFRoUvygjwh0W4/shZGRzh+qMnGMBR6Rfl+qP7jee/t87zr/P861sYAJ//Op//Op//Ol8AdT7/db4A6skB8AUwxi+AGD8BYxNpnDmA2EhpFxtGDCDGAGL9pTzGAGIMINaaAXTMGUBqBAwgXqZiAPF/0AAOxW/LAQawL3JH9jCA3SDtDN7jW/592ea/L1sZwRZGsMn3EPhHXP0jWUtrGMIqWknLaan/sSzmI2MhzQ88lLm8ILMZ0kyaEbwr07Q7MkW7JZO0mzJBuy7jQtdkTAj80CUZGT4vw8NVMjR8jgGclkERrj/C9Ue4/uhBcwBRnv/oDukZ3coAeP51nn+dz3+dz3+dz3+dz3+dL4A6XwB1BqAzAJ0B6AxAZwD6aKnUrQMY2HQAMQYQYwCx/AMoNgaQ7xXIMwCjYktFmbIG4PjPDmA/A9jH7/A9DGBX+I7sAGo7I9gWuMu3/Ht80bvP1d8H/z5X/wD8B7KaVjKIFbSMlvLvL6aFjGU+zeXvmc3fO4s/Y0bwjkwL3pYpwQz+eO2qjNWuyOgkfuiCjAhVybAQ+OEzMjh8UgaGjzOAI9Ivckj6RsCPcP2RXQyA649y/dGN0j3K8x9drQawjAEsYgDzGQBfAHW+AOp8AdT5AqjzBTA9gBHSTmcA+mCp0AeC38wAYgwgxgBi/BSMtXUApc0PIO5IZzOym/0nRrAnfkv26LdkV/S27OCzeXvojmxlBFuA2wTgBv9dvujdBf8eV3+fq78vK733ZQUt499eQotoIc3nv2Yu/7WzaZb/jswI3JZpgVsyJXBTJgevy8TgNRkfTOJfljHaRRmlga/9JcNDf8rQ0BkZEjolg0I8/eGj0j98WPqFuf7wPgawhwFw/ZFt8ntkMwPYwADWMgCe/yjPf5TP/yjPf5TnPzqb+AKo8/mvT1IDGEujmg5AZwA6A9AZgJ4aQPecAfxqDiDGAGIMIMYAYgwg1poBlLRtAAWzFe5nB7ArflN2MoAd/B7fFr4lW/iM3qzd5rf9HdkQuAP+Hb7o3eHq73L1Zsu9d2UpLaFF/PsLaL7vjsyl2b7b4N+SGTTNfxP8GzI5AH4giX9FxgUvyZhgEv+8jNSqZLj2pwzTzsoQ7bQMDnH9oWMyIMT1h7j+8H4GAH6Y6w9vZwBbGABf/iJcf4Rv/xGuP8LzH+H5j/L8R3n+ozz/0enEAKIMIDo+ZwBDCw9AZwA6A9AZgN6KAcQYQIwBxMpVDCBWavT3DqCFEfzMQHYwgO36TdnK7/EtDGBT6JZs4LN6A0/2Oq53DVe8yn8b+Ns8+be5+js8+Xdksfe2LKQFNM93C/xb4N+Smb6bMoOm+a/LFJrsvyYT/VdkQuCyjAuAH7ggo4PgB6tkRPCcgT80ia+dlEEaT792RPqD3y8Efmiv/BHazQC4/jCf/WGuP8z1h9dJtzDPf2QFA1jKAHj+Izz/EZ7/yExjAB2jU2iiOYAoXwCjDCA63DIAfgHo/ahP4QHoDEBnADoD0Ns4gFiJqlhVZCl3AI5/3QBaalv8hmzRb8jm6A3ZyO/yDXxDX89n9VpaHbwpq3i+V3LNy2kZwEtoMS303pT5NI/m0GzvDfCvy3Sa5rsmU2iy74qJ778k4/wXZWwSPwB+APzAORkePCNDg6dlSNDEH5jE18DXDkhfbZ/00bj+0E7pFeL6Q1x/aKP0CK1nAFx/mOsPc/3hJbRQOofnMQCe/wjPf4TP/wif/5EJDIDP/yif/9GR5gCifAGM8gsgah1A79YNQGcAOgPQGYDOAHQGoLd2AHlGoLIZ2bP7dw1gS/y6bNKvy4YoRa7LOn6br9FuyGpaGbwhK3jCl/tv8C3/BvA3ePJv8OTfAP+6zKU5NItmeq/JdJrmuwr+FfAvy0TfJZnguwj+BRnrPy+j/VUyyv+niR8AP3BKhgROyOAg+MEjMiB4iAFk8P/QdklvbYf00rh+jevXuP4Q1x/i+kMMIMSXvxDPf5jnP8zzH55FPP9hnv/IJHMAEZ7/CAOIjGAAw7IHEGUAUQYQZQDRnj8+AL1cxQD0UiO7/pMDyJvN7O8cwMb4NdmgX5P10WuyNnJN1vDbfBW/0VfybX0FX9yW8fm9hBbznC/kqhfQPJpLswGf5b0qM7xXwL8iU2mK95JMoonAj/ddkHG+8zLW95eM9iXxz8kI/1kZ7j8tw/wnTfzAMRkUAD8AfvCg9Avul75B8IMZ/J4a169x/RrXr62RbtpK+U1bzgC4/hDXH+L6Qzz/YZ7/8DTi+Q/z/Id5/iNjaJQxgHYRBhBhABF+Akb6Nx1AlAFEGUCUAUQZQJQBRFszgArLAMoyAzAqtlRklncAjtYPoFA/MoAN8auyLnZV1uhXZXXkqqwMX5UVoauynJ9qS/nGvoQWBa7yE+8qP/Gugn9F5tBsmgn4DO9lmQb4VJrivQj+BZlI473nZZz3L/CrwP9TRvnA952R4T6F7z8ug/3g+4/IwCR+4ID0C4Af2CN9ArsYAPjBbdIzCH4Q/CDXr/HNX1sFPp/9Gp/9Gtevcf2hucTzH+L5D3H9ockMgOsP8/yH+fwP8/yHef7DfP5HBmcGEOlLfP5HGECEAUR6GAMoif6WPYAoA4gygCgDiLZ1ACVNB2DkSGfT/6YBtKXUANbGr8ia2BVZpV+RlZErsiJ8RZaFrshSfqcvpkV8c18QuAL+ZX7iXQb/ksyimTQd9GmgTwV8Mk0CfQKN91aBXyVjvH/KaO85GeU9A/5p8E/KMN8JGeoD33fUxPcfkgF+8P3g+8H3gx/YIb0D26RXYIv0DGyS3wMbGMBa6R5cLd2CyetfxgC4fo3r17h+jevXZhLPf4jrD/H8h8YTz39otGUAQ4jnP8zzH2YAYQYQTg6gV2YAEQYQYQARBhApMIAoA4gygCgDiFaYNRlAaQsDyDMC3d60f+UIkq2OX5KVMdIvyfLoJVkaviRLQpdkkXZJFtJ8frbN49v7XJrNF7lZPO0zeNqn0zTQpwA+mSZy7RNAHw/6ONDH0GjgR3lPywjvKRnuBd97HPxj4B+RQb7DMtAHvu+A9Pftk74+he8H3w++H3y/wg+sk+4B8APgB3n6g1x/kG/+wQUMgOvXuH6N69f48qdx/RrPv8bzr/H8h3j+Q3z+h3j+Qzz/IQYQSg6A5z/M858cQJgBhHn+wwwg3M0ygM5SHGEAEQYQYQARBhApMIAoA4iWqcCP/k0DaJItu58dwMr4RVkRuyjL9IuyNHpRFkcuyqLQRVmgXZD5NDd4Qebw7X02zeSL3Ayaxuf6VD7Xp4A+CfSJNAH48aCP9Z4F/wz4p2Uk8COAH+49YeJ7j8pgL/jeQzLQe1AGePcb+P3A7+sD3we+D3wf+D7w/eD7wfevMfEDK2ipdA0sli4B8INcf5DrD3L9Qa5f4/o1rl/j+dd4/rXRxPVrXL/G86/x/Id4/kNcf4gBhBhAiOc/xC8A6wDCDCDchRhAOM8AIgwgwgAiDCDSzACiJapiS3/zAFpboQEsj1+QZbELskS/IIujF2Rh5IIsCJ+XeaHzMlc7L7P5zT6LZgb+kun+v/h9XwV+Fd/y/5RJNBH0JPw44MeCPoZGeU7JSM9JGeE5IcM9x2WY55gM8RwB/7DCP2Die/dKPy/43l3Sx7tD/vBuk97eLQxgEwPYIL/71ksP3xoGsEq6+cH38/T7efoDPP2B+TRHfg3wzT/A9QenEtcf5PqDPP9Bnn+N69e4fo3r14aYA9AYgMYANJ7/0B9qADz/IQYQ4gtgiAGEcgYQZgBhBhBmAOE8AzBiAJEyVakaQYEBpHOks/07RpCvpfHzsjh2Xhbp52VB9LzMj/wl88J/yZzQXzJbq5KZNCNYJdP57T6Vn3BT+CY/mS90k2iC7yz4Z8A/beCP5tpHAT8S+BHADwd+GPBDPIdlsOeQDPIclIGe/TLAs0/6e/ZIP89u6evZKX08Fnwv+F7wvQrfB76P6/cpfP8iAt/P0++fbeD/EuCbf4DrD0wirj/I9Qd5/oMMIMgAguYAKjSef43nX+tnDkBjABrPv8YAtB6WAfD8hxhAiAGEGEAoZwBhBhBmAGEGEC4wALJHSlTFZs0NIJ29af/KASyOV8nCWJUs0KtkXrRK5kaqZE64SmaF/gT/T5mhnZNpwXMyld/uUwJnZZL/DD/xzoB/mp95SfhTXP1J8E+Afxz84+Cb8EMN/EPgHwT/gMLfq/B3gb8D/O3yh2er9PaA7wHfo/C94HvB9ybxl9MS6eoD38fT75tn4P/q5+n38/T7uX4/1+/n+gPjCPwA+AGe/wDPf5DnP8j1B7n+INcfTA6A51/rrQbwuzkAjQFoXL/GALScAYQ6SVGIAYQYQChnAEYMIFymKjAAoyJLjjwjsLciW3Y/M4CF8T9lfuxPmaefkznRczI7ck5mhc/JjNA5ma6dlWk0JXhGJgdOyySayG/48f5T/L4/yU+8k+CfAP84X/aOAX+Uqz+i8A8p/AMyyL1fBrr3yQD3Hunv3i393Dulrxt8N/hu8N0WfM866eEB32Pid/OC7+Vz3wu+18Tv7OPp9/H0+7h+H9fvM/E7+nn6/Tz9fj77/Ul8rj/A9Qd4/gNcf2CAGgDXH2QAQQYQtA6A67cOQGMAGvga15/GVwMIMYAQAwhVmOUOgOzhElWxWZMBqBGobEb27FozgNZUaADz4udkbuyszNHPyqzoWZkZOSMzwmdkeui0TNVOyxSaHDwlEwOnZELgJPgnZZz/BPjHZYzPhB/Jl7sRfLkbzlM/DHQT/4AMBn4Q8AOBN/F3gb9D4W8Dfwv4m6WXe6P0dIPvBt9t4nf3gO8B3wO+hy99ngUMAHwv+F7wveB7k/g8/T6efh9Pv4/r93H9fq7fD76f6/dz/X6uPzDQGEB5gOsPMIDAH2oAPP9BBhDk+oMMIJgaQBL/18wANAagga+1V+UMIMQAQmWqUqMmAzAqyslhlh5AnhHkzWYW/cnmxk/L7NhpmaWflpnR0zI9clqmhU/J1NAp8E/KJJoYPCkTgidkfOA4+MD7j8lofseP4ufcSOBH8OVuOOjDeOqHAj+Ep34w8IPcexX+bvB3Sj8X+K7t0se1Vf5wge/aJL1cG8BfD/5aA7+HG3w3+G7w3SZ+V89CBsDnvofPfQ9Pv4en38vT7+Xp93L9Xp5+L9fv4/p9XL+P6/cNJ67fz/X7uX4/A/Bz/f4kPtcfAD/A9QcYQKCHZQDgB7n+IAMIMoBgMwPQGIBWoWIAWs4AQiWqYksFBkC2dPbsmhtAS7U0gNnxUzIzdkpm6KdkevSkTIuclCnhkzI5dEIm0UTtuIwPAh88JmMDx8A/KqP9R0x8fseP4Fv9MK8F3pMfvh/wfV3bwN8C/mbwN5r4LvBd4LtW00rp7loB/jLw+cx3g+8G3w2+ey4pfM90At8DvoenP4nvHUtcv5fr944w8X1cv4/r94Hv4/n39zMH4Of6/QzA35N+NwcQYAABrj/AAAI5AwgygCADCDKAYAq/wACMSo3sWolZ1giKcnKks4UKDCBvNrPITzYzflJmxIDXT8jU6AmZEjkuk8PHZSJNCB2T8doxGacdlbHBIzImALz/sIz0Aw/+cN9B8A/w+34/+PvA38uXvT3g7wZ/F/g71NVvM67exN9kwV8H/ppsfBf4riW0SLq6ePZdFnw3+G7w3eC7JzMAnn4PT7+Hp98DvmcUA+D6vVy/F3wv1+8dpAbA9fsYgK8PMQBfL2MApckB+MH3c/1+BuBXAwgwgAADCDCAAAMIWAYQrFQxgGCFWXMDMCpWFWWXOwAje/7yDaClWhrA9PhxmRY7LlN14PVjMil6TCZGjsqE8FEZHzoiYzXgtcMyOnhIRgUOgX9QRvgPgL9fhtFQ7z4Zwu/5wcAP4mfdQOAHAG/ibwN/a/rq/wC+N/C9uPqeXL2Jv0rhL8+DP4/Ad4Hvmkngu5L4Uwh89wQC383T7+Hp94Dv4fo9XL8HfA/X7wXfy/V7wfdy/d4kfm9zAD7wfVy/jwH4UgMA3w++H3w/+H4T3xhAgAEEGEAA/EA7I3MA5aoyVamRPZhvALkjcKSzpbMXHkE6W3bhH2xq/JhMiR0F/6hM0o/IxOgRGR85IuPCh2Vs6BD4h2Q0jQoelJGBA+Dvl+H+JP4+GerbA/4eGezdDf4ufubtUPjbwd8K/hbwN6ur36Dw10lPJ/hOrt650qi7M4m/FPjFOfhzmuK7wHeB7wLfNd7A7+AG3831u8F3D6OhBn47D9fvAd/D9XuS+H3MAXjB9/L8exmAt4eBX+oD38f1+xiAjwH4LAPwg+/voMoZQIABBMpVZWbWAaQrttSKARSquRE0V6EBTIkfkUkx4MGfoB+W8dFDMi5ySMaGwQ8dBP+AjNT2y4gg8IF9Msy/V4b6gQd/sA94r4I38LeDv5Vv+lsU/qb01fd2rpdewPd0rgF/lcJfAf4y6eYE3wm+c6F0dYLvBN8JvhN8Zwb/l1x8F/gunn4X+C7wXcNNfDfX7wbfzfW7+zOAfuYAPOB7uH4PA/AofC/X7+X6vQzAywC8DMCrBuBjAD4G4GMAPvB97c0B+BmAH3wjBuAvN0sNIFBqZA+UWMoZQDpHOluwFQPIyta0UBubFD8kE2OHwD8k42ls9KCMiRyQ0eH9Miq038TX9snw4F4ZFthj4vt3g79TBvl2yEBvEh94zzYD3sTfDP5G8JNXn4RfR2vAXw3+SoW/XOHz5DsXKfz5FvxZJr4TfCf4TvCd4Dsn5sEfaeK7ePpd4Lu4flcSf4AxgHI3+G6u380A3En8nuYAPAzAwwA84HvA9yh8L/he8L2dVJYB+CpV4PsqzFID8JepwDcqMUsNIF2RJUfTERjZm9aaAbQm6wAmxA/K+NhBGacfkLH6fhkT3S+jI+CH98nI0F7w98hwGhbcLUMDu8DfKYP9OxT+dhng3QY+8NSX3/R9+U3fB3gTf526+tW0SuGbV9+dq+/WyNU3gt+4QLo2gt84l8BvBL9xBmXjd0riO8F3gu8E3wm+cyQDMPErXUMVPtfvAt/F9bu4fhf4riR+b3MAbvDd4LvBd3P9bssAPAzAwwA8DMCj8I0YgJcBeCtVDMCrBuArV5WpwPdZBmBUbKnILDUAS7Z0drNgc9my+5ExjI/vl3Gx/Sa+vk9GR/fKqAjwYeBDwGvAa8AHd8qQwA4T379dBvq2gb9F+nuT+En4TdLHvUHhrwd/bfrqewL/u+XquzcuUfgLFf48hT87G78R/EbwG8FvBL9xPPGlr3EMAxht4jt5+p3gO8F3gu9M4g+04PdVAwDfBb6L63cxABcDcCUHAL4bfDf47s5GxW4G4FYD8IDv6aBiAB7wPe0yAzAqV5Wp1AB8Jari7FIDMHJkZUuVGkCz2ZqOoLnyDWBcfJ+Mie2V0Trw+h4ZGd0jIyK7ZXh4twwL7QIfeA34IPAB4P1bZYB/iwzwJfE3Sz/vJunr2Wjg/+FeD/468NfwZS9z9b9z9T0M+KUKf5HCn6/w5yj8mQp/msKfrPAnZOM3gt8IfiP4jeA3JvGHGPjtnOA7uX4n+E7wneA7uX5nHnwX1+9iAC4G4GIALvBdCt/dScUA3OC726vMATiMwPeUq8pUpeYAjEpUxZl8RTk5skoPwG8vnHUALdXSKMbE98jo2B4TX98tI6K7ZHhkpwwL75ChoR3gb5fB2jYZFNwqAwNbDPz+/s3S37cJ/I3gc/Ue4N3rjKvvDXwvftr1VPC/c/U9LFffTV29ic/VN4DfMEs6N4DfMJ3AbwC/AfwG8BvAbwC/gWe/AfwGK/5wE78R/EauvxH8RvAbuf5G8BtT+L3NATgZgJMBOMF38s3facW3DMDFAFzguzoaFbkYgEvhG4HvrlCVqywDILtRicoyAG9RTg6z1ADS2ZuWdxC2pgXa0Oj4bhkV2wX+Lhmh75Th0R0yLAJ+eLsMCW0Df6sM0rbIwCD4AeD9wPuA922Qvt714K+TPzzAu9cY8L34Td/Tlbn6Hs7k1S82rr6b5eq7NiTxZyv8GRb8KQp/Yn78BvAbwG8Av2Eogd8AfgP4DeA3JPG5fmMAfxD4jeA3gt8IfiPX32gOoCQ5ACcDcILvBN8JvvMXMzWANL5RpYoBuCpU5WbJARiVGtndJZmSA0hXlJMjMwKypbNn8jWXLZO/DaUGMDK+U0bEdshwHXgaGgU+Anx4qwwObTHxtc0yILhJ+gc2Sj//BgO/j2+d9PGuBX8N+Fy9e6XC5+pdyw34HnzD7+40r76b5eq7GlefxJ9pwZ+ajV8Pfj349eDXg18Pfj349SMYQC7+oAx+A/gN4Ddw/Q3gN4DfAH6DBb+R628EvxH8RvAbOxsVN6YGAL6zo1GRkwE426vAd7bLPwBXmarUyO6yDMBdbKkou+QALNnS2c28LWXLHkFL5Q5hRBz82Hbwt8lQGhIFPgJ8GPjQZvA3yQBto/QPbpB+AfD9wPuA966h1dLbs8rAT8L3BP531zKFvxj8RQp/PvjzFL559Sa+efW/1oNfD349T359Cn+cBX9UBr8e/Hrw68GvB7+ez/168OvBrwe/Hvx68Ot5+uutAwDfiAE0cP0NDKCBATQwgAaF3/iLigE0gt/YQQV+Y6UZA3AYge8sV5VlDcCeGkC6YktFZukROLKypbNnRtBcyQG0pkKDGB7fJsNiW8HfIkNocBT8CPBh4EPAaxtM/OB66RtYK338wPtWg78KfK6eerqXg78MfOBdSwz47vyu7+Y0r/63JDxf9LpannwDvz6Jn4SfbMEf3zJ+Hfh14Ncl8Qem8Sss+OVJ/Hrw68Gv5/rrwa8Hv57rrwe/Hvx6E98YQAMDaAC/AfyGjkZFDeA3tDczBtDOyNFYoSo3Sw7AqNTIblSSKd8A0jmysqVKDqCljBHYWq65YQyLb5GhsST+ZhlMg6KbZGBkowwIAx8CXlsP/joTPwC8H3jfSuntTeKvMPB/dy8Ffwn4XL0rib8AfPPqM/iz0k++iT/Vgm9evYFfB34d+HWjCfw68OvAr+Pbfl0Ofh34deDXgV8Hfh34deDXgV8Hfh34deDXgV8Hfp0VXw2gHvx68Ot/UTGAevDrO5gZA6hUtTNyNFSo1AAay1SlRnajkkzOYktFORUYgMvefOkh2JqvpXEMjW+WIbFN4G+SQfpGGRjdIAMi4IeBDwGvrZW+wTXgrwIfeOrlWyG9vFy9Z5nCXww+8K6FGXznXPCB5+ediW/Cd1ZP/q/qyU/j14034DvWjcnBH94Uvxb8WvBrwa8Fvxb8WvBrwa8FvzaDX2bFp5I6BlAHfh34dVx/HfhG4NeBX9fRqKguOYD2qkoV+PUVqnJzAA1llkqN7A0lmRqLcyrKLjkAS7Z09kzNjsFWOHcrGhLfKINjG8HfIANpQHS99I+sk35h4EPAa6ulTxD8QBIfeN9yWiY9vcB7uHp3Eh94F/Cu+eDPU/jANwLPb/sMvgn/q3ryDfy6JP64PPhcfS34teDXgl8Lfm0r8WvBrwW/FnwjBlDLAGrBrwW/FvzazkbFteDXgl/bySyFbwR+XaWqnZGjzjIAozJVqZHdqMTMGEFxTkXZNTrS2bKyZ3I2l83M9YMNjm+QQbEk/noZoK+T/tG14K8BH3htFa2UP4LgB8D3A+9bCv4S8IH3LGIAKfx5BLxzDqXwZ4BvXn02/kQyrz4bf5R0qOXqa5viV6bwa/jCVwN+Dfg14NeAXwN+TW8Cv6aniqe/Bvwa8GvArwG/BvyaLioGUAN+zS9mxgA6GhXVgl/bXlWpAr9WDcCoXFWmKjWyG5WYGUMotlTUtAZHOltW9kyNzWUzc7ay3AEMiq+XgbF14K+V/voa6RdZLX3DwIeAT+JrK6R3kKsPgO8H37dYfvcC71kI/gLw51vwgXfOAn9mDr4J/6u6+mz8McTV1xbArwG/Bvyaga3A79UCftcc/NQAOqnAr+mgAr+mUtXOyFFboSpXlVkqNbIblWRGUFdsqahp9Y50tqzsmRqay2bW2MpyBzEwvlYGxNaAv1r6RVdJ38hK6RMGPrQC/OXSW1smvYLAB5YwAPB94HsXMID50t1twndzcfUuhe8EvnE6mVffFN+E76SuvmNtHvyaYWn4yppB2fjV4Ff3JfCrwa/ubVRWDX41+NU8/dXgV4NfDX71b0Yl1eBXg1/d2ai4Gvxq8Ks7qbj+auCN2qsqzZL4RhWqclWZqtTIblRilhxBbXFORU2rc6SzZWXPVN9ctkwNrcw6iAHx1dI/tkr66SulbxT8CPDh5QxgGfhLpZcGfHAxA1gkv/u5eh9X7wXfA77bhP/NlYSfmQcf+IZJ4JtX3zy+Cd++ZmhT/Grwq1vA/w7+d/C/g/8d/O/dVOB/B/87+N87q8D//osK/O8djYq+d1BZ8KvbGTmqK1TllspUpUZ2o5LMCGqKcyrKCfjaTLas7NnVFcqWXX0rS42hfxz8GPgMoE8U/AhXHwY/lMH/PbAQfK7eB7x3HvhzTXy3wnfNAB945zTwgW/k6hX+L03wzSe/o4LvYLn6LPxq8KtN/HZW/O/gfwf/e2+jsu/N4H8D/xv437qowP8G/rdfVJ1UOfhGlSrwjSpU5aoyS6VG9u8lZtWpii0V5clhjkBlS2dvWm2hbE2ra2XJIfSLgx9bIX10rj4KfGQpA1givUJcvcbVB8EPgO8H3we+d4508wDvngX+TBPfZeJ3dqbwufoG4BsUfL159Xnxa3Lwq/Pgfwf/ewH8b+B/A/8b+N/A/9ZNVQj/1yb4xd+AN2qvqlS1M3J8q1CVWypTlRrZjUrMjCEU51SUJ4c5ApUtnT1/+YZRY8tfbSvrG18ufWLL5A8d+OgSBrBYeoUXSc8Q8NoCBjBfegSA989lAOB7wfeA755pwHd1cfVJeOcU8Ln6xjz49T+I/z0P/jfwvyXh8+HTV/C/gv+1qwr8r+B/Bd4I/K+dVB2Nir52UIH/tVLVzsjxtcJSuarMUqmR3agkM4JvxTkV5clhxhBsWdmbL2sYtsLVtKI+cfBj4OvgR8GPgB8GPwS+Bn4Q/MAcBjBbuvmA985kAFy9W+G7FL5T4Tcq/AYFX6/g+YnXUcF3sDz57S3wlQY8fc/B/wb+tzz4X8H/Cv7X7ioTvzSF/wX8L51V4H/5RQX+l45GRV86qNqrKlXtjBxfKlTllspUpUZ2oxJzAOmKcyrKyZGV7Zs1e8ulB2FrueZG8kcc+NhiBrBIekUXSs8I8OH5DGCe9NC4+iD4AfD9VnwTvosLeNdk8E34XxuT8OPz49e1Al/Bp/G/5cH/miwP/hfwv4D/JQnfEr4awGfgjdqrKlXtjByfKyyVq8oslRrZjUrMERgV51SUJ0dWtmRfU9lb3zdb68s3jj/i4MfA18GPgh8BP6zwNfCDs8AH3jeDAXD1HvDdOfhOhd+Yg1//I/hJ+Bz8r+Cn4RX+F/C/dFdZ8D8nA/9zZxX4n4H/lKyTqqNR0SfwP7VXVaraGTmMKlTlqjJLpUZ2o5KcinMqyu5zMkdWNmtf7G3IZva1jaVG0Tu+UHrFFkhPHfjoPAYwV3qEgddmE/gB8P3g+8D3gu8B353En0TAOycQ8I3jwAe+YQz4wNeb8B3rTPgOtcNaid83g/81g1+ewv9i4pel8D+D/xn8JPynZOB/6qwC36gA/sdk7VWVqnZGjo8VqnJLZZZKjexGJZaK81TUtE+OrGzp7K3rcypb0760oV5x8GPzGQD4UfAj4IcUfhD8wHQGME26+oD3TgGfq3crfJcFv7EAfp3CrzXh2xs/8fLgW66+Cf6XJHwO/meF/wn8T3nwPwJvBP7HTqqORia8Bf9DpaqdkeNDhaVyVZmlUiO7UUlOxTkV5cmR6SPoWdnbGIiffrDkWHrGwY+Br4MfBT4yiwHMlG4aVx8EPwC+H3wf+J48+E4LfoPCr28O34QviG/A5+L/bvYZ/CT8p2Q5+B+7qEz8kjS+GsCHjirgjdqrcvDfJ6tQlVsqs1RqZDcqyak4p6I8ObKypfqQzN7GbE372IZ6xufK77E50kMHPwp+GPwQ+Br4QfAD4PvB94LvmcgAgHeNJ+CdY8EHvnE0+MA3jGwVfuonXrP4Xyz4nxX+pxz8j0n4HPwPvxoVf/hFlYP/Pll7VaWldkZp/HfllsoslRrZjUpyKs6pqECOrGxZ2TO9b022lvvQTL/HwY/NZgDgR8EPgx8CXwM/OIUBTOb6uXov+B7w3QrfBb5T4Tem8EcQ8HXDaKiJX6vwa3Lx++XB750f/1MKv5vZxxz8D8ny4L/vpAL/fQ7+u2SVqnZGjncVlhT+2zJLpensRiWWivNUlCdHVrYm2Qv3Ll+2Hys1jh5x8GPg6+BHpzOAaQxgqnTVwA+C7wffB743D77Tgt+Qiw987eBm8NWXva8W/C8WfAM+B/9jBr/0Q1cFb8F/D/77X1QW/Hd87r/roLLgv03WzsjxtsJSuSXg36QqNbIbleRUnFNRgRxZ2bKy/0A2s7c/WI/4TOkemyHddPAj4IfBD4GvgR8A3w++D3wP+G6F77LgN1rw63PxB6XxK1vE75WD3yOD/9GC/yEH/31nAz4L/10nVUcV8G+TtVdl4xe9YQBvKlTllpriO16Db1Riqbhpr4oK5MjKlpW9cK8LZWu5N83UPT6DAYCvgx8BPwx+CHxtEgMA3w++F3wP8O4x4APvGsUARmbwGyz4dQq/NolvwjfF75Mf/3MO/kcL/gcL/vsuKgv+u19UCv9tR5UF/02ySlW7dAb861TlZq/Kcio1shuV5FSc3ctkRXlyZGVrkr2N2bJ79QN1j4MfA1+fygDADyv8IPgB4P3jGAD4HvDdFnwn8I3DwR9m4tfnwa9J4vc3/gkdA/975vO+IufLnoH/KQ/+Bwv++xz8d78apfHfdlJZ8N90UPAK/3WqdkaOVxWWyi0p+JfJSo3sRiU5FWf3IllRgRxZ2bKy/0C2H8s6mm5x8GPg6+BHwA+Dr02QzsHxDAB8H/heC77Lgt8IfMPQDH5dK/C/tYD/sRX473Lw31rw33RUWfBftzfRX6VqZ5SGf5ms3FKZJfBfmNmNSnIqzu55sqI8OZpky8r+A9l+vm5x8GPg65MZAPgh8DXwg+AHxjIA8L2jGYCJ38kFvtOKD3z94Ax+rcKvSeL3y4Pfuxn87k3x31vw31nw3/6q4BX+mxz81x1M+FftLfD0sp2RiW7Bf5GqzJIF/3mykpyKm/asqECOrGxNsv9Atp/vtzj4MfCjE6VLBPwQ+Br4QfD94PvA94DvVvgu8J3gN4LfkMIfZNQEv7pvC/i/N8VPX70FPw3f2YA3U/hvLPivkwH/qoOCV72sVJn4RS8YwIsKlQX/eVlOpUYG/rOSPBVn97SoQKA/yc6Wlf0Hs/18v8XB17n86AQGAH4IfA38IPh+8L3ge8B358FvAL/egl+bB//7D+C/z4P/Ngf/jQU/Cf8qmQX/ZSqF/6JdujT+82TllkB/lqo0nf2ZGsBTa4A/ya0of48dWdmaZG97j5LZfr6u8UkMAPwo+JFxDAB8DfwA+H7wveB7FL4LfCf4jUMYgMKvB77Ogl+Twu+Tg9+rbfjvCuC/seC/7qTgTfzilx0s8PSiUqXwn7dT6Kpn5ZYs+E9L09mfJCvJSYE/tlaUv0eOJtmaZM/fw+aytb0Heeoa5+nXwY+CHwE/NIYBgB8A3w++F3y3wneB7wS/EfyGHPxaC361Bf/bT+C/teC/seAb8Bb8lxb8F6kU/vN26Uz0VBb8p2VmT5KVpjPwH5fkSaE/slaUv4eOrGzJHlizt637qWx/T13iE9QAwA+DHwJfG8UAwPeNYADgu4cxgBz8BuDrga+z4NdY8L9b8L/+BP4bC/7rXxS8wn9pwX9hwX9eqVL4z9pZ4OlpudmTcoVu6XFpOvtjNYBH1izoD1MVmT3IzdEk2/3c7M13r1C27O7+YF3i4OtcfxT8MPgh8IPgB8D3ge8B3w2+C3wn+I0mfvsUfh34tRb86gx+hRX/S/Zv/Dbhv87Bf2nBf5HEVwN4bsF/VmnAmyXR6UmFQrfgP7YG/CMzu5FCf5gK7Ae5WcDv5+bI7h7gWQF5t43dSWX7e+oSB1/n+o0BgK+BHwTfD74PfI/Cd4HvBL8R/IYB6vot+DU5+N9y8D9n45dZ8d8p/LcK/00O/qs8+C8s+M8t+M8s+E+TpeAV/mNrCv5RWRrewH9YaoI/yA3w+7lZwO9Zuutoks3aHYcFs4Vu58tmdusn6xwHXwc/yvUbAwA/CL4ffC/4HhO/gwt8J/iNwBsD6M8AwK818c3rB/+7Bf+riV+ehd8tD34XKW0J/6XCf2HBf67wn7XPwD+tNOGfJFPwj1Mp+EflCl0FuNED4I0U+H1rFvR7qZLQBQI4N1uq26ksoLda2c1kth/vRk6d4+Dr4EfBD3P9xgDA9w9lAOC7W8Cv7aOu34L/LQ/+pzz47wvgv6ZXzeA/z4P/VPWkXboMfIVCt+A/VD0oM+CN7oNvZIG/V2Ji381XEjpfgN+2dAvsJllBW9ENawrv+k90TfVrfDQDAD8Kfhh8jetXA+igBtBeDaDSGAD49eDX5eBXg/89B//LT+K/VPgv8uA/U/hpeAv+Ywv+Iwv+w3ILuup+aToD/55Cv5vKAn7HmsK+rbplzZHpJth5y0Wl663omj2D15quttCvcfD1kQwA/PBwBgB+AHwf+F7w3eC7uH4n+I3gN4BfD35dH2MAFTU5+N/A/6rwP1vwP7YevyQf/nMTv/hZDv4TC/5jhf+oItNDBf+g3IKeSuHfA/5uqQWd7qSyoN9W3Spq2s1UjuxugJ3qeqpCsM10NZUF70obulwgcwDgR8APga/x9AfA9/H0exS+C3yniV+ZD7+6lxpAHvxP/wL8p+0t8JVp+KJHyVLwFRb48hz4MgPdcdcsjX8npzR4blZw1Y0iA9voeiabtWupCuGqrjRXHsRLbehiTr/ER6YH0DEEvgZ+AHwf+B4LfiP4DX0t1w9+TR78rz3Mf+Wugd89g/8h81Ov9F0L+C8U/vOOaXgD/2kO/uNKC7zCT8I/qMjA3y+3oKvuZvAdd0ot4KpbJdngN61Zwem6NQV/LVMa/WqqFoAvW7qUr2YwL7Sh86pf4uDrXH9kmGUAgxgA+J4BDAB8Zz9jAO2MAYBfB34t+DW9jAGUfwf/2++W6+9uefpbif8yH37HbPwn7S3wOfhp+AoLvMpAT2Wip7LfLrWgW/Bv5nSjOA84XUtlgb9qZruSpxaBVRctXbDWDGZz/ZWnKmMA4OvgR8APgR/k+v1cv5cBuLl+NYB2jbn4vbPxv6Wuv7vl6c/+Z/XMp/9n8Ntn8NPw9MCCnwVfboEvy4J3JOFvlWbQb1pLgdP1VLngqqsqcHOzXVZdStVaZEvnrbWAWtWK/sypkzEA8CNDGAD4QfD94HvBd4Pv4vqd4DeAXw9+XW/L9YP/PQf/cw7+hxz8t23Af9rBAq/wHxXAv1+RA2/Bv6O6bcI7blnwrfA3SnLQ6VqqXHBrgF9WXTKzWbuYqjXIlv6yVGVvPeq5FjprqVN8WHoAHYwBgO/n6feC7wbfBX4j+A1/WAYAfg346QGA/7W7un6F/zEXv0vr8J+1At+AV/j3LaXhyzPoBnyZgZ7KfrM0B52ul+RBVzUBp8uqS47sLlrAL1hrBXRVgf5M1QbYZGdyOp2nTnHwda4/An6I61cDqPRYrl8NoKI+P37m+rsZA8jCf9/F8rmf/YWvJI3fqQl+cSvwi9LwFRl4K74Bb8G/aZaGv24pC1x1pbgp+iVrJrjRhUwG+HlrhS66APS5fP0AbqpTOZ20ZA4A/Ahf/DTwg1y/D3yPun4n+I3J6we/rpcxgHJjAOB/72G5/m6W6++qBtCl6Ze+tuI/UvgPKxU83W9n4hvwFvw75TnwZVnwjhvgJ8uCT2VFV13Og35RdaEoC91+3iyN/pelghddAPus6oyl1uCebKYTOR1XdYwPSQ+gfXIAAfB94HvAd4HvBL+ht3n9xgDAr8mDb1x/U/yCn/vN4T9uI/4dVRZ8WRa843oSvjQHna6WZMNfVl0qLoBuwT9v6S8zW1VOzWGfzYN9Ok+tQc6Hm69jOXWMg69z/WHwtQF5B1BhDAD8OoWvrr/sW3fL9Vs+9z90UQNoBf7zVuLfV6XhKzLwufg3y7Lg0/i58FdKsuEvWcqHfj5VNrq9yswEV51L1VZs1UlrbUC24h7N6UiesgcAfgB8H/hu8F1cfyP4DeDX98xcfzXX/727GkDy+n+zXH8e/Dd5vvQ1we/QFP9BK/Bv061yC3xZFryBf63Ucu0p+JKca0/BFxdAp79UVY7sssBVZx0/iK06oTpubz3ykQIdtnQop45x8HXwwwMyA/BmBlCRGkDy+mvBr+lhuX7wv/xmDCD99BsDsPwrePN97reE/7AZ/DsVGfi8+GUZ/GtmTeFLsuEvpuCLm0FPZYIbncuURj+j+mHsnFoL3RxyqoOWDqg6pAfQnwGAH+jLAMB3c/1O8BvN6y+v+90cQPr6u6UHkPzf0W96/Zl/Tj/7S19T/OKW8IEvysW/pcqCL8uCd1wtbQp/qSTn2i2dL86Gr7L0Z1ETdPtZswy6pULgzWKrjqqO2NsOnQ852f4CdYgPZAADjAFUJgfg5/q94LvAd4Lf2DMzgOT1V4OfGoBx/V3VALpYrj/zr+BN47/M81v/ieVzPx/+vVbgp+HLMvAp/CbwqrzwxXmuXcGfS5VBtwNuP52LrmoNeF7snA7b2wZdCHmfpb2W9qgBtI9y/WHwNa7f3yd7AA3g1yevv4cxgLLq1PX/Zrn+LvmffuP6O2U//Xnx27eMf7vCAt8MPvCOK0n80jzwJU3RDfjiZtDpbFEWujUTPKd86C2BH1YdspaD3dJFF0LO125Vh/gAYwCVagDt/OB7wHeB7+T6G35Xz39yAMnr75YeQPL/KldmAJ0LX39z3/gftbd84au04LdrHf61six4A/9yDr4BX1IAvrh5+DNFTeFBt2eBq447mqK3CZwOqg7YC2Pnu+jmkJPtsrTTUodYcgDgh7n+YJ/sAfD8lxsDAL+2u3n9xgCS19/V+L/MVfDpV9ef/fRn8ItbgV+UDz/r6pviO5L4TeBLCsAXq8/23GtX8KeLmqCnykZXNXflrQKn/al+EDsf9I4Cbaf2sf7mAEJqAL7eDAB8F9ffCH59D3MAyeuvBv/7b5br75K+fuN/T/+d+b+2ZV5/HvxnzXzps+LfycG/mcIvz8a/WpYF77hU2hTeip8Fr2py7Sl4OlXUBN7eBF111NE69ILgqn2qtmDvbAF7u6Vtqq2qzADAD/5hDKDCbQ6gPDWA5PXXdDMHkLz+r10tA8jz9L9Ofe7n/LN7hb70tQX/Whvwz6vywhdnw5/OgT9ZlIVuP54pG52OOLLRm7vyguCqPfafu+xcaCv2ljy1j4Ef7WsZAPhurt8JfmOP7AEkr/+bwv+s8Ft7/blP/8NWPPst4St4Az8vfEkB+OIW4IvywtuboKsKoee78rzglnbb8193a7C3toC9WbXJUmYA4Ae5fusAGpLPP/i13SzPf3IAXTLX/yEH/3Whpz/P5376d34ufkUG/3oO/pV8+KUt46fhi5uHP1GUDX9M1QRddcjxc+i7VbtUhcCbe8Zbi71RtcFS+xj4Ua4/OYAAA/AmBwC+s0fOANT1pwfQ2RhA9vV3Utdv+RdzNvnWn/Ol767l6W8rPvCOC6V54EsKwNPp4mbg6XhRBv6o6ohZNrqqNeh7WkKnHal+4Lpbi51qvaXKrAGA7+X6XakBgF8Hfs1vlgF0ST//qf/TbCXvLNf/Kv/T3+LnfnP4V/9m/ILwRRn4I5aaoKvaim4Fz0JXWdHbct2twV5naa1qjU3+HwuefjlXE4+yAAAAAElFTkSuQmCC",ole=0,nD=(n,e,t,i)=>{if(!n[t]){let r=n.useDelayedTextureLoading;n.useDelayedTextureLoading=!1;let s=n._blockEntityCollection;n._blockEntityCollection=!1;let a=ge.CreateFromBase64String(e,i+ole++,n,!0,!1,ge.BILINEAR_SAMPLINGMODE);n._blockEntityCollection=s;let o=n.getEngine().getLoadedTexturesCache(),l=o.indexOf(a.getInternalTexture());l!==-1&&o.splice(l,1),a.isRGBD=!0,a.wrapU=ge.CLAMP_ADDRESSMODE,a.wrapV=ge.CLAMP_ADDRESSMODE,n[t]=a,n.useDelayedTextureLoading=r,zu.ExpandRGBDTexture(a);let c=n.getEngine().onContextRestoredObservable.add(()=>{a.isRGBD=!0;let f=n.onBeforeRenderObservable.add(()=>{a.isReady()&&(n.onBeforeRenderObservable.remove(f),zu.ExpandRGBDTexture(a))})});n.onDisposeObservable.add(()=>{n.getEngine().onContextRestoredObservable.remove(c)})}return n[t]},Fx=n=>nD(n,nle,"environmentBRDFTexture","EnvironmentBRDFTexture"),sD=n=>nD(n,sle,"environmentFuzzBRDFTexture","EnvironmentFuzzBRDFTexture"),uX=n=>nD(n,ale,"openPBREnvironmentBRDFTexture","OpenPBREnvironmentBRDFTexture")});function mX(n){return class extends n{constructor(){super(...arguments),this.REFLECTION=!1,this.REFLECTIONMAP_3D=!1,this.REFLECTIONMAP_SPHERICAL=!1,this.REFLECTIONMAP_PLANAR=!1,this.REFLECTIONMAP_CUBIC=!1,this.USE_LOCAL_REFLECTIONMAP_CUBIC=!1,this.REFLECTIONMAP_PROJECTION=!1,this.REFLECTIONMAP_SKYBOX=!1,this.REFLECTIONMAP_EXPLICIT=!1,this.REFLECTIONMAP_EQUIRECTANGULAR=!1,this.REFLECTIONMAP_EQUIRECTANGULAR_FIXED=!1,this.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED=!1,this.INVERTCUBICMAP=!1,this.USESPHERICALFROMREFLECTIONMAP=!1,this.USEIRRADIANCEMAP=!1,this.USE_IRRADIANCE_DOMINANT_DIRECTION=!1,this.USESPHERICALINVERTEX=!1,this.REFLECTIONMAP_OPPOSITEZ=!1,this.LODINREFLECTIONALPHA=!1,this.GAMMAREFLECTION=!1,this.RGBDREFLECTION=!1}}}var pX=C(()=>{});var aD=C(()=>{ks();Pt();hs();bt.prototype.restoreSingleAttachment=function(){let n=this._gl;this.bindAttachments([n.BACK])};bt.prototype.restoreSingleAttachmentForRenderTarget=function(){let n=this._gl;this.bindAttachments([n.COLOR_ATTACHMENT0])};bt.prototype.buildTextureLayout=function(n,e=!1){let t=this._gl,i=[];if(e)i.push(t.BACK);else for(let r=0;r1&&(e.depthTextureFormat===13||e.depthTextureFormat===17||e.depthTextureFormat===16||e.depthTextureFormat===14||e.depthTextureFormat===18)&&(o=e.depthTextureFormat)),o===void 0&&(o=s?13:14);let M=this._gl,D=this._currentFramebuffer,O=M.createFramebuffer();this._bindUnboundFramebuffer(O);let V=(X=n.width)!=null?X:n,N=(j=n.height)!=null?j:n,w=[],U=[],G=this.webGLVersion>1&&(o===13||o===17||o===18);y.label=(me=e==null?void 0:e.label)!=null?me:"MultiRenderTargetWrapper",y._framebuffer=O,y._generateDepthBuffer=a||r,y._generateStencilBuffer=a?G:s,y._depthStencilBuffer=this._setupFramebufferDepthAttachments(y._generateStencilBuffer,y._generateDepthBuffer,V,N,1,o),y._attachments=U;for(let se=0;se1||this.isWebGPU);let Tt=this.webGLVersion>1,Ye=M[Tt?"COLOR_ATTACHMENT"+se:"COLOR_ATTACHMENT"+se+"_WEBGL"];if(U.push(Ye),de===-1||I)continue;let Ke=new wi(this,6);w[se]=Ke,M.activeTexture(M["TEXTURE"+se]),M.bindTexture(de,Ke._hardwareTexture.underlyingResource),M.texParameteri(de,M.TEXTURE_MAG_FILTER,Ze.mag),M.texParameteri(de,M.TEXTURE_MIN_FILTER,Ze.min),M.texParameteri(de,M.TEXTURE_WRAP_S,M.CLAMP_TO_EDGE),M.texParameteri(de,M.TEXTURE_WRAP_T,M.CLAMP_TO_EDGE);let fe=this._getRGBABufferInternalSizedFormat(ie,Pe,_e),Fe=this._getInternalFormat(Pe),Vt=this._getWebGLTextureType(ie);if(Tt&&(de===35866||de===32879))de===35866?Ke.is2DArray=!0:Ke.is3D=!0,Ke.baseDepth=Ke.depth=be,M.texImage3D(de,0,fe,V,N,be,0,Fe,Vt,null);else if(de===34067){for(let re=0;re<6;re++)M.texImage2D(M.TEXTURE_CUBE_MAP_POSITIVE_X+re,0,fe,V,N,0,Fe,Vt,null);Ke.isCube=!0}else M.texImage2D(M.TEXTURE_2D,0,fe,V,N,0,Fe,Vt,null);i&&M.generateMipmap(de),this._bindTextureDirectly(de,null),Ke.baseWidth=V,Ke.baseHeight=N,Ke.width=V,Ke.height=N,Ke.isReady=!0,Ke.samples=1,Ke.generateMipMaps=i,Ke.samplingMode=pe,Ke.type=ie,Ke._useSRGBBuffer=_e,Ke.format=Pe,Ke.label=(Ge=R[se])!=null?Ge:y.label+"-Texture"+se,this._internalTexturesCache.push(Ke)}if(a&&this._caps.depthTextureExtension&&!I){let se=new wi(this,14),pe=5,ie=M.DEPTH_COMPONENT16,_e=M.DEPTH_COMPONENT,Pe=M.UNSIGNED_SHORT,de=M.DEPTH_ATTACHMENT;this.webGLVersion<2?ie=M.DEPTH_COMPONENT:o===14?(pe=1,Pe=M.FLOAT,ie=M.DEPTH_COMPONENT32F):o===18?(pe=0,Pe=M.FLOAT_32_UNSIGNED_INT_24_8_REV,ie=M.DEPTH32F_STENCIL8,_e=M.DEPTH_STENCIL,de=M.DEPTH_STENCIL_ATTACHMENT):o===16?(pe=0,Pe=M.UNSIGNED_INT,ie=M.DEPTH_COMPONENT24,de=M.DEPTH_ATTACHMENT):(o===13||o===17)&&(pe=12,Pe=M.UNSIGNED_INT_24_8,ie=M.DEPTH24_STENCIL8,_e=M.DEPTH_STENCIL,de=M.DEPTH_STENCIL_ATTACHMENT),this._bindTextureDirectly(M.TEXTURE_2D,se,!0),M.texParameteri(M.TEXTURE_2D,M.TEXTURE_MAG_FILTER,M.NEAREST),M.texParameteri(M.TEXTURE_2D,M.TEXTURE_MIN_FILTER,M.NEAREST),M.texParameteri(M.TEXTURE_2D,M.TEXTURE_WRAP_S,M.CLAMP_TO_EDGE),M.texParameteri(M.TEXTURE_2D,M.TEXTURE_WRAP_T,M.CLAMP_TO_EDGE),M.texImage2D(M.TEXTURE_2D,0,ie,V,N,0,_e,Pe,null),M.framebufferTexture2D(M.FRAMEBUFFER,de,M.TEXTURE_2D,se._hardwareTexture.underlyingResource,0),this._bindTextureDirectly(M.TEXTURE_2D,null),y._depthStencilTexture=se,y._depthStencilTextureWithStencil=G,se.baseWidth=V,se.baseHeight=N,se.width=V,se.height=N,se.isReady=!0,se.samples=1,se.generateMipMaps=i,se.samplingMode=1,se.format=o,se.type=pe,se.label=y.label+"-DepthStencil",w[l]=se,this._internalTexturesCache.push(se)}if(y.setTextures(w),t&&M.drawBuffers(U),this._bindUnboundFramebuffer(D),y.setLayerAndFaceIndices(E,A),this.resetTextureCache(),!I)this.updateMultipleRenderTargetTextureSampleCount(y,c,t);else if(c>1){let se=M.createFramebuffer();if(!se)throw new Error("Unable to create multi sampled framebuffer");y._samples=c,y._MSAAFramebuffer=se,l>0&&t&&(this._bindUnboundFramebuffer(se),M.drawBuffers(U),this._bindUnboundFramebuffer(D))}return y};bt.prototype.updateMultipleRenderTargetTextureSampleCount=function(n,e,t=!0){if(this.webGLVersion<2||!n)return 1;if(n.samples===e)return e;let i=this._gl;e=Math.min(e,this.getCaps().maxMSAASamples),n._depthStencilBuffer&&(i.deleteRenderbuffer(n._depthStencilBuffer),n._depthStencilBuffer=null),n._MSAAFramebuffer&&(i.deleteFramebuffer(n._MSAAFramebuffer),n._MSAAFramebuffer=null);let r=n._attachments.length;for(let a=0;a1&&typeof i.renderbufferStorageMultisample=="function"){let a=i.createFramebuffer();if(!a)throw new Error("Unable to create multi sampled framebuffer");n._MSAAFramebuffer=a,this._bindUnboundFramebuffer(a);let o=[];for(let l=0;l1?"COLOR_ATTACHMENT"+l:"COLOR_ATTACHMENT"+l+"_WEBGL"],d=this._createRenderBuffer(c.width,c.height,e,-1,this._getRGBABufferInternalSizedFormat(c.type,c.format,c._useSRGBBuffer),h);if(!d)throw new Error("Unable to create multi sampled framebuffer");f.addMSAARenderBuffer(d),c.samples=e,o.push(h)}t&&i.drawBuffers(o)}else this._bindUnboundFramebuffer(n._framebuffer);let s=n._depthStencilTexture?n._depthStencilTexture.format:void 0;return n._depthStencilBuffer=this._setupFramebufferDepthAttachments(n._generateStencilBuffer,n._generateDepthBuffer,n.width,n.height,e,s),this._bindUnboundFramebuffer(null),n._samples=e,e};bt.prototype.generateMipMapsMultiFramebuffer=function(n){let e=n,t=this._gl;if(e.isMulti)for(let i=0;i1?"COLOR_ATTACHMENT"+a:"COLOR_ATTACHMENT"+a+"_WEBGL"],t.readBuffer(r[a]),t.drawBuffers(r),t.blitFramebuffer(0,0,o.width,o.height,0,0,o.width,o.height,i,t.NEAREST)}for(let a=0;a1?"COLOR_ATTACHMENT"+a:"COLOR_ATTACHMENT"+a+"_WEBGL"];t.drawBuffers(r),t.bindFramebuffer(this._gl.FRAMEBUFFER,e._MSAAFramebuffer)}});var Bx,_X=C(()=>{Gr();af();aD();Bx=class extends Or{get isSupported(){var e,t;return(t=(e=this._engine)==null?void 0:e.getCaps().drawBuffersExtension)!=null?t:!1}get textures(){return this._textures}get count(){return this._count}get depthTexture(){return this._textures[this._textures.length-1]}set wrapU(e){if(this._textures)for(let t=0;t0&&(this._createInternalTextures(),this._createTextures(a))}_initTypes(e,t,i,r,s,a,o,l,c,f){for(let h=0;h{this.onAfterRenderObservable.notifyObservers(t)})}dispose(e=!1){this._releaseTextures(),e?this._texture=null:this.releaseInternalTextures(),super.dispose()}releaseInternalTextures(){var t,i;let e=(t=this._renderTarget)==null?void 0:t.textures;if(e){for(let r=e.length-1;r>=0;r--)this._textures[r]._texture=null;(i=this._renderTarget)==null||i.dispose(),this._renderTarget=null}}}});var gX,lle,vX=C(()=>{k();gX="mrtFragmentDeclaration",lle=`#if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE) +#define VIEW_DEPTH`:""));r.textureWidth=t,r.textureHeight=i,this.reductionSteps.push(r);let s=1;for(;t>1||i>1;){t=Math.max(Math.round(t/2),1),i=Math.max(Math.round(i/2),1);let a=new Uf("Reduction phase "+s,e.getEngine(),"#define "+(t==1&&i==1?"LAST":t==1||i==1?"ONEBEFORELAST":"MAIN"));a.textureWidth=t,a.textureHeight=i,this.reductionSteps.push(a),s++}}}});var Px,O4=C(()=>{kl();xT();L4();zP();WP();Px=class{get onAfterReductionPerformed(){return this._thinMinMaxReducer.onAfterReductionPerformed}constructor(e){this._onAfterUnbindObserver=null,this._forceFullscreenViewport=!0,this._activated=!1,this._camera=e,this._postProcessManager=new Gl(e.getScene()),this._thinMinMaxReducer=new yx(e.getScene()),this._reductionSteps=[],this._onContextRestoredObserver=e.getEngine().onContextRestoredObservable.add(()=>{this._postProcessManager._rebuild()})}get sourceTexture(){return this._sourceTexture}setSourceTexture(e,t,i=2,r=!0){if(e!==this._sourceTexture&&(this._thinMinMaxReducer.depthRedux=t,this.deactivate(),this._sourceTexture=e,this._forceFullscreenViewport=r,this._thinMinMaxReducer.setTextureDimensions(e.getRenderWidth(),e.getRenderHeight()))){this._disposePostProcesses();let s=this._thinMinMaxReducer.reductionSteps;for(let a=0;a{c.setTexture("textureSampler",this._sourceTexture)})),a===s.length-1&&this._reductionSteps[a-1].onAfterRenderObservable.add(()=>{this._thinMinMaxReducer.readMinMax(l.inputTexture.texture)})}}}get refreshRate(){return this._sourceTexture?this._sourceTexture.refreshRate:-1}set refreshRate(e){this._sourceTexture&&(this._sourceTexture.refreshRate=e)}get activated(){return this._activated}activate(){this._onAfterUnbindObserver||!this._sourceTexture||(this._onAfterUnbindObserver=this._sourceTexture.onAfterUnbindObservable.add(()=>{var t,i;let e=this._camera.getScene().getEngine();(t=e._debugPushGroup)==null||t.call(e,"min max reduction"),this._reductionSteps[0].activate(this._camera),this._postProcessManager.directRender(this._reductionSteps,this._reductionSteps[0].inputTexture,this._forceFullscreenViewport,0,0,!0,this._reductionSteps.length-1),e.unBindFramebuffer(this._reductionSteps[this._reductionSteps.length-1].inputTexture,!1),(i=e._debugPopGroup)==null||i.call(e)}),this._activated=!0)}deactivate(){!this._onAfterUnbindObserver||!this._sourceTexture||(this._sourceTexture.onAfterUnbindObservable.remove(this._onAfterUnbindObserver),this._onAfterUnbindObserver=null,this._activated=!1)}dispose(e=!0){e&&(this.onAfterReductionPerformed.clear(),this._camera.getEngine().onContextRestoredObservable.remove(this._onContextRestoredObserver),this._onContextRestoredObserver=void 0,this._disposePostProcesses(),this._postProcessManager.dispose(),this._postProcessManager=void 0,this._thinMinMaxReducer.dispose(),this._thinMinMaxReducer=void 0,this._sourceTexture=null)}_disposePostProcesses(){for(let e=0;e{I4();O4();Dx=class extends Px{get depthRenderer(){return this._depthRenderer}constructor(e){super(e)}setDepthRenderer(e=null,t=2,i=!0){let r=this._camera.getScene();this._depthRenderer&&(delete r._depthRenderer[this._depthRendererId],this._depthRenderer.dispose(),this._depthRenderer=null),e===null&&(r._depthRenderer||(r._depthRenderer={}),this._depthRendererId="minmax_"+this._camera.uniqueId,e=this._depthRenderer=new Fm(r,t,this._camera,!1,1,!1,`DepthRenderer ${this._depthRendererId}`),e.enabled=!1,r._depthRenderer[this._depthRendererId]=e),super.setSourceTexture(e.getDepthMap(),!0,t,i)}setSourceTexture(e,t,i=2,r=!0){super.setSourceTexture(e,t,i,r)}activate(){this._depthRenderer&&(this._depthRenderer.enabled=!0),super.activate()}deactivate(){super.deactivate(),this._depthRenderer&&(this._depthRenderer.enabled=!1)}dispose(e=!0){super.dispose(e),this._depthRenderer&&e&&(this._depthRenderer.dispose(),this._depthRenderer=null)}}});var w4,tle,Tr,Bm,Lx,_o,F4=C(()=>{Ge();cf();ln();Cx();em();N4();Pt();Pi();w_();w4=b.Up(),tle=b.Zero(),Tr=new b,Bm=new b,Lx=new K,_o=class n extends yi{_validateFilter(e){return e===yi.FILTER_NONE||e===yi.FILTER_PCF||e===yi.FILTER_PCSS?e:(J.Error('Unsupported filter "'+e+'"!'),yi.FILTER_NONE)}get numCascades(){return this._numCascades}set numCascades(e){e=Math.min(Math.max(e,n.MIN_CASCADES_COUNT),n.MAX_CASCADES_COUNT),e!==this._numCascades&&(this._numCascades=e,this.recreateShadowMap(),this._recreateSceneUBOs())}get freezeShadowCastersBoundingInfo(){return this._freezeShadowCastersBoundingInfo}set freezeShadowCastersBoundingInfo(e){this._freezeShadowCastersBoundingInfoObservable&&e&&(this._scene.onBeforeRenderObservable.remove(this._freezeShadowCastersBoundingInfoObservable),this._freezeShadowCastersBoundingInfoObservable=null),!this._freezeShadowCastersBoundingInfoObservable&&!e&&(this._freezeShadowCastersBoundingInfoObservable=this._scene.onBeforeRenderObservable.add(()=>this._computeShadowCastersBoundingInfo())),this._freezeShadowCastersBoundingInfo=e,e&&this._computeShadowCastersBoundingInfo()}_computeShadowCastersBoundingInfo(){if(this._scbiMin.copyFromFloats(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),this._scbiMax.copyFromFloats(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE),this._shadowMap&&this._shadowMap.renderList){let e=this._shadowMap.renderList;for(let t=0;tt&&(e=0,t=1),e<0&&(e=0),t>1&&(t=1),this._minDistance=e,this._maxDistance=t,this._breaksAreDirty=!0)}get minDistance(){return this._minDistance}get maxDistance(){return this._maxDistance}getClassName(){return n.CLASSNAME}getCascadeMinExtents(e){return e>=0&&e=0&&et.maxZ&&t.maxZ!==0||(this._shadowMaxZ=e,this._light._markMeshesAsLightDirty(),this._breaksAreDirty=!0)}get debug(){return this._debug}set debug(e){this._debug=e,this._light._markMeshesAsLightDirty()}get depthClamp(){return this._depthClamp}set depthClamp(e){this._depthClamp=e}get cascadeBlendPercentage(){return this._cascadeBlendPercentage}set cascadeBlendPercentage(e){this._cascadeBlendPercentage=e,this._light._markMeshesAsLightDirty()}get lambda(){return this._lambda}set lambda(e){let t=Math.min(Math.max(e,0),1);this._lambda!=t&&(this._lambda=t,this._breaksAreDirty=!0)}getCascadeViewMatrix(e){return e>=0&&e=0&&e=0&&e{let r=i.min,s=i.max;r>=s&&(r=0,s=1),(r!=this._minDistance||s!=this._maxDistance)&&this.setMinMaxDistance(r,s)}),this._depthReducer.setDepthRenderer(this._depthRenderer)),this._depthReducer.activate()}}get autoCalcDepthBoundsRefreshRate(){var e,t,i;return(i=(t=(e=this._depthReducer)==null?void 0:e.depthRenderer)==null?void 0:t.getDepthMap().refreshRate)!=null?i:-1}set autoCalcDepthBoundsRefreshRate(e){var t;(t=this._depthReducer)!=null&&t.depthRenderer&&(this._depthReducer.depthRenderer.getDepthMap().refreshRate=e)}splitFrustum(){this._breaksAreDirty=!0}_splitFrustum(){let e=this._getCamera();if(!e)return;let t=e.minZ,i=e.maxZ||this._shadowMaxZ,r=i-t,s=this._minDistance,a=this._shadowMaxZ=t?Math.min((this._shadowMaxZ-t)/(i-t),this._maxDistance):this._maxDistance,o=t+s*r,l=t+a*r,c=l-o,f=l/o;for(let h=0;ha||(!this._depthClamp||this.filter===yi.FILTER_PCSS?(s=Math.min(s,l),this.filter!==yi.FILTER_PCSS&&(a=Math.min(a,c))):(a=Math.min(a,c),s=Math.max(s,l),a=Math.max(s+1,a))),K.OrthoOffCenterLHToRef(this._cascadeMinExtents[r].x,this._cascadeMaxExtents[r].x,this._cascadeMinExtents[r].y,this._cascadeMaxExtents[r].y,i?a:s,i?s:a,this._projectionMatrices[r],e.getEngine().isNDCHalfZRange),this._cascadeMinExtents[r].z=s,this._cascadeMaxExtents[r].z=a,this._viewMatrices[r].multiplyToRef(this._projectionMatrices[r],this._transformMatrices[r]),b.TransformCoordinatesToRef(tle,this._transformMatrices[r],Tr),Tr.scaleInPlace(this._mapSize/2),Bm.copyFromFloats(Math.round(Tr.x),Math.round(Tr.y),Math.round(Tr.z)),Bm.subtractInPlace(Tr).scaleInPlace(2/this._mapSize),K.TranslationToRef(Bm.x,Bm.y,0,Lx),this._projectionMatrices[r].multiplyToRef(Lx,this._projectionMatrices[r]),this._viewMatrices[r].multiplyToRef(this._projectionMatrices[r],this._transformMatrices[r]),this._transformMatrices[r].copyToArray(this._transformMatricesAsArray,r*16)}}_computeFrustumInWorldSpace(e){let t=this._getCamera();if(!t)return;let i=this._cascades[e].prevBreakDistance,r=this._cascades[e].breakDistance,s=this._scene.getEngine().isNDCHalfZRange;t.getViewMatrix();let a=t.maxZ===0,o=t.maxZ;a&&(t.maxZ=this._shadowMaxZ,t.getProjectionMatrix(!0));let l=K.Invert(t.getTransformationMatrix());a&&(t.maxZ=o,t.getProjectionMatrix(!0));let c=this._scene.getEngine().useReverseDepthBuffer?4:0;for(let f=0;f{this._sceneUBOs&&this._scene.setSceneUniformBuffer(this._sceneUBOs[t]),this._currentLayer=t,this._filter===yi.FILTER_PCF&&e.setColorWrite(!1),Aa.eyeAtCamera=!1,this._scene.setTransformMatrix(this.getCascadeViewMatrix(t),this.getCascadeProjectionMatrix(t)),this._useUBO&&(this._scene.getSceneUniformBuffer().unbindEffect(),this._scene.finalizeSceneUbo())}),this._shadowMap.onBeforeBindObservable.add(()=>{var t;this._currentSceneUBO=this._scene.getSceneUniformBuffer(),e._enableGPUDebugMarkers&&((t=e._debugPushGroup)==null||t.call(e,`Cascaded shadow map generation for pass id ${e.currentRenderPassId}`)),this._breaksAreDirty&&this._splitFrustum(),this._computeMatrices()}),this._splitFrustum()}_bindCustomEffectForRenderSubMeshForShadowMap(e,t){t.setMatrix("viewProjection",this.getCascadeTransformMatrix(this._currentLayer))}_isReadyCustomDefines(e){e.push("#define SM_DEPTHCLAMP "+(this._depthClamp&&this._filter!==yi.FILTER_PCSS?"1":"0"))}prepareDefines(e,t){super.prepareDefines(e,t);let i=this._scene,r=this._light;if(!i.shadowsEnabled||!r.shadowEnabled)return;e["SHADOWCSM"+t]=!0,e["SHADOWCSMDEBUG"+t]=this.debug,e["SHADOWCSMNUM_CASCADES"+t]=this.numCascades,e["SHADOWCSM_RIGHTHANDED"+t]=i.useRightHandedSystem;let s=this._getCamera();s&&this._shadowMaxZ<=(s.maxZ||this._shadowMaxZ)&&(e["SHADOWCSMUSESHADOWMAXZ"+t]=!0),this.cascadeBlendPercentage===0&&(e["SHADOWCSMNOBLEND"+t]=!0)}bindShadowLight(e,t){let i=this._light,r=this._scene;if(!r.shadowsEnabled||!i.shadowEnabled)return;let s=this._getCamera();if(!s)return;let a=this.getShadowMap();if(!a)return;let o=a.getSize().width,l=this._transformMatricesAsArray,c=r.floatingOriginMode?K2(this._scene.floatingOriginOffset,this._viewMatrices,this._projectionMatrices,this._numCascades,this._tempTransformMatricesAsArray):l;if(t.setMatrices("lightMatrix"+e,c),t.setArray("viewFrustumZ"+e,this._viewSpaceFrustumsZ),t.setFloat("cascadeBlendFactor"+e,this.cascadeBlendPercentage===0?1e4:1/this.cascadeBlendPercentage),t.setArray("frustumLengths"+e,this._frustumLengths),this._filter===yi.FILTER_PCF)t.setDepthStencilTexture("shadowTexture"+e,a),i._uniformBuffer.updateFloat4("shadowsInfo",this.getDarkness(),o,1/o,this.frustumEdgeFalloff,e);else if(this._filter===yi.FILTER_PCSS){for(let f=0;fnew n(r,s,void 0,a));return e.numCascades!==void 0&&(i.numCascades=e.numCascades),e.debug!==void 0&&(i.debug=e.debug),e.stabilizeCascades!==void 0&&(i.stabilizeCascades=e.stabilizeCascades),e.lambda!==void 0&&(i.lambda=e.lambda),e.cascadeBlendPercentage!==void 0&&(i.cascadeBlendPercentage=e.cascadeBlendPercentage),e.depthClamp!==void 0&&(i.depthClamp=e.depthClamp),e.autoCalcDepthBounds!==void 0&&(i.autoCalcDepthBounds=e.autoCalcDepthBounds),e.shadowMaxZ!==void 0&&(i.shadowMaxZ=e.shadowMaxZ),e.penumbraDarkness!==void 0&&(i.penumbraDarkness=e.penumbraDarkness),e.freezeShadowCastersBoundingInfo!==void 0&&(i.freezeShadowCastersBoundingInfo=e.freezeShadowCastersBoundingInfo),e.minDistance!==void 0&&e.maxDistance!==void 0&&i.setMinMaxDistance(e.minDistance,e.maxDistance),i}};_o._FrustumCornersNdcSpace=[new b(-1,1,-1),new b(1,1,-1),new b(1,-1,-1),new b(-1,-1,-1),new b(-1,1,1),new b(1,1,1),new b(1,-1,1),new b(-1,-1,1)];_o.CLASSNAME="CascadedShadowGenerator";_o.DEFAULT_CASCADES_COUNT=4;_o.MIN_CASCADES_COUNT=2;_o.MAX_CASCADES_COUNT=4;_o._SceneComponentInitialization=n=>{throw Xe("ShadowGeneratorSceneComponent")}});function Ox(n,e){ile[n]=e}var ile,XP=C(()=>{ile={}});var YP,B4=C(()=>{Cx();F4();Yu();XP();Ox(Qe.NAME_SHADOWGENERATOR,(n,e)=>{if(n.shadowGenerators!==void 0&&n.shadowGenerators!==null)for(let t=0,i=n.shadowGenerators.length;t{let e=n._getComponent(Qe.NAME_SHADOWGENERATOR);e||(e=new YP(n),n._addComponent(e))}});async function U4(n,e){let t=e.method||"GET";return await new Promise((i,r)=>{let s=new br;s.addEventListener("readystatechange",()=>{if(s.readyState==4)if(s.status==200){let a={};if(e.responseHeaders)for(let o of e.responseHeaders)a[o]=s.getResponseHeader(o)||"";i({response:s.response,headerValues:a})}else r(`Unable to fetch data from ${n}. Error code: ${s.status}`)}),s.open(t,n),s.send()})}var V4=C(()=>{yh()});function rle(n){return!!n.createPlugin}function nle(n){return!!n.name}function Nx(){return ol[".babylon"]}function sle(n){for(let e in ol){let t=ol[e];if(t.mimeType===n)return t}}function jP(n,e){let t=ol[n];return t||(J.Warn("Unable to find a plugin to load "+n+" files. Trying to use .babylon default plugin. To load from a specific filetype (eg. gltf) see: https://doc.babylonjs.com/features/featuresDeepDive/importers/loadingFileTypes"),e?Nx():void 0)}function ale(n){return!!ol[n]}function ole(n){for(let e in ol){let t=ol[e].plugin;if(t.canDirectLoad&&t.canDirectLoad(n))return ol[e]}return Nx()}function lle(n){let e=n.indexOf("?");e!==-1&&(n=n.substring(0,e));let t=n.lastIndexOf(".");return n.substring(t,n.length).toLowerCase()}function cle(n){return n.substring(0,5)==="data:"?n.substring(5):null}function qP(n,e,t){let r="Unable to load from "+(n.rawData?"binary data":n.url);return e?r+=`: ${e}`:t&&(r+=`: ${t}`),r}async function ZP(n,e,t,i,r,s,a,o,l){var u;let c=cle(n.url);if(n.rawData&&!a)throw"When using ArrayBufferView to load data the file extension must be provided.";let f=!c&&!a?lle(n.url):"",h=a?jP(a,!0):c?ole(n.url):jP(f,!1);if(!h&&f){if(n.url&&!n.url.startsWith("blob:")){let m=await U4(n.url,{method:"HEAD",responseHeaders:["Content-Type"]}),_=m.headerValues?m.headerValues["Content-Type"]:"";_&&(h=sle(_))}h||(h=Nx())}if(!h)throw new Error(`No plugin or fallback for ${a!=null?a:n.url}`);if(((u=l==null?void 0:l[h.plugin.name])==null?void 0:u.enabled)===!1)throw new Error(`The '${h.plugin.name}' plugin is disabled via the loader options passed to the loading operation.`);if(n.rawData&&!h.isBinary)throw"Loading from ArrayBufferView can not be used with plugins that don't support binary loading.";return(m=>{if(rle(h.plugin)){let p=h.plugin.createPlugin(l!=null?l:{});return p instanceof Promise?(p.then(m).catch(g=>{r("Error instantiating plugin.",g)}),null):(m(p),p)}else return m(h.plugin),h.plugin})(m=>{var E;if(!m)throw`The loader plugin corresponding to the '${a}' file type has not been found. If using es6, please import the plugin you wish to use before.`;if(k4.notifyObservers(m),c&&(m.canDirectLoad&&m.canDirectLoad(n.url)||!rf(n.url))){if(m.directLoad){let R=m.directLoad(e,c);R instanceof Promise?R.then(I=>{t(m,I)}).catch(I=>{r("Error in directLoad of _loadData: "+I,I)}):t(m,R)}else t(m,c);return}let _=h.isBinary,p=(R,I)=>{if(e.isDisposed){r("Scene has been disposed");return}t(m,R,I)},g=null,v=!1;(E=m.onDisposeObservable)==null||E.add(()=>{v=!0,g&&(g.abort(),g=null),s()});let x=()=>{if(v)return;let R=(I,y)=>{r(I==null?void 0:I.statusText,y)};if(!m.loadFile&&n.rawData)throw"Plugin does not support loading ArrayBufferView.";g=m.loadFile?m.loadFile(e,n.rawData||n.file||n.url,n.rootUrl,p,i,_,R,o):e._loadFile(n.file||n.url,p,i,!0,_,R)},A=e.getEngine(),S=A.enableOfflineSupport;if(S){let R=!1;for(let I of e.disableOfflineSupportExceptionRules)if(I.test(n.url)){R=!0;break}S=!R}S&&Re.OfflineProviderFactory?e.offlineProvider=Re.OfflineProviderFactory(n.url,x,A.disableManifestCheck):x()})}function QP(n,e){let t,i,r=null,s=null;if(!e)t=n,i=de.GetFilename(n),n=de.GetFolderPath(n);else if(nle(e))t=`file:${e.name}`,i=e.name,r=e;else if(ArrayBuffer.isView(e))t="",i=ef(),s=e;else if(e.startsWith("data:"))t=e,i="";else if(n){let a=e;if(a.substring(0,1)==="/")return de.Error("Wrong sceneFilename parameter"),null;t=n+a,i=a}else t=e,i=de.GetFilename(e),n=de.GetFolderPath(e);return{url:t,rootUrl:n,name:i,file:r,rawData:s}}function Vf(n){if(typeof n.extensions=="string"){let e=n.extensions;ol[e.toLowerCase()]={plugin:n,isBinary:!1}}else{let e=n.extensions,t=Object.keys(e);for(let i of t)ol[i.toLowerCase()]={plugin:n,isBinary:e[i].isBinary,mimeType:e[i].mimeType}}}async function Eg(n,e,t){let{meshNames:i,rootUrl:r="",onProgress:s,pluginExtension:a,name:o,pluginOptions:l}=t!=null?t:{};return await H4(i,r,n,e,s,a,o,l)}async function W4(n,e,t="",i=Le.LastCreatedScene,r=null,s=null,a=null,o=null,l="",c={}){if(!i)return J.Error("No scene available to import mesh to"),null;let f=QP(e,t);if(!f)return null;let h={};i.addPendingData(h);let d=()=>{i.removePendingData(h)},u=(p,g)=>{let v=qP(f,p,g);a?a(i,v,new ms(v,_a.SceneLoaderError,g)):J.Error(v),d()},m=s?p=>{try{s(p)}catch(g){u("Error in onProgress callback: "+g,g)}}:void 0,_=(p,g,v,x,A,S,E,R)=>{if(i.importedMeshesFiles.push(f.url),r)try{r(p,g,v,x,A,S,E,R)}catch(I){u("Error in onSuccess callback: "+I,I)}i.removePendingData(h)};return await ZP(f,i,(p,g,v)=>{if(p.rewriteRootURL&&(f.rootUrl=p.rewriteRootURL(f.rootUrl,v)),p.importMesh){let x=p,A=[],S=[],E=[];if(!x.importMesh(n,i,g,f.rootUrl,A,S,E,u))return;i.loadingPluginName=p.name,_(A,S,E,[],[],[],[],[])}else p.importMeshAsync(n,i,g,f.rootUrl,m,f.name).then(A=>{i.loadingPluginName=p.name,_(A.meshes,A.particleSystems,A.skeletons,A.animationGroups,A.transformNodes,A.geometries,A.lights,A.spriteManagers)}).catch(A=>{u(A.message,A)})},m,u,d,o,l,c)}async function H4(n,e,t,i,r,s,a,o){return await new Promise((l,c)=>{try{W4(n,e,t,i,(f,h,d,u,m,_,p,g)=>{l({meshes:f,particleSystems:h,skeletons:d,animationGroups:u,transformNodes:m,geometries:_,lights:p,spriteManagers:g})},r,(f,h,d)=>{c(d||new Error(h))},s,a,o).catch(c)}catch(f){c(f)}})}async function z4(n,e="",t=Le.LastCreatedEngine,i=null,r=null,s=null,a=null,o="",l={}){if(!t){de.Error("No engine available");return}await $P(n,e,new Qt(t),i,r,s,a,o,l)}async function fle(n,e,t,i,r,s,a){return await new Promise((o,l)=>{z4(n,e,t,c=>{o(c)},i,(c,f,h)=>{l(h||new Error(f))},r,s,a)})}async function $P(n,e="",t=Le.LastCreatedScene,i=null,r=null,s=null,a=null,o="",l={}){if(!t)return J.Error("No scene available to append to"),null;let c=QP(n,e);if(!c)return null;let f={};t.addPendingData(f);let h=()=>{t.removePendingData(f)};Wr.ShowLoadingScreen&&!KP&&(KP=!0,t.getEngine().displayLoadingUI(),t.executeWhenReady(()=>{t.getEngine().hideLoadingUI(),KP=!1}));let d=(_,p)=>{let g=qP(c,_,p);s?s(t,g,new ms(g,_a.SceneLoaderError,p)):J.Error(g),h()},u=r?_=>{try{r(_)}catch(p){d("Error in onProgress callback",p)}}:void 0,m=()=>{if(i)try{i(t)}catch(_){d("Error in onSuccess callback",_)}t.removePendingData(f)};return await ZP(c,t,(_,p)=>{if(_.load){if(!_.load(t,p,c.rootUrl,d))return;t.loadingPluginName=_.name,m()}else _.loadAsync(t,p,c.rootUrl,u,c.name).then(()=>{t.loadingPluginName=_.name,m()}).catch(v=>{d(v.message,v)})},u,d,h,a,o,l)}async function hle(n,e,t,i,r,s,a){return await new Promise((o,l)=>{try{$P(n,e,t,c=>{o(c)},i,(c,f,h)=>{l(h||new Error(f))},r,s,a).catch(l)}catch(c){l(c)}})}async function JP(n,e="",t=Le.LastCreatedScene,i=null,r=null,s=null,a=null,o="",l={}){if(!t)return J.Error("No scene available to load asset container to"),null;let c=QP(n,e);if(!c)return null;let f={};t.addPendingData(f);let h=()=>{t.removePendingData(f)},d=(_,p)=>{let g=qP(c,_,p);s?s(t,g,new ms(g,_a.SceneLoaderError,p)):J.Error(g),h()},u=r?_=>{try{r(_)}catch(p){d("Error in onProgress callback",p)}}:void 0,m=_=>{if(i)try{i(_)}catch(p){d("Error in onSuccess callback",p)}t.removePendingData(f)};return await ZP(c,t,(_,p)=>{if(_.loadAssetContainer){let v=_.loadAssetContainer(t,p,c.rootUrl,d);if(!v)return;v.populateRootNodes(),t.loadingPluginName=_.name,m(v)}else _.loadAssetContainerAsync?_.loadAssetContainerAsync(t,p,c.rootUrl,u,c.name).then(v=>{v.populateRootNodes(),t.loadingPluginName=_.name,m(v)}).catch(v=>{d(v.message,v)}):d("LoadAssetContainer is not supported by this plugin. Plugin did not provide a loadAssetContainer or loadAssetContainerAsync method.")},u,d,h,a,o,l)}async function dle(n,e,t,i,r,s,a){return await new Promise((o,l)=>{try{JP(n,e,t,c=>{o(c)},i,(c,f,h)=>{l(h||new Error(f))},r,s,a).catch(l)}catch(c){l(c)}})}async function X4(n,e="",t=Le.LastCreatedScene,i=!0,r=0,s=null,a=null,o=null,l=null,c=null,f="",h={}){if(!t){J.Error("No scene available to load animations to");return}if(i){for(let p of t.animatables)p.reset();t.stopAllAnimations();let m=t.animationGroups.slice();for(let p of m)p.dispose();let _=t.getNodes();for(let p of _)p.animations&&(p.animations=[])}else switch(r){case 0:let m=t.animationGroups.slice();for(let _ of m)_.dispose();break;case 1:for(let _ of t.animationGroups)_.stop();break;case 2:for(let _ of t.animationGroups)_.reset(),_.restart();break;case 3:break;default:J.Error("Unknown animation group loading mode value '"+r+"'");return}let d=t.animatables.length;await JP(n,e,t,m=>{m.mergeAnimationsTo(t,t.animatables.slice(d),s),m.dispose(),t.onAnimationFileImportedObservable.notifyObservers(t),a&&a(t)},o,l,c,f,h)}async function ule(n,e,t,i,r,s,a,o,l,c){return await new Promise((f,h)=>{try{X4(n,e,t,i,r,s,d=>{f(d)},a,(d,u,m)=>{h(m||new Error(u))},o,l,c).catch(h)}catch(d){h(d)}})}var G4,k4,ol,KP,$h,Um=C(()=>{Ci();hi();ps();Pi();Pt();iA();Bl();S_();E_();Lr();V4();(function(n){n[n.Clean=0]="Clean",n[n.Stop=1]="Stop",n[n.Sync=2]="Sync",n[n.NoSync=3]="NoSync"})(G4||(G4={}));k4=new te,ol={},KP=!1;$h=class{static get ForceFullSceneLoadingForIncremental(){return Wr.ForceFullSceneLoadingForIncremental}static set ForceFullSceneLoadingForIncremental(e){Wr.ForceFullSceneLoadingForIncremental=e}static get ShowLoadingScreen(){return Wr.ShowLoadingScreen}static set ShowLoadingScreen(e){Wr.ShowLoadingScreen=e}static get loggingLevel(){return Wr.loggingLevel}static set loggingLevel(e){Wr.loggingLevel=e}static get CleanBoneMatrixWeights(){return Wr.CleanBoneMatrixWeights}static set CleanBoneMatrixWeights(e){Wr.CleanBoneMatrixWeights=e}static GetDefaultPlugin(){return Nx()}static GetPluginForExtension(e){var t;return(t=jP(e,!0))==null?void 0:t.plugin}static IsPluginForExtensionAvailable(e){return ale(e)}static RegisterPlugin(e){Vf(e)}static ImportMesh(e,t,i,r,s,a,o,l,c,f){W4(e,t,i,r,s,a,o,l,c,f).catch(h=>o==null?void 0:o(Le.LastCreatedScene,h==null?void 0:h.message,h))}static async ImportMeshAsync(e,t,i,r,s,a,o){return await H4(e,t,i,r,s,a,o)}static Load(e,t,i,r,s,a,o,l){z4(e,t,i,r,s,a,o,l).catch(c=>a==null?void 0:a(Le.LastCreatedScene,c==null?void 0:c.message,c))}static async LoadAsync(e,t,i,r,s,a){return await fle(e,t,i,r,s,a)}static Append(e,t,i,r,s,a,o,l){$P(e,t,i,r,s,a,o,l).catch(c=>a==null?void 0:a(i!=null?i:Le.LastCreatedScene,c==null?void 0:c.message,c))}static async AppendAsync(e,t,i,r,s,a){return await hle(e,t,i,r,s,a)}static LoadAssetContainer(e,t,i,r,s,a,o,l){JP(e,t,i,r,s,a,o,l).catch(c=>a==null?void 0:a(i!=null?i:Le.LastCreatedScene,c==null?void 0:c.message,c))}static async LoadAssetContainerAsync(e,t,i,r,s,a){return await dle(e,t,i,r,s,a)}static ImportAnimations(e,t,i,r,s,a,o,l,c,f,h){X4(e,t,i,r,s,a,o,l,c,f,h).catch(d=>c==null?void 0:c(i!=null?i:Le.LastCreatedScene,d==null?void 0:d.message,d))}static async ImportAnimationsAsync(e,t,i,r,s,a,o,l,c,f,h){return await ule(e,t,i,r,s,a,l,f,h)}};$h.NO_LOGGING=0;$h.MINIMAL_LOGGING=1;$h.SUMMARY_LOGGING=2;$h.DETAILED_LOGGING=3;$h.OnPluginActivatedObservable=k4});var wx,eD,tD,ll,Sg=C(()=>{Di();kh();im();Pt();Pi();Ey();Af();el();Ci();sf();wx=class{constructor(){this.rootNodes=[],this.cameras=[],this.lights=[],this.meshes=[],this.skeletons=[],this.particleSystems=[],this.animations=[],this.animationGroups=[],this.multiMaterials=[],this.materials=[],this.morphTargetManagers=[],this.geometries=[],this.transformNodes=[],this.actionManagers=[],this.textures=[],this._environmentTexture=null,this.postProcesses=[],this.sounds=null,this.effectLayers=[],this.layers=[],this.reflectionProbes=[],this.spriteManagers=[]}get environmentTexture(){return this._environmentTexture}set environmentTexture(e){this._environmentTexture=e}getNodes(){let e=[];e=e.concat(this.meshes),e=e.concat(this.lights),e=e.concat(this.cameras),e=e.concat(this.transformNodes);for(let t of this.skeletons)e=e.concat(t.bones);return e}},eD=class extends wx{},tD=class{constructor(){this.rootNodes=[],this.skeletons=[],this.animationGroups=[]}dispose(){let e=this.rootNodes;for(let r of e)r.dispose();e.length=0;let t=this.skeletons;for(let r of t)r.dispose();t.length=0;let i=this.animationGroups;for(let r of i)r.dispose();i.length=0}},ll=class extends wx{constructor(e){super(),this._wasAddedToScene=!1,e=e||Le.LastCreatedScene,e&&(this.scene=e,this.proceduralTextures=[],e.onDisposeObservable.add(()=>{this._wasAddedToScene||this.dispose()}),this._onContextRestoredObserver=e.getEngine().onContextRestoredObservable.add(()=>{for(let t of this.geometries)t._rebuild();for(let t of this.meshes)t._rebuild();for(let t of this.particleSystems)t.rebuild();for(let t of this.textures)t._rebuild();for(let t of this.spriteManagers)t.rebuild()}))}_topologicalSort(e){let t=new Map;for(let o of e)t.set(o.uniqueId,o);let i={dependsOn:new Map,dependedBy:new Map};for(let o of e){let l=o.uniqueId;i.dependsOn.set(l,new Set),i.dependedBy.set(l,new Set)}for(let o of e){let l=o.uniqueId,c=i.dependsOn.get(l);if(o instanceof Zl){let h=o.sourceMesh;t.has(h.uniqueId)&&(c.add(h.uniqueId),i.dependedBy.get(h.uniqueId).add(l))}let f=i.dependedBy.get(l);for(let h of o.getDescendants()){let d=h.uniqueId;t.has(d)&&(f.add(d),i.dependsOn.get(d).add(l))}}let r=[],s=[];for(let o of e){let l=o.uniqueId;i.dependsOn.get(l).size===0&&(s.push(o),t.delete(l))}let a=s;for(;a.length>0;){let o=a.shift();r.push(o);let l=i.dependedBy.get(o.uniqueId);for(let c of Array.from(l.values())){let f=i.dependsOn.get(c);f.delete(o.uniqueId),f.size===0&&t.get(c)&&(a.push(t.get(c)),t.delete(c))}}return t.size>0&&(J.Error("SceneSerializer._topologicalSort: There were unvisited nodes:"),t.forEach(o=>{J.Error(o.name)})),r}_addNodeAndDescendantsToList(e,t,i,r){if(!(!i||r&&!r(i)||t.has(i.uniqueId))){e.push(i),t.add(i.uniqueId);for(let s of i.getDescendants(!0))this._addNodeAndDescendantsToList(e,t,s,r)}}_isNodeInContainer(e){return e instanceof pr&&this.meshes.indexOf(e)!==-1||e instanceof $t&&this.transformNodes.indexOf(e)!==-1||e instanceof Yt&&this.lights.indexOf(e)!==-1||e instanceof ut&&this.cameras.indexOf(e)!==-1}_isValidHierarchy(){for(let e of this.meshes)if(e.parent&&!this._isNodeInContainer(e.parent))return J.Warn(`Node ${e.name} has a parent that is not in the container.`),!1;for(let e of this.transformNodes)if(e.parent&&!this._isNodeInContainer(e.parent))return J.Warn(`Node ${e.name} has a parent that is not in the container.`),!1;for(let e of this.lights)if(e.parent&&!this._isNodeInContainer(e.parent))return J.Warn(`Node ${e.name} has a parent that is not in the container.`),!1;for(let e of this.cameras)if(e.parent&&!this._isNodeInContainer(e.parent))return J.Warn(`Node ${e.name} has a parent that is not in the container.`),!1;return!0}instantiateModelsToScene(e,t=!1,i){this._isValidHierarchy()||de.Warn("SceneSerializer.InstantiateModelsToScene: The Asset Container hierarchy is not valid.");let r={},s={},a=new tD,o=[],l=[],c={doNotInstantiate:!0,...i},f=(_,p)=>{if(r[_.uniqueId]=p.uniqueId,s[p.uniqueId]=p,e&&(p.name=e(_.name)),p instanceof j){let g=p;if(g.morphTargetManager){let v=_.morphTargetManager;g.morphTargetManager=v.clone();for(let x=0;x{if(f(_,p),_.parent){let g=r[_.parent.uniqueId],v=s[g];v?p.parent=v:p.parent=_.parent}if(p.position&&_.position&&p.position.copyFrom(_.position),p.rotationQuaternion&&_.rotationQuaternion&&p.rotationQuaternion.copyFrom(_.rotationQuaternion),p.rotation&&_.rotation&&p.rotation.copyFrom(_.rotation),p.scaling&&_.scaling&&p.scaling.copyFrom(_.scaling),p.material){let g=p;if(g.material)if(t){let v=_.material;if(l.indexOf(v)===-1){let x=v.clone(e?e(v.name):"Clone of "+v.name);if(l.push(v),r[v.uniqueId]=x.uniqueId,s[x.uniqueId]=x,v.getClassName()==="MultiMaterial"){let A=v;for(let S of A.subMaterials)S&&(x=S.clone(e?e(S.name):"Clone of "+S.name),l.push(S),r[S.uniqueId]=x.uniqueId,s[x.uniqueId]=x);A.subMaterials=A.subMaterials.map(S=>S&&s[r[S.uniqueId]])}}g.getClassName()!=="InstancedMesh"&&(g.material=s[r[v.uniqueId]])}else g.material.getClassName()==="MultiMaterial"?this.scene.multiMaterials.indexOf(g.material)===-1&&this.scene.addMultiMaterial(g.material):this.scene.materials.indexOf(g.material)===-1&&this.scene.addMaterial(g.material)}p.parent===null&&a.rootNodes.push(p)};for(let _ of u)if(_.getClassName()==="InstancedMesh"){let p=_,g=p.sourceMesh,v=r[g.uniqueId],A=(typeof v=="number"?s[v]:g).createInstance(p.name);m(p,A)}else{let p=!0;_.getClassName()==="TransformNode"||_.getClassName()==="Node"||_.skeleton||!_.getTotalVertices||_.getTotalVertices()===0?p=!1:c.doNotInstantiate&&(typeof c.doNotInstantiate=="function"?p=!c.doNotInstantiate(_):p=!c.doNotInstantiate);let g=p?_.createInstance(`instance of ${_.name}`):_.clone(`Clone of ${_.name}`,null,!0);if(!g)throw new Error(`Could not clone or instantiate node on Asset Container ${_.name}`);m(_,g)}for(let _ of this.skeletons){if(c.predicate&&!c.predicate(_))continue;let p=_.clone(e?e(_.name):"Clone of "+_.name);for(let g of this.meshes)if(g.skeleton===_&&!g.isAnInstance){let v=s[r[g.uniqueId]];if(!v||v.isAnInstance||(v.skeleton=p,o.indexOf(p)!==-1))continue;o.push(p);for(let x of p.bones)x._linkedTransformNode&&(x._linkedTransformNode=s[r[x._linkedTransformNode.uniqueId]])}a.skeletons.push(p)}for(let _ of this.animationGroups){if(c.predicate&&!c.predicate(_))continue;let p=_.clone(e?e(_.name):"Clone of "+_.name,g=>s[r[g.uniqueId]]||g);a.animationGroups.push(p)}return a}addAllToScene(){if(!this._wasAddedToScene){this._isValidHierarchy()||de.Warn("SceneSerializer.addAllToScene: The Asset Container hierarchy is not valid."),this._wasAddedToScene=!0,this.addToScene(null),this.environmentTexture&&(this.scene.environmentTexture=this.environmentTexture);for(let e of this.scene._serializableComponents)e.addFromContainer(this);this.scene.getEngine().onContextRestoredObservable.remove(this._onContextRestoredObserver),this._onContextRestoredObserver=null}}addToScene(e=null){let t=[];for(let i of this.cameras)e&&!e(i)||(this.scene.addCamera(i),t.push(i));for(let i of this.lights)e&&!e(i)||(this.scene.addLight(i),t.push(i));for(let i of this.meshes)e&&!e(i)||(this.scene.addMesh(i),t.push(i));for(let i of this.skeletons)e&&!e(i)||this.scene.addSkeleton(i);for(let i of this.animations)e&&!e(i)||this.scene.addAnimation(i);for(let i of this.animationGroups)e&&!e(i)||this.scene.addAnimationGroup(i);for(let i of this.multiMaterials)e&&!e(i)||this.scene.addMultiMaterial(i);for(let i of this.materials)e&&!e(i)||this.scene.addMaterial(i);for(let i of this.morphTargetManagers)e&&!e(i)||this.scene.addMorphTargetManager(i);for(let i of this.geometries)e&&!e(i)||this.scene.addGeometry(i);for(let i of this.transformNodes)e&&!e(i)||(this.scene.addTransformNode(i),t.push(i));for(let i of this.actionManagers)e&&!e(i)||this.scene.addActionManager(i);for(let i of this.textures)e&&!e(i)||this.scene.addTexture(i);for(let i of this.reflectionProbes)e&&!e(i)||this.scene.addReflectionProbe(i);for(let i of this.spriteManagers)e&&!e(i)||(this.scene.spriteManagers||(this.scene.spriteManagers=[]),this.scene.spriteManagers.push(i));if(t.length){let i=new Set(this.scene.meshes);for(let r of this.scene.lights)i.add(r);for(let r of this.scene.cameras)i.add(r);for(let r of this.scene.transformNodes)i.add(r);for(let r of this.skeletons)for(let s of r.bones)i.add(s);for(let r of t)r.parent&&!i.has(r.parent)&&(r.setParent?r.setParent(null):r.parent=null)}}removeAllFromScene(){this._isValidHierarchy()||de.Warn("SceneSerializer.removeAllFromScene: The Asset Container hierarchy is not valid."),this._wasAddedToScene=!1,this.removeFromScene(null),this.environmentTexture===this.scene.environmentTexture&&(this.scene.environmentTexture=null);for(let e of this.scene._serializableComponents)e.removeFromContainer(this)}removeFromScene(e=null){for(let t of this.cameras)e&&!e(t)||this.scene.removeCamera(t);for(let t of this.lights)e&&!e(t)||this.scene.removeLight(t);for(let t of this.meshes)e&&!e(t)||this.scene.removeMesh(t,!0);for(let t of this.skeletons)e&&!e(t)||this.scene.removeSkeleton(t);for(let t of this.animations)e&&!e(t)||this.scene.removeAnimation(t);for(let t of this.animationGroups)e&&!e(t)||this.scene.removeAnimationGroup(t);for(let t of this.multiMaterials)e&&!e(t)||this.scene.removeMultiMaterial(t);for(let t of this.materials)e&&!e(t)||this.scene.removeMaterial(t);for(let t of this.morphTargetManagers)e&&!e(t)||this.scene.removeMorphTargetManager(t);for(let t of this.geometries)e&&!e(t)||this.scene.removeGeometry(t);for(let t of this.transformNodes)e&&!e(t)||this.scene.removeTransformNode(t);for(let t of this.actionManagers)e&&!e(t)||this.scene.removeActionManager(t);for(let t of this.textures)e&&!e(t)||this.scene.removeTexture(t);for(let t of this.reflectionProbes)e&&!e(t)||this.scene.removeReflectionProbe(t);for(let t of this.spriteManagers)if(!(e&&!e(t))&&this.scene.spriteManagers){let i=this.scene.spriteManagers.indexOf(t);i!==-1&&this.scene.spriteManagers.splice(i,1)}}dispose(){let e=this.cameras.slice(0);for(let _ of e)_.dispose();this.cameras.length=0;let t=this.lights.slice(0);for(let _ of t)_.dispose();this.lights.length=0;let i=this.meshes.slice(0);for(let _ of i)_.dispose();this.meshes.length=0;let r=this.skeletons.slice(0);for(let _ of r)_.dispose();this.skeletons.length=0;let s=this.animationGroups.slice(0);for(let _ of s)_.dispose();this.animationGroups.length=0;let a=this.multiMaterials.slice(0);for(let _ of a)_.dispose();this.multiMaterials.length=0;let o=this.materials.slice(0);for(let _ of o)_.dispose();this.materials.length=0;let l=this.geometries.slice(0);for(let _ of l)_.dispose();this.geometries.length=0;let c=this.transformNodes.slice(0);for(let _ of c)_.dispose();this.transformNodes.length=0;let f=this.actionManagers.slice(0);for(let _ of f)_.dispose();this.actionManagers.length=0;let h=this.textures.slice(0);for(let _ of h)_.dispose();this.textures.length=0;let d=this.reflectionProbes.slice(0);for(let _ of d)_.dispose();this.reflectionProbes.length=0;let u=this.morphTargetManagers.slice(0);for(let _ of u)_.dispose();this.morphTargetManagers.length=0;let m=this.spriteManagers.slice(0);for(let _ of m)_.dispose();this.spriteManagers.length=0,this.environmentTexture&&(this.environmentTexture.dispose(),this.environmentTexture=null);for(let _ of this.scene._serializableComponents)_.removeFromContainer(this,!0);this._onContextRestoredObserver&&(this.scene.getEngine().onContextRestoredObservable.remove(this._onContextRestoredObserver),this._onContextRestoredObserver=null)}_moveAssets(e,t,i){if(!(!e||!t))for(let r of e){let s=!0;if(i){for(let a of i)if(r===a){s=!1;break}}s&&(t.push(r),r._parentContainer=this)}}moveAllFromScene(e){this._wasAddedToScene=!1,e===void 0&&(e=new eD);for(let t in this)Object.prototype.hasOwnProperty.call(this,t)&&(this[t]=this[t]||(t==="_environmentTexture"?null:[]),this._moveAssets(this.scene[t],this[t],e[t]));this.environmentTexture=this.scene.environmentTexture,this.removeAllFromScene()}createRootMesh(){let e=new j("assetContainerRootMesh",this.scene);for(let t of this.meshes)t.parent||e.addChild(t);return this.meshes.unshift(e),e}mergeAnimationsTo(e=Le.LastCreatedScene,t,i=null){if(!e)return J.Error("No scene available to merge animations to"),[];let r=i||(l=>{let c,f=l.animations.length?l.animations[0].targetProperty:"",h=l.name.split(".").join("").split("_primitive")[0];switch(f){case"position":case"rotationQuaternion":c=e.getTransformNodeByName(l.name)||e.getTransformNodeByName(h);break;case"influence":c=e.getMorphTargetByName(l.name)||e.getMorphTargetByName(h);break;default:c=e.getNodeByName(l.name)||e.getNodeByName(h)}return c}),s=this.getNodes();for(let l of s){let c=r(l);if(c!==null){for(let f of l.animations){let h=c.animations.filter(d=>d.targetProperty===f.targetProperty);for(let d of h){let u=c.animations.indexOf(d,0);u>-1&&c.animations.splice(u,1)}}c.animations=c.animations.concat(l.animations)}}let a=[],o=this.animationGroups.slice();for(let l of o){a.push(l.clone(l.name,r));for(let c of l.animatables)c.stop()}for(let l of t){let c=r(l.target);c&&(e.beginAnimation(c,l.fromFrame,l.toFrame,l.loopAnimation,l.speedRatio,l.onAnimationEnd?l.onAnimationEnd:void 0,void 0,!0,void 0,l.onAnimationLoop?l.onAnimationLoop:void 0),e.stopAnimation(l.target))}return a}populateRootNodes(){this.rootNodes.length=0;for(let e of this.meshes)!e.parent&&this.rootNodes.indexOf(e)===-1&&this.rootNodes.push(e);for(let e of this.transformNodes)!e.parent&&this.rootNodes.indexOf(e)===-1&&this.rootNodes.push(e);for(let e of this.lights)!e.parent&&this.rootNodes.indexOf(e)===-1&&this.rootNodes.push(e);for(let e of this.cameras)!e.parent&&this.rootNodes.indexOf(e)===-1&&this.rootNodes.push(e)}addAllAssetsToContainer(e){if(!e)return;let t=[],i=new Set;for(t.push(e);t.length>0;){let r=t.pop();if(r instanceof j?(r.geometry&&this.geometries.indexOf(r.geometry)===-1&&this.geometries.push(r.geometry),this.meshes.push(r)):r instanceof Zl?this.meshes.push(r):r instanceof $t?this.transformNodes.push(r):r instanceof Yt?this.lights.push(r):r instanceof ut&&this.cameras.push(r),r instanceof pr){if(r.material&&this.materials.indexOf(r.material)===-1){this.materials.push(r.material);for(let s of r.material.getActiveTextures())this.textures.indexOf(s)===-1&&this.textures.push(s)}r.skeleton&&this.skeletons.indexOf(r.skeleton)===-1&&this.skeletons.push(r.skeleton),r.morphTargetManager&&this.morphTargetManagers.indexOf(r.morphTargetManager)===-1&&this.morphTargetManagers.push(r.morphTargetManager)}for(let s of r.getChildren())i.has(s)||t.push(s);i.add(r)}this.populateRootNodes()}_getByTags(e,t,i){if(t===void 0)return e;let r=[];for(let s in e){let a=e[s];Zt&&Zt.MatchesQuery(a,t)&&(!i||i(a))&&r.push(a)}return r}getMeshesByTags(e,t){return this._getByTags(this.meshes,e,t)}getCamerasByTags(e,t){return this._getByTags(this.cameras,e,t)}getLightsByTags(e,t){return this._getByTags(this.lights,e,t)}getMaterialsByTags(e,t){return this._getByTags(this.materials,e,t).concat(this._getByTags(this.multiMaterials,e,t))}getTransformNodesByTags(e,t){return this._getByTags(this.transformNodes,e,t)}}});var Jh,Y4=C(()=>{T_();Jh=class{constructor(e){this.byteOffset=0,this.buffer=e}async loadAsync(e){let t=await this.buffer.readAsync(this.byteOffset,e);this._dataView=new DataView(t.buffer,t.byteOffset,t.byteLength),this._dataByteOffset=0}readUint32(){let e=this._dataView.getUint32(this._dataByteOffset,!0);return this._dataByteOffset+=4,this.byteOffset+=4,e}readUint8Array(e){let t=new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+this._dataByteOffset,e);return this._dataByteOffset+=e,this.byteOffset+=e,t}readString(e){return z3(this.readUint8Array(e))}skipBytes(e){this._dataByteOffset+=e,this.byteOffset+=e}}});function iD(n,e,t,i){let r={externalResourceFunction:i};return t&&(r.uri=e==="file:"?t:e+t),ArrayBuffer.isView(n)?GLTFValidator.validateBytes(n,r):GLTFValidator.validateString(n,r)}function mle(){let n=[];onmessage=e=>{let t=e.data;switch(t.id){case"init":{importScripts(t.url);break}case"validate":{iD(t.data,t.rootUrl,t.fileName,i=>new Promise((r,s)=>{let a=n.length;n.push({resolve:r,reject:s}),postMessage({id:"getExternalResource",index:a,uri:i})})).then(i=>{postMessage({id:"validate.resolve",value:i})},i=>{postMessage({id:"validate.reject",reason:i})});break}case"getExternalResource.resolve":{n[t.index].resolve(t.value);break}case"getExternalResource.reject":{n[t.index].reject(t.reason);break}}}}var Vm,K4=C(()=>{Ci();Vm=class n{static ValidateAsync(e,t,i,r){return typeof Worker=="function"?new Promise((s,a)=>{let o=`${iD}(${mle})()`,l=URL.createObjectURL(new Blob([o],{type:"application/javascript"})),c=new Worker(l),f=d=>{c.removeEventListener("error",f),c.removeEventListener("message",h),a(d)},h=d=>{let u=d.data;switch(u.id){case"getExternalResource":{r(u.uri).then(m=>{c.postMessage({id:"getExternalResource.resolve",index:u.index,value:m},[m.buffer])},m=>{c.postMessage({id:"getExternalResource.reject",index:u.index,reason:m})});break}case"validate.resolve":{c.removeEventListener("error",f),c.removeEventListener("message",h),n._LastResults=u.value,s(u.value),c.terminate();break}case"validate.reject":c.removeEventListener("error",f),c.removeEventListener("message",h),a(u.reason),c.terminate()}};if(c.addEventListener("error",f),c.addEventListener("message",h),c.postMessage({id:"init",url:de.GetBabylonScriptURL(this.Configuration.url)}),ArrayBuffer.isView(e)){let d=e.slice();c.postMessage({id:"validate",data:d,rootUrl:t,fileName:i},[d.buffer])}else c.postMessage({id:"validate",data:e,rootUrl:t,fileName:i})}):(this._LoadScriptPromise||(this._LoadScriptPromise=de.LoadBabylonScriptAsync(this.Configuration.url)),this._LoadScriptPromise.then(()=>iD(e,t,i,r)))}};Vm.Configuration={url:`${de._DefaultCdnUrl}/gltf_validator.js`};Vm._LastResults=null});var gc,Tg,j4=C(()=>{gc="Z2xURg",Tg={name:"gltf",extensions:{".gltf":{isBinary:!1,mimeType:"model/gltf+json"},".glb":{isBinary:!0,mimeType:"model/gltf-binary"}},canDirectLoad(n){return n.indexOf("asset")!==-1&&n.indexOf("version")!==-1||n.startsWith("data:base64,"+gc)||n.startsWith("data:;base64,"+gc)||n.startsWith("data:application/octet-stream;base64,"+gc)||n.startsWith("data:model/gltf-binary;base64,"+gc)}}});function q4(n,e,t){try{return Promise.resolve(new Uint8Array(n,e,t))}catch(i){return Promise.reject(i)}}function ple(n,e,t){try{if(e<0||e>=n.byteLength)throw new RangeError("Offset is out of range.");if(e+t>n.byteLength)throw new RangeError("Length is out of range.");return Promise.resolve(new Uint8Array(n.buffer,n.byteOffset+e,t))}catch(i){return Promise.reject(i)}}var Gm,ed,Yn,Fx,_le,rD,Gf,nD=C(()=>{hi();Ci();Um();Sg();Pt();Y4();K4();j4();Bl();S_();(function(n){n[n.AUTO=0]="AUTO",n[n.FORCE_RIGHT_HANDED=1]="FORCE_RIGHT_HANDED"})(Gm||(Gm={}));(function(n){n[n.NONE=0]="NONE",n[n.FIRST=1]="FIRST",n[n.ALL=2]="ALL"})(ed||(ed={}));(function(n){n[n.LOADING=0]="LOADING",n[n.READY=1]="READY",n[n.COMPLETE=2]="COMPLETE"})(Yn||(Yn={}));Fx=class{constructor(){this.alwaysComputeBoundingBox=!1,this.alwaysComputeSkeletonRootNode=!1,this.animationStartMode=ed.FIRST,this.compileMaterials=!1,this.compileShadowGenerators=!1,this.coordinateSystemMode=Gm.AUTO,this.createInstances=!0,this.loadAllMaterials=!1,this.loadMorphTargets=!0,this.loadNodeAnimations=!0,this.loadOnlyMaterials=!1,this.loadSkins=!0,this.skipMaterials=!1,this.targetFps=60,this.transparencyAsCoverage=!1,this.useClipPlane=!1,this.useGltfTextureNames=!1,this.useRangeRequests=!1,this.useSRGBBuffers=!0,this.validate=!1,this.useOpenPBR=!1,this.dontUseTransmissionHelper=!1}},_le=new Fx,rD=class extends Fx{constructor(){super(...arguments),this.extensionOptions={},this.preprocessUrlAsync=e=>Promise.resolve(e)}copyFrom(e){var t,i,r,s,a,o,l,c,f,h,d,u,m,_,p,g,v,x,A,S,E,R,I,y,M,D;e&&(this.alwaysComputeBoundingBox=(t=e.alwaysComputeBoundingBox)!=null?t:this.alwaysComputeBoundingBox,this.alwaysComputeSkeletonRootNode=(i=e.alwaysComputeSkeletonRootNode)!=null?i:this.alwaysComputeSkeletonRootNode,this.animationStartMode=(r=e.animationStartMode)!=null?r:this.animationStartMode,this.capturePerformanceCounters=(s=e.capturePerformanceCounters)!=null?s:this.capturePerformanceCounters,this.compileMaterials=(a=e.compileMaterials)!=null?a:this.compileMaterials,this.compileShadowGenerators=(o=e.compileShadowGenerators)!=null?o:this.compileShadowGenerators,this.coordinateSystemMode=(l=e.coordinateSystemMode)!=null?l:this.coordinateSystemMode,this.createInstances=(c=e.createInstances)!=null?c:this.createInstances,this.customRootNode=e.customRootNode,this.extensionOptions=(f=e.extensionOptions)!=null?f:this.extensionOptions,this.loadAllMaterials=(h=e.loadAllMaterials)!=null?h:this.loadAllMaterials,this.loadMorphTargets=(d=e.loadMorphTargets)!=null?d:this.loadMorphTargets,this.loadNodeAnimations=(u=e.loadNodeAnimations)!=null?u:this.loadNodeAnimations,this.loadOnlyMaterials=(m=e.loadOnlyMaterials)!=null?m:this.loadOnlyMaterials,this.loadSkins=(_=e.loadSkins)!=null?_:this.loadSkins,this.loggingEnabled=(p=e.loggingEnabled)!=null?p:this.loggingEnabled,this.onCameraLoaded=e.onCameraLoaded,this.onMaterialLoaded=e.onMaterialLoaded,this.onMeshLoaded=e.onMeshLoaded,this.onParsed=e.onParsed,this.onSkinLoaded=e.onSkinLoaded,this.onTextureLoaded=e.onTextureLoaded,this.onValidated=e.onValidated,this.preprocessUrlAsync=(g=e.preprocessUrlAsync)!=null?g:this.preprocessUrlAsync,this.skipMaterials=(v=e.skipMaterials)!=null?v:this.skipMaterials,this.targetFps=(x=e.targetFps)!=null?x:this.targetFps,this.transparencyAsCoverage=(A=e.transparencyAsCoverage)!=null?A:this.transparencyAsCoverage,this.useClipPlane=(S=e.useClipPlane)!=null?S:this.useClipPlane,this.useGltfTextureNames=(E=e.useGltfTextureNames)!=null?E:this.useGltfTextureNames,this.useOpenPBR=(R=e.useOpenPBR)!=null?R:this.useOpenPBR,this.useRangeRequests=(I=e.useRangeRequests)!=null?I:this.useRangeRequests,this.useSRGBBuffers=(y=e.useSRGBBuffers)!=null?y:this.useSRGBBuffers,this.validate=(M=e.validate)!=null?M:this.validate,this.dontUseTransmissionHelper=(D=e.dontUseTransmissionHelper)!=null?D:this.dontUseTransmissionHelper)}},Gf=class n extends rD{constructor(e){super(),this.onParsedObservable=new te,this.onMeshLoadedObservable=new te,this.onSkinLoadedObservable=new te,this.onTextureLoadedObservable=new te,this.onMaterialLoadedObservable=new te,this.onCameraLoadedObservable=new te,this.onCompleteObservable=new te,this.onErrorObservable=new te,this.onDisposeObservable=new te,this.onExtensionLoadedObservable=new te,this.onValidatedObservable=new te,this._loader=null,this._state=null,this._requests=new Array,this.name=Tg.name,this.extensions=Tg.extensions,this.onLoaderStateChangedObservable=new te,this._logIndentLevel=0,this._loggingEnabled=!1,this._log=this._logDisabled,this._capturePerformanceCounters=!1,this._startPerformanceCounter=this._startPerformanceCounterDisabled,this._endPerformanceCounter=this._endPerformanceCounterDisabled,this.copyFrom(Object.assign({..._le},e))}set onParsed(e){this._onParsedObserver&&this.onParsedObservable.remove(this._onParsedObserver),e&&(this._onParsedObserver=this.onParsedObservable.add(e))}set onMeshLoaded(e){this._onMeshLoadedObserver&&this.onMeshLoadedObservable.remove(this._onMeshLoadedObserver),e&&(this._onMeshLoadedObserver=this.onMeshLoadedObservable.add(e))}set onSkinLoaded(e){this._onSkinLoadedObserver&&this.onSkinLoadedObservable.remove(this._onSkinLoadedObserver),e&&(this._onSkinLoadedObserver=this.onSkinLoadedObservable.add(t=>e(t.node,t.skinnedNode)))}set onTextureLoaded(e){this._onTextureLoadedObserver&&this.onTextureLoadedObservable.remove(this._onTextureLoadedObserver),e&&(this._onTextureLoadedObserver=this.onTextureLoadedObservable.add(e))}set onMaterialLoaded(e){this._onMaterialLoadedObserver&&this.onMaterialLoadedObservable.remove(this._onMaterialLoadedObserver),e&&(this._onMaterialLoadedObserver=this.onMaterialLoadedObservable.add(e))}set onCameraLoaded(e){this._onCameraLoadedObserver&&this.onCameraLoadedObservable.remove(this._onCameraLoadedObserver),e&&(this._onCameraLoadedObserver=this.onCameraLoadedObservable.add(e))}set onComplete(e){this._onCompleteObserver&&this.onCompleteObservable.remove(this._onCompleteObserver),this._onCompleteObserver=this.onCompleteObservable.add(e)}set onError(e){this._onErrorObserver&&this.onErrorObservable.remove(this._onErrorObserver),this._onErrorObserver=this.onErrorObservable.add(e)}set onDispose(e){this._onDisposeObserver&&this.onDisposeObservable.remove(this._onDisposeObserver),this._onDisposeObserver=this.onDisposeObservable.add(e)}set onExtensionLoaded(e){this._onExtensionLoadedObserver&&this.onExtensionLoadedObservable.remove(this._onExtensionLoadedObserver),this._onExtensionLoadedObserver=this.onExtensionLoadedObservable.add(e)}get loggingEnabled(){return this._loggingEnabled}set loggingEnabled(e){this._loggingEnabled!==e&&(this._loggingEnabled=e,this._loggingEnabled?this._log=this._logEnabled:this._log=this._logDisabled)}get capturePerformanceCounters(){return this._capturePerformanceCounters}set capturePerformanceCounters(e){this._capturePerformanceCounters!==e&&(this._capturePerformanceCounters=e,this._capturePerformanceCounters?(this._startPerformanceCounter=this._startPerformanceCounterEnabled,this._endPerformanceCounter=this._endPerformanceCounterEnabled):(this._startPerformanceCounter=this._startPerformanceCounterDisabled,this._endPerformanceCounter=this._endPerformanceCounterDisabled))}set onValidated(e){this._onValidatedObserver&&this.onValidatedObservable.remove(this._onValidatedObserver),this._onValidatedObserver=this.onValidatedObservable.add(e)}dispose(){this._loader&&(this._loader.dispose(),this._loader=null);for(let e of this._requests)e.abort();this._requests.length=0,delete this._progressCallback,this.preprocessUrlAsync=e=>Promise.resolve(e),this.onMeshLoadedObservable.clear(),this.onSkinLoadedObservable.clear(),this.onTextureLoadedObservable.clear(),this.onMaterialLoadedObservable.clear(),this.onCameraLoadedObservable.clear(),this.onCompleteObservable.clear(),this.onExtensionLoadedObservable.clear(),this.onDisposeObservable.notifyObservers(void 0),this.onDisposeObservable.clear()}loadFile(e,t,i,r,s,a,o,l){if(ArrayBuffer.isView(t))return this._loadBinary(e,t,i,r,o,l),null;this._progressCallback=s;let c=t.name||de.GetFilename(t);if(a){if(this.useRangeRequests){this.validate&&J.Warn("glTF validation is not supported when range requests are enabled");let f={abort:()=>{},onCompleteObservable:new te},h={readAsync:(d,u)=>new Promise((m,_)=>{this._loadFile(e,t,p=>{m(new Uint8Array(p))},!0,p=>{_(p)},p=>{p.setRequestHeader("Range",`bytes=${d}-${d+u-1}`)})}),byteLength:0};return this._unpackBinaryAsync(new Jh(h)).then(d=>{f.onCompleteObservable.notifyObservers(f),r(d)},o?d=>o(void 0,d):void 0),f}return this._loadFile(e,t,f=>{this._validate(e,new Uint8Array(f,0,f.byteLength),i,c),this._unpackBinaryAsync(new Jh({readAsync:(h,d)=>q4(f,h,d),byteLength:f.byteLength})).then(h=>{r(h)},o?h=>o(void 0,h):void 0)},!0,o)}else return this._loadFile(e,t,f=>{try{this._validate(e,f,i,c),r({json:this._parseJson(f)})}catch(h){o&&o()}},!1,o)}_loadBinary(e,t,i,r,s,a){this._validate(e,new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i,a),this._unpackBinaryAsync(new Jh({readAsync:(o,l)=>ple(t,o,l),byteLength:t.byteLength})).then(o=>{r(o)},s?o=>s(void 0,o):void 0)}importMeshAsync(e,t,i,r,s,a){return Promise.resolve().then(()=>(this.onParsedObservable.notifyObservers(i),this.onParsedObservable.clear(),this._log(`Loading ${a||""}`),this._loader=this._getLoader(i),this._loader.importMeshAsync(e,t,null,i,r,s,a)))}loadAsync(e,t,i,r,s){return Promise.resolve().then(()=>(this.onParsedObservable.notifyObservers(t),this.onParsedObservable.clear(),this._log(`Loading ${s||""}`),this._loader=this._getLoader(t),this._loader.loadAsync(e,t,i,r,s)))}loadAssetContainerAsync(e,t,i,r,s){return Promise.resolve().then(()=>{this.onParsedObservable.notifyObservers(t),this.onParsedObservable.clear(),this._log(`Loading ${s||""}`),this._loader=this._getLoader(t);let a=new ll(e),o=[];this.onMaterialLoadedObservable.add(h=>{o.push(h)});let l=[];this.onTextureLoadedObservable.add(h=>{l.push(h)});let c=[];this.onCameraLoadedObservable.add(h=>{c.push(h)});let f=[];return this.onMeshLoadedObservable.add(h=>{h.morphTargetManager&&f.push(h.morphTargetManager)}),this._loader.importMeshAsync(null,e,a,t,i,r,s).then(h=>(Array.prototype.push.apply(a.geometries,h.geometries),Array.prototype.push.apply(a.meshes,h.meshes),Array.prototype.push.apply(a.particleSystems,h.particleSystems),Array.prototype.push.apply(a.skeletons,h.skeletons),Array.prototype.push.apply(a.animationGroups,h.animationGroups),Array.prototype.push.apply(a.materials,o),Array.prototype.push.apply(a.textures,l),Array.prototype.push.apply(a.lights,h.lights),Array.prototype.push.apply(a.transformNodes,h.transformNodes),Array.prototype.push.apply(a.cameras,c),Array.prototype.push.apply(a.morphTargetManagers,f),a))})}canDirectLoad(e){return Tg.canDirectLoad(e)}directLoad(e,t){if(t.startsWith("base64,"+gc)||t.startsWith(";base64,"+gc)||t.startsWith("application/octet-stream;base64,"+gc)||t.startsWith("model/gltf-binary;base64,"+gc)){let i=nf(t);return this._validate(e,new Uint8Array(i,0,i.byteLength)),this._unpackBinaryAsync(new Jh({readAsync:(r,s)=>q4(i,r,s),byteLength:i.byteLength}))}return this._validate(e,t),Promise.resolve({json:this._parseJson(t)})}createPlugin(e){return new n(e[Tg.name])}get loaderState(){return this._state}whenCompleteAsync(){return new Promise((e,t)=>{this.onCompleteObservable.addOnce(()=>{e()}),this.onErrorObservable.addOnce(i=>{t(i)})})}_setState(e){this._state!==e&&(this._state=e,this.onLoaderStateChangedObservable.notifyObservers(this._state),this._log(Yn[this._state]))}_loadFile(e,t,i,r,s,a){let o=e._loadFile(t,i,l=>{this._onProgress(l,o)},!0,r,s,a);return o.onCompleteObservable.add(()=>{o._lengthComputable=!0,o._total=o._loaded}),this._requests.push(o),o}_onProgress(e,t){if(!this._progressCallback)return;t._lengthComputable=e.lengthComputable,t._loaded=e.loaded,t._total=e.total;let i=!0,r=0,s=0;for(let a of this._requests){if(a._lengthComputable===void 0||a._loaded===void 0||a._total===void 0)return;i=i&&a._lengthComputable,r+=a._loaded,s+=a._total}this._progressCallback({lengthComputable:i,loaded:r,total:i?s:0})}_validate(e,t,i="",r=""){this.validate&&(this._startPerformanceCounter("Validate JSON"),Vm.ValidateAsync(t,i,r,s=>this.preprocessUrlAsync(i+s).then(a=>e._loadFileAsync(a,void 0,!0,!0).then(o=>new Uint8Array(o,0,o.byteLength)))).then(s=>{this._endPerformanceCounter("Validate JSON"),this.onValidatedObservable.notifyObservers(s),this.onValidatedObservable.clear()},s=>{this._endPerformanceCounter("Validate JSON"),de.Warn(`Failed to validate: ${s.message}`),this.onValidatedObservable.clear()}))}_getLoader(e){let t=e.json.asset||{};this._log(`Asset version: ${t.version}`),t.minVersion&&this._log(`Asset minimum version: ${t.minVersion}`),t.generator&&this._log(`Asset generator: ${t.generator}`);let i=n._parseVersion(t.version);if(!i)throw new Error("Invalid version: "+t.version);if(t.minVersion!==void 0){let a=n._parseVersion(t.minVersion);if(!a)throw new Error("Invalid minimum version: "+t.minVersion);if(n._compareVersion(a,{major:2,minor:0})>0)throw new Error("Incompatible minimum version: "+t.minVersion)}let s={1:n._CreateGLTF1Loader,2:n._CreateGLTF2Loader}[i.major];if(!s)throw new Error("Unsupported version: "+t.version);return s(this)}_parseJson(e){this._startPerformanceCounter("Parse JSON"),this._log(`JSON length: ${e.length}`);let t=JSON.parse(e);return this._endPerformanceCounter("Parse JSON"),t}_unpackBinaryAsync(e){return this._startPerformanceCounter("Unpack Binary"),e.loadAsync(20).then(()=>{let t={Magic:1179937895},i=e.readUint32();if(i!==t.Magic)throw new ms("Unexpected magic: "+i,_a.GLTFLoaderUnexpectedMagicError);let r=e.readUint32();this.loggingEnabled&&this._log(`Binary version: ${r}`);let s=e.readUint32();!this.useRangeRequests&&s!==e.buffer.byteLength&&J.Warn(`Length in header does not match actual data length: ${s} != ${e.buffer.byteLength}`);let a;switch(r){case 1:{a=this._unpackBinaryV1Async(e,s);break}case 2:{a=this._unpackBinaryV2Async(e,s);break}default:throw new Error("Unsupported version: "+r)}return this._endPerformanceCounter("Unpack Binary"),a})}_unpackBinaryV1Async(e,t){let i={JSON:0},r=e.readUint32(),s=e.readUint32();if(s!==i.JSON)throw new Error(`Unexpected content format: ${s}`);let a=t-e.byteOffset,o={json:this._parseJson(e.readString(r)),bin:null};if(a!==0){let l=e.byteOffset;o.bin={readAsync:(c,f)=>e.buffer.readAsync(l+c,f),byteLength:a}}return Promise.resolve(o)}_unpackBinaryV2Async(e,t){let i={JSON:1313821514,BIN:5130562},r=e.readUint32();if(e.readUint32()!==i.JSON)throw new Error("First chunk format is not JSON");return e.byteOffset+r===t?e.loadAsync(r).then(()=>({json:this._parseJson(e.readString(r)),bin:null})):e.loadAsync(r+8).then(()=>{let a={json:this._parseJson(e.readString(r)),bin:null},o=()=>{let l=e.readUint32();switch(e.readUint32()){case i.JSON:throw new Error("Unexpected JSON chunk");case i.BIN:{let f=e.byteOffset;a.bin={readAsync:(h,d)=>e.buffer.readAsync(f+h,d),byteLength:l},e.skipBytes(l);break}default:{e.skipBytes(l);break}}return e.byteOffset!==t?e.loadAsync(8).then(o):Promise.resolve(a)};return o()})}static _parseVersion(e){if(e==="1.0"||e==="1.0.1")return{major:1,minor:0};let t=(e+"").match(/^(\d+)\.(\d+)/);return t?{major:parseInt(t[1]),minor:parseInt(t[2])}:null}static _compareVersion(e,t){return e.major>t.major?1:e.majort.minor?1:e.minor{Bx=class{get resolve(){return this._resolve}get reject(){return this._reject}constructor(){this.promise=new Promise((e,t)=>{this._resolve=e,this._reject=t})}}});var wn,Q4=C(()=>{kt();Ut();sl();FT();Ge();Ci();wn=class{constructor(){this.keysUp=[38],this.keysUpward=[33],this.keysDown=[40],this.keysDownward=[34],this.keysLeft=[37],this.keysRight=[39],this.rotationSpeed=.5,this.keysRotateLeft=[],this.keysRotateRight=[],this.keysRotateUp=[],this.keysRotateDown=[],this._keys=new Array}attachControl(e){e=de.BackCompatCameraNoPreventDefault(arguments),!this._onCanvasBlurObserver&&(this._scene=this.camera.getScene(),this._engine=this._scene.getEngine(),this._onCanvasBlurObserver=this._engine.onCanvasBlurObservable.add(()=>{this._keys.length=0}),this._onKeyboardObserver=this._scene.onKeyboardObservable.add(t=>{let i=t.event;if(!i.metaKey){if(t.type===no.KEYDOWN)(this.keysUp.indexOf(i.keyCode)!==-1||this.keysDown.indexOf(i.keyCode)!==-1||this.keysLeft.indexOf(i.keyCode)!==-1||this.keysRight.indexOf(i.keyCode)!==-1||this.keysUpward.indexOf(i.keyCode)!==-1||this.keysDownward.indexOf(i.keyCode)!==-1||this.keysRotateLeft.indexOf(i.keyCode)!==-1||this.keysRotateRight.indexOf(i.keyCode)!==-1||this.keysRotateUp.indexOf(i.keyCode)!==-1||this.keysRotateDown.indexOf(i.keyCode)!==-1)&&(this._keys.indexOf(i.keyCode)===-1&&this._keys.push(i.keyCode),e||i.preventDefault());else if(this.keysUp.indexOf(i.keyCode)!==-1||this.keysDown.indexOf(i.keyCode)!==-1||this.keysLeft.indexOf(i.keyCode)!==-1||this.keysRight.indexOf(i.keyCode)!==-1||this.keysUpward.indexOf(i.keyCode)!==-1||this.keysDownward.indexOf(i.keyCode)!==-1||this.keysRotateLeft.indexOf(i.keyCode)!==-1||this.keysRotateRight.indexOf(i.keyCode)!==-1||this.keysRotateUp.indexOf(i.keyCode)!==-1||this.keysRotateDown.indexOf(i.keyCode)!==-1){let r=this._keys.indexOf(i.keyCode);r>=0&&this._keys.splice(r,1),e||i.preventDefault()}}}))}detachControl(){this._scene&&(this._onKeyboardObserver&&this._scene.onKeyboardObservable.remove(this._onKeyboardObserver),this._onCanvasBlurObserver&&this._engine.onCanvasBlurObservable.remove(this._onCanvasBlurObserver),this._onKeyboardObserver=null,this._onCanvasBlurObserver=null),this._keys.length=0}checkInputs(){if(this._onKeyboardObserver){let e=this.camera;for(let t=0;t{kt();hi();Ut();sl();ro();Ci();td=class{constructor(e=!0){this.touchEnabled=e,this.buttons=[0,1,2],this.angularSensibility=2e3,this._previousPosition=null,this.onPointerMovedObservable=new te,this._allowCameraRotation=!0,this._currentActiveButton=-1,this._activePointerId=-1}attachControl(e){e=de.BackCompatCameraNoPreventDefault(arguments);let t=this.camera.getEngine(),i=t.getInputElement();this._pointerInput||(this._pointerInput=r=>{let s=r.event,a=s.pointerType==="touch";if(!this.touchEnabled&&a||r.type!==it.POINTERMOVE&&this.buttons.indexOf(s.button)===-1)return;let o=s.target;if(r.type===it.POINTERDOWN){if(a&&this._activePointerId!==-1||!a&&this._currentActiveButton!==-1)return;this._activePointerId=s.pointerId;try{o==null||o.setPointerCapture(s.pointerId)}catch(l){}this._currentActiveButton===-1&&(this._currentActiveButton=s.button),this._previousPosition={x:s.clientX,y:s.clientY},e||(s.preventDefault(),i&&i.focus()),t.isPointerLock&&this._onMouseMove&&this._onMouseMove(r.event)}else if(r.type===it.POINTERUP){if(a&&this._activePointerId!==s.pointerId||!a&&this._currentActiveButton!==s.button)return;try{o==null||o.releasePointerCapture(s.pointerId)}catch(l){}this._currentActiveButton=-1,this._previousPosition=null,e||s.preventDefault(),this._activePointerId=-1}else if(r.type===it.POINTERMOVE&&(this._activePointerId===s.pointerId||!a)){if(t.isPointerLock&&this._onMouseMove)this._onMouseMove(r.event);else if(this._previousPosition){let l=this.camera._calculateHandednessMultiplier(),c=(s.clientX-this._previousPosition.x)*l,f=(s.clientY-this._previousPosition.y)*l;this._allowCameraRotation&&(this.camera.cameraRotation.y+=c/this.angularSensibility,this.camera.cameraRotation.x+=f/this.angularSensibility),this.onPointerMovedObservable.notifyObservers({offsetX:c,offsetY:f}),this._previousPosition={x:s.clientX,y:s.clientY},e||s.preventDefault()}}}),this._onMouseMove=r=>{if(!t.isPointerLock)return;let s=this.camera._calculateHandednessMultiplier();this.camera.cameraRotation.y+=r.movementX*s/this.angularSensibility,this.camera.cameraRotation.x+=r.movementY*s/this.angularSensibility,this._previousPosition=null,e||r.preventDefault()},this._observer=this.camera.getScene()._inputManager._addCameraPointerObserver(this._pointerInput,it.POINTERDOWN|it.POINTERUP|it.POINTERMOVE),i&&(this._contextMenuBind=r=>this.onContextMenu(r),i.addEventListener("contextmenu",this._contextMenuBind,!1))}onContextMenu(e){e.preventDefault()}detachControl(){if(this._observer){if(this.camera.getScene()._inputManager._removeCameraPointerObserver(this._observer),this._contextMenuBind){let t=this.camera.getEngine().getInputElement();t&&t.removeEventListener("contextmenu",this._contextMenuBind)}this.onPointerMovedObservable&&this.onPointerMovedObservable.clear(),this._observer=null,this._onMouseMove=null,this._previousPosition=null}this._activePointerId=-1,this._currentActiveButton=-1}getClassName(){return"FreeCameraMouseInput"}getSimpleName(){return"mouse"}};P([w()],td.prototype,"buttons",void 0);P([w()],td.prototype,"angularSensibility",void 0);Dn.FreeCameraMouseInput=td});var id,J4=C(()=>{kt();Ut();hi();ro();BT();Ci();id=class{constructor(){this.wheelPrecisionX=3,this.wheelPrecisionY=3,this.wheelPrecisionZ=3,this.onChangedObservable=new te,this._wheelDeltaX=0,this._wheelDeltaY=0,this._wheelDeltaZ=0,this._ffMultiplier=12,this._normalize=120}attachControl(e){e=de.BackCompatCameraNoPreventDefault(arguments),this._wheel=t=>{if(t.type!==it.POINTERWHEEL)return;let i=t.event,r=i.deltaMode===so.DOM_DELTA_LINE?this._ffMultiplier:1;this._wheelDeltaX+=this.wheelPrecisionX*r*i.deltaX/this._normalize,this._wheelDeltaY-=this.wheelPrecisionY*r*i.deltaY/this._normalize,this._wheelDeltaZ+=this.wheelPrecisionZ*r*i.deltaZ/this._normalize,i.preventDefault&&(e||i.preventDefault())},this._observer=this.camera.getScene()._inputManager._addCameraPointerObserver(this._wheel,it.POINTERWHEEL)}detachControl(){this._observer&&(this.camera.getScene()._inputManager._removeCameraPointerObserver(this._observer),this._observer=null,this._wheel=null),this.onChangedObservable&&this.onChangedObservable.clear()}checkInputs(){this.onChangedObservable.notifyObservers({wheelDeltaX:this._wheelDeltaX,wheelDeltaY:this._wheelDeltaY,wheelDeltaZ:this._wheelDeltaZ}),this._wheelDeltaX=0,this._wheelDeltaY=0,this._wheelDeltaZ=0}getClassName(){return"BaseCameraMouseWheelInput"}getSimpleName(){return"mousewheel"}};P([w()],id.prototype,"wheelPrecisionX",void 0);P([w()],id.prototype,"wheelPrecisionY",void 0);P([w()],id.prototype,"wheelPrecisionZ",void 0)});var Li,As,eX=C(()=>{kt();Ut();sl();J4();Ge();(function(n){n[n.MoveRelative=0]="MoveRelative",n[n.RotateRelative=1]="RotateRelative",n[n.MoveScene=2]="MoveScene"})(Li||(Li={}));As=class extends id{constructor(){super(...arguments),this._moveRelative=b.Zero(),this._rotateRelative=b.Zero(),this._moveScene=b.Zero(),this._wheelXAction=Li.MoveRelative,this._wheelXActionCoordinate=0,this._wheelYAction=Li.MoveRelative,this._wheelYActionCoordinate=2,this._wheelZAction=null,this._wheelZActionCoordinate=null}getClassName(){return"FreeCameraMouseWheelInput"}set wheelXMoveRelative(e){e===null&&this._wheelXAction!==Li.MoveRelative||(this._wheelXAction=Li.MoveRelative,this._wheelXActionCoordinate=e)}get wheelXMoveRelative(){return this._wheelXAction!==Li.MoveRelative?null:this._wheelXActionCoordinate}set wheelYMoveRelative(e){e===null&&this._wheelYAction!==Li.MoveRelative||(this._wheelYAction=Li.MoveRelative,this._wheelYActionCoordinate=e)}get wheelYMoveRelative(){return this._wheelYAction!==Li.MoveRelative?null:this._wheelYActionCoordinate}set wheelZMoveRelative(e){e===null&&this._wheelZAction!==Li.MoveRelative||(this._wheelZAction=Li.MoveRelative,this._wheelZActionCoordinate=e)}get wheelZMoveRelative(){return this._wheelZAction!==Li.MoveRelative?null:this._wheelZActionCoordinate}set wheelXRotateRelative(e){e===null&&this._wheelXAction!==Li.RotateRelative||(this._wheelXAction=Li.RotateRelative,this._wheelXActionCoordinate=e)}get wheelXRotateRelative(){return this._wheelXAction!==Li.RotateRelative?null:this._wheelXActionCoordinate}set wheelYRotateRelative(e){e===null&&this._wheelYAction!==Li.RotateRelative||(this._wheelYAction=Li.RotateRelative,this._wheelYActionCoordinate=e)}get wheelYRotateRelative(){return this._wheelYAction!==Li.RotateRelative?null:this._wheelYActionCoordinate}set wheelZRotateRelative(e){e===null&&this._wheelZAction!==Li.RotateRelative||(this._wheelZAction=Li.RotateRelative,this._wheelZActionCoordinate=e)}get wheelZRotateRelative(){return this._wheelZAction!==Li.RotateRelative?null:this._wheelZActionCoordinate}set wheelXMoveScene(e){e===null&&this._wheelXAction!==Li.MoveScene||(this._wheelXAction=Li.MoveScene,this._wheelXActionCoordinate=e)}get wheelXMoveScene(){return this._wheelXAction!==Li.MoveScene?null:this._wheelXActionCoordinate}set wheelYMoveScene(e){e===null&&this._wheelYAction!==Li.MoveScene||(this._wheelYAction=Li.MoveScene,this._wheelYActionCoordinate=e)}get wheelYMoveScene(){return this._wheelYAction!==Li.MoveScene?null:this._wheelYActionCoordinate}set wheelZMoveScene(e){e===null&&this._wheelZAction!==Li.MoveScene||(this._wheelZAction=Li.MoveScene,this._wheelZActionCoordinate=e)}get wheelZMoveScene(){return this._wheelZAction!==Li.MoveScene?null:this._wheelZActionCoordinate}checkInputs(){if(this._wheelDeltaX===0&&this._wheelDeltaY===0&&this._wheelDeltaZ==0)return;this._moveRelative.setAll(0),this._rotateRelative.setAll(0),this._moveScene.setAll(0),this._updateCamera(),this.camera.getScene().useRightHandedSystem&&(this._moveRelative.z*=-1);let e=K.Zero();this.camera.getViewMatrix().invertToRef(e);let t=b.Zero();b.TransformNormalToRef(this._moveRelative,e,t),this.camera.cameraRotation.x+=this._rotateRelative.x/200,this.camera.cameraRotation.y+=this._rotateRelative.y/200,this.camera.cameraDirection.addInPlace(t),this.camera.cameraDirection.addInPlace(this._moveScene),super.checkInputs()}_updateCamera(){this._updateCameraProperty(this._wheelDeltaX,this._wheelXAction,this._wheelXActionCoordinate),this._updateCameraProperty(this._wheelDeltaY,this._wheelYAction,this._wheelYActionCoordinate),this._updateCameraProperty(this._wheelDeltaZ,this._wheelZAction,this._wheelZActionCoordinate)}_updateCameraProperty(e,t,i){if(e===0||t===null||i===null)return;let r=null;switch(t){case Li.MoveRelative:r=this._moveRelative;break;case Li.RotateRelative:r=this._rotateRelative;break;case Li.MoveScene:r=this._moveScene;break}switch(i){case 0:r.set(e,0,0);break;case 1:r.set(0,e,0);break;case 2:r.set(0,0,e);break}}};P([w()],As.prototype,"wheelXMoveRelative",null);P([w()],As.prototype,"wheelYMoveRelative",null);P([w()],As.prototype,"wheelZMoveRelative",null);P([w()],As.prototype,"wheelXRotateRelative",null);P([w()],As.prototype,"wheelYRotateRelative",null);P([w()],As.prototype,"wheelZRotateRelative",null);P([w()],As.prototype,"wheelXMoveScene",null);P([w()],As.prototype,"wheelYMoveScene",null);P([w()],As.prototype,"wheelZMoveScene",null);Dn.FreeCameraMouseWheelInput=As});var rd,tX=C(()=>{kt();Ut();sl();ro();Ge();Ci();rd=class{constructor(e=!1){this.allowMouse=e,this.touchAngularSensibility=2e5,this.touchMoveSensibility=250,this.singleFingerRotate=!1,this._offsetX=null,this._offsetY=null,this._pointerPressed=new Array,this._isSafari=de.IsSafari()}attachControl(e){e=de.BackCompatCameraNoPreventDefault(arguments);let t=null;if(this._pointerInput===void 0&&(this._onLostFocus=()=>{this._offsetX=null,this._offsetY=null},this._pointerInput=i=>{let r=i.event,s=r.pointerType==="mouse"||this._isSafari&&typeof r.pointerType=="undefined";if(!(!this.allowMouse&&s)){if(i.type===it.POINTERDOWN){if(e||r.preventDefault(),this._pointerPressed.push(r.pointerId),this._pointerPressed.length!==1)return;t={x:r.clientX,y:r.clientY}}else if(i.type===it.POINTERUP){e||r.preventDefault();let a=this._pointerPressed.indexOf(r.pointerId);if(a===-1||(this._pointerPressed.splice(a,1),a!=0))return;t=null,this._offsetX=null,this._offsetY=null}else if(i.type===it.POINTERMOVE){if(e||r.preventDefault(),!t||this._pointerPressed.indexOf(r.pointerId)!=0)return;this._offsetX=r.clientX-t.x,this._offsetY=-(r.clientY-t.y)}}}),this._observer=this.camera.getScene()._inputManager._addCameraPointerObserver(this._pointerInput,it.POINTERDOWN|it.POINTERUP|it.POINTERMOVE),this._onLostFocus){let r=this.camera.getEngine().getInputElement();r&&r.addEventListener("blur",this._onLostFocus)}}detachControl(){if(this._pointerInput){if(this._observer&&(this.camera.getScene()._inputManager._removeCameraPointerObserver(this._observer),this._observer=null),this._onLostFocus){let t=this.camera.getEngine().getInputElement();t&&t.removeEventListener("blur",this._onLostFocus),this._onLostFocus=null}this._pointerPressed.length=0,this._offsetX=null,this._offsetY=null}}checkInputs(){if(this._offsetX===null||this._offsetY===null||this._offsetX===0&&this._offsetY===0)return;let e=this.camera,t=e._calculateHandednessMultiplier();if(e.cameraRotation.y=this._offsetX*t/this.touchAngularSensibility,this.singleFingerRotate&&this._pointerPressed.length===1||!this.singleFingerRotate&&this._pointerPressed.length>1)e.cameraRotation.x=-(this._offsetY*t)/this.touchAngularSensibility;else{let r=e._computeLocalCameraSpeed(),s=Q.Vector3[0];s.copyFromFloats(0,0,this.touchMoveSensibility!==0?r*this._offsetY/this.touchMoveSensibility:0),K.RotationYawPitchRollToRef(e.rotation.y,e.rotation.x,0,e._cameraRotationMatrix),b.TransformCoordinatesToRef(s,e._cameraRotationMatrix,s),e.cameraDirection.addInPlace(s)}}getClassName(){return"FreeCameraTouchInput"}getSimpleName(){return"touch"}};P([w()],rd.prototype,"touchAngularSensibility",void 0);P([w()],rd.prototype,"touchMoveSensibility",void 0);Dn.FreeCameraTouchInput=rd});var Ux,iX=C(()=>{sl();Q4();$4();eX();tX();Ux=class extends Rm{constructor(e){super(e),this._mouseInput=null,this._mouseWheelInput=null}addKeyboard(){return this.add(new wn),this}addMouse(e=!0){return this._mouseInput||(this._mouseInput=new td(e),this.add(this._mouseInput)),this}removeMouse(){return this._mouseInput&&this.remove(this._mouseInput),this}addMouseWheel(){return this._mouseWheelInput||(this._mouseWheelInput=new As,this.add(this._mouseWheelInput)),this}removeMouseWheel(){return this._mouseWheelInput&&this.remove(this._mouseWheelInput),this}addTouch(){return this.add(new rd),this}clear(){super.clear(),this._mouseInput=null}}});var vc,rX=C(()=>{kt();Ut();Ge();ry();iX();Ci();Vi();Lr();vc=class extends vs{get angularSensibility(){let e=this.inputs.attached.mouse;return e?e.angularSensibility:0}set angularSensibility(e){let t=this.inputs.attached.mouse;t&&(t.angularSensibility=e)}get keysUp(){let e=this.inputs.attached.keyboard;return e?e.keysUp:[]}set keysUp(e){let t=this.inputs.attached.keyboard;t&&(t.keysUp=e)}get keysUpward(){let e=this.inputs.attached.keyboard;return e?e.keysUpward:[]}set keysUpward(e){let t=this.inputs.attached.keyboard;t&&(t.keysUpward=e)}get keysDown(){let e=this.inputs.attached.keyboard;return e?e.keysDown:[]}set keysDown(e){let t=this.inputs.attached.keyboard;t&&(t.keysDown=e)}get keysDownward(){let e=this.inputs.attached.keyboard;return e?e.keysDownward:[]}set keysDownward(e){let t=this.inputs.attached.keyboard;t&&(t.keysDownward=e)}get keysLeft(){let e=this.inputs.attached.keyboard;return e?e.keysLeft:[]}set keysLeft(e){let t=this.inputs.attached.keyboard;t&&(t.keysLeft=e)}get keysRight(){let e=this.inputs.attached.keyboard;return e?e.keysRight:[]}set keysRight(e){let t=this.inputs.attached.keyboard;t&&(t.keysRight=e)}get keysRotateLeft(){let e=this.inputs.attached.keyboard;return e?e.keysRotateLeft:[]}set keysRotateLeft(e){let t=this.inputs.attached.keyboard;t&&(t.keysRotateLeft=e)}get keysRotateRight(){let e=this.inputs.attached.keyboard;return e?e.keysRotateRight:[]}set keysRotateRight(e){let t=this.inputs.attached.keyboard;t&&(t.keysRotateRight=e)}get keysRotateUp(){let e=this.inputs.attached.keyboard;return e?e.keysRotateUp:[]}set keysRotateUp(e){let t=this.inputs.attached.keyboard;t&&(t.keysRotateUp=e)}get keysRotateDown(){let e=this.inputs.attached.keyboard;return e?e.keysRotateDown:[]}set keysRotateDown(e){let t=this.inputs.attached.keyboard;t&&(t.keysRotateDown=e)}constructor(e,t,i,r=!0){super(e,t,i,r),this.ellipsoid=new b(.5,1,.5),this.ellipsoidOffset=new b(0,0,0),this.checkCollisions=!1,this.applyGravity=!1,this._needMoveForGravity=!1,this._oldPosition=b.Zero(),this._diffPosition=b.Zero(),this._newPosition=b.Zero(),this._collisionMask=-1,this._onCollisionPositionChange=(s,a,o=null)=>{this._newPosition.copyFrom(a),this._newPosition.subtractToRef(this._oldPosition,this._diffPosition),this._diffPosition.length()>Re.CollisionsEpsilon&&(this.position.addToRef(this._diffPosition,this._deferredPositionUpdate),this._deferOnly?this._deferredUpdated=!0:this.position.copyFrom(this._deferredPositionUpdate),this.onCollide&&o&&this.onCollide(o))},this.inputs=new Ux(this),this.inputs.addKeyboard().addMouse()}attachControl(e,t){t=de.BackCompatCameraNoPreventDefault(arguments),this.inputs.attachElement(t)}detachControl(){this.inputs.detachElement(),this.cameraDirection=new b(0,0,0),this.cameraRotation=new Ne(0,0)}get collisionMask(){return this._collisionMask}set collisionMask(e){this._collisionMask=isNaN(e)?-1:e}_collideWithWorld(e){let t;this.parent?t=b.TransformCoordinates(this.position,this.parent.getWorldMatrix()):t=this.position,t.subtractFromFloatsToRef(0,this.ellipsoid.y,0,this._oldPosition),this._oldPosition.addInPlace(this.ellipsoidOffset);let i=this.getScene().collisionCoordinator;this._collider||(this._collider=i.createCollider()),this._collider._radius=this.ellipsoid,this._collider.collisionMask=this._collisionMask;let r=e;this.applyGravity&&(r=e.add(this.getScene().gravity)),i.getNewPosition(this._oldPosition,r,this._collider,3,null,this._onCollisionPositionChange,this.uniqueId)}_checkInputs(){this._localDirection||(this._localDirection=b.Zero(),this._transformedDirection=b.Zero()),this.inputs.checkInputs(),super._checkInputs()}set needMoveForGravity(e){this._needMoveForGravity=e}get needMoveForGravity(){return this._needMoveForGravity}_decideIfNeedsToMove(){return this._needMoveForGravity||Math.abs(this.cameraDirection.x)>0||Math.abs(this.cameraDirection.y)>0||Math.abs(this.cameraDirection.z)>0}_updatePosition(){this.checkCollisions&&this.getScene().collisionsEnabled?this._collideWithWorld(this.cameraDirection):super._updatePosition()}dispose(){this.inputs.clear(),super.dispose()}getClassName(){return"FreeCamera"}};P([Vr()],vc.prototype,"ellipsoid",void 0);P([Vr()],vc.prototype,"ellipsoidOffset",void 0);P([w()],vc.prototype,"checkCollisions",void 0);P([w()],vc.prototype,"applyGravity",void 0);Ft("BABYLON.FreeCamera",vc)});var La,Vx=C(()=>{Ge();Xo();zs();La=class n extends _i{get _matrix(){return this._compose(),this._localMatrix}set _matrix(e){e.updateFlag===this._localMatrix.updateFlag&&!this._needToCompose||(this._needToCompose=!1,this._localMatrix.copyFrom(e),this._markAsDirtyAndDecompose())}constructor(e,t,i=null,r=null,s=null,a=null,o=null){var l;super(e,t.getScene(),!1),this.name=e,this.children=[],this.animations=[],this._index=null,this._scalingDeterminant=1,this._needToDecompose=!0,this._needToCompose=!1,this._linkedTransformNode=null,this._waitingTransformNodeId=null,this._waitingTransformNodeUniqueId=null,this._skeleton=t,this._localMatrix=(l=r==null?void 0:r.clone())!=null?l:K.Identity(),this._restMatrix=s!=null?s:this._localMatrix.clone(),this._bindMatrix=a!=null?a:this._localMatrix.clone(),this._index=o,this._absoluteMatrix=new K,this._absoluteBindMatrix=new K,this._absoluteInverseBindMatrix=new K,this._finalMatrix=new K,t.bones.push(this),this.setParent(i,!1),this._updateAbsoluteBindMatrices()}getClassName(){return"Bone"}getSkeleton(){return this._skeleton}get parent(){return this._parentNode}getParent(){return this.parent}getChildren(){return this.children}getIndex(){return this._index===null?this.getSkeleton().bones.indexOf(this):this._index}set parent(e){this.setParent(e)}setParent(e,t=!0){if(this.parent!==e){if(this.parent){let i=this.parent.children.indexOf(this);i!==-1&&this.parent.children.splice(i,1)}this._parentNode=e,this.parent&&this.parent.children.push(this),t&&this._updateAbsoluteBindMatrices(),this.markAsDirty()}}getLocalMatrix(){return this._compose(),this._localMatrix}getBindMatrix(){return this._bindMatrix}getBaseMatrix(){return this.getBindMatrix()}getRestMatrix(){return this._restMatrix}getRestPose(){return this.getRestMatrix()}setRestMatrix(e){this._restMatrix.copyFrom(e)}setRestPose(e){this.setRestMatrix(e)}getBindPose(){return this.getBindMatrix()}setBindMatrix(e){this.updateMatrix(e)}setBindPose(e){this.setBindMatrix(e)}getFinalMatrix(){return this._finalMatrix}getWorldMatrix(){return this.getFinalMatrix()}returnToRest(){var e;if(this._linkedTransformNode){let t=Q.Vector3[0],i=Q.Quaternion[0],r=Q.Vector3[1];this.getRestMatrix().decompose(t,i,r),this._linkedTransformNode.position.copyFrom(r),this._linkedTransformNode.rotationQuaternion=(e=this._linkedTransformNode.rotationQuaternion)!=null?e:ze.Identity(),this._linkedTransformNode.rotationQuaternion.copyFrom(i),this._linkedTransformNode.scaling.copyFrom(t)}else this._matrix=this._restMatrix}getAbsoluteInverseBindMatrix(){return this._absoluteInverseBindMatrix}getInvertedAbsoluteTransform(){return this.getAbsoluteInverseBindMatrix()}getAbsoluteMatrix(){return this._skeleton.computeAbsoluteMatrices(),this._absoluteMatrix}getAbsoluteTransform(){return this.getAbsoluteMatrix()}linkTransformNode(e){this._linkedTransformNode&&this._skeleton._numBonesWithLinkedTransformNode--,this._linkedTransformNode=e,this._linkedTransformNode&&this._skeleton._numBonesWithLinkedTransformNode++}getTransformNode(){return this._linkedTransformNode}get position(){return this._decompose(),this._localPosition}set position(e){this._decompose(),this._localPosition.copyFrom(e),this._markAsDirtyAndCompose()}get rotation(){return this.getRotation()}set rotation(e){this.setRotation(e)}get rotationQuaternion(){return this._decompose(),this._localRotation}set rotationQuaternion(e){this.setRotationQuaternion(e)}get scaling(){return this.getScale()}set scaling(e){this.setScale(e)}get animationPropertiesOverride(){return this._skeleton.animationPropertiesOverride}_decompose(){this._needToDecompose&&(this._needToDecompose=!1,this._localScaling||(this._localScaling=b.Zero(),this._localRotation=ze.Zero(),this._localPosition=b.Zero()),this._localMatrix.decompose(this._localScaling,this._localRotation,this._localPosition))}_compose(){if(this._needToCompose){if(!this._localScaling){this._needToCompose=!1;return}this._needToCompose=!1,K.ComposeToRef(this._localScaling,this._localRotation,this._localPosition,this._localMatrix)}}updateMatrix(e,t=!0,i=!0){this._bindMatrix.copyFrom(e),t&&this._updateAbsoluteBindMatrices(),i?this._matrix=e:this.markAsDirty()}_updateAbsoluteBindMatrices(e,t=!0){if(e||(e=this._bindMatrix),this.parent?e.multiplyToRef(this.parent._absoluteBindMatrix,this._absoluteBindMatrix):this._absoluteBindMatrix.copyFrom(e),this._absoluteBindMatrix.invertToRef(this._absoluteInverseBindMatrix),t)for(let i=0;i{Gr();Ag=class n extends ge{constructor(e,t,i,r,s,a=!0,o=!1,l=3,c=0,f,h,d,u){super(null,s,!a,o,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,f),this.format=r,this._engine&&(!this._engine._caps.textureFloatLinearFiltering&&c===1&&(l=1),!this._engine._caps.textureHalfFloatLinearFiltering&&c===2&&(l=1),this._texture=this._engine.createRawTexture(e,t,i,r,a,o,l,null,c,f!=null?f:0,h!=null?h:!1,u),this.wrapU=ge.CLAMP_ADDRESSMODE,this.wrapV=ge.CLAMP_ADDRESSMODE,this._waitingForData=!!d&&!e)}update(e){this.updateMipLevel(e,0)}updateMipLevel(e,t){this._getEngine().updateRawTexture(this._texture,e,this._texture.format,this._texture.invertY,null,this._texture.type,this._texture._useSRGBBuffer,t),this._waitingForData=!1}clone(){if(!this._texture)return super.clone();let e=new n(null,this.getSize().width,this.getSize().height,this.format,this.getScene(),this._texture.generateMipMaps,this._invertY,this.samplingMode,this._texture.type,this._texture._creationFlags,this._useSRGBBuffer);return e._texture=this._texture,this._texture.incrementReferences(),e}isReady(){return super.isReady()&&!this._waitingForData}static CreateLuminanceTexture(e,t,i,r,s=!0,a=!1,o=3){return new n(e,t,i,1,r,s,a,o)}static CreateLuminanceAlphaTexture(e,t,i,r,s=!0,a=!1,o=3){return new n(e,t,i,2,r,s,a,o)}static CreateAlphaTexture(e,t,i,r,s=!0,a=!1,o=3){return new n(e,t,i,0,r,s,a,o)}static CreateRGBTexture(e,t,i,r,s=!0,a=!1,o=3,l=0,c=0,f=!1){return new n(e,t,i,4,r,s,a,o,l,c,f)}static CreateRGBATexture(e,t,i,r,s=!0,a=!1,o=3,l=0,c=0,f=!1,h=!1){return new n(e,t,i,5,r,s,a,o,l,c,f,h)}static CreateRGBAStorageTexture(e,t,i,r,s=!0,a=!1,o=3,l=0,c=!1){return new n(e,t,i,5,r,s,a,o,l,1,c)}static CreateRTexture(e,t,i,r,s=!0,a=!1,o=ge.TRILINEAR_SAMPLINGMODE,l=1){return new n(e,t,i,6,r,s,a,o,l)}static CreateRStorageTexture(e,t,i,r,s=!0,a=!1,o=ge.TRILINEAR_SAMPLINGMODE,l=1){return new n(e,t,i,6,r,s,a,o,l,1)}}});var Gx,sX=C(()=>{Vx();hi();Ge();nX();Ef();qC();Pi();Pt();R_();Gx=class n{get useTextureToStoreBoneMatrices(){return this._useTextureToStoreBoneMatrices}set useTextureToStoreBoneMatrices(e){this._useTextureToStoreBoneMatrices=e,this._markAsDirty()}get animationPropertiesOverride(){return this._animationPropertiesOverride?this._animationPropertiesOverride:this._scene.animationPropertiesOverride}set animationPropertiesOverride(e){this._animationPropertiesOverride=e}get isUsingTextureForMatrices(){return this.useTextureToStoreBoneMatrices&&this._canUseTextureForBones}get uniqueId(){return this._uniqueId}constructor(e,t,i){this.name=e,this.id=t,this.bones=[],this.needInitialSkinMatrix=!1,this._isDirty=!0,this._meshesWithPoseMatrix=new Array,this._identity=K.Identity(),this._currentRenderId=-1,this._textureWidth=0,this._textureHeight=1,this._ranges={},this._absoluteTransformIsDirty=!0,this._canUseTextureForBones=!1,this._uniqueId=0,this._numBonesWithLinkedTransformNode=0,this._hasWaitingData=null,this._parentContainer=null,this.doNotSerialize=!1,this._useTextureToStoreBoneMatrices=!0,this._animationPropertiesOverride=null,this.onBeforeComputeObservable=new te,this.metadata=null,this.bones=[],this._scene=i||Le.LastCreatedScene,this._uniqueId=this._scene.getUniqueId(),this._scene.addSkeleton(this),this._isDirty=!0;let r=this._scene.getEngine().getCaps();this._canUseTextureForBones=r.textureFloat&&r.maxVertexTextureImageUnits>0}getClassName(){return"Skeleton"}getChildren(){return this.bones.filter(e=>!e.getParent())}getTransformMatrices(e){if(this.needInitialSkinMatrix){if(!e)throw new Error("getTransformMatrices: When using the needInitialSkinMatrix flag, a mesh must be provided");return e._bonesTransformMatrices||this.prepare(!0),e._bonesTransformMatrices}return(!this._transformMatrices||this._isDirty)&&this.prepare(!this._transformMatrices),this._transformMatrices}getTransformMatrixTexture(e){return this.needInitialSkinMatrix&&e._transformMatrixTexture?e._transformMatrixTexture:this._transformMatrixTexture}getScene(){return this._scene}toString(e){let t=`Name: ${this.name}, nBones: ${this.bones.length}`;if(t+=`, nAnimationRanges: ${this._ranges?Object.keys(this._ranges).length:"none"}`,e){t+=", Ranges: {";let i=!0;for(let r in this._ranges)i&&(t+=", ",i=!1),t+=r;t+="}"}return t}getBoneIndexByName(e){for(let t=0,i=this.bones.length;t-1&&this._meshesWithPoseMatrix.splice(t,1)}_computeTransformMatrices(e,t){this.onBeforeComputeObservable.notifyObservers(this);for(let i=0;i0){for(let r of this.bones)if(r._linkedTransformNode){let s=r._linkedTransformNode;r.position=s.position,s.rotationQuaternion?r.rotationQuaternion=s.rotationQuaternion:r.rotation=s.rotation,r.scaling=s.scaling}}let t=null;if(this.needInitialSkinMatrix)for(let r of this._meshesWithPoseMatrix){let s=r.getPoseMatrix(),a=this._isDirty;if(t===null&&(t=this._computeTextureSize()),(!r._bonesTransformMatrices||r._bonesTransformMatrices.length!==t)&&(r._bonesTransformMatrices=new Float32Array(t),a=!0),!!a){if(this._synchronizedWithMesh!==r){this._synchronizedWithMesh=r;for(let o of this.bones)o.getParent()||(o.getBindMatrix().multiplyToRef(s,Q.Matrix[1]),o._updateAbsoluteBindMatrices(Q.Matrix[1]));if(this.isUsingTextureForMatrices){let o=(i=r._transformMatrixTexture)==null?void 0:i.getSize(),l=o?o.width*o.height*4:0;(!r._transformMatrixTexture||l!==t)&&(r._transformMatrixTexture&&r._transformMatrixTexture.dispose(),r._transformMatrixTexture=Ag.CreateRGBATexture(r._bonesTransformMatrices,this._textureWidth,this._textureHeight,this._scene,!1,!1,1,1))}}this._computeTransformMatrices(r._bonesTransformMatrices,s),this.isUsingTextureForMatrices&&r._transformMatrixTexture&&r._transformMatrixTexture.update(r._bonesTransformMatrices)}}else{if(!this._isDirty)return;t===null&&(t=this._computeTextureSize()),(!this._transformMatrices||this._transformMatrices.length!==t)&&(this._transformMatrices=new Float32Array(t),this.isUsingTextureForMatrices&&(this._transformMatrixTexture&&this._transformMatrixTexture.dispose(),this._transformMatrixTexture=Ag.CreateRGBATexture(this._transformMatrices,this._textureWidth,this._textureHeight,this._scene,!1,!1,1,1))),this._computeTransformMatrices(this._transformMatrices,null),this.isUsingTextureForMatrices&&this._transformMatrixTexture&&this._transformMatrixTexture.update(this._transformMatrices)}this._isDirty=!1}getAnimatables(){if(!this._animatables||this._animatables.length!==this.bones.length){this._animatables=[];for(let e=0;e-1&&this._parentContainer.skeletons.splice(e,1),this._parentContainer=null}this._transformMatrixTexture&&(this._transformMatrixTexture.dispose(),this._transformMatrixTexture=null)}serialize(){var t,i;let e={};e.name=this.name,e.id=this.id,e.uniqueId=this.uniqueId,this.dimensionsAtRest&&(e.dimensionsAtRest=this.dimensionsAtRest.asArray()),e.bones=[],e.needInitialSkinMatrix=this.needInitialSkinMatrix,this.metadata&&(e.metadata=this.metadata);for(let r=0;r0&&(o.animation=s.animations[0].serialize()),e.ranges=[];for(let l in this._ranges){let c=this._ranges[l];if(!c)continue;let f={};f.name=l,f.from=c.from,f.to=c.to,e.ranges.push(f)}}return e}static Parse(e,t){let i=new n(e.name,e.id,t);e.dimensionsAtRest&&(i.dimensionsAtRest=b.FromArray(e.dimensionsAtRest)),i.needInitialSkinMatrix=e.needInitialSkinMatrix,e.metadata&&(i.metadata=e.metadata);let r;for(r=0;r-1&&(o=i.bones[s.parentBoneIndex]);let l=s.rest?K.FromArray(s.rest):null,c=new La(s.name,i,o,K.FromArray(s.matrix),l,null,a);s.id!==void 0&&s.id!==null&&(c.id=s.id),s.length&&(c.length=s.length),s.metadata&&(c.metadata=s.metadata),s.animation&&c.animations.push(ft.Parse(s.animation)),s.linkedTransformNodeId!==void 0&&s.linkedTransformNodeId!==null&&(i._hasWaitingData=!0,c._waitingTransformNodeId=s.linkedTransformNodeId),s.linkedTransformNodeUniqueId!==void 0&&s.linkedTransformNodeUniqueId!==null&&(i._hasWaitingData=!0,c._waitingTransformNodeUniqueId=s.linkedTransformNodeUniqueId)}if(e.ranges)for(r=0;r0&&(e=this._meshesWithPoseMatrix[0].getPoseMatrix()),e}sortBones(){let e=[],t=new Array(this.bones.length);for(let i=0;i{kt();hi();Pi();Ui();Ut();Er();Vi();kf=class n{get influence(){return this._influence}set influence(e){if(this._influence===e)return;let t=this._influence;this._influence=e,this.onInfluenceChanged.hasObservers()&&this.onInfluenceChanged.notifyObservers(t===0||e===0)}get animationPropertiesOverride(){return!this._animationPropertiesOverride&&this._scene?this._scene.animationPropertiesOverride:this._animationPropertiesOverride}set animationPropertiesOverride(e){this._animationPropertiesOverride=e}constructor(e,t=0,i=null,r=null){this.name=e,this.animations=[],this._positions=null,this._normals=null,this._tangents=null,this._uvs=null,this._uv2s=null,this._colors=null,this._uniqueId=0,this.onInfluenceChanged=new te,this._onDataLayoutChanged=new te,this.morphTargetManager=null,this._animationPropertiesOverride=null,this.id=e,this.morphTargetManager=r,this._scene=i||Le.LastCreatedScene,this.influence=t,this._scene&&(this._uniqueId=this._scene.getUniqueId())}get uniqueId(){return this._uniqueId}get hasPositions(){return!!this._positions}get hasNormals(){return!!this._normals}get hasTangents(){return!!this._tangents}get hasUVs(){return!!this._uvs}get hasUV2s(){return!!this._uv2s}get hasColors(){return!!this._colors}get vertexCount(){return this._positions?this._positions.length/3:this._normals?this._normals.length/3:this._tangents?this._tangents.length/3:this._uvs?this._uvs.length/2:this._uv2s?this._uv2s.length/2:this._colors?this._colors.length/4:0}setPositions(e){let t=this.hasPositions;this._positions=e,t!==this.hasPositions&&this._onDataLayoutChanged.notifyObservers(void 0)}getPositions(){return this._positions}setNormals(e){let t=this.hasNormals;this._normals=e,t!==this.hasNormals&&this._onDataLayoutChanged.notifyObservers(void 0)}getNormals(){return this._normals}setTangents(e){let t=this.hasTangents;this._tangents=e,t!==this.hasTangents&&this._onDataLayoutChanged.notifyObservers(void 0)}getTangents(){return this._tangents}setUVs(e){let t=this.hasUVs;this._uvs=e,t!==this.hasUVs&&this._onDataLayoutChanged.notifyObservers(void 0)}getUVs(){return this._uvs}setUV2s(e){let t=this.hasUV2s;this._uv2s=e,t!==this.hasUV2s&&this._onDataLayoutChanged.notifyObservers(void 0)}getUV2s(){return this._uv2s}setColors(e){let t=this.hasColors;this._colors=e,t!==this.hasColors&&this._onDataLayoutChanged.notifyObservers(void 0)}getColors(){return this._colors}clone(){let e=tt.Clone(()=>new n(this.name,this.influence,this._scene,this.morphTargetManager),this);return e._positions=this._positions,e._normals=this._normals,e._tangents=this._tangents,e._uvs=this._uvs,e._uv2s=this._uv2s,e._colors=this._colors,e}serialize(){let e={};return e.name=this.name,e.influence=this.influence,this.id!=null&&(e.id=this.id),e.uniqueId=this.uniqueId,e.positions=Array.prototype.slice.call(this.getPositions()),this.hasNormals&&(e.normals=Array.prototype.slice.call(this.getNormals())),this.hasTangents&&(e.tangents=Array.prototype.slice.call(this.getTangents())),this.hasUVs&&(e.uvs=Array.prototype.slice.call(this.getUVs())),this.hasUV2s&&(e.uv2s=Array.prototype.slice.call(this.getUV2s())),this.hasColors&&(e.colors=Array.prototype.slice.call(this.getColors())),tt.AppendSerializedAnimations(this,e),e}getClassName(){return"MorphTarget"}static Parse(e,t,i=null){let r=new n(e.name,e.influence,t,i);if(r.setPositions(e.positions),e.id!=null&&(r.id=e.id),e.normals&&r.setNormals(e.normals),e.tangents&&r.setTangents(e.tangents),e.uvs&&r.setUVs(e.uvs),e.uv2s&&r.setUV2s(e.uv2s),e.colors&&r.setColors(e.colors),e.animations){for(let s=0;s{Gr();kx=class n extends ge{get depth(){return this._depth}constructor(e,t,i,r,s,a,o=!0,l=!1,c=ge.TRILINEAR_SAMPLINGMODE,f=0,h,d){super(null,a,!o,l),this.format=s,this._texture=a.getEngine().createRawTexture2DArray(e,t,i,r,s,o,l,c,null,f,h!=null?h:0,d),this._depth=r,this.is2DArray=!0}update(e){this.updateMipLevel(e,0)}updateMipLevel(e,t){this._texture&&this._getEngine().updateRawTexture2DArray(this._texture,e,this._texture.format,this._texture.invertY,null,this._texture.type,t)}static CreateRGBATexture(e,t,i,r,s,a=!0,o=!1,l=3,c=0){return new n(e,t,i,r,5,s,a,o,l,c)}}});var nd,oX=C(()=>{to();Pt();Pi();sD();aX();nd=class n{set areUpdatesFrozen(e){e?this._blockCounter++:(this._blockCounter--,this._blockCounter<=0&&(this._blockCounter=0,this._syncActiveTargets(this._forceUpdateWhenUnfrozen),this._forceUpdateWhenUnfrozen=!1))}get areUpdatesFrozen(){return this._blockCounter>0}constructor(e=null,t){if(this.meshName=t,this._targets=new Array,this._targetInfluenceChangedObservers=new Array,this._targetDataLayoutChangedObservers=new Array,this._activeTargets=new wi(16),this._supportsPositions=!1,this._supportsNormals=!1,this._supportsTangents=!1,this._supportsUVs=!1,this._supportsUV2s=!1,this._supportsColors=!1,this._vertexCount=0,this._uniqueId=0,this._tempInfluences=new Array,this._canUseTextureForTargets=!1,this._blockCounter=0,this._mustSynchronize=!0,this._forceUpdateWhenUnfrozen=!1,this._textureVertexStride=0,this._textureWidth=0,this._textureHeight=1,this._parentContainer=null,this.optimizeInfluencers=!0,this.enablePositionMorphing=!0,this.enableNormalMorphing=!0,this.enableTangentMorphing=!0,this.enableUVMorphing=!0,this.enableUV2Morphing=!0,this.enableColorMorphing=!0,this._numMaxInfluencers=0,this._useTextureToStoreTargets=!0,this.metadata=null,this._influencesAreDirty=!1,this._needUpdateInfluences=!1,e||(e=Le.LastCreatedScene),this._scene=e,this._scene){this._scene.addMorphTargetManager(this),this._uniqueId=this._scene.getUniqueId();let i=this._scene.getEngine().getCaps();this._canUseTextureForTargets=i.canUseGLVertexID&&i.textureFloat&&i.maxVertexTextureImageUnits>0&&i.texture2DArrayMaxLayerCount>1}}get numMaxInfluencers(){return n.ConstantTargetCountForTextureMode>0&&this.isUsingTextureForTargets?n.ConstantTargetCountForTextureMode:this._numMaxInfluencers}set numMaxInfluencers(e){this._numMaxInfluencers!==e&&(this._numMaxInfluencers=e,this._mustSynchronize=!0,this._syncActiveTargets())}get uniqueId(){return this._uniqueId}get vertexCount(){return this._vertexCount}get supportsPositions(){return this._supportsPositions&&this.enablePositionMorphing}get supportsNormals(){return this._supportsNormals&&this.enableNormalMorphing}get supportsTangents(){return this._supportsTangents&&this.enableTangentMorphing}get supportsUVs(){return this._supportsUVs&&this.enableUVMorphing}get supportsUV2s(){return this._supportsUV2s&&this.enableUV2Morphing}get supportsColors(){return this._supportsColors&&this.enableColorMorphing}get hasPositions(){return this._supportsPositions}get hasNormals(){return this._supportsNormals}get hasTangents(){return this._supportsTangents}get hasUVs(){return this._supportsUVs}get hasUV2s(){return this._supportsUV2s}get hasColors(){return this._supportsColors}get numTargets(){return this._targets.length}get numInfluencers(){return this._influencesAreDirty&&this._syncActiveTargets(),this._activeTargets.length}get influences(){return this._influencesAreDirty&&this._syncActiveTargets(),this._influences}get useTextureToStoreTargets(){return this._useTextureToStoreTargets}set useTextureToStoreTargets(e){this._useTextureToStoreTargets!==e&&(this._useTextureToStoreTargets=e,this._mustSynchronize=!0,this._syncActiveTargets())}get isUsingTextureForTargets(){var e;return n.EnableTextureStorage&&this.useTextureToStoreTargets&&this._canUseTextureForTargets&&!((e=this._scene)!=null&&e.getEngine().getCaps().disableMorphTargetTexture)}getActiveTarget(e){return this._influencesAreDirty&&this._syncActiveTargets(),this._activeTargets.data[e]}getTarget(e){return this._targets[e]}getTargetByName(e){for(let t of this._targets)if(t.name===e)return t;return null}addTarget(e){this._targets.push(e),this._targetInfluenceChangedObservers.push(e.onInfluenceChanged.add(t=>{this.areUpdatesFrozen&&t&&(this._forceUpdateWhenUnfrozen=!0),this._influencesAreDirty=!0,this._needUpdateInfluences=this._needUpdateInfluences||t})),this._targetDataLayoutChangedObservers.push(e._onDataLayoutChanged.add(()=>{this._mustSynchronize=!0,this._syncActiveTargets()})),this._mustSynchronize=!0,this._syncActiveTargets()}removeTarget(e){let t=this._targets.indexOf(e);t>=0&&(this._targets.splice(t,1),e.onInfluenceChanged.remove(this._targetInfluenceChangedObservers.splice(t,1)[0]),e._onDataLayoutChanged.remove(this._targetDataLayoutChangedObservers.splice(t,1)[0]),this._mustSynchronize=!0,this._syncActiveTargets()),this._scene&&this._scene.stopAnimation(e)}_bind(e){this._influencesAreDirty&&this._syncActiveTargets(),e.setFloat3("morphTargetTextureInfo",this._textureVertexStride,this._textureWidth,this._textureHeight),e.setFloatArray("morphTargetTextureIndices",this._morphTargetTextureIndices),e.setTexture("morphTargets",this._targetStoreTexture),e.setFloat("morphTargetCount",this.numInfluencers)}clone(){let e=new n(this._scene);e.areUpdatesFrozen=!0;for(let t of this._targets)e.addTarget(t.clone());return e.areUpdatesFrozen=!1,e.enablePositionMorphing=this.enablePositionMorphing,e.enableNormalMorphing=this.enableNormalMorphing,e.enableTangentMorphing=this.enableTangentMorphing,e.enableUVMorphing=this.enableUVMorphing,e.enableUV2Morphing=this.enableUV2Morphing,e.enableColorMorphing=this.enableColorMorphing,e.metadata=this.metadata,e}serialize(){let e={};e.id=this.uniqueId,e.meshName=this.meshName,e.targets=[];for(let t of this._targets)e.targets.push(t.serialize());return this.metadata&&(e.metadata=this.metadata),e}_syncActiveTargets(e=!1){if(this.areUpdatesFrozen)return;e=e||this._needUpdateInfluences,this._needUpdateInfluences=!1,this._influencesAreDirty=!1;let t=!!this._targetStoreTexture,i=this.isUsingTextureForTargets;(this._mustSynchronize||t!==i)&&(this._mustSynchronize=!1,this.synchronize());let r=0;this._activeTargets.reset(),(!this._morphTargetTextureIndices||this._morphTargetTextureIndices.length!==this._targets.length)&&(this._morphTargetTextureIndices=new Float32Array(this._targets.length));let s=-1;for(let a of this._targets)if(s++,!(a.influence===0&&this.optimizeInfluencers)){if(this._activeTargets.length>=n.MaxActiveMorphTargetsInVertexAttributeMode&&!this.isUsingTextureForTargets)break;this._activeTargets.push(a),this._morphTargetTextureIndices[r]=s,this._tempInfluences[r++]=a.influence}this._morphTargetTextureIndices.length!==r&&(this._morphTargetTextureIndices=this._morphTargetTextureIndices.slice(0,r)),(!this._influences||this._influences.length!==r)&&(this._influences=new Float32Array(r));for(let a=0;ae.getCaps().texture2DArrayMaxLayerCount&&(this.useTextureToStoreTargets=!1);for(let i of this._targets){this._supportsPositions=this._supportsPositions&&i.hasPositions,this._supportsNormals=this._supportsNormals&&i.hasNormals,this._supportsTangents=this._supportsTangents&&i.hasTangents,this._supportsUVs=this._supportsUVs&&i.hasUVs,this._supportsUV2s=this._supportsUV2s&&i.hasUV2s,this._supportsColors=this._supportsColors&&i.hasColors;let r=i.vertexCount;if(this._vertexCount===0)this._vertexCount=r;else if(this._vertexCount!==r){J.Error(`Incompatible target. Targets must all have the same vertices count. Current vertex count: ${this._vertexCount}, vertex count for target "${i.name}": ${r}`);return}}if(this.isUsingTextureForTargets){this._textureVertexStride=0,this._supportsPositions&&this._textureVertexStride++,this._supportsNormals&&this._textureVertexStride++,this._supportsTangents&&this._textureVertexStride++,this._supportsUVs&&this._textureVertexStride++,this._supportsUV2s&&this._textureVertexStride++,this._supportsColors&&this._textureVertexStride++,this._textureWidth=this._vertexCount*this._textureVertexStride||1,this._textureHeight=1;let i=e.getCaps().maxTextureSize;this._textureWidth>i&&(this._textureHeight=Math.ceil(this._textureWidth/i),this._textureWidth=i);let r=this._targets.length,s=new Float32Array(r*this._textureWidth*this._textureHeight*4),a;for(let o=0;o-1&&this._parentContainer.morphTargetManagers.splice(e,1),this._parentContainer=null}for(let e of this._targets)this._scene.stopAnimation(e)}}static Parse(e,t){let i=new n(t);for(let r of e.targets)i.addTarget(kf.Parse(r,t,i));return e.metadata&&(i.metadata=e.metadata),i}};nd.EnableTextureStorage=!0;nd.MaxActiveMorphTargetsInVertexAttributeMode=8;nd.ConstantTargetCountForTextureMode=0});function cX(n,e,t){oD(n)&&J.Warn(`Extension with the name '${n}' already exists`),aD.set(n,{isGLTFExtension:e,factory:t})}function oD(n){return aD.delete(n)}var aD,lX,fX=C(()=>{Pt();aD=new Map,lX=aD});var k,lD=C(()=>{k=class{};k.AUTOSAMPLERSUFFIX="Sampler";k.DISABLEUA="#define DISABLE_UNIFORMITY_ANALYSIS";k.ALPHA_DISABLE=0;k.ALPHA_ADD=1;k.ALPHA_COMBINE=2;k.ALPHA_SUBTRACT=3;k.ALPHA_MULTIPLY=4;k.ALPHA_MAXIMIZED=5;k.ALPHA_ONEONE=6;k.ALPHA_PREMULTIPLIED=7;k.ALPHA_PREMULTIPLIED_PORTERDUFF=8;k.ALPHA_INTERPOLATE=9;k.ALPHA_SCREENMODE=10;k.ALPHA_ONEONE_ONEONE=11;k.ALPHA_ALPHATOCOLOR=12;k.ALPHA_REVERSEONEMINUS=13;k.ALPHA_SRC_DSTONEMINUSSRCALPHA=14;k.ALPHA_ONEONE_ONEZERO=15;k.ALPHA_EXCLUSION=16;k.ALPHA_LAYER_ACCUMULATE=17;k.ALPHA_MIN=18;k.ALPHA_MAX=19;k.ALPHA_DUAL_SRC0_ADD_SRC1xDST=20;k.ALPHA_EQUATION_ADD=0;k.ALPHA_EQUATION_SUBSTRACT=1;k.ALPHA_EQUATION_REVERSE_SUBTRACT=2;k.ALPHA_EQUATION_MAX=3;k.ALPHA_EQUATION_MIN=4;k.ALPHA_EQUATION_DARKEN=5;k.DELAYLOADSTATE_NONE=0;k.DELAYLOADSTATE_LOADED=1;k.DELAYLOADSTATE_LOADING=2;k.DELAYLOADSTATE_NOTLOADED=4;k.NEVER=512;k.ALWAYS=519;k.LESS=513;k.EQUAL=514;k.LEQUAL=515;k.GREATER=516;k.GEQUAL=518;k.NOTEQUAL=517;k.KEEP=7680;k.ZERO=0;k.REPLACE=7681;k.INCR=7682;k.DECR=7683;k.INVERT=5386;k.INCR_WRAP=34055;k.DECR_WRAP=34056;k.TEXTURE_CLAMP_ADDRESSMODE=0;k.TEXTURE_WRAP_ADDRESSMODE=1;k.TEXTURE_MIRROR_ADDRESSMODE=2;k.TEXTURE_CREATIONFLAG_STORAGE=1;k.TEXTUREFORMAT_ALPHA=0;k.TEXTUREFORMAT_LUMINANCE=1;k.TEXTUREFORMAT_LUMINANCE_ALPHA=2;k.TEXTUREFORMAT_RGB=4;k.TEXTUREFORMAT_RGBA=5;k.TEXTUREFORMAT_RED=6;k.TEXTUREFORMAT_R=6;k.TEXTUREFORMAT_R16_UNORM=33322;k.TEXTUREFORMAT_RG16_UNORM=33324;k.TEXTUREFORMAT_RGB16_UNORM=32852;k.TEXTUREFORMAT_RGBA16_UNORM=32859;k.TEXTUREFORMAT_R16_SNORM=36760;k.TEXTUREFORMAT_RG16_SNORM=36761;k.TEXTUREFORMAT_RGB16_SNORM=36762;k.TEXTUREFORMAT_RGBA16_SNORM=36763;k.TEXTUREFORMAT_RG=7;k.TEXTUREFORMAT_RED_INTEGER=8;k.TEXTUREFORMAT_R_INTEGER=8;k.TEXTUREFORMAT_RG_INTEGER=9;k.TEXTUREFORMAT_RGB_INTEGER=10;k.TEXTUREFORMAT_RGBA_INTEGER=11;k.TEXTUREFORMAT_BGRA=12;k.TEXTUREFORMAT_DEPTH24_STENCIL8=13;k.TEXTUREFORMAT_DEPTH32_FLOAT=14;k.TEXTUREFORMAT_DEPTH16=15;k.TEXTUREFORMAT_DEPTH24=16;k.TEXTUREFORMAT_DEPTH24UNORM_STENCIL8=17;k.TEXTUREFORMAT_DEPTH32FLOAT_STENCIL8=18;k.TEXTUREFORMAT_STENCIL8=19;k.TEXTUREFORMAT_UNDEFINED=4294967295;k.TEXTUREFORMAT_COMPRESSED_RGBA_BPTC_UNORM=36492;k.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_BPTC_UNORM=36493;k.TEXTUREFORMAT_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT=36495;k.TEXTUREFORMAT_COMPRESSED_RGB_BPTC_SIGNED_FLOAT=36494;k.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT5=33779;k.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT=35919;k.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT3=33778;k.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT=35918;k.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT1=33777;k.TEXTUREFORMAT_COMPRESSED_RGB_S3TC_DXT1=33776;k.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT=35917;k.TEXTUREFORMAT_COMPRESSED_SRGB_S3TC_DXT1_EXT=35916;k.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_4x4=37808;k.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_5x4=37809;k.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_5x5=37810;k.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_6x5=37811;k.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_6x6=37812;k.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_8x5=37813;k.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_8x6=37814;k.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_8x8=37815;k.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_10x5=37816;k.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_10x6=37817;k.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_10x8=37818;k.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_10x10=37819;k.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_12x10=37820;k.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_12x12=37821;k.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR=37840;k.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR=37841;k.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR=37842;k.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR=37843;k.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR=37844;k.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR=37845;k.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR=37846;k.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR=37847;k.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR=37848;k.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR=37849;k.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR=37850;k.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR=37851;k.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR=37852;k.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR=37853;k.TEXTUREFORMAT_COMPRESSED_RGB_ETC1_WEBGL=36196;k.TEXTUREFORMAT_COMPRESSED_RGB8_ETC2=37492;k.TEXTUREFORMAT_COMPRESSED_SRGB8_ETC2=37493;k.TEXTUREFORMAT_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2=37494;k.TEXTUREFORMAT_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2=37495;k.TEXTUREFORMAT_COMPRESSED_RGBA8_ETC2_EAC=37496;k.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC=37497;k.TEXTURETYPE_UNSIGNED_BYTE=0;k.TEXTURETYPE_UNSIGNED_INT=0;k.TEXTURETYPE_FLOAT=1;k.TEXTURETYPE_HALF_FLOAT=2;k.TEXTURETYPE_BYTE=3;k.TEXTURETYPE_SHORT=4;k.TEXTURETYPE_UNSIGNED_SHORT=5;k.TEXTURETYPE_INT=6;k.TEXTURETYPE_UNSIGNED_INTEGER=7;k.TEXTURETYPE_UNSIGNED_SHORT_4_4_4_4=8;k.TEXTURETYPE_UNSIGNED_SHORT_5_5_5_1=9;k.TEXTURETYPE_UNSIGNED_SHORT_5_6_5=10;k.TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV=11;k.TEXTURETYPE_UNSIGNED_INT_24_8=12;k.TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV=13;k.TEXTURETYPE_UNSIGNED_INT_5_9_9_9_REV=14;k.TEXTURETYPE_FLOAT_32_UNSIGNED_INT_24_8_REV=15;k.TEXTURETYPE_UNDEFINED=16;k.TEXTURE_2D=3553;k.TEXTURE_2D_ARRAY=35866;k.TEXTURE_CUBE_MAP=34067;k.TEXTURE_CUBE_MAP_ARRAY=3735928559;k.TEXTURE_3D=32879;k.TEXTURE_NEAREST_SAMPLINGMODE=1;k.TEXTURE_NEAREST_NEAREST=1;k.TEXTURE_BILINEAR_SAMPLINGMODE=2;k.TEXTURE_LINEAR_LINEAR=2;k.TEXTURE_TRILINEAR_SAMPLINGMODE=3;k.TEXTURE_LINEAR_LINEAR_MIPLINEAR=3;k.TEXTURE_NEAREST_NEAREST_MIPNEAREST=4;k.TEXTURE_NEAREST_LINEAR_MIPNEAREST=5;k.TEXTURE_NEAREST_LINEAR_MIPLINEAR=6;k.TEXTURE_NEAREST_LINEAR=7;k.TEXTURE_NEAREST_NEAREST_MIPLINEAR=8;k.TEXTURE_LINEAR_NEAREST_MIPNEAREST=9;k.TEXTURE_LINEAR_NEAREST_MIPLINEAR=10;k.TEXTURE_LINEAR_LINEAR_MIPNEAREST=11;k.TEXTURE_LINEAR_NEAREST=12;k.TEXTURE_EXPLICIT_MODE=0;k.TEXTURE_SPHERICAL_MODE=1;k.TEXTURE_PLANAR_MODE=2;k.TEXTURE_CUBIC_MODE=3;k.TEXTURE_PROJECTION_MODE=4;k.TEXTURE_SKYBOX_MODE=5;k.TEXTURE_INVCUBIC_MODE=6;k.TEXTURE_EQUIRECTANGULAR_MODE=7;k.TEXTURE_FIXED_EQUIRECTANGULAR_MODE=8;k.TEXTURE_FIXED_EQUIRECTANGULAR_MIRRORED_MODE=9;k.TEXTURE_FILTERING_QUALITY_OFFLINE=4096;k.TEXTURE_FILTERING_QUALITY_HIGH=64;k.TEXTURE_FILTERING_QUALITY_MEDIUM=16;k.TEXTURE_FILTERING_QUALITY_LOW=8;k.SCALEMODE_FLOOR=1;k.SCALEMODE_NEAREST=2;k.SCALEMODE_CEILING=3;k.MATERIAL_TextureDirtyFlag=1;k.MATERIAL_LightDirtyFlag=2;k.MATERIAL_FresnelDirtyFlag=4;k.MATERIAL_AttributesDirtyFlag=8;k.MATERIAL_MiscDirtyFlag=16;k.MATERIAL_PrePassDirtyFlag=32;k.MATERIAL_ImageProcessingDirtyFlag=64;k.MATERIAL_AllDirtyFlag=127;k.MATERIAL_TriangleFillMode=0;k.MATERIAL_WireFrameFillMode=1;k.MATERIAL_PointFillMode=2;k.MATERIAL_PointListDrawMode=3;k.MATERIAL_LineListDrawMode=4;k.MATERIAL_LineLoopDrawMode=5;k.MATERIAL_LineStripDrawMode=6;k.MATERIAL_TriangleStripDrawMode=7;k.MATERIAL_TriangleFanDrawMode=8;k.MATERIAL_ClockWiseSideOrientation=0;k.MATERIAL_CounterClockWiseSideOrientation=1;k.MATERIAL_DIFFUSE_MODEL_E_OREN_NAYAR=0;k.MATERIAL_DIFFUSE_MODEL_BURLEY=1;k.MATERIAL_DIFFUSE_MODEL_LAMBERT=2;k.MATERIAL_DIFFUSE_MODEL_LEGACY=3;k.MATERIAL_DIELECTRIC_SPECULAR_MODEL_GLTF=0;k.MATERIAL_DIELECTRIC_SPECULAR_MODEL_OPENPBR=1;k.MATERIAL_CONDUCTOR_SPECULAR_MODEL_GLTF=0;k.MATERIAL_CONDUCTOR_SPECULAR_MODEL_OPENPBR=1;k.ACTION_NothingTrigger=0;k.ACTION_OnPickTrigger=1;k.ACTION_OnLeftPickTrigger=2;k.ACTION_OnRightPickTrigger=3;k.ACTION_OnCenterPickTrigger=4;k.ACTION_OnPickDownTrigger=5;k.ACTION_OnDoublePickTrigger=6;k.ACTION_OnPickUpTrigger=7;k.ACTION_OnPickOutTrigger=16;k.ACTION_OnLongPressTrigger=8;k.ACTION_OnPointerOverTrigger=9;k.ACTION_OnPointerOutTrigger=10;k.ACTION_OnEveryFrameTrigger=11;k.ACTION_OnIntersectionEnterTrigger=12;k.ACTION_OnIntersectionExitTrigger=13;k.ACTION_OnKeyDownTrigger=14;k.ACTION_OnKeyUpTrigger=15;k.PARTICLES_BILLBOARDMODE_Y=2;k.PARTICLES_BILLBOARDMODE_ALL=7;k.PARTICLES_BILLBOARDMODE_STRETCHED=8;k.PARTICLES_BILLBOARDMODE_STRETCHED_LOCAL=9;k.MESHES_CULLINGSTRATEGY_STANDARD=0;k.MESHES_CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY=1;k.MESHES_CULLINGSTRATEGY_OPTIMISTIC_INCLUSION=2;k.MESHES_CULLINGSTRATEGY_OPTIMISTIC_INCLUSION_THEN_BSPHERE_ONLY=3;k.SCENELOADER_NO_LOGGING=0;k.SCENELOADER_MINIMAL_LOGGING=1;k.SCENELOADER_SUMMARY_LOGGING=2;k.SCENELOADER_DETAILED_LOGGING=3;k.PREPASS_IRRADIANCE_LEGACY_TEXTURE_TYPE=0;k.PREPASS_POSITION_TEXTURE_TYPE=1;k.PREPASS_VELOCITY_TEXTURE_TYPE=2;k.PREPASS_REFLECTIVITY_TEXTURE_TYPE=3;k.PREPASS_COLOR_TEXTURE_TYPE=4;k.PREPASS_DEPTH_TEXTURE_TYPE=5;k.PREPASS_NORMAL_TEXTURE_TYPE=6;k.PREPASS_ALBEDO_SQRT_TEXTURE_TYPE=7;k.PREPASS_WORLD_NORMAL_TEXTURE_TYPE=8;k.PREPASS_LOCAL_POSITION_TEXTURE_TYPE=9;k.PREPASS_SCREENSPACE_DEPTH_TEXTURE_TYPE=10;k.PREPASS_VELOCITY_LINEAR_TEXTURE_TYPE=11;k.PREPASS_ALBEDO_TEXTURE_TYPE=12;k.PREPASS_NORMALIZED_VIEW_DEPTH_TEXTURE_TYPE=13;k.PREPASS_IRRADIANCE_TEXTURE_TYPE=14;k.BUFFER_CREATIONFLAG_READ=1;k.BUFFER_CREATIONFLAG_WRITE=2;k.BUFFER_CREATIONFLAG_READWRITE=3;k.BUFFER_CREATIONFLAG_UNIFORM=4;k.BUFFER_CREATIONFLAG_VERTEX=8;k.BUFFER_CREATIONFLAG_INDEX=16;k.BUFFER_CREATIONFLAG_STORAGE=32;k.BUFFER_CREATIONFLAG_INDIRECT=64;k.RENDERPASS_MAIN=0;k.INPUT_ALT_KEY=18;k.INPUT_CTRL_KEY=17;k.INPUT_META_KEY1=91;k.INPUT_META_KEY2=92;k.INPUT_META_KEY3=93;k.INPUT_SHIFT_KEY=16;k.SNAPSHOTRENDERING_STANDARD=0;k.SNAPSHOTRENDERING_FAST=1;k.PERSPECTIVE_CAMERA=0;k.ORTHOGRAPHIC_CAMERA=1;k.FOVMODE_VERTICAL_FIXED=0;k.FOVMODE_HORIZONTAL_FIXED=1;k.RIG_MODE_NONE=0;k.RIG_MODE_STEREOSCOPIC_ANAGLYPH=10;k.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL=11;k.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED=12;k.RIG_MODE_STEREOSCOPIC_OVERUNDER=13;k.RIG_MODE_STEREOSCOPIC_INTERLACED=14;k.RIG_MODE_VR=20;k.RIG_MODE_CUSTOM=22;k.MAX_SUPPORTED_UV_SETS=6;k.GL_ALPHA_EQUATION_ADD=32774;k.GL_ALPHA_EQUATION_MIN=32775;k.GL_ALPHA_EQUATION_MAX=32776;k.GL_ALPHA_EQUATION_SUBTRACT=32778;k.GL_ALPHA_EQUATION_REVERSE_SUBTRACT=32779;k.GL_ALPHA_FUNCTION_SRC=768;k.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_COLOR=769;k.GL_ALPHA_FUNCTION_SRC_ALPHA=770;k.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA=771;k.GL_ALPHA_FUNCTION_DST_ALPHA=772;k.GL_ALPHA_FUNCTION_ONE_MINUS_DST_ALPHA=773;k.GL_ALPHA_FUNCTION_DST_COLOR=774;k.GL_ALPHA_FUNCTION_ONE_MINUS_DST_COLOR=775;k.GL_ALPHA_FUNCTION_SRC_ALPHA_SATURATED=776;k.GL_ALPHA_FUNCTION_CONSTANT_COLOR=32769;k.GL_ALPHA_FUNCTION_ONE_MINUS_CONSTANT_COLOR=32770;k.GL_ALPHA_FUNCTION_CONSTANT_ALPHA=32771;k.GL_ALPHA_FUNCTION_ONE_MINUS_CONSTANT_ALPHA=32772;k.GL_ALPHA_FUNCTION_SRC1_COLOR=35065;k.GL_ALPHA_FUNCTION_ONE_MINUS_SRC1_COLOR=35066;k.GL_ALPHA_FUNCTION_SRC1_ALPHA=34185;k.GL_ALPHA_FUNCTION_ONE_MINUS_SRC1_ALPHA=35067;k.SnippetUrl="https://snippet.babylonjs.com";k.FOGMODE_NONE=0;k.FOGMODE_EXP=1;k.FOGMODE_EXP2=2;k.FOGMODE_LINEAR=3;k.BYTE=5120;k.UNSIGNED_BYTE=5121;k.SHORT=5122;k.UNSIGNED_SHORT=5123;k.INT=5124;k.UNSIGNED_INT=5125;k.FLOAT=5126;k.PositionKind="position";k.NormalKind="normal";k.TangentKind="tangent";k.UVKind="uv";k.UV2Kind="uv2";k.UV3Kind="uv3";k.UV4Kind="uv4";k.UV5Kind="uv5";k.UV6Kind="uv6";k.ColorKind="color";k.ColorInstanceKind="instanceColor";k.MatricesIndicesKind="matricesIndices";k.MatricesWeightsKind="matricesWeights";k.MatricesIndicesExtraKind="matricesIndicesExtra";k.MatricesWeightsExtraKind="matricesWeightsExtra";k.ANIMATIONTYPE_FLOAT=0;k.ANIMATIONTYPE_VECTOR3=1;k.ANIMATIONTYPE_QUATERNION=2;k.ANIMATIONTYPE_MATRIX=3;k.ANIMATIONTYPE_COLOR3=4;k.ANIMATIONTYPE_COLOR4=7;k.ANIMATIONTYPE_VECTOR2=5;k.ANIMATIONTYPE_SIZE=6;k.ShadowMinZ=0;k.ShadowMaxZ=1e4;k.OUTLINELAYER_SAMPLING_TRIDIRECTIONAL=0;k.OUTLINELAYER_SAMPLING_OCTADIRECTIONAL=1});var Q7e,hX=C(()=>{Q7e=[{regex:new RegExp("^/nodes/\\d+/extensions/")}]});function Wf(n,e,t,i){let r=nt(n,e);return i?r[t][i]:r[t]}function nt(n,e,t){var i,r,s;return(s=(r=n._data)==null?void 0:r[(i=t==null?void 0:t.fillMode)!=null?i:k.MATERIAL_TriangleFillMode])==null?void 0:s.babylonMaterial}function en(n,e){return{offset:{componentsCount:2,type:"Vector2",get:(t,i,r)=>{let s=Wf(t,r,n,e);return new Ne(s==null?void 0:s.uOffset,s==null?void 0:s.vOffset)},getTarget:nt,set:(t,i,r,s)=>{let a=Wf(i,s,n,e);a.uOffset=t.x,a.vOffset=t.y},getPropertyName:[()=>`${n}${e?"."+e:""}.uOffset`,()=>`${n}${e?"."+e:""}.vOffset`]},rotation:{type:"number",get:(t,i,r)=>{var s;return(s=Wf(t,r,n,e))==null?void 0:s.wAng},getTarget:nt,set:(t,i,r,s)=>Wf(i,s,n,e).wAng=t,getPropertyName:[()=>`${n}${e?"."+e:""}.wAng`]},scale:{componentsCount:2,type:"Vector2",get:(t,i,r)=>{let s=Wf(t,r,n,e);return new Ne(s==null?void 0:s.uScale,s==null?void 0:s.vScale)},getTarget:nt,set:(t,i,r,s)=>{let a=Wf(i,s,n,e);a.uScale=t.x,a.vScale=t.y},getPropertyName:[()=>`${n}${e?"."+e:""}.uScale`,()=>`${n}${e?"."+e:""}.vScale`]}}}function xg(n){let e=n.split("/").map(i=>i.replace(/{}/g,"__array__")),t=dX;for(let i of e)i&&(t=t[i]);if(t&&t.type&&t.get)return t}function Rg(n,e){let t=n.split("/").map(r=>r.replace(/{}/g,"__array__")),i=dX;for(let r of t)r&&(i=i[r]);i&&i.type&&i.get&&(i.interpolation=e)}var gle,vle,Ele,Sle,Tle,Ale,dX,cD=C(()=>{Ge();lD();zt();ny();hX();gle={length:{type:"number",get:n=>n.length,getTarget:n=>n.map(e=>e._babylonTransformNode),getPropertyName:[()=>"length"]},__array__:{__target__:!0,translation:{type:"Vector3",get:n=>{var e;return(e=n._babylonTransformNode)==null?void 0:e.position},set:(n,e)=>{var t;return(t=e._babylonTransformNode)==null?void 0:t.position.copyFrom(n)},getTarget:n=>n._babylonTransformNode,getPropertyName:[()=>"position"]},rotation:{type:"Quaternion",get:n=>{var e;return(e=n._babylonTransformNode)==null?void 0:e.rotationQuaternion},set:(n,e)=>{var t,i;return(i=(t=e._babylonTransformNode)==null?void 0:t.rotationQuaternion)==null?void 0:i.copyFrom(n)},getTarget:n=>n._babylonTransformNode,getPropertyName:[()=>"rotationQuaternion"]},scale:{type:"Vector3",get:n=>{var e;return(e=n._babylonTransformNode)==null?void 0:e.scaling},set:(n,e)=>{var t;return(t=e._babylonTransformNode)==null?void 0:t.scaling.copyFrom(n)},getTarget:n=>n._babylonTransformNode,getPropertyName:[()=>"scaling"]},weights:{length:{type:"number",get:n=>n._numMorphTargets,getTarget:n=>n._babylonTransformNode,getPropertyName:[()=>"influence"]},__array__:{__target__:!0,type:"number",get:(n,e)=>{var t,i;return e!==void 0?(i=(t=n._primitiveBabylonMeshes)==null?void 0:t[0].morphTargetManager)==null?void 0:i.getTarget(e).influence:void 0},getTarget:n=>n._babylonTransformNode,getPropertyName:[()=>"influence"]},type:"number[]",get:(n,e)=>[0],getTarget:n=>n._babylonTransformNode,getPropertyName:[()=>"influence"]},matrix:{type:"Matrix",get:n=>{var e,t,i;return K.Compose((e=n._babylonTransformNode)==null?void 0:e.scaling,(t=n._babylonTransformNode)==null?void 0:t.rotationQuaternion,(i=n._babylonTransformNode)==null?void 0:i.position)},getTarget:n=>n._babylonTransformNode,isReadOnly:!0},globalMatrix:{type:"Matrix",get:n=>{var r,s,a,o,l,c,f;let e=K.Identity(),t=n.parent;for(;t&&t.parent;)t=t.parent;let i=((r=n._babylonTransformNode)==null?void 0:r.position._isDirty)||((a=(s=n._babylonTransformNode)==null?void 0:s.rotationQuaternion)==null?void 0:a._isDirty)||((o=n._babylonTransformNode)==null?void 0:o.scaling._isDirty);if(t){let h=(l=t._babylonTransformNode)==null?void 0:l.computeWorldMatrix(!0).invert();h&&((f=(c=n._babylonTransformNode)==null?void 0:c.computeWorldMatrix(i))==null||f.multiplyToRef(h,e))}else n._babylonTransformNode&&e.copyFrom(n._babylonTransformNode.computeWorldMatrix(i));return e},getTarget:n=>n._babylonTransformNode,isReadOnly:!0},extensions:{EXT_lights_ies:{multiplier:{type:"number",get:n=>{var e,t;return(t=(e=n._babylonTransformNode)==null?void 0:e.getChildren(i=>i instanceof Nr,!0)[0])==null?void 0:t.intensity},getTarget:n=>{var e;return(e=n._babylonTransformNode)==null?void 0:e.getChildren(t=>t instanceof Nr,!0)[0]},set:(n,e)=>{if(e._babylonTransformNode){let t=e._babylonTransformNode.getChildren(i=>i instanceof Nr,!0)[0];t&&(t.intensity=n)}}},color:{type:"Color3",get:n=>{var e,t;return(t=(e=n._babylonTransformNode)==null?void 0:e.getChildren(i=>i instanceof Nr,!0)[0])==null?void 0:t.diffuse},getTarget:n=>{var e;return(e=n._babylonTransformNode)==null?void 0:e.getChildren(t=>t instanceof Nr,!0)[0]},set:(n,e)=>{if(e._babylonTransformNode){let t=e._babylonTransformNode.getChildren(i=>i instanceof Nr,!0)[0];t&&(t.diffuse=n)}}}},KHR_node_visibility:{visible:{type:"boolean",get:n=>n._primitiveBabylonMeshes?n._primitiveBabylonMeshes[0].isVisible:!1,getTarget:()=>{},set:(n,e)=>{e._primitiveBabylonMeshes&&e._primitiveBabylonMeshes.forEach(t=>t.isVisible=n)}}}}}},vle={length:{type:"number",get:n=>n.length,getTarget:n=>n.map(e=>e._babylonAnimationGroup),getPropertyName:[()=>"length"]},__array__:{}},Ele={length:{type:"number",get:n=>n.length,getTarget:n=>n.map(e=>{var t;return(t=e.primitives[0]._instanceData)==null?void 0:t.babylonSourceMesh}),getPropertyName:[()=>"length"]},__array__:{}},Sle={__array__:{__target__:!0,orthographic:{xmag:{componentsCount:2,type:"Vector2",get:n=>{var e,t,i,r;return new Ne((t=(e=n._babylonCamera)==null?void 0:e.orthoLeft)!=null?t:0,(r=(i=n._babylonCamera)==null?void 0:i.orthoRight)!=null?r:0)},set:(n,e)=>{e._babylonCamera&&(e._babylonCamera.orthoLeft=n.x,e._babylonCamera.orthoRight=n.y)},getTarget:n=>n,getPropertyName:[()=>"orthoLeft",()=>"orthoRight"]},ymag:{componentsCount:2,type:"Vector2",get:n=>{var e,t,i,r;return new Ne((t=(e=n._babylonCamera)==null?void 0:e.orthoBottom)!=null?t:0,(r=(i=n._babylonCamera)==null?void 0:i.orthoTop)!=null?r:0)},set:(n,e)=>{e._babylonCamera&&(e._babylonCamera.orthoBottom=n.x,e._babylonCamera.orthoTop=n.y)},getTarget:n=>n,getPropertyName:[()=>"orthoBottom",()=>"orthoTop"]},zfar:{type:"number",get:n=>{var e;return(e=n._babylonCamera)==null?void 0:e.maxZ},set:(n,e)=>{e._babylonCamera&&(e._babylonCamera.maxZ=n)},getTarget:n=>n,getPropertyName:[()=>"maxZ"]},znear:{type:"number",get:n=>{var e;return(e=n._babylonCamera)==null?void 0:e.minZ},set:(n,e)=>{e._babylonCamera&&(e._babylonCamera.minZ=n)},getTarget:n=>n,getPropertyName:[()=>"minZ"]}},perspective:{aspectRatio:{type:"number",get:n=>{var e;return(e=n._babylonCamera)==null?void 0:e.getEngine().getAspectRatio(n._babylonCamera)},getTarget:n=>n,getPropertyName:[()=>"aspectRatio"],isReadOnly:!0},yfov:{type:"number",get:n=>{var e;return(e=n._babylonCamera)==null?void 0:e.fov},set:(n,e)=>{e._babylonCamera&&(e._babylonCamera.fov=n)},getTarget:n=>n,getPropertyName:[()=>"fov"]},zfar:{type:"number",get:n=>{var e;return(e=n._babylonCamera)==null?void 0:e.maxZ},set:(n,e)=>{e._babylonCamera&&(e._babylonCamera.maxZ=n)},getTarget:n=>n,getPropertyName:[()=>"maxZ"]},znear:{type:"number",get:n=>{var e;return(e=n._babylonCamera)==null?void 0:e.minZ},set:(n,e)=>{e._babylonCamera&&(e._babylonCamera.minZ=n)},getTarget:n=>n,getPropertyName:[()=>"minZ"]}}}},Tle={__array__:{__target__:!0,emissiveFactor:{type:"Color3",get:(n,e,t)=>nt(n,e,t).emissiveColor,set:(n,e,t,i)=>nt(e,t,i).emissiveColor.copyFrom(n),getTarget:(n,e,t)=>nt(n,e,t),getPropertyName:[()=>"emissiveColor"]},emissiveTexture:{extensions:{KHR_texture_transform:en("emissiveTexture")}},normalTexture:{scale:{type:"number",get:(n,e,t)=>{var i;return(i=Wf(n,t,"bumpTexture"))==null?void 0:i.level},set:(n,e,t,i)=>{let r=Wf(e,i,"bumpTexture");r&&(r.level=n)},getTarget:(n,e,t)=>nt(n,e,t),getPropertyName:[()=>"level"]},extensions:{KHR_texture_transform:en("bumpTexture")}},occlusionTexture:{strength:{type:"number",get:(n,e,t)=>nt(n,e,t).ambientTextureStrength,set:(n,e,t,i)=>{let r=nt(e,t,i);r&&(r.ambientTextureStrength=n)},getTarget:(n,e,t)=>nt(n,e,t),getPropertyName:[()=>"ambientTextureStrength"]},extensions:{KHR_texture_transform:en("ambientTexture")}},pbrMetallicRoughness:{baseColorFactor:{type:"Color4",get:(n,e,t)=>{let i=nt(n,e,t);return lt.FromColor3(i.albedoColor,i.alpha)},set:(n,e,t,i)=>{let r=nt(e,t,i);r.albedoColor.set(n.r,n.g,n.b),r.alpha=n.a},getTarget:(n,e,t)=>nt(n,e,t),getPropertyName:[()=>"albedoColor",()=>"alpha"]},baseColorTexture:{extensions:{KHR_texture_transform:en("albedoTexture")}},metallicFactor:{type:"number",get:(n,e,t)=>nt(n,e,t).metallic,set:(n,e,t,i)=>{let r=nt(e,t,i);r&&(r.metallic=n)},getTarget:(n,e,t)=>nt(n,e,t),getPropertyName:[()=>"metallic"]},roughnessFactor:{type:"number",get:(n,e,t)=>nt(n,e,t).roughness,set:(n,e,t,i)=>{let r=nt(e,t,i);r&&(r.roughness=n)},getTarget:(n,e,t)=>nt(n,e,t),getPropertyName:[()=>"roughness"]},metallicRoughnessTexture:{extensions:{KHR_texture_transform:en("metallicTexture")}}},extensions:{KHR_materials_anisotropy:{anisotropyStrength:{type:"number",get:(n,e,t)=>nt(n,e,t).anisotropy.intensity,set:(n,e,t,i)=>{nt(e,t,i).anisotropy.intensity=n},getTarget:(n,e,t)=>nt(n,e,t),getPropertyName:[()=>"anisotropy.intensity"]},anisotropyRotation:{type:"number",get:(n,e,t)=>nt(n,e,t).anisotropy.angle,set:(n,e,t,i)=>{nt(e,t,i).anisotropy.angle=n},getTarget:(n,e,t)=>nt(n,e,t),getPropertyName:[()=>"anisotropy.angle"]},anisotropyTexture:{extensions:{KHR_texture_transform:en("anisotropy","texture")}}},KHR_materials_clearcoat:{clearcoatFactor:{type:"number",get:(n,e,t)=>nt(n,e,t).clearCoat.intensity,set:(n,e,t,i)=>{nt(e,t,i).clearCoat.intensity=n},getTarget:(n,e,t)=>nt(n,e,t),getPropertyName:[()=>"clearCoat.intensity"]},clearcoatRoughnessFactor:{type:"number",get:(n,e,t)=>nt(n,e,t).clearCoat.roughness,set:(n,e,t,i)=>{nt(e,t,i).clearCoat.roughness=n},getTarget:(n,e,t)=>nt(n,e,t),getPropertyName:[()=>"clearCoat.roughness"]},clearcoatTexture:{extensions:{KHR_texture_transform:en("clearCoat","texture")}},clearcoatNormalTexture:{scale:{type:"number",get:(n,e,t)=>{var i;return(i=nt(n,e,t).clearCoat.bumpTexture)==null?void 0:i.level},getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).clearCoat.bumpTexture.level=n},extensions:{KHR_texture_transform:en("clearCoat","bumpTexture")}},clearcoatRoughnessTexture:{extensions:{KHR_texture_transform:en("clearCoat","textureRoughness")}}},KHR_materials_dispersion:{dispersion:{type:"number",get:(n,e,t)=>nt(n,e,t).subSurface.dispersion,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).subSurface.dispersion=n}},KHR_materials_emissive_strength:{emissiveStrength:{type:"number",get:(n,e,t)=>nt(n,e,t).emissiveIntensity,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).emissiveIntensity=n}},KHR_materials_ior:{ior:{type:"number",get:(n,e,t)=>nt(n,e,t).indexOfRefraction,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).indexOfRefraction=n}},KHR_materials_iridescence:{iridescenceFactor:{type:"number",get:(n,e,t)=>nt(n,e,t).iridescence.intensity,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).iridescence.intensity=n},iridescenceIor:{type:"number",get:(n,e,t)=>nt(n,e,t).iridescence.indexOfRefraction,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).iridescence.indexOfRefraction=n},iridescenceTexture:{extensions:{KHR_texture_transform:en("iridescence","texture")}},iridescenceThicknessMaximum:{type:"number",get:(n,e,t)=>nt(n,e,t).iridescence.maximumThickness,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).iridescence.maximumThickness=n},iridescenceThicknessMinimum:{type:"number",get:(n,e,t)=>nt(n,e,t).iridescence.minimumThickness,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).iridescence.minimumThickness=n},iridescenceThicknessTexture:{extensions:{KHR_texture_transform:en("iridescence","thicknessTexture")}}},KHR_materials_sheen:{sheenColorFactor:{type:"Color3",get:(n,e,t)=>nt(n,e,t).sheen.color,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).sheen.color.copyFrom(n)},sheenColorTexture:{extensions:{KHR_texture_transform:en("sheen","texture")}},sheenRoughnessFactor:{type:"number",get:(n,e,t)=>nt(n,e,t).sheen.intensity,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).sheen.intensity=n},sheenRoughnessTexture:{extensions:{KHR_texture_transform:en("sheen","thicknessTexture")}}},KHR_materials_specular:{specularFactor:{type:"number",get:(n,e,t)=>nt(n,e,t).metallicF0Factor,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).metallicF0Factor=n,getPropertyName:[()=>"metallicF0Factor"]},specularColorFactor:{type:"Color3",get:(n,e,t)=>nt(n,e,t).metallicReflectanceColor,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).metallicReflectanceColor.copyFrom(n),getPropertyName:[()=>"metallicReflectanceColor"]},specularTexture:{extensions:{KHR_texture_transform:en("metallicReflectanceTexture")}},specularColorTexture:{extensions:{KHR_texture_transform:en("reflectanceTexture")}}},KHR_materials_transmission:{transmissionFactor:{type:"number",get:(n,e,t)=>nt(n,e,t).subSurface.refractionIntensity,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).subSurface.refractionIntensity=n,getPropertyName:[()=>"subSurface.refractionIntensity"]},transmissionTexture:{extensions:{KHR_texture_transform:en("subSurface","refractionIntensityTexture")}}},KHR_materials_diffuse_transmission:{diffuseTransmissionFactor:{type:"number",get:(n,e,t)=>nt(n,e,t).subSurface.translucencyIntensity,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).subSurface.translucencyIntensity=n},diffuseTransmissionTexture:{extensions:{KHR_texture_transform:en("subSurface","translucencyIntensityTexture")}},diffuseTransmissionColorFactor:{type:"Color3",get:(n,e,t)=>nt(n,e,t).subSurface.translucencyColor,getTarget:nt,set:(n,e,t,i)=>{var r;return n&&((r=nt(e,t,i).subSurface.translucencyColor)==null?void 0:r.copyFrom(n))}},diffuseTransmissionColorTexture:{extensions:{KHR_texture_transform:en("subSurface","translucencyColorTexture")}}},KHR_materials_volume:{attenuationColor:{type:"Color3",get:(n,e,t)=>nt(n,e,t).subSurface.tintColor,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).subSurface.tintColor.copyFrom(n)},attenuationDistance:{type:"number",get:(n,e,t)=>nt(n,e,t).subSurface.tintColorAtDistance,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).subSurface.tintColorAtDistance=n},thicknessFactor:{type:"number",get:(n,e,t)=>nt(n,e,t).subSurface.maximumThickness,getTarget:nt,set:(n,e,t,i)=>nt(e,t,i).subSurface.maximumThickness=n},thicknessTexture:{extensions:{KHR_texture_transform:en("subSurface","thicknessTexture")}}}}}},Ale={KHR_lights_punctual:{lights:{length:{type:"number",get:n=>n.length,getTarget:n=>n.map(e=>e._babylonLight),getPropertyName:[n=>"length"]},__array__:{__target__:!0,color:{type:"Color3",get:n=>{var e;return(e=n._babylonLight)==null?void 0:e.diffuse},set:(n,e)=>{var t;return(t=e._babylonLight)==null?void 0:t.diffuse.copyFrom(n)},getTarget:n=>n._babylonLight,getPropertyName:[n=>"diffuse"]},intensity:{type:"number",get:n=>{var e;return(e=n._babylonLight)==null?void 0:e.intensity},set:(n,e)=>e._babylonLight?e._babylonLight.intensity=n:void 0,getTarget:n=>n._babylonLight,getPropertyName:[n=>"intensity"]},range:{type:"number",get:n=>{var e;return(e=n._babylonLight)==null?void 0:e.range},set:(n,e)=>e._babylonLight?e._babylonLight.range=n:void 0,getTarget:n=>n._babylonLight,getPropertyName:[n=>"range"]},spot:{innerConeAngle:{type:"number",get:n=>{var e;return(e=n._babylonLight)==null?void 0:e.innerAngle},set:(n,e)=>e._babylonLight?e._babylonLight.innerAngle=n:void 0,getTarget:n=>n._babylonLight,getPropertyName:[n=>"innerConeAngle"]},outerConeAngle:{type:"number",get:n=>{var e;return(e=n._babylonLight)==null?void 0:e.angle},set:(n,e)=>e._babylonLight?e._babylonLight.angle=n:void 0,getTarget:n=>n._babylonLight,getPropertyName:[n=>"outerConeAngle"]}}}}},EXT_lights_area:{lights:{length:{type:"number",get:n=>n.length,getTarget:n=>n.map(e=>e._babylonLight),getPropertyName:[n=>"length"]},__array__:{__target__:!0,color:{type:"Color3",get:n=>{var e;return(e=n._babylonLight)==null?void 0:e.diffuse},set:(n,e)=>{var t;return(t=e._babylonLight)==null?void 0:t.diffuse.copyFrom(n)},getTarget:n=>n._babylonLight,getPropertyName:[n=>"diffuse"]},intensity:{type:"number",get:n=>{var e;return(e=n._babylonLight)==null?void 0:e.intensity},set:(n,e)=>e._babylonLight?e._babylonLight.intensity=n:void 0,getTarget:n=>n._babylonLight,getPropertyName:[n=>"intensity"]},size:{type:"number",get:n=>{var e;return(e=n._babylonLight)==null?void 0:e.height},set:(n,e)=>e._babylonLight?e._babylonLight.height=n:void 0,getTarget:n=>n._babylonLight,getPropertyName:[n=>"size"]},rect:{aspect:{type:"number",get:n=>{var e,t;return((e=n._babylonLight)==null?void 0:e.width)/((t=n._babylonLight)==null?void 0:t.height)},set:(n,e)=>e._babylonLight?e._babylonLight.width=n*e._babylonLight.height:void 0,getTarget:n=>n._babylonLight,getPropertyName:[n=>"aspect"]}}}}},EXT_lights_ies:{lights:{length:{type:"number",get:n=>n.length,getTarget:n=>n.map(e=>e._babylonLight),getPropertyName:[n=>"length"]}}},EXT_lights_image_based:{lights:{length:{type:"number",get:n=>n.length,getTarget:n=>n.map(e=>e._babylonTexture),getPropertyName:[n=>"length"]},__array__:{__target__:!0,intensity:{type:"number",get:n=>{var e;return(e=n._babylonTexture)==null?void 0:e.level},set:(n,e)=>{e._babylonTexture&&(e._babylonTexture.level=n)},getTarget:n=>n._babylonTexture},rotation:{type:"Quaternion",get:n=>{var e;return n._babylonTexture&&ze.FromRotationMatrix((e=n._babylonTexture)==null?void 0:e.getReflectionTextureMatrix())},set:(n,e)=>{var t;e._babylonTexture&&((t=e._babylonTexture.getScene())!=null&&t.useRightHandedSystem||(n=ze.Inverse(n)),K.FromQuaternionToRef(n,e._babylonTexture.getReflectionTextureMatrix()))},getTarget:n=>n._babylonTexture}}}}};dX={cameras:Sle,nodes:gle,materials:Tle,extensions:Ale,animations:vle,meshes:Ele}});function fD(...n){let e=t=>!!t&&typeof t=="object";return n.reduce((t,i)=>{let r=Object.keys(i);for(let s of r){let a=t[s],o=i[s];Array.isArray(a)&&Array.isArray(o)?t[s]=a.concat(...o):e(a)&&e(o)?t[s]=fD(a,o):t[s]=o}return t},{})}var uX=C(()=>{});var bg,mX=C(()=>{bg=class{constructor(e){this._factory=e}get value(){return this._factory&&(this._value=this._factory(),this._factory=void 0),this._value}}});var Wx,pX=C(()=>{Ge();Ef();Wx=class{get currentFrame(){return this._currentFrame}get weight(){return this._weight}get currentValue(){return this._currentValue}get targetPath(){return this._targetPath}get target(){return this._currentActiveTarget}get isAdditive(){return this._host&&this._host.isAdditive}constructor(e,t,i,r){if(this._events=new Array,this._currentFrame=0,this._originalValue=new Array,this._originalBlendValue=null,this._offsetsCache={},this._highLimitsCache={},this._stopped=!1,this._blendingFactor=0,this._currentValue=null,this._currentActiveTarget=null,this._directTarget=null,this._targetPath="",this._weight=1,this._absoluteFrameOffset=0,this._previousElapsedTime=0,this._yoyoDirection=1,this._previousAbsoluteFrame=0,this._targetIsArray=!1,this._coreRuntimeAnimation=null,this._animation=t,this._target=e,this._scene=i,this._host=r,this._activeTargets=[],t._runtimeAnimations.push(this),this._animationState={key:0,repeatCount:0,loopMode:this._getCorrectLoopMode()},this._animation.dataType===ft.ANIMATIONTYPE_MATRIX&&(this._animationState.workValue=K.Zero()),this._keys=this._animation.getKeys(),this._minFrame=this._keys[0].frame,this._maxFrame=this._keys[this._keys.length-1].frame,this._minFrame!==0){let a={frame:0,value:this._keys[0].value};this._keys.splice(0,0,a)}if(this._target instanceof Array){let a=0;for(let o of this._target)this._preparePath(o,a),this._getOriginalValues(a),a++;this._targetIsArray=!0}else this._preparePath(this._target),this._getOriginalValues(),this._targetIsArray=!1,this._directTarget=this._activeTargets[0];let s=t.getEvents();if(s&&s.length>0)for(let a of s)this._events.push(a._clone());this._enableBlending=e&&e.animationPropertiesOverride?e.animationPropertiesOverride.enableBlending:this._animation.enableBlending}_preparePath(e,t=0){let i=this._animation.targetPropertyPath;if(i.length>1){let r=e;for(let s=0;s-1&&this._animation.runtimeAnimations.splice(e,1)}setValue(e,t){if(this._targetIsArray){for(let i=0;ii[i.length-1].frame&&(e=i[i.length-1].frame);let r=this._events;if(r.length)for(let a=0;athis._maxFrame)&&(t=this._minFrame),(ithis._maxFrame)&&(i=this._maxFrame),d=i-t;let m,_=e*(o.framePerSecond*s)/1e3+this._absoluteFrameOffset,p=0,g=!1,v=r&&this._animationState.loopMode===ft.ANIMATIONLOOPMODE_YOYO;if(v){let x=(_-t)/d,A=Math.sin(x*Math.PI);_=Math.abs(A)*d+t;let E=A>=0?1:-1;this._yoyoDirection!==E&&(g=!0),this._yoyoDirection=E}if(this._previousElapsedTime=e,this._previousAbsoluteFrame=_,!r&&i>=t&&(_>=d&&s>0||_<=0&&s<0))c=!1,p=o.evaluate(i);else if(!r&&t>=i&&(_<=d&&s<0||_>=0&&s>0))c=!1,p=o.evaluate(t);else if(this._animationState.loopMode!==ft.ANIMATIONLOOPMODE_CYCLE){let x=i.toString()+t.toString();if(!this._offsetsCache[x]){this._animationState.repeatCount=0,this._animationState.loopMode=ft.ANIMATIONLOOPMODE_CYCLE;let A=o._interpolate(t,this._animationState),S=o._interpolate(i,this._animationState);switch(this._animationState.loopMode=this._getCorrectLoopMode(),o.dataType){case ft.ANIMATIONTYPE_FLOAT:this._offsetsCache[x]=S-A;break;case ft.ANIMATIONTYPE_QUATERNION:this._offsetsCache[x]=S.subtract(A);break;case ft.ANIMATIONTYPE_VECTOR3:this._offsetsCache[x]=S.subtract(A);break;case ft.ANIMATIONTYPE_VECTOR2:this._offsetsCache[x]=S.subtract(A);break;case ft.ANIMATIONTYPE_SIZE:this._offsetsCache[x]=S.subtract(A);break;case ft.ANIMATIONTYPE_COLOR3:this._offsetsCache[x]=S.subtract(A);break;default:break}this._highLimitsCache[x]=S}p=this._highLimitsCache[x],m=this._offsetsCache[x]}if(m===void 0)switch(o.dataType){case ft.ANIMATIONTYPE_FLOAT:m=0;break;case ft.ANIMATIONTYPE_QUATERNION:m=ZC;break;case ft.ANIMATIONTYPE_VECTOR3:m=QC;break;case ft.ANIMATIONTYPE_VECTOR2:m=$C;break;case ft.ANIMATIONTYPE_SIZE:m=JC;break;case ft.ANIMATIONTYPE_COLOR3:m=ey;break;case ft.ANIMATIONTYPE_COLOR4:m=ty;break}if(this._host&&this._host.syncRoot){let x=this._host.syncRoot,A=(x.masterFrame-x.fromFrame)/(x.toFrame-x.fromFrame);f=t+d*A}else _>0&&t>i||_<0&&t0&&this.currentFrame>f||s<0&&this.currentFrame0?0:o.getKeys().length-1}this._currentFrame=f,this._animationState.repeatCount=d===0?0:_/d>>0,this._animationState.highLimitValue=p,this._animationState.offsetValue=m}let u=o._interpolate(f,this._animationState);if(this.setValue(u,a),h.length){for(let m=0;m=0&&f>=h[m].frame&&h[m].frame>=t||d<0&&f<=h[m].frame&&h[m].frame<=t){let _=h[m];_.isDone||(_.onlyOnce&&(h.splice(m,1),m--),_.isDone=!0,_.action(f))}}return c||(this._stopped=!0),c}}});function xle(n){if(n.totalWeight===0&&n.totalAdditiveWeight===0)return n.originalValue;let e=1,t=Q.Vector3[0],i=Q.Vector3[1],r=Q.Quaternion[0],s=0,a=n.animations[0],o=n.originalValue,l,c=!1;if(n.totalWeight<1)l=1-n.totalWeight,o.decompose(i,r,t);else{if(s=1,e=n.totalWeight,l=a.weight/e,l==1)if(n.totalAdditiveWeight)c=!0;else return a.currentValue;a.currentValue.decompose(i,r,t)}if(!c){i.scaleInPlace(l),t.scaleInPlace(l),r.scaleInPlace(l);for(let h=s;h0?l:-l,r),u.scaleAndAddToRef(l,t)}r.normalize()}for(let h=0;h0)r.copyFrom(i);else if(n.animations.length===1){if(ze.SlerpToRef(i,t.currentValue,Math.min(1,n.totalWeight),r),n.totalAdditiveWeight===0)return r}else if(n.animations.length>1){let s=1,a,o;if(n.totalWeight<1){let c=1-n.totalWeight;a=[],o=[],a.push(i),o.push(c)}else{if(n.animations.length===2&&(ze.SlerpToRef(n.animations[0].currentValue,n.animations[1].currentValue,n.animations[1].weight/n.totalWeight,e),n.totalAdditiveWeight===0))return e;a=[],o=[],s=n.totalWeight}for(let c=0;c=l&&v.frame<=c&&(s?(A=v.value.clone(),m?(x=A.getTranslation(),A.setTranslation(x.scaleInPlace(_))):p&&a?(x=A.getTranslation(),A.setTranslation(x.multiplyInPlace(a))):A=v.value):A=v.value,g.push({frame:v.frame+r,value:A}));return this.animations[0].createRange(i,l+r,c+r),!0}),n&&(n.prototype._animate=function(t){if(!this.animationsEnabled)return;let i=dr.Now;if(!this._animationTimeLast){if(this._pendingData.length>0)return;this._animationTimeLast=i}this.deltaTime=t!==void 0?t:this.useConstantAnimationDeltaTime?16:(i-this._animationTimeLast)*this.animationTimeScale,this._animationTimeLast=i;let r=this._activeAnimatables;if(r.length===0)return;this._animationTime+=this.deltaTime;let s=this._animationTime;for(let a=0;at.playOrder-i.playOrder)},n.prototype.beginWeightedAnimation=function(t,i,r,s=1,a,o=1,l,c,f,h,d=!1){let u=this.beginAnimation(t,i,r,a,o,l,c,!1,f,h,d);return u.weight=s,u},n.prototype.beginAnimation=function(t,i,r,s,a=1,o,l,c=!0,f,h,d=!1){if(a<0){let m=i;i=r,r=m,a=-a}i>r&&(a=-a),c&&this.stopAnimation(t,void 0,f),l||(l=new Ig(this,t,i,r,s,a,o,void 0,h,d));let u=f?f(t):!0;if(t.animations&&u&&l.appendAnimations(t,t.animations),t.getAnimatables){let m=t.getAnimatables();for(let _=0;_s&&(o=-o),new Ig(this,t,r,s,a,o,l,i,c,f)},n.prototype.beginDirectHierarchyAnimation=function(t,i,r,s,a,o,l,c,f,h=!1){let d=t.getDescendants(i),u=[];u.push(this.beginDirectAnimation(t,r,s,a,o,l,c,f,h));for(let m of d)u.push(this.beginDirectAnimation(m,r,s,a,o,l,c,f,h));return u},n.prototype.getAnimatableByTarget=function(t){for(let i=0;i{hi();pX();Ef();Pl();Ge();Ig=class n{get syncRoot(){return this._syncRoot}get masterFrame(){return this._runtimeAnimations.length===0?0:this._runtimeAnimations[0].currentFrame}get weight(){return this._weight}set weight(e){if(e===-1){this._weight=-1;return}this._weight=Math.min(Math.max(e,0),1)}get speedRatio(){return this._speedRatio}set speedRatio(e){for(let t=0;t-1&&(this._scene._activeAnimatables.splice(t,1),this._scene._activeAnimatables.push(this))}return this}getAnimations(){return this._runtimeAnimations}appendAnimations(e,t){for(let i=0;i{this.onAnimationLoopObservable.notifyObservers(this),this.onAnimationLoop&&this.onAnimationLoop()},this._runtimeAnimations.push(s)}}getAnimationByTargetProperty(e){let t=this._runtimeAnimations;for(let i=0;i-1){let a=this._runtimeAnimations;for(let o=a.length-1;o>=0;o--){let l=a[o];e&&l.animation.name!=e||t&&!t(l.target)||(l.dispose(),a.splice(o,1))}a.length==0&&(i||this._scene._activeAnimatables.splice(s,1),r||this._raiseOnAnimationEnd())}}else{let s=this._scene._activeAnimatables.indexOf(this);if(s>-1){i||this._scene._activeAnimatables.splice(s,1);let a=this._runtimeAnimations;for(let o=0;o{this.onAnimationEndObservable.add(()=>{e(this)},void 0,void 0,this,!0)})}_animate(e){if(this._paused)return this.animationStarted=!1,this._pausedDelay===null&&(this._pausedDelay=e),!0;if(this._localDelayOffset===null?(this._localDelayOffset=e,this._pausedDelay=null):this._pausedDelay!==null&&(this._localDelayOffset+=e-this._pausedDelay,this._pausedDelay=null),this._manualJumpDelay!==null&&(this._localDelayOffset+=this.speedRatio<0?-this._manualJumpDelay:this._manualJumpDelay,this._manualJumpDelay=null,this._frameToSyncFromJump=null),this._goToFrame=null,!n.ProcessPausedAnimatables&&this._weight===0&&this._previousWeight===0)return!0;this._previousWeight=this._weight;let t=!1,i=this._runtimeAnimations,r;for(r=0;r{Vx();hD();ps();hD();_X(Qt,La)});var vX={};$e(vX,{AnimationGroup:()=>dD,TargetedAnimation:()=>Hx});var Hx,dD,EX=C(()=>{Ef();hi();Pi();sf();gX();HT();Hx=class{getClassName(){return"TargetedAnimation"}constructor(e){this.parent=e,this.uniqueId=Yl.UniqueId}serialize(){let e={};return e.animation=this.animation.serialize(),e.targetId=this.target.id,e.targetUniqueId=this.target.uniqueId,e}},dD=class n{get mask(){return this._mask}set mask(e){this._mask!==e&&(this._mask=e,this.syncWithMask(!0))}syncWithMask(e=!1){if(!this.mask&&!e){this._numActiveAnimatables=this._targetedAnimations.length;return}this._numActiveAnimatables=0;for(let t=0;t0)){for(let t=0;ta&&(a=l.to);let o=new n(e[0].name+"_merged",e[0]._scene,r);for(let l of e){i&&l.normalize(s,a);for(let c of l.targetedAnimations)o.addTargetedAnimation(c.animation,c.target);t&&l.dispose()}return o}getScene(){return this._scene}constructor(e,t=null,i=-1,r=0){this.name=e,this._targetedAnimations=new Array,this._animatables=new Array,this._from=Number.MAX_VALUE,this._to=-Number.MAX_VALUE,this._speedRatio=1,this._loopAnimation=!1,this._isAdditive=!1,this._weight=-1,this._playOrder=0,this._enableBlending=null,this._blendingSpeed=null,this._numActiveAnimatables=0,this._shouldStart=!0,this._parentContainer=null,this.onAnimationEndObservable=new te,this.onAnimationLoopObservable=new te,this.onAnimationGroupLoopObservable=new te,this.onAnimationGroupEndObservable=new te,this.onAnimationGroupPauseObservable=new te,this.onAnimationGroupPlayObservable=new te,this.metadata=null,this._mask=null,this._animationLoopFlags=[],this._scene=t||Le.LastCreatedScene,this._weight=i,this._playOrder=r,this.uniqueId=this._scene.getUniqueId(),this._scene.addAnimationGroup(this)}addTargetedAnimation(e,t){let i=new Hx(this);i.animation=e,i.target=t;let r=e.getKeys();return this._from>r[0].frame&&(this._from=r[0].frame),this._to-1;t--)this._targetedAnimations[t].animation===e&&this._targetedAnimations.splice(t,1)}normalize(e=null,t=null){e==null&&(e=this._from),t==null&&(t=this._to);for(let i=0;ie){let l={frame:e,value:a.value,inTangent:a.inTangent,outTangent:a.outTangent,interpolation:a.interpolation};s.splice(0,0,l)}if(o.frame{this.onAnimationLoopObservable.notifyObservers(t),!this._animationLoopFlags[i]&&(this._animationLoopFlags[i]=!0,this._animationLoopCount++,this._animationLoopCount===this._numActiveAnimatables&&(this.onAnimationGroupLoopObservable.notifyObservers(this),this._animationLoopCount=0,this._animationLoopFlags.length=0))}}start(e=!1,t=1,i,r,s){if(this._isStarted||this._targetedAnimations.length===0)return this;this._loopAnimation=e,this._shouldStart=!1,this._animationLoopCount=0,this._animationLoopFlags.length=0;for(let a=0;a{this.onAnimationEndObservable.notifyObservers(o),this._checkAnimationGroupEnded(l)},this._processLoop(l,o,a),this._animatables.push(l)}return this.syncWithMask(),this._scene.sortActiveAnimatables(),this._speedRatio=t,this._isStarted=!0,this._isPaused=!1,this.onAnimationGroupPlayObservable.notifyObservers(this),this}pause(){if(!this._isStarted)return this;this._isPaused=!0;for(let e=0;e0?this._scene._activeAnimatables[i++]=s:e&&this._checkAnimationGroupEnded(s,e)}return this._scene._activeAnimatables.length=i,this._isStarted=!1,this}setWeightForAllAnimatables(e){for(let t=0;t-1&&this._parentContainer.animationGroups.splice(e,1),this._parentContainer=null}this.onAnimationEndObservable.clear(),this.onAnimationGroupEndObservable.clear(),this.onAnimationGroupPauseObservable.clear(),this.onAnimationGroupPlayObservable.clear(),this.onAnimationLoopObservable.clear(),this.onAnimationGroupLoopObservable.clear()}_checkAnimationGroupEnded(e,t=!1){let i=this._animatables.indexOf(e);i>-1&&this._animatables.splice(i,1),this._animatables.length===this._targetedAnimations.length-this._numActiveAnimatables&&(this._isStarted=!1,t||this.onAnimationGroupEndObservable.notifyObservers(this),this._animatables.length=0)}clone(e,t,i=!1,r=!1){let s=new n(e||this.name,this._scene,this._weight,this._playOrder);s._from=this.from,s._to=this.to,s._speedRatio=this.speedRatio,s._loopAnimation=this.loopAnimation,s._isAdditive=this.isAdditive,s._enableBlending=this.enableBlending,s._blendingSpeed=this.blendingSpeed,s.metadata=this.metadata,s.mask=this.mask;for(let a of this._targetedAnimations)s.addTargetedAnimation(i?a.animation.clone(r):a.animation,t?t(a.target):a.target);return s}serialize(){let e={};e.name=this.name,e.from=this.from,e.to=this.to,e.speedRatio=this.speedRatio,e.loopAnimation=this.loopAnimation,e.isAdditive=this.isAdditive,e.weight=this.weight,e.playOrder=this.playOrder,e.enableBlending=this.enableBlending,e.blendingSpeed=this.blendingSpeed,e.targetedAnimations=[];for(let t=0;t_[0].frame&&(c=_[0].frame),f<_[_.length-1].frame&&(f=_[_.length-1].frame)}o._from=c,o._to=f}return o}static ClipKeys(e,t,i,r,s){let a=e.clone(r||e.name);return n.ClipKeysInPlace(a,t,i,s)}static ClipKeysInPlace(e,t,i,r){return n.ClipInPlace(e,t,i,r,!1)}static ClipFrames(e,t,i,r,s){let a=e.clone(r||e.name);return n.ClipFramesInPlace(a,t,i,s)}static ClipFramesInPlace(e,t,i,r){return n.ClipInPlace(e,t,i,r,!0)}static ClipInPlace(e,t,i,r,s=!1){let a=Number.MAX_VALUE,o=-Number.MAX_VALUE,l=e.targetedAnimations;for(let c=0;c=t&&_<=i||s&&p.frame>=t&&p.frame<=i){let g={frame:p.frame,value:p.value.clone?p.value.clone():p.value,inTangent:p.inTangent,outTangent:p.outTangent,interpolation:p.interpolation,lockedTangent:p.lockedTangent};m===Number.MAX_VALUE&&(m=g.frame),g.frame-=m,u.push(g)}}if(u.length===0){l.splice(c,1),c--;continue}a>u[0].frame&&(a=u[0].frame),oMg,TransformNodeAnimationPropertyInfo:()=>km,WeightAnimationPropertyInfo:()=>zx,getQuaternion:()=>SX,getVector3:()=>uD,getWeights:()=>TX});function uD(n,e,t,i){return b.FromArray(e,t).scaleInPlace(i)}function SX(n,e,t,i){return ze.FromArray(e,t).scaleInPlace(i)}function TX(n,e,t,i){let r=new Array(n._numMorphTargets);for(let s=0;s{Ef();Ge();cD();Mg=class{constructor(e,t,i,r){this.type=e,this.name=t,this.getValue=i,this.getStride=r}_buildAnimation(e,t,i){let r=new ft(e,this.name,t,this.type);return r.setKeys(i,!0),r}},km=class extends Mg{buildAnimations(e,t,i,r){let s=[];return s.push({babylonAnimatable:e._babylonTransformNode,babylonAnimation:this._buildAnimation(t,i,r)}),s}},zx=class extends Mg{buildAnimations(e,t,i,r){let s=[];if(e._numMorphTargets)for(let a=0;a({frame:l.frame,inTangent:l.inTangent?l.inTangent[a]:void 0,value:l.value[a],outTangent:l.outTangent?l.outTangent[a]:void 0,interpolation:l.interpolation})),!0),e._primitiveBabylonMeshes){for(let l of e._primitiveBabylonMeshes)if(l.morphTargetManager){let c=l.morphTargetManager.getTarget(a),f=o.clone();c.animations.push(f),s.push({babylonAnimatable:c,babylonAnimation:f})}}}return s}};Rg("/nodes/{}/translation",[new km(ft.ANIMATIONTYPE_VECTOR3,"position",uD,()=>3)]);Rg("/nodes/{}/rotation",[new km(ft.ANIMATIONTYPE_QUATERNION,"rotationQuaternion",SX,()=>4)]);Rg("/nodes/{}/scale",[new km(ft.ANIMATIONTYPE_VECTOR3,"scaling",uD,()=>3)]);Rg("/nodes/{}/weights",[new zx(ft.ANIMATIONTYPE_FLOAT,"influence",TX,n=>n._numMorphTargets)])});var Ile,Mle,Cle,yle,mD,Xx,pD,RX,Yx=C(()=>{Gr();tC();Ile="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAgAElEQVR42u29yY5tWXIlZnbuiSaTbZFUkZRKrCKhElASQA0EoQABgn6hJvoXzfUP+gP9hWb6Bg00IgRoQJaKqUxmZmTEe8/v0uB2u7Fm2T7HIyIrnz88uPvt3f2a2WrMbOvf/u3PvvzP/sUf/N6//i8vf/lv/3v5H//d//Sb//Uq/5u8yf8hV/m/5Cp/L1f5hVzlG7nKJ7mKyJuIXN/hPwqXI/g++zq6rPI5u8z+WqfLre+zy7PrVv9L8brsMiGvk8XLmM/sdfHXal4e3ad6GXPdyu2ij8u/+uv/5cuf/OSLfdtEfvUr+dnf/d0X//t3H/7bf/hP//N/928h/0Yg/4VA/kogfyGQP5Wr/IFAvhbIlwK5CGQTPP+9z5uPeePJSW+yo2+s/GtN30Rnv1E+f5zxof9R/lSXv/nr//mrr3+i+5dfyX7ZZQP07Tffys//8R/l/9TtX7790T/7r/8G8pdy+/8XAvnnAvkzgfwzgfyxQP5AIL8vkJ8K5KsmMVzu1U7p5PA5AXxOAJ8TwPf7sX/51ZeXfcemqnp9w/W77/S7X/6T/vzf/7383RWCX3/z05/9i3/13/0PX//eX/2FyP8tIv+PiPy9iPy/IvIzEfm5iPxCRH4lIt/c/393//9BRD6KyKf7f488fP74/PH544dJAF9cLl98IZfLBZtuqterXr/7Dt9982v95S9+Lv+gF/3i7Spv/8lf/vnf/vGf/dF/JfKnIvLnIvLvReQ/NEngn0TklyLy6/v/34jIt00iGJOBlxAsdvv54/PH5493SQCXy9t2ueh2ueimKorrFbjq9eNH+fDtb+TXv/ol/vHyhX4Fxfbx7euPf/Lnf/PfiPyeiPyhiPxxkwB+fk8AvxzQgJcIrGTwFsiAEXH4/PH54/PHUgLY7whgu2C7bLqpQgHB2xvePn6SDx8+6G9+84384vKF/IPu8iVU9Y/+7C/+jWxffiHytYj8VER+X0T+oEEBvxqQwCMJeIngo5EI3goIwVMIPn98/vj8ESaAbbtu2ybbvl8u2ybbdtluSECA65u8ffqIDx8+6G++/VZ/efkV/sO261dQXP7wT/7kX8vl8qXIFyLylbySwe/dE0CLAr65B/9vGn0gQwRMMqgmhM/J4fPH548eAezbZd/lsm3YtssNAYiqiogAAkCvb5/k46cP8u2HD/rrb7+R/2/b9Wu9yJe//8d/9Ney6S5yEZFdRL68/38khG/uKOCnAwoYkcCoEXwkEgGDDq7CeQfyOTl8/vhd1QCum26ybZtu2yabbrKpQvXue1yvuF6v+vbpTT5+/CDffviAX1++1V9sO77WXb/66R/+4V/dgkbllQi+aBLBV/dE8LWRALwkYCWCNyMZXElkwLTMeMkga/P4/PH547ccAVwuctkvdxSw6bbdtYDbTfSZBN7e8PHTR/3u4wf55vKd/nL7DX6mu3791U9//5+/gkNFZGuSgZUQvnKowKgLWLTAQgRtEniTuEfwaELw0MJvf3LQzynud+53uG+X6y3gN9kul+2y6XVT1U27JCDAFVc8ksAn/e7jR/nN5YP+avtWfq6Xy9f7Vz/9w1dgRYngiyYhfNkkgzYBWHTg44AEMmqQUYQKOmDaiCIa8TmsfmzB+DnZDQjgcpGLbti2y3bZHjRAdRMVvb/dcYU8kcDbPQlsH/CrbddfbF98+RPZfvLFnAQeieCRDC5DMvju/vmD4JkEvjRQgKULeGggowdHkAHTYxihg89vu88I5UeGAPSOAFTlrgPopiqbKPSmCKreUoAAkCcSePukHz590m8vH+WbD9/JP335k6/+tA86KxFchv8jMvhiogE4JQm8XhfKqOAqx5qRPyeGzx8/cgSwbXcUoLJtim27C4Oi93+4v6VxQwKAvl2v+Hj9pB8+fZJvt4/yzfbF9lPdv/wJnsE2BogmyeCRED40tGFvksIXiSbgiYSRRpDNDZ6BDI6ghM+J4fPHeyKAO+zX7cb9t4tedMMNAQju5V+f1uAtBSiu1zsduMrHy5t8ePsk3376KN98sX/xE5FPAnm7/782o0DiUINXMkCXCB7/P94/e87AWUmARQWVvgMuKej9t1RLBp+Tw+ePgwngsutFFdu26WXbbl+rSvdfbnqAiuA23QcBgCugV1zl7e1NPm5v+LC96XfbJ/1W9y++fgXjA3bDYXV+MuhRwSPwL3JLMFYC+HS/LU8HYrGwIhwyNOF12SvgM4SgztdifP85MXz+KGsA2C6X7aJ6bXSAOwrY5OYIqGy3d5uq4P5GhABXuV6veLvRAf10fZMPb2/y3b7vX7+g+9v98/WOBq7GG7RNAlYy+Dgkhhb+Xxp0sE8IAC4SGAP/TbgVJK/PoJPBnAiwPKxsXfbbnRg+i3s/JAK4Q/4b9NfLtomBAqCickMBjy7BuywAUVyv8na94tMjCVzf9KNcLl/0SeA6oAEYb1i9g+FtSALb/bKL8/+t+wxXFMyswqiHoK4ToIgKqslgpg1qUC0QoYbvJZg/B/q5v4szHmPX7YEAsD0CX25OwEUVm9xag1+agKg+nxQArnKjAtDr9U0+Xd/k4/UqH7bL5YsewrcBBiMJZPRAp6TwQgWfjM9vgRbgUYGL8AvLWH2gqhesCokeUmCSwPsnhs8fP2YNYMO2XeSmAWxy2VQaXeDmDIhApf33rD4PTUCuV+DtCn27XuXT5ir8VmCJ2G5BpBM8/r/dEcJb8/0lEQMtJHA5TAlqNuLRhJChhEpSqFabH3di+G1AGj+W1/dyAR4IYJNNnuLf6+tWC9CHHiAtFhAIFLjK2/Uqn65X+SS67aK+3QeTDoy/IG2ogQ7fb/dAtz5vBgrYGqrwNtCHsVfgIvwK07OTQBURVNCBFpKCOjqCHn5L/67TgTN+fpySAC56nwSUi256kXsSuFGAVyLoUIDo8/Pz7fdoErr/v17lk162HbgHvFpIYDfoAJJfW4sGPjkU4VNAF8ZEcLmLhdc7kljdY1y1Dq9yLiI4IiRqcLujb138KIPn80ejATwRwIbtBvn1cqv+2J78/5EI5N4cJA8qIPcmwRsKAHDF9WYP6mV7VmrgLuTpxYTcMEW0LAmoQxFsuvAI8tv/a/C5fV2ZMMiKg++FCM7RDPRu8ebWY7VG6VJi+Bzk35MI2LsAckMAgwvQ0gC5DQjd3ABg2HQLAPpEAlZ1Bu7VV7MGHDFRAbo3VKsTbAY9sPWC/uvx86gBbDK3D1eEQS8pbAeSgSwmhepnJb6uBv/o/PzHLzxWA/X7TH77De5j6AGQi6o0CUGfCOD2X7cXAlCFQABtEsGLDtxuOyQB2UTQBKZe5GUPXgkUYCUAbZJRhBDeuq8xBf+bgwbehDm+BFQi2IJksOocvA8ysIMfxluVcRsY/eB3JzH8GFDAXQO48X/dcIf9jyDHptIigDsFkEe066tBSETQUYF7ElDdYEBytN4+rk9UcBPfrKaZqFHWcw3i4J8/X4ev2//bSXqAhwTay6OEIPLD2Ipt8OtAGzxkwLw9WVFRjTc/qC6H3+YK/b1oAA0KuOizHfieCLaHHiAb5NYTIC9EMEbZrVEQt1xwhVy1UfBh8PUOquMizwaap3tQXfY5B//tea/NZdfhsvbz+PURQTDSGWB87VX/7WSd4KxjUqrIgE0IUkoKGnhIvwvawpGf6eECXJ7tv4qbA7DJgwpsKthEmmYgfaAAffYF3HLxo0vwNjJ0SwRWMG4db4eh1gPNm18vQ+us/0eGmxDemu/fnM/X4evq/8342ksGHgLY5LyT/zg0wM8lcMjgGFXwqIOVFJBQw99eCvF9oZL9Mfl3QwAvIXDsBRC9R+fz8x0FPBLB0xJEpwUobrfAkARgIAF41h3wQgP6QAmX5E/7eI43IxGwwf/moIkRyWRJQIPgt9CA9b39nzt4bYUWjAlCjWDPgv8IEjgLJfzuaAsrv9VdVG4OwOXW/fdoA35qAdL0BDwvf6AAUVHd8LIEu94A3K+Q+2YxaB84MOH62P//qoo38fCRDERE2zf0JfmDa+MieElAjcDPKz+mRKCOtdgGtXaBjgNJ4H2owSpNeAW/rRH4CaHSpMwnBYYycjgSJwfie9CR6mPu20Uv8kABF206AvXlBMiIBPSlB9wjBW1fwEuSb94296VCqgMaGCt/G1BbExi3IG+r3a3J6P48Gv/J0YmEYoiGY7V/SxwFCwGoE/xa0AJ0CEiV9QPCJb1OJ5F1VTjEY2/MO9AEJvj1BJTQpqLfTlGwjABuzT962e4IoKnyrdh3+/6mzDVJ4PHOxj0JqGKoy20+wBMN6D1gLWi9NQHfVP5MEEPzjGYy8BMAOnTAJgEr8HUIejRo5xrA5xkR5AngmiSHs+zDDAmMgWzTg55GSJEmHE8IvWPAoYTfhWak/Wn/bQ0CGLSAjv83SUEfKp5q24LXuQICpzrjrgWoza8xVE00CQCORdhMJuTUT/rjuls0gO4Iby8BIEgK6gS7BsGuTtDrScH/fR68biUHNVGBnxjeNyHEvQe/ve3LZQqgG3rof6cEclsNflG9J4KtaQ8WHcVBHS1BtHE4QP9OBMS98mpbKTeDW7dJwRsnHpMBTFJpV4I+b0kY/NqInVFSyBLANbnMSgBM8F+Fqfxq/h657/Up+GaBnwV9hRqc9bZ/vA6vu+T9E8KPJWns94UfTeCj2QXwCHS9dNL8Xf3Ho/rfewSeFODGDV69AU0y6NFAE1DP3qK++rdB7/1HRxf86gT376zOr99T/h/ioBiXWQkgQgVeIrCC/WomhDmQK+hASI2ARQZKooHMLdCJwGEBBXC3+uERwg+VOHZ9ioAt9H80AI06wGgJ3nQA3BoCut6AhxYwgcPOFnxuFnrphk+NIKIGrWPQtgz3b0i7Y6D5rs1GKqTop0nQX52vmQC4BkjA+r4a7Kx9WLENGeegkhSETBCrNXIMdi/444Rw1n6E96ry7OPuj8UfLxtQ78NA2iSBbg7gIiIbdDLsb5agPhLC3RkYKv8NDbS2YGsatNRAG2oQwf9ZIOydgy1MAzBkAw8UwEEIDzSAqdPQ6za0PkeJAMH3Z0wXniUSZoHvBXU2mcjQgv56TedIKglCpIoQfgwCIjOytd8WgN0bfxoR8Fn9Gx0Aj5Zgq0lIZbsH/ibSJoFnS+C98g9ooHEELI3gliy25yONIiE6pb0NfBlyNEYyENoodkKwgl6I6s8kARgJ4ZoEfuYWHLEJa0LhSBXm7kImGeSfVdoJ1DO2G7WXsehAptupSOoyrCSF904k+6vt98X/ZcM98Hsd4JYIXhQAIg3/f9AAUYhsLQKAtkHVBnzjCKhOoYl2ym+iBtvzDzQ2DLXJ4PUmbJHAVnBQX4jkxfvHhNDqAdHXGQJgv0aSDGItgOseHIU+K9hXnIJzkoGlEKzNHagTdJ6VWEUH4iCKH4fd2AwDPaYBm4Wgng4gQ9V/CoGiuNmD04AQtNGMGzSAAQ2I2pzfogY9LRh7BrbOh4+D30sAencljFu2CUFrwY8UAWRfWwGvVOVfbx2uIILM0pwDv082dUTw8hYs8L+uIWiHGpWgClnAa1lMPJogovvvbePPs/q3Xr++kgCsfgB5oQF9WYKPJqEn6G+OE3i5AqouF59FQOmahQC8rlPLj38kg1c2f30vw+XaoIX24/pMGIgSBoZqoH3wo0sIIGlA9PWcCPrAtpPB8eBf6x1o6cHra+2+tpIFP4PgBfxZtZUJfo4qxELT948D9ucK8Mt9+ccjIQw6QJcEbrD/1g340ATuDgDkFfx6twSf1f9xvuBECYxq/7ythQQGm+5JDx6Brw4CkMGT3wgscCUoQ4sU2t6DR2ciBjTgtcpenQoZVX9NuL4Owc+dVaDursYVkVALX+shjSBKBuvCYDUZjE5BdNkxdHAUBexyHwB6NP7Iyw7sxUDViwge1t+mz8B/LAvVx/c3PeBBCToB8IUGOgqA3iV4yUg6UAOxaUFHDx6CYS8SorMOue0CCJGAf5YfRhoAI+A1CvwxqNkAY5yAIx2EQmkFfeWOXi+nEdSQQA0ZHMEItiagJArQxDXIrj8nCfQi4HZPAttrIahso9oPQ/2/JwV5JQU8zw+7I4D7/sBn4EO6rjw0FR+i3Z9fHtahzsFvJgM0X+tmVH5vaYiNDGAigewAz+gyNLThnjCURQFR1b9d3lZvnVqmj9mEPDKIUIC4KCCjBXywS4N+otp/Hk3QVthOkwEKlV9PQwXjT7s/zwF4Qf9toAAzFdjuaEB6S7D1//U5FIQu2MevO0rQQH8ZmoXE6B/IkgE60XCjVoq8gt2iCG0S8L5GdxkM1cGsfsCMArSCAnrr7dzAZxCEEpepvB8tqHJ/q+bmJGGts/AcAXFOMMeTwC7Pw0B6CtCtA2vWgonqBQJFSwH0JQK29OB2kvgj2HHXAoyeAIsCQO0kMNECAhFMqCBf8mElAkyBbX1tJQP2RJ/ha0gpAfS9l+/5n00CkrQpq0MZbOdAuxmMvHswog62jZj7BnYQe19b14kxNq2D/ehX/p68HEcF+x3yP7z/V/A/q/5DA3i5A/dzA5pdgbKp3v3/wQF4Bb70WkCTHGRAA6+KL0bFl6FJaFw0ImZwm6igSwbbwPn9RMBWf3sN2JgA/BVh/Rg0kQBgePf6HglAHLFQwqQQOwDjbdVxNZjR4iM6Qa3WxwvNxh0JFb3g/WzFQQS8b/ttKcDWoABtUMAd8j9hf0MB2uDXhzX4CHj03L9DBU3Qjz0C0l4mLSLQPicOOwZoVCB6P6dA7nDbGkVuxcNr8PU2JQO4wX5trEqmccZaHU4q8oCDFOpzAnOwqyMIMktNNNAHouDGxO37DgArQZzlmp/14W1QlqHTMaIIx7SCx0+5yza7AKJ3IXBrNAHVDcMZAU/BT/vgv/ULPOA+XiLggAREDF2g0ci6xNDRglegd7P7TWWH5oJfayliEg7bScQRBVgI4Ookg/F6rvpLWP29swREqA3CaG8/FpKqS8DTAV4TiBqIqtxfzaQRLys5I0XEFIFrPbZRQb+16Fgi2LvJv8EFUPW1gGfQv1T/F/d/HBnccP7rAwnIIyHI4ArgWeGbU4eHy6Tx/EeTZIb5bo/BsMBjmjBE08f/RB0PHYBd9eVRAGY7cHRwiBf8WeCPHY1bgBTa9xKTELzEkQX9CPtl0gJiqsAmCT7I8xbjivh3JGFI+D2nBcSJQJ8agDX+O9iBL7UfG4bzAkcaICrbtYHz1ycSmGmAjJfL3CMgT3tQpmrfB7gxSzC1DnvdhQMieG47u75+kTouKNkM8c/+vq/Q7ZYjO/hhVvRq8F/9gGfhP8aqE9EIdR6LTwJ1h0BItyDqB8iFwuNqASscRnYioxOg9ApvnYA35f8e9Ohbfe8J4rknoFkO0lmA2gmAG0YK0DkB4ieEjiLoMD8wBzom27ANZkzIoU8EMHk/uo1mzeVoEoRWKn8L/62EYAX/lsB7D/LXg74uAMr9oGivJ0CNJCGD6i9DhZdQF+gtOp4S+NODRzsDVbhdgv4BqTMNyIL9SCKwL9/FGPp5oQKxIf8A/UX6r231H7YIqLML0Ae2GtrADOvRQH5b/MPE9dt9BGLNG8jVTAQvIaK5TtvvvWQgDvyXIClUA78S9Nfg7VtIBlO7cbsEYkQDMot+ygQ7QwmOawTHnAM2XUSnJvPIYRYMmYPS+sv3J+cfP3d04JYIXsF/EwMbBKB9Q9AY+BiSwFj9mzrSXmcJhFPVHySTbgHJCPvRQ/z7G/SVUETsg0ZF+i3CRoCjhf7y1A9mOiDD7TwdwEoEXjLwAv+avLE2B7Jnb+OqDpBoAchoQJskxKnss0vu7Q2YhcDv4ySeLOg9GsCKiUIihP7yfW7zbTsBh0TQfN0iAWn9f72Z56/Ax9P7j5OAH/Qvv3/QxKfk0DgDuP+R3USg3bzBC7bO/QT9Eeh9QvDPG7glBQzJwK740lAFFgFk8P88CqDGAa223YckWYhr+c0BPdwetl2ocnsfzePAWcVnnAIp6gDVhDLyfV4nqFEDPxHsbWD3k4BDkN+pARqKMLYBPzYEvxp9xmCHQQdgWH/9EtH2TIFpu3AH/cdGydv1j0TQbRrq+D/mLcX3ZACZ15bF378CG0My6Kq/zoGOQwhASDFwFbxyNGBuSxbCEhQ/uEPe/6gAERWQObCVVfjPpQX+rexxYhYFxIkgpgX7Y/vPs+Pvxf9vwt8kAs7i32t3QCP+3SPaTwIytQXP38u0PESm+YER+o9B3vr8mETAUfDrEkPI80ck0FZ0dXh9U+HRbhey0cAc2H7A4y4egoD6y8JfkBiigLdFP8v2W00E8deT2IeAKujZ/QAVKpAtKI20gLWksHedfgPcb+0+NEHefd9vB9rayi8h7J91gBbaw20MsnWAF5xHkyDUCOoXp+yrOwwxcKj0aL6fFppaaKDv6OpHR5sgx5BAlK/+fYhuP1D196o8e7lFBaKqv5YIMnFQpd0FGVR35RJCnCDaABaXBtgbiSwtICMtalKC+1JQ6bx/PLcDPQL91QFodQNKpwOgF/9eqcBxBBqRcKAAVk+ArQOMx1RYGgB6naDhlK+uQQwJYx4meQbxtNnYQwMjt/d4f3M9ZE4UOld1LAh99fbfzOxiEkKFCkTJIUIMUeVnJ/9sDt8/e1NEJOi9oVHDGYhgnSLss9DX2IAqw1zALUncKcDr0FB5NP+0cBQNrEezDiyiADPkt9qGpwoPdL0AGPx/NOKeyf3b9WJNdfcFv6bKd2cLMJVfJ6Y3B6wB9WFUfWWEwKMfGiQL+3bz9XGQz2EHKhF41GCtZyDi/gUCsNhYoAr3UNJ58YidHKqnMb/6AB5J4N73/4L+t7mAkeeP3P+1LNSB/l0SkMEd8DcEuUlguEw6t2AU/PCE/q++Akw6QFf1u6SBrj1ZnnhG50AfkoGIdf7gJv1KcSfgzWWkQ9U33Z3tHXYASKJ9e/YhU90rvD+q9Ej69/wxYJVs506Eg/r3DkMDzEdDBRGgcZay49XihLA30P+l8N+hf1f57/0AoxbQbwYaan/rBMirE9Dk+sBzTkC8JNDEUlv5McB8PP19Y01Gayep+hC/2zvQ/2HGLAurowsNGlA1cnqGGzeH5weiYLZm7h3QQC4O2tXdhvMMk1ZS5ebpgI8eMrPvPGkwaxayk8Yc6PMOBPEdC1XZ+2UfbfOPtxLMQQAG9BcZFoF0gp/RKjxe7+oAw9T7ZPWhgedodgz0gf5KBtrtIZhQAZpAV1Bi36w6t98qVfH7hqGI318lLCjLCUFlxRHwqYEH9a2qb4XjWvDT7kBwfbZA5P0+PNuRuW1yf4yNQH3zzwv6b70QOJ0G9OT/dhoYRUGT15uQH/71MjQLtQlxfDuiCXrtM+SkA+icQdH6sU/xz7Ze7FlubV4TpoTQ2osdpaEjtqADmEU7OkBEFoLeC3IWFFeswJXKXzkboNL+wzcFHU8hTGKIboO7CLi1/P+5F+gydQhuvRbwEgxvtACmANikhLTbj0gCYk8KdlYgmj+4Ymaod7TwahwadICuX0Cm2fE5iNHPK0x/CDV66Kyg1MnqjNFBnhBoLQCgUULfaVe5nq/6EQWY67bXCszUb+7232fVPz51iGB12owK9peyP1T4raMFF/OEYJP792mgXYfZ04GHMAhBkCSmSj+dKqRPgVFGHbpLEGMiGFeQWfSgrY52VxaeDUPSNJI0P7NoisG729HHl78z6hxfs9rV3m4JjgM/lsui2qmThjCfDFSb+I9vwUqG5wwL55U7C+6ot8B+7N2o6r3q37T9trfpjgmTvv7PSQATLLeRAOZhIJHBQfDQQJPBdUwEbVW3+L08EcEE/9G4ANrCeWcnPKRHDupbNynMx5AA9IRYLmrc/YLSiD5EaEBS/s/TgnU9ILcH19n+CpHwegLejx7Mn/d25fdN+e9U/1vgb7bqf08MOtf8EXxaoh+GY8L6gDfhvs4i6HQ7seYI2sv1GchdMsBIG3xlvxcCRzdgCPTn+6q/TW00VE8Q9FaFv+R2VlOM1vm/hhjhDCdgNflVKME5B47I9xT8z0YgPAJ8myb/LqHy36j/Mwqw9AALxuO1JVjiuQAYLcFzIhiEPe05fk8tRjGw7yWQbsfuLAT2VqOId1osnr0F49VM8INACPHDoBz4B5mqqSnUgyh3ArjXxfQH5BbgUS8gP7aU+w0zHD9GGD0CGHf+P1p/DeivlhU4BbxR9a2kYFR58YaDZCUR2P0DMmgED2eg77puegy6PgDphEB0CwlG/i9d+/Hs34pBEQrBn0W51mqGnJAk3ACCHeiqkQ1XFQA5AlKH7Lk8yJKWY3/nym14h2C3JvxeMwD9ZVMz0BPMi1n1RbKl1cYhIVblF3G0ATsRiCMUvoK9//OgcwYMoe+ZKOLlC6/Xk50br9NFz9fanqA8UIYSpCwlBO4kHc4WLLBfBHVaKwKgLQjmP4Un61Vq+3s7Bsyi0WztmLjJwJwFeE0I2vD/1Q6MVwefxfUf32skCPbCnxQqf+QMPEUDHZ7vGeyj020JgkPXXwsldA7SYR1RE3h94NvNtugswcgxXEkIcBPCGZ1rmrgDC0A4K88nm2fn/eTnpQtWyZfybRoK8Dro4zYDIMGsf7saTBzvX0SMbkAD6o9CYbsfMK38cJKD9l2FJt9/VGs0h5Gib33pxMKWNsigFUh3G2un+/N1WUglI/EEx8fq27vUNnwsiOoKecL7kQS8VnWAGCFUgn6dBtQhv40CmIYggwK0uwDHRGAuBXVdfwzHUjZzATLMAoyJ4FmBhzaWBlrHld9CCWpPHRqofBqMReMGTJ78q9rDes1Tv7/0m0v0AFHXNR6P6g30SHivin7V1BOhh3iWPwvps/yE836L2XiwnUT8x2iHgfqhnwn667QHEE8oLQjEvtEW7GYBZDrDVkwNIO4G5GiBDf9fGoFM6n+vbEtzXwP6u9AduaWnGYSLAlVdl/AU+ikrSeEIKgwdaZ4AACAASURBVKj4/wtgHcHtdO2nWKcBkPfxcvnNQvsj2Me9f02r76T8q0IBn9OLKfz1HX8yVXQYGoAB/2UeBQ5/5kCL6+H/OGGoRnLSwdd3oH8r7KkGTbgIxEwVWvnF8KOpHnyzfF9Jod5Px+IF1h8owyitDw/XEgRb5bPqbt1uvn7qBIQ16vtS/u+DP3cR7CH0WWJgd5mTJKYgNzoGjQrfvu99NDBC+bnyW1x/qhTatv2OaMKgJWPvv5kwnMgxHYGFRtJW8VMl3uP+MgoqSZyWFKr7+KIDw1d6+IiOgZI4+d5iYL3imzbgyO+tph9t2oSBxOM3ugHtPoFZ1LM0hF4kXNEBssvVgPdjdXZWK7uKvyS3q1Xb1WQwtVDqSUggq+Vw3t56JA2cz7PXOwGNW1ecwxPhfe3QEUsDsFaAz8jg0nf+iZMAHNg/XSazDuC18Iq1HBRrOsAQ8NLB+16g614jmuSgs3bROxE55D+WDDQNA4ivdMJ9M1b309UqknaDU8ObV9/PwmMPATvTMAxpABLBzugUtV9bLdhNDQA+7B9tQJ06/7QNDHGSwtgZOCIA47InIoDdROQGtt0U1HI3GaoUnCnC/rzBMQJteN17+VaAzYNA7e+PFqHQUyXPUYB7iQYa5ZFjq1Zqpx8Uqu/XT7+6BWC1Xaj0GlBIwMoHu7UzcI/6/Acb8KIq+hzmGWmAYnADrIpvKP7TZeLaf0LAeQkGgebbq9FToI44p654F47tekKkI0L5PQNZPsDwPBpy/ni+wKMN76Vav4+2cFZFf8+JwAraMt0DFB7beA/u4Zz/a+RXx0M/ct4/jwaNAS8G17eSwmta0Fhx0VRxJkHMivso+onMXr+YwdWKbgioy1jp4x4AzIKg5lEA7wvHEYCRmdx11TAuT6lDLVl4KvXkAET9P4RT8H2u+lg9EPQIpw+/NpJ7RwE8HaDv/Mu4f3OdNkq/EfAiEiOANjEALvcWL9gfFV4NZbgbQc6qPky4Pm35QZxtH1f4j+P/jXuaYPcWwIEH/fmEPBoAO4m4LGxV3txOQqDU+dXgey+UwSzuqP++uImO/u/6ogCb7wTc1n61sL+vZi87rxnrNas+giTg6QLzaUCjIp6JfhwtGI7AjBBB9JjDY4ePYVR6ZPgN4owVv6Q2N5hhVHwNeYrM+w6dN6K1sMHZm/Ce7bHe3dzKr1xw1w4JrSQMZtgnoQHlr18fzunAszD4qurNUg/TDqzx/lfCaO6t4tACMUQ6P6htWjDPC1hCoZ8kpODzJ70MUR9AODcgwyqyPhmE+wfHYB/hvSqt6qeXUShhXH+d9SR8DzrDaZZdpSp/HxqLMQuATgDU/qDPRgOIeT8cvz/h/XC6BtE7ACLOWPE0KIS4UUjmZaJ2grBphiWgT41BUVWZfP3AnEIT6OrfoF122l2rMycBoU5i/OXoUZ4/aglsXwLzHNU++FVF3qikOj5HXm2PBitT1WuvJRAB+6O//W0/PY8vQH5IrAsMs/WuVmAdHBrQgrbOxJShXwRSsu08h8JMBpo0+aDTALwV4tbswgzHrftG/dJKIAQb5h9KCssWIMeto+GYqG12/HWGjx8kzqNJaa0noMWOr2KwW01AMwJoNvhMQda2/RKQP/3ecABM3g9uD6BY68Ntz9+nDOMb5iV+hIE+dP/Zs/wwJhJ9mgBnohBuStABUXjugF3hkXF9ZZJAjefKdHZCc389LoStKvIl7QIEb1d9RyciQgFDI9Cjyccc/23Aam7/PZJBhgDgin5CtQvbCzX8ip9YgIFtOAt+w0owp/hOiCWgEGbVHuYjRigPGR/YOnEoqPDoV5z5YqB3mRq2ox5ICmSSgAP1Ne+XV2NE+/vuFbCTRADxtS70VRBCjgBk2OyDUQiUgfl77b7DwaHm2rAZ7osRSOOUoHgKfNBSLI767+oDYrfwZvqChSpGfj3pFwZFsCJg2jeIQQBUiyI4WgD68ww4qO8khuWkkIuDrxWv2nv+UTBpJYiPd0KemTA8qqFiuUF1jWS3BoG6pADJq751JqBI0wvAVPyMQvjcX1zbELltKK+zBiXRFiRxG+b7q3M9xuLdzR8g0gCGNzSM5gNYfqGO9CBT8OHct6oB3KsSDBisUnwsFuISQaRHxDSv0vptt2oeLHMERfRn/FG/Cx01EpgIQG8LP+/i37PKw53xn6sYCM4/JwSRrCnIeB1ZkLsawDhaPKv/njU3wnZ/dBdGE8+YTHSG8+ofGgIjsC19YnwdM/KAnTSsqj6ig7uGgIPw3nYFzhhIIvriAxFP9CQd4HSlnzgxONIdrE7A8ZDPx9fjib8ifgegNIliRgdx95+E1T7+3nQVNNhEzDgGA3T2rEDLduwtPpuuouPcs8swwXFjdTaMKt+jA5gUAQPcf95KJQxYU0cYxEDvsBSmYuukp7AwnqniC9Afa5z8vboI68ImT0t26CvwBzSggkj447r9IojvCn7U92J/Hw0QSdwZKNNjxPCfSxRqnATkdwpOwh88oc4J8KTSm/wdbZjrc+4iFP8YO0/5JJDCfaijK5xVXevqfg6zGRrQf83chvX4aRfAE//6vv5+6490U4ADdO7QgM/5bcHP/n4OtCQhBEFeDWSvos8DPq8/IwzLzjpa8/U6MMSkBklDm8e0mn3QIY7XG1Om8wzN48y7HwhOK3P0/ZwUQHHv4psbdoVeb9VlAjChBCdtDDpOKTh9ZfcagOYq31RFjN4/gwBYzp8lAwYNwBELhZoxECeZxMlAzWGdCRV0fQWGHo8+8Kx+AAxnCIzowAxy9KvNepWfsfp4RR9kUrD88CPVTuXRybhqqTHcnxEGndsgub1Gdug8yz9fHt3Hpl57x/mfCOC29FOSQ7/noAZR5W3Ob24UMpuPYAYiQrQgk1gnFoUIKr4vKFpV15pHUJO3Y5rfH3UFHU4bGkU+NKJ9f2hJyOMxDBDpjAgwiYqvk5TqNl9EH2Arb6fA3yaA4cBtPWewhkEcIQJBlGzYp6zRmr1v+e3Fv27xpzvyI44NGDkCIi7CGNV9Dw0M8NtHC2vUwHINumCGNG8erxOwtQINsW88Tlwdoc+F85nI559ngEDpt2F/Uu3hiXYrkN/pBFS26hYDAkFgErMK67y9mGBA3L5ore5izf8b3n805MOq/t7XU4WHv1DUF/5gugCSOAIW/59uMwl6CHWAib8bvfxWl9/rBGEMTTwDfG+ezEYG4yk6FvRPuPwE+wvc39IRjENWM+/cm5b0W4Pf4WuKUnw/vD6eDbB1ETs5vl77Dhnm/51g6wPWwQAqxnivgQaeS3gy/u/1H4hpTPrIgHAN0mSgXUX13YP5PMIuQAfBr/f70cdeE+QoCX3i8nFMLcAjInBoAIYqt1LhC1WdtvmSab28AYffaeivCB+ohdYQgfUa/WS4ToMsNLHLc9nnvPZLwn1/EefPVf+U/xvnCVSEQEkEQEnEQJO7S7RvYDxNeNYKrG7DKMhtsQ8cMmhgPKKKj+F7CiHYFR5KIIPxOmg5IVAtu3ACQSPh7CzUQOgAej5CWEkIe3vgxz0ROGO//qYfz/dnLT+ZxDr4QW0eNCJBorCFOVC312Ec2TiY5Bk0cAaQmiA1VH1MOwDHQ0kHdEDDf+2UTWhS4Z8diQMicLx8MLBfverLcP/jQzF0P8EJj5+NGK9RCz755S6F/f1+X/gxeP+Wsedv+vF8/54aSPJYFjIQd624MDz/UDLQnr8HU3ztKHRf8Qeno1vyAQJBaLcMtTV3cvgP56COCqd/QP9xLgBkH4BxO13n4hNUDtACC6G1S3zqooZ6Ba4lp/zcAFb7iERKQwQcF39IFJjdXECGADw0IE4gg674pYAnk4HoHPx54tD5daO5vxrugSkMjgiiqc7TVKAT6AT8R4ckbHEQCYR/IZBxJgA+XZjsR7vaoRpIxWqeqfXuGC2CxwudicwePEB1kNkaZCuwyF0DuKv/4sz9mzP/Qxdg3BDkBTMC8Q+loD6UGBzx0Kz6eAX/KArOQTlPHFoI4vVtf4rNuLrca9edRn4xBP7k8w+9AgZCgBfEUZWfEs8iFNZ3UO7TqmkjCO/rWdgco/yIqHcQWaC2EGTzgz5y/iXQAvyx3riyxxV/JeBriaGB9OrTA5g9/eokM+37GszqfA/UZk9iW5UnCtBqBl3XoNN6Ag/+zy6A5evPAp+TIFDn15gQw9rjrOzFX0s2JBVAxa/nP1a6AsNWYGjPNGPLTQgBsNUFvOA3Ht9o/rGDN0tWOCcxJGp+f7++kkP7PxcGv1+GjkaLt/fawpwwerQxBJNW4b+PJsYEgiAYYdEAGIlDNaAbRkIgK3ut0jKByp+8yz23X6GttmBmjwDvChgiYLP5V/zhH6/110sGcKo5CkggCngxnIPoPja0j2B+1BRkiYJiviaLJqghDI63G2nAgAxMCuDdnoD0wIQm+urMB3VuAwbBrFGgGgnhAFqg9+ujKsLxB3qGCQNEEtPinIQlAj4WgIw7/iXc9V/x/yUWFs2KH504bAh4aYWf4TrTLGTy9YbftyLeVOWNfYNyt/ji29mQnqMAltU3ioTtbX343yv/1u0YPUBz6zB702tQucnX0gWaFh6DgPdmhXaapGotw0SFz1qDiTMdd8h45HfcqCPRUhA3+NmKz1l9teCPaMd4urGaewRitNBDdahR5c3AfQmDCFT9vmtQEwqAYXX4XI2n23Z9B/Yb1FL+LWox6wHGbZSo6FR1LzyG+3hriSZvWT6jfXhl2cmQZJDrAbuYAqAHo1GA/EOgD8eGcU7A8eDvH4fQBuAhBL/Zp/vamPTrRENDGLTV/7E1WEPLDlP/PwzU4YhusIMUgfIPAr6Dhv5R4y2r8ldFwiFoYHnmr8TAHbhRQSZOctH598ZYhqt6wP7q/ouqe77RJxvzFYaji/z4vna4v5cUMDXqDAJ5ytktqtBDckyjvJg04hl16LB0xFfyMfD77PZjErGQRRjYIfSvoAXntks0ok8MsUC4KARWnYPlJBeIgLeFrUgDOHYCag0/XNAbWgRwQuLAsaQwIhC1g7+jCNKuT38JfnYSyTi+QQEwwHeT4/dWHYxJPxfOj5oAnRQqgU3YgGZSOaDyK3n/qkDYBKptzR3oD6B4fyRKjp2AzSl80YR/3P+/1vBjX18Jbu+YsrMRgbqPP8zrDLTAaupphfeZtyPs9BPztpLSBZjowF3woYRwBwOWaqbev15b7X4RWsiqYiY6ZkFEIoUwUA2OrkeEQE8HYNyD/rl3m88jCGgO/nPW3xy8x4Q/HBcM1dYg5q8N+B/SBSYhtD0EY1PRGLDoKIBHF3yLz4H/gSYQJRETgqeB2d4vC8L2NVnQn4PoVJJAcP0inahAfdXVI8CFszjRagCTtRdV7Sr895NBpRKXIT64RMFw/iw5eChhEvmmyUIH+k+Qu3cLzOAN6ILlFvgWnx3YWFDz0f38ze9GlfP6UQ3ojEY0gtqRIEbA5/WgQFhsEuIeL75uTzvqHktAWfj/OD6sQXssROcGiRgFn0QVkld7OznMDT7CJKzhMIqxW9B+LCOQdH4uyxIcE49VTSeLj0wKjzcp2oDXQA8YoDEGBLMW0BJw+eAxXejPV/IXd59/tp5rVyYXDw5BlRetSpQAcvgfOwVM8ObzBq/AQ2wX4lwkQV3vNhYFfn2LFgaoDU1ogqsfqGkJYmrj9Tr22KQwBLzbLuzDeA9yzyJjVRfwegWq0H+FThDPA6ZhZwX2M2Kh4waovCzAWJTzD/qY00c+6PM8coz08VNqglzx54LfHuTJK7z2rwX35ABLg1DzsZ7Qv7l/f2yXDlbf4C/irg0MJ0aCuD0wP74MrxfdFlX7tq+vtRdCpvt599EG9Yz3V+P+Oj/n4zLruZHcJ7oMt/MNp9eD6HEeFb6/TMfbWo85Pb79HJo8t3371/PuIAZqMvjPC34nVV6ZB4hEuA7AzA5cfU0y2n6ux89D/35/n2/vWY5Bf0qwf3tPLISO1Tap9qzFB6eap/beqI94NCCbGwgqOItY3CGl446CaQ8i2Q9g0AvmgJOnBoAA0gu17tsKtKS7D4udgCYERy2QIceCX/P7mBW+g/7D9S6Mn50CS0eAoQPDcBjopIA5+EcxEjLweRjXq0UbLIjcBxsGx2IZvlf0ATjz/6qypAmY7bhrk4ahsIis6ccXKHdueAfUgk+RWPCLh42c6zEeKyJpRTdRAOqBbl/Wq/uT+q+Fx3FoTIuCzc6+hN8j4veGjuAnhSE5gKnco3A3XwYlq2sq+lmP4yEOpqEoG0M+mGDYuYT0pKCFHgLHKt3T7T9p8GcWH+n1UwGa8X6kQt2x4CeqPexegT6o/Z4Cr313PHdgrsS2ZReLfpKIf+IMFnmVmwxQ9AhithYT73+p2s+JIVfrjwiHnpAZrSsr9CMstQXP1+1+510N/q8E/YoekMN9OMFvi5LvkRDsy9rgFCOoPdpgaQIWBZjf5KCSQszZJ1ivTvLokpen6tsJAVND0NFqb6GUGg2Im4Dyx9Pn7/0dm4pADAslJzTv+dKNrAPQ0wyySm7bj1RQgbAXsRa4R+mBJzpaQmHLmy0BLoL+Nh2ZRca8uUc6P37k97n451fvTieAE8BdZ2ItqFEK6oOJIYPsiU4woo140Oh+H/UC++gatHYcOFT+2y3AYvD1rM/fpxdUcsAi70c0OxAEP45X/hymE9XeoC0zfYhbcqfbhs09HpwnKMDR6g0mmYyKth/UcLl9ITGQ8N1S6s+gA1HvQCc2pluPvN2Br8SyZyfyxPP/VhCi1L1HWX2CQCuAE8TIq/sBYdANZmTIwqq0sb0HIzhhugBeUpBZLFyA8y+EErsBUYDZHYN9QAAooQwOws+uQlhdESSSqk5Qsh8LSYI6LDS1AbmOvLlRBqQIeITvM36+TP63VfE5hFClCTr9zEyVFwS3STQBy66DMHB+PJWIrfgGnYBx2dTboPa2X49GaBVlePA7CFx4iaGi4ns0aLVjMGvtPTDtmO4XEE8E5Kb/8qYai+NHl60LgAICcUCoJPVeiYG6Pxw/X9VFNVbFn9FNPzXoIRDTyzcpREYB5Fm1EQQn3KRi9wKApR8Tz48SwxnV3qM0q7ZhpdKvr0zfY+gO4oQf+EGPFYW/Xf5hwWsUgxiBbShGoGIx+D2eH1h2EeR3UQMH4zMaUKr4033nzkSkfQADelFbLOQCalxdxvN8mInhPas9bxtGJw29Fx3Y8429MAS0fL33Oeo7qFZeiToCC3B/VSNYuU0fgDnkhxGgMFdxiYEY7MYel+OHPH30IMeVFK1C79l+QdXVpFqHlMAXEf3EYDyfkkGdNvJ8f3RAXU0jpgM7jMNA5yCrtfzOicKG/M9bgEkEjqqPPDEcDfqVwGZv6zcO9avDfOhf4OmLFd9OLBHHdxp51HvOBlnAoQksYjASA1xnIhPsapTCPjbsGB2YevpPpgM73EYeSYIftgPgte6CWesVBB9QEgfnWYMgoeC8ql69bWoRIqYHvSIv/u26bj/jdqZ9KSGk74JRo6QS9PuTiSHm6Z62kLUGH0UO4rwWrhtRETkR4iKRdI8giJ2D2nUCMjsA0TXiVDb98NAf/rCMlajA9wesWHZrAe1dlwRyVI2jx4KkyUHSx7YDe6YD4tOC6XW01puEdAJwaEJzf1uATHi6ZlSCpBQscsh6C1xRcWEG4bCFeKcAVhVlDu54JQIkTT21hptIT/Afk0kMcS9BKfjBJozcDXCrtgbWXxbMAw3INQIxtQJPAGwXmYaBbYh4SCsuKwLOAQ5awKskCMmRg8P3xwlBfbosQaDqyZqBkyQe1CLQACoTgN4qbyHsPwkTiF2pYaj6MAXBmUosQHnUEYCsBL3MW39SNKMJ5PfoBsT33DVJCEbFnBCMOkHfvj6Xq8uw+dgRIhGgAiUqf5QgKDFyhe8nnYrlqn9sG1GoAfirubygX4H+8IM1CmQrMFAJ5ExzKIp54nPoVU2Auh6eBShDlTV4u5c4HE/fVvjFrsII0Ik6QX+Iq68jB19ziLoKC27FYe0gC+j1RSS+BgB7AvAM3m8HLdy5fV60C8RMVuhD1ieQB32MCCq0QPJuvuw5IHF/geMKwOPdpmsxBwVEfGEOgeincJqNmuSFIPhPq/xM81CWIIi+gCFBqDX3QPYd2OcCRo6GZBoA3AM+00aesAOQ7/2Pe/vBCXoguD4OBD1WfPwClzcui12AuH+gC0gEwW72KfjBCQRBr05D0IQc7N8PzOCMehPWK384MPVDJQim7yDdoiRTItzzFV/ZOX9sYFetP0fsQzb6O7wOoFjxk89YoQXv+BmSN+yYHYO+BsDRAXHhuJXsEFbdIEGZQWUkNVNzGA9NZUVBIQL7jASR0AclE4Pb7JN3BO72mG92+o8UG3nybj+mASh0FsLKn9GPxDrEcS2Au35BzHO1BksriIJdpqWjKR1wlpR4fN977rZqI+XbYjYDgVDpcYQalOYKMiuQbB3G6Pu/HlMbi9a0EMkksXtjvvXTfgMKAEZRN/i/O7yD8Da2S2Bdh3ICWfp8yuMkYl5a4df4vVWt4UF0yyqEnaT6swYyWB8/j111Y1ERS9oB0SLMtBGDEBD1PEHwtdjUEAHnqmoHU4wCDAoAS+lHwtu9eQLUAgmxVvAuMB9cELMV3m8EUtcBYYI9nkNIEEJYrQeUHfnzzRyC39j8CgSkir/E0P2odnAmAqDnDIhqrtV9BDNS2POjv/0pwKr6z1h/PMz3uf9ykFYq9TtoAXSwpz0HljdvBCVAPY6t7osv6gFhMpkX13rcfXQMIpuTsfTibkfOPRAC2meLRipI4mDPwMD5x+v3+Ey+qEfACwoUEkKQSMZxYJDz9R68PyP43yvo2aYf881rNQbZgRU/jp80QnW/hdXqJxMvCFxXQSNHpE8QiF4XI+wFfQcw7VL2Md7RRajsKgh2D+6SLAKPF356+/7yXYBTUgFy/38StUjFHweD+iiHh8/LV/i/TSvGk4L5x7F6AsIKbgb4C0YjgdGRIToGUx7cgS3JKP8pRcgak95BJGQbjaJdBYQ1qHYnYHL8F45QgHx2gLMQ2cDxBD/4SeR0LSDi5XzPQNjM4ySE/HGG6g+ugltLNSARn281BPtNO72eJLjdX4ITSEgpQvJYFEUg24f1qAYQNQdxx6Q/RcB85j9f+03zf2QV33IDPHegNgPABTfqFR8cZK9TA7/ll0EQbUUHW8Gr1d+MSadia+LRHwhunv87yWoJ3h/pRDwJAbDNQQFd2P2mH4kP/wDT/ZeN3CK3+ZjvgVpw4r20AMafb58j4N1UMknuj6iCx883PU9g2VHVH5JX2eEcPghSgRBCKPzK0Q3fknwPN0Hk0CyC0zBkz//7duEetgFjVtypASDI4CsknYJgYDhqsBxxy29+eyxrAZX75EEf8f+CkOcijMDDHx4ASYGGu8WHgPwpHJc0qOG8FgFTuVk0cRZVePFwHEIUEu8xSHoL5qWg4I7/HgOKXe2dcnu2SSdCGIDTA+AcxY1zYL6Q6AAFu+/1GvjKPSe"+"EoJV3NiM4Dz9C6oWkEav+NWjPWXNOIkKgNTi2I8LeBgaZHJxqrC4oNXoB9pzzMws/OW3ghSyQJgjbygOVEDhoj4nHLld8HPD6UUMFVLIgKrTL7cFoBRLQgEdXIseZ2/HhFPKbk4d5tYWwwR0nIFQSD2P5gQhs6meVfB+Bkyz2fOIvX/zxqsSODuAGIOLtPNnmIPCrv6Kqvgz3q4tCwNl9lWYfnsdHj2HTgQw5IBHwULmfSu1jEV3gDFSxTBmqSEVqiYK2IkWcRiAkwV/cyW9YhqHXDw9dkNQAcO6HFNJT7oChfrPUYc3KY17zAd+evAwF2w5SCKLV4EuCEKsKfjBVWHu9Q9Arh4CoBqEMWYBsNX7YgKP/69uC3M7/mOOz232QT+ox4iCyJGEFP4oBHd+GVvXBwX35nqp7qeIbV6L6tdZub3ueJ+gBIKgC6S5gOQFxDoGr+Bv2nzqbknd7ph/EmXzO0o+kZdc/wqvQkAOUffVMzKtYgx5Vob1/+HAfCdzHSiXHenX35/2JTr3KZ9Ruj2lYiMhLIFoNyMq9hFroeYMTE0bSLbhb4l3YlFPa6hMd2jk8dmrDgdQCnC4/+ANFlYTB6ATlx2GDGXP1rvL+SnWHw+cJes5/rRWt4H2pw9GklD4uSMpwasIQiaYR92gIyFX5S8dtRZt/nCAH48VXW3hRE/HKOsGquj8EM85Q9cfeAV4XwNGAlmIFIwPYrfLKuxV476RRetzcdeAsRSZhiHizCKEIOHn3EMOWy5X4uIJnXX6sFiBFLaBm/THOQAkVJK9j6TKwiSDTBWpwHkSPQJX7U959uAkoaTUuug6oQCBz1Zlxm0OJSIoIw04M+7zCGuYiznCfHww9AN6Ir+HXA7lfn2oBSJ2FOOh8SzINfmcAyITq8JX/sOMPx6A9LeYtVfwgCBZhdu25OB9/XmWWNPUEPD5dUuJ68wd1AqD2+w1PI9KxE9BW5t3z/igdYGWiL7L+wPv9jgVY8f0ZcbCKCuLAHN+c5wa69Zpr0J9t2KnpAGzyiAIPiFalJ8/xXrrA6Y+/8NoDnWCPNwFJzf5DpVkHte8hx76P+HU1+HEytEeSEIzAsu5r6wPJGu6oLz8VrKofXLce+ywIHhNa/Dmw8LrptWXZ4NKZm4pr/QQ7Qk8ehMrPtAF7PQCD309QgRgRZMKgAbFREAfBBXNalbHA9cEHMo4IgIUuPjjBWEUFEQpYTkhVO43eRiynJw9Jjj8TOUIlJExK+0wA4gWgQvcFBHAc7P4/u78/Ff4CC5ATB3P3oUwFClYgcALcxzp/B9Ez4DUV8RjBbsCBrMH4dLNwIDaCGhA6o3pXksdBvYBsktrXDgNJKAFy1Z+ZGIy5NXgXoBT8a3ZgVSPIUAMV6DjLxhsV8wX4n4ibbONObHNyCr8Z4FinNFjg8ziiF5zSV8A99u7Zdf5OisvVaAAAG3VJREFU/kIPAJLWX3hUIFD6o7MD4WkHIMXBk4IftSrPNBJVk0OoC7ice8HGS8XBKDoz/YFBLaQi392lGpCMJfhD9xVkx5Xbj73P9V4m1j0v73x9FjDDPlYvATkgFAVWcdNvJBamliOjAwRV0EpeRymAe717kMYRyy/j5FwFBX0fP7Dyx8gq8wn2ZXi8GfGYR+lFcGJSxa3Y84WgzBHetlU4cvKY44Ps4iP9fsgsPGEhQTAcHqwwGCj61SoPexKwasXFqtxq8qhD9SixoBBYcJEDNzmIoi3J7QkoJActVHocTVpPBCDhElAvMDK1PT/Sq3DwB/ygmyB9GNhYDH4so4Foy48kkPtZfZEv1PQTxYpyX0EI3Bu+/5krcN8fgwVdwWu2JNVNWAk+PcOOPMNdGFyAZ5Aj6gicgzNfwuHZg0HrLxBWfjSRl88fVCo/apX/IBrIvf65ZxtEoK9Bec4KZIPLe76osQns46NwW0pUPCPAyMc4A/KXOwZzFLGbAqD5xhhbgBcWfoJBAlarcCSQgdQJ+Movnih4gjZQTw51rz588y/ZgxVUEAQ8soCfX8OR26JwujCLGFAMsOjnwGrlPuQw9D/PPv8BYVR7pG/eeFtQpsLzR2KFI8SwKj9KlX++HeLOPuSBKrKeHBi7L4b+Kx184+ptAp4Trcscv69oARVYzWgaK01H1X0K3zNSmARKtxXYHvwJuT+8gLGGWgpHcWOmBeljFB2Ckg6wiAYOqfxEK3GMCAj6kIiTWdCBCXhkjUKMgJcLk271N9uLSbtvvK0S69OXAvoA5z94VsFubbmZvx4QAnXgBnJxENyQjy38wef81uPhxMpPJIQzr5ckuUTKe0wZyN57iFTWga8GvCwlh5UqvYgmaNV9XSxEVWs40kkosFwA70RgNOu8mLZfR6wDiwRa35y7j08NksqPQhcfkRBK/J8R75Iz+9C8gJpqzwiIeZII3QnYOkJWbVEI5jNuA+o2BwK82ifwnpSgHwaC+GNAdmW2VXfC+vPu6wR6lBj84C9WfvivZyUhZMJlJhjSukDlFJ3g4AvGJfC1iEpQJ/CaEd7G9wds7p71+odruKrHip/C7RdsxeVjzIxhoNkFGOW/+sk/YVAGtltfzZAIfzix8gcHhZCXpcGN2u69qWqD9OlRFAy7x2fQBhHUiETB+DocqvArYt98f+AEAXApsEmEcNLC0t2uPHCqPQIXwHYDfI4/9+8LMpchqr5HK39MJSrBXwnutNqjovjHFdq+fcHLp7YLR4mGgduW5hFpAXUoL4cTTuW5HJSkB5PC0S7A+8c+837DyoM1J9iv/po/o3BunlDqPjOSO/YbLFd+FGy9sxKFeT8b+nLNPrkAyD53FtT27yUS32yqUaEGTMBiASGcZ0FmK8nWxbvjC1q6WQC4VdWdAcBY8eFoAzIrC0b7Wt8wlPcIdE1FhUWeKU1Igv8Q/0dl4k/NnYSxdlDon8diUDeuQB4c8XVzcahRgyyZmNC+LAgeCfSVALde8/t1DCYawNoePGT83wlOpFUdOZKwxn89OsMEf0X8CxJCBN/dwKbFwkSMgx0ACJJDJD4iC1JEYh6XcEqVHpx4+J4I4UiAl26r5x64sttvSlAn3LBuQCz6edU8C+J5epBrC4YP52EFDgHrCw1B0eU9bOaTgh3wmYvQV3Oqqcf53XnVNXUBELX1xtSgFrirlII5d3HFulxBCNEfZx0h7K2f34XwdHpuYQcguN189Ow/nPXclaUcqMH5leCXjKOjbv3F0a7i2ZaRHmBe5zwnhA9S736ZC8AH8LHkg/T5znYgmES1dtuzGo92qwHIquiWX+4KgVLd8utv9Ml1BQNhEJW/FOgweiTguCUoQHkEwYhjfQIgm8eAzPKzHqAG5xGiiPyxeGRRaYetUpDVpHVC1T9bHGyaknb/TQTnuG7rDYwYCUT7/cMjtILzA+Go/FPw581F/mWeTkDuBsBCAK8ki+A29nMzPn4Rzjv6QV7xWW4fzQFUxb9jQQ1qc28kMi4mDl1NBr4usIsz5ltZqNm7AeJXfuTHd7nioLEyPBISU+8/tP1AC4Il/n+YGmjg2NiBRdl6yCw//zG5ph7bqaBuz8B4VMU/TqSsNPbwCeZA1cdxyG9SgKzRZPL+GXFOiH1/SFZ9wX8M3zUgvH8a4rMBjZj/h1W9MrwTiN6MlsCKiI4gycBzgV/xUaQGjGDHwHiYi0VIzeEAasCpNuL76AC7BIEl7i4AIxnAfoMxk35eJbZ68wWEUChs8IPz/EEE9BkUoNA4RCWSLJkY1h0Y/dG9bVCtUVPe7QRhtStXG4nOECDfUxc4Uw/Ik8JkA9o9+a83IrfHH11EdFUWc4phNgVFWkPsIHBnCvCCYBSgqEN9qtoXuwHhByYoJJA7BxIkkRwpDGgAHo+vQ3ZGOwCFJCJKUAx4MBpFZWvReeLgtBBkDDQu2OJxXa7SE/P4ZiUPHABjY1DsFIhPAaygWewiXK72hHjow/k8gCL6gKES8qcDZ7A+EhYlWCPGCX1wXIwzkQEKt8cP6iqkC0FEhFj/ZYtvXCtwuBLcDT5wXN+9H6ZEIkTwV/x/s78fXFX3siWHEKrC3tw7EFZ31Ll7ttknQyEMGgAqCaVe1bGk8r8nFWCQQR0h7CY0dsU/mIeIuA1AGCo02Q0YVXxub36sG1Qgfo0CBBUXxap+ECFEycQVyViBEBFPt14TK9rZHB9EwMG7DPXOv0OVHkdtx7OSCXfb3av4CFZGTwQBwT7/hKPHE4PzpJ4L4+FM9r1n8B+B+9R9I4Fu9brYUZgCunZWNxdQgIs8mASBQ4F8hJpEiaf4GPihk8FdAxin/kybjZjTj+mAQy6ihZ9whDvHAWB6BKrBXQr+5SBfqPaINwiz12UIwoTmbPACZY/fshBBBKNlW8ZCHwH/cVKSOZMm4Mxk4OwE9JeB+EFkn1IzcPQoiSB4vGgNeJSoik1A7m0TCmE/HrggB+/1M12C1Z18ACGoIeH1pH2IhAqFWgBq+kDFEWAvA3X8tpW0cnSD5WAOriOHhnYraF1eLTkS8P/QsHUBdtMPnOrMaANJE9AZiaKWII5Ue/8PTHn/UcCSTgIF2xN4zdmAQYIAKeBFl6FiO0aKfq5jcImHfPwTxcEdRmD3LcFoAva1Hdjm9UgGggI9YOoPkOBYLsT8HlG3nucMDGkOOJ8CkNOELdSO7D5qqAeJYBb2GpABgRi2gxLITgrOQ9C937HgB+0i7MeRx3gfPWCXLtgbLJAu/gCFBPzRX8eADJqCvA3FViC/BlOQC4LZyrBq8BdQAOUKoKjqR7v7EFfVFMojPgEoSlJesNIePyLHwW9NRgq7E6HvUN8A0yj0wyWDHRZ3J2A1jHdMyu3hCGwSDwdRir7h9VP7AKLgPoMCgKziOFLtrUm8aIFHlgxYfz8WBYUU55iAXauo+evJaIK/NTgRJM9sUcZRzcCnMdNKMJc7usnAyrpxHYkTRHK+n1HxS01LheAHqRWwKIDqLvQC0+PupHZgBawfVGsiniTVHwZHRqbUI/D4Cd+ftgyLAR1ehkIiqaKFw7MJEwUIuK5zsu4svoFYCFKgBJZACBuppOId2RDkPZas8H9kULcA9a0KTCQDGtpnzT+RMJiOGseHl4BQ1C29AWUXIIf/OIwwqoNEK3SCuA7FRiBrE9B4/PcrGJ1OQNj83F4Xbol/TgVHfMiIZLAdcaVkgh8sLrd+liNQH/FqsNTfj15m1J0X+ffZuq/gTY7QnvIfJz6UzBJLs83ItQpt3RfZz5iuGfNPajpngUm0R8DoA5jDlzsOTAwZjzsC3Jjxg7H914PjlcskGdghgx9HG4OOQH34uwQyzz61/0qiYNQjXxECuWYbGM/DrjtPH/Mw/K+gBLLSA+cEfPr4MroArzcDuybbr8Zc72i2UnzeHnTgzD4Ug78SzIvCoARVOQxaFFR3TzWnkkHUVFShEuqKxZnKz4p4YYcf8ZhYhuu8wFgSHcuuwCJagI4bgchJQK/qe9c/RT6nGcg6KGREJpb+MI0EY/b0jcsni3AJBeCQNsBOFVYoApcM2Aom4VFgIRdHpeIG8D3YaxBD+qCiQ+rBOSVnci8hzkAG1t/pgHA4uwDzmu8xFKkkkIqCfkIRs204r/hiDgutoAAcowBMZ9+KS0CcXVBOHCvJw2jMQSJyeoeExF2DuTuRcuWAo9sefyUQ6/oBaIjPtiRH1KvQKvygAHb171d+vc4GRMDPoxN/kL5pwlVh1mBQ1quQJAJ5j0TgOAis+h8d3mnC8xTKE34+8sDNjyVXE6nFMN+H39TQDmocHScENvN74LoGScGU4f7g6IG3n3C3qnG6JBS+Z5tHOOzRYQx+u7MZmAl0OSsRLAS/VIKfRAWU92+12aaVPksGDBWQuCMvgNy2M2Mt8EwqbjosZAec5xLEAmXmcFTHiOWARWglpNpjdEtBQRxJJU5VL5/7F1X86XntXgUK4q+KggsUoIIK8oA+kgy4+zLaACqQGTVOX6MBWdehL6BxHn+tlyBMDGAqufd7WOX5WTJwKYDfXJJP2GXDPk7Tj5Ed7BOG7DMFaBRAJgI/+H2Ngeb2SKb0zkoGlQBHkefDr7xMA5HZeJPtKIzyApI9gmnPgf1c3mulfhe0gFekDCdNFnrOwi4Gs6eTACNjB+Uegcgojog4V25P8bctRYY6RL8AJklE9ACFAGZdBEahd4d4CmghFhbzcwaXYH5qTlS6DY+KfNH5Avzjo2JJ0poDkSCMxLn73H/eB+ifvgvyIFCWAji7BWC8hd0qj0FziMdrS70BlVbgamIgcmotGZDNPwm0L9l5iHv7WRoAFx57ScFS2r2iwot8oKu8l+TOCOg2mZ2nFdjTgOFQENzKkJ8OjEnsE8f6AzyXwT6MNF3RDRnuj0Lwo6wTlBMDIyqaz6G+RiLJMg/KUrQV/rh9uH0tWduwoxmky0kSMQ+rnXxZsGadgnxfgk1pCnsIsGYltvfdzTOBIclIsN8MLAGcz5gBwj94AE8DuC9Molip/JGwB57nRyJiyD3pyk6q5ij+3TzRLohcqyqCEQBTepF15+WVmW8SEr5jMUUkx3oMIsrH3ndwAQganKzyMpOJNxMQooGBYwcByw7axIhgPRGEr6GSGJhkAELoQ1YRg+dPeD5IIRDIqq5PA2Jh0Rq0YcS8XBi0ghGRFpCtWTdum5+yLOsQf2EuYY8AfnbQZDgCjHxBSKwTGpt8QCIDVH3/4H5OwEvldhliINwAFLsEyyIfGKV+vm3eEehVqKTdNxtDiPoLHCRiuwTJxCECxMDqDjTvZ63KaPKvRgV2i/F3ohm88V8LN8hgJcXD5pVGIPPNn9EBqSQC0I4AMxBUcQNCkarkFgSn/oCs9GCVep4eUG5BRAOcQOCWlGSc3If0IFqRfURQGRrKewPKEJ9sLnIowKCcw+f48N6UHjqYtgInaCCkBbPSj8VEkCr2g8U43wY1xX/BNkwreQrzg+oaJghOCGTU8RBxuIp6VFOGoEXgEsBLIgV6gBgxoLSI5CgiYNT+GBHsU01GthrceiMUtv9KgAYktgVNeGrBbtiOQVi9x8WjiAW7UNUnm4Vet7WtsFgDCDYEwQ/EVL1PnQf/xCDLTowTh4c4HPRDoQaiwhKIAae4B7xgCBydI/CDPOrevK0FR4p6w3VfoXgQiB3T1N8Y1PCD0X19JqcHGfzB5WkQE4p/kdeXBcEVUXEIFqSij82lMyrWq/7c+LFHA7z5/dwOHHg8s/Y8C2CmhbmALtare+4UWLfb25BmXABKABTniC8gRAP2yvDAiUAsElnrxFzITQa/sAFecAOY7zPV/8jMQHSbWAiUPGkQNABhw85xrSCv+mMSzFR8+7mjw01A8f4F8S/td4jnDHYxpT8/OEyV3gz2+GTfdAeAszswfJNGlQhEIjB0Bls0BKn4Iw7WKu9f1gmSagmvqleEwJwnZwjO7npz1HdCJ1hS/mlBcRXyF3i/M7NxqJFoeH27z7nnJaBmpUZKHsTbGUc1ALEoIGsGYl9ixS50gjAT/VhB8IzvGTrBVfWEz1MzAkRFTtecW731VdjNQPukVdhdn0Y8d/a7WYH6i/TBPBzUFwAlHwtGHOQISrgb1AMUgDETTA3+THAdeRJhg59V/Ektofa9I8wxVICkC7QQSAd2O3cftzPzdMK6aA4iZI4ILfYRbb9RgqICt2AxVnYZ4kkBvHOBxT/zN9ybHx/f5Ql2fkGCX6ANm6F8WCfqAS+Eq5AGcHJd2IFHagTMHAAj+mWBnDXuc81CjhsAi5dL2K8QCYI1aJ/PJtSSxEFXASv7C2I3ZB9/a0j/7nDn/j1pHsz9Jr8fNpxPBUAUUYD4wz5GBlmyAiORjtAIGDFwzSUwqiNZ1d1tPiB7/Q9VeI9KeJU16/knkEeQJEALjY4rkp74fCZiMDSA/PgvT/aT2gYgp5E/P29AKBQAo6TRth5T4VesQFb0i4K7RA2MZpgyFXCEQHCOixuYMPgy2L7+45ezSSKt2oUkURlpXkEMOLSiXPuDQZjk63N5bmzOSxQdLHX7AhwUEA0BAeQPJIQzkAuFlOK/GtyLdiGDKEBdllQ7YouxV2Xdwza9So4Kp5Z0yAgUhTlJgFzSFrznIHYIwKcCu2/L3LsCg6UI1b1/CA+ApIV5/32HqOIjdQusE4azip5Wc1b0q/QGIAlaWEJbXP3r/L+AEipw/+BtkQVY9fIM2i/ZhgVEgJO6DZ1ksVtlYdoQAPhVO0oKmYBmnAYco4DRCRB3TwCziptaE0auER9/VzRqKNOEYINOQg2m1l9GpGNQAhh1v6UmxNQh2M4+LmlUzll0OTjYQOaGlZAEMCrdhmBphaMBwBADrSQQc3//He8KgFETT7p6BHnjj2X9EXsDjrgBS6ihoAmcSQVYmE4JgYWFpp1waAQRoqDzxDhU+HxSnZHz/9JEY6Y5MJA+cwoWrt99+U3Mc/9g/NQTFaigAEtwB1yBzwzucZSX7RZEILhR1d5GDCsBLVUdIQvsldZfEJt5i/MHx2hGJZFkVVyK242iFeh58oBUFqIQbkfp2DV2X0CkAYgv1sU+P+I/HmBu8nErugdRnUWhfp+A/ddlbEH3uQlBsNobUEMHasK1HOYn8BEEvCUaiuigXRIKj+sGOPA4KAWz9/s7WxcgB4+a6/fI2osEwv4yOENAiPf+wQhbc/5f0gGisWuQaRFmGoIqguARWsBQgTTocDLMT5OJUQnhqdCEig+/EShKSEgTVV0MBMnz04BcshPnLk/+OaV0/dwKzB4QUt1NB6uTDfGOP+cNm9mEsBAFiM7AQh9AKVEU75vy68jeOxrUC4mDEuYO0oLqoSdHaEF2eXYYSm0V+oEOwpLmYFOF3Z4CmAeBTIGueiIw2xoKPzDBJVBXQ5g5O8/twwA+QguIjJt3+g0NQEcDfUXgO5gsqlTBLkQLdl86K3CWneitQ8sg/5oWAUJP2C3V3RoEyji5n4b9lB4t9pz2CA+cAFn1Z9I/uzYsU/ELtEBOCHYQQqGcFejV+yeuRJX31zsKV5IGjway9z6PLDxKwNEPsBuOEiqw57jGgOtZ1Y++T50AuMFl7hPIbhskiOwsATtRoc7rS7dXrpcgrMCGJca6ELJo+Y0be0BW5ZKGcFz4y8W9BduwcDnK9iO5fagsKpp9ANnvDPxeP8THNyIVFo1AMas8Qk5v2Ytm0LCCYAXqn+wQsPTBh/5Bcnne14Os3uCQt28vsK1WUESJFviBgAW//3u9PLxusXchcCR2WsNzv/ImvgZzzkUByDUAIrjTvmSHAowpJBQE4SUlxMxnARlQbIqkArVAJ6pBBvELCCKlkyCDAP45BYfEPfcUpfMch3Vn4bheYK4E66BxAxHSVd5INgEPgU/NBCDfNQ8Ho1CoINAPQAW/QT8OCIZlNFCB84XhoDChFByHGjx35v9BLgyhmojqHYb5QYXnuAecvua0hZe6BV9f7v4ibvgvamrmAc1TmaEir0LQ9h97eYAYVoM/nWA60i8Q3Ifezha9BqaaL3zvqd6IAuwwLSCCuCLuJWch4h30giPtyiAphKEBcCu9BV5wwzkMxID8rhMwdwMhcSFgrBT3RUTQboAUg3+p+Qe1IGarOioVnazmefV3lHpwA0AcLWCahUiXwePHWJsP+GH1gnp/we5KfOhJAbsj0H/BIEb04TbrTPsAyb2LLu93KwfCvn5PLAwrOXAa72eEQRo1CNdw5IprsAZ3hApy9zlcITG2vpCihsRSYxNS+J4vdBZ6B52eqRcQ/QXmSjAWSfa/5GA5qEg4iJFtm624AqXLrSA2gx8p1Mdqcghv41S0lSp/xAYs9gakQc4Ie2RTUYwYgt748mV+FU1Xgp14eW3XYZ6cdqGTNHwHICTwEeTPl0jEZwIgP9gDEaogeg5IHWCF+1eoAhvEKPB/EAeTRsM/pSAP5wjWEUMM1/NJRhwJbpJSgK7S7zF3EOsI5jBQBK9DV80Z8Y0COzvmWzJXgDl40KEC6cqvqgi4OB5cpgLFYK/1CvDiItXqC6/S87wfAUfPtxqfGNzlYaOjlf1IsHPPvffHgDAoEeEST4ZLZUd/RSo91/BjXY5ggWgQ4In3fyj4mUqPrInHOCLKO3wUwRsfyXpt1nEIRLrqcWeTuk7bigsbid1zD4iDRQtnIdQsyIXnFCn1I9D7ADgxEhOvR5AJosoUbu1FkJyYCi9OhQERoIx+4AX/YqUXQhtYEwKN4Cy1HntLMmtaAQpqfrT/UCoLSxeswjA5UWPPi0mjajUWxMTdVusNvt/ChMdmILK5IRMFu90BMEzFYHdg2GAgeYVHMMJIBTA7EFTx/5fpgTFXz9w/en0ZjD8kCDoKPNGwlB01BmoWQbh+AxR689mBponGJOr9OwmMu3dtJ/ylW1Tik4ElUPmR9RqII+pVhD9ychABMQ51gOIZg+/G+5mGIzLB1JJC5WhzYjhJ7IWmLDpA8jzsAafUPkB2WnFBF4iSxkq1ty7f25rv/+EQLOxs2oUdTSA9HIR9swdBlCcFe9owPC3XWDDC0ISVzsEVbSCF/sWdA5Fu4HJqankp2SeQCYYrImNalfmhpVxYrGkUS4LeSUjg8dD7+D7w/ybIfy7vlB9/HJ978zr7/45Qgajzj+4EjIK/ULHPRAOlKr/aG0AFcqCyu0GcW45Igh6JMJmhA49/U+cEssHNJhtXDC1MOya3j/sAiAGcrEtqtgjBD6wEzSDc7D8o6C8rIqAZyPk+NQoNLAZ1hR64Yl1FBY648smUYKnSg1Xwk/0DyRyArByMUobyByhCcPnOaPyoegREFS4jNfYAw+IHCjdC1J2WDZBke/OyN85J24WiXwDYPoJyYuCD238ulvuzwt6KgHf0shWKsqCFFGjB/w8HU8eeTED9wAAAAABJRU5ErkJggg==",Mle="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAF9UlEQVR4nGWVy64eVxGF16X27u7/HMcyuZGYAINwmTBigngBXoc34El4B0ZMGDJjFCExQUIKiRKZYBITHdvn/L1rF4P+c+yEUqmH9WmtrrWLkdB4C1/91h/9yn947D8+8CfdlBeGGAMtqwNd6K7VWAJrw9qwLtw2nDaernh6wKuHPD3S1Vs6vaPT97W9r/Wx1seKUWj7Uzz6vX79T//wF/Gbx/7rw/jsFB/39nlrX7q99LKrp5bJZXAtrqW1uJIncbNOXafBU+o0tZW28got0AJ3KACsE4OfYvmzfvDMb/+4//Td9snD9rfr9vHWnyz9361/1fpNLLde0mt5pTZ7a9pCm32SrqQTfZI3aqNXHAwvcAB4BPwnk/oMEcqX8eaz1t9cHjxs7133f5z6p2v/Ylme9eWmLbexjlhnrPBirz3WxWv30rw0L/Yi96PpDrcDcPMEfq+qvQCfsFF1blcv2js3vb2xLNd9O/XT1p8u/Vlfnvd+25bResXC6BFLj2WJpUdv7uEe0exGByPoOAC//BH+cgNqUjfkU4mOEetde+O2vf+y8br71Nva+9q/XpYXvZ97z9ardUXrra3RerQWrUU4myLk4AzYiADwJ+NRQ41i7MSNEBIcM5YR1+f21rnlXcPWtbVYW1/a7dL21mZvbK211lv01lpEtIi0MxTmFGzMAABAN6gF1CTPxI1gkXa5Z5xGPNrbfo6xB/bQubW9nXvkHtXDPfqIJd2bI+1mpZjmNK17QFuxDzhBJued8Fy0KLvcp7fpNzJuM3JE7daIWGKMqAylW0bLiHQ0e1ppTXEK8Qrwkzv8fUIua6oG553wQpRIme7lbfpBxm3GnoEMZ+wZlYGMlu6pNh1pT3nqALCEugCeAB2ohKqYk9hZd4JFS5ThDm/lB9N305nGtKfnNKZiqk23qZhySZOcYhHFewXfI54UMCBDOYlU3TMkSaYWaCtdwXu5yprOKUxrqk9FyUWXNKXiBfCNgucGboGAUBwUJzFYO3G+MCwFtdAn6K6UZZSyXCXBAUVdGCoS5IVxAcQNujAHKCiLLHJqDtWZh1GHV0Et8EYNqOABTUhglKJoyKBBgSwCBC6Ajz7Azz+GiJbwhFTkZCXnEM6EJcuHDmmlztCkBE2IkMGAAhQoSCBBvgYA0G6xN4DgLE5IU5iqZA1hJ8zDqCY2qktJHfEnZSpIk6bE++kEXwHUEBMCmBBBFzE5UzNZuyBRshlSSF0aEg6MaDHIgyFCPAqvA/YdIjTgQ3WBLNZkpWoQPnRIUljdGiIkHd9jumgeO0ESEI97cNTPJj6Z4ISOZh1JUSVLwiAs7pRp02aTypRUhwIzjvhfPCKF1wH/BTqwA5pQlnYyipgs6dDBQVncZatZaZUlsUxZYVq0jyfm8kNeBzz/Gu0ETrjABAURAoTJOVVJpDAoM3ZOc5olfmMK42CYMrRTAr6tIK6QiSA84VtIIEosslSTNYUkUxyS5aEDQ6tMmQ7YDMOmjziYx8E56oPEl8DdDgM2/BLeIJVw9CRSTClZg97ZrDl0BF6m49V0GTIZQL4CvNuxFj47w4ASmqUkAalYU+DBoIbK8hAG506aZTLonWFG0IMa1AAHXlegW9wFGuAJG97hhFkqiuCxUZyqSSWR5GCZHKxB7nSwDcZADHiACQ4eJ/Oot9+BvsaLQD2Hby9RUEEs1cUlcdKpmWKSQ2VyqAY56J0RiEEPOqHxXYv2W4yJuANWxBkBOKEGFcwyjlhMYdLJSjLJpA8FAxqMwXZRQA0wgdQ94Hcf4nqDFnQhBDcY5YJUIqSSpnxpRqone6ol+2Af7Il2MJJxnN/8lgIA8yWQUKItaBMRsGEdDIrQoYNTnGSyBqdZQSY16IEYaANOOKn/A+htXH+OdgLOiB1BBOEGCz5ejmO6JpGEeexVJTmohJNORqIlnVDyO4CvvsT2AGm0BVEHo0IMHeEooeQipzDFY5eSNcigLgwoGYlIKHF/ky9Z+xD/WrCfoQUuRCGAKBhlwIBRQvmSuykkMYHkqx7EAPK+/wdqEbWmfB0bfwAAAABJRU5ErkJggg==",Cle="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAABGSklEQVR42u3cx4tb6brvcf0DmmpUoxrUoAY1KCgwFAZjME1jjGmMTWNs2tjY2MY2DjjinHPOOeec3dXOOeecU2VlaSksSc/9aq1X0pJKqmD3Dn3upvnCSe197v38nlfS2fscW1x+kbCMloAsFY/skEY5KbVySb7JXfkoT+WtvJGX8ol/67s8lDr+o065KW65Jl7+q/zyF3/nWTpJx+gQ/7H94pPd/Oe38yduEZds4E9dK/Wykj95GX/OYvkq8/kz58h7mcmfP41/hMnyTCbIIxkn9/nv5raMlOsyTK7IELkgg6RKBshp6ScnpI8ckd5yQHrJHvmd/3578I/QjX+E32SNdOEfobMskV9lAf+vmiOdZIZ0lKnSQSZKe/7kSv7kdjKchkoFf2q59Ke+UsafWCY9pZQ/rZQ/rUS6Umcp5k8q5k8p5k8p4k8p4k8o4u928Hc7+Dsd/F1mpWLn7zArVhWpHOlsRvYC/Yf++t8A/j8fQCxrADvTA/j6vwH8/zGAaOzX/w3g/+cBaJEuEkqMMQbg/t8A2jiA8n/+AHzB7qLFx8K2zBhAA5Q16QE8+98A/q8PwOXvLYHYePEllsO666cGcPR/A/jnDaDRN0C80Ynija8QV2K3GsBlywDe5h3AVYAvAv0X4IUH4P7fAP7bB9DgGyau0BRx6yvFGd8j9YlTUp24LF+g/gDKGwbwAqwnwD1o5QD2/VcPYMT/BmD9q94/Thq0GeKMrpbG2B6pi5+S78kBJAoNoDFrAFU/PICP/+UD6PL/xwDqAlOlNjBH6sMQ6XulJnZavsWvyGcG8D7BABJvsgZwxxiAK2sAZ9ID8P/gAF78QwbQ/v/eAGqDc6Tav1BqtA1SE90v1fpp+Rq7Ip/id+UdA3jNAJ4nPsnjRGYAN0C9whe8C+kB+BmAP2sAu/jPNx1AjRrAlzwDeNqKARz/3wD+7r+qtSXy1QdLcJN8Dx+Qb9Ez8kW/Ih9id+Vt/Jm8sgzgfqL5ARwxBuBjAN70ADbznSE5gDWMJzWARekBvGsygLFy738D+Hf+9T20Sj77VsuXwFb5oh2SL5Gz8lG/Ku8ZwJvYM3kZfyPP4h/lUeIbA6iV24lGuZ5IDcALjQ8aP4+zOYCD/Pt70wNwqQE0WAbwLWcAr/MM4FbOAP78Bw+g6L97AN/CG+Sjb6N89O+Qj9oR+Rg+J++jV+Wtfk9eMYAXsTfyhAE8jH+TuwzgVqLBGMDlhFvOJ7zyZyI5AB8D8EHjyxrAtjYN4EnWAEYYA7j8XzCAXwoMoOJvHsB/aARfwtvkvS/ZHnkfOCbvtCp5G74mb6L35KX+TJ4xgMexj/IgOYB4rdyMN8i1hFMuGQPwyDlGcJoRHE+YAzgA/l7jn1VwqwE0WgZQLUuNAXxmAB+MAcyQVxClBvCQAdxtxQD25x1A1x8ewB9tGEAljO3+7wzgU2SPvPPvlje+A/LGf0LeBP+S16Fr8jJyT55Hn8kT/Y080j/K/dhXuROvYQD1cjWeHIBL/lIDOEXH6TAdoD0JcwBbGcAmBrCeL4Br+AWQO4DZ/MQ0B/C8mQGczxnA4YIDaM0LUNmqAfz2LxmA/b9xAB8iB+VN4IC88h2Rl/5T8jJwXl5o1+V56L48jTyTx9HX8kD/IHf1r3IrViPXY/VyJd4oF+IuqYq75SzYJ0E/ZgzAI/tpD6/DDgaylZdiE9efHMBqYwDfGcBXBvBJ5uUMYJIxgAeWAVyzDODcv2gAA35oAEV5BpAZwT9sAO+iR+VV4Ii88B2X576z8tx/QZ4Fb8gT7b48Dj+Vh5HXcj/6Qe7oX+SmXi3XYnVyOdbAAJwMwCVnGMHJuEeOAn/IGICbAbiMAWzhC+NGvjOs49fD6kSNrFADWGgM4L0awEs1gMeWAdxUA7jUxgGs+Le8AP+nBvAmelJeBE/IM99peeqrkif+S/I4cFMeMYAHoadyP/xK7kTey63oF7muf5creq1c4hU4H2uUczGXnGYEJxjBETpE+4DfbQzAqQZQzwBqZVWiWlbwS2JJ4ossTHxUA3ijBvDMGMB4YwB3ZFTeAZz6FwzA+gL0+jcN4L/sl8BL/Yw8004Df04e+87LI98Veei/JQ+CD+Se9lTuhF7JrfB7uRH5JNei3+SyXiMX9Hqp0hvkbMwppxjBcTrCEA7SXtrF67Ad/C1c/wauf60awHJjAJ8ZwAeZm3gnsxJvZHrihUxNpAZwvxUDOKQGsJsBbP+bB/A7df/JAfzD/mcBz3WuXvtTHvmr5IHvotz3XZN7DOBu4IHcCT6VW9oruRF6J9fCn+RK5KtcjFbL+Wid/MkITuuNcpIRHKPDjGA/8HtoJ98RtvFrYTNfGDeAv5bnf2XiOwP4KosTn2SBMYC3DOCVMYApiacyKfFIxifuy5hEcgA3YLrKAC7KYPlLBjKA/nKSARzLM4DNagCr/4UD6PRvGsB/YARPda5eOy8PAhfknu+y3PVdlzu+O3LL/0BuBp7Kde2lXNPeyZXQR7kU/irnI9+lKlojZxnBKV6B44zgCB3iI2E/7aEd4G8Ff1O8Tjbw03FNvFpW8jNyGc//Yp7/BYn3lgE8ZwBPZKIxgHsM4LaMSlyXEYkrMjTBABJVDOCsMYC+lgH0VAPo/hMDqGhxAJ1bOYCyf+4AHuuX+Ky/yMVfAv6q3PLdlJsM4Ib/oVxnANeCL+WK9lYuaR/kQuiLVIW/yblItZyO1spJRnCMl+AwQzhAe2kXXxB38B1hC18WN4K/HvzV8e8M4KssjX+WRfGPMp/nfw7P/8zES5mWHsADGZe4ywBuGQMYbgzggjmAxBnpn2AAiaPSJ5EcwD4GsAuubWoA6/83gB/964F+Re6Grsjt4FW56b8uN3y35LrvrlzzPZQr/qdyOfBSLgbfyHntvVRpn+Rc6KucCX+Xk5EaOR6plSOM4FC0XvYzhD20U6+TbeBvidXKBn42rot9l1Vc/4r4FwbwiQF8kHnxtzI7/lpmxl8wgGcyOfE4awAjE9cYwGXLAE4zgBMM4AgDOCi9E3ulZ4IBJBhAYpN0S6QGsByyxX/bAEqyBtDxJwbwX/xL4J5+TW6Hr8nN4HW57r8B/G254rsnl32P5BIDuOB/IecDb6Qq+F7OaR/ljPZFToW+yXFGcJQRHGYEB3gN9tJufiHsoK18UdzET8YN4K+JfZOVsa+yPPZJlsQ+yML4OwbwhgG8khnx5zI1/lQmxx/JhPh9BnBHRiduqgFcYgDnGcCfWQP4Iz2AndkDSKySLgkGkGAAifnyS2K2GsCUv2UAxQUH8A//HwbdiV2Xm2HwtRtyNXAL/DtyyXdfLjCA876n8hcDqAq8lnOBd3Im+EFO8QqcYATHGMFhRnAwXC37GcIe2sl3g+18SdwC/kZ+Mq7Xv8lq/SsD+CzLYh9lcey9LIi9lbmx1zIr/lKmx58xgCcyKf6QAdyTsfHbMjp+Q0bGrxoDGMIABiXOqQEcVwM4wAD2qAFsVQNYl38ACQaQYAAJBpBgAIm2DKDrDwzg7/gp+G8ewc3YTbkevilXtZs897flov8u+PfBfyRVDOCc74Wc9b+S04G3cpJX4ETwoxzTPssR7ascYgT7+U6whyHs4svhDtoa/S6b+Lm4Afi1+hdZpX+WFfpHWap/kEWxdzI/9kbmxF7JzNgLmR57KlPijxnAAxkfv8sAbjEAvgDGr8iw+EUZEv9LBsX5CZjgJ6AxgMMMgF8AxgB2SA9jABuNAXRt7QASDCDBABIMIMEAEgwgwQAShQbQ+n9VUNP/WcA/4HvA9RhXH7nFl7xbciFwR84zgCrfA/mTAZzzPZEzvudy2v9STvrfyHFegaO8AkcYwSFGsJ+XYC/fCXbTDoawLfJNtvBTcSOtj36RNdFPshL85eAv0d/JQv2tzNNfyWzwZ8aeybTYE5kceyQTY/dlfOyOjInflFHxawzgMgO4wACqGMBZGRDnJ2D8mPSNH8oZwBY1gLUMYCUDWMYAFlkGML1tA0gwgAQDSDCARKEBFP7nA/6RA7jCAC5FbssFDfwg+P57wD8A/pGcZgAnGcAJ30s57n8tR/1v5XDgvRxiBPsZwV4+DvYwhJ38OthOW8JfZBNtiHyWtZFPsir6UVZEP8jS6DtZBP4C/bXM1V/KLP25zNCfylT9MQN4IBNid2Vc7LaMid2QUTGe/xif/3E+/+N/MoDTagD8AkgOIM4A4rulZ5wBxJMD2JBnAPPyDGAs+KPyDKBf4QEkGECCASQYQIIBJP5d/7OAf+MILvH/8Rcid+Sv0B35kwGcC9zn4h/IKQZwkgEc9z2TY3wMHPG9kkO8AgcZwX5GsJcR7GEEO/liuJ0hbAl9ks20IfxR1tHqyAdZGXkvyyPvZEn0rSyMvpZ50ZcyR+f69WcyHfwp+kOZpN+XCfodGcsQR/N9ZGTsCgO4KENjf8ngGJ//DKB//DgD4BdAnC+A8X0MgF8A8e3mAOIb5Lf4GukaTw5gqWUAsywDmNDGAXQrPIAEA0gwgAQDSDCABANIMIBEqZE9UaIqVhVZcqSzJf5LBnCep7cqeoefd3flrHaPz/r7PPcPuPpH4D+RowzgMK/AIV6BA3wX2M8I9vJ9YDcfBzv5TrCdIWzVPshm2hj6IOtpTei9rAy/kxW0NPJWFkVeywLw50ZfyOzoM5kRfSLT9EcyWX8gE/W7Ml6/LWP1GzKaXyQjYjz/sQsMoIoBnJWBsZPSP8bnf+wwA+ALYHwvA+ALYHwbA9icPYA4A4gvlF/jc+WXeGoAk/+GAfzSigGUtXEAagS5/bsHUMUAzkXv8tv+Lt/w78lJBnCcARxlAEd8j4F/KgcZwH5egX2MYA8j2M0IdjCC7bQ1+E4200btnayntbQq9FZW0rLwG1kSfiULIy9lXuSFzIk8k1ngT48+lqnRBzI5es+4/nH6TRmjX5dR+hUZoV+SYfp5GRLj+Y/x/BsD4PM/xvMf2y+9Y3z+x3YwgK0MgF8AcX4CxlczgBUMYEn2AOLTpGOcAcStAxje4gBK/5MDSGfL9K/86xwDOM0ATjGAEwzgePC+HAk8kMP+R+A/lgO8Avt5BfYygj2MYBcj2MEItvOdYEvgjWymjcE3sp7Wam9kNa2k5aFXsoQWhV/K/PBzmRt+JrMjT2RG5LFMizyUKdH7Mol/3PHRWzI2al7/SP2yDNe5fr1KhujnZJDOAHSe/9gRywB2mwOI8fzH+AIY4ydgfBUDWK4GsEANYGb2AOIMIM4A4gwgzgDihb4E9rAMoMvfMIDiHxxAzghy+7v+Os0ATgJxnAEcYwBHGMAhBnDQ/xD4R1z9Y+CfyG5GsJMR7GAE22gLvww2M4SNgVeyntYGX8lqWqm9kuXaS1lKi7UXsiD0XOaFnsmc8BOZGX4s08MPZWrkvkyO3JWJfPkcF+X6o9dkVJTrj15kAOcZwJ8yWD8jA/WT5gB0nn/9gPyh8/zHdjGA7WoAfAGMrZXfYiula4wBxBYbA/glPqd1A4gzgDgDiDOAOAOIM4A4A4gzgDgDiDOAeGoAnZoZQL7vAcXNvgI/PYC21NxfJ+N35Difw0cZwJHQPb7h35cDDGA/HwN7eQX2MIBdDGAHbWcEW2kLQ9jECDb4X8h6Wht4IatpZfCFLKelwefgP5eF2jOZrz2VOaHHMiv0SGaEHsi08H2Zwj/WJPAnRG7KuMh1GRO5ygAuMYALMizK9UfN6x+on5D++lHpqx9iAFy/vkd66Tulp87nf2yzGsAaYwBdYvwCiPEFMMZPwNgc6RSbwQCmMoBJDGA8AxhjGcCQtg0gzgDiDCDOAOK5A/iZL4L/xhEU6hgDOMIADnORB/kiuF+7L/sYwR5GsJtXYCevwA5GsI22MILNfCfYxAg20Hpa638uq2ll4LksDzyTpbQ4+EwWBp+A/0Tmao9ltvZIZoI/PQQ+/xiTwuCHwQ9fl7Hgj45clpGRCzI8wvVHuf7oGRkU5fqjxxkAz79+kOvfxwB2MwCef53Pf32TdNfXSzedz39jAEvVAPgFEJttDKBjjAHEGECMAcSSAxj59wwgzgDiDCBeYfZPHsARBnCIL2IHGcB+cPbyMbCHAeziy+AOXoHtvgdc/SPwH4H/WDbSBoawjtbQKlrpfyLLaWngiSymhYHHMj/4WOYGH4H/QGYyqun8uVO1uzI5dFsmhm7K+BD44WsyOnxFRoUvygjwh0W4/shZGRzh+qMnGMBR6Rfl+qP7jee/t87zr/P861sYAJ//Op//Op//Ol8AdT7/db4A6skB8AUwxi+AGD8BYxNpnDmA2EhpFxtGDCDGAGL9pTzGAGIMINaaAXTMGUBqBAwgXqZiAPF/0AAOxW/LAQawL3JH9jCA3SDtDN7jW/592ea/L1sZwRZGsMn3EPhHXP0jWUtrGMIqWknLaan/sSzmI2MhzQ88lLm8ILMZ0kyaEbwr07Q7MkW7JZO0mzJBuy7jQtdkTAj80CUZGT4vw8NVMjR8jgGclkERrj/C9Ue4/uhBcwBRnv/oDukZ3coAeP51nn+dz3+dz3+dz3+dz3+dL4A6XwB1BqAzAJ0B6AxAZwD6aKnUrQMY2HQAMQYQYwCx/AMoNgaQ7xXIMwCjYktFmbIG4PjPDmA/A9jH7/A9DGBX+I7sAGo7I9gWuMu3/Ht80bvP1d8H/z5X/wD8B7KaVjKIFbSMlvLvL6aFjGU+zeXvmc3fO4s/Y0bwjkwL3pYpwQz+eO2qjNWuyOgkfuiCjAhVybAQ+OEzMjh8UgaGjzOAI9Ivckj6RsCPcP2RXQyA649y/dGN0j3K8x9drQawjAEsYgDzGQBfAHW+AOp8AdT5AqjzBTA9gBHSTmcA+mCp0AeC38wAYgwgxgBi/BSMtXUApc0PIO5IZzOym/0nRrAnfkv26LdkV/S27OCzeXvojmxlBFuA2wTgBv9dvujdBf8eV3+fq78vK733ZQUt499eQotoIc3nv2Yu/7WzaZb/jswI3JZpgVsyJXBTJgevy8TgNRkfTOJfljHaRRmlga/9JcNDf8rQ0BkZEjolg0I8/eGj0j98WPqFuf7wPgawhwFw/ZFt8ntkMwPYwADWMgCe/yjPf5TP/yjPf5TnPzqb+AKo8/mvT1IDGEujmg5AZwA6A9AZgJ4aQPecAfxqDiDGAGIMIMYAYgwg1poBlLRtAAWzFe5nB7ArflN2MoAd/B7fFr4lW/iM3qzd5rf9HdkQuAP+Hb7o3eHq73L1Zsu9d2UpLaFF/PsLaL7vjsyl2b7b4N+SGTTNfxP8GzI5AH4giX9FxgUvyZhgEv+8jNSqZLj2pwzTzsoQ7bQMDnH9oWMyIMT1h7j+8H4GAH6Y6w9vZwBbGABf/iJcf4Rv/xGuP8LzH+H5j/L8R3n+ozz/0enEAKIMIDo+ZwBDCw9AZwA6A9AZgN6KAcQYQIwBxMpVDCBWavT3DqCFEfzMQHYwgO36TdnK7/EtDGBT6JZs4LN6A0/2Oq53DVe8yn8b+Ns8+be5+js8+Xdksfe2LKQFNM93C/xb4N+Smb6bMoOm+a/LFJrsvyYT/VdkQuCyjAuAH7ggo4PgB6tkRPCcgT80ia+dlEEaT792RPqD3y8Efmiv/BHazQC4/jCf/WGuP8z1h9dJtzDPf2QFA1jKAHj+Izz/EZ7/yExjAB2jU2iiOYAoXwCjDCA63DIAfgHo/ahP4QHoDEBnADoD0Ns4gFiJqlhVZCl3AI5/3QBaalv8hmzRb8jm6A3ZyO/yDXxDX89n9VpaHbwpq3i+V3LNy2kZwEtoMS303pT5NI/m0GzvDfCvy3Sa5rsmU2iy74qJ778k4/wXZWwSPwB+APzAORkePCNDg6dlSNDEH5jE18DXDkhfbZ/00bj+0E7pFeL6Q1x/aKP0CK1nAFx/mOsPc/3hJbRQOofnMQCe/wjPf4TP/wif/5EJDIDP/yif/9GR5gCifAGM8gsgah1A79YNQGcAOgPQGYDOAHQGoLd2AHlGoLIZ2bP7dw1gS/y6bNKvy4YoRa7LOn6br9FuyGpaGbwhK3jCl/tv8C3/BvA3ePJv8OTfAP+6zKU5NItmeq/JdJrmuwr+FfAvy0TfJZnguwj+BRnrPy+j/VUyyv+niR8AP3BKhgROyOAg+MEjMiB4iAFk8P/QdklvbYf00rh+jevXuP4Q1x/i+kMMIMSXvxDPf5jnP8zzH55FPP9hnv/IJHMAEZ7/CAOIjGAAw7IHEGUAUQYQZQDRnj8+AL1cxQD0UiO7/pMDyJvN7O8cwMb4NdmgX5P10WuyNnJN1vDbfBW/0VfybX0FX9yW8fm9hBbznC/kqhfQPJpLswGf5b0qM7xXwL8iU2mK95JMoonAj/ddkHG+8zLW95eM9iXxz8kI/1kZ7j8tw/wnTfzAMRkUAD8AfvCg9Avul75B8IMZ/J4a169x/RrXr62RbtpK+U1bzgC4/hDXH+L6Qzz/YZ7/8DTi+Q/z/Id5/iNjaJQxgHYRBhBhABF+Akb6Nx1AlAFEGUCUAUQZQJQBRFszgArLAMoyAzAqtlRklncAjtYPoFA/MoAN8auyLnZV1uhXZXXkqqwMX5UVoauynJ9qS/nGvoQWBa7yE+8qP/Gugn9F5tBsmgn4DO9lmQb4VJrivQj+BZlI473nZZz3L/CrwP9TRvnA952R4T6F7z8ug/3g+4/IwCR+4ID0C4Af2CN9ArsYAPjBbdIzCH4Q/CDXr/HNX1sFPp/9Gp/9Gtevcf2hucTzH+L5D3H9ockMgOsP8/yH+fwP8/yHef7DfP5HBmcGEOlLfP5HGECEAUR6GAMoif6WPYAoA4gygCgDiLZ1ACVNB2DkSGfT/6YBtKXUANbGr8ia2BVZpV+RlZErsiJ8RZaFrshSfqcvpkV8c18QuAL+ZX7iXQb/ksyimTQd9GmgTwV8Mk0CfQKN91aBXyVjvH/KaO85GeU9A/5p8E/KMN8JGeoD33fUxPcfkgF+8P3g+8H3gx/YIb0D26RXYIv0DGyS3wMbGMBa6R5cLd2CyetfxgC4fo3r17h+jevXZhLPf4jrD/H8h8YTz39otGUAQ4jnP8zzH2YAYQYQTg6gV2YAEQYQYQARBhApMIAoA4gygCgDiFaYNRlAaQsDyDMC3d60f+UIkq2OX5KVMdIvyfLoJVkaviRLQpdkkXZJFtJ8frbN49v7XJrNF7lZPO0zeNqn0zTQpwA+mSZy7RNAHw/6ONDH0GjgR3lPywjvKRnuBd97HPxj4B+RQb7DMtAHvu+A9Pftk74+he8H3w++H3y/wg+sk+4B8APgB3n6g1x/kG/+wQUMgOvXuH6N69f48qdx/RrPv8bzr/H8h3j+Q3z+h3j+Qzz/IQYQSg6A5z/M858cQJgBhHn+wwwg3M0ygM5SHGEAEQYQYQARBhApMIAoA4iWqcCP/k0DaJItu58dwMr4RVkRuyjL9IuyNHpRFkcuyqLQRVmgXZD5NDd4Qebw7X02zeSL3Ayaxuf6VD7Xp4A+CfSJNAH48aCP9Z4F/wz4p2Uk8COAH+49YeJ7j8pgL/jeQzLQe1AGePcb+P3A7+sD3we+D3wf+D7w/eD7wfevMfEDK2ipdA0sli4B8INcf5DrD3L9Qa5f4/o1rl/j+dd4/rXRxPVrXL/G86/x/Id4/kNcf4gBhBhAiOc/xC8A6wDCDCDchRhAOM8AIgwgwgAiDCDSzACiJapiS3/zAFpboQEsj1+QZbELskS/IIujF2Rh5IIsCJ+XeaHzMlc7L7P5zT6LZgb+kun+v/h9XwV+Fd/y/5RJNBH0JPw44MeCPoZGeU7JSM9JGeE5IcM9x2WY55gM8RwB/7DCP2Die/dKPy/43l3Sx7tD/vBuk97eLQxgEwPYIL/71ksP3xoGsEq6+cH38/T7efoDPP2B+TRHfg3wzT/A9QenEtcf5PqDPP9Bnn+N69e4fo3r14aYA9AYgMYANJ7/0B9qADz/IQYQ4gtgiAGEcgYQZgBhBhBmAOE8AzBiAJEyVakaQYEBpHOks/07RpCvpfHzsjh2Xhbp52VB9LzMj/wl88J/yZzQXzJbq5KZNCNYJdP57T6Vn3BT+CY/mS90k2iC7yz4Z8A/beCP5tpHAT8S+BHADwd+GPBDPIdlsOeQDPIclIGe/TLAs0/6e/ZIP89u6evZKX08Fnwv+F7wvQrfB76P6/cpfP8iAt/P0++fbeD/EuCbf4DrD0wirj/I9Qd5/oMMIMgAguYAKjSef43nX+tnDkBjABrPv8YAtB6WAfD8hxhAiAGEGEAoZwBhBhBmAGEGEC4wALJHSlTFZs0NIJ29af/KASyOV8nCWJUs0KtkXrRK5kaqZE64SmaF/gT/T5mhnZNpwXMyld/uUwJnZZL/DD/xzoB/mp95SfhTXP1J8E+Afxz84+Cb8EMN/EPgHwT/gMLfq/B3gb8D/O3yh2er9PaA7wHfo/C94HvB9ybxl9MS6eoD38fT75tn4P/q5+n38/T7uX4/1+/n+gPjCPwA+AGe/wDPf5DnP8j1B7n+INcfTA6A51/rrQbwuzkAjQFoXL/GALScAYQ6SVGIAYQYQChnAEYMIFymKjAAoyJLjjwjsLciW3Y/M4CF8T9lfuxPmaefkznRczI7ck5mhc/JjNA5ma6dlWk0JXhGJgdOyySayG/48f5T/L4/yU+8k+CfAP84X/aOAX+Uqz+i8A8p/AMyyL1fBrr3yQD3Hunv3i393Dulrxt8N/hu8N0WfM866eEB32Pid/OC7+Vz3wu+18Tv7OPp9/H0+7h+H9fvM/E7+nn6/Tz9fj77/Ul8rj/A9Qd4/gNcf2CAGgDXH2QAQQYQtA6A67cOQGMAGvga15/GVwMIMYAQAwhVmOUOgOzhElWxWZMBqBGobEb27FozgNZUaADz4udkbuyszNHPyqzoWZkZOSMzwmdkeui0TNVOyxSaHDwlEwOnZELgJPgnZZz/BPjHZYzPhB/Jl7sRfLkbzlM/DHQT/4AMBn4Q8AOBN/F3gb9D4W8Dfwv4m6WXe6P0dIPvBt9t4nf3gO8B3wO+hy99ngUMAHwv+F7wveB7k/g8/T6efh9Pv4/r93H9fq7fD76f6/dz/X6uPzDQGEB5gOsPMIDAH2oAPP9BBhDk+oMMIJgaQBL/18wANAagga+1V+UMIMQAQmWqUqMmAzAqyslhlh5AnhHkzWYW/cnmxk/L7NhpmaWflpnR0zI9clqmhU/J1NAp8E/KJJoYPCkTgidkfOA4+MD7j8lofseP4ufcSOBH8OVuOOjDeOqHAj+Ep34w8IPcexX+bvB3Sj8X+K7t0se1Vf5wge/aJL1cG8BfD/5aA7+HG3w3+G7w3SZ+V89CBsDnvofPfQ9Pv4en38vT7+Xp93L9Xp5+L9fv4/p9XL+P6/cNJ67fz/X7uX4/A/Bz/f4kPtcfAD/A9QcYQKCHZQDgB7n+IAMIMoBgMwPQGIBWoWIAWs4AQiWqYksFBkC2dPbsmhtAS7U0gNnxUzIzdkpm6KdkevSkTIuclCnhkzI5dEIm0UTtuIwPAh88JmMDx8A/KqP9R0x8fseP4Fv9MK8F3pMfvh/wfV3bwN8C/mbwN5r4LvBd4LtW00rp7loB/jLw+cx3g+8G3w2+ey4pfM90At8DvoenP4nvHUtcv5fr944w8X1cv4/r94Hv4/n39zMH4Of6/QzA35N+NwcQYAABrj/AAAI5AwgygCADCDKAYAq/wACMSo3sWolZ1giKcnKks4UKDCBvNrPITzYzflJmxIDXT8jU6AmZEjkuk8PHZSJNCB2T8doxGacdlbHBIzImALz/sIz0Aw/+cN9B8A/w+34/+PvA38uXvT3g7wZ/F/g71NVvM67exN9kwV8H/ppsfBf4riW0SLq6ePZdFnw3+G7w3eC7JzMAnn4PT7+Hp98DvmcUA+D6vVy/F3wv1+8dpAbA9fsYgK8PMQBfL2MApckB+MH3c/1+BuBXAwgwgAADCDCAAAMIWAYQrFQxgGCFWXMDMCpWFWWXOwAje/7yDaClWhrA9PhxmRY7LlN14PVjMil6TCZGjsqE8FEZHzoiYzXgtcMyOnhIRgUOgX9QRvgPgL9fhtFQ7z4Zwu/5wcAP4mfdQOAHAG/ibwN/a/rq/wC+N/C9uPqeXL2Jv0rhL8+DP4/Ad4Hvmkngu5L4Uwh89wQC383T7+Hp94Dv4fo9XL8HfA/X7wXfy/V7wfdy/d4kfm9zAD7wfVy/jwH4UgMA3w++H3w/+H4T3xhAgAEEGEAA/EA7I3MA5aoyVamRPZhvALkjcKSzpbMXHkE6W3bhH2xq/JhMiR0F/6hM0o/IxOgRGR85IuPCh2Vs6BD4h2Q0jQoelJGBA+Dvl+H+JP4+GerbA/4eGezdDf4ufubtUPjbwd8K/hbwN6ur36Dw10lPJ/hOrt650qi7M4m/FPjFOfhzmuK7wHeB7wLfNd7A7+AG3831u8F3D6OhBn47D9fvAd/D9XuS+H3MAXjB9/L8exmAt4eBX+oD38f1+xiAjwH4LAPwg+/voMoZQIABBMpVZWbWAaQrttSKARSquRE0V6EBTIkfkUkx4MGfoB+W8dFDMi5ySMaGwQ8dBP+AjNT2y4gg8IF9Msy/V4b6gQd/sA94r4I38LeDv5Vv+lsU/qb01fd2rpdewPd0rgF/lcJfAf4y6eYE3wm+c6F0dYLvBN8JvhN8Zwb/l1x8F/gunn4X+C7wXcNNfDfX7wbfzfW7+zOAfuYAPOB7uH4PA/AofC/X7+X6vQzAywC8DMCrBuBjAD4G4GMAPvB97c0B+BmAH3wjBuAvN0sNIFBqZA+UWMoZQDpHOluwFQPIyta0UBubFD8kE2OHwD8k42ls9KCMiRyQ0eH9Miq038TX9snw4F4ZFthj4vt3g79TBvl2yEBvEh94zzYD3sTfDP5G8JNXn4RfR2vAXw3+SoW/XOHz5DsXKfz5FvxZJr4TfCf4TvCd4Dsn5sEfaeK7ePpd4Lu4flcSf4AxgHI3+G6u380A3En8nuYAPAzAwwA84HvA9yh8L/he8L2dVJYB+CpV4PsqzFID8JepwDcqMUsNIF2RJUfTERjZm9aaAbQm6wAmxA/K+NhBGacfkLH6fhkT3S+jI+CH98nI0F7w98hwGhbcLUMDu8DfKYP9OxT+dhng3QY+8NSX3/R9+U3fB3gTf526+tW0SuGbV9+dq+/WyNU3gt+4QLo2gt84l8BvBL9xBmXjd0riO8F3gu8E3wm+cyQDMPErXUMVPtfvAt/F9bu4fhf4riR+b3MAbvDd4LvBd3P9bssAPAzAwwA8DMCj8I0YgJcBeCtVDMCrBuArV5WpwPdZBmBUbKnILDUAS7Z0drNgc9my+5ExjI/vl3Gx/Sa+vk9GR/fKqAjwYeBDwGvAa8AHd8qQwA4T379dBvq2gb9F+nuT+En4TdLHvUHhrwd/bfrqewL/u+XquzcuUfgLFf48hT87G78R/EbwG8FvBL9xPPGlr3EMAxht4jt5+p3gO8F3gu9M4g+04PdVAwDfBb6L63cxABcDcCUHAL4bfDf47s5GxW4G4FYD8IDv6aBiAB7wPe0yAzAqV5Wp1AB8Jari7FIDMHJkZUuVGkCz2ZqOoLnyDWBcfJ+Mie2V0Trw+h4ZGd0jIyK7ZXh4twwL7QIfeA34IPAB4P1bZYB/iwzwJfE3Sz/vJunr2Wjg/+FeD/468NfwZS9z9b9z9T0M+KUKf5HCn6/w5yj8mQp/msKfrPAnZOM3gt8IfiP4jeA3JvGHGPjtnOA7uX4n+E7wneA7uX5nHnwX1+9iAC4G4GIALvBdCt/dScUA3OC726vMATiMwPeUq8pUpeYAjEpUxZl8RTk5skoPwG8vnHUALdXSKMbE98jo2B4TX98tI6K7ZHhkpwwL75ChoR3gb5fB2jYZFNwqAwNbDPz+/s3S37cJ/I3gc/Ue4N3rjKvvDXwvftr1VPC/c/U9LFffTV29ic/VN4DfMEs6N4DfMJ3AbwC/AfwG8BvAbwC/gWe/AfwGK/5wE78R/EauvxH8RvAbuf5G8BtT+L3NATgZgJMBOMF38s3facW3DMDFAFzguzoaFbkYgEvhG4HvrlCVqywDILtRicoyAG9RTg6z1ADS2ZuWdxC2pgXa0Oj4bhkV2wX+Lhmh75Th0R0yLAJ+eLsMCW0Df6sM0rbIwCD4AeD9wPuA922Qvt714K+TPzzAu9cY8L34Td/Tlbn6Hs7k1S82rr6b5eq7NiTxZyv8GRb8KQp/Yn78BvAbwG8Av2Eogd8AfgP4DeA3JPG5fmMAfxD4jeA3gt8IfiPX32gOoCQ5ACcDcILvBN8JvvMXMzWANL5RpYoBuCpU5WbJARiVGtndJZmSA0hXlJMjMwKypbNn8jWXLZO/DaUGMDK+U0bEdshwHXgaGgU+Anx4qwwObTHxtc0yILhJ+gc2Sj//BgO/j2+d9PGuBX8N+Fy9e6XC5+pdyw34HnzD7+40r76b5eq7GlefxJ9pwZ+ajV8Pfj349eDXg18Pfj349SMYQC7+oAx+A/gN4Ddw/Q3gN4DfAH6DBb+R628EvxH8RvAbOxsVN6YGAL6zo1GRkwE426vAd7bLPwBXmarUyO6yDMBdbKkou+QALNnS2c28LWXLHkFL5Q5hRBz82Hbwt8lQGhIFPgJ8GPjQZvA3yQBto/QPbpB+AfD9wPuA966h1dLbs8rAT8L3BP531zKFvxj8RQp/PvjzFL559Sa+efW/1oNfD349T359Cn+cBX9UBr8e/Hrw68GvB7+ez/168OvBrwe/Hvx68Ot5+uutAwDfiAE0cP0NDKCBATQwgAaF3/iLigE0gt/YQQV+Y6UZA3AYge8sV5VlDcCeGkC6YktFZukROLKypbNnRtBcyQG0pkKDGB7fJsNiW8HfIkNocBT8CPBh4EPAaxtM/OB66RtYK338wPtWg78KfK6eerqXg78MfOBdSwz47vyu7+Y0r/63JDxf9LpannwDvz6Jn4SfbMEf3zJ+Hfh14Ncl8Qem8Sss+OVJ/Hrw68Gv5/rrwa8Hv57rrwe/Hvx6E98YQAMDaAC/AfyGjkZFDeA3tDczBtDOyNFYoSo3Sw7AqNTIblSSKd8A0jmysqVKDqCljBHYWq65YQyLb5GhsST+ZhlMg6KbZGBkowwIAx8CXlsP/joTPwC8H3jfSuntTeKvMPB/dy8Ffwn4XL0rib8AfPPqM/iz0k++iT/Vgm9evYFfB34d+HWjCfw68OvAr+Pbfl0Ofh34deDXgV8Hfh34deDXgV8Hfh34deDXgV8Hfp0VXw2gHvx68Ot/UTGAevDrO5gZA6hUtTNyNFSo1AAay1SlRnajkkzOYktFORUYgMvefOkh2JqvpXEMjW+WIbFN4G+SQfpGGRjdIAMi4IeBDwGvrZW+wTXgrwIfeOrlWyG9vFy9Z5nCXww+8K6FGXznXPCB5+ediW/Cd1ZP/q/qyU/j14034DvWjcnBH94Uvxb8WvBrwa8Fvxb8WvBrwa8FvzaDX2bFp5I6BlAHfh34dVx/HfhG4NeBX9fRqKguOYD2qkoV+PUVqnJzAA1llkqN7A0lmRqLcyrKLjkAS7Z09kzNjsFWOHcrGhLfKINjG8HfIANpQHS99I+sk35h4EPAa6ulTxD8QBIfeN9yWiY9vcB7uHp3Eh94F/Cu+eDPU/jANwLPb/sMvgn/q3ryDfy6JP64PPhcfS34teDXgl8Lfm0r8WvBrwW/FnwjBlDLAGrBrwW/FvzazkbFteDXgl/bySyFbwR+XaWqnZGjzjIAozJVqZHdqMTMGEFxTkXZNTrS2bKyZ3I2l83M9YMNjm+QQbEk/noZoK+T/tG14K8BH3htFa2UP4LgB8D3A+9bCv4S8IH3LGIAKfx5BLxzDqXwZ4BvXn02/kQyrz4bf5R0qOXqa5viV6bwa/jCVwN+Dfg14NeAXwN+TW8Cv6aniqe/Bvwa8GvArwG/BvyaLioGUAN+zS9mxgA6GhXVgl/bXlWpAr9WDcCoXFWmKjWyG5WYGUMotlTUtAZHOltW9kyNzWUzc7ay3AEMiq+XgbF14K+V/voa6RdZLX3DwIeAT+JrK6R3kKsPgO8H37dYfvcC71kI/gLw51vwgXfOAn9mDr4J/6u6+mz8McTV1xbArwG/Bvyaga3A79UCftcc/NQAOqnAr+mgAr+mUtXOyFFboSpXlVkqNbIblWRGUFdsqahp9Y50tqzsmRqay2bW2MpyBzEwvlYGxNaAv1r6RVdJ38hK6RMGPrQC/OXSW1smvYLAB5YwAPB94HsXMID50t1twndzcfUuhe8EvnE6mVffFN+E76SuvmNtHvyaYWn4yppB2fjV4Ff3JfCrwa/ubVRWDX41+NU8/dXgV4NfDX71b0Yl1eBXg1/d2ai4Gvxq8Ks7qbj+auCN2qsqzZL4RhWqclWZqtTIblRilhxBbXFORU2rc6SzZWXPVN9ctkwNrcw6iAHx1dI/tkr66SulbxT8CPDh5QxgGfhLpZcGfHAxA1gkv/u5eh9X7wXfA77bhP/NlYSfmQcf+IZJ4JtX3zy+Cd++ZmhT/Grwq1vA/w7+d/C/g/8d/O/dVOB/B/87+N87q8D//osK/O8djYq+d1BZ8KvbGTmqK1TllspUpUZ2o5LMCGqKcyrKCfjaTLas7NnVFcqWXX0rS42hfxz8GPgMoE8U/AhXHwY/lMH/PbAQfK7eB7x3HvhzTXy3wnfNAB945zTwgW/k6hX+L03wzSe/o4LvYLn6LPxq8KtN/HZW/O/gfwf/e2+jsu/N4H8D/xv437qowP8G/rdfVJ1UOfhGlSrwjSpU5aoyS6VG9u8lZtWpii0V5clhjkBlS2dvWm2hbE2ra2XJIfSLgx9bIX10rj4KfGQpA1givUJcvcbVB8EPgO8H3we+d4508wDvngX+TBPfZeJ3dqbwufoG4BsUfL159Xnxa3Lwq/Pgfwf/ewH8b+B/A/8b+N/A/9ZNVQj/1yb4xd+AN2qvqlS1M3J8q1CVWypTlRrZjUrMjCEU51SUJ4c5ApUtnT1/+YZRY8tfbSvrG18ufWLL5A8d+OgSBrBYeoUXSc8Q8NoCBjBfegSA989lAOB7wfeA755pwHd1cfVJeOcU8Ln6xjz49T+I/z0P/jfwvyXh8+HTV/C/gv+1qwr8r+B/Bd4I/K+dVB2Nir52UIH/tVLVzsjxtcJSuarMUqmR3agkM4JvxTkV5clhxhBsWdmbL2sYtsLVtKI+cfBj4OvgR8GPgB8GPwS+Bn4Q/MAcBjBbuvmA985kAFy9W+G7FL5T4Tcq/AYFX6/g+YnXUcF3sDz57S3wlQY8fc/B/wb+tzz4X8H/Cv7X7ioTvzSF/wX8L51V4H/5RQX+l45GRV86qNqrKlXtjBxfKlTllspUpUZ2oxJzAOmKcyrKyZGV7Zs1e8ulB2FrueZG8kcc+NhiBrBIekUXSs8I8OH5DGCe9NC4+iD4AfD9VnwTvosLeNdk8E34XxuT8OPz49e1Al/Bp/G/5cH/miwP/hfwv4D/JQnfEr4awGfgjdqrKlXtjByfKyyVq8oslRrZjUrMERgV51SUJ0dWtmRfU9lb3zdb68s3jj/i4MfA18GPgh8BP6zwNfCDs8AH3jeDAXD1HvDdOfhOhd+Yg1//I/hJ+Bz8r+Cn4RX+F/C/dFdZ8D8nA/9zZxX4n4H/lKyTqqNR0SfwP7VXVaraGTmMKlTlqjJLpUZ2o5KcinMqyu5zMkdWNmtf7G3IZva1jaVG0Tu+UHrFFkhPHfjoPAYwV3qEgddmE/gB8P3g+8D3gu8B353En0TAOycQ8I3jwAe+YQz4wNeb8B3rTPgOtcNaid83g/81g1+ewv9i4pel8D+D/xn8JPynZOB/6qwC36gA/sdk7VWVqnZGjo8VqnJLZZZKjexGJZaK81TUtE+OrGzp7K3rcypb0760oV5x8GPzGQD4UfAj4IcUfhD8wHQGME26+oD3TgGfq3crfJcFv7EAfp3CrzXh2xs/8fLgW66+Cf6XJHwO/meF/wn8T3nwPwJvBP7HTqqORia8Bf9DpaqdkeNDhaVyVZmlUiO7UUlOxTkV5cmR6SPoWdnbGIiffrDkWHrGwY+Br4MfBT4yiwHMlG4aVx8EPwC+H3wf+J48+E4LfoPCr28O34QviG/A5+L/bvYZ/CT8p2Q5+B+7qEz8kjS+GsCHjirgjdqrcvDfJ6tQlVsqs1RqZDcqyak4p6I8ObKypfqQzN7GbE372IZ6xufK77E50kMHPwp+GPwQ+Br4QfAD4PvB94LvmcgAgHeNJ+CdY8EHvnE0+MA3jGwVfuonXrP4Xyz4nxX+pxz8j0n4HPwPvxoVf/hFlYP/Pll7VaWldkZp/HfllsoslRrZjUpyKs6pqECOrGxZ2TO9b022lvvQTL/HwY/NZgDgR8EPgx8CXwM/OIUBTOb6uXov+B7w3QrfBb5T4Tem8EcQ8HXDaKiJX6vwa3Lx++XB750f/1MKv5vZxxz8D8ny4L/vpAL/fQ7+u2SVqnZGjncVlhT+2zJLpensRiWWivNUlCdHVrYm2Qv3Ll+2Hys1jh5x8GPg6+BHpzOAaQxgqnTVwA+C7wffB743D77Tgt+Qiw987eBm8NWXva8W/C8WfAM+B/9jBr/0Q1cFb8F/D/77X1QW/Hd87r/roLLgv03WzsjxtsJSuSXg36QqNbIbleRUnFNRgRxZ2bKy/0A2s7c/WI/4TOkemyHddPAj4IfBD4GvgR8A3w++D3wP+G6F77LgN1rw63PxB6XxK1vE75WD3yOD/9GC/yEH/31nAz4L/10nVUcV8G+TtVdl4xe9YQBvKlTllpriO16Db1Riqbhpr4oK5MjKlpW9cK8LZWu5N83UPT6DAYCvgx8BPwx+CHxtEgMA3w++F3wP8O4x4APvGsUARmbwGyz4dQq/NolvwjfF75Mf/3MO/kcL/gcL/vsuKgv+u19UCv9tR5UF/02ySlW7dAb861TlZq/Kcio1shuV5FSc3ctkRXlyZGVrkr2N2bJ79QN1j4MfA1+fygDADyv8IPgB4P3jGAD4HvDdFnwn8I3DwR9m4tfnwa9J4vc3/gkdA/975vO+IufLnoH/KQ/+Bwv++xz8d78apfHfdlJZ8N90UPAK/3WqdkaOVxWWyi0p+JfJSo3sRiU5FWf3IllRgRxZ2bKy/0C2H8s6mm5x8GPg6+BHwA+Dr02QzsHxDAB8H/heC77Lgt8IfMPQDH5dK/C/tYD/sRX473Lw31rw33RUWfBftzfRX6VqZ5SGf5ms3FKZJfBfmNmNSnIqzu55sqI8OZpky8r+A9l+vm5x8GPg65MZAPgh8DXwg+AHxjIA8L2jGYCJ38kFvtOKD3z94Ax+rcKvSeL3y4Pfuxn87k3x31vw31nw3/6q4BX+mxz81x1M+FftLfD0sp2RiW7Bf5GqzJIF/3mykpyKm/asqECOrGxNsv9Atp/vtzj4MfCjE6VLBPwQ+Br4QfD94PvA94DvVvgu8J3gN4LfkMIfZNQEv7pvC/i/N8VPX70FPw3f2YA3U/hvLPivkwH/qoOCV72sVJn4RS8YwIsKlQX/eVlOpUYG/rOSPBVn97SoQKA/yc6Wlf0Hs/18v8XB17n86AQGAH4IfA38IPh+8L3ge8B358FvAL/egl+bB//7D+C/z4P/Ngf/jQU/Cf8qmQX/ZSqF/6JdujT+82TllkB/lqo0nf2ZGsBTa4A/ya0of48dWdmaZG97j5LZfr6u8UkMAPwo+JFxDAB8DfwA+H7wveB7FL4LfCf4jUMYgMKvB77Ogl+Twu+Tg9+rbfjvCuC/seC/7qTgTfzilx0s8PSiUqXwn7dT6Kpn5ZYs+E9L09mfJCvJSYE/tlaUv0eOJtmaZM/fw+aytb0Heeoa5+nXwY+CHwE/NIYBgB8A3w++F3y3wneB7wS/EfyGHPxaC361Bf/bT+C/teC/seAb8Bb8lxb8F6kU/vN26Uz0VBb8p2VmT5KVpjPwH5fkSaE/slaUv4eOrGzJHlizt637qWx/T13iE9QAwA+DHwJfG8UAwPeNYADgu4cxgBz8BuDrga+z4NdY8L9b8L/+BP4bC/7rXxS8wn9pwX9hwX9eqVL4z9pZ4OlpudmTcoVu6XFpOvtjNYBH1izoD1MVmT3IzdEk2/3c7M13r1C27O7+YF3i4OtcfxT8MPgh8IPgB8D3ge8B3w2+C3wn+I0mfvsUfh34tRb86gx+hRX/S/Zv/Dbhv87Bf2nBf5HEVwN4bsF/VmnAmyXR6UmFQrfgP7YG/CMzu5FCf5gK7Ae5WcDv5+bI7h7gWQF5t43dSWX7e+oSB1/n+o0BgK+BHwTfD74PfI/Cd4HvBL8R/IYB6vot+DU5+N9y8D9n45dZ8d8p/LcK/00O/qs8+C8s+M8t+M8s+E+TpeAV/mNrCv5RWRrewH9YaoI/yA3w+7lZwO9Zuutoks3aHYcFs4Vu58tmdusn6xwHXwc/yvUbAwA/CL4ffC/4HhO/gwt8J/iNwBsD6M8AwK818c3rB/+7Bf+riV+ehd8tD34XKW0J/6XCf2HBf67wn7XPwD+tNOGfJFPwj1Mp+EflCl0FuNED4I0U+H1rFvR7qZLQBQI4N1uq26ksoLda2c1kth/vRk6d4+Dr4EfBD3P9xgDA9w9lAOC7W8Cv7aOu34L/LQ/+pzz47wvgv6ZXzeA/z4P/VPWkXboMfIVCt+A/VD0oM+CN7oNvZIG/V2Ji381XEjpfgN+2dAvsJllBW9ENawrv+k90TfVrfDQDAD8Kfhh8jetXA+igBtBeDaDSGAD49eDX5eBXg/89B//LT+K/VPgv8uA/U/hpeAv+Ywv+Iwv+w3ILuup+aToD/55Cv5vKAn7HmsK+rbplzZHpJth5y0Wl663omj2D15quttCvcfD1kQwA/PBwBgB+AHwf+F7w3eC7uH4n+I3gN4BfD35dH2MAFTU5+N/A/6rwP1vwP7YevyQf/nMTv/hZDv4TC/5jhf+oItNDBf+g3IKeSuHfA/5uqQWd7qSyoN9W3Spq2s1UjuxugJ3qeqpCsM10NZUF70obulwgcwDgR8APga/x9AfA9/H0exS+C3yniV+ZD7+6lxpAHvxP/wL8p+0t8JVp+KJHyVLwFRb48hz4MgPdcdcsjX8npzR4blZw1Y0iA9voeiabtWupCuGqrjRXHsRLbehiTr/ER6YH0DEEvgZ+AHwf+B4LfiP4DX0t1w9+TR78rz3Mf+Wugd89g/8h81Ov9F0L+C8U/vOOaXgD/2kO/uNKC7zCT8I/qMjA3y+3oKvuZvAdd0ot4KpbJdngN61Zwem6NQV/LVMa/WqqFoAvW7qUr2YwL7Sh86pf4uDrXH9kmGUAgxgA+J4BDAB8Zz9jAO2MAYBfB34t+DW9jAGUfwf/2++W6+9uefpbif8yH37HbPwn7S3wOfhp+AoLvMpAT2Wip7LfLrWgW/Bv5nSjOA84XUtlgb9qZruSpxaBVRctXbDWDGZz/ZWnKmMA4OvgR8APgR/k+v1cv5cBuLl+NYB2jbn4vbPxv6Wuv7vl6c/+Z/XMp/9n8Ntn8NPw9MCCnwVfboEvy4J3JOFvlWbQb1pLgdP1VLngqqsqcHOzXVZdStVaZEvnrbWAWtWK/sypkzEA8CNDGAD4QfD94HvBd4Pv4vqd4DeAXw9+XW/L9YP/PQf/cw7+hxz8t23Af9rBAq/wHxXAv1+RA2/Bv6O6bcI7blnwrfA3SnLQ6VqqXHBrgF9WXTKzWbuYqjXIlv6yVGVvPeq5FjprqVN8WHoAHYwBgO/n6feC7wbfBX4j+A1/WAYAfg346QGA/7W7un6F/zEXv0vr8J+1At+AV/j3LaXhyzPoBnyZgZ7KfrM0B52ul+RBVzUBp8uqS47sLlrAL1hrBXRVgf5M1QbYZGdyOp2nTnHwda4/An6I61cDqPRYrl8NoKI+P37m+rsZA8jCf9/F8rmf/YWvJI3fqQl+cSvwi9LwFRl4K74Bb8G/aZaGv24pC1x1pbgp+iVrJrjRhUwG+HlrhS66APS5fP0AbqpTOZ20ZA4A/Ahf/DTwg1y/D3yPun4n+I3J6we/rpcxgHJjAOB/72G5/m6W6++qBtCl6Ze+tuI/UvgPKxU83W9n4hvwFvw75TnwZVnwjhvgJ8uCT2VFV13Og35RdaEoC91+3iyN/pelghddAPus6oyl1uCebKYTOR1XdYwPSQ+gfXIAAfB94HvAd4HvBL+ht3n9xgDAr8mDb1x/U/yCn/vN4T9uI/4dVRZ8WRa843oSvjQHna6WZMNfVl0qLoBuwT9v6S8zW1VOzWGfzYN9Ok+tQc6Hm69jOXWMg69z/WHwtQF5B1BhDAD8OoWvrr/sW3fL9Vs+9z90UQNoBf7zVuLfV6XhKzLwufg3y7Lg0/i58FdKsuEvWcqHfj5VNrq9yswEV51L1VZs1UlrbUC24h7N6UiesgcAfgB8H/hu8F1cfyP4DeDX98xcfzXX/727GkDy+n+zXH8e/Dd5vvQ1we/QFP9BK/Bv061yC3xZFryBf63Ucu0p+JKca0/BFxdAp79UVY7sssBVZx0/iK06oTpubz3ykQIdtnQop45x8HXwwwMyA/BmBlCRGkDy+mvBr+lhuX7wv/xmDCD99BsDsPwrePN97reE/7AZ/DsVGfi8+GUZ/GtmTeFLsuEvpuCLm0FPZYIbncuURj+j+mHsnFoL3RxyqoOWDqg6pAfQnwGAH+jLAMB3c/1O8BvN6y+v+90cQPr6u6UHkPzf0W96/Zl/Tj/7S19T/OKW8IEvysW/pcqCL8uCd1wtbQp/qSTn2i2dL86Gr7L0Z1ETdPtZswy6pULgzWKrjqqO2NsOnQ852f4CdYgPZAADjAFUJgfg5/q94LvAd4Lf2DMzgOT1V4OfGoBx/V3VALpYrj/zr+BN47/M81v/ieVzPx/+vVbgp+HLMvAp/CbwqrzwxXmuXcGfS5VBtwNuP52LrmoNeF7snA7b2wZdCHmfpb2W9qgBtI9y/WHwNa7f3yd7AA3g1yevv4cxgLLq1PX/Zrn+LvmffuP6O2U//Xnx27eMf7vCAt8MPvCOK0n80jzwJU3RDfjiZtDpbFEWujUTPKd86C2BH1YdspaD3dJFF0LO125Vh/gAYwCVagDt/OB7wHeB7+T6G35Xz39yAMnr75YeQPL/KldmAJ0LX39z3/gftbd84au04LdrHf61six4A/9yDr4BX1IAvrh5+DNFTeFBt2eBq447mqK3CZwOqg7YC2Pnu+jmkJPtsrTTUodYcgDgh7n+YJ/sAfD8lxsDAL+2u3n9xgCS19/V+L/MVfDpV9ef/fRn8ItbgV+UDz/r6pviO5L4TeBLCsAXq8/23GtX8KeLmqCnykZXNXflrQKn/al+EDsf9I4Cbaf2sf7mAEJqAL7eDAB8F9ffCH59D3MAyeuvBv/7b5br75K+fuN/T/+d+b+2ZV5/HvxnzXzps+LfycG/mcIvz8a/WpYF77hU2hTeip8Fr2py7Sl4OlXUBN7eBF111NE69ILgqn2qtmDvbAF7u6Vtqq2qzADAD/5hDKDCbQ6gPDWA5PXXdDMHkLz+r10tA8jz9L9Ofe7n/LN7hb70tQX/Whvwz6vywhdnw5/OgT9ZlIVuP54pG52OOLLRm7vyguCqPfafu+xcaCv2ljy1j4Ef7WsZAPhurt8JfmOP7AEkr/+bwv+s8Ft7/blP/8NWPPst4St4Az8vfEkB+OIW4IvywtuboKsKoee78rzglnbb8193a7C3toC9WbXJUmYA4Ae5fusAGpLPP/i13SzPf3IAXTLX/yEH/3Whpz/P5376d34ufkUG/3oO/pV8+KUt46fhi5uHP1GUDX9M1QRddcjxc+i7VbtUhcCbe8Zbi71RtcFS+xj4Ua4/OYAAA/AmBwC+s0fOANT1pwfQ2RhA9vV3Utdv+RdzNvnWn/Ol767l6W8rPvCOC6V54EsKwNPp4mbg6XhRBv6o6ohZNrqqNeh7WkKnHal+4Lpbi51qvaXKrAGA7+X6XakBgF8Hfs1vlgF0ST//qf/TbCXvLNf/Kv/T3+LnfnP4V/9m/ILwRRn4I5aaoKvaim4Fz0JXWdHbct2twV5naa1qjU3+HwuefjlXE4+yAAAAAElFTkSuQmCC",yle=0,mD=(n,e,t,i)=>{if(!n[t]){let r=n.useDelayedTextureLoading;n.useDelayedTextureLoading=!1;let s=n._blockEntityCollection;n._blockEntityCollection=!1;let a=ge.CreateFromBase64String(e,i+yle++,n,!0,!1,ge.BILINEAR_SAMPLINGMODE);n._blockEntityCollection=s;let o=n.getEngine().getLoadedTexturesCache(),l=o.indexOf(a.getInternalTexture());l!==-1&&o.splice(l,1),a.isRGBD=!0,a.wrapU=ge.CLAMP_ADDRESSMODE,a.wrapV=ge.CLAMP_ADDRESSMODE,n[t]=a,n.useDelayedTextureLoading=r,ju.ExpandRGBDTexture(a);let c=n.getEngine().onContextRestoredObservable.add(()=>{a.isRGBD=!0;let f=n.onBeforeRenderObservable.add(()=>{a.isReady()&&(n.onBeforeRenderObservable.remove(f),ju.ExpandRGBDTexture(a))})});n.onDisposeObservable.add(()=>{n.getEngine().onContextRestoredObservable.remove(c)})}return n[t]},Xx=n=>mD(n,Ile,"environmentBRDFTexture","EnvironmentBRDFTexture"),pD=n=>mD(n,Mle,"environmentFuzzBRDFTexture","EnvironmentFuzzBRDFTexture"),RX=n=>mD(n,Cle,"openPBREnvironmentBRDFTexture","OpenPBREnvironmentBRDFTexture")});function bX(n){return class extends n{constructor(){super(...arguments),this.REFLECTION=!1,this.REFLECTIONMAP_3D=!1,this.REFLECTIONMAP_SPHERICAL=!1,this.REFLECTIONMAP_PLANAR=!1,this.REFLECTIONMAP_CUBIC=!1,this.USE_LOCAL_REFLECTIONMAP_CUBIC=!1,this.REFLECTIONMAP_PROJECTION=!1,this.REFLECTIONMAP_SKYBOX=!1,this.REFLECTIONMAP_EXPLICIT=!1,this.REFLECTIONMAP_EQUIRECTANGULAR=!1,this.REFLECTIONMAP_EQUIRECTANGULAR_FIXED=!1,this.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED=!1,this.INVERTCUBICMAP=!1,this.USESPHERICALFROMREFLECTIONMAP=!1,this.USEIRRADIANCEMAP=!1,this.USE_IRRADIANCE_DOMINANT_DIRECTION=!1,this.USESPHERICALINVERTEX=!1,this.REFLECTIONMAP_OPPOSITEZ=!1,this.LODINREFLECTIONALPHA=!1,this.GAMMAREFLECTION=!1,this.RGBDREFLECTION=!1}}}var IX=C(()=>{});var _D=C(()=>{Ws();Pt();hs();bt.prototype.restoreSingleAttachment=function(){let n=this._gl;this.bindAttachments([n.BACK])};bt.prototype.restoreSingleAttachmentForRenderTarget=function(){let n=this._gl;this.bindAttachments([n.COLOR_ATTACHMENT0])};bt.prototype.buildTextureLayout=function(n,e=!1){let t=this._gl,i=[];if(e)i.push(t.BACK);else for(let r=0;r1&&(e.depthTextureFormat===13||e.depthTextureFormat===17||e.depthTextureFormat===16||e.depthTextureFormat===14||e.depthTextureFormat===18)&&(o=e.depthTextureFormat)),o===void 0&&(o=s?13:14);let M=this._gl,D=this._currentFramebuffer,O=M.createFramebuffer();this._bindUnboundFramebuffer(O);let V=(X=n.width)!=null?X:n,N=(Y=n.height)!=null?Y:n,F=[],U=[],W=this.webGLVersion>1&&(o===13||o===17||o===18);y.label=(fe=e==null?void 0:e.label)!=null?fe:"MultiRenderTargetWrapper",y._framebuffer=O,y._generateDepthBuffer=a||r,y._generateStencilBuffer=a?W:s,y._depthStencilBuffer=this._setupFramebufferDepthAttachments(y._generateStencilBuffer,y._generateDepthBuffer,V,N,1,o),y._attachments=U;for(let se=0;se1||this.isWebGPU);let Tt=this.webGLVersion>1,Ye=M[Tt?"COLOR_ATTACHMENT"+se:"COLOR_ATTACHMENT"+se+"_WEBGL"];if(U.push(Ye),ue===-1||I)continue;let Ke=new Fi(this,6);F[se]=Ke,M.activeTexture(M["TEXTURE"+se]),M.bindTexture(ue,Ke._hardwareTexture.underlyingResource),M.texParameteri(ue,M.TEXTURE_MAG_FILTER,Ze.mag),M.texParameteri(ue,M.TEXTURE_MIN_FILTER,Ze.min),M.texParameteri(ue,M.TEXTURE_WRAP_S,M.CLAMP_TO_EDGE),M.texParameteri(ue,M.TEXTURE_WRAP_T,M.CLAMP_TO_EDGE);let he=this._getRGBABufferInternalSizedFormat(ie,Pe,_e),we=this._getInternalFormat(Pe),Vt=this._getWebGLTextureType(ie);if(Tt&&(ue===35866||ue===32879))ue===35866?Ke.is2DArray=!0:Ke.is3D=!0,Ke.baseDepth=Ke.depth=be,M.texImage3D(ue,0,he,V,N,be,0,we,Vt,null);else if(ue===34067){for(let re=0;re<6;re++)M.texImage2D(M.TEXTURE_CUBE_MAP_POSITIVE_X+re,0,he,V,N,0,we,Vt,null);Ke.isCube=!0}else M.texImage2D(M.TEXTURE_2D,0,he,V,N,0,we,Vt,null);i&&M.generateMipmap(ue),this._bindTextureDirectly(ue,null),Ke.baseWidth=V,Ke.baseHeight=N,Ke.width=V,Ke.height=N,Ke.isReady=!0,Ke.samples=1,Ke.generateMipMaps=i,Ke.samplingMode=pe,Ke.type=ie,Ke._useSRGBBuffer=_e,Ke.format=Pe,Ke.label=(Fe=R[se])!=null?Fe:y.label+"-Texture"+se,this._internalTexturesCache.push(Ke)}if(a&&this._caps.depthTextureExtension&&!I){let se=new Fi(this,14),pe=5,ie=M.DEPTH_COMPONENT16,_e=M.DEPTH_COMPONENT,Pe=M.UNSIGNED_SHORT,ue=M.DEPTH_ATTACHMENT;this.webGLVersion<2?ie=M.DEPTH_COMPONENT:o===14?(pe=1,Pe=M.FLOAT,ie=M.DEPTH_COMPONENT32F):o===18?(pe=0,Pe=M.FLOAT_32_UNSIGNED_INT_24_8_REV,ie=M.DEPTH32F_STENCIL8,_e=M.DEPTH_STENCIL,ue=M.DEPTH_STENCIL_ATTACHMENT):o===16?(pe=0,Pe=M.UNSIGNED_INT,ie=M.DEPTH_COMPONENT24,ue=M.DEPTH_ATTACHMENT):(o===13||o===17)&&(pe=12,Pe=M.UNSIGNED_INT_24_8,ie=M.DEPTH24_STENCIL8,_e=M.DEPTH_STENCIL,ue=M.DEPTH_STENCIL_ATTACHMENT),this._bindTextureDirectly(M.TEXTURE_2D,se,!0),M.texParameteri(M.TEXTURE_2D,M.TEXTURE_MAG_FILTER,M.NEAREST),M.texParameteri(M.TEXTURE_2D,M.TEXTURE_MIN_FILTER,M.NEAREST),M.texParameteri(M.TEXTURE_2D,M.TEXTURE_WRAP_S,M.CLAMP_TO_EDGE),M.texParameteri(M.TEXTURE_2D,M.TEXTURE_WRAP_T,M.CLAMP_TO_EDGE),M.texImage2D(M.TEXTURE_2D,0,ie,V,N,0,_e,Pe,null),M.framebufferTexture2D(M.FRAMEBUFFER,ue,M.TEXTURE_2D,se._hardwareTexture.underlyingResource,0),this._bindTextureDirectly(M.TEXTURE_2D,null),y._depthStencilTexture=se,y._depthStencilTextureWithStencil=W,se.baseWidth=V,se.baseHeight=N,se.width=V,se.height=N,se.isReady=!0,se.samples=1,se.generateMipMaps=i,se.samplingMode=1,se.format=o,se.type=pe,se.label=y.label+"-DepthStencil",F[l]=se,this._internalTexturesCache.push(se)}if(y.setTextures(F),t&&M.drawBuffers(U),this._bindUnboundFramebuffer(D),y.setLayerAndFaceIndices(S,A),this.resetTextureCache(),!I)this.updateMultipleRenderTargetTextureSampleCount(y,c,t);else if(c>1){let se=M.createFramebuffer();if(!se)throw new Error("Unable to create multi sampled framebuffer");y._samples=c,y._MSAAFramebuffer=se,l>0&&t&&(this._bindUnboundFramebuffer(se),M.drawBuffers(U),this._bindUnboundFramebuffer(D))}return y};bt.prototype.updateMultipleRenderTargetTextureSampleCount=function(n,e,t=!0){if(this.webGLVersion<2||!n)return 1;if(n.samples===e)return e;let i=this._gl;e=Math.min(e,this.getCaps().maxMSAASamples),n._depthStencilBuffer&&(i.deleteRenderbuffer(n._depthStencilBuffer),n._depthStencilBuffer=null),n._MSAAFramebuffer&&(i.deleteFramebuffer(n._MSAAFramebuffer),n._MSAAFramebuffer=null);let r=n._attachments.length;for(let a=0;a1&&typeof i.renderbufferStorageMultisample=="function"){let a=i.createFramebuffer();if(!a)throw new Error("Unable to create multi sampled framebuffer");n._MSAAFramebuffer=a,this._bindUnboundFramebuffer(a);let o=[];for(let l=0;l1?"COLOR_ATTACHMENT"+l:"COLOR_ATTACHMENT"+l+"_WEBGL"],d=this._createRenderBuffer(c.width,c.height,e,-1,this._getRGBABufferInternalSizedFormat(c.type,c.format,c._useSRGBBuffer),h);if(!d)throw new Error("Unable to create multi sampled framebuffer");f.addMSAARenderBuffer(d),c.samples=e,o.push(h)}t&&i.drawBuffers(o)}else this._bindUnboundFramebuffer(n._framebuffer);let s=n._depthStencilTexture?n._depthStencilTexture.format:void 0;return n._depthStencilBuffer=this._setupFramebufferDepthAttachments(n._generateStencilBuffer,n._generateDepthBuffer,n.width,n.height,e,s),this._bindUnboundFramebuffer(null),n._samples=e,e};bt.prototype.generateMipMapsMultiFramebuffer=function(n){let e=n,t=this._gl;if(e.isMulti)for(let i=0;i1?"COLOR_ATTACHMENT"+a:"COLOR_ATTACHMENT"+a+"_WEBGL"],t.readBuffer(r[a]),t.drawBuffers(r),t.blitFramebuffer(0,0,o.width,o.height,0,0,o.width,o.height,i,t.NEAREST)}for(let a=0;a1?"COLOR_ATTACHMENT"+a:"COLOR_ATTACHMENT"+a+"_WEBGL"];t.drawBuffers(r),t.bindFramebuffer(this._gl.FRAMEBUFFER,e._MSAAFramebuffer)}});var Kx,MX=C(()=>{Gr();cf();_D();Kx=class extends Or{get isSupported(){var e,t;return(t=(e=this._engine)==null?void 0:e.getCaps().drawBuffersExtension)!=null?t:!1}get textures(){return this._textures}get count(){return this._count}get depthTexture(){return this._textures[this._textures.length-1]}set wrapU(e){if(this._textures)for(let t=0;t0&&(this._createInternalTextures(),this._createTextures(a))}_initTypes(e,t,i,r,s,a,o,l,c,f){for(let h=0;h{this.onAfterRenderObservable.notifyObservers(t)})}dispose(e=!1){this._releaseTextures(),e?this._texture=null:this.releaseInternalTextures(),super.dispose()}releaseInternalTextures(){var t,i;let e=(t=this._renderTarget)==null?void 0:t.textures;if(e){for(let r=e.length-1;r>=0;r--)this._textures[r]._texture=null;(i=this._renderTarget)==null||i.dispose(),this._renderTarget=null}}}});var CX,Ple,yX=C(()=>{G();CX="mrtFragmentDeclaration",Ple=`#if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE) layout(location=0) out vec4 glFragData[{X}]; #endif -`;S.IncludesShadersStore[gX]||(S.IncludesShadersStore[gX]=lle)});var EX,cle,Ux=C(()=>{k();EX="pbrFragmentReflectionDeclaration",cle=`#ifdef REFLECTION +`;T.IncludesShadersStore[CX]||(T.IncludesShadersStore[CX]=Ple)});var PX,Dle,jx=C(()=>{G();PX="pbrFragmentReflectionDeclaration",Dle=`#ifdef REFLECTION #ifdef REFLECTIONMAP_3D #define sampleReflection(s,c) textureCube(s,c) uniform samplerCube reflectionSampler; @@ -10753,12 +10753,12 @@ varying vec3 vDirectionW; #endif #endif #endif -`;S.IncludesShadersStore[EX]||(S.IncludesShadersStore[EX]=cle)});var SX,fle,oD=C(()=>{k();SX="sceneFragmentDeclaration",fle=`uniform mat4 viewProjection; +`;T.IncludesShadersStore[PX]||(T.IncludesShadersStore[PX]=Dle)});var DX,Lle,gD=C(()=>{G();DX="sceneFragmentDeclaration",Lle=`uniform mat4 viewProjection; #ifdef MULTIVIEW uniform mat4 viewProjectionR; #endif uniform mat4 view;uniform mat4 projection;uniform vec4 vEyePosition;uniform mat4 inverseProjection; -`;S.IncludesShadersStore[SX]||(S.IncludesShadersStore[SX]=fle)});var TX,hle,Um=C(()=>{k();TX="pbrBRDFFunctions",hle=`#define FRESNEL_MAXIMUM_ON_ROUGH 0.25 +`;T.IncludesShadersStore[DX]||(T.IncludesShadersStore[DX]=Lle)});var LX,Ole,Wm=C(()=>{G();LX="pbrBRDFFunctions",Ole=`#define FRESNEL_MAXIMUM_ON_ROUGH 0.25 #define BRDF_DIFFUSE_MODEL_EON 0 #define BRDF_DIFFUSE_MODEL_BURLEY 1 #define BRDF_DIFFUSE_MODEL_LAMBERT 2 @@ -10931,7 +10931,7 @@ vec3 transmittanceBRDF_Burley(const vec3 tintColor,const vec3 diffusionDistance, float computeWrappedDiffuseNdotL(float NdotL,float w) {float t=1.0+w;float invt2=1.0/square(t);return saturate((NdotL+w)*invt2);} #endif #endif -`;S.IncludesShadersStore[TX]||(S.IncludesShadersStore[TX]=hle)});var AX,dle,lD=C(()=>{k();AX="openpbrDielectricReflectance",dle=`struct ReflectanceParams +`;T.IncludesShadersStore[LX]||(T.IncludesShadersStore[LX]=Ole)});var OX,Nle,vD=C(()=>{G();OX="openpbrDielectricReflectance",Nle=`struct ReflectanceParams {float F0;float F90;vec3 coloredF0;vec3 coloredF90;}; #define pbr_inline ReflectanceParams dielectricReflectance( @@ -10949,7 +10949,7 @@ float maxF0=max(specularColor.r,max(specularColor.g,specularColor.b));outParams. outParams.F0=mix(dielectricF0_NoSpec,dielectricF0,specularWeight); #endif outParams.F90=mix(f90Scale_NoSpec,f90Scale,specularWeight);outParams.coloredF0=mix(vec3(dielectricF0_NoSpec),vec3(dielectricF0),specularWeight)*specularColor.rgb;outParams.coloredF90=mix(dielectricColorF90_NoSpec,dielectricColorF90,specularWeight);return outParams;} -`;S.IncludesShadersStore[AX]||(S.IncludesShadersStore[AX]=dle)});var xX,ule,Vx=C(()=>{k();xX="pbrIBLFunctions",ule=`#if defined(REFLECTION) || defined(SS_REFRACTION) +`;T.IncludesShadersStore[OX]||(T.IncludesShadersStore[OX]=Nle)});var NX,wle,qx=C(()=>{G();NX="pbrIBLFunctions",wle=`#if defined(REFLECTION) || defined(SS_REFRACTION) float getLodFromAlphaG(float cubeMapDimensionPixels,float microsurfaceAverageSlope) {float microsurfaceAverageSlopeTexels=cubeMapDimensionPixels*microsurfaceAverageSlope;float lod=log2(microsurfaceAverageSlopeTexels);return lod;} float getLinearLodFromRoughness(float cubeMapDimensionPixels,float roughness) {float lod=log2(cubeMapDimensionPixels)*roughness;return lod;} #endif @@ -10963,7 +10963,7 @@ float environmentHorizonOcclusion(vec3 view,vec3 normal,vec3 geometricNormal) {v #define UNPACK_LOD(x) (1.0-x)*255.0 float getLodFromAlphaG(float cubeMapDimensionPixels,float alphaG,float NdotV) {float microsurfaceAverageSlope=alphaG;microsurfaceAverageSlope*=sqrt(abs(NdotV));return getLodFromAlphaG(cubeMapDimensionPixels,microsurfaceAverageSlope);} #endif -`;S.IncludesShadersStore[xX]||(S.IncludesShadersStore[xX]=ule)});var RX,mle,cD=C(()=>{k();RX="openpbrGeometryInfo",mle=`struct geometryInfoOutParams +`;T.IncludesShadersStore[NX]||(T.IncludesShadersStore[NX]=wle)});var wX,Fle,ED=C(()=>{G();wX="openpbrGeometryInfo",Fle=`struct geometryInfoOutParams {float NdotV;float NdotVUnclamped;vec3 environmentBrdf;float horizonOcclusion;};struct geometryInfoAnisoOutParams {float NdotV;float NdotVUnclamped;vec3 environmentBrdf;float horizonOcclusion;float anisotropy;vec3 anisotropicTangent;vec3 anisotropicBitangent;mat3 TBN;}; #define pbr_inline @@ -10992,7 +10992,7 @@ geometryInfoAnisoOutParams geometryInfoAniso( in vec3 normalW,in vec3 viewDirectionW,in float roughness,in vec3 geometricNormalW ,in vec3 vAnisotropy,in mat3 TBN ) -{geometryInfoOutParams geoInfo=geometryInfo(normalW,viewDirectionW,roughness,geometricNormalW);geometryInfoAnisoOutParams outParams;outParams.NdotV=geoInfo.NdotV;outParams.NdotVUnclamped=geoInfo.NdotVUnclamped;outParams.environmentBrdf=geoInfo.environmentBrdf;outParams.horizonOcclusion=geoInfo.horizonOcclusion;outParams.anisotropy=vAnisotropy.b;vec3 anisotropyDirection=vec3(vAnisotropy.xy,0.);mat3 anisoTBN=mat3(normalize(TBN[0]),normalize(TBN[1]),normalize(TBN[2]));outParams.anisotropicTangent=normalize(anisoTBN*anisotropyDirection);outParams.anisotropicBitangent=normalize(cross(anisoTBN[2],outParams.anisotropicTangent));outParams.TBN=TBN;return outParams;}`;S.IncludesShadersStore[RX]||(S.IncludesShadersStore[RX]=mle)});var bX,ple,fD=C(()=>{k();bX="openpbrIblFunctions",ple=`#ifdef REFLECTION +{geometryInfoOutParams geoInfo=geometryInfo(normalW,viewDirectionW,roughness,geometricNormalW);geometryInfoAnisoOutParams outParams;outParams.NdotV=geoInfo.NdotV;outParams.NdotVUnclamped=geoInfo.NdotVUnclamped;outParams.environmentBrdf=geoInfo.environmentBrdf;outParams.horizonOcclusion=geoInfo.horizonOcclusion;outParams.anisotropy=vAnisotropy.b;vec3 anisotropyDirection=vec3(vAnisotropy.xy,0.);mat3 anisoTBN=mat3(normalize(TBN[0]),normalize(TBN[1]),normalize(TBN[2]));outParams.anisotropicTangent=normalize(anisoTBN*anisotropyDirection);outParams.anisotropicBitangent=normalize(cross(anisoTBN[2],outParams.anisotropicTangent));outParams.TBN=TBN;return outParams;}`;T.IncludesShadersStore[wX]||(T.IncludesShadersStore[wX]=Fle)});var FX,Ble,SD=C(()=>{G();FX="openpbrIblFunctions",Ble=`#ifdef REFLECTION vec3 sampleIrradiance( in vec3 surfaceNormal #if defined(NORMAL) && defined(USESPHERICALINVERTEX) @@ -11214,7 +11214,7 @@ return getReflectanceFromBRDFLookup(reflectance.coloredF0,reflectance.coloredF90 #endif } #endif -`;S.IncludesShadersStore[bX]||(S.IncludesShadersStore[bX]=ple)});var IX,_le,hD=C(()=>{k();IX="openpbrSubsurfaceLayerData",_le=`float subsurface_weight=vSubsurfaceWeight;vec3 subsurface_color=vSubsurfaceColor.rgb;float subsurface_radius=vSubsurfaceRadius;vec3 subsurface_radius_scale=vSubsurfaceRadiusScale;float subsurface_scatter_anisotropy=clamp(vSubsurfaceScatterAnisotropy,-0.9999,0.9999); +`;T.IncludesShadersStore[FX]||(T.IncludesShadersStore[FX]=Ble)});var BX,Ule,TD=C(()=>{G();BX="openpbrSubsurfaceLayerData",Ule=`float subsurface_weight=vSubsurfaceWeight;vec3 subsurface_color=vSubsurfaceColor.rgb;float subsurface_radius=vSubsurfaceRadius;vec3 subsurface_radius_scale=vSubsurfaceRadiusScale;float subsurface_scatter_anisotropy=clamp(vSubsurfaceScatterAnisotropy,-0.9999,0.9999); #ifdef SUBSURFACE_WEIGHT vec4 subsurfaceWeightFromTexture=texture2D(subsurfaceWeightSampler,vSubsurfaceWeightUV+uvOffset); #endif @@ -11238,7 +11238,7 @@ subsurface_color*=vSubsurfaceColorInfos.y; #ifdef SUBSURFACE_RADIUS_SCALE subsurface_radius_scale*=subsurfaceRadiusScaleFromTexture.rgb; #endif -`;S.IncludesShadersStore[IX]||(S.IncludesShadersStore[IX]=_le)});var MX,gle,dD=C(()=>{k();MX="openpbrTransmissionLayerData",gle=`float transmission_weight=vTransmissionWeight;vec3 transmission_color=vTransmissionColor.rgb;float transmission_depth=vTransmissionDepth;vec3 transmission_scatter=vTransmissionScatter.rgb;float transmission_scatter_anisotropy=clamp(vTransmissionScatterAnisotropy,-0.9999,0.9999);float transmission_dispersion_scale=vTransmissionDispersionScale;float transmission_dispersion_abbe_number=vTransmissionDispersionAbbeNumber; +`;T.IncludesShadersStore[BX]||(T.IncludesShadersStore[BX]=Ule)});var UX,Vle,AD=C(()=>{G();UX="openpbrTransmissionLayerData",Vle=`float transmission_weight=vTransmissionWeight;vec3 transmission_color=vTransmissionColor.rgb;float transmission_depth=vTransmissionDepth;vec3 transmission_scatter=vTransmissionScatter.rgb;float transmission_scatter_anisotropy=clamp(vTransmissionScatterAnisotropy,-0.9999,0.9999);float transmission_dispersion_scale=vTransmissionDispersionScale;float transmission_dispersion_abbe_number=vTransmissionDispersionAbbeNumber; #ifdef TRANSMISSION_WEIGHT vec4 transmissionWeightFromTexture=texture2D(transmissionWeightSampler,vTransmissionWeightUV+uvOffset); #endif @@ -11274,7 +11274,7 @@ transmission_scatter*=transmissionScatterFromTexture.rgb; #ifdef TRANSMISSION_DISPERSION_SCALE transmission_dispersion_scale*=transmissionDispersionScaleFromTexture.r; #endif -`;S.IncludesShadersStore[MX]||(S.IncludesShadersStore[MX]=gle)});var yX={};et(yX,{geometryPixelShader:()=>vle});var uD,CX,vle,mD=C(()=>{k();hc();vX();lx();cx();Ta();Ux();oD();jh();Um();lD();Vx();cg();cD();fD();Zh();dc();fx();hD();dD();uD="geometryPixelShader",CX=`#extension GL_EXT_draw_buffers : require +`;T.IncludesShadersStore[UX]||(T.IncludesShadersStore[UX]=Vle)});var GX={};$e(GX,{geometryPixelShader:()=>Gle});var xD,VX,Gle,RD=C(()=>{G();uc();yX();vx();Ex();ba();jx();gD();qh();Wm();vD();qx();gg();ED();SD();Qh();mc();Sx();TD();AD();xD="geometryPixelShader",VX=`#extension GL_EXT_draw_buffers : require #if defined(BUMP) || !defined(NORMAL) #extension GL_OES_standard_derivatives : enable #endif @@ -11512,8 +11512,8 @@ irradiance_alpha=min(subsurface_weight+transmission_weight,1.0); gl_FragData[IRRADIANCE_INDEX]=vec4(irradiance,irradiance_alpha); #endif } -`;S.ShadersStore[uD]||(S.ShadersStore[uD]=CX);vle={name:uD,shader:CX}});var PX,Ele,DX=C(()=>{k();PX="geometryVertexDeclaration",Ele="uniform mat4 viewProjection;uniform mat4 view;";S.IncludesShadersStore[PX]||(S.IncludesShadersStore[PX]=Ele)});var LX,Sle,OX=C(()=>{k();jh();LX="geometryUboDeclaration",Sle=`#include -`;S.IncludesShadersStore[LX]||(S.IncludesShadersStore[LX]=Sle)});var NX,Tle,Vm=C(()=>{k();NX="harmonicsFunctions",Tle=`#ifdef USESPHERICALFROMREFLECTIONMAP +`;T.ShadersStore[xD]||(T.ShadersStore[xD]=VX);Gle={name:xD,shader:VX}});var kX,kle,WX=C(()=>{G();kX="geometryVertexDeclaration",kle="uniform mat4 viewProjection;uniform mat4 view;";T.IncludesShadersStore[kX]||(T.IncludesShadersStore[kX]=kle)});var HX,Wle,zX=C(()=>{G();qh();HX="geometryUboDeclaration",Wle=`#include +`;T.IncludesShadersStore[HX]||(T.IncludesShadersStore[HX]=Wle)});var XX,Hle,Hm=C(()=>{G();XX="harmonicsFunctions",Hle=`#ifdef USESPHERICALFROMREFLECTIONMAP #ifdef SPHERICAL_HARMONICS vec3 computeEnvironmentIrradiance(vec3 normal) {return vSphericalL00 + vSphericalL1_1*(normal.y) @@ -11528,7 +11528,7 @@ vec3 computeEnvironmentIrradiance(vec3 normal) {return vSphericalL00 vec3 computeEnvironmentIrradiance(vec3 normal) {float Nx=normal.x;float Ny=normal.y;float Nz=normal.z;vec3 C1=vSphericalZZ.rgb;vec3 Cx=vSphericalX.rgb;vec3 Cy=vSphericalY.rgb;vec3 Cz=vSphericalZ.rgb;vec3 Cxx_zz=vSphericalXX_ZZ.rgb;vec3 Cyy_zz=vSphericalYY_ZZ.rgb;vec3 Cxy=vSphericalXY.rgb;vec3 Cyz=vSphericalYZ.rgb;vec3 Czx=vSphericalZX.rgb;vec3 a1=Cyy_zz*Ny+Cy;vec3 a2=Cyz*Nz+a1;vec3 b1=Czx*Nz+Cx;vec3 b2=Cxy*Ny+b1;vec3 b3=Cxx_zz*Nx+b2;vec3 t1=Cz *Nz+C1;vec3 t2=a2 *Ny+t1;vec3 t3=b3 *Nx+t2;return t3;} #endif #endif -`;S.IncludesShadersStore[NX]||(S.IncludesShadersStore[NX]=Tle)});var wX={};et(wX,{geometryVertexShader:()=>Ale});var pD,FX,Ale,_D=C(()=>{k();nc();sc();Df();Lf();bf();DX();OX();ac();Vm();Of();Nf();oc();lc();cc();fc();QA();pD="geometryVertexShader",FX=`precision highp float; +`;T.IncludesShadersStore[XX]||(T.IncludesShadersStore[XX]=Hle)});var KX={};$e(KX,{geometryVertexShader:()=>zle});var bD,YX,zle,ID=C(()=>{G();ac();oc();Nf();wf();Cf();WX();zX();lc();Hm();Ff();Bf();cc();fc();hc();dc();ox();bD="geometryVertexShader",YX=`precision highp float; #include #include #include @@ -11740,7 +11740,7 @@ vEnvironmentIrradiance=computeEnvironmentIrradiance(reflectionVector)*vReflectio #endif #endif } -`;S.ShadersStore[pD]||(S.ShadersStore[pD]=FX);Ale={name:pD,shader:FX}});var BX,xle,Gm=C(()=>{k();BX="harmonicsFunctions",xle=`#ifdef USESPHERICALFROMREFLECTIONMAP +`;T.ShadersStore[bD]||(T.ShadersStore[bD]=YX);zle={name:bD,shader:YX}});var jX,Xle,zm=C(()=>{G();jX="harmonicsFunctions",Xle=`#ifdef USESPHERICALFROMREFLECTIONMAP #ifdef SPHERICAL_HARMONICS fn computeEnvironmentIrradiance(normal: vec3f)->vec3f {return uniforms.vSphericalL00 + uniforms.vSphericalL1_1*(normal.y) @@ -11755,7 +11755,7 @@ fn computeEnvironmentIrradiance(normal: vec3f)->vec3f {return uniforms.vSpherica fn computeEnvironmentIrradiance(normal: vec3f)->vec3f {var Nx: f32=normal.x;var Ny: f32=normal.y;var Nz: f32=normal.z;var C1: vec3f=uniforms.vSphericalZZ.rgb;var Cx: vec3f=uniforms.vSphericalX.rgb;var Cy: vec3f=uniforms.vSphericalY.rgb;var Cz: vec3f=uniforms.vSphericalZ.rgb;var Cxx_zz: vec3f=uniforms.vSphericalXX_ZZ.rgb;var Cyy_zz: vec3f=uniforms.vSphericalYY_ZZ.rgb;var Cxy: vec3f=uniforms.vSphericalXY.rgb;var Cyz: vec3f=uniforms.vSphericalYZ.rgb;var Czx: vec3f=uniforms.vSphericalZX.rgb;var a1: vec3f=Cyy_zz*Ny+Cy;var a2: vec3f=Cyz*Nz+a1;var b1: vec3f=Czx*Nz+Cx;var b2: vec3f=Cxy*Ny+b1;var b3: vec3f=Cxx_zz*Nx+b2;var t1: vec3f=Cz *Nz+C1;var t2: vec3f=a2 *Ny+t1;var t3: vec3f=b3 *Nx+t2;return t3;} #endif #endif -`;S.IncludesShadersStoreWGSL[BX]||(S.IncludesShadersStoreWGSL[BX]=xle)});var VX={};et(VX,{geometryVertexShaderWGSL:()=>Rle});var gD,UX,Rle,GX=C(()=>{k();ql();Zl();Mf();Cf();Rf();Xh();Ql();Gm();yf();Pf();Jl();$l();ec();tc();MA();gD="geometryVertexShader",UX=`#include +`;T.IncludesShadersStoreWGSL[jX]||(T.IncludesShadersStoreWGSL[jX]=Xle)});var ZX={};$e(ZX,{geometryVertexShaderWGSL:()=>Yle});var MD,qX,Yle,QX=C(()=>{G();Ql();$l();Pf();Df();Mf();Yh();Jl();zm();Lf();Of();ec();tc();ic();rc();BA();MD="geometryVertexShader",qX=`#include #include #include #include[0..maxSimultaneousMorphTargets] @@ -11966,7 +11966,7 @@ vertexOutputs.vEnvironmentIrradiance=computeEnvironmentIrradiance(reflectionVect #endif #endif } -`;S.ShadersStoreWGSL[gD]||(S.ShadersStoreWGSL[gD]=UX);Rle={name:gD,shader:UX}});var kX,ble,Gx=C(()=>{k();kX="pbrFragmentReflectionDeclaration",ble=`#ifdef REFLECTION +`;T.ShadersStoreWGSL[MD]||(T.ShadersStoreWGSL[MD]=qX);Yle={name:MD,shader:qX}});var $X,Kle,Zx=C(()=>{G();$X="pbrFragmentReflectionDeclaration",Kle=`#ifdef REFLECTION #ifdef REFLECTIONMAP_3D var reflectionSamplerSampler: sampler;var reflectionSampler: texture_cube; #ifdef LODBASEDMICROSFURACE @@ -11994,7 +11994,7 @@ varying vDirectionW: vec3f; #endif #endif #endif -`;S.IncludesShadersStoreWGSL[kX]||(S.IncludesShadersStoreWGSL[kX]=ble)});var WX,Ile,km=C(()=>{k();WX="pbrBRDFFunctions",Ile=`#define FRESNEL_MAXIMUM_ON_ROUGH 0.25 +`;T.IncludesShadersStoreWGSL[$X]||(T.IncludesShadersStoreWGSL[$X]=Kle)});var JX,jle,Xm=C(()=>{G();JX="pbrBRDFFunctions",jle=`#define FRESNEL_MAXIMUM_ON_ROUGH 0.25 #define BRDF_DIFFUSE_MODEL_EON 0 #define BRDF_DIFFUSE_MODEL_BURLEY 1 #define BRDF_DIFFUSE_MODEL_LAMBERT 2 @@ -12166,7 +12166,7 @@ fn transmittanceBRDF_Burley(tintColor: vec3f,diffusionDistance: vec3f,thickness: fn computeWrappedDiffuseNdotL(NdotL: f32,w: f32)->f32 {var t: f32=1.0+w;var invt2: f32=1.0/(t*t);return saturate((NdotL+w)*invt2);} #endif #endif -`;S.IncludesShadersStoreWGSL[WX]||(S.IncludesShadersStoreWGSL[WX]=Ile)});var HX,Mle,vD=C(()=>{k();HX="openpbrDielectricReflectance",Mle=`struct ReflectanceParams +`;T.IncludesShadersStoreWGSL[JX]||(T.IncludesShadersStoreWGSL[JX]=jle)});var e5,qle,CD=C(()=>{G();e5="openpbrDielectricReflectance",qle=`struct ReflectanceParams {F0: f32, F90: f32, coloredF0: vec3f, @@ -12188,7 +12188,7 @@ let dielectricColorF90: vec3f=specularColor.rgb*vec3f(f90Scale)*specularWeight; let dielectricColorF90: vec3f=vec3f(f90Scale)*specularWeight; #endif outParams.coloredF90=dielectricColorF90;return outParams;} -`;S.IncludesShadersStoreWGSL[HX]||(S.IncludesShadersStoreWGSL[HX]=Mle)});var zX,Cle,kx=C(()=>{k();zX="pbrIBLFunctions",Cle=`#if defined(REFLECTION) || defined(SS_REFRACTION) +`;T.IncludesShadersStoreWGSL[e5]||(T.IncludesShadersStoreWGSL[e5]=qle)});var t5,Zle,Qx=C(()=>{G();t5="pbrIBLFunctions",Zle=`#if defined(REFLECTION) || defined(SS_REFRACTION) fn getLodFromAlphaG(cubeMapDimensionPixels: f32,microsurfaceAverageSlope: f32)->f32 {var microsurfaceAverageSlopeTexels: f32=cubeMapDimensionPixels*microsurfaceAverageSlope;var lod: f32=log2(microsurfaceAverageSlopeTexels);return lod;} fn getLinearLodFromRoughness(cubeMapDimensionPixels: f32,roughness: f32)->f32 {var lod: f32=log2(cubeMapDimensionPixels)*roughness;return lod;} #endif @@ -12202,7 +12202,7 @@ fn environmentHorizonOcclusion(view: vec3f,normal: vec3f,geometricNormal: vec3f) fn UNPACK_LOD(x: f32)->f32 {return (1.0-x)*255.0;} fn getLodFromAlphaGNdotV(cubeMapDimensionPixels: f32,alphaG: f32,NdotV: f32)->f32 {var microsurfaceAverageSlope: f32=alphaG;microsurfaceAverageSlope*=sqrt(abs(NdotV));return getLodFromAlphaG(cubeMapDimensionPixels,microsurfaceAverageSlope);} #endif -`;S.IncludesShadersStoreWGSL[zX]||(S.IncludesShadersStoreWGSL[zX]=Cle)});var XX,yle,ED=C(()=>{k();XX="openpbrGeometryInfo",yle=`struct geometryInfoOutParams +`;T.IncludesShadersStoreWGSL[t5]||(T.IncludesShadersStoreWGSL[t5]=Zle)});var i5,Qle,yD=C(()=>{G();i5="openpbrGeometryInfo",Qle=`struct geometryInfoOutParams {NdotV: f32, NdotVUnclamped: f32, environmentBrdf: vec3f, @@ -12239,7 +12239,7 @@ normalW: vec3f,viewDirectionW: vec3f,roughness: f32,geometricNormalW: vec3f ,vAnisotropy: vec3f,TBN: mat3x3 )->geometryInfoAnisoOutParams {let geoInfo: geometryInfoOutParams=geometryInfo(normalW,viewDirectionW,roughness,geometricNormalW);var outParams: geometryInfoAnisoOutParams;outParams.NdotV=geoInfo.NdotV;outParams.NdotVUnclamped=geoInfo.NdotVUnclamped;outParams.environmentBrdf=geoInfo.environmentBrdf;outParams.horizonOcclusion=geoInfo.horizonOcclusion;outParams.anisotropy=vAnisotropy.b;let anisotropyDirection: vec3f=vec3f(vAnisotropy.xy,0.);let anisoTBN: mat3x3=mat3x3(normalize(TBN[0]),normalize(TBN[1]),normalize(TBN[2]));outParams.anisotropicTangent=normalize(anisoTBN*anisotropyDirection);outParams.anisotropicBitangent=normalize(cross(anisoTBN[2],outParams.anisotropicTangent));outParams.TBN=TBN;return outParams;} -`;S.IncludesShadersStoreWGSL[XX]||(S.IncludesShadersStoreWGSL[XX]=yle)});var YX,Ple,SD=C(()=>{k();YX="openpbrIblFunctions",Ple=`#ifdef REFLECTION +`;T.IncludesShadersStoreWGSL[i5]||(T.IncludesShadersStoreWGSL[i5]=Qle)});var r5,$le,PD=C(()=>{G();r5="openpbrIblFunctions",$le=`#ifdef REFLECTION fn sampleIrradiance( surfaceNormal: vec3f #if defined(NORMAL) && defined(USESPHERICALINVERTEX) @@ -12457,7 +12457,7 @@ return getReflectanceFromBRDFLookup(reflectance.coloredF0,reflectance.coloredF90 #endif } #endif -`;S.IncludesShadersStoreWGSL[YX]||(S.IncludesShadersStoreWGSL[YX]=Ple)});var KX,Dle,TD=C(()=>{k();KX="openpbrSubsurfaceLayerData",Dle=`var subsurface_weight: f32=uniforms.vSubsurfaceWeight;var subsurface_color: vec3f=uniforms.vSubsurfaceColor.rgb;var subsurface_radius: f32=uniforms.vSubsurfaceRadius;var subsurface_radius_scale: vec3f=uniforms.vSubsurfaceRadiusScale;var subsurface_scatter_anisotropy: f32=clamp(uniforms.vSubsurfaceScatterAnisotropy,-0.9999f,0.9999f); +`;T.IncludesShadersStoreWGSL[r5]||(T.IncludesShadersStoreWGSL[r5]=$le)});var n5,Jle,DD=C(()=>{G();n5="openpbrSubsurfaceLayerData",Jle=`var subsurface_weight: f32=uniforms.vSubsurfaceWeight;var subsurface_color: vec3f=uniforms.vSubsurfaceColor.rgb;var subsurface_radius: f32=uniforms.vSubsurfaceRadius;var subsurface_radius_scale: vec3f=uniforms.vSubsurfaceRadiusScale;var subsurface_scatter_anisotropy: f32=clamp(uniforms.vSubsurfaceScatterAnisotropy,-0.9999f,0.9999f); #ifdef SUBSURFACE_WEIGHT let subsurfaceWeightFromTexture: vec4f=textureSample(subsurfaceWeightSampler,subsurfaceWeightSamplerSampler,fragmentInputs.vSubsurfaceWeightUV+uvOffset); #endif @@ -12481,7 +12481,7 @@ subsurface_color*=uniforms.vSubsurfaceColorInfos.y; #ifdef SUBSURFACE_RADIUS_SCALE subsurface_radius_scale*=subsurfaceRadiusScaleFromTexture.rgb; #endif -`;S.IncludesShadersStoreWGSL[KX]||(S.IncludesShadersStoreWGSL[KX]=Dle)});var jX,Lle,AD=C(()=>{k();jX="openpbrTransmissionLayerData",Lle=`var transmission_weight: f32=uniforms.vTransmissionWeight;var transmission_color: vec3f=uniforms.vTransmissionColor.rgb;var transmission_depth: f32=uniforms.vTransmissionDepth;var transmission_scatter: vec3f=uniforms.vTransmissionScatter.rgb;var transmission_scatter_anisotropy: f32=clamp(uniforms.vTransmissionScatterAnisotropy,-0.9999f,0.9999f);var transmission_dispersion_scale: f32=uniforms.vTransmissionDispersionScale;var transmission_dispersion_abbe_number: f32=uniforms.vTransmissionDispersionAbbeNumber; +`;T.IncludesShadersStoreWGSL[n5]||(T.IncludesShadersStoreWGSL[n5]=Jle)});var s5,ece,LD=C(()=>{G();s5="openpbrTransmissionLayerData",ece=`var transmission_weight: f32=uniforms.vTransmissionWeight;var transmission_color: vec3f=uniforms.vTransmissionColor.rgb;var transmission_depth: f32=uniforms.vTransmissionDepth;var transmission_scatter: vec3f=uniforms.vTransmissionScatter.rgb;var transmission_scatter_anisotropy: f32=clamp(uniforms.vTransmissionScatterAnisotropy,-0.9999f,0.9999f);var transmission_dispersion_scale: f32=uniforms.vTransmissionDispersionScale;var transmission_dispersion_abbe_number: f32=uniforms.vTransmissionDispersionAbbeNumber; #ifdef TRANSMISSION_WEIGHT let transmissionWeightFromTexture: vec4f=textureSample(transmissionWeightSampler,transmissionWeightSamplerSampler,fragmentInputs.vTransmissionWeightUV+uvOffset); #endif @@ -12517,7 +12517,7 @@ transmission_scatter*=transmissionScatterFromTexture.rgb; #ifdef TRANSMISSION_DISPERSION_SCALE transmission_dispersion_scale*=transmissionDispersionScaleFromTexture.r; #endif -`;S.IncludesShadersStoreWGSL[jX]||(S.IncludesShadersStoreWGSL[jX]=Lle)});var ZX={};et(ZX,{geometryPixelShaderWGSL:()=>Ole});var xD,qX,Ole,QX=C(()=>{k();ic();wA();BA();Sa();Gx();Xh();km();vD();kx();og();ED();SD();Kh();rc();UA();TD();AD();xD="geometryPixelShader",qX=`#ifdef BUMP +`;T.IncludesShadersStoreWGSL[s5]||(T.IncludesShadersStoreWGSL[s5]=ece)});var o5={};$e(o5,{geometryPixelShaderWGSL:()=>tce});var OD,a5,tce,l5=C(()=>{G();nc();YA();KA();Ra();Zx();Yh();Xm();CD();Qx();pg();yD();PD();jh();sc();jA();DD();LD();OD="geometryPixelShader",a5=`#ifdef BUMP varying vWorldView0: vec4f;varying vWorldView1: vec4f;varying vWorldView2: vec4f;varying vWorldView3: vec4f;varying vNormalW: vec3f; #else varying vNormalV: vec3f; @@ -12778,22 +12778,22 @@ fragmentOutputs.fragData6=fragData[6]; fragmentOutputs.fragData7=fragData[7]; #endif } -`;S.ShadersStoreWGSL[xD]||(S.ShadersStoreWGSL[xD]=qX);Ole={name:xD,shader:qX}});var JX,RD,Kn,$X=C(()=>{Ve();Ui();Gr();_X();Ht();an();Pn();mD();_D();xa();el();yn();aD();JX=["diffuseSampler","bumpSampler","reflectivitySampler","albedoSampler","morphTargets","boneSampler","transmissionWeightSampler","subsurfaceWeightSampler","iblShadowSampler"],RD=["world","mBones","viewProjection","diffuseMatrix","view","previousWorld","previousViewProjection","mPreviousBones","bumpMatrix","reflectivityMatrix","albedoMatrix","reflectivityColor","albedoColor","reflectionMatrix","vTransmissionWeight","vSubsurfaceWeight","vEyePosition","vTransmissionScatterAnisotropy","vSubsurfaceScatterAnisotropy","shadowTextureSize","metallic","glossiness","vTangentSpaceParams","vBumpInfos","morphTargetInfluences","morphTargetCount","morphTargetTextureInfo","morphTargetTextureIndices","boneTextureInfo"];mf(RD,JX,!0);In(RD);Kn=class n{get normalsAreUnsigned(){return this._normalsAreUnsigned}_linkPrePassRenderer(e){this._linkedWithPrePass=!0,this._prePassRenderer=e,this._multiRenderTarget&&(this._multiRenderTarget.onClearObservable.clear(),this._multiRenderTarget.onClearObservable.add(()=>{}))}_unlinkPrePassRenderer(){this._linkedWithPrePass=!1,this._createRenderTargets()}_resetLayout(){this._enableDepth=!0,this._enableNormal=!0,this._enablePosition=!1,this._enableReflectivity=!1,this._enableVelocity=!1,this._enableVelocityLinear=!1,this._enableScreenspaceDepth=!1,this._enableIrradiance=!1,this._attachmentsFromPrePass=[]}_forceTextureType(e,t){e===n.POSITION_TEXTURE_TYPE?(this._positionIndex=t,this._enablePosition=!0):e===n.VELOCITY_TEXTURE_TYPE?(this._velocityIndex=t,this._enableVelocity=!0):e===n.VELOCITY_LINEAR_TEXTURE_TYPE?(this._velocityLinearIndex=t,this._enableVelocityLinear=!0):e===n.REFLECTIVITY_TEXTURE_TYPE?(this._reflectivityIndex=t,this._enableReflectivity=!0):e===n.DEPTH_TEXTURE_TYPE?(this._depthIndex=t,this._enableDepth=!0):e===n.NORMAL_TEXTURE_TYPE?(this._normalIndex=t,this._enableNormal=!0):e===n.SCREENSPACE_DEPTH_TEXTURE_TYPE?(this._screenspaceDepthIndex=t,this._enableScreenspaceDepth=!0):e===n.IRRADIANCE_TEXTURE_TYPE&&(this._irradianceIndex=t,this._enableIrradiance=!0)}_setAttachments(e){this._attachmentsFromPrePass=e}_linkInternalTexture(e){this._multiRenderTarget.setInternalTexture(e,0,!1)}get renderList(){return this._multiRenderTarget.renderList}set renderList(e){this._multiRenderTarget.renderList=e}get isSupported(){return this._multiRenderTarget.isSupported}getTextureIndex(e){switch(e){case n.POSITION_TEXTURE_TYPE:return this._positionIndex;case n.VELOCITY_TEXTURE_TYPE:return this._velocityIndex;case n.VELOCITY_LINEAR_TEXTURE_TYPE:return this._velocityLinearIndex;case n.REFLECTIVITY_TEXTURE_TYPE:return this._reflectivityIndex;case n.DEPTH_TEXTURE_TYPE:return this._depthIndex;case n.NORMAL_TEXTURE_TYPE:return this._normalIndex;case n.SCREENSPACE_DEPTH_TEXTURE_TYPE:return this._screenspaceDepthIndex;case n.IRRADIANCE_TEXTURE_TYPE:return this._irradianceIndex;default:return-1}}get enableDepth(){return this._enableDepth}set enableDepth(e){this._enableDepth=e,this._linkedWithPrePass||(this.dispose(),this._createRenderTargets())}get enableNormal(){return this._enableNormal}set enableNormal(e){this._enableNormal=e,this._linkedWithPrePass||(this.dispose(),this._createRenderTargets())}get enablePosition(){return this._enablePosition}set enablePosition(e){this._enablePosition=e,this._linkedWithPrePass||(this.dispose(),this._createRenderTargets())}get enableVelocity(){return this._enableVelocity}set enableVelocity(e){this._enableVelocity=e,e||(this._previousTransformationMatrices={}),this._linkedWithPrePass||(this.dispose(),this._createRenderTargets()),this._scene.needsPreviousWorldMatrices=e}get enableVelocityLinear(){return this._enableVelocityLinear}set enableVelocityLinear(e){this._enableVelocityLinear=e,this._linkedWithPrePass||(this.dispose(),this._createRenderTargets())}get enableReflectivity(){return this._enableReflectivity}set enableReflectivity(e){this._enableReflectivity=e,this._linkedWithPrePass||(this.dispose(),this._createRenderTargets())}get enableScreenspaceDepth(){return this._enableScreenspaceDepth}set enableScreenspaceDepth(e){this._enableScreenspaceDepth=e,this._linkedWithPrePass||(this.dispose(),this._createRenderTargets())}get enableIrradiance(){return this._enableIrradiance}set enableIrradiance(e){this._enableIrradiance=e,this._linkedWithPrePass||(this.dispose(),this._createRenderTargets())}get scene(){return this._scene}get ratio(){return typeof this._ratioOrDimensions=="object"?1:this._ratioOrDimensions}get shaderLanguage(){return this._shaderLanguage}constructor(e,t=1,i=15,r){this._previousTransformationMatrices={},this._previousBonesTransformationMatrices={},this.excludedSkinnedMeshesFromVelocity=[],this.renderTransparentMeshes=!0,this.generateNormalsInWorldSpace=!1,this._normalsAreUnsigned=!1,this._resizeObserver=null,this._enableDepth=!0,this._enableNormal=!0,this._enablePosition=!1,this._enableVelocity=!1,this._enableVelocityLinear=!1,this._enableReflectivity=!1,this._enableScreenspaceDepth=!1,this._enableIrradiance=!1,this._clearColor=new lt(0,0,0,0),this._clearDepthColor=new lt(0,0,0,1),this._positionIndex=-1,this._velocityIndex=-1,this._velocityLinearIndex=-1,this._reflectivityIndex=-1,this._depthIndex=-1,this._normalIndex=-1,this._screenspaceDepthIndex=-1,this._irradianceIndex=-1,this._linkedWithPrePass=!1,this.generateIrradianceWithScatterMask=!1,this.useSpecificClearForDepthTexture=!1,this._shaderLanguage=0,this._shadersLoaded=!1,this._scene=e,this._ratioOrDimensions=t,this._useUbo=e.getEngine().supportsUniformBuffers,this._depthFormat=i,this._textureTypesAndFormats=r||{},this._initShaderSourceAsync(),n._SceneComponentInitialization(this._scene),this._createRenderTargets()}async _initShaderSourceAsync(){this._scene.getEngine().isWebGPU&&!n.ForceGLSL?(this._shaderLanguage=1,await Promise.all([Promise.resolve().then(()=>(GX(),VX)),Promise.resolve().then(()=>(QX(),ZX))])):await Promise.all([Promise.resolve().then(()=>(_D(),wX)),Promise.resolve().then(()=>(mD(),yX))]),this._shadersLoaded=!0}isReady(e,t){if(!this._shadersLoaded)return!1;let i=e.getMaterial();if(i&&i.disableDepthWrite)return!1;let r=[],s=[L.PositionKind],a=e.getMesh();a.isVerticesDataPresent(L.NormalKind)&&(r.push("#define HAS_NORMAL_ATTRIBUTE"),s.push(L.NormalKind));let l=!1,c=!1,f=!1;if(i){let p=!1;if(i.needAlphaTestingForMesh(a)&&i.getAlphaTestTexture()&&(r.push("#define ALPHATEST"),r.push(`#define ALPHATEST_UV${i.getAlphaTestTexture().coordinatesIndex+1}`),p=!0),(i.bumpTexture||i.normalTexture||i.geometryNormalTexture)&&le.BumpTextureEnabled){let g=i.bumpTexture||i.normalTexture||i.geometryNormalTexture;r.push("#define BUMP"),r.push(`#define BUMP_UV${g.coordinatesIndex+1}`),p=!0}if(this._enableReflectivity){let g=!1;if(i.getClassName()==="PBRMetallicRoughnessMaterial")i.metallicRoughnessTexture&&(r.push("#define ORMTEXTURE"),r.push(`#define REFLECTIVITY_UV${i.metallicRoughnessTexture.coordinatesIndex+1}`),r.push("#define METALLICWORKFLOW"),p=!0,g=!0),i.metallic!=null&&(r.push("#define METALLIC"),r.push("#define METALLICWORKFLOW"),g=!0),i.roughness!=null&&(r.push("#define ROUGHNESS"),r.push("#define METALLICWORKFLOW"),g=!0),g&&(i.baseTexture&&(r.push("#define ALBEDOTEXTURE"),r.push(`#define ALBEDO_UV${i.baseTexture.coordinatesIndex+1}`),i.baseTexture.gammaSpace&&r.push("#define GAMMAALBEDO"),p=!0),i.baseColor&&r.push("#define ALBEDOCOLOR"));else if(i.getClassName()==="PBRSpecularGlossinessMaterial")i.specularGlossinessTexture?(r.push("#define SPECULARGLOSSINESSTEXTURE"),r.push(`#define REFLECTIVITY_UV${i.specularGlossinessTexture.coordinatesIndex+1}`),p=!0,i.specularGlossinessTexture.gammaSpace&&r.push("#define GAMMAREFLECTIVITYTEXTURE")):i.specularColor&&r.push("#define REFLECTIVITYCOLOR"),i.glossiness!=null&&r.push("#define GLOSSINESS");else if(i.getClassName()==="PBRMaterial")i.metallicTexture&&(r.push("#define ORMTEXTURE"),r.push(`#define REFLECTIVITY_UV${i.metallicTexture.coordinatesIndex+1}`),r.push("#define METALLICWORKFLOW"),p=!0,g=!0),i.metallic!=null&&(r.push("#define METALLIC"),r.push("#define METALLICWORKFLOW"),g=!0),i.roughness!=null&&(r.push("#define ROUGHNESS"),r.push("#define METALLICWORKFLOW"),g=!0),g?(i.albedoTexture&&(r.push("#define ALBEDOTEXTURE"),r.push(`#define ALBEDO_UV${i.albedoTexture.coordinatesIndex+1}`),i.albedoTexture.gammaSpace&&r.push("#define GAMMAALBEDO"),p=!0),i.albedoColor&&r.push("#define ALBEDOCOLOR")):(i.reflectivityTexture?(r.push("#define SPECULARGLOSSINESSTEXTURE"),r.push(`#define REFLECTIVITY_UV${i.reflectivityTexture.coordinatesIndex+1}`),i.reflectivityTexture.gammaSpace&&r.push("#define GAMMAREFLECTIVITYTEXTURE"),p=!0):i.reflectivityColor&&r.push("#define REFLECTIVITYCOLOR"),i.microSurface!=null&&r.push("#define GLOSSINESS"));else if(i.getClassName()==="StandardMaterial")i.specularTexture&&(r.push("#define REFLECTIVITYTEXTURE"),r.push(`#define REFLECTIVITY_UV${i.specularTexture.coordinatesIndex+1}`),i.specularTexture.gammaSpace&&r.push("#define GAMMAREFLECTIVITYTEXTURE"),p=!0),i.specularColor&&r.push("#define REFLECTIVITYCOLOR");else if(i.getClassName()==="OpenPBRMaterial"){let v=i;r.push("#define METALLIC"),r.push("#define ROUGHNESS"),v._useRoughnessFromMetallicTextureGreen&&v.baseMetalnessTexture?(r.push("#define ORMTEXTURE"),r.push(`#define REFLECTIVITY_UV${v.baseMetalnessTexture.coordinatesIndex+1}`),p=!0):v.baseMetalnessTexture?(r.push("#define METALLIC_TEXTURE"),r.push(`#define METALLIC_UV${v.baseMetalnessTexture.coordinatesIndex+1}`),p=!0):v.specularRoughnessTexture&&(r.push("#define ROUGHNESS_TEXTURE"),r.push(`#define ROUGHNESS_UV${v.specularRoughnessTexture.coordinatesIndex+1}`),p=!0),v.baseColorTexture&&(r.push("#define ALBEDOTEXTURE"),r.push(`#define ALBEDO_UV${v.baseColorTexture.coordinatesIndex+1}`),v.baseColorTexture.gammaSpace&&r.push("#define GAMMAALBEDO"),p=!0),v.baseColor&&r.push("#define ALBEDOCOLOR")}}if(this._enableIrradiance&&this.generateIrradianceWithScatterMask&&(r.push("#define IRRADIANCE_SCATTER_MASK"),i.getClassName()==="OpenPBRMaterial")){let g=i;g.subsurfaceWeight>0&&g.subsurfaceWeightTexture&&(r.push("#define SUBSURFACE_WEIGHT"),r.push(`#define SUBSURFACEWEIGHT_UV${g.subsurfaceWeightTexture.coordinatesIndex+1}`),p=!0),g.transmissionWeight>0&&g.transmissionWeightTexture&&(r.push("#define TRANSMISSION_WEIGHT"),r.push(`#define TRANSMISSIONWEIGHT_UV${g.transmissionWeightTexture.coordinatesIndex+1}`),p=!0)}p&&(r.push("#define NEED_UV"),a.isVerticesDataPresent(L.UVKind)&&(s.push(L.UVKind),r.push("#define UV1"),l=!0),a.isVerticesDataPresent(L.UV2Kind)&&(s.push(L.UV2Kind),r.push("#define UV2"),c=!0))}if(this._enableDepth&&(r.push("#define DEPTH"),r.push("#define DEPTH_INDEX "+this._depthIndex)),this._enableNormal&&(r.push("#define NORMAL"),r.push("#define NORMAL_INDEX "+this._normalIndex)),this._enablePosition&&(r.push("#define POSITION"),r.push("#define POSITION_INDEX "+this._positionIndex)),this._enableVelocity&&(r.push("#define VELOCITY"),r.push("#define VELOCITY_INDEX "+this._velocityIndex),this.excludedSkinnedMeshesFromVelocity.indexOf(a)===-1&&r.push("#define BONES_VELOCITY_ENABLED")),this._enableVelocityLinear&&(r.push("#define VELOCITY_LINEAR"),r.push("#define VELOCITY_LINEAR_INDEX "+this._velocityLinearIndex),this.excludedSkinnedMeshesFromVelocity.indexOf(a)===-1&&r.push("#define BONES_VELOCITY_ENABLED")),this._enableReflectivity&&(r.push("#define REFLECTIVITY"),r.push("#define REFLECTIVITY_INDEX "+this._reflectivityIndex)),this._enableScreenspaceDepth&&this._screenspaceDepthIndex!==-1&&(r.push("#define SCREENSPACE_DEPTH_INDEX "+this._screenspaceDepthIndex),r.push("#define SCREENSPACE_DEPTH")),this._enableIrradiance&&this._irradianceIndex!==-1){r.push("#define IRRADIANCE_INDEX "+this._irradianceIndex),r.push("#define IRRADIANCE");let p=this._scene;if(p.environmentTexture){let g={},v=!1,x=0;(i.getClassName()==="OpenPBRMaterial"||i.getClassName()==="StandardMaterial"||i.getClassName()==="PBRMetallicRoughnessMaterial"||i.getClassName()==="PBRSpecularGlossinessMaterial"||i.getClassName()==="PBRMaterial")&&(v=!!i.realtimeFiltering,x=i.realtimeFilteringQuality||0),uf(p,p.environmentTexture,g,v,x,!0);for(let E in g)g[E]&&r.push("#define "+E);g.USEIRRADIANCEMAP||r.push("#define SPHERICAL_HARMONICS");let A=p.postProcessRenderPipelineManager.supportedPipelines.find(E=>E.getClassName()==="IBLShadowsRenderPipeline");if(A){let E=A;E._getAccumulatedTexture()&&(r.push("#define IBL_SHADOW_TEXTURE"),E.coloredShadows&&r.push("#define COLORED_IBL_SHADOWS"))}}}this.generateNormalsInWorldSpace&&r.push("#define NORMAL_WORLDSPACE"),this._normalsAreUnsigned&&r.push("#define ENCODE_NORMAL"),a.useBones&&a.computeBonesUsingShaders&&a.skeleton?(s.push(L.MatricesIndicesKind),s.push(L.MatricesWeightsKind),a.numBoneInfluencers>4&&(s.push(L.MatricesIndicesExtraKind),s.push(L.MatricesWeightsExtraKind)),r.push("#define NUM_BONE_INFLUENCERS "+a.numBoneInfluencers),r.push("#define BONETEXTURE "+a.skeleton.isUsingTextureForMatrices),r.push("#define BonesPerMesh "+(a.skeleton.bones.length+1))):(r.push("#define NUM_BONE_INFLUENCERS 0"),r.push("#define BONETEXTURE false"),r.push("#define BonesPerMesh 0"));let h=a.morphTargetManager?tl(a.morphTargetManager,r,s,a,!0,!0,!1,l,c,f):0;t&&(r.push("#define INSTANCES"),oo(s,this._enableVelocity||this._enableVelocityLinear),e.getRenderingMesh().hasThinInstances&&r.push("#define THIN_INSTANCES")),this._linkedWithPrePass?r.push("#define SCENE_MRT_COUNT "+this._attachmentsFromPrePass.length):r.push("#define SCENE_MRT_COUNT "+this._multiRenderTarget.textures.length),$o(i,this._scene,r);let d=this._scene.getEngine(),u=e._getDrawWrapper(void 0,!0),m=u.defines,_=r.join(` -`);return m!==_&&u.setEffect(d.createEffect("geometry",{attributes:s,uniformsNames:RD,samplers:JX,defines:_,onCompiled:null,fallbacks:null,onError:null,uniformBuffersNames:["Scene"],indexParameters:{buffersCount:this._multiRenderTarget.textures.length-1,maxSimultaneousMorphTargets:h},shaderLanguage:this.shaderLanguage},d),_),u.effect.isReady()}getGBuffer(){return this._multiRenderTarget}get samples(){return this._multiRenderTarget.samples}set samples(e){this._multiRenderTarget.samples=e}dispose(){var e,t;this._resizeObserver&&(this._scene.getEngine().onResizeObservable.remove(this._resizeObserver),this._resizeObserver=null),(e=this._multiRenderTarget)!=null&&e.renderTarget&&this.scene.getEngine()._currentRenderTarget===this._multiRenderTarget.renderTarget&&this.scene.getEngine().unBindFramebuffer((t=this._multiRenderTarget)==null?void 0:t.renderTarget),this.getGBuffer().dispose()}_assignRenderTargetIndices(){let e=[],t=[],i=0;return this._enableDepth&&(this._depthIndex=i,i++,e.push("gBuffer_Depth"),t.push(this._textureTypesAndFormats[n.DEPTH_TEXTURE_TYPE])),this._enableNormal&&(this._normalIndex=i,i++,e.push("gBuffer_Normal"),t.push(this._textureTypesAndFormats[n.NORMAL_TEXTURE_TYPE])),this._enablePosition&&(this._positionIndex=i,i++,e.push("gBuffer_Position"),t.push(this._textureTypesAndFormats[n.POSITION_TEXTURE_TYPE])),this._enableVelocity&&(this._velocityIndex=i,i++,e.push("gBuffer_Velocity"),t.push(this._textureTypesAndFormats[n.VELOCITY_TEXTURE_TYPE])),this._enableVelocityLinear&&(this._velocityLinearIndex=i,i++,e.push("gBuffer_VelocityLinear"),t.push(this._textureTypesAndFormats[n.VELOCITY_LINEAR_TEXTURE_TYPE])),this._enableReflectivity&&(this._reflectivityIndex=i,i++,e.push("gBuffer_Reflectivity"),t.push(this._textureTypesAndFormats[n.REFLECTIVITY_TEXTURE_TYPE])),this._enableScreenspaceDepth&&(this._screenspaceDepthIndex=i,i++,e.push("gBuffer_ScreenspaceDepth"),t.push(this._textureTypesAndFormats[n.SCREENSPACE_DEPTH_TEXTURE_TYPE])),this._enableIrradiance&&(this._irradianceIndex=i,i++,e.push("gBuffer_Irradiance"),t.push(this._textureTypesAndFormats[n.IRRADIANCE_TEXTURE_TYPE])),[i,e,t]}_createRenderTargets(){var g;let e=this._scene.getEngine(),[t,i,r]=this._assignRenderTargetIndices(),s=0;e._caps.textureFloat&&e._caps.textureFloatLinearFiltering?s=1:e._caps.textureHalfFloat&&e._caps.textureHalfFloatLinearFiltering&&(s=2);let a=this._ratioOrDimensions.width!==void 0?this._ratioOrDimensions:{width:e.getRenderWidth()*this._ratioOrDimensions,height:e.getRenderHeight()*this._ratioOrDimensions},o=[],l=[],c=[];for(let v of r)v?(o.push(v.textureType),l.push(v.textureFormat),c.push((g=v.samplingMode)!=null?g:2)):(o.push(s),l.push(5),c.push(2));if(this._normalsAreUnsigned=o[n.NORMAL_TEXTURE_TYPE]===11||o[n.NORMAL_TEXTURE_TYPE]===13,this._multiRenderTarget=new Bx("gBuffer",a,t,this._scene,{generateMipMaps:!1,generateDepthTexture:!0,types:o,formats:l,samplingModes:c,depthTextureFormat:this._depthFormat},i.concat("gBuffer_DepthBuffer")),!this.isSupported)return;this._multiRenderTarget.wrapU=ge.CLAMP_ADDRESSMODE,this._multiRenderTarget.wrapV=ge.CLAMP_ADDRESSMODE,this._multiRenderTarget.refreshRate=1,this._multiRenderTarget.renderParticles=!1,this._multiRenderTarget.renderList=null;let f=[!0],h=[!1],d=[!0];for(let v=1;v{v.bindAttachments(this.useSpecificClearForDepthTexture?m:u),v.clear(this._clearColor,!0,!0,!0),this.useSpecificClearForDepthTexture&&(v.bindAttachments(_),v.clear(this._clearDepthColor,!0,!0,!0)),v.bindAttachments(u)}),this._resizeObserver=e.onResizeObservable.add(()=>{if(this._multiRenderTarget){let v=this._ratioOrDimensions.width!==void 0?this._ratioOrDimensions:{width:e.getRenderWidth()*this._ratioOrDimensions,height:e.getRenderHeight()*this._ratioOrDimensions};this._multiRenderTarget.resize(v)}});let p=v=>{let x=v.getRenderingMesh(),A=v.getEffectiveMesh(),E=this._scene,T=E.getEngine(),R=v.getMaterial();if(!R)return;if(A._internalAbstractMeshDataInfo._isActiveIntermediate=!1,(this._enableVelocity||this._enableVelocityLinear)&&!this._previousTransformationMatrices[A.uniqueId]&&(this._previousTransformationMatrices[A.uniqueId]={world:K.Identity(),viewProjection:E.getTransformMatrix()},x.skeleton)){let D=x.skeleton.getTransformMatrices(x);this._previousBonesTransformationMatrices[x.uniqueId]=this._copyBonesTransformationMatrices(D,new Float32Array(D.length))}let I=x._getInstancesRenderList(v._id,!!v.getReplacementMesh());if(I.mustReturn)return;let y=T.getCaps().instancedArrays&&(I.visibleInstances[v._id]!==null||x.hasThinInstances),M=A.getWorldMatrix();if(this.isReady(v,y)){let D=v._getDrawWrapper();if(!D)return;let O=D.effect;T.enableEffect(D),y||x._bind(v,O,R.fillMode),this._useUbo?(df(O,this._scene.getSceneUniformBuffer()),this._scene.finalizeSceneUbo()):(O.setMatrix("viewProjection",E.getTransformMatrix()),O.setMatrix("view",E.getViewMatrix()),this._scene.bindEyePosition(O,"vEyePosition"));let V;if(!x._instanceDataStorage.isFrozen&&(R.backFaceCulling||R.sideOrientation!==null)){let w=A._getWorldMatrixDeterminant();V=R._getEffectiveOrientation(x),w<0&&(V=V===ve.ClockWiseSideOrientation?ve.CounterClockWiseSideOrientation:ve.ClockWiseSideOrientation)}else V=x._effectiveSideOrientation;if(R._preBind(D,V),R.needAlphaTestingForMesh(A)){let w=R.getAlphaTestTexture();w&&(O.setTexture("diffuseSampler",w),O.setMatrix("diffuseMatrix",w.getTextureMatrix()))}if((R.bumpTexture||R.normalTexture||R.geometryNormalTexture)&&E.getEngine().getCaps().standardDerivatives&&le.BumpTextureEnabled){let w=R.bumpTexture||R.normalTexture||R.geometryNormalTexture;O.setFloat3("vBumpInfos",w.coordinatesIndex,1/w.level,R.parallaxScaleBias),O.setMatrix("bumpMatrix",w.getTextureMatrix()),O.setTexture("bumpSampler",w),O.setFloat2("vTangentSpaceParams",R.invertNormalMapX?-1:1,R.invertNormalMapY?-1:1)}if(this._enableReflectivity){if(R.getClassName()==="PBRMetallicRoughnessMaterial")R.metallicRoughnessTexture!==null&&(O.setTexture("reflectivitySampler",R.metallicRoughnessTexture),O.setMatrix("reflectivityMatrix",R.metallicRoughnessTexture.getTextureMatrix())),R.metallic!==null&&O.setFloat("metallic",R.metallic),R.roughness!==null&&O.setFloat("glossiness",1-R.roughness),R.baseTexture!==null&&(O.setTexture("albedoSampler",R.baseTexture),O.setMatrix("albedoMatrix",R.baseTexture.getTextureMatrix())),R.baseColor!==null&&O.setColor3("albedoColor",R.baseColor);else if(R.getClassName()==="PBRSpecularGlossinessMaterial")R.specularGlossinessTexture!==null?(O.setTexture("reflectivitySampler",R.specularGlossinessTexture),O.setMatrix("reflectivityMatrix",R.specularGlossinessTexture.getTextureMatrix())):R.specularColor!==null&&O.setColor3("reflectivityColor",R.specularColor),R.glossiness!==null&&O.setFloat("glossiness",R.glossiness);else if(R.getClassName()==="PBRMaterial")R.metallicTexture!==null&&(O.setTexture("reflectivitySampler",R.metallicTexture),O.setMatrix("reflectivityMatrix",R.metallicTexture.getTextureMatrix())),R.metallic!==null&&O.setFloat("metallic",R.metallic),R.roughness!==null&&O.setFloat("glossiness",1-R.roughness),R.roughness!==null||R.metallic!==null||R.metallicTexture!==null?(R.albedoTexture!==null&&(O.setTexture("albedoSampler",R.albedoTexture),O.setMatrix("albedoMatrix",R.albedoTexture.getTextureMatrix())),R.albedoColor!==null&&O.setColor3("albedoColor",R.albedoColor)):(R.reflectivityTexture!==null?(O.setTexture("reflectivitySampler",R.reflectivityTexture),O.setMatrix("reflectivityMatrix",R.reflectivityTexture.getTextureMatrix())):R.reflectivityColor!==null&&O.setColor3("reflectivityColor",R.reflectivityColor),R.microSurface!==null&&O.setFloat("glossiness",R.microSurface));else if(R.getClassName()==="StandardMaterial")R.specularTexture!==null&&(O.setTexture("reflectivitySampler",R.specularTexture),O.setMatrix("reflectivityMatrix",R.specularTexture.getTextureMatrix())),R.specularColor!==null&&O.setColor3("reflectivityColor",R.specularColor);else if(R.getClassName()==="OpenPBRMaterial"){let w=R;w._useRoughnessFromMetallicTextureGreen&&w.baseMetalnessTexture?(O.setTexture("reflectivitySampler",w.baseMetalnessTexture),O.setMatrix("reflectivityMatrix",w.baseMetalnessTexture.getTextureMatrix())):w.baseMetalnessTexture?(O.setTexture("metallicSampler",w.baseMetalnessTexture),O.setMatrix("metallicMatrix",w.baseMetalnessTexture.getTextureMatrix())):w.specularRoughnessTexture&&(O.setTexture("roughnessSampler",w.specularRoughnessTexture),O.setMatrix("roughnessMatrix",w.specularRoughnessTexture.getTextureMatrix())),O.setFloat("metallic",w.baseMetalness),O.setFloat("glossiness",1-w.specularRoughness),w.baseColorTexture!==null&&(O.setTexture("albedoSampler",w.baseColorTexture),O.setMatrix("albedoMatrix",w.baseColorTexture.getTextureMatrix())),w.baseColor!==null&&O.setColor3("albedoColor",w.baseColor)}}if(this._enableIrradiance&&E.environmentTexture){let w=E.environmentTexture,U=E.postProcessRenderPipelineManager.supportedPipelines.find(G=>G.getClassName()==="IBLShadowsRenderPipeline");if(U){let J=U._getAccumulatedTexture();J&&(O.setTexture("iblShadowSampler",J),O.setFloat2("shadowTextureSize",J.getSize().width,J.getSize().height))}if(O.setMatrix("reflectionMatrix",w.getReflectionTextureMatrix()),O.setFloat2("vReflectionInfos",w.level*E.iblIntensity,0),O.setTexture("reflectionSampler",w),w.irradianceTexture&&(O.setTexture("irradianceSampler",w.irradianceTexture),w.irradianceTexture._dominantDirection&&O.setVector3("vReflectionDominantDirection",w.irradianceTexture._dominantDirection)),w.sphericalPolynomial){let G=w.sphericalPolynomial;if(G.preScaledHarmonics){let J=G.preScaledHarmonics;O.setVector3("vSphericalL00",J.l00),O.setVector3("vSphericalL1_1",J.l1_1),O.setVector3("vSphericalL10",J.l10),O.setVector3("vSphericalL11",J.l11),O.setVector3("vSphericalL2_2",J.l2_2),O.setVector3("vSphericalL2_1",J.l2_1),O.setVector3("vSphericalL20",J.l20),O.setVector3("vSphericalL21",J.l21),O.setVector3("vSphericalL22",J.l22)}else O.setFloat3("vSphericalX",G.x.x,G.x.y,G.x.z),O.setFloat3("vSphericalY",G.y.x,G.y.y,G.y.z),O.setFloat3("vSphericalZ",G.z.x,G.z.y,G.z.z),O.setFloat3("vSphericalXX_ZZ",G.xx.x-G.zz.x,G.xx.y-G.zz.y,G.xx.z-G.zz.z),O.setFloat3("vSphericalYY_ZZ",G.yy.x-G.zz.x,G.yy.y-G.zz.y,G.yy.z-G.zz.z),O.setFloat3("vSphericalZZ",G.zz.x,G.zz.y,G.zz.z),O.setFloat3("vSphericalXY",G.xy.x,G.xy.y,G.xy.z),O.setFloat3("vSphericalYZ",G.yz.x,G.yz.y,G.yz.z),O.setFloat3("vSphericalZX",G.zx.x,G.zx.y,G.zx.z)}if(this.generateIrradianceWithScatterMask&&R.getClassName()==="OpenPBRMaterial"){let G=R;O.setFloat("vSubsurfaceWeight",G.subsurfaceWeight),G.subsurfaceWeightTexture&&(O.setTexture("subsurfaceWeightSampler",G.subsurfaceWeightTexture),O.setMatrix("subsurfaceWeightMatrix",G.subsurfaceWeightTexture.getTextureMatrix())),O.setFloat("vTransmissionWeight",G.transmissionWeight),G.transmissionWeightTexture&&(O.setTexture("transmissionWeightSampler",G.transmissionWeightTexture),O.setMatrix("transmissionWeightMatrix",G.transmissionWeightTexture.getTextureMatrix())),O.setFloat("vTransmissionScatterAnisotropy",G.transmissionScatterAnisotropy),O.setFloat("vSubsurfaceScatterAnisotropy",G.subsurfaceScatterAnisotropy)}}if(Mn(O,R,this._scene),x.useBones&&x.computeBonesUsingShaders&&x.skeleton){let w=x.skeleton;if(w.isUsingTextureForMatrices&&O.getUniformIndex("boneTextureInfo")>-1){let U=w.getTransformMatrixTexture(x);O.setTexture("boneSampler",U),O.setFloat2("boneTextureInfo",w._textureWidth,w._textureHeight)}else O.setMatrices("mBones",x.skeleton.getTransformMatrices(x));(this._enableVelocity||this._enableVelocityLinear)&&O.setMatrices("mPreviousBones",this._previousBonesTransformationMatrices[x.uniqueId])}Cn(x,O),x.morphTargetManager&&x.morphTargetManager.isUsingTextureForTargets&&x.morphTargetManager._bind(O),(this._enableVelocity||this._enableVelocityLinear)&&(O.setMatrix("previousWorld",this._previousTransformationMatrices[A.uniqueId].world),O.setMatrix("previousViewProjection",this._previousTransformationMatrices[A.uniqueId].viewProjection)),y&&x.hasThinInstances&&O.setMatrix("world",M),x._processRendering(A,v,O,R.fillMode,I,y,(w,U)=>{w||O.setMatrix("world",U)})}(this._enableVelocity||this._enableVelocityLinear)&&(this._previousTransformationMatrices[A.uniqueId].world=M.clone(),this._previousTransformationMatrices[A.uniqueId].viewProjection=this._scene.getTransformMatrix().clone(),x.skeleton&&this._copyBonesTransformationMatrices(x.skeleton.getTransformMatrices(x),this._previousBonesTransformationMatrices[A.uniqueId]))};this._multiRenderTarget.customIsReadyFunction=(v,x,A)=>{if((A||x===0)&&v.subMeshes)for(let E=0;E{let T;if(this._linkedWithPrePass){if(!this._prePassRenderer.enabled)return;this._scene.getEngine().bindAttachments(this._attachmentsFromPrePass)}if(E.length){for(e.setColorWrite(!1),T=0;T{throw Xe("GeometryBufferRendererSceneComponent")}});var e5,Nle,bD=C(()=>{k();Xh();ag();e5="openpbrUboDeclaration",Nle=`uniform vTangentSpaceParams: vec2f;uniform vLightingIntensity: vec4f;uniform pointSize: f32;uniform vDebugMode: vec2f;uniform renderTargetSize: vec2f;uniform cameraInfo: vec4f;uniform backgroundRefractionMatrix: mat4x4f;uniform vBackgroundRefractionInfos: vec3f;uniform vReflectionInfos: vec2f;uniform reflectionMatrix: mat4x4f;uniform vReflectionMicrosurfaceInfos: vec3f;uniform vReflectionPosition: vec3f;uniform vReflectionSize: vec3f;uniform vReflectionFilteringInfo: vec2f;uniform vReflectionDominantDirection: vec3f;uniform vReflectionColor: vec3f;uniform vSphericalL00: vec3f;uniform vSphericalL1_1: vec3f;uniform vSphericalL10: vec3f;uniform vSphericalL11: vec3f;uniform vSphericalL2_2: vec3f;uniform vSphericalL2_1: vec3f;uniform vSphericalL20: vec3f;uniform vSphericalL21: vec3f;uniform vSphericalL22: vec3f;uniform vSphericalX: vec3f;uniform vSphericalY: vec3f;uniform vSphericalZ: vec3f;uniform vSphericalXX_ZZ: vec3f;uniform vSphericalYY_ZZ: vec3f;uniform vSphericalZZ: vec3f;uniform vSphericalXY: vec3f;uniform vSphericalYZ: vec3f;uniform vSphericalZX: vec3f;uniform vBaseWeight: f32;uniform vBaseColor: vec4f;uniform vBaseDiffuseRoughness: f32;uniform vReflectanceInfo: vec4f;uniform vSpecularColor: vec4f;uniform vSpecularAnisotropy: vec3f;uniform vTransmissionWeight : f32;uniform vTransmissionColor : vec3f;uniform vTransmissionDepth : f32;uniform vTransmissionScatter : vec3f;uniform vTransmissionScatterAnisotropy : f32;uniform vTransmissionDispersionScale : f32;uniform vTransmissionDispersionAbbeNumber : f32;uniform vSubsurfaceWeight: f32;uniform vSubsurfaceColor: vec3f;uniform vSubsurfaceRadius: f32;uniform vSubsurfaceRadiusScale: vec3f;uniform vSubsurfaceScatterAnisotropy: f32;uniform vCoatWeight: f32;uniform vCoatColor: vec3f;uniform vCoatRoughness: f32;uniform vCoatRoughnessAnisotropy: f32;uniform vCoatIor: f32;uniform vCoatDarkening : f32;uniform vFuzzWeight: f32;uniform vFuzzColor: vec3f;uniform vFuzzRoughness: f32;uniform vGeometryThinWalled: f32;uniform vGeometryCoatTangent: vec2f;uniform vGeometryThickness: f32;uniform vEmissionColor: vec3f;uniform vThinFilmWeight: f32;uniform vThinFilmThickness: vec2f;uniform vThinFilmIor: f32;uniform vBaseWeightInfos: vec2f;uniform baseWeightMatrix: mat4x4f;uniform vBaseColorInfos: vec2f;uniform baseColorMatrix: mat4x4f;uniform vBaseDiffuseRoughnessInfos: vec2f;uniform baseDiffuseRoughnessMatrix: mat4x4f;uniform vBaseMetalnessInfos: vec2f;uniform baseMetalnessMatrix: mat4x4f;uniform vSpecularWeightInfos: vec2f;uniform specularWeightMatrix: mat4x4f;uniform vSpecularColorInfos: vec2f;uniform specularColorMatrix: mat4x4f;uniform vSpecularRoughnessInfos: vec2f;uniform specularRoughnessMatrix: mat4x4f;uniform vSpecularRoughnessAnisotropyInfos: vec2f;uniform specularRoughnessAnisotropyMatrix: mat4x4f;uniform vTransmissionWeightInfos : vec2f;uniform transmissionWeightMatrix : mat4x4f;uniform vTransmissionColorInfos : vec2f;uniform transmissionColorMatrix : mat4x4f;uniform vTransmissionDepthInfos : vec2f;uniform transmissionDepthMatrix : mat4x4f;uniform vTransmissionScatterInfos : vec2f;uniform transmissionScatterMatrix : mat4x4f;uniform vTransmissionDispersionScaleInfos : vec2f;uniform transmissionDispersionScaleMatrix : mat4x4f;uniform vSubsurfaceWeightInfos: vec2f;uniform subsurfaceWeightMatrix: mat4x4f;uniform vSubsurfaceColorInfos: vec2f;uniform subsurfaceColorMatrix: mat4x4f;uniform vSubsurfaceRadiusScaleInfos: vec2f;uniform subsurfaceRadiusScaleMatrix: mat4x4f;uniform vCoatWeightInfos: vec2f;uniform coatWeightMatrix: mat4x4f;uniform vCoatColorInfos: vec2f;uniform coatColorMatrix: mat4x4f;uniform vCoatRoughnessInfos: vec2f;uniform coatRoughnessMatrix: mat4x4f;uniform vCoatRoughnessAnisotropyInfos: vec2f;uniform coatRoughnessAnisotropyMatrix: mat4x4f;uniform vCoatDarkeningInfos : vec2f;uniform coatDarkeningMatrix : mat4x4f;uniform vFuzzWeightInfos: vec2f;uniform fuzzWeightMatrix: mat4x4f;uniform vFuzzColorInfos: vec2f;uniform fuzzColorMatrix: mat4x4f;uniform vFuzzRoughnessInfos: vec2f;uniform fuzzRoughnessMatrix: mat4x4f;uniform vGeometryNormalInfos: vec2f;uniform geometryNormalMatrix: mat4x4f;uniform vGeometryTangentInfos: vec2f;uniform geometryTangentMatrix: mat4x4f;uniform vGeometryCoatNormalInfos: vec2f;uniform geometryCoatNormalMatrix: mat4x4f;uniform vGeometryCoatTangentInfos: vec2f;uniform geometryCoatTangentMatrix: mat4x4f;uniform vGeometryOpacityInfos: vec2f;uniform geometryOpacityMatrix: mat4x4f;uniform vGeometryThicknessInfos: vec2f;uniform geometryThicknessMatrix: mat4x4f;uniform vEmissionInfos: vec2f;uniform emissionMatrix: mat4x4f;uniform vThinFilmWeightInfos: vec2f;uniform thinFilmWeightMatrix: mat4x4f;uniform vThinFilmThicknessInfos: vec2f;uniform thinFilmThicknessMatrix: mat4x4f;uniform vAmbientOcclusionInfos: vec2f;uniform ambientOcclusionMatrix: mat4x4f; +`;T.ShadersStoreWGSL[OD]||(T.ShadersStoreWGSL[OD]=a5);tce={name:OD,shader:a5}});var c5,ND,Kn,f5=C(()=>{Ge();Ui();Gr();MX();zt();ln();Pn();RD();ID();Ma();il();yn();_D();c5=["diffuseSampler","bumpSampler","reflectivitySampler","albedoSampler","morphTargets","boneSampler","transmissionWeightSampler","subsurfaceWeightSampler","iblShadowSampler"],ND=["world","mBones","viewProjection","diffuseMatrix","view","previousWorld","previousViewProjection","mPreviousBones","bumpMatrix","reflectivityMatrix","albedoMatrix","reflectivityColor","albedoColor","reflectionMatrix","vTransmissionWeight","vSubsurfaceWeight","vEyePosition","vTransmissionScatterAnisotropy","vSubsurfaceScatterAnisotropy","shadowTextureSize","metallic","glossiness","vTangentSpaceParams","vBumpInfos","morphTargetInfluences","morphTargetCount","morphTargetTextureInfo","morphTargetTextureIndices","boneTextureInfo"];gf(ND,c5,!0);In(ND);Kn=class n{get normalsAreUnsigned(){return this._normalsAreUnsigned}_linkPrePassRenderer(e){this._linkedWithPrePass=!0,this._prePassRenderer=e,this._multiRenderTarget&&(this._multiRenderTarget.onClearObservable.clear(),this._multiRenderTarget.onClearObservable.add(()=>{}))}_unlinkPrePassRenderer(){this._linkedWithPrePass=!1,this._createRenderTargets()}_resetLayout(){this._enableDepth=!0,this._enableNormal=!0,this._enablePosition=!1,this._enableReflectivity=!1,this._enableVelocity=!1,this._enableVelocityLinear=!1,this._enableScreenspaceDepth=!1,this._enableIrradiance=!1,this._attachmentsFromPrePass=[]}_forceTextureType(e,t){e===n.POSITION_TEXTURE_TYPE?(this._positionIndex=t,this._enablePosition=!0):e===n.VELOCITY_TEXTURE_TYPE?(this._velocityIndex=t,this._enableVelocity=!0):e===n.VELOCITY_LINEAR_TEXTURE_TYPE?(this._velocityLinearIndex=t,this._enableVelocityLinear=!0):e===n.REFLECTIVITY_TEXTURE_TYPE?(this._reflectivityIndex=t,this._enableReflectivity=!0):e===n.DEPTH_TEXTURE_TYPE?(this._depthIndex=t,this._enableDepth=!0):e===n.NORMAL_TEXTURE_TYPE?(this._normalIndex=t,this._enableNormal=!0):e===n.SCREENSPACE_DEPTH_TEXTURE_TYPE?(this._screenspaceDepthIndex=t,this._enableScreenspaceDepth=!0):e===n.IRRADIANCE_TEXTURE_TYPE&&(this._irradianceIndex=t,this._enableIrradiance=!0)}_setAttachments(e){this._attachmentsFromPrePass=e}_linkInternalTexture(e){this._multiRenderTarget.setInternalTexture(e,0,!1)}get renderList(){return this._multiRenderTarget.renderList}set renderList(e){this._multiRenderTarget.renderList=e}get isSupported(){return this._multiRenderTarget.isSupported}getTextureIndex(e){switch(e){case n.POSITION_TEXTURE_TYPE:return this._positionIndex;case n.VELOCITY_TEXTURE_TYPE:return this._velocityIndex;case n.VELOCITY_LINEAR_TEXTURE_TYPE:return this._velocityLinearIndex;case n.REFLECTIVITY_TEXTURE_TYPE:return this._reflectivityIndex;case n.DEPTH_TEXTURE_TYPE:return this._depthIndex;case n.NORMAL_TEXTURE_TYPE:return this._normalIndex;case n.SCREENSPACE_DEPTH_TEXTURE_TYPE:return this._screenspaceDepthIndex;case n.IRRADIANCE_TEXTURE_TYPE:return this._irradianceIndex;default:return-1}}get enableDepth(){return this._enableDepth}set enableDepth(e){this._enableDepth=e,this._linkedWithPrePass||(this.dispose(),this._createRenderTargets())}get enableNormal(){return this._enableNormal}set enableNormal(e){this._enableNormal=e,this._linkedWithPrePass||(this.dispose(),this._createRenderTargets())}get enablePosition(){return this._enablePosition}set enablePosition(e){this._enablePosition=e,this._linkedWithPrePass||(this.dispose(),this._createRenderTargets())}get enableVelocity(){return this._enableVelocity}set enableVelocity(e){this._enableVelocity=e,e||(this._previousTransformationMatrices={}),this._linkedWithPrePass||(this.dispose(),this._createRenderTargets()),this._scene.needsPreviousWorldMatrices=e}get enableVelocityLinear(){return this._enableVelocityLinear}set enableVelocityLinear(e){this._enableVelocityLinear=e,this._linkedWithPrePass||(this.dispose(),this._createRenderTargets())}get enableReflectivity(){return this._enableReflectivity}set enableReflectivity(e){this._enableReflectivity=e,this._linkedWithPrePass||(this.dispose(),this._createRenderTargets())}get enableScreenspaceDepth(){return this._enableScreenspaceDepth}set enableScreenspaceDepth(e){this._enableScreenspaceDepth=e,this._linkedWithPrePass||(this.dispose(),this._createRenderTargets())}get enableIrradiance(){return this._enableIrradiance}set enableIrradiance(e){this._enableIrradiance=e,this._linkedWithPrePass||(this.dispose(),this._createRenderTargets())}get scene(){return this._scene}get ratio(){return typeof this._ratioOrDimensions=="object"?1:this._ratioOrDimensions}get shaderLanguage(){return this._shaderLanguage}constructor(e,t=1,i=15,r){this._previousTransformationMatrices={},this._previousBonesTransformationMatrices={},this.excludedSkinnedMeshesFromVelocity=[],this.renderTransparentMeshes=!0,this.generateNormalsInWorldSpace=!1,this._normalsAreUnsigned=!1,this._resizeObserver=null,this._enableDepth=!0,this._enableNormal=!0,this._enablePosition=!1,this._enableVelocity=!1,this._enableVelocityLinear=!1,this._enableReflectivity=!1,this._enableScreenspaceDepth=!1,this._enableIrradiance=!1,this._clearColor=new lt(0,0,0,0),this._clearDepthColor=new lt(0,0,0,1),this._positionIndex=-1,this._velocityIndex=-1,this._velocityLinearIndex=-1,this._reflectivityIndex=-1,this._depthIndex=-1,this._normalIndex=-1,this._screenspaceDepthIndex=-1,this._irradianceIndex=-1,this._linkedWithPrePass=!1,this.generateIrradianceWithScatterMask=!1,this.useSpecificClearForDepthTexture=!1,this._shaderLanguage=0,this._shadersLoaded=!1,this._scene=e,this._ratioOrDimensions=t,this._useUbo=e.getEngine().supportsUniformBuffers,this._depthFormat=i,this._textureTypesAndFormats=r||{},this._initShaderSourceAsync(),n._SceneComponentInitialization(this._scene),this._createRenderTargets()}async _initShaderSourceAsync(){this._scene.getEngine().isWebGPU&&!n.ForceGLSL?(this._shaderLanguage=1,await Promise.all([Promise.resolve().then(()=>(QX(),ZX)),Promise.resolve().then(()=>(l5(),o5))])):await Promise.all([Promise.resolve().then(()=>(ID(),KX)),Promise.resolve().then(()=>(RD(),GX))]),this._shadersLoaded=!0}isReady(e,t){if(!this._shadersLoaded)return!1;let i=e.getMaterial();if(i&&i.disableDepthWrite)return!1;let r=[],s=[L.PositionKind],a=e.getMesh();a.isVerticesDataPresent(L.NormalKind)&&(r.push("#define HAS_NORMAL_ATTRIBUTE"),s.push(L.NormalKind));let l=!1,c=!1,f=!1;if(i){let p=!1;if(i.needAlphaTestingForMesh(a)&&i.getAlphaTestTexture()&&(r.push("#define ALPHATEST"),r.push(`#define ALPHATEST_UV${i.getAlphaTestTexture().coordinatesIndex+1}`),p=!0),(i.bumpTexture||i.normalTexture||i.geometryNormalTexture)&&le.BumpTextureEnabled){let g=i.bumpTexture||i.normalTexture||i.geometryNormalTexture;r.push("#define BUMP"),r.push(`#define BUMP_UV${g.coordinatesIndex+1}`),p=!0}if(this._enableReflectivity){let g=!1;if(i.getClassName()==="PBRMetallicRoughnessMaterial")i.metallicRoughnessTexture&&(r.push("#define ORMTEXTURE"),r.push(`#define REFLECTIVITY_UV${i.metallicRoughnessTexture.coordinatesIndex+1}`),r.push("#define METALLICWORKFLOW"),p=!0,g=!0),i.metallic!=null&&(r.push("#define METALLIC"),r.push("#define METALLICWORKFLOW"),g=!0),i.roughness!=null&&(r.push("#define ROUGHNESS"),r.push("#define METALLICWORKFLOW"),g=!0),g&&(i.baseTexture&&(r.push("#define ALBEDOTEXTURE"),r.push(`#define ALBEDO_UV${i.baseTexture.coordinatesIndex+1}`),i.baseTexture.gammaSpace&&r.push("#define GAMMAALBEDO"),p=!0),i.baseColor&&r.push("#define ALBEDOCOLOR"));else if(i.getClassName()==="PBRSpecularGlossinessMaterial")i.specularGlossinessTexture?(r.push("#define SPECULARGLOSSINESSTEXTURE"),r.push(`#define REFLECTIVITY_UV${i.specularGlossinessTexture.coordinatesIndex+1}`),p=!0,i.specularGlossinessTexture.gammaSpace&&r.push("#define GAMMAREFLECTIVITYTEXTURE")):i.specularColor&&r.push("#define REFLECTIVITYCOLOR"),i.glossiness!=null&&r.push("#define GLOSSINESS");else if(i.getClassName()==="PBRMaterial")i.metallicTexture&&(r.push("#define ORMTEXTURE"),r.push(`#define REFLECTIVITY_UV${i.metallicTexture.coordinatesIndex+1}`),r.push("#define METALLICWORKFLOW"),p=!0,g=!0),i.metallic!=null&&(r.push("#define METALLIC"),r.push("#define METALLICWORKFLOW"),g=!0),i.roughness!=null&&(r.push("#define ROUGHNESS"),r.push("#define METALLICWORKFLOW"),g=!0),g?(i.albedoTexture&&(r.push("#define ALBEDOTEXTURE"),r.push(`#define ALBEDO_UV${i.albedoTexture.coordinatesIndex+1}`),i.albedoTexture.gammaSpace&&r.push("#define GAMMAALBEDO"),p=!0),i.albedoColor&&r.push("#define ALBEDOCOLOR")):(i.reflectivityTexture?(r.push("#define SPECULARGLOSSINESSTEXTURE"),r.push(`#define REFLECTIVITY_UV${i.reflectivityTexture.coordinatesIndex+1}`),i.reflectivityTexture.gammaSpace&&r.push("#define GAMMAREFLECTIVITYTEXTURE"),p=!0):i.reflectivityColor&&r.push("#define REFLECTIVITYCOLOR"),i.microSurface!=null&&r.push("#define GLOSSINESS"));else if(i.getClassName()==="StandardMaterial")i.specularTexture&&(r.push("#define REFLECTIVITYTEXTURE"),r.push(`#define REFLECTIVITY_UV${i.specularTexture.coordinatesIndex+1}`),i.specularTexture.gammaSpace&&r.push("#define GAMMAREFLECTIVITYTEXTURE"),p=!0),i.specularColor&&r.push("#define REFLECTIVITYCOLOR");else if(i.getClassName()==="OpenPBRMaterial"){let v=i;r.push("#define METALLIC"),r.push("#define ROUGHNESS"),v._useRoughnessFromMetallicTextureGreen&&v.baseMetalnessTexture?(r.push("#define ORMTEXTURE"),r.push(`#define REFLECTIVITY_UV${v.baseMetalnessTexture.coordinatesIndex+1}`),p=!0):v.baseMetalnessTexture?(r.push("#define METALLIC_TEXTURE"),r.push(`#define METALLIC_UV${v.baseMetalnessTexture.coordinatesIndex+1}`),p=!0):v.specularRoughnessTexture&&(r.push("#define ROUGHNESS_TEXTURE"),r.push(`#define ROUGHNESS_UV${v.specularRoughnessTexture.coordinatesIndex+1}`),p=!0),v.baseColorTexture&&(r.push("#define ALBEDOTEXTURE"),r.push(`#define ALBEDO_UV${v.baseColorTexture.coordinatesIndex+1}`),v.baseColorTexture.gammaSpace&&r.push("#define GAMMAALBEDO"),p=!0),v.baseColor&&r.push("#define ALBEDOCOLOR")}}if(this._enableIrradiance&&this.generateIrradianceWithScatterMask&&(r.push("#define IRRADIANCE_SCATTER_MASK"),i.getClassName()==="OpenPBRMaterial")){let g=i;g.subsurfaceWeight>0&&g.subsurfaceWeightTexture&&(r.push("#define SUBSURFACE_WEIGHT"),r.push(`#define SUBSURFACEWEIGHT_UV${g.subsurfaceWeightTexture.coordinatesIndex+1}`),p=!0),g.transmissionWeight>0&&g.transmissionWeightTexture&&(r.push("#define TRANSMISSION_WEIGHT"),r.push(`#define TRANSMISSIONWEIGHT_UV${g.transmissionWeightTexture.coordinatesIndex+1}`),p=!0)}p&&(r.push("#define NEED_UV"),a.isVerticesDataPresent(L.UVKind)&&(s.push(L.UVKind),r.push("#define UV1"),l=!0),a.isVerticesDataPresent(L.UV2Kind)&&(s.push(L.UV2Kind),r.push("#define UV2"),c=!0))}if(this._enableDepth&&(r.push("#define DEPTH"),r.push("#define DEPTH_INDEX "+this._depthIndex)),this._enableNormal&&(r.push("#define NORMAL"),r.push("#define NORMAL_INDEX "+this._normalIndex)),this._enablePosition&&(r.push("#define POSITION"),r.push("#define POSITION_INDEX "+this._positionIndex)),this._enableVelocity&&(r.push("#define VELOCITY"),r.push("#define VELOCITY_INDEX "+this._velocityIndex),this.excludedSkinnedMeshesFromVelocity.indexOf(a)===-1&&r.push("#define BONES_VELOCITY_ENABLED")),this._enableVelocityLinear&&(r.push("#define VELOCITY_LINEAR"),r.push("#define VELOCITY_LINEAR_INDEX "+this._velocityLinearIndex),this.excludedSkinnedMeshesFromVelocity.indexOf(a)===-1&&r.push("#define BONES_VELOCITY_ENABLED")),this._enableReflectivity&&(r.push("#define REFLECTIVITY"),r.push("#define REFLECTIVITY_INDEX "+this._reflectivityIndex)),this._enableScreenspaceDepth&&this._screenspaceDepthIndex!==-1&&(r.push("#define SCREENSPACE_DEPTH_INDEX "+this._screenspaceDepthIndex),r.push("#define SCREENSPACE_DEPTH")),this._enableIrradiance&&this._irradianceIndex!==-1){r.push("#define IRRADIANCE_INDEX "+this._irradianceIndex),r.push("#define IRRADIANCE");let p=this._scene;if(p.environmentTexture){let g={},v=!1,x=0;(i.getClassName()==="OpenPBRMaterial"||i.getClassName()==="StandardMaterial"||i.getClassName()==="PBRMetallicRoughnessMaterial"||i.getClassName()==="PBRSpecularGlossinessMaterial"||i.getClassName()==="PBRMaterial")&&(v=!!i.realtimeFiltering,x=i.realtimeFilteringQuality||0),_f(p,p.environmentTexture,g,v,x,!0);for(let S in g)g[S]&&r.push("#define "+S);g.USEIRRADIANCEMAP||r.push("#define SPHERICAL_HARMONICS");let A=p.postProcessRenderPipelineManager.supportedPipelines.find(S=>S.getClassName()==="IBLShadowsRenderPipeline");if(A){let S=A;S._getAccumulatedTexture()&&(r.push("#define IBL_SHADOW_TEXTURE"),S.coloredShadows&&r.push("#define COLORED_IBL_SHADOWS"))}}}this.generateNormalsInWorldSpace&&r.push("#define NORMAL_WORLDSPACE"),this._normalsAreUnsigned&&r.push("#define ENCODE_NORMAL"),a.useBones&&a.computeBonesUsingShaders&&a.skeleton?(s.push(L.MatricesIndicesKind),s.push(L.MatricesWeightsKind),a.numBoneInfluencers>4&&(s.push(L.MatricesIndicesExtraKind),s.push(L.MatricesWeightsExtraKind)),r.push("#define NUM_BONE_INFLUENCERS "+a.numBoneInfluencers),r.push("#define BONETEXTURE "+a.skeleton.isUsingTextureForMatrices),r.push("#define BonesPerMesh "+(a.skeleton.bones.length+1))):(r.push("#define NUM_BONE_INFLUENCERS 0"),r.push("#define BONETEXTURE false"),r.push("#define BonesPerMesh 0"));let h=a.morphTargetManager?rl(a.morphTargetManager,r,s,a,!0,!0,!1,l,c,f):0;t&&(r.push("#define INSTANCES"),co(s,this._enableVelocity||this._enableVelocityLinear),e.getRenderingMesh().hasThinInstances&&r.push("#define THIN_INSTANCES")),this._linkedWithPrePass?r.push("#define SCENE_MRT_COUNT "+this._attachmentsFromPrePass.length):r.push("#define SCENE_MRT_COUNT "+this._multiRenderTarget.textures.length),tl(i,this._scene,r);let d=this._scene.getEngine(),u=e._getDrawWrapper(void 0,!0),m=u.defines,_=r.join(` +`);return m!==_&&u.setEffect(d.createEffect("geometry",{attributes:s,uniformsNames:ND,samplers:c5,defines:_,onCompiled:null,fallbacks:null,onError:null,uniformBuffersNames:["Scene"],indexParameters:{buffersCount:this._multiRenderTarget.textures.length-1,maxSimultaneousMorphTargets:h},shaderLanguage:this.shaderLanguage},d),_),u.effect.isReady()}getGBuffer(){return this._multiRenderTarget}get samples(){return this._multiRenderTarget.samples}set samples(e){this._multiRenderTarget.samples=e}dispose(){var e,t;this._resizeObserver&&(this._scene.getEngine().onResizeObservable.remove(this._resizeObserver),this._resizeObserver=null),(e=this._multiRenderTarget)!=null&&e.renderTarget&&this.scene.getEngine()._currentRenderTarget===this._multiRenderTarget.renderTarget&&this.scene.getEngine().unBindFramebuffer((t=this._multiRenderTarget)==null?void 0:t.renderTarget),this.getGBuffer().dispose()}_assignRenderTargetIndices(){let e=[],t=[],i=0;return this._enableDepth&&(this._depthIndex=i,i++,e.push("gBuffer_Depth"),t.push(this._textureTypesAndFormats[n.DEPTH_TEXTURE_TYPE])),this._enableNormal&&(this._normalIndex=i,i++,e.push("gBuffer_Normal"),t.push(this._textureTypesAndFormats[n.NORMAL_TEXTURE_TYPE])),this._enablePosition&&(this._positionIndex=i,i++,e.push("gBuffer_Position"),t.push(this._textureTypesAndFormats[n.POSITION_TEXTURE_TYPE])),this._enableVelocity&&(this._velocityIndex=i,i++,e.push("gBuffer_Velocity"),t.push(this._textureTypesAndFormats[n.VELOCITY_TEXTURE_TYPE])),this._enableVelocityLinear&&(this._velocityLinearIndex=i,i++,e.push("gBuffer_VelocityLinear"),t.push(this._textureTypesAndFormats[n.VELOCITY_LINEAR_TEXTURE_TYPE])),this._enableReflectivity&&(this._reflectivityIndex=i,i++,e.push("gBuffer_Reflectivity"),t.push(this._textureTypesAndFormats[n.REFLECTIVITY_TEXTURE_TYPE])),this._enableScreenspaceDepth&&(this._screenspaceDepthIndex=i,i++,e.push("gBuffer_ScreenspaceDepth"),t.push(this._textureTypesAndFormats[n.SCREENSPACE_DEPTH_TEXTURE_TYPE])),this._enableIrradiance&&(this._irradianceIndex=i,i++,e.push("gBuffer_Irradiance"),t.push(this._textureTypesAndFormats[n.IRRADIANCE_TEXTURE_TYPE])),[i,e,t]}_createRenderTargets(){var g;let e=this._scene.getEngine(),[t,i,r]=this._assignRenderTargetIndices(),s=0;e._caps.textureFloat&&e._caps.textureFloatLinearFiltering?s=1:e._caps.textureHalfFloat&&e._caps.textureHalfFloatLinearFiltering&&(s=2);let a=this._ratioOrDimensions.width!==void 0?this._ratioOrDimensions:{width:e.getRenderWidth()*this._ratioOrDimensions,height:e.getRenderHeight()*this._ratioOrDimensions},o=[],l=[],c=[];for(let v of r)v?(o.push(v.textureType),l.push(v.textureFormat),c.push((g=v.samplingMode)!=null?g:2)):(o.push(s),l.push(5),c.push(2));if(this._normalsAreUnsigned=o[n.NORMAL_TEXTURE_TYPE]===11||o[n.NORMAL_TEXTURE_TYPE]===13,this._multiRenderTarget=new Kx("gBuffer",a,t,this._scene,{generateMipMaps:!1,generateDepthTexture:!0,types:o,formats:l,samplingModes:c,depthTextureFormat:this._depthFormat},i.concat("gBuffer_DepthBuffer")),!this.isSupported)return;this._multiRenderTarget.wrapU=ge.CLAMP_ADDRESSMODE,this._multiRenderTarget.wrapV=ge.CLAMP_ADDRESSMODE,this._multiRenderTarget.refreshRate=1,this._multiRenderTarget.renderParticles=!1,this._multiRenderTarget.renderList=null;let f=[!0],h=[!1],d=[!0];for(let v=1;v{v.bindAttachments(this.useSpecificClearForDepthTexture?m:u),v.clear(this._clearColor,!0,!0,!0),this.useSpecificClearForDepthTexture&&(v.bindAttachments(_),v.clear(this._clearDepthColor,!0,!0,!0)),v.bindAttachments(u)}),this._resizeObserver=e.onResizeObservable.add(()=>{if(this._multiRenderTarget){let v=this._ratioOrDimensions.width!==void 0?this._ratioOrDimensions:{width:e.getRenderWidth()*this._ratioOrDimensions,height:e.getRenderHeight()*this._ratioOrDimensions};this._multiRenderTarget.resize(v)}});let p=v=>{let x=v.getRenderingMesh(),A=v.getEffectiveMesh(),S=this._scene,E=S.getEngine(),R=v.getMaterial();if(!R)return;if(A._internalAbstractMeshDataInfo._isActiveIntermediate=!1,(this._enableVelocity||this._enableVelocityLinear)&&!this._previousTransformationMatrices[A.uniqueId]&&(this._previousTransformationMatrices[A.uniqueId]={world:K.Identity(),viewProjection:S.getTransformMatrix()},x.skeleton)){let D=x.skeleton.getTransformMatrices(x);this._previousBonesTransformationMatrices[x.uniqueId]=this._copyBonesTransformationMatrices(D,new Float32Array(D.length))}let I=x._getInstancesRenderList(v._id,!!v.getReplacementMesh());if(I.mustReturn)return;let y=E.getCaps().instancedArrays&&(I.visibleInstances[v._id]!==null||x.hasThinInstances),M=A.getWorldMatrix();if(this.isReady(v,y)){let D=v._getDrawWrapper();if(!D)return;let O=D.effect;E.enableEffect(D),y||x._bind(v,O,R.fillMode),this._useUbo?(pf(O,this._scene.getSceneUniformBuffer()),this._scene.finalizeSceneUbo()):(O.setMatrix("viewProjection",S.getTransformMatrix()),O.setMatrix("view",S.getViewMatrix()),this._scene.bindEyePosition(O,"vEyePosition"));let V;if(!x._instanceDataStorage.isFrozen&&(R.backFaceCulling||R.sideOrientation!==null)){let F=A._getWorldMatrixDeterminant();V=R._getEffectiveOrientation(x),F<0&&(V=V===ve.ClockWiseSideOrientation?ve.CounterClockWiseSideOrientation:ve.ClockWiseSideOrientation)}else V=x._effectiveSideOrientation;if(R._preBind(D,V),R.needAlphaTestingForMesh(A)){let F=R.getAlphaTestTexture();F&&(O.setTexture("diffuseSampler",F),O.setMatrix("diffuseMatrix",F.getTextureMatrix()))}if((R.bumpTexture||R.normalTexture||R.geometryNormalTexture)&&S.getEngine().getCaps().standardDerivatives&&le.BumpTextureEnabled){let F=R.bumpTexture||R.normalTexture||R.geometryNormalTexture;O.setFloat3("vBumpInfos",F.coordinatesIndex,1/F.level,R.parallaxScaleBias),O.setMatrix("bumpMatrix",F.getTextureMatrix()),O.setTexture("bumpSampler",F),O.setFloat2("vTangentSpaceParams",R.invertNormalMapX?-1:1,R.invertNormalMapY?-1:1)}if(this._enableReflectivity){if(R.getClassName()==="PBRMetallicRoughnessMaterial")R.metallicRoughnessTexture!==null&&(O.setTexture("reflectivitySampler",R.metallicRoughnessTexture),O.setMatrix("reflectivityMatrix",R.metallicRoughnessTexture.getTextureMatrix())),R.metallic!==null&&O.setFloat("metallic",R.metallic),R.roughness!==null&&O.setFloat("glossiness",1-R.roughness),R.baseTexture!==null&&(O.setTexture("albedoSampler",R.baseTexture),O.setMatrix("albedoMatrix",R.baseTexture.getTextureMatrix())),R.baseColor!==null&&O.setColor3("albedoColor",R.baseColor);else if(R.getClassName()==="PBRSpecularGlossinessMaterial")R.specularGlossinessTexture!==null?(O.setTexture("reflectivitySampler",R.specularGlossinessTexture),O.setMatrix("reflectivityMatrix",R.specularGlossinessTexture.getTextureMatrix())):R.specularColor!==null&&O.setColor3("reflectivityColor",R.specularColor),R.glossiness!==null&&O.setFloat("glossiness",R.glossiness);else if(R.getClassName()==="PBRMaterial")R.metallicTexture!==null&&(O.setTexture("reflectivitySampler",R.metallicTexture),O.setMatrix("reflectivityMatrix",R.metallicTexture.getTextureMatrix())),R.metallic!==null&&O.setFloat("metallic",R.metallic),R.roughness!==null&&O.setFloat("glossiness",1-R.roughness),R.roughness!==null||R.metallic!==null||R.metallicTexture!==null?(R.albedoTexture!==null&&(O.setTexture("albedoSampler",R.albedoTexture),O.setMatrix("albedoMatrix",R.albedoTexture.getTextureMatrix())),R.albedoColor!==null&&O.setColor3("albedoColor",R.albedoColor)):(R.reflectivityTexture!==null?(O.setTexture("reflectivitySampler",R.reflectivityTexture),O.setMatrix("reflectivityMatrix",R.reflectivityTexture.getTextureMatrix())):R.reflectivityColor!==null&&O.setColor3("reflectivityColor",R.reflectivityColor),R.microSurface!==null&&O.setFloat("glossiness",R.microSurface));else if(R.getClassName()==="StandardMaterial")R.specularTexture!==null&&(O.setTexture("reflectivitySampler",R.specularTexture),O.setMatrix("reflectivityMatrix",R.specularTexture.getTextureMatrix())),R.specularColor!==null&&O.setColor3("reflectivityColor",R.specularColor);else if(R.getClassName()==="OpenPBRMaterial"){let F=R;F._useRoughnessFromMetallicTextureGreen&&F.baseMetalnessTexture?(O.setTexture("reflectivitySampler",F.baseMetalnessTexture),O.setMatrix("reflectivityMatrix",F.baseMetalnessTexture.getTextureMatrix())):F.baseMetalnessTexture?(O.setTexture("metallicSampler",F.baseMetalnessTexture),O.setMatrix("metallicMatrix",F.baseMetalnessTexture.getTextureMatrix())):F.specularRoughnessTexture&&(O.setTexture("roughnessSampler",F.specularRoughnessTexture),O.setMatrix("roughnessMatrix",F.specularRoughnessTexture.getTextureMatrix())),O.setFloat("metallic",F.baseMetalness),O.setFloat("glossiness",1-F.specularRoughness),F.baseColorTexture!==null&&(O.setTexture("albedoSampler",F.baseColorTexture),O.setMatrix("albedoMatrix",F.baseColorTexture.getTextureMatrix())),F.baseColor!==null&&O.setColor3("albedoColor",F.baseColor)}}if(this._enableIrradiance&&S.environmentTexture){let F=S.environmentTexture,U=S.postProcessRenderPipelineManager.supportedPipelines.find(W=>W.getClassName()==="IBLShadowsRenderPipeline");if(U){let $=U._getAccumulatedTexture();$&&(O.setTexture("iblShadowSampler",$),O.setFloat2("shadowTextureSize",$.getSize().width,$.getSize().height))}if(O.setMatrix("reflectionMatrix",F.getReflectionTextureMatrix()),O.setFloat2("vReflectionInfos",F.level*S.iblIntensity,0),O.setTexture("reflectionSampler",F),F.irradianceTexture&&(O.setTexture("irradianceSampler",F.irradianceTexture),F.irradianceTexture._dominantDirection&&O.setVector3("vReflectionDominantDirection",F.irradianceTexture._dominantDirection)),F.sphericalPolynomial){let W=F.sphericalPolynomial;if(W.preScaledHarmonics){let $=W.preScaledHarmonics;O.setVector3("vSphericalL00",$.l00),O.setVector3("vSphericalL1_1",$.l1_1),O.setVector3("vSphericalL10",$.l10),O.setVector3("vSphericalL11",$.l11),O.setVector3("vSphericalL2_2",$.l2_2),O.setVector3("vSphericalL2_1",$.l2_1),O.setVector3("vSphericalL20",$.l20),O.setVector3("vSphericalL21",$.l21),O.setVector3("vSphericalL22",$.l22)}else O.setFloat3("vSphericalX",W.x.x,W.x.y,W.x.z),O.setFloat3("vSphericalY",W.y.x,W.y.y,W.y.z),O.setFloat3("vSphericalZ",W.z.x,W.z.y,W.z.z),O.setFloat3("vSphericalXX_ZZ",W.xx.x-W.zz.x,W.xx.y-W.zz.y,W.xx.z-W.zz.z),O.setFloat3("vSphericalYY_ZZ",W.yy.x-W.zz.x,W.yy.y-W.zz.y,W.yy.z-W.zz.z),O.setFloat3("vSphericalZZ",W.zz.x,W.zz.y,W.zz.z),O.setFloat3("vSphericalXY",W.xy.x,W.xy.y,W.xy.z),O.setFloat3("vSphericalYZ",W.yz.x,W.yz.y,W.yz.z),O.setFloat3("vSphericalZX",W.zx.x,W.zx.y,W.zx.z)}if(this.generateIrradianceWithScatterMask&&R.getClassName()==="OpenPBRMaterial"){let W=R;O.setFloat("vSubsurfaceWeight",W.subsurfaceWeight),W.subsurfaceWeightTexture&&(O.setTexture("subsurfaceWeightSampler",W.subsurfaceWeightTexture),O.setMatrix("subsurfaceWeightMatrix",W.subsurfaceWeightTexture.getTextureMatrix())),O.setFloat("vTransmissionWeight",W.transmissionWeight),W.transmissionWeightTexture&&(O.setTexture("transmissionWeightSampler",W.transmissionWeightTexture),O.setMatrix("transmissionWeightMatrix",W.transmissionWeightTexture.getTextureMatrix())),O.setFloat("vTransmissionScatterAnisotropy",W.transmissionScatterAnisotropy),O.setFloat("vSubsurfaceScatterAnisotropy",W.subsurfaceScatterAnisotropy)}}if(Mn(O,R,this._scene),x.useBones&&x.computeBonesUsingShaders&&x.skeleton){let F=x.skeleton;if(F.isUsingTextureForMatrices&&O.getUniformIndex("boneTextureInfo")>-1){let U=F.getTransformMatrixTexture(x);O.setTexture("boneSampler",U),O.setFloat2("boneTextureInfo",F._textureWidth,F._textureHeight)}else O.setMatrices("mBones",x.skeleton.getTransformMatrices(x));(this._enableVelocity||this._enableVelocityLinear)&&O.setMatrices("mPreviousBones",this._previousBonesTransformationMatrices[x.uniqueId])}Cn(x,O),x.morphTargetManager&&x.morphTargetManager.isUsingTextureForTargets&&x.morphTargetManager._bind(O),(this._enableVelocity||this._enableVelocityLinear)&&(O.setMatrix("previousWorld",this._previousTransformationMatrices[A.uniqueId].world),O.setMatrix("previousViewProjection",this._previousTransformationMatrices[A.uniqueId].viewProjection)),y&&x.hasThinInstances&&O.setMatrix("world",M),x._processRendering(A,v,O,R.fillMode,I,y,(F,U)=>{F||O.setMatrix("world",U)})}(this._enableVelocity||this._enableVelocityLinear)&&(this._previousTransformationMatrices[A.uniqueId].world=M.clone(),this._previousTransformationMatrices[A.uniqueId].viewProjection=this._scene.getTransformMatrix().clone(),x.skeleton&&this._copyBonesTransformationMatrices(x.skeleton.getTransformMatrices(x),this._previousBonesTransformationMatrices[A.uniqueId]))};this._multiRenderTarget.customIsReadyFunction=(v,x,A)=>{if((A||x===0)&&v.subMeshes)for(let S=0;S{let E;if(this._linkedWithPrePass){if(!this._prePassRenderer.enabled)return;this._scene.getEngine().bindAttachments(this._attachmentsFromPrePass)}if(S.length){for(e.setColorWrite(!1),E=0;E{throw Xe("GeometryBufferRendererSceneComponent")}});var h5,ice,wD=C(()=>{G();Yh();mg();h5="openpbrUboDeclaration",ice=`uniform vTangentSpaceParams: vec2f;uniform vLightingIntensity: vec4f;uniform pointSize: f32;uniform vDebugMode: vec2f;uniform renderTargetSize: vec2f;uniform cameraInfo: vec4f;uniform backgroundRefractionMatrix: mat4x4f;uniform vBackgroundRefractionInfos: vec3f;uniform vReflectionInfos: vec2f;uniform reflectionMatrix: mat4x4f;uniform vReflectionMicrosurfaceInfos: vec3f;uniform vReflectionPosition: vec3f;uniform vReflectionSize: vec3f;uniform vReflectionFilteringInfo: vec2f;uniform vReflectionDominantDirection: vec3f;uniform vReflectionColor: vec3f;uniform vSphericalL00: vec3f;uniform vSphericalL1_1: vec3f;uniform vSphericalL10: vec3f;uniform vSphericalL11: vec3f;uniform vSphericalL2_2: vec3f;uniform vSphericalL2_1: vec3f;uniform vSphericalL20: vec3f;uniform vSphericalL21: vec3f;uniform vSphericalL22: vec3f;uniform vSphericalX: vec3f;uniform vSphericalY: vec3f;uniform vSphericalZ: vec3f;uniform vSphericalXX_ZZ: vec3f;uniform vSphericalYY_ZZ: vec3f;uniform vSphericalZZ: vec3f;uniform vSphericalXY: vec3f;uniform vSphericalYZ: vec3f;uniform vSphericalZX: vec3f;uniform vBaseWeight: f32;uniform vBaseColor: vec4f;uniform vBaseDiffuseRoughness: f32;uniform vReflectanceInfo: vec4f;uniform vSpecularColor: vec4f;uniform vSpecularAnisotropy: vec3f;uniform vTransmissionWeight : f32;uniform vTransmissionColor : vec3f;uniform vTransmissionDepth : f32;uniform vTransmissionScatter : vec3f;uniform vTransmissionScatterAnisotropy : f32;uniform vTransmissionDispersionScale : f32;uniform vTransmissionDispersionAbbeNumber : f32;uniform vSubsurfaceWeight: f32;uniform vSubsurfaceColor: vec3f;uniform vSubsurfaceRadius: f32;uniform vSubsurfaceRadiusScale: vec3f;uniform vSubsurfaceScatterAnisotropy: f32;uniform vCoatWeight: f32;uniform vCoatColor: vec3f;uniform vCoatRoughness: f32;uniform vCoatRoughnessAnisotropy: f32;uniform vCoatIor: f32;uniform vCoatDarkening : f32;uniform vFuzzWeight: f32;uniform vFuzzColor: vec3f;uniform vFuzzRoughness: f32;uniform vGeometryThinWalled: f32;uniform vGeometryCoatTangent: vec2f;uniform vGeometryThickness: f32;uniform vEmissionColor: vec3f;uniform vThinFilmWeight: f32;uniform vThinFilmThickness: vec2f;uniform vThinFilmIor: f32;uniform vBaseWeightInfos: vec2f;uniform baseWeightMatrix: mat4x4f;uniform vBaseColorInfos: vec2f;uniform baseColorMatrix: mat4x4f;uniform vBaseDiffuseRoughnessInfos: vec2f;uniform baseDiffuseRoughnessMatrix: mat4x4f;uniform vBaseMetalnessInfos: vec2f;uniform baseMetalnessMatrix: mat4x4f;uniform vSpecularWeightInfos: vec2f;uniform specularWeightMatrix: mat4x4f;uniform vSpecularColorInfos: vec2f;uniform specularColorMatrix: mat4x4f;uniform vSpecularRoughnessInfos: vec2f;uniform specularRoughnessMatrix: mat4x4f;uniform vSpecularRoughnessAnisotropyInfos: vec2f;uniform specularRoughnessAnisotropyMatrix: mat4x4f;uniform vTransmissionWeightInfos : vec2f;uniform transmissionWeightMatrix : mat4x4f;uniform vTransmissionColorInfos : vec2f;uniform transmissionColorMatrix : mat4x4f;uniform vTransmissionDepthInfos : vec2f;uniform transmissionDepthMatrix : mat4x4f;uniform vTransmissionScatterInfos : vec2f;uniform transmissionScatterMatrix : mat4x4f;uniform vTransmissionDispersionScaleInfos : vec2f;uniform transmissionDispersionScaleMatrix : mat4x4f;uniform vSubsurfaceWeightInfos: vec2f;uniform subsurfaceWeightMatrix: mat4x4f;uniform vSubsurfaceColorInfos: vec2f;uniform subsurfaceColorMatrix: mat4x4f;uniform vSubsurfaceRadiusScaleInfos: vec2f;uniform subsurfaceRadiusScaleMatrix: mat4x4f;uniform vCoatWeightInfos: vec2f;uniform coatWeightMatrix: mat4x4f;uniform vCoatColorInfos: vec2f;uniform coatColorMatrix: mat4x4f;uniform vCoatRoughnessInfos: vec2f;uniform coatRoughnessMatrix: mat4x4f;uniform vCoatRoughnessAnisotropyInfos: vec2f;uniform coatRoughnessAnisotropyMatrix: mat4x4f;uniform vCoatDarkeningInfos : vec2f;uniform coatDarkeningMatrix : mat4x4f;uniform vFuzzWeightInfos: vec2f;uniform fuzzWeightMatrix: mat4x4f;uniform vFuzzColorInfos: vec2f;uniform fuzzColorMatrix: mat4x4f;uniform vFuzzRoughnessInfos: vec2f;uniform fuzzRoughnessMatrix: mat4x4f;uniform vGeometryNormalInfos: vec2f;uniform geometryNormalMatrix: mat4x4f;uniform vGeometryTangentInfos: vec2f;uniform geometryTangentMatrix: mat4x4f;uniform vGeometryCoatNormalInfos: vec2f;uniform geometryCoatNormalMatrix: mat4x4f;uniform vGeometryCoatTangentInfos: vec2f;uniform geometryCoatTangentMatrix: mat4x4f;uniform vGeometryOpacityInfos: vec2f;uniform geometryOpacityMatrix: mat4x4f;uniform vGeometryThicknessInfos: vec2f;uniform geometryThicknessMatrix: mat4x4f;uniform vEmissionInfos: vec2f;uniform emissionMatrix: mat4x4f;uniform vThinFilmWeightInfos: vec2f;uniform thinFilmWeightMatrix: mat4x4f;uniform vThinFilmThicknessInfos: vec2f;uniform thinFilmThicknessMatrix: mat4x4f;uniform vAmbientOcclusionInfos: vec2f;uniform ambientOcclusionMatrix: mat4x4f; #define ADDITIONAL_UBO_DECLARATION #include #include -`;S.IncludesShadersStoreWGSL[e5]||(S.IncludesShadersStoreWGSL[e5]=Nle)});var t5,Fle,i5=C(()=>{k();t5="openpbrNormalMapVertexDeclaration",Fle=`#if defined(GEOMETRY_NORMAL) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) || defined(FUZZ) +`;T.IncludesShadersStoreWGSL[h5]||(T.IncludesShadersStoreWGSL[h5]=ice)});var d5,rce,u5=C(()=>{G();d5="openpbrNormalMapVertexDeclaration",rce=`#if defined(GEOMETRY_NORMAL) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) || defined(FUZZ) #if defined(TANGENT) && defined(NORMAL) varying vTBN0: vec3f;varying vTBN1: vec3f;varying vTBN2: vec3f; #endif #endif -`;S.IncludesShadersStoreWGSL[t5]||(S.IncludesShadersStoreWGSL[t5]=Fle)});var r5,wle,n5=C(()=>{k();r5="openpbrNormalMapVertex",wle=`#if defined(GEOMETRY_NORMAL) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) || defined(FUZZ) +`;T.IncludesShadersStoreWGSL[d5]||(T.IncludesShadersStoreWGSL[d5]=rce)});var m5,nce,p5=C(()=>{G();m5="openpbrNormalMapVertex",nce=`#if defined(GEOMETRY_NORMAL) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) || defined(FUZZ) #if defined(TANGENT) && defined(NORMAL) var tbnNormal: vec3f=normalize(normalUpdated);var tbnTangent: vec3f=normalize(tangentUpdated.xyz);var tbnBitangent: vec3f=cross(tbnNormal,tbnTangent)*tangentUpdated.w;var matTemp= mat3x3f(finalWorld[0].xyz,finalWorld[1].xyz,finalWorld[2].xyz)* mat3x3f(tbnTangent,tbnBitangent,tbnNormal);vertexOutputs.vTBN0=matTemp[0];vertexOutputs.vTBN1=matTemp[1];vertexOutputs.vTBN2=matTemp[2]; #endif #endif -`;S.IncludesShadersStoreWGSL[r5]||(S.IncludesShadersStoreWGSL[r5]=wle)});var a5={};et(a5,{openpbrVertexShaderWGSL:()=>Ble});var ID,s5,Ble,o5=C(()=>{k();bD();vA();Pm();Sa();km();ql();Zl();Rf();EA();SA();Gm();i5();Ql();X_();TA();Mf();Cf();Yh();AA();xA();yf();Pf();Jl();$l();ec();RA();bA();IA();n5();tc();Y_();CA();K_();yA();ID="openpbrVertexShader",s5=`#define OPENPBR_VERTEX_SHADER +`;T.IncludesShadersStoreWGSL[m5]||(T.IncludesShadersStoreWGSL[m5]=nce)});var g5={};$e(g5,{openpbrVertexShaderWGSL:()=>sce});var FD,_5,sce,v5=C(()=>{G();wD();CA();Nm();Ra();Xm();Ql();$l();Mf();yA();PA();zm();u5();Jl();J_();DA();Pf();Df();Kh();LA();OA();Lf();Of();ec();tc();ic();NA();wA();FA();p5();rc();eg();UA();tg();VA();FD="openpbrVertexShader",_5=`#define OPENPBR_VERTEX_SHADER #include #define CUSTOM_VERTEX_BEGIN #ifndef USE_VERTEX_PULLING @@ -13033,7 +13033,7 @@ vertexOutputs.vMainUV2=uv2Updated; #include #include #define CUSTOM_VERTEX_MAIN_END -}`;S.ShadersStoreWGSL[ID]||(S.ShadersStoreWGSL[ID]=s5);Ble={name:ID,shader:s5}});var l5,Ule,MD=C(()=>{k();Pm();l5="pbrFragmentExtraDeclaration",Ule=`varying vPositionW: vec3f; +}`;T.ShadersStoreWGSL[FD]||(T.ShadersStoreWGSL[FD]=_5);sce={name:FD,shader:_5}});var E5,ace,BD=C(()=>{G();Nm();E5="pbrFragmentExtraDeclaration",ace=`varying vPositionW: vec3f; #if DEBUGMODE>0 varying vClipSpacePosition: vec4f; #endif @@ -13050,7 +13050,7 @@ varying vColor: vec4f; #if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0 varying vViewDepth: f32; #endif -`;S.IncludesShadersStoreWGSL[l5]||(S.IncludesShadersStoreWGSL[l5]=Ule)});var c5,Vle,f5=C(()=>{k();Kh();Gx();c5="openpbrFragmentSamplersDeclaration",Vle=`#include(_DEFINENAME_,BASE_COLOR,_VARYINGNAME_,BaseColor,_SAMPLERNAME_,baseColor) +`;T.IncludesShadersStoreWGSL[E5]||(T.IncludesShadersStoreWGSL[E5]=ace)});var S5,oce,T5=C(()=>{G();jh();Zx();S5="openpbrFragmentSamplersDeclaration",oce=`#include(_DEFINENAME_,BASE_COLOR,_VARYINGNAME_,BaseColor,_SAMPLERNAME_,baseColor) #include(_DEFINENAME_,BASE_WEIGHT,_VARYINGNAME_,BaseWeight,_SAMPLERNAME_,baseWeight) #include(_DEFINENAME_,BASE_DIFFUSE_ROUGHNESS,_VARYINGNAME_,BaseDiffuseRoughness,_SAMPLERNAME_,baseDiffuseRoughness) #include(_DEFINENAME_,BASE_METALNESS,_VARYINGNAME_,BaseMetalness,_SAMPLERNAME_,baseMetalness) @@ -13102,15 +13102,15 @@ var blueNoiseSamplerSampler: sampler;var blueNoiseSampler: texture_2d; #ifdef IBL_CDF_FILTERING var icdfSamplerSampler: sampler;var icdfSampler: texture_2d; #endif -`;S.IncludesShadersStoreWGSL[c5]||(S.IncludesShadersStoreWGSL[c5]=Vle)});var h5,Gle,CD=C(()=>{k();h5="subSurfaceScatteringFunctions",Gle=`fn testLightingForSSS(diffusionProfile: f32)->bool -{return diffusionProfile<1.;}`;S.IncludesShadersStoreWGSL[h5]||(S.IncludesShadersStoreWGSL[h5]=Gle)});var d5,kle,yD=C(()=>{k();d5="importanceSampling",kle=`fn hemisphereCosSample(u: vec2f)->vec3f {var phi: f32=2.*PI*u.x;var cosTheta2: f32=1.-u.y;var cosTheta: f32=sqrt(cosTheta2);var sinTheta: f32=sqrt(1.-cosTheta2);return vec3f(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);} +`;T.IncludesShadersStoreWGSL[S5]||(T.IncludesShadersStoreWGSL[S5]=oce)});var A5,lce,UD=C(()=>{G();A5="subSurfaceScatteringFunctions",lce=`fn testLightingForSSS(diffusionProfile: f32)->bool +{return diffusionProfile<1.;}`;T.IncludesShadersStoreWGSL[A5]||(T.IncludesShadersStoreWGSL[A5]=lce)});var x5,cce,VD=C(()=>{G();x5="importanceSampling",cce=`fn hemisphereCosSample(u: vec2f)->vec3f {var phi: f32=2.*PI*u.x;var cosTheta2: f32=1.-u.y;var cosTheta: f32=sqrt(cosTheta2);var sinTheta: f32=sqrt(1.-cosTheta2);return vec3f(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);} fn hemisphereImportanceSampleDggx(u: vec2f,a: f32)->vec3f {var phi: f32=2.*PI*u.x;var cosTheta2: f32=(1.-u.y)/(1.+(a+1.)*((a-1.)*u.y));var cosTheta: f32=sqrt(cosTheta2);var sinTheta: f32=sqrt(1.-cosTheta2);return vec3f(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);} fn hemisphereImportanceSampleDggxAnisotropic(Xi: vec2f,alphaTangent: f32,alphaBitangent: f32)->vec3f {let alphaT: f32=max(alphaTangent,0.0001);let alphaB: f32=max(alphaBitangent,0.0001);var phi: f32=atan(alphaB/alphaT*tan(2.0f*PI*Xi.x));if (Xi.x>0.5) {phi+=PI; } let cosPhi: f32=cos(phi);let sinPhi: f32=sin(phi);let alpha2: f32=(cosPhi*cosPhi)/(alphaT*alphaT) + (sinPhi*sinPhi)/(alphaB*alphaB);let tanTheta2: f32=Xi.y/(1.0f-Xi.y)/alpha2;let cosTheta: f32=1.0f/sqrt(1.0f+tanTheta2);let sinTheta: f32=sqrt(max(0.0f,1.0f-cosTheta*cosTheta));return vec3f(sinTheta*cosPhi,sinTheta*sinPhi,cosTheta);} fn hemisphereImportanceSampleDCharlie(u: vec2f,a: f32)->vec3f { -var phi: f32=2.*PI*u.x;var sinTheta: f32=pow(u.y,a/(2.*a+1.));var cosTheta: f32=sqrt(1.-sinTheta*sinTheta);return vec3f(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);}`;S.IncludesShadersStoreWGSL[d5]||(S.IncludesShadersStoreWGSL[d5]=kle)});var u5,Wle,PD=C(()=>{k();u5="pbrHelperFunctions",Wle=`#define MINIMUMVARIANCE 0.0005 +var phi: f32=2.*PI*u.x;var sinTheta: f32=pow(u.y,a/(2.*a+1.));var cosTheta: f32=sqrt(1.-sinTheta*sinTheta);return vec3f(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);}`;T.IncludesShadersStoreWGSL[x5]||(T.IncludesShadersStoreWGSL[x5]=cce)});var R5,fce,GD=C(()=>{G();R5="pbrHelperFunctions",fce=`#define MINIMUMVARIANCE 0.0005 fn convertRoughnessToAverageSlope(roughness: f32)->f32 {return roughness*roughness+MINIMUMVARIANCE;} fn fresnelGrazingReflectance(reflectance0: f32)->f32 {var reflectance90: f32=saturate(reflectance0*25.0);return reflectance90;} @@ -13144,7 +13144,7 @@ clearCoatIntensity);return clearCoatAbsorption;} fn computeDefaultMicroSurface(microSurface: f32,reflectivityColor: vec3f)->f32 {const kReflectivityNoAlphaWorkflow_SmoothnessMax: f32=0.95;var reflectivityLuminance: f32=getLuminance(reflectivityColor);var reflectivityLuma: f32=sqrt(reflectivityLuminance);var resultMicroSurface=reflectivityLuma*kReflectivityNoAlphaWorkflow_SmoothnessMax;return resultMicroSurface;} #endif -`;S.IncludesShadersStoreWGSL[u5]||(S.IncludesShadersStoreWGSL[u5]=Wle)});var m5,Hle,DD=C(()=>{k();Vy();m5="pbrDirectLightingSetupFunctions",Hle=`struct preLightingInfo +`;T.IncludesShadersStoreWGSL[R5]||(T.IncludesShadersStoreWGSL[R5]=fce)});var b5,hce,kD=C(()=>{G();qy();b5="pbrDirectLightingSetupFunctions",hce=`struct preLightingInfo {lightOffset: vec3f, lightDistanceSquared: f32, lightDistance: f32, @@ -13189,7 +13189,7 @@ result.areaLightFresnel=data.Fresnel;result.areaLightSpecular=data.Specular; #endif result.areaLightDiffuse=data.Diffuse;result.LdotV=0.;result.roughness=0.;result.diffuseRoughness=0.;result.surfaceAlbedo=vec3f(0.);return result;} #endif -`;S.IncludesShadersStoreWGSL[m5]||(S.IncludesShadersStoreWGSL[m5]=Hle)});var p5,zle,LD=C(()=>{k();p5="pbrDirectLightingFalloffFunctions",zle=`fn computeDistanceLightFalloff_Standard(lightOffset: vec3f,range: f32)->f32 +`;T.IncludesShadersStoreWGSL[b5]||(T.IncludesShadersStoreWGSL[b5]=hce)});var I5,dce,WD=C(()=>{G();I5="pbrDirectLightingFalloffFunctions",dce=`fn computeDistanceLightFalloff_Standard(lightOffset: vec3f,range: f32)->f32 {return max(0.,1.0-length(lightOffset)/range);} fn computeDistanceLightFalloff_Physical(lightDistanceSquared: f32)->f32 {return 1.0/maxEps(lightDistanceSquared);} @@ -13225,7 +13225,7 @@ return computeDirectionalLightFalloff_GLTF(lightDirection,directionToLightCenter #else return computeDirectionalLightFalloff_Standard(lightDirection,directionToLightCenterW,cosHalfAngle,exponent); #endif -}`;S.IncludesShadersStoreWGSL[p5]||(S.IncludesShadersStoreWGSL[p5]=zle)});var _5,Xle,OD=C(()=>{k();_5="hdrFilteringFunctions",Xle=`#ifdef NUM_SAMPLES +}`;T.IncludesShadersStoreWGSL[I5]||(T.IncludesShadersStoreWGSL[I5]=dce)});var M5,uce,HD=C(()=>{G();M5="hdrFilteringFunctions",uce=`#ifdef NUM_SAMPLES #if NUM_SAMPLES>0 fn radicalInverse_VdC(value: u32)->f32 {var bits=(value<<16u) | (value>>16u);bits=((bits & 0x55555555u)<<1u) | ((bits & 0xAAAAAAAAu)>>1u);bits=((bits & 0x33333333u)<<2u) | ((bits & 0xCCCCCCCCu)>>2u);bits=((bits & 0x0F0F0F0Fu)<<4u) | ((bits & 0xF0F0F0F0u)>>4u);bits=((bits & 0x00FF00FFu)<<8u) | ((bits & 0xFF00FF00u)>>8u);return f32(bits)*2.3283064365386963e-10; } @@ -13342,11 +13342,11 @@ result=result/weight;return result;} #endif #endif #endif -`;S.IncludesShadersStoreWGSL[_5]||(S.IncludesShadersStoreWGSL[_5]=Xle)});var g5,Yle,ND=C(()=>{k();g5="pbrBlockReflectance0",Yle=`var reflectanceF0: f32=reflectivityOut.reflectanceF0;var specularEnvironmentR0: vec3f=reflectivityOut.colorReflectanceF0;var specularEnvironmentR90: vec3f= reflectivityOut.reflectanceF90; +`;T.IncludesShadersStoreWGSL[M5]||(T.IncludesShadersStoreWGSL[M5]=uce)});var C5,mce,zD=C(()=>{G();C5="pbrBlockReflectance0",mce=`var reflectanceF0: f32=reflectivityOut.reflectanceF0;var specularEnvironmentR0: vec3f=reflectivityOut.colorReflectanceF0;var specularEnvironmentR90: vec3f= reflectivityOut.reflectanceF90; #ifdef ALPHAFRESNEL var reflectance90: f32=fresnelGrazingReflectance(reflectanceF0);specularEnvironmentR90=specularEnvironmentR90*reflectance90; #endif -`;S.IncludesShadersStoreWGSL[g5]||(S.IncludesShadersStoreWGSL[g5]=Yle)});var v5,Kle,FD=C(()=>{k();Gy();ND();v5="pbrDirectLightingFunctions",Kle=`#define CLEARCOATREFLECTANCE90 1.0 +`;T.IncludesShadersStoreWGSL[C5]||(T.IncludesShadersStoreWGSL[C5]=mce)});var y5,pce,XD=C(()=>{G();Zy();zD();y5="pbrDirectLightingFunctions",pce=`#define CLEARCOATREFLECTANCE90 1.0 struct lightingInfo {diffuse: vec3f, #ifdef SS_TRANSLUCENCY @@ -13568,7 +13568,7 @@ result.sheen+=info.sheen; batchOffset+=CLUSTLIGHT_BATCH;} return result;} #endif -`;S.IncludesShadersStoreWGSL[v5]||(S.IncludesShadersStoreWGSL[v5]=Kle)});var E5,jle,S5=C(()=>{k();E5="openpbrNormalMapFragmentMainFunctions",jle=`#if defined(GEOMETRY_NORMAL) || defined(GEOMETRY_COAT_NORMAL) || defined(ANISOTROPIC) || defined(FUZZ) || defined(DETAIL) +`;T.IncludesShadersStoreWGSL[y5]||(T.IncludesShadersStoreWGSL[y5]=pce)});var P5,_ce,D5=C(()=>{G();P5="openpbrNormalMapFragmentMainFunctions",_ce=`#if defined(GEOMETRY_NORMAL) || defined(GEOMETRY_COAT_NORMAL) || defined(ANISOTROPIC) || defined(FUZZ) || defined(DETAIL) #if defined(TANGENT) && defined(NORMAL) varying vTBN0: vec3f;varying vTBN1: vec3f;varying vTBN2: vec3f; #endif @@ -13608,7 +13608,7 @@ fn perturbNormal(cotangentFrame: mat3x3f,textureSample: vec3f,scale: f32)->vec3f fn cotangent_frame(normal: vec3f,p: vec3f,uv: vec2f,tangentSpaceParams: vec2f)->mat3x3f {var dp1: vec3f=dpdx(p);var dp2: vec3f=dpdy(p);var duv1: vec2f=dpdx(uv);var duv2: vec2f=dpdy(uv);var dp2perp: vec3f=cross(dp2,normal);var dp1perp: vec3f=cross(normal,dp1);var tangent: vec3f=dp2perp*duv1.x+dp1perp*duv2.x;var bitangent: vec3f=dp2perp*duv1.y+dp1perp*duv2.y;tangent*=tangentSpaceParams.x;bitangent*=tangentSpaceParams.y;var det: f32=max(dot(tangent,tangent),dot(bitangent,bitangent));var invmax: f32=select(inverseSqrt(det),0.0,det==0.0);return mat3x3f(tangent*invmax,bitangent*invmax,normal);} #endif -`;S.IncludesShadersStoreWGSL[E5]||(S.IncludesShadersStoreWGSL[E5]=jle)});var T5,qle,A5=C(()=>{k();Kh();T5="openpbrNormalMapFragmentFunctions",qle=`#if defined(GEOMETRY_NORMAL) +`;T.IncludesShadersStoreWGSL[P5]||(T.IncludesShadersStoreWGSL[P5]=_ce)});var L5,gce,O5=C(()=>{G();jh();L5="openpbrNormalMapFragmentFunctions",gce=`#if defined(GEOMETRY_NORMAL) #include(_DEFINENAME_,GEOMETRY_NORMAL,_VARYINGNAME_,GeometryNormal,_SAMPLERNAME_,geometryNormal) #endif #if defined(GEOMETRY_COAT_NORMAL) @@ -13641,7 +13641,7 @@ return -texCoordOffset; #endif } #endif -`;S.IncludesShadersStoreWGSL[T5]||(S.IncludesShadersStoreWGSL[T5]=qle)});var x5,Zle,R5=C(()=>{k();x5="openpbrConductorReflectance",Zle=`#define pbr_inline +`;T.IncludesShadersStoreWGSL[L5]||(T.IncludesShadersStoreWGSL[L5]=gce)});var N5,vce,w5=C(()=>{G();N5="openpbrConductorReflectance",vce=`#define pbr_inline fn conductorReflectance(baseColor: vec3f,specularColor: vec3f,specularWeight: f32)->ReflectanceParams {var outParams: ReflectanceParams; #if (CONDUCTOR_SPECULAR_MODEL==CONDUCTOR_SPECULAR_MODEL_OPENPBR) @@ -13649,9 +13649,9 @@ outParams.coloredF0=baseColor*specularWeight;outParams.coloredF90=specularColor* #else outParams.coloredF0=baseColor;outParams.coloredF90=vec3f(1.0f); #endif -outParams.F0=1.0f;outParams.F90=1.0f;return outParams;}`;S.IncludesShadersStoreWGSL[x5]||(S.IncludesShadersStoreWGSL[x5]=Zle)});var b5,Qle,I5=C(()=>{k();b5="openpbrAmbientOcclusionFunctions",Qle=`fn compute_specular_occlusion(n_dot_v: f32,metallic: f32,ambient_occlusion: f32,roughness: f32)->f32 +outParams.F0=1.0f;outParams.F90=1.0f;return outParams;}`;T.IncludesShadersStoreWGSL[N5]||(T.IncludesShadersStoreWGSL[N5]=vce)});var F5,Ece,B5=C(()=>{G();F5="openpbrAmbientOcclusionFunctions",Ece=`fn compute_specular_occlusion(n_dot_v: f32,metallic: f32,ambient_occlusion: f32,roughness: f32)->f32 {let specular_occlusion: f32=saturate(pow(n_dot_v+ambient_occlusion,exp2(-16.0*roughness-1.0))-1.0+ambient_occlusion);return mix(specular_occlusion,1.0,metallic*square(1.0-roughness));} -`;S.IncludesShadersStoreWGSL[b5]||(S.IncludesShadersStoreWGSL[b5]=Qle)});var M5,Jle,C5=C(()=>{k();M5="openpbrVolumeFunctions",Jle=`struct OpenPBRHomogeneousVolume {extinction_coeff: vec3f, +`;T.IncludesShadersStoreWGSL[F5]||(T.IncludesShadersStoreWGSL[F5]=Ece)});var U5,Sce,V5=C(()=>{G();U5="openpbrVolumeFunctions",Sce=`struct OpenPBRHomogeneousVolume {extinction_coeff: vec3f, ss_albedo: vec3f, multi_scatter_color: vec3f, absorption_coeff: vec3f, @@ -13708,7 +13708,7 @@ let filter_samples_scale: f32=samples_scale(pixels_to_projective(overscan_size_i return vec3f(select(unconvolved_irradiance.r,irradiance_sum.r/weight_sum.r,weight_sum.r>=1e-5f), select(unconvolved_irradiance.g,irradiance_sum.g/weight_sum.g,weight_sum.g>=1e-5f), select(unconvolved_irradiance.b,irradiance_sum.b/weight_sum.b,weight_sum.b>=1e-5f));} -`;S.IncludesShadersStoreWGSL[M5]||(S.IncludesShadersStoreWGSL[M5]=Jle)});var y5,$le,wD=C(()=>{k();y5="pbrBlockNormalGeometric",$le=`var viewDirectionW: vec3f=normalize(scene.vEyePosition.xyz-input.vPositionW); +`;T.IncludesShadersStoreWGSL[U5]||(T.IncludesShadersStoreWGSL[U5]=Sce)});var G5,Tce,YD=C(()=>{G();G5="pbrBlockNormalGeometric",Tce=`var viewDirectionW: vec3f=normalize(scene.vEyePosition.xyz-input.vPositionW); #ifdef NORMAL var normalW: vec3f=normalize(input.vNormalW); #else @@ -13718,7 +13718,7 @@ var geometricNormalW: vec3f=normalW; #if defined(TWOSIDEDLIGHTING) && defined(NORMAL) geometricNormalW=select(-geometricNormalW,geometricNormalW,fragmentInputs.frontFacing); #endif -`;S.IncludesShadersStoreWGSL[y5]||(S.IncludesShadersStoreWGSL[y5]=$le)});var P5,ece,D5=C(()=>{k();P5="openpbrNormalMapFragment",ece=`var uvOffset: vec2f= vec2f(0.0,0.0); +`;T.IncludesShadersStoreWGSL[G5]||(T.IncludesShadersStoreWGSL[G5]=Tce)});var k5,Ace,W5=C(()=>{G();k5="openpbrNormalMapFragment",Ace=`var uvOffset: vec2f= vec2f(0.0,0.0); #if defined(GEOMETRY_NORMAL) || defined(GEOMETRY_COAT_NORMAL) || defined(PARALLAX) || defined(DETAIL) #ifdef NORMALXYSCALE var normalScale: f32=1.0; @@ -13773,7 +13773,7 @@ normalW=perturbNormalBase(TBN,blendedNormal,uniforms.vGeometryNormalInfos.y); #elif defined(DETAIL) detailNormal=vec3f(detailNormal.xy*uniforms.vDetailInfos.z,detailNormal.z);normalW=perturbNormalBase(TBN,detailNormal,uniforms.vDetailInfos.z); #endif -`;S.IncludesShadersStoreWGSL[P5]||(S.IncludesShadersStoreWGSL[P5]=ece)});var L5,tce,O5=C(()=>{k();L5="openpbrBlockNormalFinal",tce=`#if defined(FORCENORMALFORWARD) && defined(NORMAL) +`;T.IncludesShadersStoreWGSL[k5]||(T.IncludesShadersStoreWGSL[k5]=Ace)});var H5,xce,z5=C(()=>{G();H5="openpbrBlockNormalFinal",xce=`#if defined(FORCENORMALFORWARD) && defined(NORMAL) var faceNormal: vec3f=normalize(cross(dpdx(fragmentInputs.vPositionW),dpdy(fragmentInputs.vPositionW)))*scene.vEyePosition.w; #if defined(TWOSIDEDLIGHTING) faceNormal=select(-faceNormal,faceNormal,fragmentInputs.frontFacing); @@ -13787,7 +13787,7 @@ normalW=select(normalW,-normalW,fragmentInputs.frontFacing);coatNormalW=select(c normalW=select(-normalW,normalW,fragmentInputs.frontFacing);coatNormalW=select(-coatNormalW,coatNormalW,fragmentInputs.frontFacing); #endif #endif -`;S.IncludesShadersStoreWGSL[L5]||(S.IncludesShadersStoreWGSL[L5]=tce)});var N5,ice,F5=C(()=>{k();N5="openpbrBaseLayerData",ice=`var base_color=vec3f(0.8);var base_metalness: f32=0.0;var base_diffuse_roughness: f32=0.0;var specular_weight: f32=1.0;var specular_roughness: f32=0.3;var specular_color: vec3f=vec3f(1.0);var specular_roughness_anisotropy: f32=0.0;var specular_ior: f32=1.5;var alpha: f32=1.0;var geometry_tangent: vec2f=vec2f(1.0,0.0);var geometry_thickness: f32=0.0; +`;T.IncludesShadersStoreWGSL[H5]||(T.IncludesShadersStoreWGSL[H5]=xce)});var X5,Rce,Y5=C(()=>{G();X5="openpbrBaseLayerData",Rce=`var base_color=vec3f(0.8);var base_metalness: f32=0.0;var base_diffuse_roughness: f32=0.0;var specular_weight: f32=1.0;var specular_roughness: f32=0.3;var specular_color: vec3f=vec3f(1.0);var specular_roughness_anisotropy: f32=0.0;var specular_ior: f32=1.5;var alpha: f32=1.0;var geometry_tangent: vec2f=vec2f(1.0,0.0);var geometry_thickness: f32=0.0; #ifdef BASE_WEIGHT let baseWeightFromTexture: vec4f=textureSample(baseWeightSampler,baseWeightSamplerSampler,fragmentInputs.vBaseWeightUV+uvOffset); #endif @@ -13913,7 +13913,7 @@ let detailRoughness: f32=mix(0.5f,detailColor.b,vDetailInfos.w);let loLerp: f32= #ifdef USE_GLTF_STYLE_ANISOTROPY let baseAlpha: f32=specular_roughness*specular_roughness;let roughnessT: f32=mix(baseAlpha,1.0f,specular_roughness_anisotropy*specular_roughness_anisotropy);let roughnessB: f32=baseAlpha;specular_roughness_anisotropy=1.0f-roughnessB/max(roughnessT,0.00001f);specular_roughness=sqrt(roughnessT/sqrt(2.0f/(1.0f+(1.0f-specular_roughness_anisotropy)*(1.0f-specular_roughness_anisotropy)))); #endif -`;S.IncludesShadersStoreWGSL[N5]||(S.IncludesShadersStoreWGSL[N5]=ice)});var w5,rce,B5=C(()=>{k();w5="openpbrCoatLayerData",rce=`var coat_weight: f32=0.0f;var coat_color: vec3f=vec3f(1.0f);var coat_roughness: f32=0.0f;var coat_roughness_anisotropy: f32=0.0f;var coat_ior: f32=1.6f;var coat_darkening: f32=1.0f;var geometry_coat_tangent: vec2f=vec2f(1.0f,0.0f); +`;T.IncludesShadersStoreWGSL[X5]||(T.IncludesShadersStoreWGSL[X5]=Rce)});var K5,bce,j5=C(()=>{G();K5="openpbrCoatLayerData",bce=`var coat_weight: f32=0.0f;var coat_color: vec3f=vec3f(1.0f);var coat_roughness: f32=0.0f;var coat_roughness_anisotropy: f32=0.0f;var coat_ior: f32=1.6f;var coat_darkening: f32=1.0f;var geometry_coat_tangent: vec2f=vec2f(1.0f,0.0f); #ifdef COAT_WEIGHT var coatWeightFromTexture: vec4f=textureSample(coatWeightSampler,coatWeightSamplerSampler,fragmentInputs.vCoatWeightUV+uvOffset); #endif @@ -13965,7 +13965,7 @@ coat_darkening*=coatDarkeningFromTexture.r; #ifdef USE_GLTF_STYLE_ANISOTROPY let coatAlpha: f32=coat_roughness*coat_roughness;let coatRoughnessT: f32=mix(coatAlpha,1.0f,coat_roughness_anisotropy*coat_roughness_anisotropy);let coatRoughnessB: f32=coatAlpha;coat_roughness_anisotropy=1.0f-coatRoughnessB/max(coatRoughnessT,0.00001f);coat_roughness=sqrt(coatRoughnessT/sqrt(2.0f/(1.0f+(1.0f-coat_roughness_anisotropy)*(1.0f-coat_roughness_anisotropy)))); #endif -`;S.IncludesShadersStoreWGSL[w5]||(S.IncludesShadersStoreWGSL[w5]=rce)});var U5,nce,V5=C(()=>{k();U5="openpbrThinFilmLayerData",nce=`#ifdef THIN_FILM +`;T.IncludesShadersStoreWGSL[K5]||(T.IncludesShadersStoreWGSL[K5]=bce)});var q5,Ice,Z5=C(()=>{G();q5="openpbrThinFilmLayerData",Ice=`#ifdef THIN_FILM var thin_film_weight: f32=uniforms.vThinFilmWeight;var thin_film_thickness: f32=uniforms.vThinFilmThickness.r*1000.0f; var thin_film_ior: f32=uniforms.vThinFilmIor; #ifdef THIN_FILM_WEIGHT @@ -13982,7 +13982,7 @@ thin_film_thickness*=thinFilmThicknessFromTexture; #endif let thin_film_ior_scale: f32=clamp(2.0f*abs(thin_film_ior-1.0f),0.0f,1.0f); #endif -`;S.IncludesShadersStoreWGSL[U5]||(S.IncludesShadersStoreWGSL[U5]=nce)});var G5,sce,k5=C(()=>{k();G5="openpbrFuzzLayerData",sce=`var fuzz_weight: f32=0.0f;var fuzz_color: vec3f=vec3f(1.0f);var fuzz_roughness: f32=0.0f; +`;T.IncludesShadersStoreWGSL[q5]||(T.IncludesShadersStoreWGSL[q5]=Ice)});var Q5,Mce,$5=C(()=>{G();Q5="openpbrFuzzLayerData",Mce=`var fuzz_weight: f32=0.0f;var fuzz_color: vec3f=vec3f(1.0f);var fuzz_roughness: f32=0.0f; #ifdef FUZZ #ifdef FUZZ_WEIGHT let fuzzWeightFromTexture: vec4f=textureSample(fuzzWeightSampler,fuzzWeightSamplerSampler,fragmentInputs.vFuzzWeightUV+uvOffset); @@ -14011,11 +14011,11 @@ fuzz_roughness*=fuzzRoughnessFromTexture.a; fuzz_roughness*=fuzzRoughnessFromTexture.r; #endif #endif -`;S.IncludesShadersStoreWGSL[G5]||(S.IncludesShadersStoreWGSL[G5]=sce)});var W5,ace,H5=C(()=>{k();W5="openpbrAmbientOcclusionData",ace=`var ambient_occlusion: vec3f=vec3f(1.0f,1.0f,1.0f);var specular_ambient_occlusion: f32=1.0f;var coat_specular_ambient_occlusion: f32=1.0f; +`;T.IncludesShadersStoreWGSL[Q5]||(T.IncludesShadersStoreWGSL[Q5]=Mce)});var J5,Cce,eY=C(()=>{G();J5="openpbrAmbientOcclusionData",Cce=`var ambient_occlusion: vec3f=vec3f(1.0f,1.0f,1.0f);var specular_ambient_occlusion: f32=1.0f;var coat_specular_ambient_occlusion: f32=1.0f; #ifdef AMBIENT_OCCLUSION var ambientOcclusionFromTexture: vec3f=textureSample(ambientOcclusionSampler,ambientOcclusionSamplerSampler,fragmentInputs.vAmbientOcclusionUV+uvOffset).rgb;ambient_occlusion=vec3f(ambientOcclusionFromTexture.r*uniforms.vAmbientOcclusionInfos.y+(1.0f-uniforms.vAmbientOcclusionInfos.y)); #endif -`;S.IncludesShadersStoreWGSL[W5]||(S.IncludesShadersStoreWGSL[W5]=ace)});var z5,oce,X5=C(()=>{k();z5="openpbrBackgroundTransmission",oce=`var slab_translucent_background: vec4f=vec4f(0.,0.,0.,1.); +`;T.IncludesShadersStoreWGSL[J5]||(T.IncludesShadersStoreWGSL[J5]=Cce)});var tY,yce,iY=C(()=>{G();tY="openpbrBackgroundTransmission",yce=`var slab_translucent_background: vec4f=vec4f(0.,0.,0.,1.); #ifdef REFRACTED_BACKGROUND {let refractionLOD: f32=min(transmission_roughness,0.7)*uniforms.vBackgroundRefractionInfos.x;let lodTexelSize: f32=pow(2.0f,refractionLOD-uniforms.vBackgroundRefractionInfos.x); #ifdef DISPERSION @@ -14043,7 +14043,7 @@ let noiseOffset: vec2f=noise.xy*lodTexelSize;slab_translucent_background=texture #endif } #endif -`;S.IncludesShadersStoreWGSL[z5]||(S.IncludesShadersStoreWGSL[z5]=oce)});var Y5,lce,K5=C(()=>{k();Y5="openpbrEnvironmentLighting",lce=`#if defined(REFLECTION) || defined(REFRACTED_BACKGROUND) +`;T.IncludesShadersStoreWGSL[tY]||(T.IncludesShadersStoreWGSL[tY]=yce)});var rY,Pce,nY=C(()=>{G();rY="openpbrEnvironmentLighting",Pce=`#if defined(REFLECTION) || defined(REFRACTED_BACKGROUND) var coatAbsorption=vec3f(1.0f);var coatIblFresnel: f32=0.0;if (coat_weight>0.0) {coatIblFresnel=computeDielectricIblFresnel(coatReflectance,coatGeoInfo.environmentBrdf);let hemisphere_avg_fresnel: f32=coatReflectance.F0+0.5f*(1.0f-coatReflectance.F0);var averageReflectance: f32=(coatIblFresnel+hemisphere_avg_fresnel)*0.5f;let roughnessFactor=1.0f-coat_roughness*0.5f;averageReflectance*=roughnessFactor;var darkened_transmission: f32=(1.0f-averageReflectance)*(1.0f-averageReflectance);darkened_transmission=mix(1.0,darkened_transmission,coat_darkening);var sin2: f32=1.0f-coatGeoInfo.NdotV*coatGeoInfo.NdotV;sin2=sin2/(coat_ior*coat_ior);let cos_t: f32=sqrt(1.0f-sin2);let coatPathLength=1.0f/cos_t;let colored_transmission: vec3f=pow(coat_color,vec3f(coatPathLength));coatAbsorption=mix(vec3f(1.0f),colored_transmission*darkened_transmission,coat_weight);} #endif #ifdef REFLECTION @@ -14337,7 +14337,7 @@ slab_translucent_base_ibl=slab_translucent_background.rgb*volume_absorption*tran #endif let material_dielectric_base_ibl: vec3f=mix(black,slab_translucent_base_ibl.rgb,surface_translucency_weight);let material_dielectric_gloss_ibl: vec3f=material_dielectric_base_ibl*(baseGeoInfo.NdotV);let material_base_substrate_ibl: vec3f=mix(material_dielectric_gloss_ibl,black,base_metalness);let material_coated_base_ibl: vec3f=layer(material_base_substrate_ibl,black,coatIblFresnel,coatAbsorption,vec3f(1.0f));material_surface_ibl=material_coated_base_ibl; #endif -`;S.IncludesShadersStoreWGSL[Y5]||(S.IncludesShadersStoreWGSL[Y5]=lce)});var j5,cce,q5=C(()=>{k();j5="openpbrDirectLightingInit",cce=`#ifdef LIGHT{X} +`;T.IncludesShadersStoreWGSL[rY]||(T.IncludesShadersStoreWGSL[rY]=Pce)});var sY,Dce,aY=C(()=>{G();sY="openpbrDirectLightingInit",Dce=`#ifdef LIGHT{X} var preInfo{X}: preLightingInfo;var preInfoCoat{X}: preLightingInfo;let lightColor{X}: vec4f=light{X}.vLightDiffuse;var shadow{X}: f32=1.0f; #if defined(SHADOWONLY) || defined(LIGHTMAP) && defined(LIGHTMAPEXCLUDED{X}) && defined(LIGHTMAPNOSPECULAR{X}) #else @@ -14408,7 +14408,7 @@ preInfo{X}.roughness=adjustRoughnessFromLightProperties(specular_roughness,light preInfo{X}.diffuseRoughness=base_diffuse_roughness;preInfo{X}.surfaceAlbedo=base_color.rgb; #endif #endif -`;S.IncludesShadersStoreWGSL[j5]||(S.IncludesShadersStoreWGSL[j5]=cce)});var Z5,fce,Q5=C(()=>{k();Z5="openpbrDirectLighting",fce=`#ifdef LIGHT{X} +`;T.IncludesShadersStoreWGSL[sY]||(T.IncludesShadersStoreWGSL[sY]=Dce)});var oY,Lce,lY=C(()=>{G();oY="openpbrDirectLighting",Lce=`#ifdef LIGHT{X} {var slab_diffuse: vec3f=vec3f(0.f,0.f,0.f);var slab_translucent: vec3f=vec3f(0.f,0.f,0.f);var slab_glossy: vec3f=vec3f(0.f,0.f,0.f);var specularFresnel: f32=0.0f;var specularColoredFresnel: vec3f=vec3f(0.f,0.f,0.f);var slab_metal: vec3f=vec3f(0.f,0.f,0.f);var slab_coat: vec3f=vec3f(0.f,0.f,0.f);var coatFresnel: f32=0.0f;var slab_fuzz: vec3f=vec3f(0.f,0.f,0.f);var fuzzFresnel: f32=0.0f; #ifdef HEMILIGHT{X} slab_diffuse=computeHemisphericDiffuseLighting(preInfo{X},lightColor{X}.rgb,light{X}.vLightGround); @@ -14563,7 +14563,7 @@ total_direct_diffuse+=slab_diffuse; #endif let material_dielectric_base: vec3f=mix(slab_diffuse*base_color.rgb,slab_translucent,surface_translucency_weight);let material_dielectric_gloss: vec3f=material_dielectric_base*(1.0f-specularFresnel)+slab_glossy*specularColoredFresnel;let material_base_substrate: vec3f=mix(material_dielectric_gloss,slab_metal,base_metalness);let material_coated_base: vec3f=layer(material_base_substrate,slab_coat,coatFresnel,coatAbsorption,vec3f(1.0f));material_surface_direct+=layer(material_coated_base,slab_fuzz,fuzzFresnel*fuzz_weight,vec3f(1.0f),fuzz_color);} #endif -`;S.IncludesShadersStoreWGSL[Z5]||(S.IncludesShadersStoreWGSL[Z5]=fce)});var J5,hce,BD=C(()=>{k();J5="pbrBlockImageProcessing",hce=`#if defined(IMAGEPROCESSINGPOSTPROCESS) || defined(SS_SCATTERING) +`;T.IncludesShadersStoreWGSL[oY]||(T.IncludesShadersStoreWGSL[oY]=Lce)});var cY,Oce,KD=C(()=>{G();cY="pbrBlockImageProcessing",Oce=`#if defined(IMAGEPROCESSINGPOSTPROCESS) || defined(SS_SCATTERING) #if !defined(SKIPFINALCOLORCLAMP) finalColor=vec4f(clamp(finalColor.rgb,vec3f(0.),vec3f(30.0)),finalColor.a); #endif @@ -14574,7 +14574,7 @@ finalColor=vec4f(finalColor.rgb,finalColor.a*mesh.visibility); #ifdef PREMULTIPLYALPHA finalColor=vec4f(finalColor.rgb*finalColor.a,finalColor.a);; #endif -`;S.IncludesShadersStoreWGSL[J5]||(S.IncludesShadersStoreWGSL[J5]=hce)});var $5,dce,eY=C(()=>{k();$5="openpbrBlockPrePass",dce=`#if SCENE_MRT_COUNT>0 +`;T.IncludesShadersStoreWGSL[cY]||(T.IncludesShadersStoreWGSL[cY]=Oce)});var fY,Nce,hY=C(()=>{G();fY="openpbrBlockPrePass",Nce=`#if SCENE_MRT_COUNT>0 var writeGeometryInfo: f32=select(0.0,1.0,finalColor.a>ALPHATESTVALUE);var fragData: array,SCENE_MRT_COUNT>; #ifdef PREPASS_POSITION fragData[PREPASS_POSITION_INDEX]= vec4f(fragmentInputs.vPositionW,writeGeometryInfo); @@ -14664,7 +14664,7 @@ fragmentOutputs.fragData6=fragData[6]; fragmentOutputs.fragData7=fragData[7]; #endif #endif -`;S.IncludesShadersStoreWGSL[$5]||(S.IncludesShadersStoreWGSL[$5]=dce)});var tY,uce,UD=C(()=>{k();tY="pbrDebug",uce=`#if DEBUGMODE>0 +`;T.IncludesShadersStoreWGSL[fY]||(T.IncludesShadersStoreWGSL[fY]=Nce)});var dY,wce,jD=C(()=>{G();dY="pbrDebug",wce=`#if DEBUGMODE>0 if (input.vClipSpacePosition.x/input.vClipSpacePosition.w>=uniforms.vDebugMode.x) {var color: vec3f; #if DEBUGMODE==1 color=fragmentInputs.vPositionW.rgb; @@ -14848,7 +14848,7 @@ return fragmentOutputs; #endif } #endif -`;S.IncludesShadersStoreWGSL[tY]||(S.IncludesShadersStoreWGSL[tY]=uce)});var rY={};et(rY,{openpbrPixelShaderWGSL:()=>mce});var VD,iY,mce,nY=C(()=>{k();PA();DA();bD();MD();LA();f5();NA();ic();Yh();j_();Sa();CD();yD();PD();FA();OA();Gm();DD();LD();km();OD();FD();kx();S5();A5();og();vD();R5();I5();ED();SD();C5();rc();wD();D5();O5();F5();AD();TD();B5();V5();k5();H5();VA();X5();K5();q5();Q5();GA();q_();BD();eY();kA();UD();VD="openpbrPixelShader",iY=`#define OPENPBR_FRAGMENT_SHADER +`;T.IncludesShadersStoreWGSL[dY]||(T.IncludesShadersStoreWGSL[dY]=wce)});var mY={};$e(mY,{openpbrPixelShaderWGSL:()=>Fce});var qD,uY,Fce,pY=C(()=>{G();GA();kA();wD();BD();WA();T5();zA();nc();Kh();ig();Ra();UD();VD();GD();XA();HA();zm();kD();WD();Xm();HD();XD();Qx();D5();O5();pg();CD();w5();B5();yD();PD();V5();sc();YD();W5();z5();Y5();LD();DD();j5();Z5();$5();eY();qA();iY();nY();aY();lY();ZA();rg();KD();hY();QA();jD();qD="openpbrPixelShader",uY=`#define OPENPBR_FRAGMENT_SHADER #define CUSTOM_FRAGMENT_BEGIN #include[SCENE_MRT_COUNT] #include @@ -15072,7 +15072,7 @@ if (fragDepth==nearestDepth) {fragmentOutputs.frontColor=vec4f(fragmentOutputs.f #include #define CUSTOM_FRAGMENT_MAIN_END } -`;S.ShadersStoreWGSL[VD]||(S.ShadersStoreWGSL[VD]=iY);mce={name:VD,shader:iY}});var sY,pce,aY=C(()=>{k();TP();WA();sY="openpbrVertexDeclaration",pce=`#include +`;T.ShadersStoreWGSL[qD]||(T.ShadersStoreWGSL[qD]=uY);Fce={name:qD,shader:uY}});var _Y,Bce,gY=C(()=>{G();DP();$A();_Y="openpbrVertexDeclaration",Bce=`#include #ifdef BASE_COLOR uniform vec2 vBaseColorInfos;uniform mat4 baseColorMatrix; #endif @@ -15199,22 +15199,22 @@ uniform vec4 vDetailInfos;uniform mat4 detailMatrix; #endif #include #define ADDITIONAL_VERTEX_DECLARATION -`;S.IncludesShadersStore[sY]||(S.IncludesShadersStore[sY]=pce)});var oY,_ce,GD=C(()=>{k();jh();lg();oY="openpbrUboDeclaration",_ce=`layout(std140,column_major) uniform;uniform Material {vec2 vTangentSpaceParams;vec4 vLightingIntensity;float pointSize;vec2 vDebugMode;vec2 renderTargetSize;vec4 cameraInfo;mat4 backgroundRefractionMatrix;vec3 vBackgroundRefractionInfos;vec2 vReflectionInfos;mat4 reflectionMatrix;vec3 vReflectionMicrosurfaceInfos;vec3 vReflectionPosition;vec3 vReflectionSize;vec2 vReflectionFilteringInfo;vec3 vReflectionDominantDirection;vec3 vReflectionColor;vec3 vSphericalL00;vec3 vSphericalL1_1;vec3 vSphericalL10;vec3 vSphericalL11;vec3 vSphericalL2_2;vec3 vSphericalL2_1;vec3 vSphericalL20;vec3 vSphericalL21;vec3 vSphericalL22;vec3 vSphericalX;vec3 vSphericalY;vec3 vSphericalZ;vec3 vSphericalXX_ZZ;vec3 vSphericalYY_ZZ;vec3 vSphericalZZ;vec3 vSphericalXY;vec3 vSphericalYZ;vec3 vSphericalZX;float vBaseWeight;vec4 vBaseColor;float vBaseDiffuseRoughness;vec4 vReflectanceInfo;vec4 vSpecularColor;vec3 vSpecularAnisotropy;float vTransmissionWeight;vec3 vTransmissionColor;float vTransmissionDepth;vec3 vTransmissionScatter;float vTransmissionScatterAnisotropy;float vTransmissionDispersionScale;float vTransmissionDispersionAbbeNumber;float vSubsurfaceWeight;vec3 vSubsurfaceColor;float vSubsurfaceRadius;vec3 vSubsurfaceRadiusScale;float vSubsurfaceScatterAnisotropy;float vCoatWeight;vec3 vCoatColor;float vCoatRoughness;float vCoatRoughnessAnisotropy;float vCoatIor;float vCoatDarkening;float vFuzzWeight;vec3 vFuzzColor;float vFuzzRoughness;float vGeometryThinWalled;vec2 vGeometryCoatTangent;float vGeometryThickness;vec3 vEmissionColor;float vThinFilmWeight;vec2 vThinFilmThickness;float vThinFilmIor;vec2 vBaseWeightInfos;mat4 baseWeightMatrix;vec2 vBaseColorInfos;mat4 baseColorMatrix;vec2 vBaseDiffuseRoughnessInfos;mat4 baseDiffuseRoughnessMatrix;vec2 vBaseMetalnessInfos;mat4 baseMetalnessMatrix;vec2 vSpecularWeightInfos;mat4 specularWeightMatrix;vec2 vSpecularColorInfos;mat4 specularColorMatrix;vec2 vSpecularRoughnessInfos;mat4 specularRoughnessMatrix;vec2 vSpecularRoughnessAnisotropyInfos;mat4 specularRoughnessAnisotropyMatrix;vec2 vTransmissionWeightInfos;mat4 transmissionWeightMatrix;vec2 vTransmissionColorInfos;mat4 transmissionColorMatrix;vec2 vTransmissionDepthInfos;mat4 transmissionDepthMatrix;vec2 vTransmissionScatterInfos;mat4 transmissionScatterMatrix;vec2 vTransmissionDispersionScaleInfos;mat4 transmissionDispersionScaleMatrix;vec2 vSubsurfaceWeightInfos;mat4 subsurfaceWeightMatrix;vec2 vSubsurfaceColorInfos;mat4 subsurfaceColorMatrix;vec2 vSubsurfaceRadiusScaleInfos;mat4 subsurfaceRadiusScaleMatrix;vec2 vCoatWeightInfos;mat4 coatWeightMatrix;vec2 vCoatColorInfos;mat4 coatColorMatrix;vec2 vCoatRoughnessInfos;mat4 coatRoughnessMatrix;vec2 vCoatRoughnessAnisotropyInfos;mat4 coatRoughnessAnisotropyMatrix;vec2 vCoatDarkeningInfos;mat4 coatDarkeningMatrix;vec2 vFuzzWeightInfos;mat4 fuzzWeightMatrix;vec2 vFuzzColorInfos;mat4 fuzzColorMatrix;vec2 vFuzzRoughnessInfos;mat4 fuzzRoughnessMatrix;vec2 vGeometryNormalInfos;mat4 geometryNormalMatrix;vec2 vGeometryTangentInfos;mat4 geometryTangentMatrix;vec2 vGeometryCoatNormalInfos;mat4 geometryCoatNormalMatrix;vec2 vGeometryCoatTangentInfos;mat4 geometryCoatTangentMatrix;vec2 vGeometryOpacityInfos;mat4 geometryOpacityMatrix;vec2 vGeometryThicknessInfos;mat4 geometryThicknessMatrix;vec2 vEmissionColorInfos;mat4 emissionColorMatrix;vec2 vThinFilmWeightInfos;mat4 thinFilmWeightMatrix;vec2 vThinFilmThicknessInfos;mat4 thinFilmThicknessMatrix;vec2 vAmbientOcclusionInfos;mat4 ambientOcclusionMatrix; +`;T.IncludesShadersStore[_Y]||(T.IncludesShadersStore[_Y]=Bce)});var vY,Uce,ZD=C(()=>{G();qh();_g();vY="openpbrUboDeclaration",Uce=`layout(std140,column_major) uniform;uniform Material {vec2 vTangentSpaceParams;vec4 vLightingIntensity;float pointSize;vec2 vDebugMode;vec2 renderTargetSize;vec4 cameraInfo;mat4 backgroundRefractionMatrix;vec3 vBackgroundRefractionInfos;vec2 vReflectionInfos;mat4 reflectionMatrix;vec3 vReflectionMicrosurfaceInfos;vec3 vReflectionPosition;vec3 vReflectionSize;vec2 vReflectionFilteringInfo;vec3 vReflectionDominantDirection;vec3 vReflectionColor;vec3 vSphericalL00;vec3 vSphericalL1_1;vec3 vSphericalL10;vec3 vSphericalL11;vec3 vSphericalL2_2;vec3 vSphericalL2_1;vec3 vSphericalL20;vec3 vSphericalL21;vec3 vSphericalL22;vec3 vSphericalX;vec3 vSphericalY;vec3 vSphericalZ;vec3 vSphericalXX_ZZ;vec3 vSphericalYY_ZZ;vec3 vSphericalZZ;vec3 vSphericalXY;vec3 vSphericalYZ;vec3 vSphericalZX;float vBaseWeight;vec4 vBaseColor;float vBaseDiffuseRoughness;vec4 vReflectanceInfo;vec4 vSpecularColor;vec3 vSpecularAnisotropy;float vTransmissionWeight;vec3 vTransmissionColor;float vTransmissionDepth;vec3 vTransmissionScatter;float vTransmissionScatterAnisotropy;float vTransmissionDispersionScale;float vTransmissionDispersionAbbeNumber;float vSubsurfaceWeight;vec3 vSubsurfaceColor;float vSubsurfaceRadius;vec3 vSubsurfaceRadiusScale;float vSubsurfaceScatterAnisotropy;float vCoatWeight;vec3 vCoatColor;float vCoatRoughness;float vCoatRoughnessAnisotropy;float vCoatIor;float vCoatDarkening;float vFuzzWeight;vec3 vFuzzColor;float vFuzzRoughness;float vGeometryThinWalled;vec2 vGeometryCoatTangent;float vGeometryThickness;vec3 vEmissionColor;float vThinFilmWeight;vec2 vThinFilmThickness;float vThinFilmIor;vec2 vBaseWeightInfos;mat4 baseWeightMatrix;vec2 vBaseColorInfos;mat4 baseColorMatrix;vec2 vBaseDiffuseRoughnessInfos;mat4 baseDiffuseRoughnessMatrix;vec2 vBaseMetalnessInfos;mat4 baseMetalnessMatrix;vec2 vSpecularWeightInfos;mat4 specularWeightMatrix;vec2 vSpecularColorInfos;mat4 specularColorMatrix;vec2 vSpecularRoughnessInfos;mat4 specularRoughnessMatrix;vec2 vSpecularRoughnessAnisotropyInfos;mat4 specularRoughnessAnisotropyMatrix;vec2 vTransmissionWeightInfos;mat4 transmissionWeightMatrix;vec2 vTransmissionColorInfos;mat4 transmissionColorMatrix;vec2 vTransmissionDepthInfos;mat4 transmissionDepthMatrix;vec2 vTransmissionScatterInfos;mat4 transmissionScatterMatrix;vec2 vTransmissionDispersionScaleInfos;mat4 transmissionDispersionScaleMatrix;vec2 vSubsurfaceWeightInfos;mat4 subsurfaceWeightMatrix;vec2 vSubsurfaceColorInfos;mat4 subsurfaceColorMatrix;vec2 vSubsurfaceRadiusScaleInfos;mat4 subsurfaceRadiusScaleMatrix;vec2 vCoatWeightInfos;mat4 coatWeightMatrix;vec2 vCoatColorInfos;mat4 coatColorMatrix;vec2 vCoatRoughnessInfos;mat4 coatRoughnessMatrix;vec2 vCoatRoughnessAnisotropyInfos;mat4 coatRoughnessAnisotropyMatrix;vec2 vCoatDarkeningInfos;mat4 coatDarkeningMatrix;vec2 vFuzzWeightInfos;mat4 fuzzWeightMatrix;vec2 vFuzzColorInfos;mat4 fuzzColorMatrix;vec2 vFuzzRoughnessInfos;mat4 fuzzRoughnessMatrix;vec2 vGeometryNormalInfos;mat4 geometryNormalMatrix;vec2 vGeometryTangentInfos;mat4 geometryTangentMatrix;vec2 vGeometryCoatNormalInfos;mat4 geometryCoatNormalMatrix;vec2 vGeometryCoatTangentInfos;mat4 geometryCoatTangentMatrix;vec2 vGeometryOpacityInfos;mat4 geometryOpacityMatrix;vec2 vGeometryThicknessInfos;mat4 geometryThicknessMatrix;vec2 vEmissionColorInfos;mat4 emissionColorMatrix;vec2 vThinFilmWeightInfos;mat4 thinFilmWeightMatrix;vec2 vThinFilmThicknessInfos;mat4 thinFilmThicknessMatrix;vec2 vAmbientOcclusionInfos;mat4 ambientOcclusionMatrix; #define ADDITIONAL_UBO_DECLARATION }; #include #include -`;S.IncludesShadersStore[oY]||(S.IncludesShadersStore[oY]=_ce)});var lY,gce,cY=C(()=>{k();lY="openpbrNormalMapVertexDeclaration",gce=`#if defined(GEOMETRY_NORMAL) || defined(PARALLAX) || defined(GEOMETRY_COAT_NORMAL) || defined(ANISOTROPIC) || defined(FUZZ) +`;T.IncludesShadersStore[vY]||(T.IncludesShadersStore[vY]=Uce)});var EY,Vce,SY=C(()=>{G();EY="openpbrNormalMapVertexDeclaration",Vce=`#if defined(GEOMETRY_NORMAL) || defined(PARALLAX) || defined(GEOMETRY_COAT_NORMAL) || defined(ANISOTROPIC) || defined(FUZZ) #if defined(TANGENT) && defined(NORMAL) varying mat3 vTBN; #endif #endif -`;S.IncludesShadersStore[lY]||(S.IncludesShadersStore[lY]=gce)});var fY,vce,hY=C(()=>{k();fY="openpbrNormalMapVertex",vce=`#if defined(GEOMETRY_NORMAL) || defined(PARALLAX) || defined(GEOMETRY_COAT_NORMAL) || defined(ANISOTROPIC) || defined(FUZZ) +`;T.IncludesShadersStore[EY]||(T.IncludesShadersStore[EY]=Vce)});var TY,Gce,AY=C(()=>{G();TY="openpbrNormalMapVertex",Gce=`#if defined(GEOMETRY_NORMAL) || defined(PARALLAX) || defined(GEOMETRY_COAT_NORMAL) || defined(ANISOTROPIC) || defined(FUZZ) #if defined(TANGENT) && defined(NORMAL) vec3 tbnNormal=normalize(normalUpdated);vec3 tbnTangent=normalize(tangentUpdated.xyz);vec3 tbnBitangent=cross(tbnNormal,tbnTangent)*tangentUpdated.w;vTBN=mat3(finalWorld)*mat3(tbnTangent,tbnBitangent,tbnNormal); #endif #endif -`;S.IncludesShadersStore[fY]||(S.IncludesShadersStore[fY]=vce)});var uY={};et(uY,{openpbrVertexShader:()=>Ece});var kD,dY,Ece,mY=C(()=>{k();aY();GD();HA();Dm();Ta();Um();nc();sc();bf();zA();XA();Vm();cY();ac();Z_();YA();KA();Df();Lf();qh();Of();Nf();oc();lc();cc();jA();qA();ZA();hY();fc();Q_();JA();J_();$A();kD="openpbrVertexShader",dY=`#define OPENPBR_VERTEX_SHADER +`;T.IncludesShadersStore[TY]||(T.IncludesShadersStore[TY]=Gce)});var RY={};$e(RY,{openpbrVertexShader:()=>kce});var QD,xY,kce,bY=C(()=>{G();gY();ZD();JA();wm();ba();Wm();ac();oc();Cf();ex();tx();Hm();SY();lc();ng();ix();rx();Nf();wf();Zh();Ff();Bf();cc();fc();hc();nx();sx();ax();AY();dc();sg();lx();ag();cx();QD="openpbrVertexShader",xY=`#define OPENPBR_VERTEX_SHADER #define CUSTOM_VERTEX_EXTENSION precision highp float; #include<__decl__openpbrVertex> @@ -15435,7 +15435,7 @@ gl_PointSize=pointSize; #include #define CUSTOM_VERTEX_MAIN_END } -`;S.ShadersStore[kD]||(S.ShadersStore[kD]=dY);Ece={name:kD,shader:dY}});var pY,Sce,_Y=C(()=>{k();oD();ex();pY="openpbrFragmentDeclaration",Sce=`uniform float vBaseWeight;uniform vec4 vBaseColor;uniform float vBaseDiffuseRoughness;uniform vec4 vReflectanceInfo;uniform vec4 vSpecularColor;uniform vec3 vSpecularAnisotropy;uniform float vTransmissionWeight;uniform vec3 vTransmissionColor;uniform float vTransmissionDepth;uniform vec3 vTransmissionScatter;uniform float vTransmissionScatterAnisotropy;uniform float vTransmissionDispersionScale;uniform float vTransmissionDispersionAbbeNumber;uniform float vSubsurfaceWeight;uniform vec3 vSubsurfaceColor;uniform float vSubsurfaceRadius;uniform vec3 vSubsurfaceRadiusScale;uniform float vSubsurfaceScatterAnisotropy;uniform float vCoatWeight;uniform vec3 vCoatColor;uniform float vCoatRoughness;uniform float vCoatRoughnessAnisotropy;uniform float vCoatIor;uniform float vCoatDarkening;uniform float vFuzzWeight;uniform vec3 vFuzzColor;uniform float vFuzzRoughness;uniform vec2 vGeometryCoatTangent;uniform float vGeometryThickness;uniform vec3 vEmissionColor;uniform float vThinFilmWeight;uniform vec2 vThinFilmThickness;uniform float vThinFilmIor;uniform float vGeometryThinWalled;uniform vec4 vLightingIntensity;uniform float visibility;uniform vec2 renderTargetSize; +`;T.ShadersStore[QD]||(T.ShadersStore[QD]=xY);kce={name:QD,shader:xY}});var IY,Wce,MY=C(()=>{G();gD();fx();IY="openpbrFragmentDeclaration",Wce=`uniform float vBaseWeight;uniform vec4 vBaseColor;uniform float vBaseDiffuseRoughness;uniform vec4 vReflectanceInfo;uniform vec4 vSpecularColor;uniform vec3 vSpecularAnisotropy;uniform float vTransmissionWeight;uniform vec3 vTransmissionColor;uniform float vTransmissionDepth;uniform vec3 vTransmissionScatter;uniform float vTransmissionScatterAnisotropy;uniform float vTransmissionDispersionScale;uniform float vTransmissionDispersionAbbeNumber;uniform float vSubsurfaceWeight;uniform vec3 vSubsurfaceColor;uniform float vSubsurfaceRadius;uniform vec3 vSubsurfaceRadiusScale;uniform float vSubsurfaceScatterAnisotropy;uniform float vCoatWeight;uniform vec3 vCoatColor;uniform float vCoatRoughness;uniform float vCoatRoughnessAnisotropy;uniform float vCoatIor;uniform float vCoatDarkening;uniform float vFuzzWeight;uniform vec3 vFuzzColor;uniform float vFuzzRoughness;uniform vec2 vGeometryCoatTangent;uniform float vGeometryThickness;uniform vec3 vEmissionColor;uniform float vThinFilmWeight;uniform vec2 vThinFilmThickness;uniform float vThinFilmIor;uniform float vGeometryThinWalled;uniform vec4 vLightingIntensity;uniform float visibility;uniform vec2 renderTargetSize; #ifdef BASE_COLOR uniform vec2 vBaseColorInfos; #endif @@ -15584,7 +15584,7 @@ uniform vec3 vSphericalX;uniform vec3 vSphericalY;uniform vec3 vSphericalZ;unifo uniform mat4 backgroundRefractionMatrix;uniform vec3 vBackgroundRefractionInfos; #endif #define ADDITIONAL_FRAGMENT_DECLARATION -`;S.IncludesShadersStore[pY]||(S.IncludesShadersStore[pY]=Sce)});var gY,Tce,WD=C(()=>{k();Dm();gY="pbrFragmentExtraDeclaration",Tce=`varying vec3 vPositionW; +`;T.IncludesShadersStore[IY]||(T.IncludesShadersStore[IY]=Wce)});var CY,Hce,$D=C(()=>{G();wm();CY="pbrFragmentExtraDeclaration",Hce=`varying vec3 vPositionW; #if DEBUGMODE>0 varying vec4 vClipSpacePosition; #endif @@ -15601,7 +15601,7 @@ varying vec4 vColor; #if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0 varying float vViewDepth; #endif -`;S.IncludesShadersStore[gY]||(S.IncludesShadersStore[gY]=Tce)});var vY,Ace,EY=C(()=>{k();Zh();Ux();vY="openpbrFragmentSamplersDeclaration",Ace=`#include(_DEFINENAME_,BASE_COLOR,_VARYINGNAME_,BaseColor,_SAMPLERNAME_,baseColor) +`;T.IncludesShadersStore[CY]||(T.IncludesShadersStore[CY]=Hce)});var yY,zce,PY=C(()=>{G();Qh();jx();yY="openpbrFragmentSamplersDeclaration",zce=`#include(_DEFINENAME_,BASE_COLOR,_VARYINGNAME_,BaseColor,_SAMPLERNAME_,baseColor) #include(_DEFINENAME_,BASE_WEIGHT,_VARYINGNAME_,BaseWeight,_SAMPLERNAME_,baseWeight) #include(_DEFINENAME_,BASE_DIFFUSE_ROUGHNESS,_VARYINGNAME_,BaseDiffuseRoughness,_SAMPLERNAME_,baseDiffuseRoughness) #include(_DEFINENAME_,BASE_METALNESS,_VARYINGNAME_,BaseMetalness,_SAMPLERNAME_,baseMetalness) @@ -15653,15 +15653,15 @@ uniform sampler2D blueNoiseSampler; #ifdef IBL_CDF_FILTERING uniform sampler2D icdfSampler; #endif -`;S.IncludesShadersStore[vY]||(S.IncludesShadersStore[vY]=Ace)});var SY,xce,HD=C(()=>{k();SY="subSurfaceScatteringFunctions",xce=`bool testLightingForSSS(float diffusionProfile) -{return diffusionProfile<1.;}`;S.IncludesShadersStore[SY]||(S.IncludesShadersStore[SY]=xce)});var TY,Rce,zD=C(()=>{k();TY="importanceSampling",Rce=`vec3 hemisphereCosSample(vec2 u) {float phi=2.*PI*u.x;float cosTheta2=1.-u.y;float cosTheta=sqrt(cosTheta2);float sinTheta=sqrt(1.-cosTheta2);return vec3(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);} +`;T.IncludesShadersStore[yY]||(T.IncludesShadersStore[yY]=zce)});var DY,Xce,JD=C(()=>{G();DY="subSurfaceScatteringFunctions",Xce=`bool testLightingForSSS(float diffusionProfile) +{return diffusionProfile<1.;}`;T.IncludesShadersStore[DY]||(T.IncludesShadersStore[DY]=Xce)});var LY,Yce,eL=C(()=>{G();LY="importanceSampling",Yce=`vec3 hemisphereCosSample(vec2 u) {float phi=2.*PI*u.x;float cosTheta2=1.-u.y;float cosTheta=sqrt(cosTheta2);float sinTheta=sqrt(1.-cosTheta2);return vec3(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);} vec3 hemisphereImportanceSampleDggx(vec2 u,float a) {float phi=2.*PI*u.x;float cosTheta2=(1.-u.y)/(1.+(a+1.)*((a-1.)*u.y));float cosTheta=sqrt(cosTheta2);float sinTheta=sqrt(1.-cosTheta2);return vec3(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);} vec3 hemisphereImportanceSampleDggxAnisotropic(vec2 Xi,float alphaTangent,float alphaBitangent) {alphaTangent=max(alphaTangent,0.0001);alphaBitangent=max(alphaBitangent,0.0001);float phi=atan(alphaBitangent/alphaTangent*tan(2.0*3.14159265*Xi.x));if (Xi.x>0.5) phi+=3.14159265; float cosPhi=cos(phi);float sinPhi=sin(phi);float alpha2=(cosPhi*cosPhi)/(alphaTangent*alphaTangent) + (sinPhi*sinPhi)/(alphaBitangent*alphaBitangent);float tanTheta2=Xi.y/(1.0-Xi.y)/alpha2;float cosTheta=1.0/sqrt(1.0+tanTheta2);float sinTheta=sqrt(max(0.0,1.0-cosTheta*cosTheta));return vec3(sinTheta*cosPhi,sinTheta*sinPhi,cosTheta);} vec3 hemisphereImportanceSampleDCharlie(vec2 u,float a) { -float phi=2.*PI*u.x;float sinTheta=pow(u.y,a/(2.*a+1.));float cosTheta=sqrt(1.-sinTheta*sinTheta);return vec3(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);}`;S.IncludesShadersStore[TY]||(S.IncludesShadersStore[TY]=Rce)});var AY,bce,XD=C(()=>{k();AY="pbrHelperFunctions",bce=`#define MINIMUMVARIANCE 0.0005 +float phi=2.*PI*u.x;float sinTheta=pow(u.y,a/(2.*a+1.));float cosTheta=sqrt(1.-sinTheta*sinTheta);return vec3(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);}`;T.IncludesShadersStore[LY]||(T.IncludesShadersStore[LY]=Yce)});var OY,Kce,tL=C(()=>{G();OY="pbrHelperFunctions",Kce=`#define MINIMUMVARIANCE 0.0005 float convertRoughnessToAverageSlope(float roughness) {return square(roughness)+MINIMUMVARIANCE;} float fresnelGrazingReflectance(float reflectance0) {float reflectance90=saturate(reflectance0*25.0);return reflectance90;} @@ -15696,7 +15696,7 @@ clearCoatIntensity);return clearCoatAbsorption;} float computeDefaultMicroSurface(float microSurface,vec3 reflectivityColor) {const float kReflectivityNoAlphaWorkflow_SmoothnessMax=0.95;float reflectivityLuminance=getLuminance(reflectivityColor);float reflectivityLuma=sqrt(reflectivityLuminance);microSurface=reflectivityLuma*kReflectivityNoAlphaWorkflow_SmoothnessMax;return microSurface;} #endif -`;S.IncludesShadersStore[AY]||(S.IncludesShadersStore[AY]=bce)});var xY,Ice,YD=C(()=>{k();jy();xY="pbrDirectLightingSetupFunctions",Ice=`struct preLightingInfo +`;T.IncludesShadersStore[OY]||(T.IncludesShadersStore[OY]=Kce)});var NY,jce,iL=C(()=>{G();nP();NY="pbrDirectLightingSetupFunctions",jce=`struct preLightingInfo {vec3 lightOffset;float lightDistanceSquared;float lightDistance;float attenuation;vec3 L;vec3 H;float NdotV;float NdotLUnclamped;float NdotL;float VdotH;float LdotV;float roughness;float diffuseRoughness;vec3 surfaceAlbedo; #ifdef IRIDESCENCE float iridescenceIntensity; @@ -15729,7 +15729,7 @@ result.areaLightFresnel=data.Fresnel;result.areaLightSpecular=data.Specular; #endif result.areaLightDiffuse=data.Diffuse;result.LdotV=0.;result.roughness=0.;result.diffuseRoughness=0.;result.surfaceAlbedo=vec3(0.);return result;} #endif -`;S.IncludesShadersStore[xY]||(S.IncludesShadersStore[xY]=Ice)});var RY,Mce,KD=C(()=>{k();RY="pbrDirectLightingFalloffFunctions",Mce=`float computeDistanceLightFalloff_Standard(vec3 lightOffset,float range) +`;T.IncludesShadersStore[NY]||(T.IncludesShadersStore[NY]=jce)});var wY,qce,rL=C(()=>{G();wY="pbrDirectLightingFalloffFunctions",qce=`float computeDistanceLightFalloff_Standard(vec3 lightOffset,float range) {return max(0.,1.0-length(lightOffset)/range);} float computeDistanceLightFalloff_Physical(float lightDistanceSquared) {return 1.0/maxEps(lightDistanceSquared);} @@ -15765,7 +15765,7 @@ return computeDirectionalLightFalloff_GLTF(lightDirection,directionToLightCenter #else return computeDirectionalLightFalloff_Standard(lightDirection,directionToLightCenterW,cosHalfAngle,exponent); #endif -}`;S.IncludesShadersStore[RY]||(S.IncludesShadersStore[RY]=Mce)});var bY,Cce,jD=C(()=>{k();bY="hdrFilteringFunctions",Cce=`#if NUM_SAMPLES +}`;T.IncludesShadersStore[wY]||(T.IncludesShadersStore[wY]=qce)});var FY,Zce,nL=C(()=>{G();FY="hdrFilteringFunctions",Zce=`#if NUM_SAMPLES #if NUM_SAMPLES>0 #if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE) float radicalInverse_VdC(uint bits) @@ -15910,7 +15910,7 @@ result=result/weight;return result;} #endif #endif #endif -`;S.IncludesShadersStore[bY]||(S.IncludesShadersStore[bY]=Cce)});var IY,yce,qD=C(()=>{k();IY="pbrDirectLightingFunctions",yce=`#define CLEARCOATREFLECTANCE90 1.0 +`;T.IncludesShadersStore[FY]||(T.IncludesShadersStore[FY]=Zce)});var BY,Qce,sL=C(()=>{G();BY="pbrDirectLightingFunctions",Qce=`#define CLEARCOATREFLECTANCE90 1.0 struct lightingInfo {vec3 diffuse; #ifdef SS_TRANSLUCENCY @@ -16016,7 +16016,7 @@ float visibility=visibility_CharlieSheen(info.NdotL,info.NdotV,alphaG); float visibility=visibility_Ashikhmin(info.NdotL,info.NdotV);/* #endif */ float sheenTerm=fresnel*distribution*visibility;return sheenTerm*info.attenuation*info.NdotL*lightColor;} #endif -`;S.IncludesShadersStore[IY]||(S.IncludesShadersStore[IY]=yce)});var MY,Pce,CY=C(()=>{k();MY="openpbrNormalMapFragmentMainFunctions",Pce=`#if defined(GEOMETRY_NORMAL) || defined(GEOMETRY_COAT_NORMAL) || defined(ANISOTROPIC) || defined(FUZZ) || defined(DETAIL) +`;T.IncludesShadersStore[BY]||(T.IncludesShadersStore[BY]=Qce)});var UY,$ce,VY=C(()=>{G();UY="openpbrNormalMapFragmentMainFunctions",$ce=`#if defined(GEOMETRY_NORMAL) || defined(GEOMETRY_COAT_NORMAL) || defined(ANISOTROPIC) || defined(FUZZ) || defined(DETAIL) #if defined(TANGENT) && defined(NORMAL) varying mat3 vTBN; #endif @@ -16077,7 +16077,7 @@ vec3 perturbNormal(mat3 cotangentFrame,vec3 textureSample,float scale) mat3 cotangent_frame(vec3 normal,vec3 p,vec2 uv,vec2 tangentSpaceParams) {vec3 dp1=dFdx(p);vec3 dp2=dFdy(p);vec2 duv1=dFdx(uv);vec2 duv2=dFdy(uv);vec3 dp2perp=cross(dp2,normal);vec3 dp1perp=cross(normal,dp1);vec3 tangent=dp2perp*duv1.x+dp1perp*duv2.x;vec3 bitangent=dp2perp*duv1.y+dp1perp*duv2.y;tangent*=tangentSpaceParams.x;bitangent*=tangentSpaceParams.y;float det=max(dot(tangent,tangent),dot(bitangent,bitangent));float invmax=det==0.0 ? 0.0 : inversesqrt(det);return mat3(tangent*invmax,bitangent*invmax,normal);} #endif -`;S.IncludesShadersStore[MY]||(S.IncludesShadersStore[MY]=Pce)});var yY,Dce,PY=C(()=>{k();Zh();yY="openpbrNormalMapFragmentFunctions",Dce=`#if defined(GEOMETRY_NORMAL) +`;T.IncludesShadersStore[UY]||(T.IncludesShadersStore[UY]=$ce)});var GY,Jce,kY=C(()=>{G();Qh();GY="openpbrNormalMapFragmentFunctions",Jce=`#if defined(GEOMETRY_NORMAL) #include(_DEFINENAME_,GEOMETRY_NORMAL,_VARYINGNAME_,GeometryNormal,_SAMPLERNAME_,geometryNormal) #endif #if defined(GEOMETRY_COAT_NORMAL) @@ -16110,7 +16110,7 @@ return -texCoordOffset; #endif } #endif -`;S.IncludesShadersStore[yY]||(S.IncludesShadersStore[yY]=Dce)});var DY,Lce,LY=C(()=>{k();DY="openpbrConductorReflectance",Lce=`#define pbr_inline +`;T.IncludesShadersStore[GY]||(T.IncludesShadersStore[GY]=Jce)});var WY,efe,HY=C(()=>{G();WY="openpbrConductorReflectance",efe=`#define pbr_inline ReflectanceParams conductorReflectance(in vec3 baseColor,in vec3 specularColor,in float specularWeight) {ReflectanceParams outParams; #if (CONDUCTOR_SPECULAR_MODEL==CONDUCTOR_SPECULAR_MODEL_OPENPBR) @@ -16118,9 +16118,9 @@ outParams.coloredF0=baseColor*specularWeight;outParams.coloredF90=specularColor* #else outParams.coloredF0=baseColor;outParams.coloredF90=vec3(1.0); #endif -outParams.F0=1.0;outParams.F90=1.0;return outParams;}`;S.IncludesShadersStore[DY]||(S.IncludesShadersStore[DY]=Lce)});var OY,Oce,NY=C(()=>{k();OY="openpbrAmbientOcclusionFunctions",Oce=`float compute_specular_occlusion(const float n_dot_v,const float metallic,const float ambient_occlusion,const float roughness) +outParams.F0=1.0;outParams.F90=1.0;return outParams;}`;T.IncludesShadersStore[WY]||(T.IncludesShadersStore[WY]=efe)});var zY,tfe,XY=C(()=>{G();zY="openpbrAmbientOcclusionFunctions",tfe=`float compute_specular_occlusion(const float n_dot_v,const float metallic,const float ambient_occlusion,const float roughness) {float specular_occlusion=saturate(pow(n_dot_v+ambient_occlusion,exp2(-16.0*roughness-1.0))-1.0+ambient_occlusion);return mix(specular_occlusion,1.0,metallic*square(1.0-roughness));} -`;S.IncludesShadersStore[OY]||(S.IncludesShadersStore[OY]=Oce)});var FY,Nce,wY=C(()=>{k();FY="openpbrVolumeFunctions",Nce=`struct OpenPBRHomogeneousVolume {vec3 extinction_coeff; +`;T.IncludesShadersStore[zY]||(T.IncludesShadersStore[zY]=tfe)});var YY,ife,KY=C(()=>{G();YY="openpbrVolumeFunctions",ife=`struct OpenPBRHomogeneousVolume {vec3 extinction_coeff; vec3 ss_albedo; vec3 multi_scatter_color; vec3 absorption_coeff; @@ -16176,7 +16176,7 @@ float filter_samples_scale=samples_scale(pixels_to_projective(overscan_size_in_p {vec3 weights=sss_irradiance.a/sss_samples_pdf(icdf,dz)*sss_pdf(dist,d.rgb);irradiance_sum+=weights*sss_irradiance.rgb;weight_sum+=weights;}} return vec3(weight_sum.r<1e-5f ? unconvolved_irradiance.r : irradiance_sum.r/weight_sum.r, weight_sum.g<1e-5f ? unconvolved_irradiance.g : irradiance_sum.g/weight_sum.g, -weight_sum.b<1e-5f ? unconvolved_irradiance.b : irradiance_sum.b/weight_sum.b);}`;S.IncludesShadersStore[FY]||(S.IncludesShadersStore[FY]=Nce)});var BY,Fce,ZD=C(()=>{k();BY="pbrBlockNormalGeometric",Fce=`vec3 viewDirectionW=normalize(vEyePosition.xyz-vPositionW); +weight_sum.b<1e-5f ? unconvolved_irradiance.b : irradiance_sum.b/weight_sum.b);}`;T.IncludesShadersStore[YY]||(T.IncludesShadersStore[YY]=ife)});var jY,rfe,aL=C(()=>{G();jY="pbrBlockNormalGeometric",rfe=`vec3 viewDirectionW=normalize(vEyePosition.xyz-vPositionW); #ifdef NORMAL vec3 normalW=normalize(vNormalW); #else @@ -16186,7 +16186,7 @@ vec3 geometricNormalW=normalW; #if defined(TWOSIDEDLIGHTING) && defined(NORMAL) geometricNormalW=gl_FrontFacing ? geometricNormalW : -geometricNormalW; #endif -`;S.IncludesShadersStore[BY]||(S.IncludesShadersStore[BY]=Fce)});var UY,wce,VY=C(()=>{k();UY="openpbrNormalMapFragment",wce=`vec2 uvOffset=vec2(0.0,0.0); +`;T.IncludesShadersStore[jY]||(T.IncludesShadersStore[jY]=rfe)});var qY,nfe,ZY=C(()=>{G();qY="openpbrNormalMapFragment",nfe=`vec2 uvOffset=vec2(0.0,0.0); #if defined(GEOMETRY_NORMAL) || defined(GEOMETRY_COAT_NORMAL) || defined(PARALLAX) || defined(DETAIL) #ifdef NORMALXYSCALE float normalScale=1.0; @@ -16241,7 +16241,7 @@ normalW=perturbNormalBase(TBN,blendedNormal,vGeometryNormalInfos.y); #elif defined(DETAIL) detailNormal.xy*=vDetailInfos.z;normalW=perturbNormalBase(TBN,detailNormal,vDetailInfos.z); #endif -`;S.IncludesShadersStore[UY]||(S.IncludesShadersStore[UY]=wce)});var GY,Bce,kY=C(()=>{k();GY="openpbrBlockNormalFinal",Bce=`#if defined(FORCENORMALFORWARD) && defined(NORMAL) +`;T.IncludesShadersStore[qY]||(T.IncludesShadersStore[qY]=nfe)});var QY,sfe,$Y=C(()=>{G();QY="openpbrBlockNormalFinal",sfe=`#if defined(FORCENORMALFORWARD) && defined(NORMAL) vec3 faceNormal=normalize(cross(dFdx(vPositionW),dFdy(vPositionW)))*vEyePosition.w; #if defined(TWOSIDEDLIGHTING) faceNormal=gl_FrontFacing ? faceNormal : -faceNormal; @@ -16255,7 +16255,7 @@ normalW=gl_FrontFacing ? -normalW : normalW;coatNormalW=gl_FrontFacing ? -coatNo normalW=gl_FrontFacing ? normalW : -normalW;coatNormalW=gl_FrontFacing ? coatNormalW : -coatNormalW; #endif #endif -`;S.IncludesShadersStore[GY]||(S.IncludesShadersStore[GY]=Bce)});var WY,Uce,HY=C(()=>{k();WY="openpbrBaseLayerData",Uce=`vec3 base_color=vec3(0.8);float base_metalness=0.0;float base_diffuse_roughness=0.0;float specular_weight=1.0;float specular_roughness=0.3;vec3 specular_color=vec3(1.0);float specular_roughness_anisotropy=0.0;float specular_ior=1.5;float alpha=1.0;vec2 geometry_tangent=vec2(1.0,0.0);float geometry_thickness=0.0; +`;T.IncludesShadersStore[QY]||(T.IncludesShadersStore[QY]=sfe)});var JY,afe,e8=C(()=>{G();JY="openpbrBaseLayerData",afe=`vec3 base_color=vec3(0.8);float base_metalness=0.0;float base_diffuse_roughness=0.0;float specular_weight=1.0;float specular_roughness=0.3;vec3 specular_color=vec3(1.0);float specular_roughness_anisotropy=0.0;float specular_ior=1.5;float alpha=1.0;vec2 geometry_tangent=vec2(1.0,0.0);float geometry_thickness=0.0; #ifdef BASE_WEIGHT vec4 baseWeightFromTexture=texture2D(baseWeightSampler,vBaseWeightUV+uvOffset); #endif @@ -16381,7 +16381,7 @@ float detailRoughness=mix(0.5,detailColor.b,vDetailInfos.w);float loLerp=mix(0., #ifdef USE_GLTF_STYLE_ANISOTROPY float baseAlpha=specular_roughness*specular_roughness;float roughnessT=mix(baseAlpha,1.0,specular_roughness_anisotropy*specular_roughness_anisotropy);float roughnessB=baseAlpha;specular_roughness_anisotropy=1.0-roughnessB/max(roughnessT,0.00001);specular_roughness=sqrt(roughnessT/sqrt(2.0/(1.0+(1.0-specular_roughness_anisotropy)*(1.0-specular_roughness_anisotropy)))); #endif -`;S.IncludesShadersStore[WY]||(S.IncludesShadersStore[WY]=Uce)});var zY,Vce,XY=C(()=>{k();zY="openpbrCoatLayerData",Vce=`float coat_weight=0.0;vec3 coat_color=vec3(1.0);float coat_roughness=0.0;float coat_roughness_anisotropy=0.0;float coat_ior=1.6;float coat_darkening=1.0;vec2 geometry_coat_tangent=vec2(1.0,0.0); +`;T.IncludesShadersStore[JY]||(T.IncludesShadersStore[JY]=afe)});var t8,ofe,i8=C(()=>{G();t8="openpbrCoatLayerData",ofe=`float coat_weight=0.0;vec3 coat_color=vec3(1.0);float coat_roughness=0.0;float coat_roughness_anisotropy=0.0;float coat_ior=1.6;float coat_darkening=1.0;vec2 geometry_coat_tangent=vec2(1.0,0.0); #ifdef COAT_WEIGHT vec4 coatWeightFromTexture=texture2D(coatWeightSampler,vCoatWeightUV+uvOffset); #endif @@ -16433,7 +16433,7 @@ coat_darkening*=coatDarkeningFromTexture.r; #ifdef USE_GLTF_STYLE_ANISOTROPY float coatAlpha=coat_roughness*coat_roughness;float coatRoughnessT=mix(coatAlpha,1.0,coat_roughness_anisotropy*coat_roughness_anisotropy);float coatRoughnessB=coatAlpha;coat_roughness_anisotropy=1.0-coatRoughnessB/max(coatRoughnessT,0.00001);coat_roughness=sqrt(coatRoughnessT/sqrt(2.0/(1.0+(1.0-coat_roughness_anisotropy)*(1.0-coat_roughness_anisotropy)))); #endif -`;S.IncludesShadersStore[zY]||(S.IncludesShadersStore[zY]=Vce)});var YY,Gce,KY=C(()=>{k();YY="openpbrThinFilmLayerData",Gce=`#ifdef THIN_FILM +`;T.IncludesShadersStore[t8]||(T.IncludesShadersStore[t8]=ofe)});var r8,lfe,n8=C(()=>{G();r8="openpbrThinFilmLayerData",lfe=`#ifdef THIN_FILM float thin_film_weight=vThinFilmWeight;float thin_film_thickness=vThinFilmThickness.r*1000.0; float thin_film_ior=vThinFilmIor; #ifdef THIN_FILM_WEIGHT @@ -16450,7 +16450,7 @@ thin_film_thickness*=thinFilmThicknessFromTexture; #endif float thin_film_ior_scale=clamp(2.0f*abs(thin_film_ior-1.0f),0.0f,1.0f); #endif -`;S.IncludesShadersStore[YY]||(S.IncludesShadersStore[YY]=Gce)});var jY,kce,qY=C(()=>{k();jY="openpbrFuzzLayerData",kce=`float fuzz_weight=0.0;vec3 fuzz_color=vec3(1.0);float fuzz_roughness=0.0; +`;T.IncludesShadersStore[r8]||(T.IncludesShadersStore[r8]=lfe)});var s8,cfe,a8=C(()=>{G();s8="openpbrFuzzLayerData",cfe=`float fuzz_weight=0.0;vec3 fuzz_color=vec3(1.0);float fuzz_roughness=0.0; #ifdef FUZZ #ifdef FUZZ_WEIGHT vec4 fuzzWeightFromTexture=texture2D(fuzzWeightSampler,vFuzzWeightUV+uvOffset); @@ -16479,11 +16479,11 @@ fuzz_roughness*=fuzzRoughnessFromTexture.a; fuzz_roughness*=fuzzRoughnessFromTexture.r; #endif #endif -`;S.IncludesShadersStore[jY]||(S.IncludesShadersStore[jY]=kce)});var ZY,Wce,QY=C(()=>{k();ZY="openpbrAmbientOcclusionData",Wce=`vec3 ambient_occlusion=vec3(1.0);float specular_ambient_occlusion=1.0;float coat_specular_ambient_occlusion=1.0; +`;T.IncludesShadersStore[s8]||(T.IncludesShadersStore[s8]=cfe)});var o8,ffe,l8=C(()=>{G();o8="openpbrAmbientOcclusionData",ffe=`vec3 ambient_occlusion=vec3(1.0);float specular_ambient_occlusion=1.0;float coat_specular_ambient_occlusion=1.0; #ifdef AMBIENT_OCCLUSION vec3 ambientOcclusionFromTexture=texture2D(ambientOcclusionSampler,vAmbientOcclusionUV+uvOffset).rgb;ambient_occlusion=vec3(ambientOcclusionFromTexture.r*vAmbientOcclusionInfos.y+(1.0-vAmbientOcclusionInfos.y)); #endif -`;S.IncludesShadersStore[ZY]||(S.IncludesShadersStore[ZY]=Wce)});var JY,Hce,$Y=C(()=>{k();JY="openpbrBackgroundTransmission",Hce=`vec4 slab_translucent_background=vec4(0.,0.,0.,1.); +`;T.IncludesShadersStore[o8]||(T.IncludesShadersStore[o8]=ffe)});var c8,hfe,f8=C(()=>{G();c8="openpbrBackgroundTransmission",hfe=`vec4 slab_translucent_background=vec4(0.,0.,0.,1.); #ifdef REFRACTED_BACKGROUND {float refractionLOD=min(transmission_roughness,0.7)*vBackgroundRefractionInfos.x;float lodTexelSize=pow(2.0,refractionLOD-vBackgroundRefractionInfos.x); #ifdef DISPERSION @@ -16511,7 +16511,7 @@ vec2 noiseOffset=noise.xy*lodTexelSize;slab_translucent_background=texture2DLodE #endif } #endif -`;S.IncludesShadersStore[JY]||(S.IncludesShadersStore[JY]=Hce)});var e8,zce,t8=C(()=>{k();e8="openpbrEnvironmentLighting",zce=`#if defined(REFLECTION) || defined(REFRACTED_BACKGROUND) +`;T.IncludesShadersStore[c8]||(T.IncludesShadersStore[c8]=hfe)});var h8,dfe,d8=C(()=>{G();h8="openpbrEnvironmentLighting",dfe=`#if defined(REFLECTION) || defined(REFRACTED_BACKGROUND) vec3 coatAbsorption=vec3(1.0);float coatIblFresnel=0.0;if (coat_weight>0.0) {coatIblFresnel=computeDielectricIblFresnel(coatReflectance,coatGeoInfo.environmentBrdf);float hemisphere_avg_fresnel=coatReflectance.F0+0.5*(1.0-coatReflectance.F0);float averageReflectance=(coatIblFresnel+hemisphere_avg_fresnel)*0.5;float roughnessFactor=1.0-coat_roughness*0.5;averageReflectance*=roughnessFactor;float darkened_transmission=(1.0-averageReflectance)*(1.0-averageReflectance);darkened_transmission=mix(1.0,darkened_transmission,coat_darkening);float sin2=1.0-coatGeoInfo.NdotV*coatGeoInfo.NdotV;sin2=sin2/(coat_ior*coat_ior);float cos_t=sqrt(1.0-sin2);float coatPathLength=1.0/cos_t;vec3 colored_transmission=pow(coat_color,vec3(coatPathLength));coatAbsorption=mix(vec3(1.0),colored_transmission*darkened_transmission,coat_weight);} #endif #ifdef REFLECTION @@ -16793,7 +16793,7 @@ slab_translucent_base_ibl=slab_translucent_background.rgb*volume_absorption*tran #endif vec3 material_dielectric_base_ibl=mix(black,slab_translucent_base_ibl.rgb,surface_translucency_weight);vec3 material_dielectric_gloss_ibl=material_dielectric_base_ibl*(baseGeoInfo.NdotV);vec3 material_base_substrate_ibl=mix(material_dielectric_gloss_ibl,black,base_metalness);vec3 material_coated_base_ibl=layer(material_base_substrate_ibl,black,coatIblFresnel,coatAbsorption,vec3(1.0));material_surface_ibl=material_coated_base_ibl; #endif -`;S.IncludesShadersStore[e8]||(S.IncludesShadersStore[e8]=zce)});var i8,Xce,r8=C(()=>{k();i8="openpbrDirectLightingInit",Xce=`#ifdef LIGHT{X} +`;T.IncludesShadersStore[h8]||(T.IncludesShadersStore[h8]=dfe)});var u8,ufe,m8=C(()=>{G();u8="openpbrDirectLightingInit",ufe=`#ifdef LIGHT{X} preLightingInfo preInfo{X};preLightingInfo preInfoCoat{X};vec4 lightColor{X}=light{X}.vLightDiffuse;float shadow{X}=1.; #if defined(SHADOWONLY) || defined(LIGHTMAP) && defined(LIGHTMAPEXCLUDED{X}) && defined(LIGHTMAPNOSPECULAR{X}) #else @@ -16864,7 +16864,7 @@ preInfo{X}.roughness=adjustRoughnessFromLightProperties(specular_roughness,light preInfo{X}.diffuseRoughness=base_diffuse_roughness;preInfo{X}.surfaceAlbedo=base_color.rgb; #endif #endif -`;S.IncludesShadersStore[i8]||(S.IncludesShadersStore[i8]=Xce)});var n8,Yce,s8=C(()=>{k();n8="openpbrDirectLighting",Yce=`#ifdef LIGHT{X} +`;T.IncludesShadersStore[u8]||(T.IncludesShadersStore[u8]=ufe)});var p8,mfe,_8=C(()=>{G();p8="openpbrDirectLighting",mfe=`#ifdef LIGHT{X} {vec3 slab_diffuse=vec3(0.,0.,0.);vec3 slab_translucent=vec3(0.,0.,0.);vec3 slab_glossy=vec3(0.,0.,0.);float specularFresnel=0.0;vec3 specularColoredFresnel=vec3(0.,0.,0.);vec3 slab_metal=vec3(0.,0.,0.);vec3 slab_coat=vec3(0.,0.,0.);float coatFresnel=0.0;vec3 slab_fuzz=vec3(0.,0.,0.);float fuzzFresnel=0.0; #ifdef HEMILIGHT{X} slab_diffuse=computeHemisphericDiffuseLighting(preInfo{X},lightColor{X}.rgb,light{X}.vLightGround); @@ -17019,7 +17019,7 @@ total_direct_diffuse+=slab_diffuse; #endif vec3 material_dielectric_base=mix(slab_diffuse*base_color.rgb,slab_translucent,surface_translucency_weight);vec3 material_dielectric_gloss=material_dielectric_base*(1.0-specularFresnel)+slab_glossy*specularColoredFresnel;vec3 material_base_substrate=mix(material_dielectric_gloss,slab_metal,base_metalness);vec3 material_coated_base=layer(material_base_substrate,slab_coat,coatFresnel,coatAbsorption,vec3(1.0));material_surface_direct+=layer(material_coated_base,slab_fuzz,fuzzFresnel*fuzz_weight,vec3(1.0),fuzz_color);} #endif -`;S.IncludesShadersStore[n8]||(S.IncludesShadersStore[n8]=Yce)});var a8,Kce,QD=C(()=>{k();a8="pbrBlockImageProcessing",Kce=`#if defined(IMAGEPROCESSINGPOSTPROCESS) || defined(SS_SCATTERING) +`;T.IncludesShadersStore[p8]||(T.IncludesShadersStore[p8]=mfe)});var g8,pfe,oL=C(()=>{G();g8="pbrBlockImageProcessing",pfe=`#if defined(IMAGEPROCESSINGPOSTPROCESS) || defined(SS_SCATTERING) #if !defined(SKIPFINALCOLORCLAMP) finalColor.rgb=clamp(finalColor.rgb,0.,30.0); #endif @@ -17030,7 +17030,7 @@ finalColor.a*=visibility; #ifdef PREMULTIPLYALPHA finalColor.rgb*=finalColor.a; #endif -`;S.IncludesShadersStore[a8]||(S.IncludesShadersStore[a8]=Kce)});var o8,jce,l8=C(()=>{k();o8="openpbrBlockPrePass",jce=`#if SCENE_MRT_COUNT>0 +`;T.IncludesShadersStore[g8]||(T.IncludesShadersStore[g8]=pfe)});var v8,_fe,E8=C(()=>{G();v8="openpbrBlockPrePass",_fe=`#if SCENE_MRT_COUNT>0 float writeGeometryInfo=finalColor.a>ALPHATESTVALUE ? 1.0 : 0.0; #ifdef PREPASS_POSITION gl_FragData[PREPASS_POSITION_INDEX]=vec4(vPositionW,writeGeometryInfo); @@ -17096,7 +17096,7 @@ gl_FragData[PREPASS_REFLECTIVITY_INDEX]=vec4( 0.0,0.0,0.0,1.0 )*writeGeometryInf #endif #endif #endif -`;S.IncludesShadersStore[o8]||(S.IncludesShadersStore[o8]=jce)});var c8,qce,JD=C(()=>{k();c8="pbrDebug",qce=`#if DEBUGMODE>0 +`;T.IncludesShadersStore[v8]||(T.IncludesShadersStore[v8]=_fe)});var S8,gfe,lL=C(()=>{G();S8="pbrDebug",gfe=`#if DEBUGMODE>0 if (vClipSpacePosition.x/vClipSpacePosition.w>=vDebugMode.x) { #if DEBUGMODE==1 gl_FragColor.rgb=vPositionW.rgb; @@ -17280,7 +17280,7 @@ return; #endif } #endif -`;S.IncludesShadersStore[c8]||(S.IncludesShadersStore[c8]=qce)});var h8={};et(h8,{openpbrPixelShader:()=>Zce});var $D,f8,Zce,d8=C(()=>{k();tx();ix();_Y();GD();WD();rx();nx();EY();ax();hc();qh();$_();Ta();HD();zD();XD();ox();sx();Vm();YD();KD();Um();jD();qD();Vx();CY();PY();cg();lD();LY();NY();cD();fD();wY();dc();ZD();VY();kY();HY();dD();hD();XY();KY();qY();QY();hx();$Y();t8();r8();s8();dx();eg();QD();l8();ux();JD();$D="openpbrPixelShader",f8=`#define OPENPBR_FRAGMENT_SHADER +`;T.IncludesShadersStore[S8]||(T.IncludesShadersStore[S8]=gfe)});var A8={};$e(A8,{openpbrPixelShader:()=>vfe});var cL,T8,vfe,x8=C(()=>{G();hx();dx();MY();ZD();$D();ux();mx();PY();_x();uc();Zh();og();ba();JD();eL();tL();gx();px();Hm();iL();rL();Wm();nL();sL();qx();VY();kY();gg();vD();HY();XY();ED();SD();KY();mc();aL();ZY();$Y();e8();AD();TD();i8();n8();a8();l8();Tx();f8();d8();m8();_8();Ax();lg();oL();E8();xx();lL();cL="openpbrPixelShader",T8=`#define OPENPBR_FRAGMENT_SHADER #define CUSTOM_FRAGMENT_EXTENSION #if defined(GEOMETRY_NORMAL) || defined(GEOMETRY_COAT_NORMAL) || !defined(NORMAL) || defined(FORCENORMALFORWARD) || defined(SPECULARAA) #extension GL_OES_standard_derivatives : enable @@ -17515,11 +17515,11 @@ if (fragDepth==nearestDepth) {frontColor.rgb+=finalColor.rgb*finalColor.a*alphaM #include #define CUSTOM_FRAGMENT_MAIN_END } -`;S.ShadersStore[$D]||(S.ShadersStore[$D]=f8);Zce={name:$D,shader:f8}});var u8={};et(u8,{OpenPBRMaterial:()=>Oe,OpenPBRMaterialDefines:()=>Sg});var Wm,Wx,si,Ti,eL,tL,Sg,iL,Oe,m8=C(()=>{kt();Ut();wx();Ht();x_();Gr();Vi();Pn();_r();ba();uA();Tf();el();z_();yn();Ui();mA();dA();xa();Pt();pA();_A();pX();Ve();gA();H_();$a();Ci();$X();Wm={effect:null,subMesh:null},Wx=class n{populateVectorFromLinkedProperties(e){let t=e.dimension[0];for(let i in this.linkedProperties){let r=this.linkedProperties[i],s=r.numComponents;if(tt-s){s==1?$.Error(`Float property ${r.name} has an offset that is too large.`):$.Error(`Vector${s} property ${r.name} won't fit in Vector${t} or has an offset that is too large.`);return}typeof r.value=="number"?n._tmpArray[r.targetUniformComponentOffset]=r.value:r.value.toArray(n._tmpArray,r.targetUniformComponentOffset)}e.fromArray(n._tmpArray)}constructor(e,t){this.linkedProperties={},this.firstLinkedKey="",this.name=e,this.numComponents=t}};Wx._tmpArray=[0,0,0,0];si=class{constructor(e,t,i,r,s=0,a){this.targetUniformComponentNum=4,this.targetUniformComponentOffset=0,this.name=e,this.targetUniformName=i,this.defaultValue=t,this.value=t,this.targetUniformComponentNum=r,this.targetUniformComponentOffset=s,this.requiredDefine=a}get numComponents(){return typeof this.defaultValue=="number"?1:this.defaultValue.dimension[0]}},Ti=class{get samplerName(){return this.samplerPrefix+"Sampler"}get samplerInfoName(){return"v"+this.samplerPrefix.charAt(0).toUpperCase()+this.samplerPrefix.slice(1)+"Infos"}get samplerMatrixName(){return this.samplerPrefix+"Matrix"}constructor(e,t,i){this.value=null,this.samplerPrefix="",this.textureDefine="",this.name=e,this.samplerPrefix=t,this.textureDefine=i}},eL=class extends Cm(Mm(vr)){},tL=class extends mX(eL){},Sg=class extends bm(tL){constructor(e){super(e),this.NUM_SAMPLES="0",this.REALTIME_FILTERING=!1,this.IBL_CDF_FILTERING=!1,this.LIGHTCOUNT=0,this.VERTEXCOLOR=!1,this.BAKED_VERTEX_ANIMATION_TEXTURE=!1,this.VERTEXALPHA=!1,this.ALPHATEST=!1,this.DEPTHPREPASS=!1,this.ALPHABLEND=!1,this.ALPHA_FROM_BASE_COLOR_TEXTURE=!1,this.ALPHATESTVALUE="0.5",this.PREMULTIPLYALPHA=!1,this.REFLECTIVITY_GAMMA=!1,this.REFLECTIVITYDIRECTUV=0,this.SPECULARTERM=!1,this.LODBASEDMICROSFURACE=!0,this.SPECULAR_ROUGHNESS_FROM_METALNESS_TEXTURE_GREEN=!1,this.BASE_METALNESS_FROM_METALNESS_TEXTURE_BLUE=!1,this.AOSTOREINMETALMAPRED=!1,this.SPECULAR_WEIGHT_IN_ALPHA=!1,this.SPECULAR_WEIGHT_FROM_SPECULAR_COLOR_TEXTURE=!1,this.SPECULAR_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE=!1,this.COAT_ROUGHNESS_FROM_GREEN_CHANNEL=!1,this.COAT_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE=!1,this.USE_GLTF_STYLE_ANISOTROPY=!1,this.THIN_FILM_THICKNESS_FROM_THIN_FILM_TEXTURE=!1,this.FUZZ_ROUGHNESS_FROM_TEXTURE_ALPHA=!1,this.GEOMETRY_THICKNESS_FROM_GREEN_CHANNEL=!1,this.ENVIRONMENTBRDF=!1,this.ENVIRONMENTBRDF_RGBD=!1,this.FUZZENVIRONMENTBRDF=!1,this.NORMAL=!1,this.TANGENT=!1,this.OBJECTSPACE_NORMALMAP=!1,this.PARALLAX=!1,this.PARALLAX_RHS=!1,this.PARALLAXOCCLUSION=!1,this.NORMALXYSCALE=!0,this.ANISOTROPIC=!1,this.ANISOTROPIC_OPENPBR=!0,this.ANISOTROPIC_BASE=!1,this.ANISOTROPIC_COAT=!1,this.FUZZ_IBL_SAMPLES=6,this.REFRACTION_HIGH_QUALITY_BLUR=!1,this.FUZZ=!1,this.THIN_FILM=!1,this.IRIDESCENCE=!1,this.DISPERSION=!1,this.SCATTERING=!1,this.USE_IRRADIANCE_TEXTURE_FOR_SCATTERING=!1,this.SSS_SAMPLE_COUNT=16,this.USE_IRRADIANCE_TEXTURE_FOR_SCATTERING_GBUFFER=!1,this.TRANSMISSION_SLAB=!1,this.TRANSMISSION_SLAB_VOLUME=!1,this.SUBSURFACE_SLAB=!1,this.GEOMETRY_THIN_WALLED=!1,this.REFRACTED_BACKGROUND=!1,this.REFRACTED_LIGHTS=!1,this.REFRACTED_ENVIRONMENT=!1,this.REFRACTED_ENVIRONMENT_OPPOSITEZ=!1,this.REFRACTED_ENVIRONMENT_LOCAL_CUBE=!1,this.RADIANCEOCCLUSION=!1,this.HORIZONOCCLUSION=!1,this.INSTANCES=!1,this.THIN_INSTANCES=!1,this.INSTANCESCOLOR=!1,this.NUM_BONE_INFLUENCERS=0,this.BonesPerMesh=0,this.BONETEXTURE=!1,this.BONES_VELOCITY_ENABLED=!1,this.NONUNIFORMSCALING=!1,this.MORPHTARGETS=!1,this.MORPHTARGETS_POSITION=!1,this.MORPHTARGETS_NORMAL=!1,this.MORPHTARGETS_TANGENT=!1,this.MORPHTARGETS_UV=!1,this.MORPHTARGETS_UV2=!1,this.MORPHTARGETS_COLOR=!1,this.MORPHTARGETTEXTURE_HASPOSITIONS=!1,this.MORPHTARGETTEXTURE_HASNORMALS=!1,this.MORPHTARGETTEXTURE_HASTANGENTS=!1,this.MORPHTARGETTEXTURE_HASUVS=!1,this.MORPHTARGETTEXTURE_HASUV2S=!1,this.MORPHTARGETTEXTURE_HASCOLORS=!1,this.NUM_MORPH_INFLUENCERS=0,this.MORPHTARGETS_TEXTURE=!1,this.USEPHYSICALLIGHTFALLOFF=!1,this.USEGLTFLIGHTFALLOFF=!1,this.TWOSIDEDLIGHTING=!1,this.MIRRORED=!1,this.SHADOWFLOAT=!1,this.CLIPPLANE=!1,this.CLIPPLANE2=!1,this.CLIPPLANE3=!1,this.CLIPPLANE4=!1,this.CLIPPLANE5=!1,this.CLIPPLANE6=!1,this.POINTSIZE=!1,this.FOG=!1,this.LOGARITHMICDEPTH=!1,this.CAMERA_ORTHOGRAPHIC=!1,this.CAMERA_PERSPECTIVE=!1,this.AREALIGHTSUPPORTED=!0,this.FORCENORMALFORWARD=!1,this.SPECULARAA=!1,this.UNLIT=!1,this.DECAL_AFTER_DETAIL=!1,this.DEBUGMODE=0,this.USE_VERTEX_PULLING=!1,this.VERTEX_PULLING_USE_INDEX_BUFFER=!1,this.VERTEX_PULLING_INDEX_BUFFER_32BITS=!1,this.RIGHT_HANDED=!1,this.CLUSTLIGHT_SLICES=0,this.CLUSTLIGHT_BATCH=0,this.BRDF_V_HEIGHT_CORRELATED=!0,this.MS_BRDF_ENERGY_CONSERVATION=!0,this.SPHERICAL_HARMONICS=!0,this.SPECULAR_GLOSSINESS_ENERGY_CONSERVATION=!0,this.MIX_IBL_RADIANCE_WITH_IRRADIANCE=!0,this.LEGACY_SPECULAR_ENERGY_CONSERVATION=!1,this.BASE_DIFFUSE_MODEL=0,this.DIELECTRIC_SPECULAR_MODEL=1,this.CONDUCTOR_SPECULAR_MODEL=1,this.rebuild()}reset(){super.reset(),this.ALPHATESTVALUE="0.5",this.NORMALXYSCALE=!0}},iL=class extends ym(nl){},Oe=class n extends iL{get geometryTangentAngle(){return Math.atan2(this.geometryTangent.y,this.geometryTangent.x)}set geometryTangentAngle(e){this.geometryTangent=new Ne(Math.cos(e),Math.sin(e))}get geometryCoatTangentAngle(){return Math.atan2(this.geometryCoatTangent.y,this.geometryCoatTangent.x)}set geometryCoatTangentAngle(e){this.geometryCoatTangent=new Ne(Math.cos(e),Math.sin(e))}get sssQuality(){return this._sssQuality}set sssQuality(e){this._sssQuality!==e&&(this._sssQuality=e,this.markAsDirty(1))}get sssIrradianceTexture(){return this._sssIrradianceTexture}set sssIrradianceTexture(e){this._sssIrradianceTexture!==e&&(this._sssIrradianceTexture=e,this._markAllSubMeshesAsTexturesDirty())}get sssDepthTexture(){return this._sssDepthTexture}set sssDepthTexture(e){this._sssDepthTexture!==e&&(this._sssDepthTexture=e,this._markAllSubMeshesAsTexturesDirty())}get hasTransparency(){return this.subsurfaceWeight>0||this.transmissionWeight>0}get hasScattering(){return this.transmissionWeight>0&&this.transmissionDepth>0&&!this.transmissionScatter.equals(Te.BlackReadOnly)||this.subsurfaceWeight>0}get usePhysicalLightFalloff(){return this._lightFalloff===ve.LIGHTFALLOFF_PHYSICAL}set usePhysicalLightFalloff(e){e!==this.usePhysicalLightFalloff&&(this._markAllSubMeshesAsTexturesDirty(),e?this._lightFalloff=ve.LIGHTFALLOFF_PHYSICAL:this._lightFalloff=ve.LIGHTFALLOFF_STANDARD)}get useGLTFLightFalloff(){return this._lightFalloff===ve.LIGHTFALLOFF_GLTF}set useGLTFLightFalloff(e){e!==this.useGLTFLightFalloff&&(this._markAllSubMeshesAsTexturesDirty(),e?this._lightFalloff=ve.LIGHTFALLOFF_GLTF:this._lightFalloff=ve.LIGHTFALLOFF_STANDARD)}get backgroundRefractionTexture(){return this._backgroundRefractionTexture}set backgroundRefractionTexture(e){this._backgroundRefractionTexture=e,this._markAllSubMeshesAsTexturesDirty()}get refractionHighQualityBlur(){return this._refractionHighQualityBlur}set refractionHighQualityBlur(e){this._refractionHighQualityBlur!==e&&(this._refractionHighQualityBlur=e,this.markAsDirty(1))}get realTimeFiltering(){return this._realTimeFiltering}set realTimeFiltering(e){this._realTimeFiltering=e,this.markAsDirty(1)}get realTimeFilteringQuality(){return this._realTimeFilteringQuality}set realTimeFilteringQuality(e){this._realTimeFilteringQuality=e,this.markAsDirty(1)}get fuzzSampleNumber(){return this._fuzzSampleNumber}set fuzzSampleNumber(e){this._fuzzSampleNumber=e,this.markAsDirty(1)}get canRenderToMRT(){return!0}constructor(e,t,i=!1){var s;super(e,t,void 0,i||n.ForceGLSL),this._baseWeight=new si("base_weight",1,"vBaseWeight",1),this._baseWeightTexture=new Ti("base_weight","baseWeight","BASE_WEIGHT"),this._baseColor=new si("base_color",Te.White(),"vBaseColor",4),this._baseColorTexture=new Ti("base_color","baseColor","BASE_COLOR"),this._baseDiffuseRoughness=new si("base_diffuse_roughness",0,"vBaseDiffuseRoughness",1),this._baseDiffuseRoughnessTexture=new Ti("base_diffuse_roughness","baseDiffuseRoughness","BASE_DIFFUSE_ROUGHNESS"),this._baseMetalness=new si("base_metalness",0,"vReflectanceInfo",4,0),this._baseMetalnessTexture=new Ti("base_metalness","baseMetalness","BASE_METALNESS"),this._specularWeight=new si("specular_weight",1,"vReflectanceInfo",4,3),this._specularWeightTexture=new Ti("specular_weight","specularWeight","SPECULAR_WEIGHT"),this._specularColor=new si("specular_color",Te.White(),"vSpecularColor",4),this._specularColorTexture=new Ti("specular_color","specularColor","SPECULAR_COLOR"),this._specularRoughness=new si("specular_roughness",.3,"vReflectanceInfo",4,1),this._specularRoughnessTexture=new Ti("specular_roughness","specularRoughness","SPECULAR_ROUGHNESS"),this._specularRoughnessAnisotropy=new si("specular_roughness_anisotropy",0,"vSpecularAnisotropy",3,2),this._specularRoughnessAnisotropyTexture=new Ti("specular_roughness_anisotropy","specularRoughnessAnisotropy","SPECULAR_ROUGHNESS_ANISOTROPY"),this._specularIor=new si("specular_ior",1.5,"vReflectanceInfo",4,2),this._transmissionWeight=new si("transmission_weight",0,"vTransmissionWeight",1),this._transmissionWeightTexture=new Ti("transmission_weight","transmissionWeight","TRANSMISSION_WEIGHT"),this._transmissionColor=new si("transmission_color",Te.White(),"vTransmissionColor",3,0),this._transmissionColorTexture=new Ti("transmission_color","transmissionColor","TRANSMISSION_COLOR"),this._transmissionDepth=new si("transmission_depth",0,"vTransmissionDepth",1,0),this._transmissionDepthTexture=new Ti("transmission_depth","transmissionDepth","TRANSMISSION_DEPTH"),this._transmissionScatter=new si("transmission_scatter",Te.Black(),"vTransmissionScatter",3,0),this._transmissionScatterTexture=new Ti("transmission_scatter","transmissionScatter","TRANSMISSION_SCATTER"),this._transmissionScatterAnisotropy=new si("transmission_scatter_anisotropy",0,"vTransmissionScatterAnisotropy",1,0),this._transmissionDispersionScale=new si("transmission_dispersion_scale",0,"vTransmissionDispersionScale",1,0),this._transmissionDispersionScaleTexture=new Ti("transmission_dispersion_scale","transmissionDispersionScale","TRANSMISSION_DISPERSION_SCALE"),this._transmissionDispersionAbbeNumber=new si("transmission_dispersion_abbe_number",20,"vTransmissionDispersionAbbeNumber",1,0),this._subsurfaceWeight=new si("subsurface_weight",0,"vSubsurfaceWeight",1,0,"SUBSURFACE_SLAB"),this._subsurfaceWeightTexture=new Ti("subsurface_weight","subsurfaceWeight","SUBSURFACE_WEIGHT"),this._subsurfaceColor=new si("subsurface_color",new Te(.8,.8,.8),"vSubsurfaceColor",3,0,"SUBSURFACE_SLAB"),this._subsurfaceColorTexture=new Ti("subsurface_color","subsurfaceColor","SUBSURFACE_COLOR"),this._subsurfaceRadius=new si("subsurface_radius",.1,"vSubsurfaceRadius",1,0,"SUBSURFACE_SLAB"),this._subsurfaceRadiusScale=new si("subsurface_radius_scale",new Te(1,.5,.25),"vSubsurfaceRadiusScale",3,0,"SUBSURFACE_SLAB"),this._subsurfaceRadiusScaleTexture=new Ti("subsurface_radius_scale","subsurfaceRadiusScale","SUBSURFACE_RADIUS_SCALE"),this._subsurfaceScatterAnisotropy=new si("subsurface_scatter_anisotropy",0,"vSubsurfaceScatterAnisotropy",1,0,"SUBSURFACE_SLAB"),this._coatWeight=new si("coat_weight",0,"vCoatWeight",1,0),this._coatWeightTexture=new Ti("coat_weight","coatWeight","COAT_WEIGHT"),this._coatColor=new si("coat_color",Te.White(),"vCoatColor",3,0),this._coatColorTexture=new Ti("coat_color","coatColor","COAT_COLOR"),this._coatRoughness=new si("coat_roughness",0,"vCoatRoughness",1,0),this._coatRoughnessTexture=new Ti("coat_roughness","coatRoughness","COAT_ROUGHNESS"),this._coatRoughnessAnisotropy=new si("coat_roughness_anisotropy",0,"vCoatRoughnessAnisotropy",1),this._coatRoughnessAnisotropyTexture=new Ti("coat_roughness_anisotropy","coatRoughnessAnisotropy","COAT_ROUGHNESS_ANISOTROPY"),this._coatIor=new si("coat_ior",1.5,"vCoatIor",1,0),this._coatDarkening=new si("coat_darkening",1,"vCoatDarkening",1,0),this._coatDarkeningTexture=new Ti("coat_darkening","coatDarkening","COAT_DARKENING"),this.useCoatRoughnessFromWeightTexture=!1,this._fuzzWeight=new si("fuzz_weight",0,"vFuzzWeight",1,0),this._fuzzWeightTexture=new Ti("fuzz_weight","fuzzWeight","FUZZ_WEIGHT"),this._fuzzColor=new si("fuzz_color",Te.White(),"vFuzzColor",3,0),this._fuzzColorTexture=new Ti("fuzz_color","fuzzColor","FUZZ_COLOR"),this._fuzzRoughness=new si("fuzz_roughness",.5,"vFuzzRoughness",1,0),this._fuzzRoughnessTexture=new Ti("fuzz_roughness","fuzzRoughness","FUZZ_ROUGHNESS"),this._geometryThinWalled=new si("geometry_thin_walled",0,"vGeometryThinWalled",1,0),this._geometryNormalTexture=new Ti("geometry_normal","geometryNormal","GEOMETRY_NORMAL"),this._geometryTangent=new si("geometry_tangent",new Ne(1,0),"vSpecularAnisotropy",3,0),this._geometryTangentTexture=new Ti("geometry_tangent","geometryTangent","GEOMETRY_TANGENT"),this._geometryCoatNormalTexture=new Ti("geometry_coat_normal","geometryCoatNormal","GEOMETRY_COAT_NORMAL"),this._geometryCoatTangent=new si("geometry_coat_tangent",new Ne(1,0),"vGeometryCoatTangent",2,0),this._geometryCoatTangentTexture=new Ti("geometry_coat_tangent","geometryCoatTangent","GEOMETRY_COAT_TANGENT"),this._geometryOpacity=new si("geometry_opacity",1,"vBaseColor",4,3),this._geometryOpacityTexture=new Ti("geometry_opacity","geometryOpacity","GEOMETRY_OPACITY"),this._geometryThickness=new si("geometry_thickness",0,"vGeometryThickness",1,0),this._geometryThicknessTexture=new Ti("geometry_thickness","geometryThickness","GEOMETRY_THICKNESS"),this._emissionLuminance=new si("emission_luminance",1,"vLightingIntensity",4,1),this._emissionColor=new si("emission_color",Te.Black(),"vEmissionColor",3),this._emissionColorTexture=new Ti("emission_color","emissionColor","EMISSION_COLOR"),this._thinFilmWeight=new si("thin_film_weight",0,"vThinFilmWeight",1,0),this._thinFilmWeightTexture=new Ti("thin_film_weight","thinFilmWeight","THIN_FILM_WEIGHT"),this._thinFilmThickness=new si("thin_film_thickness",.5,"vThinFilmThickness",2,0),this._thinFilmThicknessMin=new si("thin_film_thickness_min",0,"vThinFilmThickness",2,1),this._thinFilmThicknessTexture=new Ti("thin_film_thickness","thinFilmThickness","THIN_FILM_THICKNESS"),this._thinFilmIor=new si("thin_film_ior",1.4,"vThinFilmIor",1,0),this._ambientOcclusionTexture=new Ti("ambient_occlusion","ambientOcclusion","AMBIENT_OCCLUSION"),this._sssQuality=n.SSS_QUALITY_MEDIUM,this._sssIrradianceTexture=null,this._sssDepthTexture=null,this._uniformsList={},this._uniformsArray=[],this._samplersList={},this._samplerDefines={},this.directIntensity=1,this.environmentIntensity=1,this.useSpecularWeightFromTextureAlpha=!1,this.forceAlphaTest=!1,this.alphaCutOff=.4,this.useAmbientOcclusionFromMetallicTextureRed=!1,this.useAmbientInGrayScale=!1,this.useObjectSpaceNormalMap=!1,this.useParallax=!1,this.useParallaxOcclusion=!1,this.parallaxScaleBias=.05,this.disableLighting=!1,this.forceIrradianceInFragment=!1,this.maxSimultaneousLights=4,this.invertNormalMapX=!1,this.invertNormalMapY=!1,this.twoSidedLighting=!1,this.useAlphaFresnel=!1,this.useLinearAlphaFresnel=!1,this.environmentBRDFTexture=null,this.forceNormalForward=!1,this.enableSpecularAntiAliasing=!1,this.useHorizonOcclusion=!0,this.useRadianceOcclusion=!0,this.unlit=!1,this.applyDecalMapAfterDetailMap=!1,this._lightingInfos=new Mi(this.directIntensity,1,this.environmentIntensity,1),this._radianceTexture=null,this._useSpecularWeightFromAlpha=!1,this._useSpecularWeightFromSpecularColorTexture=!1,this._useSpecularRoughnessAnisotropyFromTangentTexture=!1,this._useCoatRoughnessAnisotropyFromTangentTexture=!1,this._useCoatRoughnessFromGreenChannel=!1,this._useGltfStyleAnisotropy=!1,this._useFuzzRoughnessFromTextureAlpha=!1,this._useHorizonOcclusion=!0,this._useRadianceOcclusion=!0,this._useAlphaFromBaseColorTexture=!1,this._useAmbientOcclusionFromMetallicTextureRed=!1,this._useRoughnessFromMetallicTextureGreen=!1,this._useMetallicFromMetallicTextureBlue=!1,this._useThinFilmThicknessFromTextureGreen=!1,this._useGeometryThicknessFromGreenChannel=!1,this._lightFalloff=ve.LIGHTFALLOFF_PHYSICAL,this._useObjectSpaceNormalMap=!1,this._useParallax=!1,this._useParallaxOcclusion=!1,this._parallaxScaleBias=.05,this._disableLighting=!1,this._maxSimultaneousLights=4,this._invertNormalMapX=!1,this._invertNormalMapY=!1,this._twoSidedLighting=!1,this._alphaCutOff=.4,this._useAlphaFresnel=!1,this._useLinearAlphaFresnel=!1,this._environmentBRDFTexture=null,this._environmentFuzzBRDFTexture=null,this._backgroundRefractionTexture=null,this._refractionHighQualityBlur=!0,this._forceIrradianceInFragment=!1,this._realTimeFiltering=!1,this._realTimeFilteringQuality=8,this._fuzzSampleNumber=4,this._forceNormalForward=!1,this._enableSpecularAntiAliasing=!1,this._renderTargets=new Fi(16),this._unlit=!1,this._applyDecalMapAfterDetailMap=!1,this._debugMode=0,this._shadersLoaded=!1,this._breakShaderLoadedCheck=!1,this._vertexPullingMetadata=null,this.debugMode=0,this.debugLimit=-1,this.debugFactor=1,this._cacheHasRenderTargetTextures=!1,this._transparencyMode=ve.MATERIAL_OPAQUE,this.getScene()&&!((s=this.getScene())!=null&&s.getEngine().isWebGPU)&&this.getScene().getEngine().webGLVersion<2&&$.Error("OpenPBRMaterial: WebGL 2.0 or above is required for this material."),n._noiseTextures[this.getScene().uniqueId]||(n._noiseTextures[this.getScene().uniqueId]=new ge(he.GetAssetUrl("https://assets.babylonjs.com/core/blue_noise/blue_noise_rgb.png"),this.getScene(),!1,!0,1),this.getScene().onDisposeObservable.addOnce(()=>{var a;(a=n._noiseTextures[this.getScene().uniqueId])==null||a.dispose(),delete n._noiseTextures[this.getScene().uniqueId]})),this._attachImageProcessingConfiguration(null),this.getRenderTargetTextures=()=>(this._renderTargets.reset(),le.ReflectionTextureEnabled&&this._radianceTexture&&this._radianceTexture.isRenderTarget&&this._renderTargets.push(this._radianceTexture),le.RefractionTextureEnabled&&this._backgroundRefractionTexture&&this._backgroundRefractionTexture.isRenderTarget&&this._renderTargets.push(this._backgroundRefractionTexture),this._eventInfo.renderTargets=this._renderTargets,this._callbackPluginEventFillRenderTargetTextures(this._eventInfo),this._renderTargets),this._environmentBRDFTexture=uX(this.getScene()),this._environmentFuzzBRDFTexture=sD(this.getScene()),this.prePassConfiguration=new Ts,this._propertyList={};for(let a of Object.getOwnPropertyNames(this)){let o=this[a];o instanceof si&&(this._propertyList[a]=o)}Object.keys(this._propertyList).forEach(a=>{let o=this._propertyList[a],l=this._uniformsList[o.targetUniformName];l?l.numComponents!==o.targetUniformComponentNum?$.Error(`Uniform ${o.targetUniformName} already exists of size ${l.numComponents}, but trying to set it to ${o.targetUniformComponentNum}.`):l.requiredDefine!==o.requiredDefine&&(l.requiredDefine=void 0):(l=new Wx(o.targetUniformName,o.targetUniformComponentNum),l.requiredDefine=o.requiredDefine,this._uniformsList[o.targetUniformName]=l),l.firstLinkedKey===""&&(l.firstLinkedKey=o.name),l.linkedProperties[o.name]=o}),this._uniformsArray=Object.values(this._uniformsList),this._samplersList={};for(let a of Object.getOwnPropertyNames(this)){let o=this[a];o instanceof Ti&&(this._samplersList[a]=o)}for(let a in this._samplersList){let l=this._samplersList[a].textureDefine;this._samplerDefines[l]={type:"boolean",default:!1},this._samplerDefines[l+"DIRECTUV"]={type:"number",default:0},this._samplerDefines[l+"_GAMMA"]={type:"boolean",default:!1}}this._baseWeight,this._baseWeightTexture,this._baseColor,this._baseColorTexture,this._baseDiffuseRoughness,this._baseDiffuseRoughnessTexture,this._baseMetalness,this._baseMetalnessTexture,this._specularWeight,this._specularWeightTexture,this._specularColor,this._specularColorTexture,this._specularRoughness,this._specularIor,this._specularRoughnessTexture,this._specularRoughnessAnisotropy,this._specularRoughnessAnisotropyTexture,this._transmissionWeight,this._transmissionWeightTexture,this._transmissionColor,this._transmissionColorTexture,this._transmissionDepth,this._transmissionDepthTexture,this._transmissionScatter,this._transmissionScatterTexture,this._transmissionScatterAnisotropy,this._transmissionDispersionScale,this._transmissionDispersionScaleTexture,this._transmissionDispersionAbbeNumber,this._subsurfaceWeight,this._subsurfaceWeightTexture,this._subsurfaceColor,this._subsurfaceColorTexture,this._subsurfaceRadius,this._subsurfaceRadiusScale,this._subsurfaceRadiusScaleTexture,this._subsurfaceScatterAnisotropy,this._coatWeight,this._coatWeightTexture,this._coatColor,this._coatColorTexture,this._coatRoughness,this._coatRoughnessTexture,this._coatRoughnessAnisotropy,this._coatRoughnessAnisotropyTexture,this._coatIor,this._coatDarkening,this._coatDarkeningTexture,this._fuzzWeight,this._fuzzWeightTexture,this._fuzzColor,this._fuzzColorTexture,this._fuzzRoughness,this._fuzzRoughnessTexture,this._geometryThinWalled,this._geometryNormalTexture,this._geometryTangent,this._geometryTangentTexture,this._geometryCoatNormalTexture,this._geometryCoatTangent,this._geometryCoatTangentTexture,this._geometryOpacity,this._geometryOpacityTexture,this._geometryThickness,this._geometryThicknessTexture,this._thinFilmWeight,this._thinFilmWeightTexture,this._thinFilmThickness,this._thinFilmThicknessMin,this._thinFilmThicknessTexture,this._thinFilmIor,this._emissionLuminance,this._emissionColor,this._emissionColorTexture,this._ambientOcclusionTexture}get hasRenderTargetTextures(){return le.ReflectionTextureEnabled&&this._radianceTexture&&this._radianceTexture.isRenderTarget||le.RefractionTextureEnabled&&this._backgroundRefractionTexture&&this._backgroundRefractionTexture.isRenderTarget?!0:this._cacheHasRenderTargetTextures}get isPrePassCapable(){return!this.disableDepthWrite}getClassName(){return"OpenPBRMaterial"}get transparencyMode(){return this._transparencyMode}set transparencyMode(e){this._transparencyMode!==e&&(this._transparencyMode=e,this._markAllSubMeshesAsTexturesAndMiscDirty())}_shouldUseAlphaFromBaseColorTexture(){return this._hasAlphaChannel()&&this._transparencyMode!==ve.MATERIAL_OPAQUE&&!this.geometryOpacityTexture}_hasAlphaChannel(){return this.baseColorTexture!=null&&this.baseColorTexture.hasAlpha&&this._useAlphaFromBaseColorTexture||this.geometryOpacityTexture!=null}clone(e,t=!0,i=""){let r=tt.Clone(()=>new n(e,this.getScene()),this,{cloneTexturesOnlyOnce:t});return r.id=e,r.name=e,this.stencil.copyTo(r.stencil),this._clonePlugins(r,i),r}serialize(){let e=super.serialize();return e.customType="BABYLON.OpenPBRMaterial",e}static Parse(e,t,i){let r=tt.Parse(()=>new n(e.name,t),e,t,i);return e.stencil&&r.stencil.parse(e.stencil,t,i),ve._ParsePlugins(e,r,t,i),r}forceCompilation(e,t,i){let r={clipPlane:!1,useInstances:!1,...i};this._uniformBufferLayoutBuilt||this.buildUniformLayout(),this._callbackPluginEventGeneric(4,this._eventInfo),(()=>{if(this._breakShaderLoadedCheck)return;let a=new Sg({...this._eventInfo.defineNames||{},...this._samplerDefines||{}}),o=this._prepareEffect(e,e,a,void 0,void 0,r.useInstances,r.clipPlane);this._onEffectCreatedObservable&&(Wm.effect=o,Wm.subMesh=null,this._onEffectCreatedObservable.notifyObservers(Wm)),o.isReady()?t&&t(this):o.onCompileObservable.add(()=>{t&&t(this)})})()}isReadyForSubMesh(e,t,i){var d;this._uniformBufferLayoutBuilt||this.buildUniformLayout();let r=t._drawWrapper;if(r.effect&&this.isFrozen&&r._wasPreviouslyReady&&r._wasPreviouslyUsingInstances===i)return!0;t.materialDefines||(this._callbackPluginEventGeneric(4,this._eventInfo),t.materialDefines=new Sg({...this._eventInfo.defineNames||{},...this._samplerDefines||{}}));let s=t.materialDefines;if(this._isReadyForSubMesh(t))return!0;let a=this.getScene(),o=a.getEngine();if(s._areTexturesDirty&&(this._eventInfo.hasRenderTargetTextures=!1,this._callbackPluginEventHasRenderTargetTextures(this._eventInfo),this._cacheHasRenderTargetTextures=this._eventInfo.hasRenderTargetTextures,a.texturesEnabled)){for(let m in this._samplersList){let _=this._samplersList[m];if(_.value&&!_.value.isReadyOrNotBlocking())return!1}let u=this._getRadianceTexture();if(u&&le.ReflectionTextureEnabled){if(!u.isReadyOrNotBlocking())return!1;if(u.irradianceTexture){if(!u.irradianceTexture.isReadyOrNotBlocking())return!1}else if(!u.sphericalPolynomial&&((d=u.getInternalTexture())!=null&&d._sphericalPolynomialPromise))return!1}if(this._environmentBRDFTexture&&le.ReflectionTextureEnabled&&!this._environmentBRDFTexture.isReady()||this._environmentFuzzBRDFTexture&&le.ReflectionTextureEnabled&&!this._environmentFuzzBRDFTexture.isReady()||this._backgroundRefractionTexture&&le.RefractionTextureEnabled&&!this._backgroundRefractionTexture.isReadyOrNotBlocking()||n._noiseTextures[a.uniqueId]&&!n._noiseTextures[a.uniqueId].isReady()||this._sssIrradianceTexture&&this._sssDepthTexture&&(!this._sssIrradianceTexture.isReady()||!this._sssDepthTexture.isReady()))return!1}if(this._eventInfo.isReadyForSubMesh=!0,this._eventInfo.defines=s,this._eventInfo.subMesh=t,this._callbackPluginEventIsReadyForSubMesh(this._eventInfo),!this._eventInfo.isReadyForSubMesh||s._areImageProcessingDirty&&this._imageProcessingConfiguration&&!this._imageProcessingConfiguration.isReady())return!1;if(s.AREALIGHTUSED){for(let u=0;u{e.addUniform(t.name,t.numComponents)}),Object.values(this._samplersList).forEach(t=>{e.addUniform(t.samplerInfoName,2),e.addUniform(t.samplerMatrixName,16)}),super.buildUniformLayout()}bindPropertiesForSubMesh(e,t,i,r){if(this.geometryThickness===0)e.updateFloat("vGeometryThickness",0);else{r.getRenderingMesh().getWorldMatrix().decompose(Z.Vector3[0]);let s=Math.max(Math.abs(Z.Vector3[0].x),Math.abs(Z.Vector3[0].y),Math.abs(Z.Vector3[0].z));e.updateFloat("vGeometryThickness",this.geometryThickness*s)}}bindForSubMesh(e,t,i){var h;let r=this.getScene(),s=i.materialDefines;if(!s)return;let a=i.effect;if(!a)return;this._activeEffect=a,t.getMeshUniformBuffer().bindToEffect(a,"Mesh"),t.transferToEffect(e);let o=r.getEngine();this._uniformBuffer.bindToEffect(a,"Material"),this.prePassConfiguration.bindForSubMesh(this._activeEffect,r,t,e,this.isFrozen),Nn.Bind(o.currentRenderPassId,this._activeEffect,t,e,this);let l=r.activeCamera;l?this._uniformBuffer.updateFloat4("cameraInfo",l.minZ,l.maxZ,0,0):this._uniformBuffer.updateFloat4("cameraInfo",0,0,0,0),this._eventInfo.subMesh=i,this._callbackPluginEventHardBindForSubMesh(this._eventInfo),s.OBJECTSPACE_NORMALMAP&&(e.toNormalMatrix(this._normalMatrix),this.bindOnlyNormalMatrix(this._normalMatrix));let c=this._mustRebind(r,a,i,t.visibility);gs(t,this._activeEffect,this.prePassConfiguration),this._vertexPullingMetadata&&xf(this._activeEffect,this._vertexPullingMetadata);let f=this._uniformBuffer;if(c){this.bindViewProjection(a);let d=this._getRadianceTexture();if(!f.useUbo||!this.isFrozen||!f.isSync||i._drawWrapper._forceRebindOnNextCall){if(r.texturesEnabled){for(let m in this._samplersList){let _=this._samplersList[m];_.value&&(f.updateFloat2(_.samplerInfoName,_.value.coordinatesIndex,_.value.level),ni(_.value,f,_.samplerPrefix))}(this.geometryNormalTexture||this.geometryCoatNormalTexture)&&(r._mirroredCameraPosition?f.updateFloat2("vTangentSpaceParams",this._invertNormalMapX?1:-1,this._invertNormalMapY?1:-1):f.updateFloat2("vTangentSpaceParams",this._invertNormalMapX?-1:1,this._invertNormalMapY?-1:1)),em(r,s,f,Te.White(),d,this.realTimeFiltering,!0,!0,!0,!0,!0)}this.pointsCloud&&f.updateFloat("pointSize",this.pointSize);let u=this._uniformsArray;for(let m=0,_=u.length;m<_;m++){let p=u[m];p.requiredDefine!==void 0&&!s[p.requiredDefine]||(p.numComponents===4?(p.populateVectorFromLinkedProperties(Z.Vector4[0]),f.updateVector4(p.name,Z.Vector4[0])):p.numComponents===3?(p.populateVectorFromLinkedProperties(Z.Vector3[0]),f.updateVector3(p.name,Z.Vector3[0])):p.numComponents===2?(p.populateVectorFromLinkedProperties(Z.Vector2[0]),f.updateFloat2(p.name,Z.Vector2[0].x,Z.Vector2[0].y)):p.numComponents===1&&f.updateFloat(p.name,p.linkedProperties[p.firstLinkedKey].value))}this._lightingInfos.x=this.directIntensity,this._lightingInfos.y=this.emissionLuminance,this._lightingInfos.z=this.environmentIntensity*r.environmentIntensity,this._lightingInfos.w=1,f.updateVector4("vLightingIntensity",this._lightingInfos),f.updateFloat2("vDebugMode",this.debugLimit,this.debugFactor)}if(r.texturesEnabled){for(let u in this._samplersList){let m=this._samplersList[u];m.value&&f.setTexture(m.samplerName,m.value)}if(ZT(r,s,f,d,this.realTimeFiltering),s.ENVIRONMENTBRDF&&f.setTexture("environmentBrdfSampler",this._environmentBRDFTexture),s.FUZZENVIRONMENTBRDF&&f.setTexture("environmentFuzzBrdfSampler",this._environmentFuzzBRDFTexture),s.REFRACTED_BACKGROUND&&(f.setTexture("backgroundRefractionSampler",this._backgroundRefractionTexture),f.updateMatrix("backgroundRefractionMatrix",this._backgroundRefractionTexture.getReflectionTextureMatrix()),Z.Vector3[1].set(Math.log2(this._backgroundRefractionTexture.getSize().width),0,0),f.updateVector3("vBackgroundRefractionInfos",Z.Vector3[1])),(s.ANISOTROPIC||s.FUZZ||s.REFRACTED_BACKGROUND||s.USE_IRRADIANCE_TEXTURE_FOR_SCATTERING)&&f.setTexture("blueNoiseSampler",n._noiseTextures[this.getScene().uniqueId]),s.USE_IRRADIANCE_TEXTURE_FOR_SCATTERING&&this.sssIrradianceTexture&&this.sssDepthTexture){let u=this.sssIrradianceTexture.getSize().width,m=this.sssIrradianceTexture.getSize().height;f.setTexture("sceneIrradianceSampler",this.sssIrradianceTexture),f.setTexture("sceneDepthSampler",this.sssDepthTexture),f.updateFloat2("renderTargetSize",u,m)}}this.getScene().useOrderIndependentTransparency&&this.needAlphaBlendingForMesh(t)&&this.getScene().depthPeelingRenderer.bind(a),this._eventInfo.subMesh=i,this._callbackPluginEventBindForSubMesh(this._eventInfo),Mn(this._activeEffect,this,r),this.bindEyePosition(a)}else r.getEngine()._features.needToAlwaysBindUniformBuffers&&(this._needToBindSceneUbo=!0);this.bindPropertiesForSubMesh(this._uniformBuffer,r,r.getEngine(),i),(c||!this.isFrozen)&&(r.lightsEnabled&&!this._disableLighting&&im(r,t,this._activeEffect,s,this._maxSimultaneousLights),this.bindView(a),hf(r,t,this._activeEffect,!0),s.NUM_MORPH_INFLUENCERS&&Cn(t,this._activeEffect),s.BAKED_VERTEX_ANIMATION_TEXTURE&&((h=t.bakedVertexAnimationManager)==null||h.bind(a,s.INSTANCES)),this._imageProcessingConfiguration.bind(this._activeEffect),ff(s,this._activeEffect,r)),this._afterBind(t,this._activeEffect,i),f.update()}getAnimatables(){let e=super.getAnimatables();for(let t in this._samplersList){let i=this._samplersList[t];i.value&&i.value.animations&&i.value.animations.length>0&&e.push(i.value)}return this._radianceTexture&&this._radianceTexture.animations&&this._radianceTexture.animations.length>0&&e.push(this._radianceTexture),e}getActiveTextures(){let e=super.getActiveTextures();for(let t in this._samplersList){let i=this._samplersList[t];i.value&&e.push(i.value)}return this._radianceTexture&&e.push(this._radianceTexture),e}hasTexture(e){if(super.hasTexture(e))return!0;for(let t in this._samplersList)if(this._samplersList[t].value===e)return!0;return this._radianceTexture===e}setPrePassRenderer(){return!1}dispose(e,t){var i,r;if(this._breakShaderLoadedCheck=!0,t){this._environmentBRDFTexture&&this.getScene().openPBREnvironmentBRDFTexture!==this._environmentBRDFTexture&&this._environmentBRDFTexture.dispose(),this._environmentFuzzBRDFTexture&&this.getScene().environmentFuzzBRDFTexture!==this._environmentFuzzBRDFTexture&&this._environmentFuzzBRDFTexture.dispose(),this._backgroundRefractionTexture=null;for(let s in this._samplersList)(i=this._samplersList[s].value)==null||i.dispose();(r=this._radianceTexture)==null||r.dispose()}this._renderTargets.dispose(),this._imageProcessingConfiguration&&this._imageProcessingObserver&&this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver),super.dispose(e,t)}_getRadianceTexture(){return this._radianceTexture?this._radianceTexture:this.getScene().environmentTexture}_prepareEffect(e,t,i,r=null,s=null,a=null,o=null){if(this._prepareDefines(e,t,i,a,o),!i.isDirty)return null;i.markAsProcessed();let c=this.getScene().getEngine(),f=new On,h=0;i.USESPHERICALINVERTEX&&f.addFallback(h++,"USESPHERICALINVERTEX"),i.FOG&&f.addFallback(h,"FOG"),i.SPECULARAA&&f.addFallback(h,"SPECULARAA"),i.POINTSIZE&&f.addFallback(h,"POINTSIZE"),i.LOGARITHMICDEPTH&&f.addFallback(h,"LOGARITHMICDEPTH"),i.PARALLAX&&f.addFallback(h,"PARALLAX"),i.PARALLAX_RHS&&f.addFallback(h,"PARALLAX_RHS"),i.PARALLAXOCCLUSION&&f.addFallback(h++,"PARALLAXOCCLUSION"),i.ENVIRONMENTBRDF&&f.addFallback(h++,"ENVIRONMENTBRDF"),i.TANGENT&&f.addFallback(h++,"TANGENT"),h=sm(i,f,this._maxSimultaneousLights,h),i.SPECULARTERM&&f.addFallback(h++,"SPECULARTERM"),i.USESPHERICALFROMREFLECTIONMAP&&f.addFallback(h++,"USESPHERICALFROMREFLECTIONMAP"),i.USEIRRADIANCEMAP&&f.addFallback(h++,"USEIRRADIANCEMAP"),i.NORMAL&&f.addFallback(h++,"NORMAL"),i.VERTEXCOLOR&&f.addFallback(h++,"VERTEXCOLOR"),i.MORPHTARGETS&&f.addFallback(h++,"MORPHTARGETS"),i.MULTIVIEW&&f.addFallback(0,"MULTIVIEW");let d=[L.PositionKind];i.NORMAL&&d.push(L.NormalKind),i.TANGENT&&d.push(L.TangentKind);for(let E=1;E<=6;++E)i["UV"+E]&&d.push(`uv${E===1?"":E}`);i.VERTEXCOLOR&&d.push(L.ColorKind),rm(d,e,i,f),nm(d,i),Wh(d,e,i),tm(d,e,i);let u="openpbr",m=["world","view","viewProjection","projection","vEyePosition","inverseProjection","renderTargetSize","vLightsType","visibility","vFogInfos","vFogColor","pointSize","mBones","normalMatrix","vLightingIntensity","logarithmicDepthConstant","vTangentSpaceParams","boneTextureInfo","vDebugMode","morphTargetTextureInfo","morphTargetTextureIndices","cameraInfo","backgroundRefractionMatrix","vBackgroundRefractionInfos"];for(let E in this._uniformsList)m.push(E);let _=["environmentBrdfSampler","boneSampler","morphTargets","oitDepthSampler","oitFrontColorSampler","areaLightsLTC1Sampler","areaLightsLTC2Sampler"];i.FUZZENVIRONMENTBRDF&&_.push("environmentFuzzBrdfSampler"),i.REFRACTED_BACKGROUND&&_.push("backgroundRefractionSampler"),(i.ANISOTROPIC||i.FUZZ||i.REFRACTED_BACKGROUND||i.USE_IRRADIANCE_TEXTURE_FOR_SCATTERING)&&_.push("blueNoiseSampler"),i.USE_IRRADIANCE_TEXTURE_FOR_SCATTERING&&(_.push("sceneIrradianceSampler"),_.push("sceneDepthSampler"));for(let E in this._samplersList){let T=this._samplersList[E];_.push(T.samplerName),m.push(T.samplerInfoName),m.push(T.samplerMatrixName)}mf(m,_,!0);let p=["Material","Scene","Mesh"],g={maxSimultaneousLights:this._maxSimultaneousLights,maxSimultaneousMorphTargets:i.NUM_MORPH_INFLUENCERS};if(this._eventInfo.fallbacks=f,this._eventInfo.fallbackRank=h,this._eventInfo.defines=i,this._eventInfo.uniforms=m,this._eventInfo.attributes=d,this._eventInfo.samplers=_,this._eventInfo.uniformBuffersNames=p,this._eventInfo.customCode=void 0,this._eventInfo.mesh=e,this._eventInfo.indexParameters=g,this._callbackPluginEventGeneric(128,this._eventInfo),Nn.AddUniformsAndSamplers(m,_),Ts.AddUniforms(m),Ts.AddSamplers(_),In(m),this._useVertexPulling){let E=t==null?void 0:t.geometry;E&&(this._vertexPullingMetadata=Af(E),this._vertexPullingMetadata&&this._vertexPullingMetadata.forEach((T,R)=>{m.push(`vp_${R}_info`)}))}else this._vertexPullingMetadata=null;Wt&&(Wt.PrepareUniforms(m,i),Wt.PrepareSamplers(_,i)),mm({uniformsNames:m,uniformBuffersNames:p,samplers:_,defines:i,maxSimultaneousLights:this._maxSimultaneousLights,shaderLanguage:this._shaderLanguage});let v={};this.customShaderNameResolve&&(u=this.customShaderNameResolve(u,m,p,_,i,d,v));let x=i.toString(),A=c.createEffect(u,{attributes:d,uniformsNames:m,uniformBuffersNames:p,samplers:_,defines:x,fallbacks:f,onCompiled:r,onError:s,indexParameters:g,processFinalCode:v.processFinalCode,processCodeAfterIncludes:this._eventInfo.customCode,multiTarget:i.PREPASS,shaderLanguage:this._shaderLanguage,extraInitializationsAsync:this._shadersLoaded?void 0:async()=>{this.shaderLanguage===1?await Promise.all([Promise.resolve().then(()=>(o5(),a5)),Promise.resolve().then(()=>(nY(),rY))]):await Promise.all([Promise.resolve().then(()=>(mY(),uY)),Promise.resolve().then(()=>(d8(),h8))]),this._shadersLoaded=!0}},c);return this._eventInfo.customCode=void 0,A}_prepareDefines(e,t,i,r=null,s=null){var h;let a=t.hasThinInstances,o=this.getScene(),l=o.getEngine();lm(o,e,i,!0,this._maxSimultaneousLights,this._disableLighting),i._needNormals=!0,hm(o,i);let c=this.needAlphaBlendingForMesh(e)&&this.getScene().useOrderIndependentTransparency;if(um(o,i,this.canRenderToMRT&&!c),dm(o,i,c),Nn.PrepareDefines(l.currentRenderPassId,e,i),i._areTexturesDirty){i._needUVs=!1;for(let d=1;d<=6;++d)i["MAINUV"+d]=!1;if(o.texturesEnabled){for(let m in this._samplersList){let _=this._samplersList[m];_.value?(ri(_.value,i,_.textureDefine),i[_.textureDefine+"_GAMMA"]=_.value.gammaSpace):i[_.textureDefine]=!1}let d=this._getRadianceTexture(),u=this._forceIrradianceInFragment||this.realTimeFiltering||this._twoSidedLighting||l.getCaps().maxVaryingVectors<=8||this._baseDiffuseRoughnessTexture!=null;if(uf(o,d,i,this.realTimeFiltering,this.realTimeFilteringQuality,!u),this._baseMetalnessTexture&&(i.AOSTOREINMETALMAPRED=this._useAmbientOcclusionFromMetallicTextureRed),i.SPECULAR_WEIGHT_IN_ALPHA=this._useSpecularWeightFromAlpha,i.SPECULAR_WEIGHT_FROM_SPECULAR_COLOR_TEXTURE=this._useSpecularWeightFromSpecularColorTexture,i.SPECULAR_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE=this._useSpecularRoughnessAnisotropyFromTangentTexture,i.COAT_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE=this._useCoatRoughnessAnisotropyFromTangentTexture,i.COAT_ROUGHNESS_FROM_GREEN_CHANNEL=this._useCoatRoughnessFromGreenChannel,i.SPECULAR_ROUGHNESS_FROM_METALNESS_TEXTURE_GREEN=this._useRoughnessFromMetallicTextureGreen,i.FUZZ_ROUGHNESS_FROM_TEXTURE_ALPHA=this._useFuzzRoughnessFromTextureAlpha,i.BASE_METALNESS_FROM_METALNESS_TEXTURE_BLUE=this._useMetallicFromMetallicTextureBlue,i.THIN_FILM_THICKNESS_FROM_THIN_FILM_TEXTURE=this._useThinFilmThicknessFromTextureGreen,i.GEOMETRY_THICKNESS_FROM_GREEN_CHANNEL=this._useGeometryThicknessFromGreenChannel,this.geometryNormalTexture?(this._useParallax&&this.baseColorTexture&&le.DiffuseTextureEnabled?(i.PARALLAX=!0,i.PARALLAX_RHS=o.useRightHandedSystem,i.PARALLAXOCCLUSION=!!this._useParallaxOcclusion):i.PARALLAX=!1,i.OBJECTSPACE_NORMALMAP=this._useObjectSpaceNormalMap):(i.PARALLAX=!1,i.PARALLAX_RHS=!1,i.PARALLAXOCCLUSION=!1,i.OBJECTSPACE_NORMALMAP=!1),this._environmentBRDFTexture&&le.ReflectionTextureEnabled?(i.ENVIRONMENTBRDF=!0,i.ENVIRONMENTBRDF_RGBD=this._environmentBRDFTexture.isRGBD):(i.ENVIRONMENTBRDF=!1,i.ENVIRONMENTBRDF_RGBD=!1),this._environmentFuzzBRDFTexture?i.FUZZENVIRONMENTBRDF=!0:i.FUZZENVIRONMENTBRDF=!1,this.hasTransparency){i.REFRACTED_BACKGROUND=!!this._backgroundRefractionTexture&&le.RefractionTextureEnabled,i.REFRACTION_HIGH_QUALITY_BLUR=this._refractionHighQualityBlur,i.REFRACTED_LIGHTS=!0;let m=this._getRadianceTexture();m?(i.REFRACTED_ENVIRONMENT=le.RefractionTextureEnabled,i.REFRACTED_ENVIRONMENT_OPPOSITEZ=this.getScene().useRightHandedSystem?!m.invertZ:m.invertZ,i.REFRACTED_ENVIRONMENT_LOCAL_CUBE=m.isCube&&m.boundingBoxSize):i.REFRACTED_ENVIRONMENT=!1}else i.REFRACTED_BACKGROUND=!1,i.REFRACTED_LIGHTS=!1,i.REFRACTED_ENVIRONMENT=!1;this._shouldUseAlphaFromBaseColorTexture()?i.ALPHA_FROM_BASE_COLOR_TEXTURE=!0:i.ALPHA_FROM_BASE_COLOR_TEXTURE=!1}this._lightFalloff===ve.LIGHTFALLOFF_STANDARD?(i.USEPHYSICALLIGHTFALLOFF=!1,i.USEGLTFLIGHTFALLOFF=!1):this._lightFalloff===ve.LIGHTFALLOFF_GLTF?(i.USEPHYSICALLIGHTFALLOFF=!1,i.USEGLTFLIGHTFALLOFF=!0):(i.USEPHYSICALLIGHTFALLOFF=!0,i.USEGLTFLIGHTFALLOFF=!1),!this.backFaceCulling&&this._twoSidedLighting?i.TWOSIDEDLIGHTING=!0:i.TWOSIDEDLIGHTING=!1,i.MIRRORED=!!o._mirroredCameraPosition,i.SPECULARAA=l.getCaps().standardDerivatives&&this._enableSpecularAntiAliasing}(i._areTexturesDirty||i._areMiscDirty)&&(i.ALPHATESTVALUE=`${this._alphaCutOff}${this._alphaCutOff%1===0?".":""}`,i.PREMULTIPLYALPHA=this.alphaMode===7||this.alphaMode===8,i.ALPHABLEND=this.needAlphaBlendingForMesh(e)),i._areImageProcessingDirty&&this._imageProcessingConfiguration&&this._imageProcessingConfiguration.prepareDefines(i),i.FORCENORMALFORWARD=this._forceNormalForward,i.RADIANCEOCCLUSION=this._useRadianceOcclusion,i.HORIZONOCCLUSION=this._useHorizonOcclusion,(this.specularRoughnessAnisotropy>0||this.coatRoughnessAnisotropy>0)&&n._noiseTextures[o.uniqueId]&&le.ReflectionTextureEnabled?(i.ANISOTROPIC=!0,e.isVerticesDataPresent(L.TangentKind)||(i._needUVs=!0,i.MAINUV1=!0),this._useGltfStyleAnisotropy&&(i.USE_GLTF_STYLE_ANISOTROPY=!0),i.ANISOTROPIC_BASE=this.specularRoughnessAnisotropy>0,i.ANISOTROPIC_COAT=this.coatRoughnessAnisotropy>0):(i.ANISOTROPIC=!1,i.USE_GLTF_STYLE_ANISOTROPY=!1,i.ANISOTROPIC_BASE=!1,i.ANISOTROPIC_COAT=!1),i.THIN_FILM=this.thinFilmWeight>0,i.IRIDESCENCE=this.thinFilmWeight>0,i.DISPERSION=this.transmissionDispersionScale>0,i.SCATTERING=this.hasScattering;let f=[8,16,32];if(i.SSS_SAMPLE_COUNT=(h=f[this._sssQuality])!=null?h:16,i.TRANSMISSION_SLAB=this.transmissionWeight>0,i.TRANSMISSION_SLAB_VOLUME=this.transmissionWeight>0&&this.transmissionDepth>0,i.SUBSURFACE_SLAB=this.subsurfaceWeight>0,!i.PREPASS&&(i.SUBSURFACE_SLAB||i.TRANSMISSION_SLAB_VOLUME)){let d=!1;if(!this.sssIrradianceTexture&&o.geometryBufferRenderer){let u=o.geometryBufferRenderer.getTextureIndex(Kn.IRRADIANCE_TEXTURE_TYPE);this.sssIrradianceTexture=o.geometryBufferRenderer.getGBuffer().textures[u],d=!0}if(!this.sssDepthTexture&&o.geometryBufferRenderer){let u=o.geometryBufferRenderer.getTextureIndex(Kn.SCREENSPACE_DEPTH_TEXTURE_TYPE);this.sssDepthTexture=o.geometryBufferRenderer.getGBuffer().textures[u],d=!0}this.sssIrradianceTexture&&this.sssDepthTexture&&(i.USE_IRRADIANCE_TEXTURE_FOR_SCATTERING=!0,d&&(i.USE_IRRADIANCE_TEXTURE_FOR_SCATTERING_GBUFFER=!0))}i.FUZZ=this.fuzzWeight>0&&le.ReflectionTextureEnabled,i.GEOMETRY_THIN_WALLED=this.geometryThinWalled!=0,i.FUZZ?(e.isVerticesDataPresent(L.TangentKind)||(i._needUVs=!0,i.MAINUV1=!0),this._environmentFuzzBRDFTexture=sD(this.getScene()),i.FUZZ_IBL_SAMPLES=this.fuzzSampleNumber):(this._environmentFuzzBRDFTexture=null,i.FUZZENVIRONMENTBRDF=!1,i.FUZZ_IBL_SAMPLES=0),i._areMiscDirty&&(am(e,o,this._useLogarithmicDepth,this.pointsCloud,this.fogEnabled,this.needAlphaTestingForMesh(e),i,this._applyDecalMapAfterDetailMap,this._useVertexPulling,t,this._isVertexOutputInvariant),i.UNLIT=this._unlit||(this.pointsCloud||this.wireframe)&&!e.isVerticesDataPresent(L.NormalKind),i.DEBUGMODE=this._debugMode),cm(o,l,this,i,!!r,s,a),this._eventInfo.defines=i,this._eventInfo.mesh=e,this._callbackPluginEventPrepareDefinesBeforeAttributes(this._eventInfo),fm(e,i,!0,!0,!0,this._transparencyMode!==ve.MATERIAL_OPAQUE),this._callbackPluginEventPrepareDefines(this._eventInfo)}};Oe.SSS_QUALITY_LOW=0;Oe.SSS_QUALITY_MEDIUM=1;Oe.SSS_QUALITY_HIGH=2;Oe._noiseTextures={};Oe.ForceGLSL=!1;P([dt("_markAllSubMeshesAsTexturesDirty","baseWeight")],Oe.prototype,"_baseWeight",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","baseWeightTexture")],Oe.prototype,"_baseWeightTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","baseColor")],Oe.prototype,"_baseColor",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","baseColorTexture")],Oe.prototype,"_baseColorTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","baseDiffuseRoughness")],Oe.prototype,"_baseDiffuseRoughness",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","baseDiffuseRoughnessTexture")],Oe.prototype,"_baseDiffuseRoughnessTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","baseMetalness")],Oe.prototype,"_baseMetalness",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","baseMetalnessTexture")],Oe.prototype,"_baseMetalnessTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","specularWeight")],Oe.prototype,"_specularWeight",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","specularWeightTexture")],Oe.prototype,"_specularWeightTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","specularColor")],Oe.prototype,"_specularColor",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","specularColorTexture")],Oe.prototype,"_specularColorTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","specularRoughness")],Oe.prototype,"_specularRoughness",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","specularRoughnessTexture")],Oe.prototype,"_specularRoughnessTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","specularRoughnessAnisotropy")],Oe.prototype,"_specularRoughnessAnisotropy",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","specularRoughnessAnisotropyTexture")],Oe.prototype,"_specularRoughnessAnisotropyTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","specularIor")],Oe.prototype,"_specularIor",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","transmissionWeight")],Oe.prototype,"_transmissionWeight",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","transmissionWeightTexture")],Oe.prototype,"_transmissionWeightTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","transmissionColor")],Oe.prototype,"_transmissionColor",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","transmissionColorTexture")],Oe.prototype,"_transmissionColorTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","transmissionDepth")],Oe.prototype,"_transmissionDepth",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","transmissionDepthTexture")],Oe.prototype,"_transmissionDepthTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","transmissionScatter")],Oe.prototype,"_transmissionScatter",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","transmissionScatterTexture")],Oe.prototype,"_transmissionScatterTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","transmissionScatterAnisotropy")],Oe.prototype,"_transmissionScatterAnisotropy",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","transmissionDispersionScale")],Oe.prototype,"_transmissionDispersionScale",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","transmissionDispersionScaleTexture")],Oe.prototype,"_transmissionDispersionScaleTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","transmissionDispersionAbbeNumber")],Oe.prototype,"_transmissionDispersionAbbeNumber",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","subsurfaceWeight")],Oe.prototype,"_subsurfaceWeight",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","subsurfaceWeightTexture")],Oe.prototype,"_subsurfaceWeightTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","subsurfaceColor")],Oe.prototype,"_subsurfaceColor",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","subsurfaceColorTexture")],Oe.prototype,"_subsurfaceColorTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","subsurfaceRadius")],Oe.prototype,"_subsurfaceRadius",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","subsurfaceRadiusScale")],Oe.prototype,"_subsurfaceRadiusScale",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","subsurfaceRadiusScaleTexture")],Oe.prototype,"_subsurfaceRadiusScaleTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","subsurfaceScatterAnisotropy")],Oe.prototype,"_subsurfaceScatterAnisotropy",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","coatWeight")],Oe.prototype,"_coatWeight",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","coatWeightTexture")],Oe.prototype,"_coatWeightTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","coatColor")],Oe.prototype,"_coatColor",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","coatColorTexture")],Oe.prototype,"_coatColorTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","coatRoughness")],Oe.prototype,"_coatRoughness",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","coatRoughnessTexture")],Oe.prototype,"_coatRoughnessTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","coatRoughnessAnisotropy")],Oe.prototype,"_coatRoughnessAnisotropy",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","coatRoughnessAnisotropyTexture")],Oe.prototype,"_coatRoughnessAnisotropyTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","coatIor")],Oe.prototype,"_coatIor",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","coatDarkening")],Oe.prototype,"_coatDarkening",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","coatDarkeningTexture")],Oe.prototype,"_coatDarkeningTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","fuzzWeight")],Oe.prototype,"_fuzzWeight",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","fuzzWeightTexture")],Oe.prototype,"_fuzzWeightTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","fuzzColor")],Oe.prototype,"_fuzzColor",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","fuzzColorTexture")],Oe.prototype,"_fuzzColorTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","fuzzRoughness")],Oe.prototype,"_fuzzRoughness",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","fuzzRoughnessTexture")],Oe.prototype,"_fuzzRoughnessTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","geometryThinWalled")],Oe.prototype,"_geometryThinWalled",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","geometryNormalTexture")],Oe.prototype,"_geometryNormalTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","geometryTangent")],Oe.prototype,"_geometryTangent",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","geometryTangentTexture")],Oe.prototype,"_geometryTangentTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","geometryCoatNormalTexture")],Oe.prototype,"_geometryCoatNormalTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","geometryCoatTangent")],Oe.prototype,"_geometryCoatTangent",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","geometryCoatTangentTexture")],Oe.prototype,"_geometryCoatTangentTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","geometryOpacity")],Oe.prototype,"_geometryOpacity",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","geometryOpacityTexture")],Oe.prototype,"_geometryOpacityTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","geometryThickness")],Oe.prototype,"_geometryThickness",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","geometryThicknessTexture")],Oe.prototype,"_geometryThicknessTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","emissionLuminance")],Oe.prototype,"_emissionLuminance",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","emissionColor")],Oe.prototype,"_emissionColor",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","emissionColorTexture")],Oe.prototype,"_emissionColorTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","thinFilmWeight")],Oe.prototype,"_thinFilmWeight",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","thinFilmWeightTexture")],Oe.prototype,"_thinFilmWeightTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","thinFilmThickness")],Oe.prototype,"_thinFilmThickness",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","thinFilmThicknessMin")],Oe.prototype,"_thinFilmThicknessMin",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","thinFilmThicknessTexture")],Oe.prototype,"_thinFilmThicknessTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","thinFilmIor")],Oe.prototype,"_thinFilmIor",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","ambientOcclusionTexture")],Oe.prototype,"_ambientOcclusionTexture",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"directIntensity",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"environmentIntensity",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"useSpecularWeightFromTextureAlpha",void 0);P([F(),oe("_markAllSubMeshesAsTexturesAndMiscDirty")],Oe.prototype,"forceAlphaTest",void 0);P([F(),oe("_markAllSubMeshesAsTexturesAndMiscDirty")],Oe.prototype,"alphaCutOff",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"useAmbientOcclusionFromMetallicTextureRed",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"useAmbientInGrayScale",void 0);P([F()],Oe.prototype,"usePhysicalLightFalloff",null);P([F()],Oe.prototype,"useGLTFLightFalloff",null);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"useObjectSpaceNormalMap",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"useParallax",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"useParallaxOcclusion",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"parallaxScaleBias",void 0);P([F(),oe("_markAllSubMeshesAsLightsDirty")],Oe.prototype,"disableLighting",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"forceIrradianceInFragment",void 0);P([F(),oe("_markAllSubMeshesAsLightsDirty")],Oe.prototype,"maxSimultaneousLights",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"invertNormalMapX",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"invertNormalMapY",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"twoSidedLighting",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"useAlphaFresnel",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"useLinearAlphaFresnel",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"environmentBRDFTexture",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"forceNormalForward",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"enableSpecularAntiAliasing",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"useHorizonOcclusion",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"useRadianceOcclusion",void 0);P([F(),oe("_markAllSubMeshesAsMiscDirty")],Oe.prototype,"unlit",void 0);P([F(),oe("_markAllSubMeshesAsMiscDirty")],Oe.prototype,"applyDecalMapAfterDetailMap",void 0);P([oe("_markAllSubMeshesAsMiscDirty")],Oe.prototype,"debugMode",void 0);P([F()],Oe.prototype,"transparencyMode",null);wt("BABYLON.OpenPBRMaterial",Oe)});var p8={};et(p8,{OpenPBRMaterialLoadingAdapter:()=>rL});var rL,_8=C(()=>{Ht();rL=class{constructor(e){this._diffuseTransmissionTint=Te.White(),this._diffuseTransmissionTintTexture=null,this._material=e}get material(){return this._material}get isUnlit(){return this._material.unlit}set isUnlit(e){this._material.unlit=e}set backFaceCulling(e){this._material.backFaceCulling=e}get backFaceCulling(){return this._material.backFaceCulling}set twoSidedLighting(e){this._material.twoSidedLighting=e}get twoSidedLighting(){return this._material.twoSidedLighting}set alphaCutOff(e){}get alphaCutOff(){return .5}set useAlphaFromBaseColorTexture(e){this._material._useAlphaFromBaseColorTexture=e}get useAlphaFromBaseColorTexture(){return!1}get transparencyAsAlphaCoverage(){return!1}set transparencyAsAlphaCoverage(e){}set baseColor(e){this._material.baseColor=e}get baseColor(){return this._material.baseColor}set baseColorTexture(e){this._material.baseColorTexture=e}get baseColorTexture(){return this._material.baseColorTexture}set baseDiffuseRoughness(e){this._material.baseDiffuseRoughness=e}get baseDiffuseRoughness(){return this._material.baseDiffuseRoughness}set baseDiffuseRoughnessTexture(e){this._material.baseDiffuseRoughnessTexture=e}get baseDiffuseRoughnessTexture(){return this._material.baseDiffuseRoughnessTexture}set baseMetalness(e){this._material.baseMetalness=e}get baseMetalness(){return this._material.baseMetalness}set baseMetalnessTexture(e){this._material.baseMetalnessTexture=e}get baseMetalnessTexture(){return this._material.baseMetalnessTexture}set useRoughnessFromMetallicTextureGreen(e){this._material._useRoughnessFromMetallicTextureGreen=e}set useMetallicFromMetallicTextureBlue(e){this._material._useMetallicFromMetallicTextureBlue=e}enableSpecularEdgeColor(e=!1){}set specularWeight(e){this._material.specularWeight=e}get specularWeight(){return this._material.specularWeight}set specularWeightTexture(e){this._material.specularColorTexture===e?(this._material.specularWeightTexture=null,this._material._useSpecularWeightFromSpecularColorTexture=!0,this._material._useSpecularWeightFromAlpha=!0):this._material.specularWeightTexture=e}get specularWeightTexture(){return this._material.specularWeightTexture}set specularColor(e){this._material.specularColor=e}get specularColor(){return this._material.specularColor}set specularColorTexture(e){this._material.specularColorTexture=e,this._material.specularWeightTexture===this._material.specularColorTexture&&(this._material.specularWeightTexture=null,this._material._useSpecularWeightFromSpecularColorTexture=!0,this._material._useSpecularWeightFromAlpha=!0)}get specularColorTexture(){return this._material.specularColorTexture}set specularRoughness(e){this._material.specularRoughness=e}get specularRoughness(){return this._material.specularRoughness}set specularRoughnessTexture(e){this._material.specularRoughnessTexture=e}get specularRoughnessTexture(){return this._material.specularRoughnessTexture}set specularIor(e){this._material.specularIor=e}get specularIor(){return this._material.specularIor}set emissionColor(e){this._material.emissionColor=e}get emissionColor(){return this._material.emissionColor}set emissionLuminance(e){this._material.emissionLuminance=e}get emissionLuminance(){return this._material.emissionLuminance}set emissionColorTexture(e){this._material.emissionColorTexture=e}get emissionColorTexture(){return this._material.emissionColorTexture}set ambientOcclusionTexture(e){this._material.ambientOcclusionTexture=e}get ambientOcclusionTexture(){return this._material.ambientOcclusionTexture}set ambientOcclusionTextureStrength(e){let t=this._material.ambientOcclusionTexture;t&&(t.level=e)}get ambientOcclusionTextureStrength(){var t;let e=this._material.ambientOcclusionTexture;return(t=e==null?void 0:e.level)!=null?t:1}configureCoat(){}set coatWeight(e){this._material.coatWeight=e}get coatWeight(){return this._material.coatWeight}set coatWeightTexture(e){this._material.coatWeightTexture=e}get coatWeightTexture(){return this._material.coatWeightTexture}set coatColor(e){this._material.coatColor=e}set coatColorTexture(e){this._material.coatColorTexture=e}set coatRoughness(e){this._material.coatRoughness=e}get coatRoughness(){return this._material.coatRoughness}set coatRoughnessTexture(e){this._material.coatRoughnessTexture=e,e&&(this._material._useCoatRoughnessFromGreenChannel=!0)}get coatRoughnessTexture(){return this._material.coatRoughnessTexture}set coatIor(e){this._material.coatIor=e}set coatDarkening(e){this._material.coatDarkening=e}set coatDarkeningTexture(e){this._material.coatDarkeningTexture=e}set coatRoughnessAnisotropy(e){this._material.coatRoughnessAnisotropy=e}get coatRoughnessAnisotropy(){return this._material.coatRoughnessAnisotropy}set geometryCoatTangentAngle(e){this._material.geometryCoatTangentAngle=e}set geometryCoatTangentTexture(e){this._material.geometryCoatTangentTexture=e,e&&(this._material._useCoatRoughnessAnisotropyFromTangentTexture=!0)}get geometryCoatTangentTexture(){return this._material.geometryCoatTangentTexture}configureTransmission(){this._material.geometryThinWalled=1,this._material.transmissionDepth=0}set transmissionWeight(e){this._material.transmissionWeight=e}set transmissionWeightTexture(e){this._material.transmissionWeightTexture=e}get transmissionWeight(){return this._material.transmissionWeight}set transmissionScatter(e){this._material.transmissionScatter=e}get transmissionScatter(){return this._material.transmissionScatter}set transmissionScatterTexture(e){this._material.transmissionScatterTexture=e}get transmissionScatterTexture(){return this._material.transmissionScatterTexture}set transmissionScatterAnisotropy(e){this._material.transmissionScatterAnisotropy=e}set transmissionDispersionAbbeNumber(e){this._material.transmissionDispersionAbbeNumber=e}set transmissionDispersionScale(e){this._material.transmissionDispersionScale=e}set transmissionDepth(e){e!==Number.MAX_VALUE||this._material.transmissionDepth!==0?this._material.transmissionDepth=e:this._material.transmissionDepth=0}get transmissionDepth(){return this._material.transmissionDepth}set transmissionColor(e){e.equals(Te.White())||(this._material.transmissionColor=e)}get transmissionColor(){return this._material.transmissionColor}get refractionBackgroundTexture(){return this._material.backgroundRefractionTexture}set refractionBackgroundTexture(e){this._material.backgroundRefractionTexture=e}configureVolume(){this._material.geometryThinWalled=0}set geometryThinWalled(e){this._material.geometryThinWalled=e?1:0}get geometryThinWalled(){return!!this._material.geometryThinWalled}set volumeThicknessTexture(e){this._material.geometryThicknessTexture=e,this._material._useGeometryThicknessFromGreenChannel=!0}set volumeThickness(e){this._material.geometryThickness=e}configureSubsurface(){this._material.geometryThinWalled=1,this._material.subsurfaceScatterAnisotropy=1}set subsurfaceWeight(e){this._material.subsurfaceWeight=e}get subsurfaceWeight(){return this._material.subsurfaceWeight}set subsurfaceWeightTexture(e){this._material.subsurfaceWeightTexture=e}set subsurfaceColor(e){this._material.subsurfaceColor=e}set subsurfaceColorTexture(e){this._material.subsurfaceColorTexture=e}set diffuseTransmissionTint(e){this._diffuseTransmissionTint=e}get diffuseTransmissionTint(){return this._diffuseTransmissionTint}set diffuseTransmissionTintTexture(e){this._diffuseTransmissionTintTexture=e}get subsurfaceRadius(){return this._material.subsurfaceRadius}set subsurfaceRadius(e){this._material.subsurfaceRadius=e}get subsurfaceRadiusScale(){return this._material.subsurfaceRadiusScale}set subsurfaceRadiusScale(e){this._material.subsurfaceRadiusScale=e}set subsurfaceScatterAnisotropy(e){this._material.subsurfaceScatterAnisotropy=e}isTranslucent(){return this.transmissionWeight>0||this.subsurfaceWeight>0}configureFuzz(){}set fuzzWeight(e){this._material.fuzzWeight=e}set fuzzWeightTexture(e){this._material.fuzzWeightTexture=e}set fuzzColor(e){this._material.fuzzColor=e}set fuzzColorTexture(e){this._material.fuzzColorTexture=e}set fuzzRoughness(e){this._material.fuzzRoughness=e}set fuzzRoughnessTexture(e){this._material.fuzzRoughnessTexture=e,this._material._useFuzzRoughnessFromTextureAlpha=!0}set specularRoughnessAnisotropy(e){this._material.specularRoughnessAnisotropy=e}get specularRoughnessAnisotropy(){return this._material.specularRoughnessAnisotropy}set geometryTangentAngle(e){this._material.geometryTangentAngle=e}set geometryTangentTexture(e){this._material.geometryTangentTexture=e,this._material._useSpecularRoughnessAnisotropyFromTangentTexture=!0}get geometryTangentTexture(){return this._material.geometryTangentTexture}configureGltfStyleAnisotropy(e=!0){this._material._useGltfStyleAnisotropy=e}set thinFilmWeight(e){this._material.thinFilmWeight=e}set thinFilmIor(e){this._material.thinFilmIor=e}set thinFilmThicknessMinimum(e){this._material.thinFilmThicknessMin=e/1e3}set thinFilmThicknessMaximum(e){this._material.thinFilmThickness=e/1e3}set thinFilmWeightTexture(e){this._material.thinFilmWeightTexture=e}set thinFilmThicknessTexture(e){this._material.thinFilmThicknessTexture=e,this._material._useThinFilmThicknessFromTextureGreen=!0}set unlit(e){this._material.unlit=e}set geometryOpacity(e){this._material.geometryOpacity=e}get geometryOpacity(){return this._material.geometryOpacity}set geometryNormalTexture(e){this._material.geometryNormalTexture=e}get geometryNormalTexture(){return this._material.geometryNormalTexture}setNormalMapInversions(e,t){}set geometryCoatNormalTexture(e){this._material.geometryCoatNormalTexture=e}get geometryCoatNormalTexture(){return this._material.geometryCoatNormalTexture}set geometryCoatNormalTextureScale(e){this._material.geometryCoatNormalTexture&&(this._material.geometryCoatNormalTexture.level=e)}finalize(){(this._diffuseTransmissionTint&&!this._diffuseTransmissionTint.equals(Te.White())||this._diffuseTransmissionTintTexture)&&(this._material.geometryThinWalled?(this.subsurfaceColor=this._diffuseTransmissionTint,this.subsurfaceColorTexture=this._diffuseTransmissionTintTexture):this._material.coatWeight==0&&(!this.baseColor.equals(Te.White())||this.baseColorTexture)&&(this._material.coatWeight=this.subsurfaceWeight,this._material.coatWeightTexture=this.subsurfaceWeightTexture,this._material.coatColor=this._diffuseTransmissionTint,this._material.coatColorTexture=this._diffuseTransmissionTintTexture,this._material.coatIor=this._material.specularIor,this._material.coatDarkening=0,this._material.coatRoughness=this._material.specularRoughness,this._material.coatRoughnessTexture=this._material.specularRoughnessTexture,this._material.specularRoughness=1,this._material.specularRoughnessTexture=null)),this.transmissionWeight>0&&(this._material.geometryThinWalled||this._material.transmissionDepth===0?(this._material.transmissionColor=this._material.baseColor,this._material.transmissionColorTexture=this._material.baseColorTexture):this._material.coatWeight==0&&(!this.baseColor.equals(Te.White())||this.baseColorTexture!==null)&&(this._material.coatWeight=this.transmissionWeight,this._material.coatWeightTexture=this.transmissionWeightTexture,this._material.coatColor=this.baseColor,this._material.coatColorTexture=this.baseColorTexture,this._material.coatIor=this._material.specularIor,this._material.coatDarkening=0,this._material.coatRoughness=this._material.specularRoughness,this._material.coatRoughnessTexture=this._material.specularRoughnessTexture))}}});var nL,br,g8=C(()=>{kt();Ut();ba();If();nL=class extends vr{constructor(){super(...arguments),this.BRDF_V_HEIGHT_CORRELATED=!1,this.MS_BRDF_ENERGY_CONSERVATION=!1,this.SPHERICAL_HARMONICS=!1,this.SPECULAR_GLOSSINESS_ENERGY_CONSERVATION=!1,this.MIX_IBL_RADIANCE_WITH_IRRADIANCE=!0,this.LEGACY_SPECULAR_ENERGY_CONSERVATION=!1,this.BASE_DIFFUSE_MODEL=0,this.DIELECTRIC_SPECULAR_MODEL=0,this.CONDUCTOR_SPECULAR_MODEL=0}},br=class n extends Fr{_markAllSubMeshesAsMiscDirty(){this._internalMarkAllSubMeshesAsMiscDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"PBRBRDF",90,new nL,t),this._useEnergyConservation=n.DEFAULT_USE_ENERGY_CONSERVATION,this.useEnergyConservation=n.DEFAULT_USE_ENERGY_CONSERVATION,this._useSmithVisibilityHeightCorrelated=n.DEFAULT_USE_SMITH_VISIBILITY_HEIGHT_CORRELATED,this.useSmithVisibilityHeightCorrelated=n.DEFAULT_USE_SMITH_VISIBILITY_HEIGHT_CORRELATED,this._useSphericalHarmonics=n.DEFAULT_USE_SPHERICAL_HARMONICS,this.useSphericalHarmonics=n.DEFAULT_USE_SPHERICAL_HARMONICS,this._useSpecularGlossinessInputEnergyConservation=n.DEFAULT_USE_SPECULAR_GLOSSINESS_INPUT_ENERGY_CONSERVATION,this.useSpecularGlossinessInputEnergyConservation=n.DEFAULT_USE_SPECULAR_GLOSSINESS_INPUT_ENERGY_CONSERVATION,this._mixIblRadianceWithIrradiance=n.DEFAULT_MIX_IBL_RADIANCE_WITH_IRRADIANCE,this.mixIblRadianceWithIrradiance=n.DEFAULT_MIX_IBL_RADIANCE_WITH_IRRADIANCE,this._useLegacySpecularEnergyConservation=n.DEFAULT_USE_LEGACY_SPECULAR_ENERGY_CONSERVATION,this.useLegacySpecularEnergyConservation=n.DEFAULT_USE_LEGACY_SPECULAR_ENERGY_CONSERVATION,this._baseDiffuseModel=n.DEFAULT_DIFFUSE_MODEL,this.baseDiffuseModel=n.DEFAULT_DIFFUSE_MODEL,this._dielectricSpecularModel=n.DEFAULT_DIELECTRIC_SPECULAR_MODEL,this.dielectricSpecularModel=n.DEFAULT_DIELECTRIC_SPECULAR_MODEL,this._conductorSpecularModel=n.DEFAULT_CONDUCTOR_SPECULAR_MODEL,this.conductorSpecularModel=n.DEFAULT_CONDUCTOR_SPECULAR_MODEL,this._internalMarkAllSubMeshesAsMiscDirty=e._dirtyCallbacks[16],this._enable(!0)}prepareDefines(e){e.BRDF_V_HEIGHT_CORRELATED=this._useSmithVisibilityHeightCorrelated,e.MS_BRDF_ENERGY_CONSERVATION=this._useEnergyConservation&&this._useSmithVisibilityHeightCorrelated,e.SPHERICAL_HARMONICS=this._useSphericalHarmonics,e.SPECULAR_GLOSSINESS_ENERGY_CONSERVATION=this._useSpecularGlossinessInputEnergyConservation,e.MIX_IBL_RADIANCE_WITH_IRRADIANCE=this._mixIblRadianceWithIrradiance&&!this._material._disableLighting,e.LEGACY_SPECULAR_ENERGY_CONSERVATION=this._useLegacySpecularEnergyConservation,e.BASE_DIFFUSE_MODEL=this._baseDiffuseModel,e.DIELECTRIC_SPECULAR_MODEL=this._dielectricSpecularModel,e.CONDUCTOR_SPECULAR_MODEL=this._conductorSpecularModel}getClassName(){return"PBRBRDFConfiguration"}};br.DEFAULT_USE_ENERGY_CONSERVATION=!0;br.DEFAULT_USE_SMITH_VISIBILITY_HEIGHT_CORRELATED=!0;br.DEFAULT_USE_SPHERICAL_HARMONICS=!0;br.DEFAULT_USE_SPECULAR_GLOSSINESS_INPUT_ENERGY_CONSERVATION=!0;br.DEFAULT_MIX_IBL_RADIANCE_WITH_IRRADIANCE=!0;br.DEFAULT_USE_LEGACY_SPECULAR_ENERGY_CONSERVATION=!0;br.DEFAULT_DIFFUSE_MODEL=0;br.DEFAULT_DIELECTRIC_SPECULAR_MODEL=0;br.DEFAULT_CONDUCTOR_SPECULAR_MODEL=0;P([F(),oe("_markAllSubMeshesAsMiscDirty")],br.prototype,"useEnergyConservation",void 0);P([F(),oe("_markAllSubMeshesAsMiscDirty")],br.prototype,"useSmithVisibilityHeightCorrelated",void 0);P([F(),oe("_markAllSubMeshesAsMiscDirty")],br.prototype,"useSphericalHarmonics",void 0);P([F(),oe("_markAllSubMeshesAsMiscDirty")],br.prototype,"useSpecularGlossinessInputEnergyConservation",void 0);P([F(),oe("_markAllSubMeshesAsMiscDirty")],br.prototype,"mixIblRadianceWithIrradiance",void 0);P([F(),oe("_markAllSubMeshesAsMiscDirty")],br.prototype,"useLegacySpecularEnergyConservation",void 0);P([F("baseDiffuseModel"),oe("_markAllSubMeshesAsMiscDirty")],br.prototype,"baseDiffuseModel",void 0);P([F("dielectricSpecularModel"),oe("_markAllSubMeshesAsMiscDirty")],br.prototype,"dielectricSpecularModel",void 0);P([F("conductorSpecularModel"),oe("_markAllSubMeshesAsMiscDirty")],br.prototype,"conductorSpecularModel",void 0)});var sL,tn,v8=C(()=>{kt();Ut();Ht();xa();If();ba();yn();sL=class extends vr{constructor(){super(...arguments),this.CLEARCOAT=!1,this.CLEARCOAT_DEFAULTIOR=!1,this.CLEARCOAT_TEXTURE=!1,this.CLEARCOAT_TEXTURE_ROUGHNESS=!1,this.CLEARCOAT_TEXTUREDIRECTUV=0,this.CLEARCOAT_TEXTURE_ROUGHNESSDIRECTUV=0,this.CLEARCOAT_BUMP=!1,this.CLEARCOAT_BUMPDIRECTUV=0,this.CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE=!1,this.CLEARCOAT_REMAP_F0=!1,this.CLEARCOAT_TINT=!1,this.CLEARCOAT_TINT_TEXTURE=!1,this.CLEARCOAT_TINT_TEXTUREDIRECTUV=0,this.CLEARCOAT_TINT_GAMMATEXTURE=!1}},tn=class n extends Fr{_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"PBRClearCoat",100,new sL,t),this._isEnabled=!1,this.isEnabled=!1,this.intensity=1,this.roughness=0,this._indexOfRefraction=n._DefaultIndexOfRefraction,this.indexOfRefraction=n._DefaultIndexOfRefraction,this._texture=null,this.texture=null,this._useRoughnessFromMainTexture=!0,this.useRoughnessFromMainTexture=!0,this._textureRoughness=null,this.textureRoughness=null,this._remapF0OnInterfaceChange=!0,this.remapF0OnInterfaceChange=!0,this._bumpTexture=null,this.bumpTexture=null,this._isTintEnabled=!1,this.isTintEnabled=!1,this.tintColor=Te.White(),this.tintColorAtDistance=1,this.tintThickness=1,this._tintTexture=null,this.tintTexture=null,this._internalMarkAllSubMeshesAsTexturesDirty=e._dirtyCallbacks[1]}isReadyForSubMesh(e,t,i){if(!this._isEnabled)return!0;let r=this._material._disableBumpMap;return!(e._areTexturesDirty&&t.texturesEnabled&&(this._texture&&le.ClearCoatTextureEnabled&&!this._texture.isReadyOrNotBlocking()||this._textureRoughness&&le.ClearCoatTextureEnabled&&!this._textureRoughness.isReadyOrNotBlocking()||i.getCaps().standardDerivatives&&this._bumpTexture&&le.ClearCoatBumpTextureEnabled&&!r&&!this._bumpTexture.isReady()||this._isTintEnabled&&this._tintTexture&&le.ClearCoatTintTextureEnabled&&!this._tintTexture.isReadyOrNotBlocking()))}prepareDefinesBeforeAttributes(e,t){this._isEnabled?(e.CLEARCOAT=!0,e.CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE=this._useRoughnessFromMainTexture,e.CLEARCOAT_REMAP_F0=this._remapF0OnInterfaceChange,e._areTexturesDirty&&t.texturesEnabled&&(this._texture&&le.ClearCoatTextureEnabled?ri(this._texture,e,"CLEARCOAT_TEXTURE"):e.CLEARCOAT_TEXTURE=!1,this._textureRoughness&&le.ClearCoatTextureEnabled?ri(this._textureRoughness,e,"CLEARCOAT_TEXTURE_ROUGHNESS"):e.CLEARCOAT_TEXTURE_ROUGHNESS=!1,this._bumpTexture&&le.ClearCoatBumpTextureEnabled?ri(this._bumpTexture,e,"CLEARCOAT_BUMP"):e.CLEARCOAT_BUMP=!1,e.CLEARCOAT_DEFAULTIOR=this._indexOfRefraction===n._DefaultIndexOfRefraction,this._isTintEnabled?(e.CLEARCOAT_TINT=!0,this._tintTexture&&le.ClearCoatTintTextureEnabled?(ri(this._tintTexture,e,"CLEARCOAT_TINT_TEXTURE"),e.CLEARCOAT_TINT_GAMMATEXTURE=this._tintTexture.gammaSpace):e.CLEARCOAT_TINT_TEXTURE=!1):(e.CLEARCOAT_TINT=!1,e.CLEARCOAT_TINT_TEXTURE=!1))):(e.CLEARCOAT=!1,e.CLEARCOAT_TEXTURE=!1,e.CLEARCOAT_TEXTURE_ROUGHNESS=!1,e.CLEARCOAT_BUMP=!1,e.CLEARCOAT_TINT=!1,e.CLEARCOAT_TINT_TEXTURE=!1,e.CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE=!1,e.CLEARCOAT_DEFAULTIOR=!1,e.CLEARCOAT_TEXTUREDIRECTUV=0,e.CLEARCOAT_TEXTURE_ROUGHNESSDIRECTUV=0,e.CLEARCOAT_BUMPDIRECTUV=0,e.CLEARCOAT_REMAP_F0=!1,e.CLEARCOAT_TINT_TEXTUREDIRECTUV=0,e.CLEARCOAT_TINT_GAMMATEXTURE=!1)}bindForSubMesh(e,t,i,r){var f,h,d,u,m,_,p,g;if(!this._isEnabled)return;let s=r.materialDefines,a=this._material.isFrozen,o=this._material._disableBumpMap,l=this._material._invertNormalMapX,c=this._material._invertNormalMapY;if(!e.useUbo||!a||!e.isSync){(this._texture||this._textureRoughness)&&le.ClearCoatTextureEnabled&&(e.updateFloat4("vClearCoatInfos",(h=(f=this._texture)==null?void 0:f.coordinatesIndex)!=null?h:0,(u=(d=this._texture)==null?void 0:d.level)!=null?u:0,(_=(m=this._textureRoughness)==null?void 0:m.coordinatesIndex)!=null?_:0,(g=(p=this._textureRoughness)==null?void 0:p.level)!=null?g:0),this._texture&&ni(this._texture,e,"clearCoat"),this._textureRoughness&&!s.CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE&&ni(this._textureRoughness,e,"clearCoatRoughness")),this._bumpTexture&&i.getCaps().standardDerivatives&&le.ClearCoatTextureEnabled&&!o&&(e.updateFloat2("vClearCoatBumpInfos",this._bumpTexture.coordinatesIndex,this._bumpTexture.level),ni(this._bumpTexture,e,"clearCoatBump"),t._mirroredCameraPosition?e.updateFloat2("vClearCoatTangentSpaceParams",l?1:-1,c?1:-1):e.updateFloat2("vClearCoatTangentSpaceParams",l?-1:1,c?-1:1)),this._tintTexture&&le.ClearCoatTintTextureEnabled&&(e.updateFloat2("vClearCoatTintInfos",this._tintTexture.coordinatesIndex,this._tintTexture.level),ni(this._tintTexture,e,"clearCoatTint")),e.updateFloat2("vClearCoatParams",this.intensity,this.roughness);let v=1-this._indexOfRefraction,x=1+this._indexOfRefraction,A=Math.pow(-v/x,2),E=1/this._indexOfRefraction;e.updateFloat4("vClearCoatRefractionParams",A,E,v,x),this._isTintEnabled&&(e.updateFloat4("vClearCoatTintParams",this.tintColor.r,this.tintColor.g,this.tintColor.b,Math.max(1e-5,this.tintThickness)),e.updateFloat("clearCoatColorAtDistance",Math.max(1e-5,this.tintColorAtDistance)))}t.texturesEnabled&&(this._texture&&le.ClearCoatTextureEnabled&&e.setTexture("clearCoatSampler",this._texture),this._textureRoughness&&!s.CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE&&le.ClearCoatTextureEnabled&&e.setTexture("clearCoatRoughnessSampler",this._textureRoughness),this._bumpTexture&&i.getCaps().standardDerivatives&&le.ClearCoatBumpTextureEnabled&&!o&&e.setTexture("clearCoatBumpSampler",this._bumpTexture),this._isTintEnabled&&this._tintTexture&&le.ClearCoatTintTextureEnabled&&e.setTexture("clearCoatTintSampler",this._tintTexture))}hasTexture(e){return this._texture===e||this._textureRoughness===e||this._bumpTexture===e||this._tintTexture===e}getActiveTextures(e){this._texture&&e.push(this._texture),this._textureRoughness&&e.push(this._textureRoughness),this._bumpTexture&&e.push(this._bumpTexture),this._tintTexture&&e.push(this._tintTexture)}getAnimatables(e){this._texture&&this._texture.animations&&this._texture.animations.length>0&&e.push(this._texture),this._textureRoughness&&this._textureRoughness.animations&&this._textureRoughness.animations.length>0&&e.push(this._textureRoughness),this._bumpTexture&&this._bumpTexture.animations&&this._bumpTexture.animations.length>0&&e.push(this._bumpTexture),this._tintTexture&&this._tintTexture.animations&&this._tintTexture.animations.length>0&&e.push(this._tintTexture)}dispose(e){var t,i,r,s;e&&((t=this._texture)==null||t.dispose(),(i=this._textureRoughness)==null||i.dispose(),(r=this._bumpTexture)==null||r.dispose(),(s=this._tintTexture)==null||s.dispose())}getClassName(){return"PBRClearCoatConfiguration"}addFallbacks(e,t,i){return e.CLEARCOAT_BUMP&&t.addFallback(i++,"CLEARCOAT_BUMP"),e.CLEARCOAT_TINT&&t.addFallback(i++,"CLEARCOAT_TINT"),e.CLEARCOAT&&t.addFallback(i++,"CLEARCOAT"),i}getSamplers(e){e.push("clearCoatSampler","clearCoatRoughnessSampler","clearCoatBumpSampler","clearCoatTintSampler")}getUniforms(){return{ubo:[{name:"vClearCoatParams",size:2,type:"vec2"},{name:"vClearCoatRefractionParams",size:4,type:"vec4"},{name:"vClearCoatInfos",size:4,type:"vec4"},{name:"clearCoatMatrix",size:16,type:"mat4"},{name:"clearCoatRoughnessMatrix",size:16,type:"mat4"},{name:"vClearCoatBumpInfos",size:2,type:"vec2"},{name:"vClearCoatTangentSpaceParams",size:2,type:"vec2"},{name:"clearCoatBumpMatrix",size:16,type:"mat4"},{name:"vClearCoatTintParams",size:4,type:"vec4"},{name:"clearCoatColorAtDistance",size:1,type:"float"},{name:"vClearCoatTintInfos",size:2,type:"vec2"},{name:"clearCoatTintMatrix",size:16,type:"mat4"}]}}};tn._DefaultIndexOfRefraction=1.5;P([F(),oe("_markAllSubMeshesAsTexturesDirty")],tn.prototype,"isEnabled",void 0);P([F()],tn.prototype,"intensity",void 0);P([F()],tn.prototype,"roughness",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],tn.prototype,"indexOfRefraction",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],tn.prototype,"texture",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],tn.prototype,"useRoughnessFromMainTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],tn.prototype,"textureRoughness",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],tn.prototype,"remapF0OnInterfaceChange",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],tn.prototype,"bumpTexture",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],tn.prototype,"isTintEnabled",void 0);P([dr()],tn.prototype,"tintColor",void 0);P([F()],tn.prototype,"tintColorAtDistance",void 0);P([F()],tn.prototype,"tintThickness",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],tn.prototype,"tintTexture",void 0)});var aL,xs,E8=C(()=>{kt();Ut();xa();If();ba();yn();aL=class extends vr{constructor(){super(...arguments),this.IRIDESCENCE=!1,this.IRIDESCENCE_TEXTURE=!1,this.IRIDESCENCE_TEXTUREDIRECTUV=0,this.IRIDESCENCE_THICKNESS_TEXTURE=!1,this.IRIDESCENCE_THICKNESS_TEXTUREDIRECTUV=0}},xs=class n extends Fr{_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"PBRIridescence",110,new aL,t),this._isEnabled=!1,this.isEnabled=!1,this.intensity=1,this.minimumThickness=n._DefaultMinimumThickness,this.maximumThickness=n._DefaultMaximumThickness,this.indexOfRefraction=n._DefaultIndexOfRefraction,this._texture=null,this.texture=null,this._thicknessTexture=null,this.thicknessTexture=null,this._internalMarkAllSubMeshesAsTexturesDirty=e._dirtyCallbacks[1]}isReadyForSubMesh(e,t){return this._isEnabled?!(e._areTexturesDirty&&t.texturesEnabled&&(this._texture&&le.IridescenceTextureEnabled&&!this._texture.isReadyOrNotBlocking()||this._thicknessTexture&&le.IridescenceTextureEnabled&&!this._thicknessTexture.isReadyOrNotBlocking())):!0}prepareDefinesBeforeAttributes(e,t){this._isEnabled?(e.IRIDESCENCE=!0,e._areTexturesDirty&&t.texturesEnabled&&(this._texture&&le.IridescenceTextureEnabled?ri(this._texture,e,"IRIDESCENCE_TEXTURE"):e.IRIDESCENCE_TEXTURE=!1,this._thicknessTexture&&le.IridescenceTextureEnabled?ri(this._thicknessTexture,e,"IRIDESCENCE_THICKNESS_TEXTURE"):e.IRIDESCENCE_THICKNESS_TEXTURE=!1)):(e.IRIDESCENCE=!1,e.IRIDESCENCE_TEXTURE=!1,e.IRIDESCENCE_THICKNESS_TEXTURE=!1,e.IRIDESCENCE_TEXTUREDIRECTUV=0,e.IRIDESCENCE_THICKNESS_TEXTUREDIRECTUV=0)}bindForSubMesh(e,t){var r,s,a,o,l,c,f,h;if(!this._isEnabled)return;let i=this._material.isFrozen;(!e.useUbo||!i||!e.isSync)&&((this._texture||this._thicknessTexture)&&le.IridescenceTextureEnabled&&(e.updateFloat4("vIridescenceInfos",(s=(r=this._texture)==null?void 0:r.coordinatesIndex)!=null?s:0,(o=(a=this._texture)==null?void 0:a.level)!=null?o:0,(c=(l=this._thicknessTexture)==null?void 0:l.coordinatesIndex)!=null?c:0,(h=(f=this._thicknessTexture)==null?void 0:f.level)!=null?h:0),this._texture&&ni(this._texture,e,"iridescence"),this._thicknessTexture&&ni(this._thicknessTexture,e,"iridescenceThickness")),e.updateFloat4("vIridescenceParams",this.intensity,this.indexOfRefraction,this.minimumThickness,this.maximumThickness)),t.texturesEnabled&&(this._texture&&le.IridescenceTextureEnabled&&e.setTexture("iridescenceSampler",this._texture),this._thicknessTexture&&le.IridescenceTextureEnabled&&e.setTexture("iridescenceThicknessSampler",this._thicknessTexture))}hasTexture(e){return this._texture===e||this._thicknessTexture===e}getActiveTextures(e){this._texture&&e.push(this._texture),this._thicknessTexture&&e.push(this._thicknessTexture)}getAnimatables(e){this._texture&&this._texture.animations&&this._texture.animations.length>0&&e.push(this._texture),this._thicknessTexture&&this._thicknessTexture.animations&&this._thicknessTexture.animations.length>0&&e.push(this._thicknessTexture)}dispose(e){var t,i;e&&((t=this._texture)==null||t.dispose(),(i=this._thicknessTexture)==null||i.dispose())}getClassName(){return"PBRIridescenceConfiguration"}addFallbacks(e,t,i){return e.IRIDESCENCE&&t.addFallback(i++,"IRIDESCENCE"),i}getSamplers(e){e.push("iridescenceSampler","iridescenceThicknessSampler")}getUniforms(){return{ubo:[{name:"vIridescenceParams",size:4,type:"vec4"},{name:"vIridescenceInfos",size:4,type:"vec4"},{name:"iridescenceMatrix",size:16,type:"mat4"},{name:"iridescenceThicknessMatrix",size:16,type:"mat4"}]}}};xs._DefaultMinimumThickness=100;xs._DefaultMaximumThickness=400;xs._DefaultIndexOfRefraction=1.3;P([F(),oe("_markAllSubMeshesAsTexturesDirty")],xs.prototype,"isEnabled",void 0);P([F()],xs.prototype,"intensity",void 0);P([F()],xs.prototype,"minimumThickness",void 0);P([F()],xs.prototype,"maximumThickness",void 0);P([F()],xs.prototype,"indexOfRefraction",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],xs.prototype,"texture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],xs.prototype,"thicknessTexture",void 0)});var oL,gc,S8=C(()=>{kt();Ut();Ui();Ve();xa();If();ba();yn();oL=class extends vr{constructor(){super(...arguments),this.ANISOTROPIC=!1,this.ANISOTROPIC_TEXTURE=!1,this.ANISOTROPIC_TEXTUREDIRECTUV=0,this.ANISOTROPIC_LEGACY=!1,this.MAINUV1=!1}},gc=class extends Fr{set angle(e){this.direction.x=Math.cos(e),this.direction.y=Math.sin(e)}get angle(){return Math.atan2(this.direction.y,this.direction.x)}_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}_markAllSubMeshesAsMiscDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsMiscDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"PBRAnisotropic",110,new oL,t),this._isEnabled=!1,this.isEnabled=!1,this.intensity=1,this.direction=new Ne(1,0),this._texture=null,this.texture=null,this._legacy=!1,this.legacy=!1,this._internalMarkAllSubMeshesAsTexturesDirty=e._dirtyCallbacks[1],this._internalMarkAllSubMeshesAsMiscDirty=e._dirtyCallbacks[16]}isReadyForSubMesh(e,t){return this._isEnabled?!(e._areTexturesDirty&&t.texturesEnabled&&this._texture&&le.AnisotropicTextureEnabled&&!this._texture.isReadyOrNotBlocking()):!0}prepareDefinesBeforeAttributes(e,t,i){this._isEnabled?(e.ANISOTROPIC=this._isEnabled,this._isEnabled&&!i.isVerticesDataPresent(L.TangentKind)&&(e._needUVs=!0,e.MAINUV1=!0),e._areTexturesDirty&&t.texturesEnabled&&(this._texture&&le.AnisotropicTextureEnabled?ri(this._texture,e,"ANISOTROPIC_TEXTURE"):e.ANISOTROPIC_TEXTURE=!1),e._areMiscDirty&&(e.ANISOTROPIC_LEGACY=this._legacy)):(e.ANISOTROPIC=!1,e.ANISOTROPIC_TEXTURE=!1,e.ANISOTROPIC_TEXTUREDIRECTUV=0,e.ANISOTROPIC_LEGACY=!1)}bindForSubMesh(e,t){if(!this._isEnabled)return;let i=this._material.isFrozen;(!e.useUbo||!i||!e.isSync)&&(this._texture&&le.AnisotropicTextureEnabled&&(e.updateFloat2("vAnisotropyInfos",this._texture.coordinatesIndex,this._texture.level),ni(this._texture,e,"anisotropy")),e.updateFloat3("vAnisotropy",this.direction.x,this.direction.y,this.intensity)),t.texturesEnabled&&this._texture&&le.AnisotropicTextureEnabled&&e.setTexture("anisotropySampler",this._texture)}hasTexture(e){return this._texture===e}getActiveTextures(e){this._texture&&e.push(this._texture)}getAnimatables(e){this._texture&&this._texture.animations&&this._texture.animations.length>0&&e.push(this._texture)}dispose(e){e&&this._texture&&this._texture.dispose()}getClassName(){return"PBRAnisotropicConfiguration"}addFallbacks(e,t,i){return e.ANISOTROPIC&&t.addFallback(i++,"ANISOTROPIC"),i}getSamplers(e){e.push("anisotropySampler")}getUniforms(){return{ubo:[{name:"vAnisotropy",size:3,type:"vec3"},{name:"vAnisotropyInfos",size:2,type:"vec2"},{name:"anisotropyMatrix",size:16,type:"mat4"}]}}parse(e,t,i){super.parse(e,t,i),e.legacy===void 0&&(this.legacy=!0)}};P([F(),oe("_markAllSubMeshesAsTexturesDirty")],gc.prototype,"isEnabled",void 0);P([F()],gc.prototype,"intensity",void 0);P([wu()],gc.prototype,"direction",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],gc.prototype,"texture",void 0);P([F(),oe("_markAllSubMeshesAsMiscDirty")],gc.prototype,"legacy",void 0)});var lL,Ys,T8=C(()=>{kt();Ut();Ht();xa();If();ba();yn();lL=class extends vr{constructor(){super(...arguments),this.SHEEN=!1,this.SHEEN_TEXTURE=!1,this.SHEEN_GAMMATEXTURE=!1,this.SHEEN_TEXTURE_ROUGHNESS=!1,this.SHEEN_TEXTUREDIRECTUV=0,this.SHEEN_TEXTURE_ROUGHNESSDIRECTUV=0,this.SHEEN_LINKWITHALBEDO=!1,this.SHEEN_ROUGHNESS=!1,this.SHEEN_ALBEDOSCALING=!1,this.SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE=!1}},Ys=class extends Fr{_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"Sheen",120,new lL,t),this._isEnabled=!1,this.isEnabled=!1,this._linkSheenWithAlbedo=!1,this.linkSheenWithAlbedo=!1,this.intensity=1,this.color=Te.White(),this._texture=null,this.texture=null,this._useRoughnessFromMainTexture=!0,this.useRoughnessFromMainTexture=!0,this._roughness=null,this.roughness=null,this._textureRoughness=null,this.textureRoughness=null,this._albedoScaling=!1,this.albedoScaling=!1,this._internalMarkAllSubMeshesAsTexturesDirty=e._dirtyCallbacks[1]}isReadyForSubMesh(e,t){return this._isEnabled?!(e._areTexturesDirty&&t.texturesEnabled&&(this._texture&&le.SheenTextureEnabled&&!this._texture.isReadyOrNotBlocking()||this._textureRoughness&&le.SheenTextureEnabled&&!this._textureRoughness.isReadyOrNotBlocking())):!0}prepareDefinesBeforeAttributes(e,t){this._isEnabled?(e.SHEEN=!0,e.SHEEN_LINKWITHALBEDO=this._linkSheenWithAlbedo,e.SHEEN_ROUGHNESS=this._roughness!==null,e.SHEEN_ALBEDOSCALING=this._albedoScaling,e.SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE=this._useRoughnessFromMainTexture,e._areTexturesDirty&&t.texturesEnabled&&(this._texture&&le.SheenTextureEnabled?(ri(this._texture,e,"SHEEN_TEXTURE"),e.SHEEN_GAMMATEXTURE=this._texture.gammaSpace):e.SHEEN_TEXTURE=!1,this._textureRoughness&&le.SheenTextureEnabled?ri(this._textureRoughness,e,"SHEEN_TEXTURE_ROUGHNESS"):e.SHEEN_TEXTURE_ROUGHNESS=!1)):(e.SHEEN=!1,e.SHEEN_TEXTURE=!1,e.SHEEN_TEXTURE_ROUGHNESS=!1,e.SHEEN_LINKWITHALBEDO=!1,e.SHEEN_ROUGHNESS=!1,e.SHEEN_ALBEDOSCALING=!1,e.SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE=!1,e.SHEEN_GAMMATEXTURE=!1,e.SHEEN_TEXTUREDIRECTUV=0,e.SHEEN_TEXTURE_ROUGHNESSDIRECTUV=0)}bindForSubMesh(e,t,i,r){var o,l,c,f,h,d,u,m;if(!this._isEnabled)return;let s=r.materialDefines,a=this._material.isFrozen;(!e.useUbo||!a||!e.isSync)&&((this._texture||this._textureRoughness)&&le.SheenTextureEnabled&&(e.updateFloat4("vSheenInfos",(l=(o=this._texture)==null?void 0:o.coordinatesIndex)!=null?l:0,(f=(c=this._texture)==null?void 0:c.level)!=null?f:0,(d=(h=this._textureRoughness)==null?void 0:h.coordinatesIndex)!=null?d:0,(m=(u=this._textureRoughness)==null?void 0:u.level)!=null?m:0),this._texture&&ni(this._texture,e,"sheen"),this._textureRoughness&&!s.SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE&&ni(this._textureRoughness,e,"sheenRoughness")),e.updateFloat4("vSheenColor",this.color.r,this.color.g,this.color.b,this.intensity),this._roughness!==null&&e.updateFloat("vSheenRoughness",this._roughness)),t.texturesEnabled&&(this._texture&&le.SheenTextureEnabled&&e.setTexture("sheenSampler",this._texture),this._textureRoughness&&!s.SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE&&le.SheenTextureEnabled&&e.setTexture("sheenRoughnessSampler",this._textureRoughness))}hasTexture(e){return this._texture===e||this._textureRoughness===e}getActiveTextures(e){this._texture&&e.push(this._texture),this._textureRoughness&&e.push(this._textureRoughness)}getAnimatables(e){this._texture&&this._texture.animations&&this._texture.animations.length>0&&e.push(this._texture),this._textureRoughness&&this._textureRoughness.animations&&this._textureRoughness.animations.length>0&&e.push(this._textureRoughness)}dispose(e){var t,i;e&&((t=this._texture)==null||t.dispose(),(i=this._textureRoughness)==null||i.dispose())}getClassName(){return"PBRSheenConfiguration"}addFallbacks(e,t,i){return e.SHEEN&&t.addFallback(i++,"SHEEN"),i}getSamplers(e){e.push("sheenSampler","sheenRoughnessSampler")}getUniforms(){return{ubo:[{name:"vSheenColor",size:4,type:"vec4"},{name:"vSheenRoughness",size:1,type:"float"},{name:"vSheenInfos",size:4,type:"vec4"},{name:"sheenMatrix",size:16,type:"mat4"},{name:"sheenRoughnessMatrix",size:16,type:"mat4"}]}}};P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Ys.prototype,"isEnabled",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Ys.prototype,"linkSheenWithAlbedo",void 0);P([F()],Ys.prototype,"intensity",void 0);P([dr()],Ys.prototype,"color",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],Ys.prototype,"texture",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Ys.prototype,"useRoughnessFromMainTexture",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Ys.prototype,"roughness",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],Ys.prototype,"textureRoughness",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Ys.prototype,"albedoScaling",void 0)});var cL,Ai,A8=C(()=>{kt();Ut();Ht();xa();Ve();If();ba();yn();cL=class extends vr{constructor(){super(...arguments),this.SUBSURFACE=!1,this.SS_REFRACTION=!1,this.SS_REFRACTION_USE_INTENSITY_FROM_THICKNESS=!1,this.SS_TRANSLUCENCY=!1,this.SS_TRANSLUCENCY_USE_INTENSITY_FROM_THICKNESS=!1,this.SS_SCATTERING=!1,this.SS_DISPERSION=!1,this.SS_THICKNESSANDMASK_TEXTURE=!1,this.SS_THICKNESSANDMASK_TEXTUREDIRECTUV=0,this.SS_HAS_THICKNESS=!1,this.SS_REFRACTIONINTENSITY_TEXTURE=!1,this.SS_REFRACTIONINTENSITY_TEXTUREDIRECTUV=0,this.SS_TRANSLUCENCYINTENSITY_TEXTURE=!1,this.SS_TRANSLUCENCYINTENSITY_TEXTUREDIRECTUV=0,this.SS_TRANSLUCENCYCOLOR_TEXTURE=!1,this.SS_TRANSLUCENCYCOLOR_TEXTUREDIRECTUV=0,this.SS_TRANSLUCENCYCOLOR_TEXTURE_GAMMA=!1,this.SS_REFRACTIONMAP_3D=!1,this.SS_REFRACTIONMAP_OPPOSITEZ=!1,this.SS_LODINREFRACTIONALPHA=!1,this.SS_GAMMAREFRACTION=!1,this.SS_RGBDREFRACTION=!1,this.SS_LINEARSPECULARREFRACTION=!1,this.SS_LINKREFRACTIONTOTRANSPARENCY=!1,this.SS_ALBEDOFORREFRACTIONTINT=!1,this.SS_ALBEDOFORTRANSLUCENCYTINT=!1,this.SS_USE_LOCAL_REFRACTIONMAP_CUBIC=!1,this.SS_USE_THICKNESS_AS_DEPTH=!1,this.SS_USE_GLTF_TEXTURES=!1,this.SS_APPLY_ALBEDO_AFTER_SUBSURFACE=!1,this.SS_TRANSLUCENCY_LEGACY=!1}},Ai=class n extends Fr{get scatteringDiffusionProfile(){return this._scene.subSurfaceConfiguration?this._scene.subSurfaceConfiguration.ssDiffusionProfileColors[this._scatteringDiffusionProfileIndex]:null}set scatteringDiffusionProfile(e){this._scene.enableSubSurfaceForPrePass()&&e&&(this._scatteringDiffusionProfileIndex=this._scene.subSurfaceConfiguration.addDiffusionProfile(e))}get volumeIndexOfRefraction(){return this._volumeIndexOfRefraction>=1?this._volumeIndexOfRefraction:this._indexOfRefraction}set volumeIndexOfRefraction(e){e>=1?this._volumeIndexOfRefraction=e:this._volumeIndexOfRefraction=-1}get legacyTransluceny(){return this.legacyTranslucency}set legacyTransluceny(e){this.legacyTranslucency=e}_markAllSubMeshesAsTexturesDirty(){this._enable(this._isRefractionEnabled||this._isTranslucencyEnabled||this._isScatteringEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}_markScenePrePassDirty(){this._enable(this._isRefractionEnabled||this._isTranslucencyEnabled||this._isScatteringEnabled),this._internalMarkAllSubMeshesAsTexturesDirty(),this._internalMarkScenePrePassDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"PBRSubSurface",130,new cL,t),this._isRefractionEnabled=!1,this.isRefractionEnabled=!1,this._isTranslucencyEnabled=!1,this.isTranslucencyEnabled=!1,this._isDispersionEnabled=!1,this.isDispersionEnabled=!1,this._isScatteringEnabled=!1,this.isScatteringEnabled=!1,this._scatteringDiffusionProfileIndex=0,this.refractionIntensity=1,this.translucencyIntensity=1,this._useAlbedoToTintRefraction=!1,this.useAlbedoToTintRefraction=!1,this._useAlbedoToTintTranslucency=!1,this.useAlbedoToTintTranslucency=!1,this._thicknessTexture=null,this.thicknessTexture=null,this._refractionTexture=null,this.refractionTexture=null,this._indexOfRefraction=1.5,this.indexOfRefraction=1.5,this._volumeIndexOfRefraction=-1,this._invertRefractionY=!1,this.invertRefractionY=!1,this._linkRefractionWithTransparency=!1,this.linkRefractionWithTransparency=!1,this.minimumThickness=0,this.maximumThickness=1,this.useThicknessAsDepth=!1,this.tintColor=Te.White(),this.tintColorAtDistance=1,this.dispersion=0,this.diffusionDistance=Te.White(),this._useMaskFromThicknessTexture=!1,this.useMaskFromThicknessTexture=!1,this._refractionIntensityTexture=null,this.refractionIntensityTexture=null,this._translucencyIntensityTexture=null,this.translucencyIntensityTexture=null,this.translucencyColor=null,this._translucencyColorTexture=null,this.translucencyColorTexture=null,this._useGltfStyleTextures=!0,this.useGltfStyleTextures=!0,this.applyAlbedoAfterSubSurface=n.DEFAULT_APPLY_ALBEDO_AFTERSUBSURFACE,this.legacyTranslucency=n.DEFAULT_LEGACY_TRANSLUCENCY,this._scene=e.getScene(),this.registerForExtraEvents=!0,this._internalMarkAllSubMeshesAsTexturesDirty=e._dirtyCallbacks[1],this._internalMarkScenePrePassDirty=e._dirtyCallbacks[32]}isReadyForSubMesh(e,t){if(!this._isRefractionEnabled&&!this._isTranslucencyEnabled&&!this._isScatteringEnabled)return!0;if(e._areTexturesDirty&&t.texturesEnabled){if(this._thicknessTexture&&le.ThicknessTextureEnabled&&!this._thicknessTexture.isReadyOrNotBlocking()||this._refractionIntensityTexture&&le.RefractionIntensityTextureEnabled&&!this._refractionIntensityTexture.isReadyOrNotBlocking()||this._translucencyColorTexture&&le.TranslucencyColorTextureEnabled&&!this._translucencyColorTexture.isReadyOrNotBlocking()||this._translucencyIntensityTexture&&le.TranslucencyIntensityTextureEnabled&&!this._translucencyIntensityTexture.isReadyOrNotBlocking())return!1;let i=this._getRefractionTexture(t);if(i&&le.RefractionTextureEnabled&&!i.isReadyOrNotBlocking())return!1}return!0}prepareDefinesBeforeAttributes(e,t){if(!this._isRefractionEnabled&&!this._isTranslucencyEnabled&&!this._isScatteringEnabled){e.SUBSURFACE=!1,e.SS_DISPERSION=!1,e.SS_TRANSLUCENCY=!1,e.SS_SCATTERING=!1,e.SS_REFRACTION=!1,e.SS_REFRACTION_USE_INTENSITY_FROM_THICKNESS=!1,e.SS_TRANSLUCENCY_USE_INTENSITY_FROM_THICKNESS=!1,e.SS_THICKNESSANDMASK_TEXTURE=!1,e.SS_THICKNESSANDMASK_TEXTUREDIRECTUV=0,e.SS_HAS_THICKNESS=!1,e.SS_REFRACTIONINTENSITY_TEXTURE=!1,e.SS_REFRACTIONINTENSITY_TEXTUREDIRECTUV=0,e.SS_TRANSLUCENCYINTENSITY_TEXTURE=!1,e.SS_TRANSLUCENCYINTENSITY_TEXTUREDIRECTUV=0,e.SS_REFRACTIONMAP_3D=!1,e.SS_REFRACTIONMAP_OPPOSITEZ=!1,e.SS_LODINREFRACTIONALPHA=!1,e.SS_GAMMAREFRACTION=!1,e.SS_RGBDREFRACTION=!1,e.SS_LINEARSPECULARREFRACTION=!1,e.SS_LINKREFRACTIONTOTRANSPARENCY=!1,e.SS_ALBEDOFORREFRACTIONTINT=!1,e.SS_ALBEDOFORTRANSLUCENCYTINT=!1,e.SS_USE_LOCAL_REFRACTIONMAP_CUBIC=!1,e.SS_USE_THICKNESS_AS_DEPTH=!1,e.SS_USE_GLTF_TEXTURES=!1,e.SS_TRANSLUCENCYCOLOR_TEXTURE=!1,e.SS_TRANSLUCENCYCOLOR_TEXTUREDIRECTUV=0,e.SS_TRANSLUCENCYCOLOR_TEXTURE_GAMMA=!1,e.SS_APPLY_ALBEDO_AFTER_SUBSURFACE=!1;return}if(e._areTexturesDirty){if(e.SUBSURFACE=!0,e.SS_DISPERSION=this._isDispersionEnabled,e.SS_TRANSLUCENCY=this._isTranslucencyEnabled,e.SS_TRANSLUCENCY_USE_INTENSITY_FROM_THICKNESS=!1,e.SS_TRANSLUCENCY_LEGACY=this.legacyTranslucency,e.SS_SCATTERING=this._isScatteringEnabled,e.SS_THICKNESSANDMASK_TEXTURE=!1,e.SS_REFRACTIONINTENSITY_TEXTURE=!1,e.SS_TRANSLUCENCYINTENSITY_TEXTURE=!1,e.SS_HAS_THICKNESS=!1,e.SS_USE_GLTF_TEXTURES=!1,e.SS_REFRACTION=!1,e.SS_REFRACTION_USE_INTENSITY_FROM_THICKNESS=!1,e.SS_REFRACTIONMAP_3D=!1,e.SS_GAMMAREFRACTION=!1,e.SS_RGBDREFRACTION=!1,e.SS_LINEARSPECULARREFRACTION=!1,e.SS_REFRACTIONMAP_OPPOSITEZ=!1,e.SS_LODINREFRACTIONALPHA=!1,e.SS_LINKREFRACTIONTOTRANSPARENCY=!1,e.SS_ALBEDOFORREFRACTIONTINT=!1,e.SS_ALBEDOFORTRANSLUCENCYTINT=!1,e.SS_USE_LOCAL_REFRACTIONMAP_CUBIC=!1,e.SS_USE_THICKNESS_AS_DEPTH=!1,e.SS_TRANSLUCENCYCOLOR_TEXTURE=!1,e.SS_APPLY_ALBEDO_AFTER_SUBSURFACE=this.applyAlbedoAfterSubSurface,e._areTexturesDirty&&t.texturesEnabled&&(this._thicknessTexture&&le.ThicknessTextureEnabled&&ri(this._thicknessTexture,e,"SS_THICKNESSANDMASK_TEXTURE"),this._refractionIntensityTexture&&le.RefractionIntensityTextureEnabled&&ri(this._refractionIntensityTexture,e,"SS_REFRACTIONINTENSITY_TEXTURE"),this._translucencyIntensityTexture&&le.TranslucencyIntensityTextureEnabled&&ri(this._translucencyIntensityTexture,e,"SS_TRANSLUCENCYINTENSITY_TEXTURE"),this._translucencyColorTexture&&le.TranslucencyColorTextureEnabled&&(ri(this._translucencyColorTexture,e,"SS_TRANSLUCENCYCOLOR_TEXTURE"),e.SS_TRANSLUCENCYCOLOR_TEXTURE_GAMMA=this._translucencyColorTexture.gammaSpace)),e.SS_HAS_THICKNESS=this.maximumThickness-this.minimumThickness!==0,e.SS_USE_GLTF_TEXTURES=this._useGltfStyleTextures,e.SS_REFRACTION_USE_INTENSITY_FROM_THICKNESS=this._useMaskFromThicknessTexture&&!this._refractionIntensityTexture,e.SS_TRANSLUCENCY_USE_INTENSITY_FROM_THICKNESS=this._useMaskFromThicknessTexture&&!this._translucencyIntensityTexture,this._isRefractionEnabled&&t.texturesEnabled){let i=this._getRefractionTexture(t);i&&le.RefractionTextureEnabled&&(e.SS_REFRACTION=!0,e.SS_REFRACTIONMAP_3D=i.isCube,e.SS_GAMMAREFRACTION=i.gammaSpace,e.SS_RGBDREFRACTION=i.isRGBD,e.SS_LINEARSPECULARREFRACTION=i.linearSpecularLOD,e.SS_REFRACTIONMAP_OPPOSITEZ=this._scene.useRightHandedSystem&&i.isCube?!i.invertZ:i.invertZ,e.SS_LODINREFRACTIONALPHA=i.lodLevelInAlpha,e.SS_LINKREFRACTIONTOTRANSPARENCY=this._linkRefractionWithTransparency,e.SS_ALBEDOFORREFRACTIONTINT=this._useAlbedoToTintRefraction,e.SS_USE_LOCAL_REFRACTIONMAP_CUBIC=i.isCube&&i.boundingBoxSize,e.SS_USE_THICKNESS_AS_DEPTH=this.useThicknessAsDepth)}this._isTranslucencyEnabled&&(e.SS_ALBEDOFORTRANSLUCENCYTINT=this._useAlbedoToTintTranslucency)}}hardBindForSubMesh(e,t,i,r){if(!(!this._isRefractionEnabled&&!this._isTranslucencyEnabled&&!this._isScatteringEnabled))if(this.maximumThickness===0&&this.minimumThickness===0)e.updateFloat2("vThicknessParam",0,0);else{r.getRenderingMesh().getWorldMatrix().decompose(Z.Vector3[0]);let s=Math.max(Math.abs(Z.Vector3[0].x),Math.abs(Z.Vector3[0].y),Math.abs(Z.Vector3[0].z));e.updateFloat2("vThicknessParam",this.minimumThickness*s,(this.maximumThickness-this.minimumThickness)*s)}}bindForSubMesh(e,t,i,r){var f;if(!this._isRefractionEnabled&&!this._isTranslucencyEnabled&&!this._isScatteringEnabled)return;let s=r.materialDefines,a=this._material.isFrozen,o=this._material.realTimeFiltering,l=s.LODBASEDMICROSFURACE,c=this._getRefractionTexture(t);if(!e.useUbo||!a||!e.isSync){if(this._thicknessTexture&&le.ThicknessTextureEnabled&&(e.updateFloat2("vThicknessInfos",this._thicknessTexture.coordinatesIndex,this._thicknessTexture.level),ni(this._thicknessTexture,e,"thickness")),this._refractionIntensityTexture&&le.RefractionIntensityTextureEnabled&&s.SS_REFRACTIONINTENSITY_TEXTURE&&(e.updateFloat2("vRefractionIntensityInfos",this._refractionIntensityTexture.coordinatesIndex,this._refractionIntensityTexture.level),ni(this._refractionIntensityTexture,e,"refractionIntensity")),this._translucencyColorTexture&&le.TranslucencyColorTextureEnabled&&s.SS_TRANSLUCENCYCOLOR_TEXTURE&&(e.updateFloat2("vTranslucencyColorInfos",this._translucencyColorTexture.coordinatesIndex,this._translucencyColorTexture.level),ni(this._translucencyColorTexture,e,"translucencyColor")),this._translucencyIntensityTexture&&le.TranslucencyIntensityTextureEnabled&&s.SS_TRANSLUCENCYINTENSITY_TEXTURE&&(e.updateFloat2("vTranslucencyIntensityInfos",this._translucencyIntensityTexture.coordinatesIndex,this._translucencyIntensityTexture.level),ni(this._translucencyIntensityTexture,e,"translucencyIntensity")),c&&le.RefractionTextureEnabled){e.updateMatrix("refractionMatrix",c.getRefractionTextureMatrix());let h=1;c.isCube||c.depth&&(h=c.depth);let d=c.getSize().width,u=this.volumeIndexOfRefraction;if(e.updateFloat4("vRefractionInfos",c.level,1/u,h,this._invertRefractionY?-1:1),e.updateFloat4("vRefractionMicrosurfaceInfos",d,c.lodGenerationScale,c.lodGenerationOffset,1/this.indexOfRefraction),o&&e.updateFloat2("vRefractionFilteringInfo",d,Math.log2(d)),c.boundingBoxSize){let m=c;e.updateVector3("vRefractionPosition",m.boundingBoxPosition),e.updateVector3("vRefractionSize",m.boundingBoxSize)}}this._isScatteringEnabled&&e.updateFloat("scatteringDiffusionProfile",this._scatteringDiffusionProfileIndex),e.updateColor3("vDiffusionDistance",this.diffusionDistance),e.updateFloat4("vTintColor",this.tintColor.r,this.tintColor.g,this.tintColor.b,Math.max(1e-5,this.tintColorAtDistance)),e.updateColor4("vTranslucencyColor",(f=this.translucencyColor)!=null?f:this.tintColor,0),e.updateFloat3("vSubSurfaceIntensity",this.refractionIntensity,this.translucencyIntensity,0),e.updateFloat("dispersion",this.dispersion)}t.texturesEnabled&&(this._thicknessTexture&&le.ThicknessTextureEnabled&&e.setTexture("thicknessSampler",this._thicknessTexture),this._refractionIntensityTexture&&le.RefractionIntensityTextureEnabled&&s.SS_REFRACTIONINTENSITY_TEXTURE&&e.setTexture("refractionIntensitySampler",this._refractionIntensityTexture),this._translucencyIntensityTexture&&le.TranslucencyIntensityTextureEnabled&&s.SS_TRANSLUCENCYINTENSITY_TEXTURE&&e.setTexture("translucencyIntensitySampler",this._translucencyIntensityTexture),this._translucencyColorTexture&&le.TranslucencyColorTextureEnabled&&s.SS_TRANSLUCENCYCOLOR_TEXTURE&&e.setTexture("translucencyColorSampler",this._translucencyColorTexture),c&&le.RefractionTextureEnabled&&(l?e.setTexture("refractionSampler",c):(e.setTexture("refractionSampler",c._lodTextureMid||c),e.setTexture("refractionSamplerLow",c._lodTextureLow||c),e.setTexture("refractionSamplerHigh",c._lodTextureHigh||c))))}_getRefractionTexture(e){return this._refractionTexture?this._refractionTexture:this._isRefractionEnabled?e.environmentTexture:null}get disableAlphaBlending(){return this._isRefractionEnabled&&this._linkRefractionWithTransparency}fillRenderTargetTextures(e){le.RefractionTextureEnabled&&this._refractionTexture&&this._refractionTexture.isRenderTarget&&e.push(this._refractionTexture)}hasTexture(e){return this._thicknessTexture===e||this._refractionTexture===e||this._refractionIntensityTexture===e||this._translucencyIntensityTexture===e||this._translucencyColorTexture===e}hasRenderTargetTextures(){return!!(le.RefractionTextureEnabled&&this._refractionTexture&&this._refractionTexture.isRenderTarget)}getActiveTextures(e){this._thicknessTexture&&e.push(this._thicknessTexture),this._refractionTexture&&e.push(this._refractionTexture),this._refractionIntensityTexture&&e.push(this._refractionIntensityTexture),this._translucencyColorTexture&&e.push(this._translucencyColorTexture),this._translucencyIntensityTexture&&e.push(this._translucencyIntensityTexture)}getAnimatables(e){this._thicknessTexture&&this._thicknessTexture.animations&&this._thicknessTexture.animations.length>0&&e.push(this._thicknessTexture),this._refractionTexture&&this._refractionTexture.animations&&this._refractionTexture.animations.length>0&&e.push(this._refractionTexture),this._refractionIntensityTexture&&this._refractionIntensityTexture.animations&&this._refractionIntensityTexture.animations.length>0&&e.push(this._refractionIntensityTexture),this._translucencyColorTexture&&this._translucencyColorTexture.animations&&this._translucencyColorTexture.animations.length>0&&e.push(this._translucencyColorTexture),this._translucencyIntensityTexture&&this._translucencyIntensityTexture.animations&&this._translucencyIntensityTexture.animations.length>0&&e.push(this._translucencyIntensityTexture)}dispose(e){e&&(this._thicknessTexture&&this._thicknessTexture.dispose(),this._refractionTexture&&this._refractionTexture.dispose(),this._refractionIntensityTexture&&this._refractionIntensityTexture.dispose(),this._translucencyColorTexture&&this._translucencyColorTexture.dispose(),this._translucencyIntensityTexture&&this._translucencyIntensityTexture.dispose())}getClassName(){return"PBRSubSurfaceConfiguration"}addFallbacks(e,t,i){return e.SS_SCATTERING&&t.addFallback(i++,"SS_SCATTERING"),e.SS_TRANSLUCENCY&&t.addFallback(i++,"SS_TRANSLUCENCY"),i}getSamplers(e){e.push("thicknessSampler","refractionIntensitySampler","translucencyIntensitySampler","refractionSampler","refractionSamplerLow","refractionSamplerHigh","translucencyColorSampler")}getUniforms(){return{ubo:[{name:"vRefractionMicrosurfaceInfos",size:4,type:"vec4"},{name:"vRefractionFilteringInfo",size:2,type:"vec2"},{name:"vTranslucencyIntensityInfos",size:2,type:"vec2"},{name:"vRefractionInfos",size:4,type:"vec4"},{name:"refractionMatrix",size:16,type:"mat4"},{name:"vThicknessInfos",size:2,type:"vec2"},{name:"vRefractionIntensityInfos",size:2,type:"vec2"},{name:"thicknessMatrix",size:16,type:"mat4"},{name:"refractionIntensityMatrix",size:16,type:"mat4"},{name:"translucencyIntensityMatrix",size:16,type:"mat4"},{name:"vThicknessParam",size:2,type:"vec2"},{name:"vDiffusionDistance",size:3,type:"vec3"},{name:"vTintColor",size:4,type:"vec4"},{name:"vSubSurfaceIntensity",size:3,type:"vec3"},{name:"vRefractionPosition",size:3,type:"vec3"},{name:"vRefractionSize",size:3,type:"vec3"},{name:"scatteringDiffusionProfile",size:1,type:"float"},{name:"dispersion",size:1,type:"float"},{name:"vTranslucencyColor",size:4,type:"vec4"},{name:"vTranslucencyColorInfos",size:2,type:"vec2"},{name:"translucencyColorMatrix",size:16,type:"mat4"}]}}};Ai.DEFAULT_APPLY_ALBEDO_AFTERSUBSURFACE=!1;Ai.DEFAULT_LEGACY_TRANSLUCENCY=!1;P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"isRefractionEnabled",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"isTranslucencyEnabled",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"isDispersionEnabled",void 0);P([F(),oe("_markScenePrePassDirty")],Ai.prototype,"isScatteringEnabled",void 0);P([F()],Ai.prototype,"_scatteringDiffusionProfileIndex",void 0);P([F()],Ai.prototype,"refractionIntensity",void 0);P([F()],Ai.prototype,"translucencyIntensity",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"useAlbedoToTintRefraction",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"useAlbedoToTintTranslucency",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"thicknessTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"refractionTexture",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"indexOfRefraction",void 0);P([F()],Ai.prototype,"_volumeIndexOfRefraction",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"volumeIndexOfRefraction",null);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"invertRefractionY",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"linkRefractionWithTransparency",void 0);P([F()],Ai.prototype,"minimumThickness",void 0);P([F()],Ai.prototype,"maximumThickness",void 0);P([F()],Ai.prototype,"useThicknessAsDepth",void 0);P([dr()],Ai.prototype,"tintColor",void 0);P([F()],Ai.prototype,"tintColorAtDistance",void 0);P([F()],Ai.prototype,"dispersion",void 0);P([dr()],Ai.prototype,"diffusionDistance",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"useMaskFromThicknessTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"refractionIntensityTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"translucencyIntensityTexture",void 0);P([dr()],Ai.prototype,"translucencyColor",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"translucencyColorTexture",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"useGltfStyleTextures",void 0);P([F()],Ai.prototype,"applyAlbedoAfterSubSurface",void 0);P([F()],Ai.prototype,"legacyTranslucency",void 0)});var x8,Qce,fL=C(()=>{k();Xh();ag();x8="pbrUboDeclaration",Qce=`uniform vAlbedoInfos: vec2f;uniform vBaseWeightInfos: vec2f;uniform vBaseDiffuseRoughnessInfos: vec2f;uniform vAmbientInfos: vec4f;uniform vOpacityInfos: vec2f;uniform vEmissiveInfos: vec2f;uniform vLightmapInfos: vec2f;uniform vReflectivityInfos: vec3f;uniform vMicroSurfaceSamplerInfos: vec2f;uniform vBumpInfos: vec3f;uniform albedoMatrix: mat4x4f;uniform baseWeightMatrix: mat4x4f;uniform baseDiffuseRoughnessMatrix: mat4x4f;uniform ambientMatrix: mat4x4f;uniform opacityMatrix: mat4x4f;uniform emissiveMatrix: mat4x4f;uniform lightmapMatrix: mat4x4f;uniform reflectivityMatrix: mat4x4f;uniform microSurfaceSamplerMatrix: mat4x4f;uniform bumpMatrix: mat4x4f;uniform vTangentSpaceParams: vec2f;uniform vAlbedoColor: vec4f;uniform baseWeight: f32;uniform baseDiffuseRoughness: f32;uniform vLightingIntensity: vec4f;uniform pointSize: f32;uniform vReflectivityColor: vec4f;uniform vEmissiveColor: vec3f;uniform vAmbientColor: vec3f;uniform vDebugMode: vec2f;uniform vMetallicReflectanceFactors: vec4f;uniform vMetallicReflectanceInfos: vec2f;uniform metallicReflectanceMatrix: mat4x4f;uniform vReflectanceInfos: vec2f;uniform reflectanceMatrix: mat4x4f;uniform cameraInfo: vec4f;uniform vReflectionInfos: vec2f;uniform reflectionMatrix: mat4x4f;uniform vReflectionMicrosurfaceInfos: vec3f;uniform vReflectionPosition: vec3f;uniform vReflectionSize: vec3f;uniform vReflectionFilteringInfo: vec2f;uniform vReflectionDominantDirection: vec3f;uniform vReflectionColor: vec3f;uniform vSphericalL00: vec3f;uniform vSphericalL1_1: vec3f;uniform vSphericalL10: vec3f;uniform vSphericalL11: vec3f;uniform vSphericalL2_2: vec3f;uniform vSphericalL2_1: vec3f;uniform vSphericalL20: vec3f;uniform vSphericalL21: vec3f;uniform vSphericalL22: vec3f;uniform vSphericalX: vec3f;uniform vSphericalY: vec3f;uniform vSphericalZ: vec3f;uniform vSphericalXX_ZZ: vec3f;uniform vSphericalYY_ZZ: vec3f;uniform vSphericalZZ: vec3f;uniform vSphericalXY: vec3f;uniform vSphericalYZ: vec3f;uniform vSphericalZX: vec3f; +`;T.ShadersStore[cL]||(T.ShadersStore[cL]=T8);vfe={name:cL,shader:T8}});var R8={};$e(R8,{OpenPBRMaterial:()=>Oe,OpenPBRMaterialDefines:()=>Cg});var Ym,$x,si,Ti,fL,hL,Cg,dL,Oe,b8=C(()=>{kt();Ut();Yx();zt();D_();Gr();Vi();Pn();Er();ya();xA();Rf();il();$_();yn();Ui();RA();AA();Ma();Pt();bA();IA();IX();Ge();MA();Q_();to();Ci();f5();Ym={effect:null,subMesh:null},$x=class n{populateVectorFromLinkedProperties(e){let t=e.dimension[0];for(let i in this.linkedProperties){let r=this.linkedProperties[i],s=r.numComponents;if(tt-s){s==1?J.Error(`Float property ${r.name} has an offset that is too large.`):J.Error(`Vector${s} property ${r.name} won't fit in Vector${t} or has an offset that is too large.`);return}typeof r.value=="number"?n._tmpArray[r.targetUniformComponentOffset]=r.value:r.value.toArray(n._tmpArray,r.targetUniformComponentOffset)}e.fromArray(n._tmpArray)}constructor(e,t){this.linkedProperties={},this.firstLinkedKey="",this.name=e,this.numComponents=t}};$x._tmpArray=[0,0,0,0];si=class{constructor(e,t,i,r,s=0,a){this.targetUniformComponentNum=4,this.targetUniformComponentOffset=0,this.name=e,this.targetUniformName=i,this.defaultValue=t,this.value=t,this.targetUniformComponentNum=r,this.targetUniformComponentOffset=s,this.requiredDefine=a}get numComponents(){return typeof this.defaultValue=="number"?1:this.defaultValue.dimension[0]}},Ti=class{get samplerName(){return this.samplerPrefix+"Sampler"}get samplerInfoName(){return"v"+this.samplerPrefix.charAt(0).toUpperCase()+this.samplerPrefix.slice(1)+"Infos"}get samplerMatrixName(){return this.samplerPrefix+"Matrix"}constructor(e,t,i){this.value=null,this.samplerPrefix="",this.textureDefine="",this.name=e,this.samplerPrefix=t,this.textureDefine=i}},fL=class extends Lm(Dm(Sr)){},hL=class extends bX(fL){},Cg=class extends ym(hL){constructor(e){super(e),this.NUM_SAMPLES="0",this.REALTIME_FILTERING=!1,this.IBL_CDF_FILTERING=!1,this.LIGHTCOUNT=0,this.VERTEXCOLOR=!1,this.BAKED_VERTEX_ANIMATION_TEXTURE=!1,this.VERTEXALPHA=!1,this.ALPHATEST=!1,this.DEPTHPREPASS=!1,this.ALPHABLEND=!1,this.ALPHA_FROM_BASE_COLOR_TEXTURE=!1,this.ALPHATESTVALUE="0.5",this.PREMULTIPLYALPHA=!1,this.REFLECTIVITY_GAMMA=!1,this.REFLECTIVITYDIRECTUV=0,this.SPECULARTERM=!1,this.LODBASEDMICROSFURACE=!0,this.SPECULAR_ROUGHNESS_FROM_METALNESS_TEXTURE_GREEN=!1,this.BASE_METALNESS_FROM_METALNESS_TEXTURE_BLUE=!1,this.AOSTOREINMETALMAPRED=!1,this.SPECULAR_WEIGHT_IN_ALPHA=!1,this.SPECULAR_WEIGHT_FROM_SPECULAR_COLOR_TEXTURE=!1,this.SPECULAR_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE=!1,this.COAT_ROUGHNESS_FROM_GREEN_CHANNEL=!1,this.COAT_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE=!1,this.USE_GLTF_STYLE_ANISOTROPY=!1,this.THIN_FILM_THICKNESS_FROM_THIN_FILM_TEXTURE=!1,this.FUZZ_ROUGHNESS_FROM_TEXTURE_ALPHA=!1,this.GEOMETRY_THICKNESS_FROM_GREEN_CHANNEL=!1,this.ENVIRONMENTBRDF=!1,this.ENVIRONMENTBRDF_RGBD=!1,this.FUZZENVIRONMENTBRDF=!1,this.NORMAL=!1,this.TANGENT=!1,this.OBJECTSPACE_NORMALMAP=!1,this.PARALLAX=!1,this.PARALLAX_RHS=!1,this.PARALLAXOCCLUSION=!1,this.NORMALXYSCALE=!0,this.ANISOTROPIC=!1,this.ANISOTROPIC_OPENPBR=!0,this.ANISOTROPIC_BASE=!1,this.ANISOTROPIC_COAT=!1,this.FUZZ_IBL_SAMPLES=6,this.REFRACTION_HIGH_QUALITY_BLUR=!1,this.FUZZ=!1,this.THIN_FILM=!1,this.IRIDESCENCE=!1,this.DISPERSION=!1,this.SCATTERING=!1,this.USE_IRRADIANCE_TEXTURE_FOR_SCATTERING=!1,this.SSS_SAMPLE_COUNT=16,this.USE_IRRADIANCE_TEXTURE_FOR_SCATTERING_GBUFFER=!1,this.TRANSMISSION_SLAB=!1,this.TRANSMISSION_SLAB_VOLUME=!1,this.SUBSURFACE_SLAB=!1,this.GEOMETRY_THIN_WALLED=!1,this.REFRACTED_BACKGROUND=!1,this.REFRACTED_LIGHTS=!1,this.REFRACTED_ENVIRONMENT=!1,this.REFRACTED_ENVIRONMENT_OPPOSITEZ=!1,this.REFRACTED_ENVIRONMENT_LOCAL_CUBE=!1,this.RADIANCEOCCLUSION=!1,this.HORIZONOCCLUSION=!1,this.INSTANCES=!1,this.THIN_INSTANCES=!1,this.INSTANCESCOLOR=!1,this.NUM_BONE_INFLUENCERS=0,this.BonesPerMesh=0,this.BONETEXTURE=!1,this.BONES_VELOCITY_ENABLED=!1,this.NONUNIFORMSCALING=!1,this.MORPHTARGETS=!1,this.MORPHTARGETS_POSITION=!1,this.MORPHTARGETS_NORMAL=!1,this.MORPHTARGETS_TANGENT=!1,this.MORPHTARGETS_UV=!1,this.MORPHTARGETS_UV2=!1,this.MORPHTARGETS_COLOR=!1,this.MORPHTARGETTEXTURE_HASPOSITIONS=!1,this.MORPHTARGETTEXTURE_HASNORMALS=!1,this.MORPHTARGETTEXTURE_HASTANGENTS=!1,this.MORPHTARGETTEXTURE_HASUVS=!1,this.MORPHTARGETTEXTURE_HASUV2S=!1,this.MORPHTARGETTEXTURE_HASCOLORS=!1,this.NUM_MORPH_INFLUENCERS=0,this.MORPHTARGETS_TEXTURE=!1,this.USEPHYSICALLIGHTFALLOFF=!1,this.USEGLTFLIGHTFALLOFF=!1,this.TWOSIDEDLIGHTING=!1,this.MIRRORED=!1,this.SHADOWFLOAT=!1,this.CLIPPLANE=!1,this.CLIPPLANE2=!1,this.CLIPPLANE3=!1,this.CLIPPLANE4=!1,this.CLIPPLANE5=!1,this.CLIPPLANE6=!1,this.POINTSIZE=!1,this.FOG=!1,this.LOGARITHMICDEPTH=!1,this.CAMERA_ORTHOGRAPHIC=!1,this.CAMERA_PERSPECTIVE=!1,this.AREALIGHTSUPPORTED=!0,this.FORCENORMALFORWARD=!1,this.SPECULARAA=!1,this.UNLIT=!1,this.DECAL_AFTER_DETAIL=!1,this.DEBUGMODE=0,this.USE_VERTEX_PULLING=!1,this.VERTEX_PULLING_USE_INDEX_BUFFER=!1,this.VERTEX_PULLING_INDEX_BUFFER_32BITS=!1,this.RIGHT_HANDED=!1,this.CLUSTLIGHT_SLICES=0,this.CLUSTLIGHT_BATCH=0,this.BRDF_V_HEIGHT_CORRELATED=!0,this.MS_BRDF_ENERGY_CONSERVATION=!0,this.SPHERICAL_HARMONICS=!0,this.SPECULAR_GLOSSINESS_ENERGY_CONSERVATION=!0,this.MIX_IBL_RADIANCE_WITH_IRRADIANCE=!0,this.LEGACY_SPECULAR_ENERGY_CONSERVATION=!1,this.BASE_DIFFUSE_MODEL=0,this.DIELECTRIC_SPECULAR_MODEL=1,this.CONDUCTOR_SPECULAR_MODEL=1,this.rebuild()}reset(){super.reset(),this.ALPHATESTVALUE="0.5",this.NORMALXYSCALE=!0}},dL=class extends Om(al){},Oe=class n extends dL{get geometryTangentAngle(){return Math.atan2(this.geometryTangent.y,this.geometryTangent.x)}set geometryTangentAngle(e){this.geometryTangent=new Ne(Math.cos(e),Math.sin(e))}get geometryCoatTangentAngle(){return Math.atan2(this.geometryCoatTangent.y,this.geometryCoatTangent.x)}set geometryCoatTangentAngle(e){this.geometryCoatTangent=new Ne(Math.cos(e),Math.sin(e))}get sssQuality(){return this._sssQuality}set sssQuality(e){this._sssQuality!==e&&(this._sssQuality=e,this.markAsDirty(1))}get sssIrradianceTexture(){return this._sssIrradianceTexture}set sssIrradianceTexture(e){this._sssIrradianceTexture!==e&&(this._sssIrradianceTexture=e,this._markAllSubMeshesAsTexturesDirty())}get sssDepthTexture(){return this._sssDepthTexture}set sssDepthTexture(e){this._sssDepthTexture!==e&&(this._sssDepthTexture=e,this._markAllSubMeshesAsTexturesDirty())}get hasTransparency(){return this.subsurfaceWeight>0||this.transmissionWeight>0}get hasScattering(){return this.transmissionWeight>0&&this.transmissionDepth>0&&!this.transmissionScatter.equals(Te.BlackReadOnly)||this.subsurfaceWeight>0}get usePhysicalLightFalloff(){return this._lightFalloff===ve.LIGHTFALLOFF_PHYSICAL}set usePhysicalLightFalloff(e){e!==this.usePhysicalLightFalloff&&(this._markAllSubMeshesAsTexturesDirty(),e?this._lightFalloff=ve.LIGHTFALLOFF_PHYSICAL:this._lightFalloff=ve.LIGHTFALLOFF_STANDARD)}get useGLTFLightFalloff(){return this._lightFalloff===ve.LIGHTFALLOFF_GLTF}set useGLTFLightFalloff(e){e!==this.useGLTFLightFalloff&&(this._markAllSubMeshesAsTexturesDirty(),e?this._lightFalloff=ve.LIGHTFALLOFF_GLTF:this._lightFalloff=ve.LIGHTFALLOFF_STANDARD)}get backgroundRefractionTexture(){return this._backgroundRefractionTexture}set backgroundRefractionTexture(e){this._backgroundRefractionTexture=e,this._markAllSubMeshesAsTexturesDirty()}get refractionHighQualityBlur(){return this._refractionHighQualityBlur}set refractionHighQualityBlur(e){this._refractionHighQualityBlur!==e&&(this._refractionHighQualityBlur=e,this.markAsDirty(1))}get realTimeFiltering(){return this._realTimeFiltering}set realTimeFiltering(e){this._realTimeFiltering=e,this.markAsDirty(1)}get realTimeFilteringQuality(){return this._realTimeFilteringQuality}set realTimeFilteringQuality(e){this._realTimeFilteringQuality=e,this.markAsDirty(1)}get fuzzSampleNumber(){return this._fuzzSampleNumber}set fuzzSampleNumber(e){this._fuzzSampleNumber=e,this.markAsDirty(1)}get canRenderToMRT(){return!0}constructor(e,t,i=!1){var s;super(e,t,void 0,i||n.ForceGLSL),this._baseWeight=new si("base_weight",1,"vBaseWeight",1),this._baseWeightTexture=new Ti("base_weight","baseWeight","BASE_WEIGHT"),this._baseColor=new si("base_color",Te.White(),"vBaseColor",4),this._baseColorTexture=new Ti("base_color","baseColor","BASE_COLOR"),this._baseDiffuseRoughness=new si("base_diffuse_roughness",0,"vBaseDiffuseRoughness",1),this._baseDiffuseRoughnessTexture=new Ti("base_diffuse_roughness","baseDiffuseRoughness","BASE_DIFFUSE_ROUGHNESS"),this._baseMetalness=new si("base_metalness",0,"vReflectanceInfo",4,0),this._baseMetalnessTexture=new Ti("base_metalness","baseMetalness","BASE_METALNESS"),this._specularWeight=new si("specular_weight",1,"vReflectanceInfo",4,3),this._specularWeightTexture=new Ti("specular_weight","specularWeight","SPECULAR_WEIGHT"),this._specularColor=new si("specular_color",Te.White(),"vSpecularColor",4),this._specularColorTexture=new Ti("specular_color","specularColor","SPECULAR_COLOR"),this._specularRoughness=new si("specular_roughness",.3,"vReflectanceInfo",4,1),this._specularRoughnessTexture=new Ti("specular_roughness","specularRoughness","SPECULAR_ROUGHNESS"),this._specularRoughnessAnisotropy=new si("specular_roughness_anisotropy",0,"vSpecularAnisotropy",3,2),this._specularRoughnessAnisotropyTexture=new Ti("specular_roughness_anisotropy","specularRoughnessAnisotropy","SPECULAR_ROUGHNESS_ANISOTROPY"),this._specularIor=new si("specular_ior",1.5,"vReflectanceInfo",4,2),this._transmissionWeight=new si("transmission_weight",0,"vTransmissionWeight",1),this._transmissionWeightTexture=new Ti("transmission_weight","transmissionWeight","TRANSMISSION_WEIGHT"),this._transmissionColor=new si("transmission_color",Te.White(),"vTransmissionColor",3,0),this._transmissionColorTexture=new Ti("transmission_color","transmissionColor","TRANSMISSION_COLOR"),this._transmissionDepth=new si("transmission_depth",0,"vTransmissionDepth",1,0),this._transmissionDepthTexture=new Ti("transmission_depth","transmissionDepth","TRANSMISSION_DEPTH"),this._transmissionScatter=new si("transmission_scatter",Te.Black(),"vTransmissionScatter",3,0),this._transmissionScatterTexture=new Ti("transmission_scatter","transmissionScatter","TRANSMISSION_SCATTER"),this._transmissionScatterAnisotropy=new si("transmission_scatter_anisotropy",0,"vTransmissionScatterAnisotropy",1,0),this._transmissionDispersionScale=new si("transmission_dispersion_scale",0,"vTransmissionDispersionScale",1,0),this._transmissionDispersionScaleTexture=new Ti("transmission_dispersion_scale","transmissionDispersionScale","TRANSMISSION_DISPERSION_SCALE"),this._transmissionDispersionAbbeNumber=new si("transmission_dispersion_abbe_number",20,"vTransmissionDispersionAbbeNumber",1,0),this._subsurfaceWeight=new si("subsurface_weight",0,"vSubsurfaceWeight",1,0,"SUBSURFACE_SLAB"),this._subsurfaceWeightTexture=new Ti("subsurface_weight","subsurfaceWeight","SUBSURFACE_WEIGHT"),this._subsurfaceColor=new si("subsurface_color",new Te(.8,.8,.8),"vSubsurfaceColor",3,0,"SUBSURFACE_SLAB"),this._subsurfaceColorTexture=new Ti("subsurface_color","subsurfaceColor","SUBSURFACE_COLOR"),this._subsurfaceRadius=new si("subsurface_radius",.1,"vSubsurfaceRadius",1,0,"SUBSURFACE_SLAB"),this._subsurfaceRadiusScale=new si("subsurface_radius_scale",new Te(1,.5,.25),"vSubsurfaceRadiusScale",3,0,"SUBSURFACE_SLAB"),this._subsurfaceRadiusScaleTexture=new Ti("subsurface_radius_scale","subsurfaceRadiusScale","SUBSURFACE_RADIUS_SCALE"),this._subsurfaceScatterAnisotropy=new si("subsurface_scatter_anisotropy",0,"vSubsurfaceScatterAnisotropy",1,0,"SUBSURFACE_SLAB"),this._coatWeight=new si("coat_weight",0,"vCoatWeight",1,0),this._coatWeightTexture=new Ti("coat_weight","coatWeight","COAT_WEIGHT"),this._coatColor=new si("coat_color",Te.White(),"vCoatColor",3,0),this._coatColorTexture=new Ti("coat_color","coatColor","COAT_COLOR"),this._coatRoughness=new si("coat_roughness",0,"vCoatRoughness",1,0),this._coatRoughnessTexture=new Ti("coat_roughness","coatRoughness","COAT_ROUGHNESS"),this._coatRoughnessAnisotropy=new si("coat_roughness_anisotropy",0,"vCoatRoughnessAnisotropy",1),this._coatRoughnessAnisotropyTexture=new Ti("coat_roughness_anisotropy","coatRoughnessAnisotropy","COAT_ROUGHNESS_ANISOTROPY"),this._coatIor=new si("coat_ior",1.5,"vCoatIor",1,0),this._coatDarkening=new si("coat_darkening",1,"vCoatDarkening",1,0),this._coatDarkeningTexture=new Ti("coat_darkening","coatDarkening","COAT_DARKENING"),this.useCoatRoughnessFromWeightTexture=!1,this._fuzzWeight=new si("fuzz_weight",0,"vFuzzWeight",1,0),this._fuzzWeightTexture=new Ti("fuzz_weight","fuzzWeight","FUZZ_WEIGHT"),this._fuzzColor=new si("fuzz_color",Te.White(),"vFuzzColor",3,0),this._fuzzColorTexture=new Ti("fuzz_color","fuzzColor","FUZZ_COLOR"),this._fuzzRoughness=new si("fuzz_roughness",.5,"vFuzzRoughness",1,0),this._fuzzRoughnessTexture=new Ti("fuzz_roughness","fuzzRoughness","FUZZ_ROUGHNESS"),this._geometryThinWalled=new si("geometry_thin_walled",0,"vGeometryThinWalled",1,0),this._geometryNormalTexture=new Ti("geometry_normal","geometryNormal","GEOMETRY_NORMAL"),this._geometryTangent=new si("geometry_tangent",new Ne(1,0),"vSpecularAnisotropy",3,0),this._geometryTangentTexture=new Ti("geometry_tangent","geometryTangent","GEOMETRY_TANGENT"),this._geometryCoatNormalTexture=new Ti("geometry_coat_normal","geometryCoatNormal","GEOMETRY_COAT_NORMAL"),this._geometryCoatTangent=new si("geometry_coat_tangent",new Ne(1,0),"vGeometryCoatTangent",2,0),this._geometryCoatTangentTexture=new Ti("geometry_coat_tangent","geometryCoatTangent","GEOMETRY_COAT_TANGENT"),this._geometryOpacity=new si("geometry_opacity",1,"vBaseColor",4,3),this._geometryOpacityTexture=new Ti("geometry_opacity","geometryOpacity","GEOMETRY_OPACITY"),this._geometryThickness=new si("geometry_thickness",0,"vGeometryThickness",1,0),this._geometryThicknessTexture=new Ti("geometry_thickness","geometryThickness","GEOMETRY_THICKNESS"),this._emissionLuminance=new si("emission_luminance",1,"vLightingIntensity",4,1),this._emissionColor=new si("emission_color",Te.Black(),"vEmissionColor",3),this._emissionColorTexture=new Ti("emission_color","emissionColor","EMISSION_COLOR"),this._thinFilmWeight=new si("thin_film_weight",0,"vThinFilmWeight",1,0),this._thinFilmWeightTexture=new Ti("thin_film_weight","thinFilmWeight","THIN_FILM_WEIGHT"),this._thinFilmThickness=new si("thin_film_thickness",.5,"vThinFilmThickness",2,0),this._thinFilmThicknessMin=new si("thin_film_thickness_min",0,"vThinFilmThickness",2,1),this._thinFilmThicknessTexture=new Ti("thin_film_thickness","thinFilmThickness","THIN_FILM_THICKNESS"),this._thinFilmIor=new si("thin_film_ior",1.4,"vThinFilmIor",1,0),this._ambientOcclusionTexture=new Ti("ambient_occlusion","ambientOcclusion","AMBIENT_OCCLUSION"),this._sssQuality=n.SSS_QUALITY_MEDIUM,this._sssIrradianceTexture=null,this._sssDepthTexture=null,this._uniformsList={},this._uniformsArray=[],this._samplersList={},this._samplerDefines={},this.directIntensity=1,this.environmentIntensity=1,this.useSpecularWeightFromTextureAlpha=!1,this.forceAlphaTest=!1,this.alphaCutOff=.4,this.useAmbientOcclusionFromMetallicTextureRed=!1,this.useAmbientInGrayScale=!1,this.useObjectSpaceNormalMap=!1,this.useParallax=!1,this.useParallaxOcclusion=!1,this.parallaxScaleBias=.05,this.disableLighting=!1,this.forceIrradianceInFragment=!1,this.maxSimultaneousLights=4,this.invertNormalMapX=!1,this.invertNormalMapY=!1,this.twoSidedLighting=!1,this.useAlphaFresnel=!1,this.useLinearAlphaFresnel=!1,this.environmentBRDFTexture=null,this.forceNormalForward=!1,this.enableSpecularAntiAliasing=!1,this.useHorizonOcclusion=!0,this.useRadianceOcclusion=!0,this.unlit=!1,this.applyDecalMapAfterDetailMap=!1,this._lightingInfos=new Mi(this.directIntensity,1,this.environmentIntensity,1),this._radianceTexture=null,this._useSpecularWeightFromAlpha=!1,this._useSpecularWeightFromSpecularColorTexture=!1,this._useSpecularRoughnessAnisotropyFromTangentTexture=!1,this._useCoatRoughnessAnisotropyFromTangentTexture=!1,this._useCoatRoughnessFromGreenChannel=!1,this._useGltfStyleAnisotropy=!1,this._useFuzzRoughnessFromTextureAlpha=!1,this._useHorizonOcclusion=!0,this._useRadianceOcclusion=!0,this._useAlphaFromBaseColorTexture=!1,this._useAmbientOcclusionFromMetallicTextureRed=!1,this._useRoughnessFromMetallicTextureGreen=!1,this._useMetallicFromMetallicTextureBlue=!1,this._useThinFilmThicknessFromTextureGreen=!1,this._useGeometryThicknessFromGreenChannel=!1,this._lightFalloff=ve.LIGHTFALLOFF_PHYSICAL,this._useObjectSpaceNormalMap=!1,this._useParallax=!1,this._useParallaxOcclusion=!1,this._parallaxScaleBias=.05,this._disableLighting=!1,this._maxSimultaneousLights=4,this._invertNormalMapX=!1,this._invertNormalMapY=!1,this._twoSidedLighting=!1,this._alphaCutOff=.4,this._useAlphaFresnel=!1,this._useLinearAlphaFresnel=!1,this._environmentBRDFTexture=null,this._environmentFuzzBRDFTexture=null,this._backgroundRefractionTexture=null,this._refractionHighQualityBlur=!0,this._forceIrradianceInFragment=!1,this._realTimeFiltering=!1,this._realTimeFilteringQuality=8,this._fuzzSampleNumber=4,this._forceNormalForward=!1,this._enableSpecularAntiAliasing=!1,this._renderTargets=new wi(16),this._unlit=!1,this._applyDecalMapAfterDetailMap=!1,this._debugMode=0,this._shadersLoaded=!1,this._breakShaderLoadedCheck=!1,this._vertexPullingMetadata=null,this.debugMode=0,this.debugLimit=-1,this.debugFactor=1,this._cacheHasRenderTargetTextures=!1,this._transparencyMode=ve.MATERIAL_OPAQUE,this.getScene()&&!((s=this.getScene())!=null&&s.getEngine().isWebGPU)&&this.getScene().getEngine().webGLVersion<2&&J.Error("OpenPBRMaterial: WebGL 2.0 or above is required for this material."),n._noiseTextures[this.getScene().uniqueId]||(n._noiseTextures[this.getScene().uniqueId]=new ge(de.GetAssetUrl("https://assets.babylonjs.com/core/blue_noise/blue_noise_rgb.png"),this.getScene(),!1,!0,1),this.getScene().onDisposeObservable.addOnce(()=>{var a;(a=n._noiseTextures[this.getScene().uniqueId])==null||a.dispose(),delete n._noiseTextures[this.getScene().uniqueId]})),this._attachImageProcessingConfiguration(null),this.getRenderTargetTextures=()=>(this._renderTargets.reset(),le.ReflectionTextureEnabled&&this._radianceTexture&&this._radianceTexture.isRenderTarget&&this._renderTargets.push(this._radianceTexture),le.RefractionTextureEnabled&&this._backgroundRefractionTexture&&this._backgroundRefractionTexture.isRenderTarget&&this._renderTargets.push(this._backgroundRefractionTexture),this._eventInfo.renderTargets=this._renderTargets,this._callbackPluginEventFillRenderTargetTextures(this._eventInfo),this._renderTargets),this._environmentBRDFTexture=RX(this.getScene()),this._environmentFuzzBRDFTexture=pD(this.getScene()),this.prePassConfiguration=new Ts,this._propertyList={};for(let a of Object.getOwnPropertyNames(this)){let o=this[a];o instanceof si&&(this._propertyList[a]=o)}Object.keys(this._propertyList).forEach(a=>{let o=this._propertyList[a],l=this._uniformsList[o.targetUniformName];l?l.numComponents!==o.targetUniformComponentNum?J.Error(`Uniform ${o.targetUniformName} already exists of size ${l.numComponents}, but trying to set it to ${o.targetUniformComponentNum}.`):l.requiredDefine!==o.requiredDefine&&(l.requiredDefine=void 0):(l=new $x(o.targetUniformName,o.targetUniformComponentNum),l.requiredDefine=o.requiredDefine,this._uniformsList[o.targetUniformName]=l),l.firstLinkedKey===""&&(l.firstLinkedKey=o.name),l.linkedProperties[o.name]=o}),this._uniformsArray=Object.values(this._uniformsList),this._samplersList={};for(let a of Object.getOwnPropertyNames(this)){let o=this[a];o instanceof Ti&&(this._samplersList[a]=o)}for(let a in this._samplersList){let l=this._samplersList[a].textureDefine;this._samplerDefines[l]={type:"boolean",default:!1},this._samplerDefines[l+"DIRECTUV"]={type:"number",default:0},this._samplerDefines[l+"_GAMMA"]={type:"boolean",default:!1}}this._baseWeight,this._baseWeightTexture,this._baseColor,this._baseColorTexture,this._baseDiffuseRoughness,this._baseDiffuseRoughnessTexture,this._baseMetalness,this._baseMetalnessTexture,this._specularWeight,this._specularWeightTexture,this._specularColor,this._specularColorTexture,this._specularRoughness,this._specularIor,this._specularRoughnessTexture,this._specularRoughnessAnisotropy,this._specularRoughnessAnisotropyTexture,this._transmissionWeight,this._transmissionWeightTexture,this._transmissionColor,this._transmissionColorTexture,this._transmissionDepth,this._transmissionDepthTexture,this._transmissionScatter,this._transmissionScatterTexture,this._transmissionScatterAnisotropy,this._transmissionDispersionScale,this._transmissionDispersionScaleTexture,this._transmissionDispersionAbbeNumber,this._subsurfaceWeight,this._subsurfaceWeightTexture,this._subsurfaceColor,this._subsurfaceColorTexture,this._subsurfaceRadius,this._subsurfaceRadiusScale,this._subsurfaceRadiusScaleTexture,this._subsurfaceScatterAnisotropy,this._coatWeight,this._coatWeightTexture,this._coatColor,this._coatColorTexture,this._coatRoughness,this._coatRoughnessTexture,this._coatRoughnessAnisotropy,this._coatRoughnessAnisotropyTexture,this._coatIor,this._coatDarkening,this._coatDarkeningTexture,this._fuzzWeight,this._fuzzWeightTexture,this._fuzzColor,this._fuzzColorTexture,this._fuzzRoughness,this._fuzzRoughnessTexture,this._geometryThinWalled,this._geometryNormalTexture,this._geometryTangent,this._geometryTangentTexture,this._geometryCoatNormalTexture,this._geometryCoatTangent,this._geometryCoatTangentTexture,this._geometryOpacity,this._geometryOpacityTexture,this._geometryThickness,this._geometryThicknessTexture,this._thinFilmWeight,this._thinFilmWeightTexture,this._thinFilmThickness,this._thinFilmThicknessMin,this._thinFilmThicknessTexture,this._thinFilmIor,this._emissionLuminance,this._emissionColor,this._emissionColorTexture,this._ambientOcclusionTexture}get hasRenderTargetTextures(){return le.ReflectionTextureEnabled&&this._radianceTexture&&this._radianceTexture.isRenderTarget||le.RefractionTextureEnabled&&this._backgroundRefractionTexture&&this._backgroundRefractionTexture.isRenderTarget?!0:this._cacheHasRenderTargetTextures}get isPrePassCapable(){return!this.disableDepthWrite}getClassName(){return"OpenPBRMaterial"}get transparencyMode(){return this._transparencyMode}set transparencyMode(e){this._transparencyMode!==e&&(this._transparencyMode=e,this._markAllSubMeshesAsTexturesAndMiscDirty())}_shouldUseAlphaFromBaseColorTexture(){return this._hasAlphaChannel()&&this._transparencyMode!==ve.MATERIAL_OPAQUE&&!this.geometryOpacityTexture}_hasAlphaChannel(){return this.baseColorTexture!=null&&this.baseColorTexture.hasAlpha&&this._useAlphaFromBaseColorTexture||this.geometryOpacityTexture!=null}clone(e,t=!0,i=""){let r=tt.Clone(()=>new n(e,this.getScene()),this,{cloneTexturesOnlyOnce:t});return r.id=e,r.name=e,this.stencil.copyTo(r.stencil),this._clonePlugins(r,i),r}serialize(){let e=super.serialize();return e.customType="BABYLON.OpenPBRMaterial",e}static Parse(e,t,i){let r=tt.Parse(()=>new n(e.name,t),e,t,i);return e.stencil&&r.stencil.parse(e.stencil,t,i),ve._ParsePlugins(e,r,t,i),r}forceCompilation(e,t,i){let r={clipPlane:!1,useInstances:!1,...i};this._uniformBufferLayoutBuilt||this.buildUniformLayout(),this._callbackPluginEventGeneric(4,this._eventInfo),(()=>{if(this._breakShaderLoadedCheck)return;let a=new Cg({...this._eventInfo.defineNames||{},...this._samplerDefines||{}}),o=this._prepareEffect(e,e,a,void 0,void 0,r.useInstances,r.clipPlane);this._onEffectCreatedObservable&&(Ym.effect=o,Ym.subMesh=null,this._onEffectCreatedObservable.notifyObservers(Ym)),o.isReady()?t&&t(this):o.onCompileObservable.add(()=>{t&&t(this)})})()}isReadyForSubMesh(e,t,i){var d;this._uniformBufferLayoutBuilt||this.buildUniformLayout();let r=t._drawWrapper;if(r.effect&&this.isFrozen&&r._wasPreviouslyReady&&r._wasPreviouslyUsingInstances===i)return!0;t.materialDefines||(this._callbackPluginEventGeneric(4,this._eventInfo),t.materialDefines=new Cg({...this._eventInfo.defineNames||{},...this._samplerDefines||{}}));let s=t.materialDefines;if(this._isReadyForSubMesh(t))return!0;let a=this.getScene(),o=a.getEngine();if(s._areTexturesDirty&&(this._eventInfo.hasRenderTargetTextures=!1,this._callbackPluginEventHasRenderTargetTextures(this._eventInfo),this._cacheHasRenderTargetTextures=this._eventInfo.hasRenderTargetTextures,a.texturesEnabled)){for(let m in this._samplersList){let _=this._samplersList[m];if(_.value&&!_.value.isReadyOrNotBlocking())return!1}let u=this._getRadianceTexture();if(u&&le.ReflectionTextureEnabled){if(!u.isReadyOrNotBlocking())return!1;if(u.irradianceTexture){if(!u.irradianceTexture.isReadyOrNotBlocking())return!1}else if(!u.sphericalPolynomial&&((d=u.getInternalTexture())!=null&&d._sphericalPolynomialPromise))return!1}if(this._environmentBRDFTexture&&le.ReflectionTextureEnabled&&!this._environmentBRDFTexture.isReady()||this._environmentFuzzBRDFTexture&&le.ReflectionTextureEnabled&&!this._environmentFuzzBRDFTexture.isReady()||this._backgroundRefractionTexture&&le.RefractionTextureEnabled&&!this._backgroundRefractionTexture.isReadyOrNotBlocking()||n._noiseTextures[a.uniqueId]&&!n._noiseTextures[a.uniqueId].isReady()||this._sssIrradianceTexture&&this._sssDepthTexture&&(!this._sssIrradianceTexture.isReady()||!this._sssDepthTexture.isReady()))return!1}if(this._eventInfo.isReadyForSubMesh=!0,this._eventInfo.defines=s,this._eventInfo.subMesh=t,this._callbackPluginEventIsReadyForSubMesh(this._eventInfo),!this._eventInfo.isReadyForSubMesh||s._areImageProcessingDirty&&this._imageProcessingConfiguration&&!this._imageProcessingConfiguration.isReady())return!1;if(s.AREALIGHTUSED){for(let u=0;u{e.addUniform(t.name,t.numComponents)}),Object.values(this._samplersList).forEach(t=>{e.addUniform(t.samplerInfoName,2),e.addUniform(t.samplerMatrixName,16)}),super.buildUniformLayout()}bindPropertiesForSubMesh(e,t,i,r){if(this.geometryThickness===0)e.updateFloat("vGeometryThickness",0);else{r.getRenderingMesh().getWorldMatrix().decompose(Q.Vector3[0]);let s=Math.max(Math.abs(Q.Vector3[0].x),Math.abs(Q.Vector3[0].y),Math.abs(Q.Vector3[0].z));e.updateFloat("vGeometryThickness",this.geometryThickness*s)}}bindForSubMesh(e,t,i){var h;let r=this.getScene(),s=i.materialDefines;if(!s)return;let a=i.effect;if(!a)return;this._activeEffect=a,t.getMeshUniformBuffer().bindToEffect(a,"Mesh"),t.transferToEffect(e);let o=r.getEngine();this._uniformBuffer.bindToEffect(a,"Material"),this.prePassConfiguration.bindForSubMesh(this._activeEffect,r,t,e,this.isFrozen),Nn.Bind(o.currentRenderPassId,this._activeEffect,t,e,this);let l=r.activeCamera;l?this._uniformBuffer.updateFloat4("cameraInfo",l.minZ,l.maxZ,0,0):this._uniformBuffer.updateFloat4("cameraInfo",0,0,0,0),this._eventInfo.subMesh=i,this._callbackPluginEventHardBindForSubMesh(this._eventInfo),s.OBJECTSPACE_NORMALMAP&&(e.toNormalMatrix(this._normalMatrix),this.bindOnlyNormalMatrix(this._normalMatrix));let c=this._mustRebind(r,a,i,t.visibility);gs(t,this._activeEffect,this.prePassConfiguration),this._vertexPullingMetadata&&If(this._activeEffect,this._vertexPullingMetadata);let f=this._uniformBuffer;if(c){this.bindViewProjection(a);let d=this._getRadianceTexture();if(!f.useUbo||!this.isFrozen||!f.isSync||i._drawWrapper._forceRebindOnNextCall){if(r.texturesEnabled){for(let m in this._samplersList){let _=this._samplersList[m];_.value&&(f.updateFloat2(_.samplerInfoName,_.value.coordinatesIndex,_.value.level),ni(_.value,f,_.samplerPrefix))}(this.geometryNormalTexture||this.geometryCoatNormalTexture)&&(r._mirroredCameraPosition?f.updateFloat2("vTangentSpaceParams",this._invertNormalMapX?1:-1,this._invertNormalMapY?1:-1):f.updateFloat2("vTangentSpaceParams",this._invertNormalMapX?-1:1,this._invertNormalMapY?-1:1)),nm(r,s,f,Te.White(),d,this.realTimeFiltering,!0,!0,!0,!0,!0)}this.pointsCloud&&f.updateFloat("pointSize",this.pointSize);let u=this._uniformsArray;for(let m=0,_=u.length;m<_;m++){let p=u[m];p.requiredDefine!==void 0&&!s[p.requiredDefine]||(p.numComponents===4?(p.populateVectorFromLinkedProperties(Q.Vector4[0]),f.updateVector4(p.name,Q.Vector4[0])):p.numComponents===3?(p.populateVectorFromLinkedProperties(Q.Vector3[0]),f.updateVector3(p.name,Q.Vector3[0])):p.numComponents===2?(p.populateVectorFromLinkedProperties(Q.Vector2[0]),f.updateFloat2(p.name,Q.Vector2[0].x,Q.Vector2[0].y)):p.numComponents===1&&f.updateFloat(p.name,p.linkedProperties[p.firstLinkedKey].value))}this._lightingInfos.x=this.directIntensity,this._lightingInfos.y=this.emissionLuminance,this._lightingInfos.z=this.environmentIntensity*r.environmentIntensity,this._lightingInfos.w=1,f.updateVector4("vLightingIntensity",this._lightingInfos),f.updateFloat2("vDebugMode",this.debugLimit,this.debugFactor)}if(r.texturesEnabled){for(let u in this._samplersList){let m=this._samplersList[u];m.value&&f.setTexture(m.samplerName,m.value)}if(aA(r,s,f,d,this.realTimeFiltering),s.ENVIRONMENTBRDF&&f.setTexture("environmentBrdfSampler",this._environmentBRDFTexture),s.FUZZENVIRONMENTBRDF&&f.setTexture("environmentFuzzBrdfSampler",this._environmentFuzzBRDFTexture),s.REFRACTED_BACKGROUND&&(f.setTexture("backgroundRefractionSampler",this._backgroundRefractionTexture),f.updateMatrix("backgroundRefractionMatrix",this._backgroundRefractionTexture.getReflectionTextureMatrix()),Q.Vector3[1].set(Math.log2(this._backgroundRefractionTexture.getSize().width),0,0),f.updateVector3("vBackgroundRefractionInfos",Q.Vector3[1])),(s.ANISOTROPIC||s.FUZZ||s.REFRACTED_BACKGROUND||s.USE_IRRADIANCE_TEXTURE_FOR_SCATTERING)&&f.setTexture("blueNoiseSampler",n._noiseTextures[this.getScene().uniqueId]),s.USE_IRRADIANCE_TEXTURE_FOR_SCATTERING&&this.sssIrradianceTexture&&this.sssDepthTexture){let u=this.sssIrradianceTexture.getSize().width,m=this.sssIrradianceTexture.getSize().height;f.setTexture("sceneIrradianceSampler",this.sssIrradianceTexture),f.setTexture("sceneDepthSampler",this.sssDepthTexture),f.updateFloat2("renderTargetSize",u,m)}}this.getScene().useOrderIndependentTransparency&&this.needAlphaBlendingForMesh(t)&&this.getScene().depthPeelingRenderer.bind(a),this._eventInfo.subMesh=i,this._callbackPluginEventBindForSubMesh(this._eventInfo),Mn(this._activeEffect,this,r),this.bindEyePosition(a)}else r.getEngine()._features.needToAlwaysBindUniformBuffers&&(this._needToBindSceneUbo=!0);this.bindPropertiesForSubMesh(this._uniformBuffer,r,r.getEngine(),i),(c||!this.isFrozen)&&(r.lightsEnabled&&!this._disableLighting&&am(r,t,this._activeEffect,s,this._maxSimultaneousLights),this.bindView(a),mf(r,t,this._activeEffect,!0),s.NUM_MORPH_INFLUENCERS&&Cn(t,this._activeEffect),s.BAKED_VERTEX_ANIMATION_TEXTURE&&((h=t.bakedVertexAnimationManager)==null||h.bind(a,s.INSTANCES)),this._imageProcessingConfiguration.bind(this._activeEffect),uf(s,this._activeEffect,r)),this._afterBind(t,this._activeEffect,i),f.update()}getAnimatables(){let e=super.getAnimatables();for(let t in this._samplersList){let i=this._samplersList[t];i.value&&i.value.animations&&i.value.animations.length>0&&e.push(i.value)}return this._radianceTexture&&this._radianceTexture.animations&&this._radianceTexture.animations.length>0&&e.push(this._radianceTexture),e}getActiveTextures(){let e=super.getActiveTextures();for(let t in this._samplersList){let i=this._samplersList[t];i.value&&e.push(i.value)}return this._radianceTexture&&e.push(this._radianceTexture),e}hasTexture(e){if(super.hasTexture(e))return!0;for(let t in this._samplersList)if(this._samplersList[t].value===e)return!0;return this._radianceTexture===e}setPrePassRenderer(){return!1}dispose(e,t){var i,r;if(this._breakShaderLoadedCheck=!0,t){this._environmentBRDFTexture&&this.getScene().openPBREnvironmentBRDFTexture!==this._environmentBRDFTexture&&this._environmentBRDFTexture.dispose(),this._environmentFuzzBRDFTexture&&this.getScene().environmentFuzzBRDFTexture!==this._environmentFuzzBRDFTexture&&this._environmentFuzzBRDFTexture.dispose(),this._backgroundRefractionTexture=null;for(let s in this._samplersList)(i=this._samplersList[s].value)==null||i.dispose();(r=this._radianceTexture)==null||r.dispose()}this._renderTargets.dispose(),this._imageProcessingConfiguration&&this._imageProcessingObserver&&this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver),super.dispose(e,t)}_getRadianceTexture(){return this._radianceTexture?this._radianceTexture:this.getScene().environmentTexture}_prepareEffect(e,t,i,r=null,s=null,a=null,o=null){if(this._prepareDefines(e,t,i,a,o),!i.isDirty)return null;i.markAsProcessed();let c=this.getScene().getEngine(),f=new On,h=0;i.USESPHERICALINVERTEX&&f.addFallback(h++,"USESPHERICALINVERTEX"),i.FOG&&f.addFallback(h,"FOG"),i.SPECULARAA&&f.addFallback(h,"SPECULARAA"),i.POINTSIZE&&f.addFallback(h,"POINTSIZE"),i.LOGARITHMICDEPTH&&f.addFallback(h,"LOGARITHMICDEPTH"),i.PARALLAX&&f.addFallback(h,"PARALLAX"),i.PARALLAX_RHS&&f.addFallback(h,"PARALLAX_RHS"),i.PARALLAXOCCLUSION&&f.addFallback(h++,"PARALLAXOCCLUSION"),i.ENVIRONMENTBRDF&&f.addFallback(h++,"ENVIRONMENTBRDF"),i.TANGENT&&f.addFallback(h++,"TANGENT"),h=cm(i,f,this._maxSimultaneousLights,h),i.SPECULARTERM&&f.addFallback(h++,"SPECULARTERM"),i.USESPHERICALFROMREFLECTIONMAP&&f.addFallback(h++,"USESPHERICALFROMREFLECTIONMAP"),i.USEIRRADIANCEMAP&&f.addFallback(h++,"USEIRRADIANCEMAP"),i.NORMAL&&f.addFallback(h++,"NORMAL"),i.VERTEXCOLOR&&f.addFallback(h++,"VERTEXCOLOR"),i.MORPHTARGETS&&f.addFallback(h++,"MORPHTARGETS"),i.MULTIVIEW&&f.addFallback(0,"MULTIVIEW");let d=[L.PositionKind];i.NORMAL&&d.push(L.NormalKind),i.TANGENT&&d.push(L.TangentKind);for(let S=1;S<=6;++S)i["UV"+S]&&d.push(`uv${S===1?"":S}`);i.VERTEXCOLOR&&d.push(L.ColorKind),om(d,e,i,f),lm(d,i),Hh(d,e,i),sm(d,e,i);let u="openpbr",m=["world","view","viewProjection","projection","vEyePosition","inverseProjection","renderTargetSize","vLightsType","visibility","vFogInfos","vFogColor","pointSize","mBones","normalMatrix","vLightingIntensity","logarithmicDepthConstant","vTangentSpaceParams","boneTextureInfo","vDebugMode","morphTargetTextureInfo","morphTargetTextureIndices","cameraInfo","backgroundRefractionMatrix","vBackgroundRefractionInfos"];for(let S in this._uniformsList)m.push(S);let _=["environmentBrdfSampler","boneSampler","morphTargets","oitDepthSampler","oitFrontColorSampler","areaLightsLTC1Sampler","areaLightsLTC2Sampler"];i.FUZZENVIRONMENTBRDF&&_.push("environmentFuzzBrdfSampler"),i.REFRACTED_BACKGROUND&&_.push("backgroundRefractionSampler"),(i.ANISOTROPIC||i.FUZZ||i.REFRACTED_BACKGROUND||i.USE_IRRADIANCE_TEXTURE_FOR_SCATTERING)&&_.push("blueNoiseSampler"),i.USE_IRRADIANCE_TEXTURE_FOR_SCATTERING&&(_.push("sceneIrradianceSampler"),_.push("sceneDepthSampler"));for(let S in this._samplersList){let E=this._samplersList[S];_.push(E.samplerName),m.push(E.samplerInfoName),m.push(E.samplerMatrixName)}gf(m,_,!0);let p=["Material","Scene","Mesh"],g={maxSimultaneousLights:this._maxSimultaneousLights,maxSimultaneousMorphTargets:i.NUM_MORPH_INFLUENCERS};if(this._eventInfo.fallbacks=f,this._eventInfo.fallbackRank=h,this._eventInfo.defines=i,this._eventInfo.uniforms=m,this._eventInfo.attributes=d,this._eventInfo.samplers=_,this._eventInfo.uniformBuffersNames=p,this._eventInfo.customCode=void 0,this._eventInfo.mesh=e,this._eventInfo.indexParameters=g,this._callbackPluginEventGeneric(128,this._eventInfo),Nn.AddUniformsAndSamplers(m,_),Ts.AddUniforms(m),Ts.AddSamplers(_),In(m),this._useVertexPulling){let S=t==null?void 0:t.geometry;S&&(this._vertexPullingMetadata=bf(S),this._vertexPullingMetadata&&this._vertexPullingMetadata.forEach((E,R)=>{m.push(`vp_${R}_info`)}))}else this._vertexPullingMetadata=null;Wt&&(Wt.PrepareUniforms(m,i),Wt.PrepareSamplers(_,i)),vm({uniformsNames:m,uniformBuffersNames:p,samplers:_,defines:i,maxSimultaneousLights:this._maxSimultaneousLights,shaderLanguage:this._shaderLanguage});let v={};this.customShaderNameResolve&&(u=this.customShaderNameResolve(u,m,p,_,i,d,v));let x=i.toString(),A=c.createEffect(u,{attributes:d,uniformsNames:m,uniformBuffersNames:p,samplers:_,defines:x,fallbacks:f,onCompiled:r,onError:s,indexParameters:g,processFinalCode:v.processFinalCode,processCodeAfterIncludes:this._eventInfo.customCode,multiTarget:i.PREPASS,shaderLanguage:this._shaderLanguage,extraInitializationsAsync:this._shadersLoaded?void 0:async()=>{this.shaderLanguage===1?await Promise.all([Promise.resolve().then(()=>(v5(),g5)),Promise.resolve().then(()=>(pY(),mY))]):await Promise.all([Promise.resolve().then(()=>(bY(),RY)),Promise.resolve().then(()=>(x8(),A8))]),this._shadersLoaded=!0}},c);return this._eventInfo.customCode=void 0,A}_prepareDefines(e,t,i,r=null,s=null){var h;let a=t.hasThinInstances,o=this.getScene(),l=o.getEngine();dm(o,e,i,!0,this._maxSimultaneousLights,this._disableLighting),i._needNormals=!0,pm(o,i);let c=this.needAlphaBlendingForMesh(e)&&this.getScene().useOrderIndependentTransparency;if(gm(o,i,this.canRenderToMRT&&!c),_m(o,i,c),Nn.PrepareDefines(l.currentRenderPassId,e,i),i._areTexturesDirty){i._needUVs=!1;for(let d=1;d<=6;++d)i["MAINUV"+d]=!1;if(o.texturesEnabled){for(let m in this._samplersList){let _=this._samplersList[m];_.value?(ri(_.value,i,_.textureDefine),i[_.textureDefine+"_GAMMA"]=_.value.gammaSpace):i[_.textureDefine]=!1}let d=this._getRadianceTexture(),u=this._forceIrradianceInFragment||this.realTimeFiltering||this._twoSidedLighting||l.getCaps().maxVaryingVectors<=8||this._baseDiffuseRoughnessTexture!=null;if(_f(o,d,i,this.realTimeFiltering,this.realTimeFilteringQuality,!u),this._baseMetalnessTexture&&(i.AOSTOREINMETALMAPRED=this._useAmbientOcclusionFromMetallicTextureRed),i.SPECULAR_WEIGHT_IN_ALPHA=this._useSpecularWeightFromAlpha,i.SPECULAR_WEIGHT_FROM_SPECULAR_COLOR_TEXTURE=this._useSpecularWeightFromSpecularColorTexture,i.SPECULAR_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE=this._useSpecularRoughnessAnisotropyFromTangentTexture,i.COAT_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE=this._useCoatRoughnessAnisotropyFromTangentTexture,i.COAT_ROUGHNESS_FROM_GREEN_CHANNEL=this._useCoatRoughnessFromGreenChannel,i.SPECULAR_ROUGHNESS_FROM_METALNESS_TEXTURE_GREEN=this._useRoughnessFromMetallicTextureGreen,i.FUZZ_ROUGHNESS_FROM_TEXTURE_ALPHA=this._useFuzzRoughnessFromTextureAlpha,i.BASE_METALNESS_FROM_METALNESS_TEXTURE_BLUE=this._useMetallicFromMetallicTextureBlue,i.THIN_FILM_THICKNESS_FROM_THIN_FILM_TEXTURE=this._useThinFilmThicknessFromTextureGreen,i.GEOMETRY_THICKNESS_FROM_GREEN_CHANNEL=this._useGeometryThicknessFromGreenChannel,this.geometryNormalTexture?(this._useParallax&&this.baseColorTexture&&le.DiffuseTextureEnabled?(i.PARALLAX=!0,i.PARALLAX_RHS=o.useRightHandedSystem,i.PARALLAXOCCLUSION=!!this._useParallaxOcclusion):i.PARALLAX=!1,i.OBJECTSPACE_NORMALMAP=this._useObjectSpaceNormalMap):(i.PARALLAX=!1,i.PARALLAX_RHS=!1,i.PARALLAXOCCLUSION=!1,i.OBJECTSPACE_NORMALMAP=!1),this._environmentBRDFTexture&&le.ReflectionTextureEnabled?(i.ENVIRONMENTBRDF=!0,i.ENVIRONMENTBRDF_RGBD=this._environmentBRDFTexture.isRGBD):(i.ENVIRONMENTBRDF=!1,i.ENVIRONMENTBRDF_RGBD=!1),this._environmentFuzzBRDFTexture?i.FUZZENVIRONMENTBRDF=!0:i.FUZZENVIRONMENTBRDF=!1,this.hasTransparency){i.REFRACTED_BACKGROUND=!!this._backgroundRefractionTexture&&le.RefractionTextureEnabled,i.REFRACTION_HIGH_QUALITY_BLUR=this._refractionHighQualityBlur,i.REFRACTED_LIGHTS=!0;let m=this._getRadianceTexture();m?(i.REFRACTED_ENVIRONMENT=le.RefractionTextureEnabled,i.REFRACTED_ENVIRONMENT_OPPOSITEZ=this.getScene().useRightHandedSystem?!m.invertZ:m.invertZ,i.REFRACTED_ENVIRONMENT_LOCAL_CUBE=m.isCube&&m.boundingBoxSize):i.REFRACTED_ENVIRONMENT=!1}else i.REFRACTED_BACKGROUND=!1,i.REFRACTED_LIGHTS=!1,i.REFRACTED_ENVIRONMENT=!1;this._shouldUseAlphaFromBaseColorTexture()?i.ALPHA_FROM_BASE_COLOR_TEXTURE=!0:i.ALPHA_FROM_BASE_COLOR_TEXTURE=!1}this._lightFalloff===ve.LIGHTFALLOFF_STANDARD?(i.USEPHYSICALLIGHTFALLOFF=!1,i.USEGLTFLIGHTFALLOFF=!1):this._lightFalloff===ve.LIGHTFALLOFF_GLTF?(i.USEPHYSICALLIGHTFALLOFF=!1,i.USEGLTFLIGHTFALLOFF=!0):(i.USEPHYSICALLIGHTFALLOFF=!0,i.USEGLTFLIGHTFALLOFF=!1),!this.backFaceCulling&&this._twoSidedLighting?i.TWOSIDEDLIGHTING=!0:i.TWOSIDEDLIGHTING=!1,i.MIRRORED=!!o._mirroredCameraPosition,i.SPECULARAA=l.getCaps().standardDerivatives&&this._enableSpecularAntiAliasing}(i._areTexturesDirty||i._areMiscDirty)&&(i.ALPHATESTVALUE=`${this._alphaCutOff}${this._alphaCutOff%1===0?".":""}`,i.PREMULTIPLYALPHA=this.alphaMode===7||this.alphaMode===8,i.ALPHABLEND=this.needAlphaBlendingForMesh(e)),i._areImageProcessingDirty&&this._imageProcessingConfiguration&&this._imageProcessingConfiguration.prepareDefines(i),i.FORCENORMALFORWARD=this._forceNormalForward,i.RADIANCEOCCLUSION=this._useRadianceOcclusion,i.HORIZONOCCLUSION=this._useHorizonOcclusion,(this.specularRoughnessAnisotropy>0||this.coatRoughnessAnisotropy>0)&&n._noiseTextures[o.uniqueId]&&le.ReflectionTextureEnabled?(i.ANISOTROPIC=!0,e.isVerticesDataPresent(L.TangentKind)||(i._needUVs=!0,i.MAINUV1=!0),this._useGltfStyleAnisotropy&&(i.USE_GLTF_STYLE_ANISOTROPY=!0),i.ANISOTROPIC_BASE=this.specularRoughnessAnisotropy>0,i.ANISOTROPIC_COAT=this.coatRoughnessAnisotropy>0):(i.ANISOTROPIC=!1,i.USE_GLTF_STYLE_ANISOTROPY=!1,i.ANISOTROPIC_BASE=!1,i.ANISOTROPIC_COAT=!1),i.THIN_FILM=this.thinFilmWeight>0,i.IRIDESCENCE=this.thinFilmWeight>0,i.DISPERSION=this.transmissionDispersionScale>0,i.SCATTERING=this.hasScattering;let f=[8,16,32];if(i.SSS_SAMPLE_COUNT=(h=f[this._sssQuality])!=null?h:16,i.TRANSMISSION_SLAB=this.transmissionWeight>0,i.TRANSMISSION_SLAB_VOLUME=this.transmissionWeight>0&&this.transmissionDepth>0,i.SUBSURFACE_SLAB=this.subsurfaceWeight>0,!i.PREPASS&&(i.SUBSURFACE_SLAB||i.TRANSMISSION_SLAB_VOLUME)){let d=!1;if(!this.sssIrradianceTexture&&o.geometryBufferRenderer){let u=o.geometryBufferRenderer.getTextureIndex(Kn.IRRADIANCE_TEXTURE_TYPE);this.sssIrradianceTexture=o.geometryBufferRenderer.getGBuffer().textures[u],d=!0}if(!this.sssDepthTexture&&o.geometryBufferRenderer){let u=o.geometryBufferRenderer.getTextureIndex(Kn.SCREENSPACE_DEPTH_TEXTURE_TYPE);this.sssDepthTexture=o.geometryBufferRenderer.getGBuffer().textures[u],d=!0}this.sssIrradianceTexture&&this.sssDepthTexture&&(i.USE_IRRADIANCE_TEXTURE_FOR_SCATTERING=!0,d&&(i.USE_IRRADIANCE_TEXTURE_FOR_SCATTERING_GBUFFER=!0))}i.FUZZ=this.fuzzWeight>0&&le.ReflectionTextureEnabled,i.GEOMETRY_THIN_WALLED=this.geometryThinWalled!=0,i.FUZZ?(e.isVerticesDataPresent(L.TangentKind)||(i._needUVs=!0,i.MAINUV1=!0),this._environmentFuzzBRDFTexture=pD(this.getScene()),i.FUZZ_IBL_SAMPLES=this.fuzzSampleNumber):(this._environmentFuzzBRDFTexture=null,i.FUZZENVIRONMENTBRDF=!1,i.FUZZ_IBL_SAMPLES=0),i._areMiscDirty&&(fm(e,o,this._useLogarithmicDepth,this.pointsCloud,this.fogEnabled,this.needAlphaTestingForMesh(e),i,this._applyDecalMapAfterDetailMap,this._useVertexPulling,t,this._isVertexOutputInvariant),i.UNLIT=this._unlit||(this.pointsCloud||this.wireframe)&&!e.isVerticesDataPresent(L.NormalKind),i.DEBUGMODE=this._debugMode),um(o,l,this,i,!!r,s,a),this._eventInfo.defines=i,this._eventInfo.mesh=e,this._callbackPluginEventPrepareDefinesBeforeAttributes(this._eventInfo),mm(e,i,!0,!0,!0,this._transparencyMode!==ve.MATERIAL_OPAQUE),this._callbackPluginEventPrepareDefines(this._eventInfo)}};Oe.SSS_QUALITY_LOW=0;Oe.SSS_QUALITY_MEDIUM=1;Oe.SSS_QUALITY_HIGH=2;Oe._noiseTextures={};Oe.ForceGLSL=!1;P([dt("_markAllSubMeshesAsTexturesDirty","baseWeight")],Oe.prototype,"_baseWeight",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","baseWeightTexture")],Oe.prototype,"_baseWeightTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","baseColor")],Oe.prototype,"_baseColor",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","baseColorTexture")],Oe.prototype,"_baseColorTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","baseDiffuseRoughness")],Oe.prototype,"_baseDiffuseRoughness",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","baseDiffuseRoughnessTexture")],Oe.prototype,"_baseDiffuseRoughnessTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","baseMetalness")],Oe.prototype,"_baseMetalness",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","baseMetalnessTexture")],Oe.prototype,"_baseMetalnessTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","specularWeight")],Oe.prototype,"_specularWeight",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","specularWeightTexture")],Oe.prototype,"_specularWeightTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","specularColor")],Oe.prototype,"_specularColor",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","specularColorTexture")],Oe.prototype,"_specularColorTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","specularRoughness")],Oe.prototype,"_specularRoughness",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","specularRoughnessTexture")],Oe.prototype,"_specularRoughnessTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","specularRoughnessAnisotropy")],Oe.prototype,"_specularRoughnessAnisotropy",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","specularRoughnessAnisotropyTexture")],Oe.prototype,"_specularRoughnessAnisotropyTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","specularIor")],Oe.prototype,"_specularIor",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","transmissionWeight")],Oe.prototype,"_transmissionWeight",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","transmissionWeightTexture")],Oe.prototype,"_transmissionWeightTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","transmissionColor")],Oe.prototype,"_transmissionColor",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","transmissionColorTexture")],Oe.prototype,"_transmissionColorTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","transmissionDepth")],Oe.prototype,"_transmissionDepth",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","transmissionDepthTexture")],Oe.prototype,"_transmissionDepthTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","transmissionScatter")],Oe.prototype,"_transmissionScatter",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","transmissionScatterTexture")],Oe.prototype,"_transmissionScatterTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","transmissionScatterAnisotropy")],Oe.prototype,"_transmissionScatterAnisotropy",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","transmissionDispersionScale")],Oe.prototype,"_transmissionDispersionScale",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","transmissionDispersionScaleTexture")],Oe.prototype,"_transmissionDispersionScaleTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","transmissionDispersionAbbeNumber")],Oe.prototype,"_transmissionDispersionAbbeNumber",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","subsurfaceWeight")],Oe.prototype,"_subsurfaceWeight",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","subsurfaceWeightTexture")],Oe.prototype,"_subsurfaceWeightTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","subsurfaceColor")],Oe.prototype,"_subsurfaceColor",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","subsurfaceColorTexture")],Oe.prototype,"_subsurfaceColorTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","subsurfaceRadius")],Oe.prototype,"_subsurfaceRadius",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","subsurfaceRadiusScale")],Oe.prototype,"_subsurfaceRadiusScale",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","subsurfaceRadiusScaleTexture")],Oe.prototype,"_subsurfaceRadiusScaleTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","subsurfaceScatterAnisotropy")],Oe.prototype,"_subsurfaceScatterAnisotropy",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","coatWeight")],Oe.prototype,"_coatWeight",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","coatWeightTexture")],Oe.prototype,"_coatWeightTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","coatColor")],Oe.prototype,"_coatColor",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","coatColorTexture")],Oe.prototype,"_coatColorTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","coatRoughness")],Oe.prototype,"_coatRoughness",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","coatRoughnessTexture")],Oe.prototype,"_coatRoughnessTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","coatRoughnessAnisotropy")],Oe.prototype,"_coatRoughnessAnisotropy",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","coatRoughnessAnisotropyTexture")],Oe.prototype,"_coatRoughnessAnisotropyTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","coatIor")],Oe.prototype,"_coatIor",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","coatDarkening")],Oe.prototype,"_coatDarkening",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","coatDarkeningTexture")],Oe.prototype,"_coatDarkeningTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","fuzzWeight")],Oe.prototype,"_fuzzWeight",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","fuzzWeightTexture")],Oe.prototype,"_fuzzWeightTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","fuzzColor")],Oe.prototype,"_fuzzColor",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","fuzzColorTexture")],Oe.prototype,"_fuzzColorTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","fuzzRoughness")],Oe.prototype,"_fuzzRoughness",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","fuzzRoughnessTexture")],Oe.prototype,"_fuzzRoughnessTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","geometryThinWalled")],Oe.prototype,"_geometryThinWalled",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","geometryNormalTexture")],Oe.prototype,"_geometryNormalTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","geometryTangent")],Oe.prototype,"_geometryTangent",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","geometryTangentTexture")],Oe.prototype,"_geometryTangentTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","geometryCoatNormalTexture")],Oe.prototype,"_geometryCoatNormalTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","geometryCoatTangent")],Oe.prototype,"_geometryCoatTangent",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","geometryCoatTangentTexture")],Oe.prototype,"_geometryCoatTangentTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","geometryOpacity")],Oe.prototype,"_geometryOpacity",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","geometryOpacityTexture")],Oe.prototype,"_geometryOpacityTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","geometryThickness")],Oe.prototype,"_geometryThickness",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","geometryThicknessTexture")],Oe.prototype,"_geometryThicknessTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","emissionLuminance")],Oe.prototype,"_emissionLuminance",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","emissionColor")],Oe.prototype,"_emissionColor",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","emissionColorTexture")],Oe.prototype,"_emissionColorTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","thinFilmWeight")],Oe.prototype,"_thinFilmWeight",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","thinFilmWeightTexture")],Oe.prototype,"_thinFilmWeightTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","thinFilmThickness")],Oe.prototype,"_thinFilmThickness",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","thinFilmThicknessMin")],Oe.prototype,"_thinFilmThicknessMin",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","thinFilmThicknessTexture")],Oe.prototype,"_thinFilmThicknessTexture",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","thinFilmIor")],Oe.prototype,"_thinFilmIor",void 0);P([dt("_markAllSubMeshesAsTexturesDirty","ambientOcclusionTexture")],Oe.prototype,"_ambientOcclusionTexture",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"directIntensity",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"environmentIntensity",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"useSpecularWeightFromTextureAlpha",void 0);P([w(),oe("_markAllSubMeshesAsTexturesAndMiscDirty")],Oe.prototype,"forceAlphaTest",void 0);P([w(),oe("_markAllSubMeshesAsTexturesAndMiscDirty")],Oe.prototype,"alphaCutOff",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"useAmbientOcclusionFromMetallicTextureRed",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"useAmbientInGrayScale",void 0);P([w()],Oe.prototype,"usePhysicalLightFalloff",null);P([w()],Oe.prototype,"useGLTFLightFalloff",null);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"useObjectSpaceNormalMap",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"useParallax",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"useParallaxOcclusion",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"parallaxScaleBias",void 0);P([w(),oe("_markAllSubMeshesAsLightsDirty")],Oe.prototype,"disableLighting",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"forceIrradianceInFragment",void 0);P([w(),oe("_markAllSubMeshesAsLightsDirty")],Oe.prototype,"maxSimultaneousLights",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"invertNormalMapX",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"invertNormalMapY",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"twoSidedLighting",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"useAlphaFresnel",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"useLinearAlphaFresnel",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"environmentBRDFTexture",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"forceNormalForward",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"enableSpecularAntiAliasing",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"useHorizonOcclusion",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Oe.prototype,"useRadianceOcclusion",void 0);P([w(),oe("_markAllSubMeshesAsMiscDirty")],Oe.prototype,"unlit",void 0);P([w(),oe("_markAllSubMeshesAsMiscDirty")],Oe.prototype,"applyDecalMapAfterDetailMap",void 0);P([oe("_markAllSubMeshesAsMiscDirty")],Oe.prototype,"debugMode",void 0);P([w()],Oe.prototype,"transparencyMode",null);Ft("BABYLON.OpenPBRMaterial",Oe)});var I8={};$e(I8,{OpenPBRMaterialLoadingAdapter:()=>uL});var uL,M8=C(()=>{zt();uL=class{constructor(e){this._diffuseTransmissionTint=Te.White(),this._diffuseTransmissionTintTexture=null,this._material=e}get material(){return this._material}get isUnlit(){return this._material.unlit}set isUnlit(e){this._material.unlit=e}set backFaceCulling(e){this._material.backFaceCulling=e}get backFaceCulling(){return this._material.backFaceCulling}set twoSidedLighting(e){this._material.twoSidedLighting=e}get twoSidedLighting(){return this._material.twoSidedLighting}set alphaCutOff(e){}get alphaCutOff(){return .5}set useAlphaFromBaseColorTexture(e){this._material._useAlphaFromBaseColorTexture=e}get useAlphaFromBaseColorTexture(){return!1}get transparencyAsAlphaCoverage(){return!1}set transparencyAsAlphaCoverage(e){}set baseColor(e){this._material.baseColor=e}get baseColor(){return this._material.baseColor}set baseColorTexture(e){this._material.baseColorTexture=e}get baseColorTexture(){return this._material.baseColorTexture}set baseDiffuseRoughness(e){this._material.baseDiffuseRoughness=e}get baseDiffuseRoughness(){return this._material.baseDiffuseRoughness}set baseDiffuseRoughnessTexture(e){this._material.baseDiffuseRoughnessTexture=e}get baseDiffuseRoughnessTexture(){return this._material.baseDiffuseRoughnessTexture}set baseMetalness(e){this._material.baseMetalness=e}get baseMetalness(){return this._material.baseMetalness}set baseMetalnessTexture(e){this._material.baseMetalnessTexture=e}get baseMetalnessTexture(){return this._material.baseMetalnessTexture}set useRoughnessFromMetallicTextureGreen(e){this._material._useRoughnessFromMetallicTextureGreen=e}set useMetallicFromMetallicTextureBlue(e){this._material._useMetallicFromMetallicTextureBlue=e}enableSpecularEdgeColor(e=!1){}set specularWeight(e){this._material.specularWeight=e}get specularWeight(){return this._material.specularWeight}set specularWeightTexture(e){this._material.specularColorTexture===e?(this._material.specularWeightTexture=null,this._material._useSpecularWeightFromSpecularColorTexture=!0,this._material._useSpecularWeightFromAlpha=!0):this._material.specularWeightTexture=e}get specularWeightTexture(){return this._material.specularWeightTexture}set specularColor(e){this._material.specularColor=e}get specularColor(){return this._material.specularColor}set specularColorTexture(e){this._material.specularColorTexture=e,this._material.specularWeightTexture===this._material.specularColorTexture&&(this._material.specularWeightTexture=null,this._material._useSpecularWeightFromSpecularColorTexture=!0,this._material._useSpecularWeightFromAlpha=!0)}get specularColorTexture(){return this._material.specularColorTexture}set specularRoughness(e){this._material.specularRoughness=e}get specularRoughness(){return this._material.specularRoughness}set specularRoughnessTexture(e){this._material.specularRoughnessTexture=e}get specularRoughnessTexture(){return this._material.specularRoughnessTexture}set specularIor(e){this._material.specularIor=e}get specularIor(){return this._material.specularIor}set emissionColor(e){this._material.emissionColor=e}get emissionColor(){return this._material.emissionColor}set emissionLuminance(e){this._material.emissionLuminance=e}get emissionLuminance(){return this._material.emissionLuminance}set emissionColorTexture(e){this._material.emissionColorTexture=e}get emissionColorTexture(){return this._material.emissionColorTexture}set ambientOcclusionTexture(e){this._material.ambientOcclusionTexture=e}get ambientOcclusionTexture(){return this._material.ambientOcclusionTexture}set ambientOcclusionTextureStrength(e){let t=this._material.ambientOcclusionTexture;t&&(t.level=e)}get ambientOcclusionTextureStrength(){var t;let e=this._material.ambientOcclusionTexture;return(t=e==null?void 0:e.level)!=null?t:1}configureCoat(){}set coatWeight(e){this._material.coatWeight=e}get coatWeight(){return this._material.coatWeight}set coatWeightTexture(e){this._material.coatWeightTexture=e}get coatWeightTexture(){return this._material.coatWeightTexture}set coatColor(e){this._material.coatColor=e}set coatColorTexture(e){this._material.coatColorTexture=e}set coatRoughness(e){this._material.coatRoughness=e}get coatRoughness(){return this._material.coatRoughness}set coatRoughnessTexture(e){this._material.coatRoughnessTexture=e,e&&(this._material._useCoatRoughnessFromGreenChannel=!0)}get coatRoughnessTexture(){return this._material.coatRoughnessTexture}set coatIor(e){this._material.coatIor=e}set coatDarkening(e){this._material.coatDarkening=e}set coatDarkeningTexture(e){this._material.coatDarkeningTexture=e}set coatRoughnessAnisotropy(e){this._material.coatRoughnessAnisotropy=e}get coatRoughnessAnisotropy(){return this._material.coatRoughnessAnisotropy}set geometryCoatTangentAngle(e){this._material.geometryCoatTangentAngle=e}set geometryCoatTangentTexture(e){this._material.geometryCoatTangentTexture=e,e&&(this._material._useCoatRoughnessAnisotropyFromTangentTexture=!0)}get geometryCoatTangentTexture(){return this._material.geometryCoatTangentTexture}configureTransmission(){this._material.geometryThinWalled=1,this._material.transmissionDepth=0}set transmissionWeight(e){this._material.transmissionWeight=e}set transmissionWeightTexture(e){this._material.transmissionWeightTexture=e}get transmissionWeight(){return this._material.transmissionWeight}set transmissionScatter(e){this._material.transmissionScatter=e}get transmissionScatter(){return this._material.transmissionScatter}set transmissionScatterTexture(e){this._material.transmissionScatterTexture=e}get transmissionScatterTexture(){return this._material.transmissionScatterTexture}set transmissionScatterAnisotropy(e){this._material.transmissionScatterAnisotropy=e}set transmissionDispersionAbbeNumber(e){this._material.transmissionDispersionAbbeNumber=e}set transmissionDispersionScale(e){this._material.transmissionDispersionScale=e}set transmissionDepth(e){e!==Number.MAX_VALUE||this._material.transmissionDepth!==0?this._material.transmissionDepth=e:this._material.transmissionDepth=0}get transmissionDepth(){return this._material.transmissionDepth}set transmissionColor(e){e.equals(Te.White())||(this._material.transmissionColor=e)}get transmissionColor(){return this._material.transmissionColor}get refractionBackgroundTexture(){return this._material.backgroundRefractionTexture}set refractionBackgroundTexture(e){this._material.backgroundRefractionTexture=e}configureVolume(){this._material.geometryThinWalled=0}set geometryThinWalled(e){this._material.geometryThinWalled=e?1:0}get geometryThinWalled(){return!!this._material.geometryThinWalled}set volumeThicknessTexture(e){this._material.geometryThicknessTexture=e,this._material._useGeometryThicknessFromGreenChannel=!0}set volumeThickness(e){this._material.geometryThickness=e}configureSubsurface(){this._material.geometryThinWalled=1,this._material.subsurfaceScatterAnisotropy=1}set subsurfaceWeight(e){this._material.subsurfaceWeight=e}get subsurfaceWeight(){return this._material.subsurfaceWeight}set subsurfaceWeightTexture(e){this._material.subsurfaceWeightTexture=e}set subsurfaceColor(e){this._material.subsurfaceColor=e}set subsurfaceColorTexture(e){this._material.subsurfaceColorTexture=e}set diffuseTransmissionTint(e){this._diffuseTransmissionTint=e}get diffuseTransmissionTint(){return this._diffuseTransmissionTint}set diffuseTransmissionTintTexture(e){this._diffuseTransmissionTintTexture=e}get subsurfaceRadius(){return this._material.subsurfaceRadius}set subsurfaceRadius(e){this._material.subsurfaceRadius=e}get subsurfaceRadiusScale(){return this._material.subsurfaceRadiusScale}set subsurfaceRadiusScale(e){this._material.subsurfaceRadiusScale=e}set subsurfaceScatterAnisotropy(e){this._material.subsurfaceScatterAnisotropy=e}isTranslucent(){return this.transmissionWeight>0||this.subsurfaceWeight>0}configureFuzz(){}set fuzzWeight(e){this._material.fuzzWeight=e}set fuzzWeightTexture(e){this._material.fuzzWeightTexture=e}set fuzzColor(e){this._material.fuzzColor=e}set fuzzColorTexture(e){this._material.fuzzColorTexture=e}set fuzzRoughness(e){this._material.fuzzRoughness=e}set fuzzRoughnessTexture(e){this._material.fuzzRoughnessTexture=e,this._material._useFuzzRoughnessFromTextureAlpha=!0}set specularRoughnessAnisotropy(e){this._material.specularRoughnessAnisotropy=e}get specularRoughnessAnisotropy(){return this._material.specularRoughnessAnisotropy}set geometryTangentAngle(e){this._material.geometryTangentAngle=e}set geometryTangentTexture(e){this._material.geometryTangentTexture=e,this._material._useSpecularRoughnessAnisotropyFromTangentTexture=!0}get geometryTangentTexture(){return this._material.geometryTangentTexture}configureGltfStyleAnisotropy(e=!0){this._material._useGltfStyleAnisotropy=e}set thinFilmWeight(e){this._material.thinFilmWeight=e}set thinFilmIor(e){this._material.thinFilmIor=e}set thinFilmThicknessMinimum(e){this._material.thinFilmThicknessMin=e/1e3}set thinFilmThicknessMaximum(e){this._material.thinFilmThickness=e/1e3}set thinFilmWeightTexture(e){this._material.thinFilmWeightTexture=e}set thinFilmThicknessTexture(e){this._material.thinFilmThicknessTexture=e,this._material._useThinFilmThicknessFromTextureGreen=!0}set unlit(e){this._material.unlit=e}set geometryOpacity(e){this._material.geometryOpacity=e}get geometryOpacity(){return this._material.geometryOpacity}set geometryNormalTexture(e){this._material.geometryNormalTexture=e}get geometryNormalTexture(){return this._material.geometryNormalTexture}setNormalMapInversions(e,t){}set geometryCoatNormalTexture(e){this._material.geometryCoatNormalTexture=e}get geometryCoatNormalTexture(){return this._material.geometryCoatNormalTexture}set geometryCoatNormalTextureScale(e){this._material.geometryCoatNormalTexture&&(this._material.geometryCoatNormalTexture.level=e)}finalize(){(this._diffuseTransmissionTint&&!this._diffuseTransmissionTint.equals(Te.White())||this._diffuseTransmissionTintTexture)&&(this._material.geometryThinWalled?(this.subsurfaceColor=this._diffuseTransmissionTint,this.subsurfaceColorTexture=this._diffuseTransmissionTintTexture):this._material.coatWeight==0&&(!this.baseColor.equals(Te.White())||this.baseColorTexture)&&(this._material.coatWeight=this.subsurfaceWeight,this._material.coatWeightTexture=this.subsurfaceWeightTexture,this._material.coatColor=this._diffuseTransmissionTint,this._material.coatColorTexture=this._diffuseTransmissionTintTexture,this._material.coatIor=this._material.specularIor,this._material.coatDarkening=0,this._material.coatRoughness=this._material.specularRoughness,this._material.coatRoughnessTexture=this._material.specularRoughnessTexture,this._material.specularRoughness=1,this._material.specularRoughnessTexture=null)),this.transmissionWeight>0&&(this._material.geometryThinWalled||this._material.transmissionDepth===0?(this._material.transmissionColor=this._material.baseColor,this._material.transmissionColorTexture=this._material.baseColorTexture):this._material.coatWeight==0&&(!this.baseColor.equals(Te.White())||this.baseColorTexture!==null)&&(this._material.coatWeight=this.transmissionWeight,this._material.coatWeightTexture=this.transmissionWeightTexture,this._material.coatColor=this.baseColor,this._material.coatColorTexture=this.baseColorTexture,this._material.coatIor=this._material.specularIor,this._material.coatDarkening=0,this._material.coatRoughness=this._material.specularRoughness,this._material.coatRoughnessTexture=this._material.specularRoughnessTexture))}}});var mL,Ir,C8=C(()=>{kt();Ut();ya();yf();mL=class extends Sr{constructor(){super(...arguments),this.BRDF_V_HEIGHT_CORRELATED=!1,this.MS_BRDF_ENERGY_CONSERVATION=!1,this.SPHERICAL_HARMONICS=!1,this.SPECULAR_GLOSSINESS_ENERGY_CONSERVATION=!1,this.MIX_IBL_RADIANCE_WITH_IRRADIANCE=!0,this.LEGACY_SPECULAR_ENERGY_CONSERVATION=!1,this.BASE_DIFFUSE_MODEL=0,this.DIELECTRIC_SPECULAR_MODEL=0,this.CONDUCTOR_SPECULAR_MODEL=0}},Ir=class n extends wr{_markAllSubMeshesAsMiscDirty(){this._internalMarkAllSubMeshesAsMiscDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"PBRBRDF",90,new mL,t),this._useEnergyConservation=n.DEFAULT_USE_ENERGY_CONSERVATION,this.useEnergyConservation=n.DEFAULT_USE_ENERGY_CONSERVATION,this._useSmithVisibilityHeightCorrelated=n.DEFAULT_USE_SMITH_VISIBILITY_HEIGHT_CORRELATED,this.useSmithVisibilityHeightCorrelated=n.DEFAULT_USE_SMITH_VISIBILITY_HEIGHT_CORRELATED,this._useSphericalHarmonics=n.DEFAULT_USE_SPHERICAL_HARMONICS,this.useSphericalHarmonics=n.DEFAULT_USE_SPHERICAL_HARMONICS,this._useSpecularGlossinessInputEnergyConservation=n.DEFAULT_USE_SPECULAR_GLOSSINESS_INPUT_ENERGY_CONSERVATION,this.useSpecularGlossinessInputEnergyConservation=n.DEFAULT_USE_SPECULAR_GLOSSINESS_INPUT_ENERGY_CONSERVATION,this._mixIblRadianceWithIrradiance=n.DEFAULT_MIX_IBL_RADIANCE_WITH_IRRADIANCE,this.mixIblRadianceWithIrradiance=n.DEFAULT_MIX_IBL_RADIANCE_WITH_IRRADIANCE,this._useLegacySpecularEnergyConservation=n.DEFAULT_USE_LEGACY_SPECULAR_ENERGY_CONSERVATION,this.useLegacySpecularEnergyConservation=n.DEFAULT_USE_LEGACY_SPECULAR_ENERGY_CONSERVATION,this._baseDiffuseModel=n.DEFAULT_DIFFUSE_MODEL,this.baseDiffuseModel=n.DEFAULT_DIFFUSE_MODEL,this._dielectricSpecularModel=n.DEFAULT_DIELECTRIC_SPECULAR_MODEL,this.dielectricSpecularModel=n.DEFAULT_DIELECTRIC_SPECULAR_MODEL,this._conductorSpecularModel=n.DEFAULT_CONDUCTOR_SPECULAR_MODEL,this.conductorSpecularModel=n.DEFAULT_CONDUCTOR_SPECULAR_MODEL,this._internalMarkAllSubMeshesAsMiscDirty=e._dirtyCallbacks[16],this._enable(!0)}prepareDefines(e){e.BRDF_V_HEIGHT_CORRELATED=this._useSmithVisibilityHeightCorrelated,e.MS_BRDF_ENERGY_CONSERVATION=this._useEnergyConservation&&this._useSmithVisibilityHeightCorrelated,e.SPHERICAL_HARMONICS=this._useSphericalHarmonics,e.SPECULAR_GLOSSINESS_ENERGY_CONSERVATION=this._useSpecularGlossinessInputEnergyConservation,e.MIX_IBL_RADIANCE_WITH_IRRADIANCE=this._mixIblRadianceWithIrradiance&&!this._material._disableLighting,e.LEGACY_SPECULAR_ENERGY_CONSERVATION=this._useLegacySpecularEnergyConservation,e.BASE_DIFFUSE_MODEL=this._baseDiffuseModel,e.DIELECTRIC_SPECULAR_MODEL=this._dielectricSpecularModel,e.CONDUCTOR_SPECULAR_MODEL=this._conductorSpecularModel}getClassName(){return"PBRBRDFConfiguration"}};Ir.DEFAULT_USE_ENERGY_CONSERVATION=!0;Ir.DEFAULT_USE_SMITH_VISIBILITY_HEIGHT_CORRELATED=!0;Ir.DEFAULT_USE_SPHERICAL_HARMONICS=!0;Ir.DEFAULT_USE_SPECULAR_GLOSSINESS_INPUT_ENERGY_CONSERVATION=!0;Ir.DEFAULT_MIX_IBL_RADIANCE_WITH_IRRADIANCE=!0;Ir.DEFAULT_USE_LEGACY_SPECULAR_ENERGY_CONSERVATION=!0;Ir.DEFAULT_DIFFUSE_MODEL=0;Ir.DEFAULT_DIELECTRIC_SPECULAR_MODEL=0;Ir.DEFAULT_CONDUCTOR_SPECULAR_MODEL=0;P([w(),oe("_markAllSubMeshesAsMiscDirty")],Ir.prototype,"useEnergyConservation",void 0);P([w(),oe("_markAllSubMeshesAsMiscDirty")],Ir.prototype,"useSmithVisibilityHeightCorrelated",void 0);P([w(),oe("_markAllSubMeshesAsMiscDirty")],Ir.prototype,"useSphericalHarmonics",void 0);P([w(),oe("_markAllSubMeshesAsMiscDirty")],Ir.prototype,"useSpecularGlossinessInputEnergyConservation",void 0);P([w(),oe("_markAllSubMeshesAsMiscDirty")],Ir.prototype,"mixIblRadianceWithIrradiance",void 0);P([w(),oe("_markAllSubMeshesAsMiscDirty")],Ir.prototype,"useLegacySpecularEnergyConservation",void 0);P([w("baseDiffuseModel"),oe("_markAllSubMeshesAsMiscDirty")],Ir.prototype,"baseDiffuseModel",void 0);P([w("dielectricSpecularModel"),oe("_markAllSubMeshesAsMiscDirty")],Ir.prototype,"dielectricSpecularModel",void 0);P([w("conductorSpecularModel"),oe("_markAllSubMeshesAsMiscDirty")],Ir.prototype,"conductorSpecularModel",void 0)});var pL,tn,y8=C(()=>{kt();Ut();zt();Ma();yf();ya();yn();pL=class extends Sr{constructor(){super(...arguments),this.CLEARCOAT=!1,this.CLEARCOAT_DEFAULTIOR=!1,this.CLEARCOAT_TEXTURE=!1,this.CLEARCOAT_TEXTURE_ROUGHNESS=!1,this.CLEARCOAT_TEXTUREDIRECTUV=0,this.CLEARCOAT_TEXTURE_ROUGHNESSDIRECTUV=0,this.CLEARCOAT_BUMP=!1,this.CLEARCOAT_BUMPDIRECTUV=0,this.CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE=!1,this.CLEARCOAT_REMAP_F0=!1,this.CLEARCOAT_TINT=!1,this.CLEARCOAT_TINT_TEXTURE=!1,this.CLEARCOAT_TINT_TEXTUREDIRECTUV=0,this.CLEARCOAT_TINT_GAMMATEXTURE=!1}},tn=class n extends wr{_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"PBRClearCoat",100,new pL,t),this._isEnabled=!1,this.isEnabled=!1,this.intensity=1,this.roughness=0,this._indexOfRefraction=n._DefaultIndexOfRefraction,this.indexOfRefraction=n._DefaultIndexOfRefraction,this._texture=null,this.texture=null,this._useRoughnessFromMainTexture=!0,this.useRoughnessFromMainTexture=!0,this._textureRoughness=null,this.textureRoughness=null,this._remapF0OnInterfaceChange=!0,this.remapF0OnInterfaceChange=!0,this._bumpTexture=null,this.bumpTexture=null,this._isTintEnabled=!1,this.isTintEnabled=!1,this.tintColor=Te.White(),this.tintColorAtDistance=1,this.tintThickness=1,this._tintTexture=null,this.tintTexture=null,this._internalMarkAllSubMeshesAsTexturesDirty=e._dirtyCallbacks[1]}isReadyForSubMesh(e,t,i){if(!this._isEnabled)return!0;let r=this._material._disableBumpMap;return!(e._areTexturesDirty&&t.texturesEnabled&&(this._texture&&le.ClearCoatTextureEnabled&&!this._texture.isReadyOrNotBlocking()||this._textureRoughness&&le.ClearCoatTextureEnabled&&!this._textureRoughness.isReadyOrNotBlocking()||i.getCaps().standardDerivatives&&this._bumpTexture&&le.ClearCoatBumpTextureEnabled&&!r&&!this._bumpTexture.isReady()||this._isTintEnabled&&this._tintTexture&&le.ClearCoatTintTextureEnabled&&!this._tintTexture.isReadyOrNotBlocking()))}prepareDefinesBeforeAttributes(e,t){this._isEnabled?(e.CLEARCOAT=!0,e.CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE=this._useRoughnessFromMainTexture,e.CLEARCOAT_REMAP_F0=this._remapF0OnInterfaceChange,e._areTexturesDirty&&t.texturesEnabled&&(this._texture&&le.ClearCoatTextureEnabled?ri(this._texture,e,"CLEARCOAT_TEXTURE"):e.CLEARCOAT_TEXTURE=!1,this._textureRoughness&&le.ClearCoatTextureEnabled?ri(this._textureRoughness,e,"CLEARCOAT_TEXTURE_ROUGHNESS"):e.CLEARCOAT_TEXTURE_ROUGHNESS=!1,this._bumpTexture&&le.ClearCoatBumpTextureEnabled?ri(this._bumpTexture,e,"CLEARCOAT_BUMP"):e.CLEARCOAT_BUMP=!1,e.CLEARCOAT_DEFAULTIOR=this._indexOfRefraction===n._DefaultIndexOfRefraction,this._isTintEnabled?(e.CLEARCOAT_TINT=!0,this._tintTexture&&le.ClearCoatTintTextureEnabled?(ri(this._tintTexture,e,"CLEARCOAT_TINT_TEXTURE"),e.CLEARCOAT_TINT_GAMMATEXTURE=this._tintTexture.gammaSpace):e.CLEARCOAT_TINT_TEXTURE=!1):(e.CLEARCOAT_TINT=!1,e.CLEARCOAT_TINT_TEXTURE=!1))):(e.CLEARCOAT=!1,e.CLEARCOAT_TEXTURE=!1,e.CLEARCOAT_TEXTURE_ROUGHNESS=!1,e.CLEARCOAT_BUMP=!1,e.CLEARCOAT_TINT=!1,e.CLEARCOAT_TINT_TEXTURE=!1,e.CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE=!1,e.CLEARCOAT_DEFAULTIOR=!1,e.CLEARCOAT_TEXTUREDIRECTUV=0,e.CLEARCOAT_TEXTURE_ROUGHNESSDIRECTUV=0,e.CLEARCOAT_BUMPDIRECTUV=0,e.CLEARCOAT_REMAP_F0=!1,e.CLEARCOAT_TINT_TEXTUREDIRECTUV=0,e.CLEARCOAT_TINT_GAMMATEXTURE=!1)}bindForSubMesh(e,t,i,r){var f,h,d,u,m,_,p,g;if(!this._isEnabled)return;let s=r.materialDefines,a=this._material.isFrozen,o=this._material._disableBumpMap,l=this._material._invertNormalMapX,c=this._material._invertNormalMapY;if(!e.useUbo||!a||!e.isSync){(this._texture||this._textureRoughness)&&le.ClearCoatTextureEnabled&&(e.updateFloat4("vClearCoatInfos",(h=(f=this._texture)==null?void 0:f.coordinatesIndex)!=null?h:0,(u=(d=this._texture)==null?void 0:d.level)!=null?u:0,(_=(m=this._textureRoughness)==null?void 0:m.coordinatesIndex)!=null?_:0,(g=(p=this._textureRoughness)==null?void 0:p.level)!=null?g:0),this._texture&&ni(this._texture,e,"clearCoat"),this._textureRoughness&&!s.CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE&&ni(this._textureRoughness,e,"clearCoatRoughness")),this._bumpTexture&&i.getCaps().standardDerivatives&&le.ClearCoatTextureEnabled&&!o&&(e.updateFloat2("vClearCoatBumpInfos",this._bumpTexture.coordinatesIndex,this._bumpTexture.level),ni(this._bumpTexture,e,"clearCoatBump"),t._mirroredCameraPosition?e.updateFloat2("vClearCoatTangentSpaceParams",l?1:-1,c?1:-1):e.updateFloat2("vClearCoatTangentSpaceParams",l?-1:1,c?-1:1)),this._tintTexture&&le.ClearCoatTintTextureEnabled&&(e.updateFloat2("vClearCoatTintInfos",this._tintTexture.coordinatesIndex,this._tintTexture.level),ni(this._tintTexture,e,"clearCoatTint")),e.updateFloat2("vClearCoatParams",this.intensity,this.roughness);let v=1-this._indexOfRefraction,x=1+this._indexOfRefraction,A=Math.pow(-v/x,2),S=1/this._indexOfRefraction;e.updateFloat4("vClearCoatRefractionParams",A,S,v,x),this._isTintEnabled&&(e.updateFloat4("vClearCoatTintParams",this.tintColor.r,this.tintColor.g,this.tintColor.b,Math.max(1e-5,this.tintThickness)),e.updateFloat("clearCoatColorAtDistance",Math.max(1e-5,this.tintColorAtDistance)))}t.texturesEnabled&&(this._texture&&le.ClearCoatTextureEnabled&&e.setTexture("clearCoatSampler",this._texture),this._textureRoughness&&!s.CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE&&le.ClearCoatTextureEnabled&&e.setTexture("clearCoatRoughnessSampler",this._textureRoughness),this._bumpTexture&&i.getCaps().standardDerivatives&&le.ClearCoatBumpTextureEnabled&&!o&&e.setTexture("clearCoatBumpSampler",this._bumpTexture),this._isTintEnabled&&this._tintTexture&&le.ClearCoatTintTextureEnabled&&e.setTexture("clearCoatTintSampler",this._tintTexture))}hasTexture(e){return this._texture===e||this._textureRoughness===e||this._bumpTexture===e||this._tintTexture===e}getActiveTextures(e){this._texture&&e.push(this._texture),this._textureRoughness&&e.push(this._textureRoughness),this._bumpTexture&&e.push(this._bumpTexture),this._tintTexture&&e.push(this._tintTexture)}getAnimatables(e){this._texture&&this._texture.animations&&this._texture.animations.length>0&&e.push(this._texture),this._textureRoughness&&this._textureRoughness.animations&&this._textureRoughness.animations.length>0&&e.push(this._textureRoughness),this._bumpTexture&&this._bumpTexture.animations&&this._bumpTexture.animations.length>0&&e.push(this._bumpTexture),this._tintTexture&&this._tintTexture.animations&&this._tintTexture.animations.length>0&&e.push(this._tintTexture)}dispose(e){var t,i,r,s;e&&((t=this._texture)==null||t.dispose(),(i=this._textureRoughness)==null||i.dispose(),(r=this._bumpTexture)==null||r.dispose(),(s=this._tintTexture)==null||s.dispose())}getClassName(){return"PBRClearCoatConfiguration"}addFallbacks(e,t,i){return e.CLEARCOAT_BUMP&&t.addFallback(i++,"CLEARCOAT_BUMP"),e.CLEARCOAT_TINT&&t.addFallback(i++,"CLEARCOAT_TINT"),e.CLEARCOAT&&t.addFallback(i++,"CLEARCOAT"),i}getSamplers(e){e.push("clearCoatSampler","clearCoatRoughnessSampler","clearCoatBumpSampler","clearCoatTintSampler")}getUniforms(){return{ubo:[{name:"vClearCoatParams",size:2,type:"vec2"},{name:"vClearCoatRefractionParams",size:4,type:"vec4"},{name:"vClearCoatInfos",size:4,type:"vec4"},{name:"clearCoatMatrix",size:16,type:"mat4"},{name:"clearCoatRoughnessMatrix",size:16,type:"mat4"},{name:"vClearCoatBumpInfos",size:2,type:"vec2"},{name:"vClearCoatTangentSpaceParams",size:2,type:"vec2"},{name:"clearCoatBumpMatrix",size:16,type:"mat4"},{name:"vClearCoatTintParams",size:4,type:"vec4"},{name:"clearCoatColorAtDistance",size:1,type:"float"},{name:"vClearCoatTintInfos",size:2,type:"vec2"},{name:"clearCoatTintMatrix",size:16,type:"mat4"}]}}};tn._DefaultIndexOfRefraction=1.5;P([w(),oe("_markAllSubMeshesAsTexturesDirty")],tn.prototype,"isEnabled",void 0);P([w()],tn.prototype,"intensity",void 0);P([w()],tn.prototype,"roughness",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],tn.prototype,"indexOfRefraction",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],tn.prototype,"texture",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],tn.prototype,"useRoughnessFromMainTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],tn.prototype,"textureRoughness",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],tn.prototype,"remapF0OnInterfaceChange",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],tn.prototype,"bumpTexture",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],tn.prototype,"isTintEnabled",void 0);P([mr()],tn.prototype,"tintColor",void 0);P([w()],tn.prototype,"tintColorAtDistance",void 0);P([w()],tn.prototype,"tintThickness",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],tn.prototype,"tintTexture",void 0)});var _L,xs,P8=C(()=>{kt();Ut();Ma();yf();ya();yn();_L=class extends Sr{constructor(){super(...arguments),this.IRIDESCENCE=!1,this.IRIDESCENCE_TEXTURE=!1,this.IRIDESCENCE_TEXTUREDIRECTUV=0,this.IRIDESCENCE_THICKNESS_TEXTURE=!1,this.IRIDESCENCE_THICKNESS_TEXTUREDIRECTUV=0}},xs=class n extends wr{_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"PBRIridescence",110,new _L,t),this._isEnabled=!1,this.isEnabled=!1,this.intensity=1,this.minimumThickness=n._DefaultMinimumThickness,this.maximumThickness=n._DefaultMaximumThickness,this.indexOfRefraction=n._DefaultIndexOfRefraction,this._texture=null,this.texture=null,this._thicknessTexture=null,this.thicknessTexture=null,this._internalMarkAllSubMeshesAsTexturesDirty=e._dirtyCallbacks[1]}isReadyForSubMesh(e,t){return this._isEnabled?!(e._areTexturesDirty&&t.texturesEnabled&&(this._texture&&le.IridescenceTextureEnabled&&!this._texture.isReadyOrNotBlocking()||this._thicknessTexture&&le.IridescenceTextureEnabled&&!this._thicknessTexture.isReadyOrNotBlocking())):!0}prepareDefinesBeforeAttributes(e,t){this._isEnabled?(e.IRIDESCENCE=!0,e._areTexturesDirty&&t.texturesEnabled&&(this._texture&&le.IridescenceTextureEnabled?ri(this._texture,e,"IRIDESCENCE_TEXTURE"):e.IRIDESCENCE_TEXTURE=!1,this._thicknessTexture&&le.IridescenceTextureEnabled?ri(this._thicknessTexture,e,"IRIDESCENCE_THICKNESS_TEXTURE"):e.IRIDESCENCE_THICKNESS_TEXTURE=!1)):(e.IRIDESCENCE=!1,e.IRIDESCENCE_TEXTURE=!1,e.IRIDESCENCE_THICKNESS_TEXTURE=!1,e.IRIDESCENCE_TEXTUREDIRECTUV=0,e.IRIDESCENCE_THICKNESS_TEXTUREDIRECTUV=0)}bindForSubMesh(e,t){var r,s,a,o,l,c,f,h;if(!this._isEnabled)return;let i=this._material.isFrozen;(!e.useUbo||!i||!e.isSync)&&((this._texture||this._thicknessTexture)&&le.IridescenceTextureEnabled&&(e.updateFloat4("vIridescenceInfos",(s=(r=this._texture)==null?void 0:r.coordinatesIndex)!=null?s:0,(o=(a=this._texture)==null?void 0:a.level)!=null?o:0,(c=(l=this._thicknessTexture)==null?void 0:l.coordinatesIndex)!=null?c:0,(h=(f=this._thicknessTexture)==null?void 0:f.level)!=null?h:0),this._texture&&ni(this._texture,e,"iridescence"),this._thicknessTexture&&ni(this._thicknessTexture,e,"iridescenceThickness")),e.updateFloat4("vIridescenceParams",this.intensity,this.indexOfRefraction,this.minimumThickness,this.maximumThickness)),t.texturesEnabled&&(this._texture&&le.IridescenceTextureEnabled&&e.setTexture("iridescenceSampler",this._texture),this._thicknessTexture&&le.IridescenceTextureEnabled&&e.setTexture("iridescenceThicknessSampler",this._thicknessTexture))}hasTexture(e){return this._texture===e||this._thicknessTexture===e}getActiveTextures(e){this._texture&&e.push(this._texture),this._thicknessTexture&&e.push(this._thicknessTexture)}getAnimatables(e){this._texture&&this._texture.animations&&this._texture.animations.length>0&&e.push(this._texture),this._thicknessTexture&&this._thicknessTexture.animations&&this._thicknessTexture.animations.length>0&&e.push(this._thicknessTexture)}dispose(e){var t,i;e&&((t=this._texture)==null||t.dispose(),(i=this._thicknessTexture)==null||i.dispose())}getClassName(){return"PBRIridescenceConfiguration"}addFallbacks(e,t,i){return e.IRIDESCENCE&&t.addFallback(i++,"IRIDESCENCE"),i}getSamplers(e){e.push("iridescenceSampler","iridescenceThicknessSampler")}getUniforms(){return{ubo:[{name:"vIridescenceParams",size:4,type:"vec4"},{name:"vIridescenceInfos",size:4,type:"vec4"},{name:"iridescenceMatrix",size:16,type:"mat4"},{name:"iridescenceThicknessMatrix",size:16,type:"mat4"}]}}};xs._DefaultMinimumThickness=100;xs._DefaultMaximumThickness=400;xs._DefaultIndexOfRefraction=1.3;P([w(),oe("_markAllSubMeshesAsTexturesDirty")],xs.prototype,"isEnabled",void 0);P([w()],xs.prototype,"intensity",void 0);P([w()],xs.prototype,"minimumThickness",void 0);P([w()],xs.prototype,"maximumThickness",void 0);P([w()],xs.prototype,"indexOfRefraction",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],xs.prototype,"texture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],xs.prototype,"thicknessTexture",void 0)});var gL,Ec,D8=C(()=>{kt();Ut();Ui();Ge();Ma();yf();ya();yn();gL=class extends Sr{constructor(){super(...arguments),this.ANISOTROPIC=!1,this.ANISOTROPIC_TEXTURE=!1,this.ANISOTROPIC_TEXTUREDIRECTUV=0,this.ANISOTROPIC_LEGACY=!1,this.MAINUV1=!1}},Ec=class extends wr{set angle(e){this.direction.x=Math.cos(e),this.direction.y=Math.sin(e)}get angle(){return Math.atan2(this.direction.y,this.direction.x)}_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}_markAllSubMeshesAsMiscDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsMiscDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"PBRAnisotropic",110,new gL,t),this._isEnabled=!1,this.isEnabled=!1,this.intensity=1,this.direction=new Ne(1,0),this._texture=null,this.texture=null,this._legacy=!1,this.legacy=!1,this._internalMarkAllSubMeshesAsTexturesDirty=e._dirtyCallbacks[1],this._internalMarkAllSubMeshesAsMiscDirty=e._dirtyCallbacks[16]}isReadyForSubMesh(e,t){return this._isEnabled?!(e._areTexturesDirty&&t.texturesEnabled&&this._texture&&le.AnisotropicTextureEnabled&&!this._texture.isReadyOrNotBlocking()):!0}prepareDefinesBeforeAttributes(e,t,i){this._isEnabled?(e.ANISOTROPIC=this._isEnabled,this._isEnabled&&!i.isVerticesDataPresent(L.TangentKind)&&(e._needUVs=!0,e.MAINUV1=!0),e._areTexturesDirty&&t.texturesEnabled&&(this._texture&&le.AnisotropicTextureEnabled?ri(this._texture,e,"ANISOTROPIC_TEXTURE"):e.ANISOTROPIC_TEXTURE=!1),e._areMiscDirty&&(e.ANISOTROPIC_LEGACY=this._legacy)):(e.ANISOTROPIC=!1,e.ANISOTROPIC_TEXTURE=!1,e.ANISOTROPIC_TEXTUREDIRECTUV=0,e.ANISOTROPIC_LEGACY=!1)}bindForSubMesh(e,t){if(!this._isEnabled)return;let i=this._material.isFrozen;(!e.useUbo||!i||!e.isSync)&&(this._texture&&le.AnisotropicTextureEnabled&&(e.updateFloat2("vAnisotropyInfos",this._texture.coordinatesIndex,this._texture.level),ni(this._texture,e,"anisotropy")),e.updateFloat3("vAnisotropy",this.direction.x,this.direction.y,this.intensity)),t.texturesEnabled&&this._texture&&le.AnisotropicTextureEnabled&&e.setTexture("anisotropySampler",this._texture)}hasTexture(e){return this._texture===e}getActiveTextures(e){this._texture&&e.push(this._texture)}getAnimatables(e){this._texture&&this._texture.animations&&this._texture.animations.length>0&&e.push(this._texture)}dispose(e){e&&this._texture&&this._texture.dispose()}getClassName(){return"PBRAnisotropicConfiguration"}addFallbacks(e,t,i){return e.ANISOTROPIC&&t.addFallback(i++,"ANISOTROPIC"),i}getSamplers(e){e.push("anisotropySampler")}getUniforms(){return{ubo:[{name:"vAnisotropy",size:3,type:"vec3"},{name:"vAnisotropyInfos",size:2,type:"vec2"},{name:"anisotropyMatrix",size:16,type:"mat4"}]}}parse(e,t,i){super.parse(e,t,i),e.legacy===void 0&&(this.legacy=!0)}};P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Ec.prototype,"isEnabled",void 0);P([w()],Ec.prototype,"intensity",void 0);P([Gu()],Ec.prototype,"direction",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],Ec.prototype,"texture",void 0);P([w(),oe("_markAllSubMeshesAsMiscDirty")],Ec.prototype,"legacy",void 0)});var vL,Ks,L8=C(()=>{kt();Ut();zt();Ma();yf();ya();yn();vL=class extends Sr{constructor(){super(...arguments),this.SHEEN=!1,this.SHEEN_TEXTURE=!1,this.SHEEN_GAMMATEXTURE=!1,this.SHEEN_TEXTURE_ROUGHNESS=!1,this.SHEEN_TEXTUREDIRECTUV=0,this.SHEEN_TEXTURE_ROUGHNESSDIRECTUV=0,this.SHEEN_LINKWITHALBEDO=!1,this.SHEEN_ROUGHNESS=!1,this.SHEEN_ALBEDOSCALING=!1,this.SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE=!1}},Ks=class extends wr{_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"Sheen",120,new vL,t),this._isEnabled=!1,this.isEnabled=!1,this._linkSheenWithAlbedo=!1,this.linkSheenWithAlbedo=!1,this.intensity=1,this.color=Te.White(),this._texture=null,this.texture=null,this._useRoughnessFromMainTexture=!0,this.useRoughnessFromMainTexture=!0,this._roughness=null,this.roughness=null,this._textureRoughness=null,this.textureRoughness=null,this._albedoScaling=!1,this.albedoScaling=!1,this._internalMarkAllSubMeshesAsTexturesDirty=e._dirtyCallbacks[1]}isReadyForSubMesh(e,t){return this._isEnabled?!(e._areTexturesDirty&&t.texturesEnabled&&(this._texture&&le.SheenTextureEnabled&&!this._texture.isReadyOrNotBlocking()||this._textureRoughness&&le.SheenTextureEnabled&&!this._textureRoughness.isReadyOrNotBlocking())):!0}prepareDefinesBeforeAttributes(e,t){this._isEnabled?(e.SHEEN=!0,e.SHEEN_LINKWITHALBEDO=this._linkSheenWithAlbedo,e.SHEEN_ROUGHNESS=this._roughness!==null,e.SHEEN_ALBEDOSCALING=this._albedoScaling,e.SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE=this._useRoughnessFromMainTexture,e._areTexturesDirty&&t.texturesEnabled&&(this._texture&&le.SheenTextureEnabled?(ri(this._texture,e,"SHEEN_TEXTURE"),e.SHEEN_GAMMATEXTURE=this._texture.gammaSpace):e.SHEEN_TEXTURE=!1,this._textureRoughness&&le.SheenTextureEnabled?ri(this._textureRoughness,e,"SHEEN_TEXTURE_ROUGHNESS"):e.SHEEN_TEXTURE_ROUGHNESS=!1)):(e.SHEEN=!1,e.SHEEN_TEXTURE=!1,e.SHEEN_TEXTURE_ROUGHNESS=!1,e.SHEEN_LINKWITHALBEDO=!1,e.SHEEN_ROUGHNESS=!1,e.SHEEN_ALBEDOSCALING=!1,e.SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE=!1,e.SHEEN_GAMMATEXTURE=!1,e.SHEEN_TEXTUREDIRECTUV=0,e.SHEEN_TEXTURE_ROUGHNESSDIRECTUV=0)}bindForSubMesh(e,t,i,r){var o,l,c,f,h,d,u,m;if(!this._isEnabled)return;let s=r.materialDefines,a=this._material.isFrozen;(!e.useUbo||!a||!e.isSync)&&((this._texture||this._textureRoughness)&&le.SheenTextureEnabled&&(e.updateFloat4("vSheenInfos",(l=(o=this._texture)==null?void 0:o.coordinatesIndex)!=null?l:0,(f=(c=this._texture)==null?void 0:c.level)!=null?f:0,(d=(h=this._textureRoughness)==null?void 0:h.coordinatesIndex)!=null?d:0,(m=(u=this._textureRoughness)==null?void 0:u.level)!=null?m:0),this._texture&&ni(this._texture,e,"sheen"),this._textureRoughness&&!s.SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE&&ni(this._textureRoughness,e,"sheenRoughness")),e.updateFloat4("vSheenColor",this.color.r,this.color.g,this.color.b,this.intensity),this._roughness!==null&&e.updateFloat("vSheenRoughness",this._roughness)),t.texturesEnabled&&(this._texture&&le.SheenTextureEnabled&&e.setTexture("sheenSampler",this._texture),this._textureRoughness&&!s.SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE&&le.SheenTextureEnabled&&e.setTexture("sheenRoughnessSampler",this._textureRoughness))}hasTexture(e){return this._texture===e||this._textureRoughness===e}getActiveTextures(e){this._texture&&e.push(this._texture),this._textureRoughness&&e.push(this._textureRoughness)}getAnimatables(e){this._texture&&this._texture.animations&&this._texture.animations.length>0&&e.push(this._texture),this._textureRoughness&&this._textureRoughness.animations&&this._textureRoughness.animations.length>0&&e.push(this._textureRoughness)}dispose(e){var t,i;e&&((t=this._texture)==null||t.dispose(),(i=this._textureRoughness)==null||i.dispose())}getClassName(){return"PBRSheenConfiguration"}addFallbacks(e,t,i){return e.SHEEN&&t.addFallback(i++,"SHEEN"),i}getSamplers(e){e.push("sheenSampler","sheenRoughnessSampler")}getUniforms(){return{ubo:[{name:"vSheenColor",size:4,type:"vec4"},{name:"vSheenRoughness",size:1,type:"float"},{name:"vSheenInfos",size:4,type:"vec4"},{name:"sheenMatrix",size:16,type:"mat4"},{name:"sheenRoughnessMatrix",size:16,type:"mat4"}]}}};P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Ks.prototype,"isEnabled",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Ks.prototype,"linkSheenWithAlbedo",void 0);P([w()],Ks.prototype,"intensity",void 0);P([mr()],Ks.prototype,"color",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],Ks.prototype,"texture",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Ks.prototype,"useRoughnessFromMainTexture",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Ks.prototype,"roughness",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],Ks.prototype,"textureRoughness",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Ks.prototype,"albedoScaling",void 0)});var EL,Ai,O8=C(()=>{kt();Ut();zt();Ma();Ge();yf();ya();yn();EL=class extends Sr{constructor(){super(...arguments),this.SUBSURFACE=!1,this.SS_REFRACTION=!1,this.SS_REFRACTION_USE_INTENSITY_FROM_THICKNESS=!1,this.SS_TRANSLUCENCY=!1,this.SS_TRANSLUCENCY_USE_INTENSITY_FROM_THICKNESS=!1,this.SS_SCATTERING=!1,this.SS_DISPERSION=!1,this.SS_THICKNESSANDMASK_TEXTURE=!1,this.SS_THICKNESSANDMASK_TEXTUREDIRECTUV=0,this.SS_HAS_THICKNESS=!1,this.SS_REFRACTIONINTENSITY_TEXTURE=!1,this.SS_REFRACTIONINTENSITY_TEXTUREDIRECTUV=0,this.SS_TRANSLUCENCYINTENSITY_TEXTURE=!1,this.SS_TRANSLUCENCYINTENSITY_TEXTUREDIRECTUV=0,this.SS_TRANSLUCENCYCOLOR_TEXTURE=!1,this.SS_TRANSLUCENCYCOLOR_TEXTUREDIRECTUV=0,this.SS_TRANSLUCENCYCOLOR_TEXTURE_GAMMA=!1,this.SS_REFRACTIONMAP_3D=!1,this.SS_REFRACTIONMAP_OPPOSITEZ=!1,this.SS_LODINREFRACTIONALPHA=!1,this.SS_GAMMAREFRACTION=!1,this.SS_RGBDREFRACTION=!1,this.SS_LINEARSPECULARREFRACTION=!1,this.SS_LINKREFRACTIONTOTRANSPARENCY=!1,this.SS_ALBEDOFORREFRACTIONTINT=!1,this.SS_ALBEDOFORTRANSLUCENCYTINT=!1,this.SS_USE_LOCAL_REFRACTIONMAP_CUBIC=!1,this.SS_USE_THICKNESS_AS_DEPTH=!1,this.SS_USE_GLTF_TEXTURES=!1,this.SS_APPLY_ALBEDO_AFTER_SUBSURFACE=!1,this.SS_TRANSLUCENCY_LEGACY=!1}},Ai=class n extends wr{get scatteringDiffusionProfile(){return this._scene.subSurfaceConfiguration?this._scene.subSurfaceConfiguration.ssDiffusionProfileColors[this._scatteringDiffusionProfileIndex]:null}set scatteringDiffusionProfile(e){this._scene.enableSubSurfaceForPrePass()&&e&&(this._scatteringDiffusionProfileIndex=this._scene.subSurfaceConfiguration.addDiffusionProfile(e))}get volumeIndexOfRefraction(){return this._volumeIndexOfRefraction>=1?this._volumeIndexOfRefraction:this._indexOfRefraction}set volumeIndexOfRefraction(e){e>=1?this._volumeIndexOfRefraction=e:this._volumeIndexOfRefraction=-1}get legacyTransluceny(){return this.legacyTranslucency}set legacyTransluceny(e){this.legacyTranslucency=e}_markAllSubMeshesAsTexturesDirty(){this._enable(this._isRefractionEnabled||this._isTranslucencyEnabled||this._isScatteringEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}_markScenePrePassDirty(){this._enable(this._isRefractionEnabled||this._isTranslucencyEnabled||this._isScatteringEnabled),this._internalMarkAllSubMeshesAsTexturesDirty(),this._internalMarkScenePrePassDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"PBRSubSurface",130,new EL,t),this._isRefractionEnabled=!1,this.isRefractionEnabled=!1,this._isTranslucencyEnabled=!1,this.isTranslucencyEnabled=!1,this._isDispersionEnabled=!1,this.isDispersionEnabled=!1,this._isScatteringEnabled=!1,this.isScatteringEnabled=!1,this._scatteringDiffusionProfileIndex=0,this.refractionIntensity=1,this.translucencyIntensity=1,this._useAlbedoToTintRefraction=!1,this.useAlbedoToTintRefraction=!1,this._useAlbedoToTintTranslucency=!1,this.useAlbedoToTintTranslucency=!1,this._thicknessTexture=null,this.thicknessTexture=null,this._refractionTexture=null,this.refractionTexture=null,this._indexOfRefraction=1.5,this.indexOfRefraction=1.5,this._volumeIndexOfRefraction=-1,this._invertRefractionY=!1,this.invertRefractionY=!1,this._linkRefractionWithTransparency=!1,this.linkRefractionWithTransparency=!1,this.minimumThickness=0,this.maximumThickness=1,this.useThicknessAsDepth=!1,this.tintColor=Te.White(),this.tintColorAtDistance=1,this.dispersion=0,this.diffusionDistance=Te.White(),this._useMaskFromThicknessTexture=!1,this.useMaskFromThicknessTexture=!1,this._refractionIntensityTexture=null,this.refractionIntensityTexture=null,this._translucencyIntensityTexture=null,this.translucencyIntensityTexture=null,this.translucencyColor=null,this._translucencyColorTexture=null,this.translucencyColorTexture=null,this._useGltfStyleTextures=!0,this.useGltfStyleTextures=!0,this.applyAlbedoAfterSubSurface=n.DEFAULT_APPLY_ALBEDO_AFTERSUBSURFACE,this.legacyTranslucency=n.DEFAULT_LEGACY_TRANSLUCENCY,this._scene=e.getScene(),this.registerForExtraEvents=!0,this._internalMarkAllSubMeshesAsTexturesDirty=e._dirtyCallbacks[1],this._internalMarkScenePrePassDirty=e._dirtyCallbacks[32]}isReadyForSubMesh(e,t){if(!this._isRefractionEnabled&&!this._isTranslucencyEnabled&&!this._isScatteringEnabled)return!0;if(e._areTexturesDirty&&t.texturesEnabled){if(this._thicknessTexture&&le.ThicknessTextureEnabled&&!this._thicknessTexture.isReadyOrNotBlocking()||this._refractionIntensityTexture&&le.RefractionIntensityTextureEnabled&&!this._refractionIntensityTexture.isReadyOrNotBlocking()||this._translucencyColorTexture&&le.TranslucencyColorTextureEnabled&&!this._translucencyColorTexture.isReadyOrNotBlocking()||this._translucencyIntensityTexture&&le.TranslucencyIntensityTextureEnabled&&!this._translucencyIntensityTexture.isReadyOrNotBlocking())return!1;let i=this._getRefractionTexture(t);if(i&&le.RefractionTextureEnabled&&!i.isReadyOrNotBlocking())return!1}return!0}prepareDefinesBeforeAttributes(e,t){if(!this._isRefractionEnabled&&!this._isTranslucencyEnabled&&!this._isScatteringEnabled){e.SUBSURFACE=!1,e.SS_DISPERSION=!1,e.SS_TRANSLUCENCY=!1,e.SS_SCATTERING=!1,e.SS_REFRACTION=!1,e.SS_REFRACTION_USE_INTENSITY_FROM_THICKNESS=!1,e.SS_TRANSLUCENCY_USE_INTENSITY_FROM_THICKNESS=!1,e.SS_THICKNESSANDMASK_TEXTURE=!1,e.SS_THICKNESSANDMASK_TEXTUREDIRECTUV=0,e.SS_HAS_THICKNESS=!1,e.SS_REFRACTIONINTENSITY_TEXTURE=!1,e.SS_REFRACTIONINTENSITY_TEXTUREDIRECTUV=0,e.SS_TRANSLUCENCYINTENSITY_TEXTURE=!1,e.SS_TRANSLUCENCYINTENSITY_TEXTUREDIRECTUV=0,e.SS_REFRACTIONMAP_3D=!1,e.SS_REFRACTIONMAP_OPPOSITEZ=!1,e.SS_LODINREFRACTIONALPHA=!1,e.SS_GAMMAREFRACTION=!1,e.SS_RGBDREFRACTION=!1,e.SS_LINEARSPECULARREFRACTION=!1,e.SS_LINKREFRACTIONTOTRANSPARENCY=!1,e.SS_ALBEDOFORREFRACTIONTINT=!1,e.SS_ALBEDOFORTRANSLUCENCYTINT=!1,e.SS_USE_LOCAL_REFRACTIONMAP_CUBIC=!1,e.SS_USE_THICKNESS_AS_DEPTH=!1,e.SS_USE_GLTF_TEXTURES=!1,e.SS_TRANSLUCENCYCOLOR_TEXTURE=!1,e.SS_TRANSLUCENCYCOLOR_TEXTUREDIRECTUV=0,e.SS_TRANSLUCENCYCOLOR_TEXTURE_GAMMA=!1,e.SS_APPLY_ALBEDO_AFTER_SUBSURFACE=!1;return}if(e._areTexturesDirty){if(e.SUBSURFACE=!0,e.SS_DISPERSION=this._isDispersionEnabled,e.SS_TRANSLUCENCY=this._isTranslucencyEnabled,e.SS_TRANSLUCENCY_USE_INTENSITY_FROM_THICKNESS=!1,e.SS_TRANSLUCENCY_LEGACY=this.legacyTranslucency,e.SS_SCATTERING=this._isScatteringEnabled,e.SS_THICKNESSANDMASK_TEXTURE=!1,e.SS_REFRACTIONINTENSITY_TEXTURE=!1,e.SS_TRANSLUCENCYINTENSITY_TEXTURE=!1,e.SS_HAS_THICKNESS=!1,e.SS_USE_GLTF_TEXTURES=!1,e.SS_REFRACTION=!1,e.SS_REFRACTION_USE_INTENSITY_FROM_THICKNESS=!1,e.SS_REFRACTIONMAP_3D=!1,e.SS_GAMMAREFRACTION=!1,e.SS_RGBDREFRACTION=!1,e.SS_LINEARSPECULARREFRACTION=!1,e.SS_REFRACTIONMAP_OPPOSITEZ=!1,e.SS_LODINREFRACTIONALPHA=!1,e.SS_LINKREFRACTIONTOTRANSPARENCY=!1,e.SS_ALBEDOFORREFRACTIONTINT=!1,e.SS_ALBEDOFORTRANSLUCENCYTINT=!1,e.SS_USE_LOCAL_REFRACTIONMAP_CUBIC=!1,e.SS_USE_THICKNESS_AS_DEPTH=!1,e.SS_TRANSLUCENCYCOLOR_TEXTURE=!1,e.SS_APPLY_ALBEDO_AFTER_SUBSURFACE=this.applyAlbedoAfterSubSurface,e._areTexturesDirty&&t.texturesEnabled&&(this._thicknessTexture&&le.ThicknessTextureEnabled&&ri(this._thicknessTexture,e,"SS_THICKNESSANDMASK_TEXTURE"),this._refractionIntensityTexture&&le.RefractionIntensityTextureEnabled&&ri(this._refractionIntensityTexture,e,"SS_REFRACTIONINTENSITY_TEXTURE"),this._translucencyIntensityTexture&&le.TranslucencyIntensityTextureEnabled&&ri(this._translucencyIntensityTexture,e,"SS_TRANSLUCENCYINTENSITY_TEXTURE"),this._translucencyColorTexture&&le.TranslucencyColorTextureEnabled&&(ri(this._translucencyColorTexture,e,"SS_TRANSLUCENCYCOLOR_TEXTURE"),e.SS_TRANSLUCENCYCOLOR_TEXTURE_GAMMA=this._translucencyColorTexture.gammaSpace)),e.SS_HAS_THICKNESS=this.maximumThickness-this.minimumThickness!==0,e.SS_USE_GLTF_TEXTURES=this._useGltfStyleTextures,e.SS_REFRACTION_USE_INTENSITY_FROM_THICKNESS=this._useMaskFromThicknessTexture&&!this._refractionIntensityTexture,e.SS_TRANSLUCENCY_USE_INTENSITY_FROM_THICKNESS=this._useMaskFromThicknessTexture&&!this._translucencyIntensityTexture,this._isRefractionEnabled&&t.texturesEnabled){let i=this._getRefractionTexture(t);i&&le.RefractionTextureEnabled&&(e.SS_REFRACTION=!0,e.SS_REFRACTIONMAP_3D=i.isCube,e.SS_GAMMAREFRACTION=i.gammaSpace,e.SS_RGBDREFRACTION=i.isRGBD,e.SS_LINEARSPECULARREFRACTION=i.linearSpecularLOD,e.SS_REFRACTIONMAP_OPPOSITEZ=this._scene.useRightHandedSystem&&i.isCube?!i.invertZ:i.invertZ,e.SS_LODINREFRACTIONALPHA=i.lodLevelInAlpha,e.SS_LINKREFRACTIONTOTRANSPARENCY=this._linkRefractionWithTransparency,e.SS_ALBEDOFORREFRACTIONTINT=this._useAlbedoToTintRefraction,e.SS_USE_LOCAL_REFRACTIONMAP_CUBIC=i.isCube&&i.boundingBoxSize,e.SS_USE_THICKNESS_AS_DEPTH=this.useThicknessAsDepth)}this._isTranslucencyEnabled&&(e.SS_ALBEDOFORTRANSLUCENCYTINT=this._useAlbedoToTintTranslucency)}}hardBindForSubMesh(e,t,i,r){if(!(!this._isRefractionEnabled&&!this._isTranslucencyEnabled&&!this._isScatteringEnabled))if(this.maximumThickness===0&&this.minimumThickness===0)e.updateFloat2("vThicknessParam",0,0);else{r.getRenderingMesh().getWorldMatrix().decompose(Q.Vector3[0]);let s=Math.max(Math.abs(Q.Vector3[0].x),Math.abs(Q.Vector3[0].y),Math.abs(Q.Vector3[0].z));e.updateFloat2("vThicknessParam",this.minimumThickness*s,(this.maximumThickness-this.minimumThickness)*s)}}bindForSubMesh(e,t,i,r){var f;if(!this._isRefractionEnabled&&!this._isTranslucencyEnabled&&!this._isScatteringEnabled)return;let s=r.materialDefines,a=this._material.isFrozen,o=this._material.realTimeFiltering,l=s.LODBASEDMICROSFURACE,c=this._getRefractionTexture(t);if(!e.useUbo||!a||!e.isSync){if(this._thicknessTexture&&le.ThicknessTextureEnabled&&(e.updateFloat2("vThicknessInfos",this._thicknessTexture.coordinatesIndex,this._thicknessTexture.level),ni(this._thicknessTexture,e,"thickness")),this._refractionIntensityTexture&&le.RefractionIntensityTextureEnabled&&s.SS_REFRACTIONINTENSITY_TEXTURE&&(e.updateFloat2("vRefractionIntensityInfos",this._refractionIntensityTexture.coordinatesIndex,this._refractionIntensityTexture.level),ni(this._refractionIntensityTexture,e,"refractionIntensity")),this._translucencyColorTexture&&le.TranslucencyColorTextureEnabled&&s.SS_TRANSLUCENCYCOLOR_TEXTURE&&(e.updateFloat2("vTranslucencyColorInfos",this._translucencyColorTexture.coordinatesIndex,this._translucencyColorTexture.level),ni(this._translucencyColorTexture,e,"translucencyColor")),this._translucencyIntensityTexture&&le.TranslucencyIntensityTextureEnabled&&s.SS_TRANSLUCENCYINTENSITY_TEXTURE&&(e.updateFloat2("vTranslucencyIntensityInfos",this._translucencyIntensityTexture.coordinatesIndex,this._translucencyIntensityTexture.level),ni(this._translucencyIntensityTexture,e,"translucencyIntensity")),c&&le.RefractionTextureEnabled){e.updateMatrix("refractionMatrix",c.getRefractionTextureMatrix());let h=1;c.isCube||c.depth&&(h=c.depth);let d=c.getSize().width,u=this.volumeIndexOfRefraction;if(e.updateFloat4("vRefractionInfos",c.level,1/u,h,this._invertRefractionY?-1:1),e.updateFloat4("vRefractionMicrosurfaceInfos",d,c.lodGenerationScale,c.lodGenerationOffset,1/this.indexOfRefraction),o&&e.updateFloat2("vRefractionFilteringInfo",d,Math.log2(d)),c.boundingBoxSize){let m=c;e.updateVector3("vRefractionPosition",m.boundingBoxPosition),e.updateVector3("vRefractionSize",m.boundingBoxSize)}}this._isScatteringEnabled&&e.updateFloat("scatteringDiffusionProfile",this._scatteringDiffusionProfileIndex),e.updateColor3("vDiffusionDistance",this.diffusionDistance),e.updateFloat4("vTintColor",this.tintColor.r,this.tintColor.g,this.tintColor.b,Math.max(1e-5,this.tintColorAtDistance)),e.updateColor4("vTranslucencyColor",(f=this.translucencyColor)!=null?f:this.tintColor,0),e.updateFloat3("vSubSurfaceIntensity",this.refractionIntensity,this.translucencyIntensity,0),e.updateFloat("dispersion",this.dispersion)}t.texturesEnabled&&(this._thicknessTexture&&le.ThicknessTextureEnabled&&e.setTexture("thicknessSampler",this._thicknessTexture),this._refractionIntensityTexture&&le.RefractionIntensityTextureEnabled&&s.SS_REFRACTIONINTENSITY_TEXTURE&&e.setTexture("refractionIntensitySampler",this._refractionIntensityTexture),this._translucencyIntensityTexture&&le.TranslucencyIntensityTextureEnabled&&s.SS_TRANSLUCENCYINTENSITY_TEXTURE&&e.setTexture("translucencyIntensitySampler",this._translucencyIntensityTexture),this._translucencyColorTexture&&le.TranslucencyColorTextureEnabled&&s.SS_TRANSLUCENCYCOLOR_TEXTURE&&e.setTexture("translucencyColorSampler",this._translucencyColorTexture),c&&le.RefractionTextureEnabled&&(l?e.setTexture("refractionSampler",c):(e.setTexture("refractionSampler",c._lodTextureMid||c),e.setTexture("refractionSamplerLow",c._lodTextureLow||c),e.setTexture("refractionSamplerHigh",c._lodTextureHigh||c))))}_getRefractionTexture(e){return this._refractionTexture?this._refractionTexture:this._isRefractionEnabled?e.environmentTexture:null}get disableAlphaBlending(){return this._isRefractionEnabled&&this._linkRefractionWithTransparency}fillRenderTargetTextures(e){le.RefractionTextureEnabled&&this._refractionTexture&&this._refractionTexture.isRenderTarget&&e.push(this._refractionTexture)}hasTexture(e){return this._thicknessTexture===e||this._refractionTexture===e||this._refractionIntensityTexture===e||this._translucencyIntensityTexture===e||this._translucencyColorTexture===e}hasRenderTargetTextures(){return!!(le.RefractionTextureEnabled&&this._refractionTexture&&this._refractionTexture.isRenderTarget)}getActiveTextures(e){this._thicknessTexture&&e.push(this._thicknessTexture),this._refractionTexture&&e.push(this._refractionTexture),this._refractionIntensityTexture&&e.push(this._refractionIntensityTexture),this._translucencyColorTexture&&e.push(this._translucencyColorTexture),this._translucencyIntensityTexture&&e.push(this._translucencyIntensityTexture)}getAnimatables(e){this._thicknessTexture&&this._thicknessTexture.animations&&this._thicknessTexture.animations.length>0&&e.push(this._thicknessTexture),this._refractionTexture&&this._refractionTexture.animations&&this._refractionTexture.animations.length>0&&e.push(this._refractionTexture),this._refractionIntensityTexture&&this._refractionIntensityTexture.animations&&this._refractionIntensityTexture.animations.length>0&&e.push(this._refractionIntensityTexture),this._translucencyColorTexture&&this._translucencyColorTexture.animations&&this._translucencyColorTexture.animations.length>0&&e.push(this._translucencyColorTexture),this._translucencyIntensityTexture&&this._translucencyIntensityTexture.animations&&this._translucencyIntensityTexture.animations.length>0&&e.push(this._translucencyIntensityTexture)}dispose(e){e&&(this._thicknessTexture&&this._thicknessTexture.dispose(),this._refractionTexture&&this._refractionTexture.dispose(),this._refractionIntensityTexture&&this._refractionIntensityTexture.dispose(),this._translucencyColorTexture&&this._translucencyColorTexture.dispose(),this._translucencyIntensityTexture&&this._translucencyIntensityTexture.dispose())}getClassName(){return"PBRSubSurfaceConfiguration"}addFallbacks(e,t,i){return e.SS_SCATTERING&&t.addFallback(i++,"SS_SCATTERING"),e.SS_TRANSLUCENCY&&t.addFallback(i++,"SS_TRANSLUCENCY"),i}getSamplers(e){e.push("thicknessSampler","refractionIntensitySampler","translucencyIntensitySampler","refractionSampler","refractionSamplerLow","refractionSamplerHigh","translucencyColorSampler")}getUniforms(){return{ubo:[{name:"vRefractionMicrosurfaceInfos",size:4,type:"vec4"},{name:"vRefractionFilteringInfo",size:2,type:"vec2"},{name:"vTranslucencyIntensityInfos",size:2,type:"vec2"},{name:"vRefractionInfos",size:4,type:"vec4"},{name:"refractionMatrix",size:16,type:"mat4"},{name:"vThicknessInfos",size:2,type:"vec2"},{name:"vRefractionIntensityInfos",size:2,type:"vec2"},{name:"thicknessMatrix",size:16,type:"mat4"},{name:"refractionIntensityMatrix",size:16,type:"mat4"},{name:"translucencyIntensityMatrix",size:16,type:"mat4"},{name:"vThicknessParam",size:2,type:"vec2"},{name:"vDiffusionDistance",size:3,type:"vec3"},{name:"vTintColor",size:4,type:"vec4"},{name:"vSubSurfaceIntensity",size:3,type:"vec3"},{name:"vRefractionPosition",size:3,type:"vec3"},{name:"vRefractionSize",size:3,type:"vec3"},{name:"scatteringDiffusionProfile",size:1,type:"float"},{name:"dispersion",size:1,type:"float"},{name:"vTranslucencyColor",size:4,type:"vec4"},{name:"vTranslucencyColorInfos",size:2,type:"vec2"},{name:"translucencyColorMatrix",size:16,type:"mat4"}]}}};Ai.DEFAULT_APPLY_ALBEDO_AFTERSUBSURFACE=!1;Ai.DEFAULT_LEGACY_TRANSLUCENCY=!1;P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"isRefractionEnabled",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"isTranslucencyEnabled",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"isDispersionEnabled",void 0);P([w(),oe("_markScenePrePassDirty")],Ai.prototype,"isScatteringEnabled",void 0);P([w()],Ai.prototype,"_scatteringDiffusionProfileIndex",void 0);P([w()],Ai.prototype,"refractionIntensity",void 0);P([w()],Ai.prototype,"translucencyIntensity",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"useAlbedoToTintRefraction",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"useAlbedoToTintTranslucency",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"thicknessTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"refractionTexture",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"indexOfRefraction",void 0);P([w()],Ai.prototype,"_volumeIndexOfRefraction",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"volumeIndexOfRefraction",null);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"invertRefractionY",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"linkRefractionWithTransparency",void 0);P([w()],Ai.prototype,"minimumThickness",void 0);P([w()],Ai.prototype,"maximumThickness",void 0);P([w()],Ai.prototype,"useThicknessAsDepth",void 0);P([mr()],Ai.prototype,"tintColor",void 0);P([w()],Ai.prototype,"tintColorAtDistance",void 0);P([w()],Ai.prototype,"dispersion",void 0);P([mr()],Ai.prototype,"diffusionDistance",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"useMaskFromThicknessTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"refractionIntensityTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"translucencyIntensityTexture",void 0);P([mr()],Ai.prototype,"translucencyColor",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"translucencyColorTexture",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"useGltfStyleTextures",void 0);P([w()],Ai.prototype,"applyAlbedoAfterSubSurface",void 0);P([w()],Ai.prototype,"legacyTranslucency",void 0)});var N8,Efe,SL=C(()=>{G();Yh();mg();N8="pbrUboDeclaration",Efe=`uniform vAlbedoInfos: vec2f;uniform vBaseWeightInfos: vec2f;uniform vBaseDiffuseRoughnessInfos: vec2f;uniform vAmbientInfos: vec4f;uniform vOpacityInfos: vec2f;uniform vEmissiveInfos: vec2f;uniform vLightmapInfos: vec2f;uniform vReflectivityInfos: vec3f;uniform vMicroSurfaceSamplerInfos: vec2f;uniform vBumpInfos: vec3f;uniform albedoMatrix: mat4x4f;uniform baseWeightMatrix: mat4x4f;uniform baseDiffuseRoughnessMatrix: mat4x4f;uniform ambientMatrix: mat4x4f;uniform opacityMatrix: mat4x4f;uniform emissiveMatrix: mat4x4f;uniform lightmapMatrix: mat4x4f;uniform reflectivityMatrix: mat4x4f;uniform microSurfaceSamplerMatrix: mat4x4f;uniform bumpMatrix: mat4x4f;uniform vTangentSpaceParams: vec2f;uniform vAlbedoColor: vec4f;uniform baseWeight: f32;uniform baseDiffuseRoughness: f32;uniform vLightingIntensity: vec4f;uniform pointSize: f32;uniform vReflectivityColor: vec4f;uniform vEmissiveColor: vec3f;uniform vAmbientColor: vec3f;uniform vDebugMode: vec2f;uniform vMetallicReflectanceFactors: vec4f;uniform vMetallicReflectanceInfos: vec2f;uniform metallicReflectanceMatrix: mat4x4f;uniform vReflectanceInfos: vec2f;uniform reflectanceMatrix: mat4x4f;uniform cameraInfo: vec4f;uniform vReflectionInfos: vec2f;uniform reflectionMatrix: mat4x4f;uniform vReflectionMicrosurfaceInfos: vec3f;uniform vReflectionPosition: vec3f;uniform vReflectionSize: vec3f;uniform vReflectionFilteringInfo: vec2f;uniform vReflectionDominantDirection: vec3f;uniform vReflectionColor: vec3f;uniform vSphericalL00: vec3f;uniform vSphericalL1_1: vec3f;uniform vSphericalL10: vec3f;uniform vSphericalL11: vec3f;uniform vSphericalL2_2: vec3f;uniform vSphericalL2_1: vec3f;uniform vSphericalL20: vec3f;uniform vSphericalL21: vec3f;uniform vSphericalL22: vec3f;uniform vSphericalX: vec3f;uniform vSphericalY: vec3f;uniform vSphericalZ: vec3f;uniform vSphericalXX_ZZ: vec3f;uniform vSphericalYY_ZZ: vec3f;uniform vSphericalZZ: vec3f;uniform vSphericalXY: vec3f;uniform vSphericalYZ: vec3f;uniform vSphericalZX: vec3f; #define ADDITIONAL_UBO_DECLARATION #include #include -`;S.IncludesShadersStoreWGSL[x8]||(S.IncludesShadersStoreWGSL[x8]=Qce)});var b8={};et(b8,{pbrVertexShaderWGSL:()=>Jce});var hL,R8,Jce,I8=C(()=>{k();fL();vA();Pm();Sa();km();ql();Zl();Rf();EA();SA();Gm();By();Ql();X_();TA();Mf();Cf();Yh();AA();xA();yf();Pf();Jl();$l();ec();RA();bA();IA();MA();tc();Y_();CA();K_();yA();hL="pbrVertexShader",R8=`#define PBR_VERTEX_SHADER +`;T.IncludesShadersStoreWGSL[N8]||(T.IncludesShadersStoreWGSL[N8]=Efe)});var F8={};$e(F8,{pbrVertexShaderWGSL:()=>Sfe});var TL,w8,Sfe,B8=C(()=>{G();SL();CA();Nm();Ra();Xm();Ql();$l();Mf();yA();PA();zm();Ky();Jl();J_();DA();Pf();Df();Kh();LA();OA();Lf();Of();ec();tc();ic();NA();wA();FA();BA();rc();eg();UA();tg();VA();TL="pbrVertexShader",w8=`#define PBR_VERTEX_SHADER #include #define CUSTOM_VERTEX_BEGIN #ifndef USE_VERTEX_PULLING @@ -17773,7 +17773,7 @@ vertexOutputs.vMainUV2=uv2Updated; #include #include #define CUSTOM_VERTEX_MAIN_END -}`;S.ShadersStoreWGSL[hL]||(S.ShadersStoreWGSL[hL]=R8);Jce={name:hL,shader:R8}});var M8,$ce,C8=C(()=>{k();M8="samplerFragmentAlternateDeclaration",$ce=`#ifdef _DEFINENAME_ +}`;T.ShadersStoreWGSL[TL]||(T.ShadersStoreWGSL[TL]=w8);Sfe={name:TL,shader:w8}});var U8,Tfe,V8=C(()=>{G();U8="samplerFragmentAlternateDeclaration",Tfe=`#ifdef _DEFINENAME_ #if _DEFINENAME_DIRECTUV==1 #define v_VARYINGNAME_UV vMainUV1 #elif _DEFINENAME_DIRECTUV==2 @@ -17790,7 +17790,7 @@ vertexOutputs.vMainUV2=uv2Updated; varying v_VARYINGNAME_UV: vec2f; #endif #endif -`;S.IncludesShadersStoreWGSL[M8]||(S.IncludesShadersStoreWGSL[M8]=$ce)});var y8,efe,P8=C(()=>{k();Kh();C8();Gx();y8="pbrFragmentSamplersDeclaration",efe=`#include(_DEFINENAME_,ALBEDO,_VARYINGNAME_,Albedo,_SAMPLERNAME_,albedo) +`;T.IncludesShadersStoreWGSL[U8]||(T.IncludesShadersStoreWGSL[U8]=Tfe)});var G8,Afe,k8=C(()=>{G();jh();V8();Zx();G8="pbrFragmentSamplersDeclaration",Afe=`#include(_DEFINENAME_,ALBEDO,_VARYINGNAME_,Albedo,_SAMPLERNAME_,albedo) #include(_DEFINENAME_,BASE_WEIGHT,_VARYINGNAME_,BaseWeight,_SAMPLERNAME_,baseWeight) #include(_DEFINENAME_,BASE_DIFFUSE_ROUGHNESS,_VARYINGNAME_,BaseDiffuseRoughness,_SAMPLERNAME_,baseDiffuseRoughness) #include(_DEFINENAME_,AMBIENT,_VARYINGNAME_,Ambient,_SAMPLERNAME_,ambient) @@ -17853,7 +17853,7 @@ var refractionLowSamplerSampler: sampler;var refractionLowSampler: texture_2d; #endif -`;S.IncludesShadersStoreWGSL[y8]||(S.IncludesShadersStoreWGSL[y8]=efe)});var D8,tfe,L8=C(()=>{k();ky();D8="pbrBlockAlbedoOpacity",tfe=`struct albedoOpacityOutParams +`;T.IncludesShadersStoreWGSL[G8]||(T.IncludesShadersStoreWGSL[G8]=Afe)});var W8,xfe,H8=C(()=>{G();Qy();W8="pbrBlockAlbedoOpacity",xfe=`struct albedoOpacityOutParams {surfaceAlbedo: vec3f, alpha: f32}; #define pbr_inline @@ -17932,7 +17932,7 @@ alpha=1.0; #endif #endif outParams.surfaceAlbedo=surfaceAlbedo;outParams.alpha=alpha;return outParams;} -`;S.IncludesShadersStoreWGSL[D8]||(S.IncludesShadersStoreWGSL[D8]=tfe)});var O8,ife,N8=C(()=>{k();O8="pbrBlockReflectivity",ife=`struct reflectivityOutParams +`;T.IncludesShadersStoreWGSL[W8]||(T.IncludesShadersStoreWGSL[W8]=xfe)});var z8,Rfe,X8=C(()=>{G();z8="pbrBlockReflectivity",Rfe=`struct reflectivityOutParams {microSurface: f32, roughness: f32, diffuseRoughness: f32, @@ -18092,7 +18092,7 @@ microSurface=saturate(microSurface);var roughness: f32=1.-microSurface;var diffu diffuseRoughness*=baseDiffuseRoughnessTexture*baseDiffuseRoughnessInfos.y; #endif outParams.microSurface=microSurface;outParams.roughness=roughness;outParams.diffuseRoughness=diffuseRoughness;return outParams;} -`;S.IncludesShadersStoreWGSL[O8]||(S.IncludesShadersStoreWGSL[O8]=ife)});var F8,rfe,w8=C(()=>{k();F8="pbrBlockAmbientOcclusion",rfe=`struct ambientOcclusionOutParams +`;T.IncludesShadersStoreWGSL[z8]||(T.IncludesShadersStoreWGSL[z8]=Rfe)});var Y8,bfe,K8=C(()=>{G();Y8="pbrBlockAmbientOcclusion",bfe=`struct ambientOcclusionOutParams {ambientOcclusionColor: vec3f, #if DEBUGMODE>0 && defined(AMBIENT) ambientOcclusionColorMap: vec3f @@ -18118,7 +18118,7 @@ outParams.ambientOcclusionColorMap=ambientOcclusionColorMap; #endif #endif outParams.ambientOcclusionColor=ambientOcclusionColor;return outParams;} -`;S.IncludesShadersStoreWGSL[F8]||(S.IncludesShadersStoreWGSL[F8]=rfe)});var B8,nfe,U8=C(()=>{k();B8="pbrBlockAlphaFresnel",nfe=`#ifdef ALPHAFRESNEL +`;T.IncludesShadersStoreWGSL[Y8]||(T.IncludesShadersStoreWGSL[Y8]=bfe)});var j8,Ife,q8=C(()=>{G();j8="pbrBlockAlphaFresnel",Ife=`#ifdef ALPHAFRESNEL #if defined(ALPHATEST) || defined(ALPHABLEND) struct alphaFresnelOutParams {alpha: f32};fn faceforward(N: vec3,I: vec3,Nref: vec3)->vec3 {return select(N,-N,dot(Nref,I)>0.0);} @@ -18145,7 +18145,7 @@ outParams.alpha=1.0; return outParams;} #endif #endif -`;S.IncludesShadersStoreWGSL[B8]||(S.IncludesShadersStoreWGSL[B8]=nfe)});var V8,sfe,G8=C(()=>{k();V8="pbrBlockAnisotropic",sfe=`#ifdef ANISOTROPIC +`;T.IncludesShadersStoreWGSL[j8]||(T.IncludesShadersStoreWGSL[j8]=Ife)});var Z8,Mfe,Q8=C(()=>{G();Z8="pbrBlockAnisotropic",Mfe=`#ifdef ANISOTROPIC struct anisotropicOutParams {anisotropy: f32, anisotropicTangent: vec3f, @@ -18182,7 +18182,7 @@ anisotropyDirection=vec3f(mat2x2f(anisotropyDirection.x,anisotropyDirection.y,-a #endif var anisoTBN: mat3x3f= mat3x3f(normalize(TBN[0]),normalize(TBN[1]),normalize(TBN[2]));var anisotropicTangent: vec3f=normalize(anisoTBN*anisotropyDirection);var anisotropicBitangent: vec3f=normalize(cross(anisoTBN[2],anisotropicTangent));outParams.anisotropy=anisotropy;outParams.anisotropicTangent=anisotropicTangent;outParams.anisotropicBitangent=anisotropicBitangent;outParams.anisotropicNormal=getAnisotropicBentNormals(anisotropicTangent,anisotropicBitangent,normalW,viewDirectionW,anisotropy,roughness);return outParams;} #endif -`;S.IncludesShadersStoreWGSL[V8]||(S.IncludesShadersStoreWGSL[V8]=sfe)});var k8,afe,W8=C(()=>{k();k8="pbrBlockReflection",afe=`#ifdef REFLECTION +`;T.IncludesShadersStoreWGSL[Z8]||(T.IncludesShadersStoreWGSL[Z8]=Mfe)});var $8,Cfe,J8=C(()=>{G();$8="pbrBlockReflection",Cfe=`#ifdef REFLECTION struct reflectionOutParams {environmentRadiance: vec4f ,environmentIrradiance: vec3f @@ -18492,7 +18492,7 @@ outParams.environmentRadiance=environmentRadiance; #endif outParams.environmentIrradiance=environmentIrradiance;outParams.reflectionCoords=reflectionCoords;return outParams;} #endif -`;S.IncludesShadersStoreWGSL[k8]||(S.IncludesShadersStoreWGSL[k8]=afe)});var H8,ofe,z8=C(()=>{k();H8="pbrBlockSheen",ofe=`#ifdef SHEEN +`;T.IncludesShadersStoreWGSL[$8]||(T.IncludesShadersStoreWGSL[$8]=Cfe)});var e6,yfe,t6=C(()=>{G();e6="pbrBlockSheen",yfe=`#ifdef SHEEN struct sheenOutParams {sheenIntensity: f32 ,sheenColor: vec3f @@ -18678,7 +18678,7 @@ outParams.sheenAlbedoScaling=1.0-sheenIntensity*max(max(sheenColor.r,sheenColor. #endif outParams.sheenIntensity=sheenIntensity;outParams.sheenColor=sheenColor;outParams.sheenRoughness=sheenRoughness;return outParams;} #endif -`;S.IncludesShadersStoreWGSL[H8]||(S.IncludesShadersStoreWGSL[H8]=ofe)});var X8,lfe,Y8=C(()=>{k();X8="pbrBlockClearcoat",lfe=`struct clearcoatOutParams +`;T.IncludesShadersStoreWGSL[e6]||(T.IncludesShadersStoreWGSL[e6]=yfe)});var i6,Pfe,r6=C(()=>{G();i6="pbrBlockClearcoat",Pfe=`struct clearcoatOutParams {specularEnvironmentR0: vec3f, conservationFactor: f32, clearCoatNormalW: vec3f, @@ -18931,7 +18931,7 @@ outParams.energyConservationFactorClearCoat=getEnergyConservationFactor(outParam #endif return outParams;} #endif -`;S.IncludesShadersStoreWGSL[X8]||(S.IncludesShadersStoreWGSL[X8]=lfe)});var K8,cfe,j8=C(()=>{k();K8="pbrBlockIridescence",cfe=`struct iridescenceOutParams +`;T.IncludesShadersStoreWGSL[i6]||(T.IncludesShadersStoreWGSL[i6]=Pfe)});var n6,Dfe,s6=C(()=>{G();n6="pbrBlockIridescence",Dfe=`struct iridescenceOutParams {iridescenceIntensity: f32, iridescenceIOR: f32, iridescenceThickness: f32, @@ -18972,7 +18972,7 @@ topIor=mix(1.0,uniforms.vClearCoatRefractionParams.w-1.,clearCoatIntensity);view #endif var iridescenceFresnel: vec3f=evalIridescence(topIor,iridescenceIOR,viewAngle,iridescenceThickness,specularEnvironmentR0);outParams.specularEnvironmentR0=mix(specularEnvironmentR0,iridescenceFresnel,iridescenceIntensity);outParams.iridescenceIntensity=iridescenceIntensity;outParams.iridescenceThickness=iridescenceThickness;outParams.iridescenceIOR=iridescenceIOR;return outParams;} #endif -`;S.IncludesShadersStoreWGSL[K8]||(S.IncludesShadersStoreWGSL[K8]=cfe)});var q8,ffe,Z8=C(()=>{k();q8="pbrBlockSubSurface",ffe=`struct subSurfaceOutParams +`;T.IncludesShadersStoreWGSL[n6]||(T.IncludesShadersStoreWGSL[n6]=Dfe)});var a6,Lfe,o6=C(()=>{G();a6="pbrBlockSubSurface",Lfe=`struct subSurfaceOutParams {specularEnvironmentReflectance: vec3f, #ifdef SS_REFRACTION finalRefraction: vec3f, @@ -19394,7 +19394,7 @@ outParams.refractionIrradiance=refractionIrradiance; #endif return outParams;} #endif -`;S.IncludesShadersStoreWGSL[q8]||(S.IncludesShadersStoreWGSL[q8]=ffe)});var Q8,hfe,J8=C(()=>{k();Q8="pbrBlockNormalFinal",hfe=`#if defined(FORCENORMALFORWARD) && defined(NORMAL) +`;T.IncludesShadersStoreWGSL[a6]||(T.IncludesShadersStoreWGSL[a6]=Lfe)});var l6,Ofe,c6=C(()=>{G();l6="pbrBlockNormalFinal",Ofe=`#if defined(FORCENORMALFORWARD) && defined(NORMAL) var faceNormal: vec3f=normalize(cross(dpdx(fragmentInputs.vPositionW),dpdy(fragmentInputs.vPositionW)))*scene.vEyePosition.w; #if defined(TWOSIDEDLIGHTING) faceNormal=select(-faceNormal,faceNormal,fragmentInputs.frontFacing); @@ -19408,7 +19408,7 @@ normalW=select(normalW,-normalW,fragmentInputs.frontFacing); normalW=select(-normalW,normalW,fragmentInputs.frontFacing); #endif #endif -`;S.IncludesShadersStoreWGSL[Q8]||(S.IncludesShadersStoreWGSL[Q8]=hfe)});var $8,dfe,e6=C(()=>{k();$8="pbrBlockLightmapInit",dfe=`#ifdef LIGHTMAP +`;T.IncludesShadersStoreWGSL[l6]||(T.IncludesShadersStoreWGSL[l6]=Ofe)});var f6,Nfe,h6=C(()=>{G();f6="pbrBlockLightmapInit",Nfe=`#ifdef LIGHTMAP var lightmapColor: vec4f=textureSample(lightmapSampler,lightmapSamplerSampler,fragmentInputs.vLightmapUV+uvOffset); #ifdef RGBDLIGHTMAP lightmapColor=vec4f(fromRGBD(lightmapColor),lightmapColor.a); @@ -19418,7 +19418,7 @@ lightmapColor=vec4f(toLinearSpaceVec3(lightmapColor.rgb),lightmapColor.a); #endif lightmapColor=vec4f(lightmapColor.rgb*uniforms.vLightmapInfos.y,lightmapColor.a); #endif -`;S.IncludesShadersStoreWGSL[$8]||(S.IncludesShadersStoreWGSL[$8]=dfe)});var t6,ufe,i6=C(()=>{k();t6="pbrBlockGeometryInfo",ufe=`var NdotVUnclamped: f32=dot(normalW,viewDirectionW);var NdotV: f32=absEps(NdotVUnclamped);var alphaG: f32=convertRoughnessToAverageSlope(roughness);var AARoughnessFactors: vec2f=getAARoughnessFactors(normalW.xyz); +`;T.IncludesShadersStoreWGSL[f6]||(T.IncludesShadersStoreWGSL[f6]=Nfe)});var d6,wfe,u6=C(()=>{G();d6="pbrBlockGeometryInfo",wfe=`var NdotVUnclamped: f32=dot(normalW,viewDirectionW);var NdotV: f32=absEps(NdotVUnclamped);var alphaG: f32=convertRoughnessToAverageSlope(roughness);var AARoughnessFactors: vec2f=getAARoughnessFactors(normalW.xyz); #ifdef SPECULARAA alphaG+=AARoughnessFactors.y; #endif @@ -19442,7 +19442,7 @@ var eho: f32=environmentHorizonOcclusion(-viewDirectionW,normalW,geometricNormal #endif #endif #endif -`;S.IncludesShadersStoreWGSL[t6]||(S.IncludesShadersStoreWGSL[t6]=ufe)});var r6,mfe,n6=C(()=>{k();r6="pbrBlockReflectance",mfe=`#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX) +`;T.IncludesShadersStoreWGSL[d6]||(T.IncludesShadersStoreWGSL[d6]=wfe)});var m6,Ffe,p6=C(()=>{G();m6="pbrBlockReflectance",Ffe=`#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX) var baseSpecularEnvironmentReflectance: vec3f=getReflectanceFromBRDFWithEnvLookup(vec3f(reflectanceF0),vec3f(reflectivityOut.reflectanceF90),environmentBrdf); #if (CONDUCTOR_SPECULAR_MODEL==CONDUCTOR_SPECULAR_MODEL_OPENPBR) let metalEnvironmentReflectance: vec3f=vec3f(reflectivityOut.specularWeight)*getF82Specular(NdotV,clearcoatOut.specularEnvironmentR0,reflectivityOut.colorReflectanceF90,reflectivityOut.roughness);let dielectricEnvironmentReflectance=getReflectanceFromBRDFWithEnvLookup(reflectivityOut.dielectricColorF0,reflectivityOut.colorReflectanceF90,environmentBrdf);var colorSpecularEnvironmentReflectance: vec3f=mix(dielectricEnvironmentReflectance,metalEnvironmentReflectance,reflectivityOut.metallic); @@ -19468,7 +19468,7 @@ colorSpecularEnvironmentReflectance*=clearcoatOut.conservationFactor; colorSpecularEnvironmentReflectance*=clearcoatOut.absorption; #endif #endif -`;S.IncludesShadersStoreWGSL[r6]||(S.IncludesShadersStoreWGSL[r6]=mfe)});var s6,pfe,a6=C(()=>{k();s6="pbrBlockDirectLighting",pfe=`var diffuseBase: vec3f=vec3f(0.,0.,0.); +`;T.IncludesShadersStoreWGSL[m6]||(T.IncludesShadersStoreWGSL[m6]=Ffe)});var _6,Bfe,g6=C(()=>{G();_6="pbrBlockDirectLighting",Bfe=`var diffuseBase: vec3f=vec3f(0.,0.,0.); #ifdef SS_TRANSLUCENCY var diffuseTransmissionBase: vec3f=vec3f(0.,0.,0.); #endif @@ -19489,7 +19489,7 @@ var aggShadow: f32=0.;var numLights: f32=0.; #if defined(CLEARCOAT) && defined(CLEARCOAT_TINT) var absorption: vec3f=vec3f(0.); #endif -`;S.IncludesShadersStoreWGSL[s6]||(S.IncludesShadersStoreWGSL[s6]=pfe)});var o6,_fe,l6=C(()=>{k();o6="pbrBlockFinalLitComponents",_fe=`aggShadow=aggShadow/numLights; +`;T.IncludesShadersStoreWGSL[_6]||(T.IncludesShadersStoreWGSL[_6]=Bfe)});var v6,Ufe,E6=C(()=>{G();v6="pbrBlockFinalLitComponents",Ufe=`aggShadow=aggShadow/numLights; #if defined(ENVIRONMENTBRDF) #ifdef MS_BRDF_ENERGY_CONSERVATION var baseSpecularEnergyConservationFactor: vec3f=getEnergyConservationFactor(vec3f(reflectanceF0),environmentBrdf);var coloredEnergyConservationFactor: vec3f=getEnergyConservationFactor(clearcoatOut.specularEnvironmentR0,environmentBrdf); @@ -19595,7 +19595,7 @@ luminanceOverAlpha+=getLuminance(finalClearCoatScaled); alpha=saturate(alpha+luminanceOverAlpha*luminanceOverAlpha); #endif #endif -`;S.IncludesShadersStoreWGSL[o6]||(S.IncludesShadersStoreWGSL[o6]=_fe)});var c6,gfe,f6=C(()=>{k();c6="pbrBlockFinalUnlitComponents",gfe=`var finalDiffuse: vec3f=diffuseBase;finalDiffuse*=surfaceAlbedo; +`;T.IncludesShadersStoreWGSL[v6]||(T.IncludesShadersStoreWGSL[v6]=Ufe)});var S6,Vfe,T6=C(()=>{G();S6="pbrBlockFinalUnlitComponents",Vfe=`var finalDiffuse: vec3f=diffuseBase;finalDiffuse*=surfaceAlbedo; #if defined(SS_REFRACTION) && !defined(UNLIT) && !defined(LEGACY_SPECULAR_ENERGY_CONSERVATION) finalDiffuse*=subSurfaceOut.refractionOpacity; #endif @@ -19619,7 +19619,7 @@ var ambientOcclusionForDirectDiffuse: vec3f=mix( vec3f(1.),aoOut.ambientOcclusio var ambientOcclusionForDirectDiffuse: vec3f=aoOut.ambientOcclusionColor; #endif finalAmbient*=aoOut.ambientOcclusionColor;finalDiffuse*=ambientOcclusionForDirectDiffuse; -`;S.IncludesShadersStoreWGSL[c6]||(S.IncludesShadersStoreWGSL[c6]=gfe)});var h6,vfe,d6=C(()=>{k();h6="pbrBlockFinalColorComposition",vfe=`var finalColor: vec4f= vec4f( +`;T.IncludesShadersStoreWGSL[S6]||(T.IncludesShadersStoreWGSL[S6]=Vfe)});var A6,Gfe,x6=C(()=>{G();A6="pbrBlockFinalColorComposition",Gfe=`var finalColor: vec4f= vec4f( #ifndef UNLIT #ifdef REFLECTION finalIrradiance + @@ -19661,7 +19661,7 @@ finalColor=vec4f(finalColor.rgb+lightmapColor.rgb,finalColor.a); finalColor=vec4f(finalColor.rgb+finalEmissive,finalColor.a); #define CUSTOM_FRAGMENT_BEFORE_FOG finalColor=max(finalColor,vec4f(0.0)); -`;S.IncludesShadersStoreWGSL[h6]||(S.IncludesShadersStoreWGSL[h6]=vfe)});var u6,Efe,m6=C(()=>{k();u6="pbrBlockPrePass",Efe=`#if SCENE_MRT_COUNT>0 +`;T.IncludesShadersStoreWGSL[A6]||(T.IncludesShadersStoreWGSL[A6]=Gfe)});var R6,kfe,b6=C(()=>{G();R6="pbrBlockPrePass",kfe=`#if SCENE_MRT_COUNT>0 var writeGeometryInfo: f32=select(0.0,1.0,finalColor.a>ALPHATESTVALUE);var fragData: array,SCENE_MRT_COUNT>; #ifdef PREPASS_POSITION fragData[PREPASS_POSITION_INDEX]= vec4f(fragmentInputs.vPositionW,writeGeometryInfo); @@ -19767,7 +19767,7 @@ fragmentOutputs.fragData6=fragData[6]; fragmentOutputs.fragData7=fragData[7]; #endif #endif -`;S.IncludesShadersStoreWGSL[u6]||(S.IncludesShadersStoreWGSL[u6]=Efe)});var _6={};et(_6,{pbrPixelShaderWGSL:()=>Sfe});var dL,p6,Sfe,g6=C(()=>{k();PA();DA();fL();MD();LA();P8();NA();ic();Yh();j_();Sa();CD();yD();PD();FA();OA();Gm();DD();LD();km();OD();FD();kx();wA();BA();og();L8();N8();w8();U8();G8();W8();z8();Y8();j8();Z8();rc();wD();UA();J8();VA();e6();i6();ND();n6();a6();Wy();l6();f6();d6();GA();q_();BD();m6();kA();UD();dL="pbrPixelShader",p6=`#define PBR_FRAGMENT_SHADER +`;T.IncludesShadersStoreWGSL[R6]||(T.IncludesShadersStoreWGSL[R6]=kfe)});var M6={};$e(M6,{pbrPixelShaderWGSL:()=>Wfe});var AL,I6,Wfe,C6=C(()=>{G();GA();kA();SL();BD();WA();k8();zA();nc();Kh();ig();Ra();UD();VD();GD();XA();HA();zm();kD();WD();Xm();HD();XD();Qx();YA();KA();pg();H8();X8();K8();q8();Q8();J8();t6();r6();s6();o6();sc();YD();jA();c6();qA();h6();u6();zD();p6();g6();$y();E6();T6();x6();ZA();rg();KD();b6();QA();jD();AL="pbrPixelShader",I6=`#define PBR_FRAGMENT_SHADER #define CUSTOM_FRAGMENT_BEGIN #include[SCENE_MRT_COUNT] #include @@ -20331,7 +20331,7 @@ if (fragDepth==nearestDepth) {fragmentOutputs.frontColor=vec4f(fragmentOutputs.f #include #define CUSTOM_FRAGMENT_MAIN_END } -`;S.ShadersStoreWGSL[dL]||(S.ShadersStoreWGSL[dL]=p6);Sfe={name:dL,shader:p6}});var v6,Tfe,E6=C(()=>{k();WA();v6="pbrVertexDeclaration",Tfe=`uniform mat4 view;uniform mat4 viewProjection;uniform vec4 vEyePosition; +`;T.ShadersStoreWGSL[AL]||(T.ShadersStoreWGSL[AL]=I6);Wfe={name:AL,shader:I6}});var y6,Hfe,P6=C(()=>{G();$A();y6="pbrVertexDeclaration",Hfe=`uniform mat4 view;uniform mat4 viewProjection;uniform vec4 vEyePosition; #ifdef MULTIVIEW mat4 viewProjectionR; #endif @@ -20456,12 +20456,12 @@ uniform vec4 vDetailInfos;uniform mat4 detailMatrix; #endif #include #define ADDITIONAL_VERTEX_DECLARATION -`;S.IncludesShadersStore[v6]||(S.IncludesShadersStore[v6]=Tfe)});var S6,Afe,uL=C(()=>{k();jh();lg();S6="pbrUboDeclaration",Afe=`layout(std140,column_major) uniform;uniform Material {vec2 vAlbedoInfos;vec2 vBaseWeightInfos;vec2 vBaseDiffuseRoughnessInfos;vec4 vAmbientInfos;vec2 vOpacityInfos;vec2 vEmissiveInfos;vec2 vLightmapInfos;vec3 vReflectivityInfos;vec2 vMicroSurfaceSamplerInfos;vec3 vBumpInfos;mat4 albedoMatrix;mat4 baseWeightMatrix;mat4 baseDiffuseRoughnessMatrix;mat4 ambientMatrix;mat4 opacityMatrix;mat4 emissiveMatrix;mat4 lightmapMatrix;mat4 reflectivityMatrix;mat4 microSurfaceSamplerMatrix;mat4 bumpMatrix;vec2 vTangentSpaceParams;vec4 vAlbedoColor;float baseWeight;float baseDiffuseRoughness;vec4 vLightingIntensity;float pointSize;vec4 vReflectivityColor;vec3 vEmissiveColor;vec3 vAmbientColor;vec2 vDebugMode;vec4 vMetallicReflectanceFactors;vec2 vMetallicReflectanceInfos;mat4 metallicReflectanceMatrix;vec2 vReflectanceInfos;mat4 reflectanceMatrix;vec4 cameraInfo;vec2 vReflectionInfos;mat4 reflectionMatrix;vec3 vReflectionMicrosurfaceInfos;vec3 vReflectionPosition;vec3 vReflectionSize;vec2 vReflectionFilteringInfo;vec3 vReflectionDominantDirection;vec3 vReflectionColor;vec3 vSphericalL00;vec3 vSphericalL1_1;vec3 vSphericalL10;vec3 vSphericalL11;vec3 vSphericalL2_2;vec3 vSphericalL2_1;vec3 vSphericalL20;vec3 vSphericalL21;vec3 vSphericalL22;vec3 vSphericalX;vec3 vSphericalY;vec3 vSphericalZ;vec3 vSphericalXX_ZZ;vec3 vSphericalYY_ZZ;vec3 vSphericalZZ;vec3 vSphericalXY;vec3 vSphericalYZ;vec3 vSphericalZX; +`;T.IncludesShadersStore[y6]||(T.IncludesShadersStore[y6]=Hfe)});var D6,zfe,xL=C(()=>{G();qh();_g();D6="pbrUboDeclaration",zfe=`layout(std140,column_major) uniform;uniform Material {vec2 vAlbedoInfos;vec2 vBaseWeightInfos;vec2 vBaseDiffuseRoughnessInfos;vec4 vAmbientInfos;vec2 vOpacityInfos;vec2 vEmissiveInfos;vec2 vLightmapInfos;vec3 vReflectivityInfos;vec2 vMicroSurfaceSamplerInfos;vec3 vBumpInfos;mat4 albedoMatrix;mat4 baseWeightMatrix;mat4 baseDiffuseRoughnessMatrix;mat4 ambientMatrix;mat4 opacityMatrix;mat4 emissiveMatrix;mat4 lightmapMatrix;mat4 reflectivityMatrix;mat4 microSurfaceSamplerMatrix;mat4 bumpMatrix;vec2 vTangentSpaceParams;vec4 vAlbedoColor;float baseWeight;float baseDiffuseRoughness;vec4 vLightingIntensity;float pointSize;vec4 vReflectivityColor;vec3 vEmissiveColor;vec3 vAmbientColor;vec2 vDebugMode;vec4 vMetallicReflectanceFactors;vec2 vMetallicReflectanceInfos;mat4 metallicReflectanceMatrix;vec2 vReflectanceInfos;mat4 reflectanceMatrix;vec4 cameraInfo;vec2 vReflectionInfos;mat4 reflectionMatrix;vec3 vReflectionMicrosurfaceInfos;vec3 vReflectionPosition;vec3 vReflectionSize;vec2 vReflectionFilteringInfo;vec3 vReflectionDominantDirection;vec3 vReflectionColor;vec3 vSphericalL00;vec3 vSphericalL1_1;vec3 vSphericalL10;vec3 vSphericalL11;vec3 vSphericalL2_2;vec3 vSphericalL2_1;vec3 vSphericalL20;vec3 vSphericalL21;vec3 vSphericalL22;vec3 vSphericalX;vec3 vSphericalY;vec3 vSphericalZ;vec3 vSphericalXX_ZZ;vec3 vSphericalYY_ZZ;vec3 vSphericalZZ;vec3 vSphericalXY;vec3 vSphericalYZ;vec3 vSphericalZX; #define ADDITIONAL_UBO_DECLARATION }; #include #include -`;S.IncludesShadersStore[S6]||(S.IncludesShadersStore[S6]=Afe)});var A6={};et(A6,{pbrVertexShader:()=>xfe});var mL,T6,xfe,x6=C(()=>{k();E6();uL();HA();Dm();Ta();Um();nc();sc();bf();zA();XA();Vm();Xy();ac();Z_();YA();KA();Df();Lf();qh();Of();Nf();oc();lc();cc();jA();qA();ZA();QA();fc();Q_();JA();J_();$A();mL="pbrVertexShader",T6=`#define PBR_VERTEX_SHADER +`;T.IncludesShadersStore[D6]||(T.IncludesShadersStore[D6]=zfe)});var O6={};$e(O6,{pbrVertexShader:()=>Xfe});var RL,L6,Xfe,N6=C(()=>{G();P6();xL();JA();wm();ba();Wm();ac();oc();Cf();ex();tx();Hm();tP();lc();ng();ix();rx();Nf();wf();Zh();Ff();Bf();cc();fc();hc();nx();sx();ax();ox();dc();sg();lx();ag();cx();RL="pbrVertexShader",L6=`#define PBR_VERTEX_SHADER #define CUSTOM_VERTEX_EXTENSION precision highp float; #include<__decl__pbrVertex> @@ -20692,7 +20692,7 @@ gl_PointSize=pointSize; #include #define CUSTOM_VERTEX_MAIN_END } -`;S.ShadersStore[mL]||(S.ShadersStore[mL]=T6);xfe={name:mL,shader:T6}});var R6,Rfe,b6=C(()=>{k();ex();R6="pbrFragmentDeclaration",Rfe=`uniform vec4 vEyePosition;uniform vec3 vReflectionColor;uniform vec4 vAlbedoColor;uniform float baseWeight;uniform float baseDiffuseRoughness;uniform vec4 vLightingIntensity;uniform vec4 vReflectivityColor;uniform vec4 vMetallicReflectanceFactors;uniform vec3 vEmissiveColor;uniform float visibility;uniform vec3 vAmbientColor; +`;T.ShadersStore[RL]||(T.ShadersStore[RL]=L6);Xfe={name:RL,shader:L6}});var w6,Yfe,F6=C(()=>{G();fx();w6="pbrFragmentDeclaration",Yfe=`uniform vec4 vEyePosition;uniform vec3 vReflectionColor;uniform vec4 vAlbedoColor;uniform float baseWeight;uniform float baseDiffuseRoughness;uniform vec4 vLightingIntensity;uniform vec4 vReflectivityColor;uniform vec4 vMetallicReflectanceFactors;uniform vec3 vEmissiveColor;uniform float visibility;uniform vec3 vAmbientColor; #ifdef ALBEDO uniform vec2 vAlbedoInfos; #endif @@ -20840,7 +20840,7 @@ uniform vec3 vSphericalX;uniform vec3 vSphericalY;uniform vec3 vSphericalZ;unifo #endif #endif #define ADDITIONAL_FRAGMENT_DECLARATION -`;S.IncludesShadersStore[R6]||(S.IncludesShadersStore[R6]=Rfe)});var I6,bfe,M6=C(()=>{k();I6="samplerFragmentAlternateDeclaration",bfe=`#ifdef _DEFINENAME_ +`;T.IncludesShadersStore[w6]||(T.IncludesShadersStore[w6]=Yfe)});var B6,Kfe,U6=C(()=>{G();B6="samplerFragmentAlternateDeclaration",Kfe=`#ifdef _DEFINENAME_ #if _DEFINENAME_DIRECTUV==1 #define v_VARYINGNAME_UV vMainUV1 #elif _DEFINENAME_DIRECTUV==2 @@ -20857,7 +20857,7 @@ uniform vec3 vSphericalX;uniform vec3 vSphericalY;uniform vec3 vSphericalZ;unifo varying vec2 v_VARYINGNAME_UV; #endif #endif -`;S.IncludesShadersStore[I6]||(S.IncludesShadersStore[I6]=bfe)});var C6,Ife,y6=C(()=>{k();Zh();M6();Ux();C6="pbrFragmentSamplersDeclaration",Ife=`#include(_DEFINENAME_,ALBEDO,_VARYINGNAME_,Albedo,_SAMPLERNAME_,albedo) +`;T.IncludesShadersStore[B6]||(T.IncludesShadersStore[B6]=Kfe)});var V6,jfe,G6=C(()=>{G();Qh();U6();jx();V6="pbrFragmentSamplersDeclaration",jfe=`#include(_DEFINENAME_,ALBEDO,_VARYINGNAME_,Albedo,_SAMPLERNAME_,albedo) #include(_DEFINENAME_,BASE_WEIGHT,_VARYINGNAME_,BaseWeight,_SAMPLERNAME_,baseWeight) #include(_DEFINENAME_,BASE_DIFFUSE_ROUGHNESS,_VARYINGNAME_,BaseDiffuseRoughness,_SAMPLERNAME_,baseDiffuseRoughness) #include(_DEFINENAME_,AMBIENT,_VARYINGNAME_,Ambient,_SAMPLERNAME_,ambient) @@ -20924,7 +20924,7 @@ uniform sampler2D refractionSamplerLow;uniform sampler2D refractionSamplerHigh; #ifdef IBL_CDF_FILTERING uniform sampler2D icdfSampler; #endif -`;S.IncludesShadersStore[C6]||(S.IncludesShadersStore[C6]=Ife)});var P6,Mfe,D6=C(()=>{k();Zy();P6="pbrBlockAlbedoOpacity",Mfe=`struct albedoOpacityOutParams +`;T.IncludesShadersStore[V6]||(T.IncludesShadersStore[V6]=jfe)});var k6,qfe,W6=C(()=>{G();aP();k6="pbrBlockAlbedoOpacity",qfe=`struct albedoOpacityOutParams {vec3 surfaceAlbedo;float alpha;}; #define pbr_inline albedoOpacityOutParams albedoOpacityBlock( @@ -21003,7 +21003,7 @@ alpha=1.0; #endif #endif outParams.surfaceAlbedo=surfaceAlbedo;outParams.alpha=alpha;return outParams;} -`;S.IncludesShadersStore[P6]||(S.IncludesShadersStore[P6]=Mfe)});var L6,Cfe,O6=C(()=>{k();L6="pbrBlockReflectivity",Cfe=`struct reflectivityOutParams +`;T.IncludesShadersStore[k6]||(T.IncludesShadersStore[k6]=qfe)});var H6,Zfe,z6=C(()=>{G();H6="pbrBlockReflectivity",Zfe=`struct reflectivityOutParams {float microSurface;float roughness;float diffuseRoughness;float reflectanceF0;vec3 reflectanceF90;vec3 colorReflectanceF0;vec3 colorReflectanceF90; #ifdef METALLICWORKFLOW vec3 surfaceAlbedo;float metallic;float specularWeight;vec3 dielectricColorF0; @@ -21150,7 +21150,7 @@ microSurface=saturate(microSurface);float roughness=1.-microSurface;float diffus diffuseRoughness*=baseDiffuseRoughnessTexture*baseDiffuseRoughnessInfos.y; #endif outParams.microSurface=microSurface;outParams.roughness=roughness;outParams.diffuseRoughness=diffuseRoughness;return outParams;} -`;S.IncludesShadersStore[L6]||(S.IncludesShadersStore[L6]=Cfe)});var N6,yfe,F6=C(()=>{k();N6="pbrBlockAmbientOcclusion",yfe=`struct ambientOcclusionOutParams +`;T.IncludesShadersStore[H6]||(T.IncludesShadersStore[H6]=Zfe)});var X6,Qfe,Y6=C(()=>{G();X6="pbrBlockAmbientOcclusion",Qfe=`struct ambientOcclusionOutParams {vec3 ambientOcclusionColor; #if DEBUGMODE>0 && defined(AMBIENT) vec3 ambientOcclusionColorMap; @@ -21173,7 +21173,7 @@ outParams.ambientOcclusionColorMap=ambientOcclusionColorMap; #endif #endif outParams.ambientOcclusionColor=ambientOcclusionColor;return outParams;} -`;S.IncludesShadersStore[N6]||(S.IncludesShadersStore[N6]=yfe)});var w6,Pfe,B6=C(()=>{k();w6="pbrBlockAlphaFresnel",Pfe=`#ifdef ALPHAFRESNEL +`;T.IncludesShadersStore[X6]||(T.IncludesShadersStore[X6]=Qfe)});var K6,$fe,j6=C(()=>{G();K6="pbrBlockAlphaFresnel",$fe=`#ifdef ALPHAFRESNEL #if defined(ALPHATEST) || defined(ALPHABLEND) struct alphaFresnelOutParams {float alpha;}; @@ -21201,7 +21201,7 @@ outParams.alpha=1.0; return outParams;} #endif #endif -`;S.IncludesShadersStore[w6]||(S.IncludesShadersStore[w6]=Pfe)});var U6,Dfe,V6=C(()=>{k();U6="pbrBlockAnisotropic",Dfe=`#ifdef ANISOTROPIC +`;T.IncludesShadersStore[K6]||(T.IncludesShadersStore[K6]=$fe)});var q6,Jfe,Z6=C(()=>{G();q6="pbrBlockAnisotropic",Jfe=`#ifdef ANISOTROPIC struct anisotropicOutParams {float anisotropy;vec3 anisotropicTangent;vec3 anisotropicBitangent;vec3 anisotropicNormal; #if DEBUGMODE>0 && defined(ANISOTROPIC_TEXTURE) @@ -21234,7 +21234,7 @@ anisotropyDirection.xy=mat2(anisotropyDirection.x,anisotropyDirection.y,-anisotr #endif mat3 anisoTBN=mat3(normalize(TBN[0]),normalize(TBN[1]),normalize(TBN[2]));vec3 anisotropicTangent=normalize(anisoTBN*anisotropyDirection);vec3 anisotropicBitangent=normalize(cross(anisoTBN[2],anisotropicTangent));outParams.anisotropy=anisotropy;outParams.anisotropicTangent=anisotropicTangent;outParams.anisotropicBitangent=anisotropicBitangent;outParams.anisotropicNormal=getAnisotropicBentNormals(anisotropicTangent,anisotropicBitangent,normalW,viewDirectionW,anisotropy,roughness);return outParams;} #endif -`;S.IncludesShadersStore[U6]||(S.IncludesShadersStore[U6]=Dfe)});var G6,Lfe,k6=C(()=>{k();G6="pbrBlockReflection",Lfe=`#ifdef REFLECTION +`;T.IncludesShadersStore[q6]||(T.IncludesShadersStore[q6]=Jfe)});var Q6,ehe,$6=C(()=>{G();Q6="pbrBlockReflection",ehe=`#ifdef REFLECTION struct reflectionOutParams {vec4 environmentRadiance;vec3 environmentIrradiance; #ifdef REFLECTIONMAP_3D @@ -21519,7 +21519,7 @@ outParams.environmentRadiance=environmentRadiance; #endif outParams.environmentIrradiance=environmentIrradiance;outParams.reflectionCoords=reflectionCoords;return outParams;} #endif -`;S.IncludesShadersStore[G6]||(S.IncludesShadersStore[G6]=Lfe)});var W6,Ofe,H6=C(()=>{k();W6="pbrBlockSheen",Ofe=`#ifdef SHEEN +`;T.IncludesShadersStore[Q6]||(T.IncludesShadersStore[Q6]=ehe)});var J6,the,e7=C(()=>{G();J6="pbrBlockSheen",the=`#ifdef SHEEN struct sheenOutParams {float sheenIntensity;vec3 sheenColor;float sheenRoughness; #ifdef SHEEN_LINKWITHALBEDO @@ -21696,7 +21696,7 @@ outParams.sheenAlbedoScaling=1.0-sheenIntensity*max(max(sheenColor.r,sheenColor. #endif outParams.sheenIntensity=sheenIntensity;outParams.sheenColor=sheenColor;outParams.sheenRoughness=sheenRoughness;return outParams;} #endif -`;S.IncludesShadersStore[W6]||(S.IncludesShadersStore[W6]=Ofe)});var z6,Nfe,X6=C(()=>{k();z6="pbrBlockClearcoat",Nfe=`struct clearcoatOutParams +`;T.IncludesShadersStore[J6]||(T.IncludesShadersStore[J6]=the)});var t7,ihe,i7=C(()=>{G();t7="pbrBlockClearcoat",ihe=`struct clearcoatOutParams {vec3 specularEnvironmentR0;float conservationFactor;vec3 clearCoatNormalW;vec2 clearCoatAARoughnessFactors;float clearCoatIntensity;float clearCoatRoughness; #ifdef REFLECTION vec3 finalClearCoatRadianceScaled; @@ -21933,7 +21933,7 @@ outParams.energyConservationFactorClearCoat=getEnergyConservationFactor(outParam #endif return outParams;} #endif -`;S.IncludesShadersStore[z6]||(S.IncludesShadersStore[z6]=Nfe)});var Y6,Ffe,K6=C(()=>{k();Y6="pbrBlockIridescence",Ffe=`struct iridescenceOutParams +`;T.IncludesShadersStore[t7]||(T.IncludesShadersStore[t7]=ihe)});var r7,rhe,n7=C(()=>{G();r7="pbrBlockIridescence",rhe=`struct iridescenceOutParams {float iridescenceIntensity;float iridescenceIOR;float iridescenceThickness;vec3 specularEnvironmentR0;}; #ifdef IRIDESCENCE #define pbr_inline @@ -21973,7 +21973,7 @@ topIor=mix(1.0,vClearCoatRefractionParams.w-1.,clearCoatIntensity);viewAngle=sqr #endif vec3 iridescenceFresnel=evalIridescence(topIor,iridescenceIOR,viewAngle,iridescenceThickness,specularEnvironmentR0);outParams.specularEnvironmentR0=mix(specularEnvironmentR0,iridescenceFresnel,iridescenceIntensity);outParams.iridescenceIntensity=iridescenceIntensity;outParams.iridescenceThickness=iridescenceThickness;outParams.iridescenceIOR=iridescenceIOR;return outParams;} #endif -`;S.IncludesShadersStore[Y6]||(S.IncludesShadersStore[Y6]=Ffe)});var j6,wfe,q6=C(()=>{k();j6="pbrBlockSubSurface",wfe=`struct subSurfaceOutParams +`;T.IncludesShadersStore[r7]||(T.IncludesShadersStore[r7]=rhe)});var s7,nhe,a7=C(()=>{G();s7="pbrBlockSubSurface",nhe=`struct subSurfaceOutParams {vec3 specularEnvironmentReflectance; #ifdef SS_REFRACTION vec3 finalRefraction;vec3 surfaceAlbedo; @@ -22370,11 +22370,11 @@ outParams.refractionIrradiance=refractionIrradiance.rgb; #endif return outParams;} #endif -`;S.IncludesShadersStore[j6]||(S.IncludesShadersStore[j6]=wfe)});var Z6,Bfe,pL=C(()=>{k();Z6="pbrBlockReflectance0",Bfe=`float reflectanceF0=reflectivityOut.reflectanceF0;vec3 specularEnvironmentR0=reflectivityOut.colorReflectanceF0;vec3 specularEnvironmentR90=reflectivityOut.colorReflectanceF90; +`;T.IncludesShadersStore[s7]||(T.IncludesShadersStore[s7]=nhe)});var o7,she,bL=C(()=>{G();o7="pbrBlockReflectance0",she=`float reflectanceF0=reflectivityOut.reflectanceF0;vec3 specularEnvironmentR0=reflectivityOut.colorReflectanceF0;vec3 specularEnvironmentR90=reflectivityOut.colorReflectanceF90; #ifdef ALPHAFRESNEL float reflectance90=fresnelGrazingReflectance(reflectanceF0);specularEnvironmentR90=specularEnvironmentR90*reflectance90; #endif -`;S.IncludesShadersStore[Z6]||(S.IncludesShadersStore[Z6]=Bfe)});var Q6,Ufe,J6=C(()=>{k();qy();pL();Q6="pbrClusteredLightingFunctions",Ufe=`#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0 +`;T.IncludesShadersStore[o7]||(T.IncludesShadersStore[o7]=she)});var l7,ahe,c7=C(()=>{G();sP();bL();l7="pbrClusteredLightingFunctions",ahe=`#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0 #include #define inline lightingInfo computeClusteredLighting( @@ -22487,7 +22487,7 @@ result.sheen+=info.sheen; batchOffset+=CLUSTLIGHT_BATCH;} return result;} #endif -`;S.IncludesShadersStore[Q6]||(S.IncludesShadersStore[Q6]=Ufe)});var $6,Vfe,e7=C(()=>{k();$6="pbrBlockNormalFinal",Vfe=`#if defined(FORCENORMALFORWARD) && defined(NORMAL) +`;T.IncludesShadersStore[l7]||(T.IncludesShadersStore[l7]=ahe)});var f7,ohe,h7=C(()=>{G();f7="pbrBlockNormalFinal",ohe=`#if defined(FORCENORMALFORWARD) && defined(NORMAL) vec3 faceNormal=normalize(cross(dFdx(vPositionW),dFdy(vPositionW)))*vEyePosition.w; #if defined(TWOSIDEDLIGHTING) faceNormal=gl_FrontFacing ? faceNormal : -faceNormal; @@ -22501,7 +22501,7 @@ normalW=gl_FrontFacing ? -normalW : normalW; normalW=gl_FrontFacing ? normalW : -normalW; #endif #endif -`;S.IncludesShadersStore[$6]||(S.IncludesShadersStore[$6]=Vfe)});var t7,Gfe,i7=C(()=>{k();t7="pbrBlockLightmapInit",Gfe=`#ifdef LIGHTMAP +`;T.IncludesShadersStore[f7]||(T.IncludesShadersStore[f7]=ohe)});var d7,lhe,u7=C(()=>{G();d7="pbrBlockLightmapInit",lhe=`#ifdef LIGHTMAP vec4 lightmapColor=texture2D(lightmapSampler,vLightmapUV+uvOffset); #ifdef RGBDLIGHTMAP lightmapColor.rgb=fromRGBD(lightmapColor); @@ -22511,7 +22511,7 @@ lightmapColor.rgb=toLinearSpace(lightmapColor.rgb); #endif lightmapColor.rgb*=vLightmapInfos.y; #endif -`;S.IncludesShadersStore[t7]||(S.IncludesShadersStore[t7]=Gfe)});var r7,kfe,n7=C(()=>{k();r7="pbrBlockGeometryInfo",kfe=`float NdotVUnclamped=dot(normalW,viewDirectionW);float NdotV=absEps(NdotVUnclamped);float alphaG=convertRoughnessToAverageSlope(roughness);vec2 AARoughnessFactors=getAARoughnessFactors(normalW.xyz); +`;T.IncludesShadersStore[d7]||(T.IncludesShadersStore[d7]=lhe)});var m7,che,p7=C(()=>{G();m7="pbrBlockGeometryInfo",che=`float NdotVUnclamped=dot(normalW,viewDirectionW);float NdotV=absEps(NdotVUnclamped);float alphaG=convertRoughnessToAverageSlope(roughness);vec2 AARoughnessFactors=getAARoughnessFactors(normalW.xyz); #ifdef SPECULARAA alphaG+=AARoughnessFactors.y; #endif @@ -22535,7 +22535,7 @@ float eho=environmentHorizonOcclusion(-viewDirectionW,normalW,geometricNormalW); #endif #endif #endif -`;S.IncludesShadersStore[r7]||(S.IncludesShadersStore[r7]=kfe)});var s7,Wfe,a7=C(()=>{k();s7="pbrBlockReflectance",Wfe=`#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX) +`;T.IncludesShadersStore[m7]||(T.IncludesShadersStore[m7]=che)});var _7,fhe,g7=C(()=>{G();_7="pbrBlockReflectance",fhe=`#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX) vec3 baseSpecularEnvironmentReflectance=getReflectanceFromBRDFLookup(vec3(reflectanceF0),reflectivityOut.reflectanceF90,environmentBrdf); #if (CONDUCTOR_SPECULAR_MODEL==CONDUCTOR_SPECULAR_MODEL_OPENPBR) vec3 metalEnvironmentReflectance=reflectivityOut.specularWeight*getF82Specular(NdotV,clearcoatOut.specularEnvironmentR0,reflectivityOut.colorReflectanceF90,reflectivityOut.roughness);vec3 dielectricEnvironmentReflectance=getReflectanceFromBRDFLookup(reflectivityOut.dielectricColorF0,reflectivityOut.colorReflectanceF90,environmentBrdf);vec3 colorSpecularEnvironmentReflectance=mix(dielectricEnvironmentReflectance,metalEnvironmentReflectance,reflectivityOut.metallic); @@ -22561,7 +22561,7 @@ colorSpecularEnvironmentReflectance*=clearcoatOut.conservationFactor; colorSpecularEnvironmentReflectance*=clearcoatOut.absorption; #endif #endif -`;S.IncludesShadersStore[s7]||(S.IncludesShadersStore[s7]=Wfe)});var o7,Hfe,l7=C(()=>{k();o7="pbrBlockDirectLighting",Hfe=`vec3 diffuseBase=vec3(0.,0.,0.); +`;T.IncludesShadersStore[_7]||(T.IncludesShadersStore[_7]=fhe)});var v7,hhe,E7=C(()=>{G();v7="pbrBlockDirectLighting",hhe=`vec3 diffuseBase=vec3(0.,0.,0.); #ifdef SS_TRANSLUCENCY vec3 diffuseTransmissionBase=vec3(0.,0.,0.); #endif @@ -22582,7 +22582,7 @@ float aggShadow=0.;float numLights=0.; #if defined(CLEARCOAT) && defined(CLEARCOAT_TINT) vec3 absorption=vec3(0.); #endif -`;S.IncludesShadersStore[o7]||(S.IncludesShadersStore[o7]=Hfe)});var c7,zfe,f7=C(()=>{k();c7="pbrBlockFinalLitComponents",zfe=`aggShadow=aggShadow/numLights; +`;T.IncludesShadersStore[v7]||(T.IncludesShadersStore[v7]=hhe)});var S7,dhe,T7=C(()=>{G();S7="pbrBlockFinalLitComponents",dhe=`aggShadow=aggShadow/numLights; #if defined(ENVIRONMENTBRDF) #ifdef MS_BRDF_ENERGY_CONSERVATION vec3 baseSpecularEnergyConservationFactor=getEnergyConservationFactor(vec3(reflectanceF0),environmentBrdf);vec3 coloredEnergyConservationFactor=getEnergyConservationFactor(clearcoatOut.specularEnvironmentR0,environmentBrdf); @@ -22688,7 +22688,7 @@ luminanceOverAlpha+=getLuminance(finalClearCoatScaled); alpha=saturate(alpha+luminanceOverAlpha*luminanceOverAlpha); #endif #endif -`;S.IncludesShadersStore[c7]||(S.IncludesShadersStore[c7]=zfe)});var h7,Xfe,d7=C(()=>{k();h7="pbrBlockFinalUnlitComponents",Xfe=`vec3 finalDiffuse=diffuseBase;finalDiffuse*=surfaceAlbedo; +`;T.IncludesShadersStore[S7]||(T.IncludesShadersStore[S7]=dhe)});var A7,uhe,x7=C(()=>{G();A7="pbrBlockFinalUnlitComponents",uhe=`vec3 finalDiffuse=diffuseBase;finalDiffuse*=surfaceAlbedo; #if defined(SS_REFRACTION) && !defined(UNLIT) && !defined(LEGACY_SPECULAR_ENERGY_CONSERVATION) finalDiffuse*=subSurfaceOut.refractionOpacity; #endif @@ -22712,7 +22712,7 @@ vec3 ambientOcclusionForDirectDiffuse=mix(vec3(1.),aoOut.ambientOcclusionColor,v vec3 ambientOcclusionForDirectDiffuse=aoOut.ambientOcclusionColor; #endif finalAmbient*=aoOut.ambientOcclusionColor;finalDiffuse*=ambientOcclusionForDirectDiffuse; -`;S.IncludesShadersStore[h7]||(S.IncludesShadersStore[h7]=Xfe)});var u7,Yfe,m7=C(()=>{k();u7="pbrBlockFinalColorComposition",Yfe=`vec4 finalColor=vec4( +`;T.IncludesShadersStore[A7]||(T.IncludesShadersStore[A7]=uhe)});var R7,mhe,b7=C(()=>{G();R7="pbrBlockFinalColorComposition",mhe=`vec4 finalColor=vec4( #ifndef UNLIT #ifdef REFLECTION finalIrradiance + @@ -22754,7 +22754,7 @@ finalColor.rgb+=lightmapColor.rgb; finalColor.rgb+=finalEmissive; #define CUSTOM_FRAGMENT_BEFORE_FOG finalColor=max(finalColor,0.0); -`;S.IncludesShadersStore[u7]||(S.IncludesShadersStore[u7]=Yfe)});var p7,Kfe,_7=C(()=>{k();p7="pbrBlockPrePass",Kfe=`#if SCENE_MRT_COUNT>0 +`;T.IncludesShadersStore[R7]||(T.IncludesShadersStore[R7]=mhe)});var I7,phe,M7=C(()=>{G();I7="pbrBlockPrePass",phe=`#if SCENE_MRT_COUNT>0 float writeGeometryInfo=finalColor.a>ALPHATESTVALUE ? 1.0 : 0.0; #ifdef PREPASS_POSITION gl_FragData[PREPASS_POSITION_INDEX]=vec4(vPositionW,writeGeometryInfo); @@ -22836,7 +22836,7 @@ gl_FragData[PREPASS_REFLECTIVITY_INDEX]=vec4( 0.0,0.0,0.0,1.0 )*writeGeometryInf #endif #endif #endif -`;S.IncludesShadersStore[p7]||(S.IncludesShadersStore[p7]=Kfe)});var v7={};et(v7,{pbrPixelShader:()=>jfe});var _L,g7,jfe,E7=C(()=>{k();tx();ix();b6();uL();WD();rx();nx();y6();ax();hc();qh();$_();Ta();HD();zD();XD();ox();sx();Vm();YD();KD();Um();jD();qD();Vx();lx();cx();cg();D6();O6();F6();B6();V6();k6();H6();X6();K6();q6();J6();dc();ZD();fx();e7();hx();i7();n7();pL();a7();l7();Qy();f7();d7();m7();dx();eg();QD();_7();ux();JD();_L="pbrPixelShader",g7=`#define PBR_FRAGMENT_SHADER +`;T.IncludesShadersStore[I7]||(T.IncludesShadersStore[I7]=phe)});var y7={};$e(y7,{pbrPixelShader:()=>_he});var IL,C7,_he,P7=C(()=>{G();hx();dx();F6();xL();$D();ux();mx();G6();_x();uc();Zh();og();ba();JD();eL();tL();gx();px();Hm();iL();rL();Wm();nL();sL();qx();vx();Ex();gg();W6();z6();Y6();j6();Z6();$6();e7();i7();n7();a7();c7();mc();aL();Sx();h7();Tx();u7();p7();bL();g7();E7();oP();T7();x7();b7();Ax();lg();oL();M7();xx();lL();IL="pbrPixelShader",C7=`#define PBR_FRAGMENT_SHADER #define CUSTOM_FRAGMENT_EXTENSION #if defined(BUMP) || !defined(NORMAL) || defined(FORCENORMALFORWARD) || defined(SPECULARAA) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) #extension GL_OES_standard_derivatives : enable @@ -23399,23 +23399,23 @@ if (fragDepth==nearestDepth) {frontColor.rgb+=finalColor.rgb*finalColor.a*alphaM #include #define CUSTOM_FRAGMENT_MAIN_END } -`;S.ShadersStore[_L]||(S.ShadersStore[_L]=g7);jfe={name:_L,shader:g7}});var Hm,gL,Hx,vL,mr,S7=C(()=>{kt();Ut();Pt();$a();wx();ps();Ve();Ui();g8();dA();Ht();uA();x_();Pn();ba();H_();xa();YM();Tf();v8();E8();S8();T8();A8();Fy();el();z_();yn();mA();pA();_A();gA();Hm={effect:null,subMesh:null},gL=class extends Cm(Mm(vr)){},Hx=class extends bm(gL){constructor(e){super(e),this.PBR=!0,this.NUM_SAMPLES="0",this.REALTIME_FILTERING=!1,this.IBL_CDF_FILTERING=!1,this.ALBEDO=!1,this.GAMMAALBEDO=!1,this.ALBEDODIRECTUV=0,this.VERTEXCOLOR=!1,this.BASE_WEIGHT=!1,this.BASE_WEIGHTDIRECTUV=0,this.BASE_DIFFUSE_ROUGHNESS=!1,this.BASE_DIFFUSE_ROUGHNESSDIRECTUV=0,this.BAKED_VERTEX_ANIMATION_TEXTURE=!1,this.AMBIENT=!1,this.AMBIENTDIRECTUV=0,this.AMBIENTINGRAYSCALE=!1,this.OPACITY=!1,this.VERTEXALPHA=!1,this.OPACITYDIRECTUV=0,this.OPACITYRGB=!1,this.ALPHATEST=!1,this.DEPTHPREPASS=!1,this.ALPHABLEND=!1,this.ALPHAFROMALBEDO=!1,this.ALPHATESTVALUE="0.5",this.SPECULAROVERALPHA=!1,this.RADIANCEOVERALPHA=!1,this.ALPHAFRESNEL=!1,this.LINEARALPHAFRESNEL=!1,this.PREMULTIPLYALPHA=!1,this.EMISSIVE=!1,this.EMISSIVEDIRECTUV=0,this.GAMMAEMISSIVE=!1,this.REFLECTIVITY=!1,this.REFLECTIVITY_GAMMA=!1,this.REFLECTIVITYDIRECTUV=0,this.SPECULARTERM=!1,this.MICROSURFACEFROMREFLECTIVITYMAP=!1,this.MICROSURFACEAUTOMATIC=!1,this.LODBASEDMICROSFURACE=!1,this.MICROSURFACEMAP=!1,this.MICROSURFACEMAPDIRECTUV=0,this.METALLICWORKFLOW=!1,this.ROUGHNESSSTOREINMETALMAPALPHA=!1,this.ROUGHNESSSTOREINMETALMAPGREEN=!1,this.METALLNESSSTOREINMETALMAPBLUE=!1,this.AOSTOREINMETALMAPRED=!1,this.METALLIC_REFLECTANCE=!1,this.METALLIC_REFLECTANCE_GAMMA=!1,this.METALLIC_REFLECTANCEDIRECTUV=0,this.METALLIC_REFLECTANCE_USE_ALPHA_ONLY=!1,this.REFLECTANCE=!1,this.REFLECTANCE_GAMMA=!1,this.REFLECTANCEDIRECTUV=0,this.ENVIRONMENTBRDF=!1,this.ENVIRONMENTBRDF_RGBD=!1,this.NORMAL=!1,this.TANGENT=!1,this.BUMP=!1,this.BUMPDIRECTUV=0,this.OBJECTSPACE_NORMALMAP=!1,this.PARALLAX=!1,this.PARALLAX_RHS=!1,this.PARALLAXOCCLUSION=!1,this.NORMALXYSCALE=!0,this.LIGHTMAP=!1,this.LIGHTMAPDIRECTUV=0,this.USELIGHTMAPASSHADOWMAP=!1,this.GAMMALIGHTMAP=!1,this.RGBDLIGHTMAP=!1,this.REFLECTION=!1,this.REFLECTIONMAP_3D=!1,this.REFLECTIONMAP_SPHERICAL=!1,this.REFLECTIONMAP_PLANAR=!1,this.REFLECTIONMAP_CUBIC=!1,this.USE_LOCAL_REFLECTIONMAP_CUBIC=!1,this.REFLECTIONMAP_PROJECTION=!1,this.REFLECTIONMAP_SKYBOX=!1,this.REFLECTIONMAP_EXPLICIT=!1,this.REFLECTIONMAP_EQUIRECTANGULAR=!1,this.REFLECTIONMAP_EQUIRECTANGULAR_FIXED=!1,this.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED=!1,this.INVERTCUBICMAP=!1,this.USESPHERICALFROMREFLECTIONMAP=!1,this.USEIRRADIANCEMAP=!1,this.USE_IRRADIANCE_DOMINANT_DIRECTION=!1,this.USESPHERICALINVERTEX=!1,this.REFLECTIONMAP_OPPOSITEZ=!1,this.LODINREFLECTIONALPHA=!1,this.GAMMAREFLECTION=!1,this.RGBDREFLECTION=!1,this.LINEARSPECULARREFLECTION=!1,this.RADIANCEOCCLUSION=!1,this.HORIZONOCCLUSION=!1,this.INSTANCES=!1,this.THIN_INSTANCES=!1,this.INSTANCESCOLOR=!1,this.NUM_BONE_INFLUENCERS=0,this.BonesPerMesh=0,this.BONETEXTURE=!1,this.BONES_VELOCITY_ENABLED=!1,this.NONUNIFORMSCALING=!1,this.MORPHTARGETS=!1,this.MORPHTARGETS_POSITION=!1,this.MORPHTARGETS_NORMAL=!1,this.MORPHTARGETS_TANGENT=!1,this.MORPHTARGETS_UV=!1,this.MORPHTARGETS_UV2=!1,this.MORPHTARGETS_COLOR=!1,this.MORPHTARGETTEXTURE_HASPOSITIONS=!1,this.MORPHTARGETTEXTURE_HASNORMALS=!1,this.MORPHTARGETTEXTURE_HASTANGENTS=!1,this.MORPHTARGETTEXTURE_HASUVS=!1,this.MORPHTARGETTEXTURE_HASUV2S=!1,this.MORPHTARGETTEXTURE_HASCOLORS=!1,this.NUM_MORPH_INFLUENCERS=0,this.MORPHTARGETS_TEXTURE=!1,this.MULTIVIEW=!1,this.ORDER_INDEPENDENT_TRANSPARENCY=!1,this.ORDER_INDEPENDENT_TRANSPARENCY_16BITS=!1,this.USEPHYSICALLIGHTFALLOFF=!1,this.USEGLTFLIGHTFALLOFF=!1,this.TWOSIDEDLIGHTING=!1,this.MIRRORED=!1,this.SHADOWFLOAT=!1,this.CLIPPLANE=!1,this.CLIPPLANE2=!1,this.CLIPPLANE3=!1,this.CLIPPLANE4=!1,this.CLIPPLANE5=!1,this.CLIPPLANE6=!1,this.POINTSIZE=!1,this.FOG=!1,this.LOGARITHMICDEPTH=!1,this.CAMERA_ORTHOGRAPHIC=!1,this.CAMERA_PERSPECTIVE=!1,this.AREALIGHTSUPPORTED=!0,this.FORCENORMALFORWARD=!1,this.SPECULARAA=!1,this.UNLIT=!1,this.DECAL_AFTER_DETAIL=!1,this.DEBUGMODE=0,this.USE_VERTEX_PULLING=!1,this.VERTEX_PULLING_USE_INDEX_BUFFER=!1,this.VERTEX_PULLING_INDEX_BUFFER_32BITS=!1,this.RIGHT_HANDED=!1,this.CLUSTLIGHT_SLICES=0,this.CLUSTLIGHT_BATCH=0,this.rebuild()}reset(){super.reset(),this.ALPHATESTVALUE="0.5",this.PBR=!0,this.NORMALXYSCALE=!0}},vL=class extends ym(nl){},mr=class n extends vL{get realTimeFiltering(){return this._realTimeFiltering}set realTimeFiltering(e){this._realTimeFiltering=e,this.markAsDirty(1)}get realTimeFilteringQuality(){return this._realTimeFilteringQuality}set realTimeFilteringQuality(e){this._realTimeFilteringQuality=e,this.markAsDirty(1)}get canRenderToMRT(){return!0}constructor(e,t,i=!1){super(e,t,void 0,i||n.ForceGLSL),this._directIntensity=1,this._emissiveIntensity=1,this._environmentIntensity=1,this._specularIntensity=1,this._lightingInfos=new Mi(this._directIntensity,this._emissiveIntensity,this._environmentIntensity,this._specularIntensity),this._disableBumpMap=!1,this._albedoTexture=null,this._baseWeightTexture=null,this._baseDiffuseRoughnessTexture=null,this._ambientTexture=null,this._ambientTextureStrength=1,this._ambientTextureImpactOnAnalyticalLights=n.DEFAULT_AO_ON_ANALYTICAL_LIGHTS,this._opacityTexture=null,this._reflectionTexture=null,this._emissiveTexture=null,this._reflectivityTexture=null,this._metallicTexture=null,this._metallic=null,this._roughness=null,this._metallicF0Factor=1,this._metallicReflectanceColor=Te.White(),this._useOnlyMetallicFromMetallicReflectanceTexture=!1,this._metallicReflectanceTexture=null,this._reflectanceTexture=null,this._microSurfaceTexture=null,this._bumpTexture=null,this._lightmapTexture=null,this._ambientColor=new Te(0,0,0),this._albedoColor=new Te(1,1,1),this._baseWeight=1,this._baseDiffuseRoughness=null,this._reflectivityColor=new Te(1,1,1),this._reflectionColor=new Te(1,1,1),this._emissiveColor=new Te(0,0,0),this._microSurface=.9,this._useLightmapAsShadowmap=!1,this._useHorizonOcclusion=!0,this._useRadianceOcclusion=!0,this._useAlphaFromAlbedoTexture=!1,this._useSpecularOverAlpha=!0,this._useMicroSurfaceFromReflectivityMapAlpha=!1,this._useRoughnessFromMetallicTextureAlpha=!0,this._useRoughnessFromMetallicTextureGreen=!1,this._useMetallnessFromMetallicTextureBlue=!1,this._useAmbientOcclusionFromMetallicTextureRed=!1,this._useAmbientInGrayScale=!1,this._useAutoMicroSurfaceFromReflectivityMap=!1,this._lightFalloff=n.LIGHTFALLOFF_PHYSICAL,this._useRadianceOverAlpha=!0,this._useObjectSpaceNormalMap=!1,this._useParallax=!1,this._useParallaxOcclusion=!1,this._parallaxScaleBias=.05,this._disableLighting=!1,this._maxSimultaneousLights=4,this._invertNormalMapX=!1,this._invertNormalMapY=!1,this._twoSidedLighting=!1,this._alphaCutOff=.4,this._useAlphaFresnel=!1,this._useLinearAlphaFresnel=!1,this._environmentBRDFTexture=null,this._forceIrradianceInFragment=!1,this._realTimeFiltering=!1,this._realTimeFilteringQuality=8,this._forceNormalForward=!1,this._enableSpecularAntiAliasing=!1,this._renderTargets=new Fi(16),this._globalAmbientColor=new Te(0,0,0),this._unlit=!1,this._applyDecalMapAfterDetailMap=!1,this._debugMode=0,this._shadersLoaded=!1,this._breakShaderLoadedCheck=!1,this._vertexPullingMetadata=null,this.debugMode=0,this.debugLimit=-1,this.debugFactor=1,this._cacheHasRenderTargetTextures=!1,this.brdf=new br(this),this.clearCoat=new tn(this),this.iridescence=new xs(this),this.anisotropy=new gc(this),this.sheen=new Ys(this),this.subSurface=new Ai(this),this.detailMap=new Ia(this),this._attachImageProcessingConfiguration(null),this.getRenderTargetTextures=()=>(this._renderTargets.reset(),le.ReflectionTextureEnabled&&this._reflectionTexture&&this._reflectionTexture.isRenderTarget&&this._renderTargets.push(this._reflectionTexture),this._eventInfo.renderTargets=this._renderTargets,this._callbackPluginEventFillRenderTargetTextures(this._eventInfo),this._renderTargets),this._environmentBRDFTexture=Fx(this.getScene()),this.prePassConfiguration=new Ts}get hasRenderTargetTextures(){return le.ReflectionTextureEnabled&&this._reflectionTexture&&this._reflectionTexture.isRenderTarget?!0:this._cacheHasRenderTargetTextures}get isPrePassCapable(){return!this.disableDepthWrite}getClassName(){return"PBRBaseMaterial"}get _disableAlphaBlending(){var e;return this._transparencyMode===n.PBRMATERIAL_OPAQUE||this._transparencyMode===n.PBRMATERIAL_ALPHATEST||((e=this.subSurface)==null?void 0:e.disableAlphaBlending)}needAlphaBlending(){return this._hasTransparencyMode?this._transparencyModeIsBlend:this._disableAlphaBlending?!1:this.alpha<1||this._opacityTexture!=null||this._shouldUseAlphaFromAlbedoTexture()}needAlphaTesting(){var e;return this._hasTransparencyMode?this._transparencyModeIsTest:(e=this.subSurface)!=null&&e.disableAlphaBlending?!1:this._hasAlphaChannel()&&(this._transparencyMode==null||this._transparencyMode===n.PBRMATERIAL_ALPHATEST)}_shouldUseAlphaFromAlbedoTexture(){return this._albedoTexture!=null&&this._albedoTexture.hasAlpha&&this._useAlphaFromAlbedoTexture&&this._transparencyMode!==n.PBRMATERIAL_OPAQUE}_hasAlphaChannel(){return this._albedoTexture!=null&&this._albedoTexture.hasAlpha||this._opacityTexture!=null}getAlphaTestTexture(){return this._albedoTexture}isReadyForSubMesh(e,t,i){var d;this._uniformBufferLayoutBuilt||this.buildUniformLayout();let r=t._drawWrapper;if(r.effect&&this.isFrozen&&r._wasPreviouslyReady&&r._wasPreviouslyUsingInstances===i)return!0;t.materialDefines||(this._callbackPluginEventGeneric(4,this._eventInfo),t.materialDefines=new Hx(this._eventInfo.defineNames));let s=t.materialDefines;if(this._isReadyForSubMesh(t))return!0;let a=this.getScene(),o=a.getEngine();if(s._areTexturesDirty&&(this._eventInfo.hasRenderTargetTextures=!1,this._callbackPluginEventHasRenderTargetTextures(this._eventInfo),this._cacheHasRenderTargetTextures=this._eventInfo.hasRenderTargetTextures,a.texturesEnabled)){if(this._albedoTexture&&le.DiffuseTextureEnabled&&!this._albedoTexture.isReadyOrNotBlocking()||this._baseWeightTexture&&le.BaseWeightTextureEnabled&&!this._baseWeightTexture.isReadyOrNotBlocking()||this._baseDiffuseRoughnessTexture&&le.BaseDiffuseRoughnessTextureEnabled&&!this._baseDiffuseRoughnessTexture.isReadyOrNotBlocking()||this._ambientTexture&&le.AmbientTextureEnabled&&!this._ambientTexture.isReadyOrNotBlocking()||this._opacityTexture&&le.OpacityTextureEnabled&&!this._opacityTexture.isReadyOrNotBlocking())return!1;let u=this._getReflectionTexture();if(u&&le.ReflectionTextureEnabled){if(!u.isReadyOrNotBlocking())return!1;if(u.irradianceTexture){if(!u.irradianceTexture.isReadyOrNotBlocking())return!1}else if(!u.sphericalPolynomial&&((d=u.getInternalTexture())!=null&&d._sphericalPolynomialPromise))return!1}if(this._lightmapTexture&&le.LightmapTextureEnabled&&!this._lightmapTexture.isReadyOrNotBlocking()||this._emissiveTexture&&le.EmissiveTextureEnabled&&!this._emissiveTexture.isReadyOrNotBlocking())return!1;if(le.SpecularTextureEnabled){if(this._metallicTexture){if(!this._metallicTexture.isReadyOrNotBlocking())return!1}else if(this._reflectivityTexture&&!this._reflectivityTexture.isReadyOrNotBlocking())return!1;if(this._metallicReflectanceTexture&&!this._metallicReflectanceTexture.isReadyOrNotBlocking()||this._reflectanceTexture&&!this._reflectanceTexture.isReadyOrNotBlocking()||this._microSurfaceTexture&&!this._microSurfaceTexture.isReadyOrNotBlocking())return!1}if(o.getCaps().standardDerivatives&&this._bumpTexture&&le.BumpTextureEnabled&&!this._disableBumpMap&&!this._bumpTexture.isReady()||this._environmentBRDFTexture&&le.ReflectionTextureEnabled&&!this._environmentBRDFTexture.isReady())return!1}if(this._eventInfo.isReadyForSubMesh=!0,this._eventInfo.defines=s,this._eventInfo.subMesh=t,this._callbackPluginEventIsReadyForSubMesh(this._eventInfo),!this._eventInfo.isReadyForSubMesh||s._areImageProcessingDirty&&this._imageProcessingConfiguration&&!this._imageProcessingConfiguration.isReady())return!1;if(s.AREALIGHTUSED||s.CLUSTLIGHT_BATCH){for(let u=0;u{m.push(`vp_${R}_info`)}))}else this._vertexPullingMetadata=null;Wt&&(Wt.PrepareUniforms(m,i),Wt.PrepareSamplers(_,i)),mm({uniformsNames:m,uniformBuffersNames:p,samplers:_,defines:i,maxSimultaneousLights:this._maxSimultaneousLights,shaderLanguage:this._shaderLanguage});let v={};this.customShaderNameResolve&&(u=this.customShaderNameResolve(u,m,p,_,i,d,v));let x=i.toString(),A=c.createEffect(u,{attributes:d,uniformsNames:m,uniformBuffersNames:p,samplers:_,defines:x,fallbacks:f,onCompiled:r,onError:s,indexParameters:g,processFinalCode:v.processFinalCode,processCodeAfterIncludes:this._eventInfo.customCode,multiTarget:i.PREPASS,shaderLanguage:this._shaderLanguage,extraInitializationsAsync:this._shadersLoaded?void 0:async()=>{this.shaderLanguage===1?await Promise.all([Promise.resolve().then(()=>(I8(),b8)),Promise.resolve().then(()=>(g6(),_6))]):await Promise.all([Promise.resolve().then(()=>(x6(),A6)),Promise.resolve().then(()=>(E7(),v7))]),this._shadersLoaded=!0}},c);return this._eventInfo.customCode=void 0,A}_prepareDefines(e,t,i,r=null,s=null){let a=t.hasThinInstances,o=this.getScene(),l=o.getEngine();lm(o,e,i,!0,this._maxSimultaneousLights,this._disableLighting),i._needNormals=!0,hm(o,i);let c=this.needAlphaBlendingForMesh(e)&&this.getScene().useOrderIndependentTransparency;if(um(o,i,this.canRenderToMRT&&!c),dm(o,i,c),Nn.PrepareDefines(l.currentRenderPassId,e,i),i.METALLICWORKFLOW=this.isMetallicWorkflow(),i._areTexturesDirty){i._needUVs=!1;for(let f=1;f<=6;++f)i["MAINUV"+f]=!1;if(o.texturesEnabled){i.ALBEDODIRECTUV=0,i.BASE_WEIGHTDIRECTUV=0,i.BASE_DIFFUSE_ROUGHNESSDIRECTUV=0,i.AMBIENTDIRECTUV=0,i.OPACITYDIRECTUV=0,i.EMISSIVEDIRECTUV=0,i.REFLECTIVITYDIRECTUV=0,i.MICROSURFACEMAPDIRECTUV=0,i.METALLIC_REFLECTANCEDIRECTUV=0,i.REFLECTANCEDIRECTUV=0,i.BUMPDIRECTUV=0,i.LIGHTMAPDIRECTUV=0,l.getCaps().textureLOD&&(i.LODBASEDMICROSFURACE=!0),this._albedoTexture&&le.DiffuseTextureEnabled?(ri(this._albedoTexture,i,"ALBEDO"),i.GAMMAALBEDO=this._albedoTexture.gammaSpace):i.ALBEDO=!1,this._baseWeightTexture&&le.BaseWeightTextureEnabled?ri(this._baseWeightTexture,i,"BASE_WEIGHT"):i.BASE_WEIGHT=!1,this._baseDiffuseRoughnessTexture&&le.BaseDiffuseRoughnessTextureEnabled?ri(this._baseDiffuseRoughnessTexture,i,"BASE_DIFFUSE_ROUGHNESS"):i.BASE_DIFFUSE_ROUGHNESS=!1,this._ambientTexture&&le.AmbientTextureEnabled?(ri(this._ambientTexture,i,"AMBIENT"),i.AMBIENTINGRAYSCALE=this._useAmbientInGrayScale):i.AMBIENT=!1,this._opacityTexture&&le.OpacityTextureEnabled?(ri(this._opacityTexture,i,"OPACITY"),i.OPACITYRGB=this._opacityTexture.getAlphaFromRGB):i.OPACITY=!1;let f=this._getReflectionTexture(),h=this._forceIrradianceInFragment||this.realTimeFiltering||this._twoSidedLighting||l.getCaps().maxVaryingVectors<=8||this._baseDiffuseRoughnessTexture!=null;uf(o,f,i,this.realTimeFiltering,this.realTimeFilteringQuality,!h),this._lightmapTexture&&le.LightmapTextureEnabled?(ri(this._lightmapTexture,i,"LIGHTMAP"),i.USELIGHTMAPASSHADOWMAP=this._useLightmapAsShadowmap,i.GAMMALIGHTMAP=this._lightmapTexture.gammaSpace,i.RGBDLIGHTMAP=this._lightmapTexture.isRGBD):i.LIGHTMAP=!1,this._emissiveTexture&&le.EmissiveTextureEnabled?(ri(this._emissiveTexture,i,"EMISSIVE"),i.GAMMAEMISSIVE=this._emissiveTexture.gammaSpace):i.EMISSIVE=!1,le.SpecularTextureEnabled?(this._metallicTexture?(ri(this._metallicTexture,i,"REFLECTIVITY"),i.ROUGHNESSSTOREINMETALMAPALPHA=this._useRoughnessFromMetallicTextureAlpha,i.ROUGHNESSSTOREINMETALMAPGREEN=!this._useRoughnessFromMetallicTextureAlpha&&this._useRoughnessFromMetallicTextureGreen,i.METALLNESSSTOREINMETALMAPBLUE=this._useMetallnessFromMetallicTextureBlue,i.AOSTOREINMETALMAPRED=this._useAmbientOcclusionFromMetallicTextureRed,i.REFLECTIVITY_GAMMA=!1):this._reflectivityTexture?(ri(this._reflectivityTexture,i,"REFLECTIVITY"),i.MICROSURFACEFROMREFLECTIVITYMAP=this._useMicroSurfaceFromReflectivityMapAlpha,i.MICROSURFACEAUTOMATIC=this._useAutoMicroSurfaceFromReflectivityMap,i.REFLECTIVITY_GAMMA=this._reflectivityTexture.gammaSpace):i.REFLECTIVITY=!1,this._metallicReflectanceTexture||this._reflectanceTexture?(i.METALLIC_REFLECTANCE_USE_ALPHA_ONLY=this._useOnlyMetallicFromMetallicReflectanceTexture,this._metallicReflectanceTexture?(ri(this._metallicReflectanceTexture,i,"METALLIC_REFLECTANCE"),i.METALLIC_REFLECTANCE_GAMMA=this._metallicReflectanceTexture.gammaSpace):i.METALLIC_REFLECTANCE=!1,this._reflectanceTexture&&(!this._metallicReflectanceTexture||this._metallicReflectanceTexture&&this._useOnlyMetallicFromMetallicReflectanceTexture)?(ri(this._reflectanceTexture,i,"REFLECTANCE"),i.REFLECTANCE_GAMMA=this._reflectanceTexture.gammaSpace):i.REFLECTANCE=!1):(i.METALLIC_REFLECTANCE=!1,i.REFLECTANCE=!1),this._microSurfaceTexture?ri(this._microSurfaceTexture,i,"MICROSURFACEMAP"):i.MICROSURFACEMAP=!1):(i.REFLECTIVITY=!1,i.MICROSURFACEMAP=!1),l.getCaps().standardDerivatives&&this._bumpTexture&&le.BumpTextureEnabled&&!this._disableBumpMap?(ri(this._bumpTexture,i,"BUMP"),this._useParallax&&this._albedoTexture&&le.DiffuseTextureEnabled?(i.PARALLAX=!0,i.PARALLAX_RHS=o.useRightHandedSystem,i.PARALLAXOCCLUSION=!!this._useParallaxOcclusion):i.PARALLAX=!1,i.OBJECTSPACE_NORMALMAP=this._useObjectSpaceNormalMap):(i.BUMP=!1,i.PARALLAX=!1,i.PARALLAX_RHS=!1,i.PARALLAXOCCLUSION=!1,i.OBJECTSPACE_NORMALMAP=!1),this._environmentBRDFTexture&&le.ReflectionTextureEnabled?(i.ENVIRONMENTBRDF=!0,i.ENVIRONMENTBRDF_RGBD=this._environmentBRDFTexture.isRGBD):(i.ENVIRONMENTBRDF=!1,i.ENVIRONMENTBRDF_RGBD=!1),this._shouldUseAlphaFromAlbedoTexture()?i.ALPHAFROMALBEDO=!0:i.ALPHAFROMALBEDO=!1}i.SPECULAROVERALPHA=this._useSpecularOverAlpha,this._lightFalloff===n.LIGHTFALLOFF_STANDARD?(i.USEPHYSICALLIGHTFALLOFF=!1,i.USEGLTFLIGHTFALLOFF=!1):this._lightFalloff===n.LIGHTFALLOFF_GLTF?(i.USEPHYSICALLIGHTFALLOFF=!1,i.USEGLTFLIGHTFALLOFF=!0):(i.USEPHYSICALLIGHTFALLOFF=!0,i.USEGLTFLIGHTFALLOFF=!1),i.RADIANCEOVERALPHA=this._useRadianceOverAlpha,!this.backFaceCulling&&this._twoSidedLighting?i.TWOSIDEDLIGHTING=!0:i.TWOSIDEDLIGHTING=!1,i.MIRRORED=!!o._mirroredCameraPosition,i.SPECULARAA=l.getCaps().standardDerivatives&&this._enableSpecularAntiAliasing}(i._areTexturesDirty||i._areMiscDirty)&&(i.ALPHATESTVALUE=`${this._alphaCutOff}${this._alphaCutOff%1===0?".":""}`,i.PREMULTIPLYALPHA=this.alphaMode===7||this.alphaMode===8,i.ALPHABLEND=this.needAlphaBlendingForMesh(e),i.ALPHAFRESNEL=this._useAlphaFresnel||this._useLinearAlphaFresnel,i.LINEARALPHAFRESNEL=this._useLinearAlphaFresnel),i._areImageProcessingDirty&&this._imageProcessingConfiguration&&this._imageProcessingConfiguration.prepareDefines(i),i.FORCENORMALFORWARD=this._forceNormalForward,i.RADIANCEOCCLUSION=this._useRadianceOcclusion,i.HORIZONOCCLUSION=this._useHorizonOcclusion,i._areMiscDirty&&(am(e,o,this._useLogarithmicDepth,this.pointsCloud,this.fogEnabled,this.needAlphaTestingForMesh(e),i,this._applyDecalMapAfterDetailMap,this._useVertexPulling,t,this._isVertexOutputInvariant),i.UNLIT=this._unlit||(this.pointsCloud||this.wireframe)&&!e.isVerticesDataPresent(L.NormalKind),i.DEBUGMODE=this._debugMode),cm(o,l,this,i,!!r,s,a),this._eventInfo.defines=i,this._eventInfo.mesh=e,this._callbackPluginEventPrepareDefinesBeforeAttributes(this._eventInfo),fm(e,i,!0,!0,!0,this._transparencyMode!==n.PBRMATERIAL_OPAQUE),this._callbackPluginEventPrepareDefines(this._eventInfo)}forceCompilation(e,t,i){let r={clipPlane:!1,useInstances:!1,...i};this._uniformBufferLayoutBuilt||this.buildUniformLayout(),this._callbackPluginEventGeneric(4,this._eventInfo),(()=>{if(this._breakShaderLoadedCheck)return;let a=new Hx(this._eventInfo.defineNames),o=this._prepareEffect(e,e,a,void 0,void 0,r.useInstances,r.clipPlane);this._onEffectCreatedObservable&&(Hm.effect=o,Hm.subMesh=null,this._onEffectCreatedObservable.notifyObservers(Hm)),o.isReady()?t&&t(this):o.onCompileObservable.add(()=>{t&&t(this)})})()}buildUniformLayout(){let e=this._uniformBuffer;e.addUniform("vAlbedoInfos",2),e.addUniform("vBaseWeightInfos",2),e.addUniform("vBaseDiffuseRoughnessInfos",2),e.addUniform("vAmbientInfos",4),e.addUniform("vOpacityInfos",2),e.addUniform("vEmissiveInfos",2),e.addUniform("vLightmapInfos",2),e.addUniform("vReflectivityInfos",3),e.addUniform("vMicroSurfaceSamplerInfos",2),e.addUniform("vBumpInfos",3),e.addUniform("albedoMatrix",16),e.addUniform("baseWeightMatrix",16),e.addUniform("baseDiffuseRoughnessMatrix",16),e.addUniform("ambientMatrix",16),e.addUniform("opacityMatrix",16),e.addUniform("emissiveMatrix",16),e.addUniform("lightmapMatrix",16),e.addUniform("reflectivityMatrix",16),e.addUniform("microSurfaceSamplerMatrix",16),e.addUniform("bumpMatrix",16),e.addUniform("vTangentSpaceParams",2),e.addUniform("vAlbedoColor",4),e.addUniform("baseWeight",1),e.addUniform("baseDiffuseRoughness",1),e.addUniform("vLightingIntensity",4),e.addUniform("pointSize",1),e.addUniform("vReflectivityColor",4),e.addUniform("vEmissiveColor",3),e.addUniform("vAmbientColor",3),e.addUniform("vDebugMode",2),e.addUniform("vMetallicReflectanceFactors",4),e.addUniform("vMetallicReflectanceInfos",2),e.addUniform("metallicReflectanceMatrix",16),e.addUniform("vReflectanceInfos",2),e.addUniform("reflectanceMatrix",16),e.addUniform("cameraInfo",4),pm(e,!0,!0,!0,!0,!0),super.buildUniformLayout()}bindForSubMesh(e,t,i){var d,u,m,_;let r=this.getScene(),s=i.materialDefines;if(!s)return;let a=i.effect;if(!a)return;this._activeEffect=a,t.getMeshUniformBuffer().bindToEffect(a,"Mesh"),t.transferToEffect(e);let o=r.getEngine();this._uniformBuffer.bindToEffect(a,"Material"),this.prePassConfiguration.bindForSubMesh(this._activeEffect,r,t,e,this.isFrozen),Nn.Bind(o.currentRenderPassId,this._activeEffect,t,e,this);let l=r.activeCamera;l?this._uniformBuffer.updateFloat4("cameraInfo",l.minZ,l.maxZ,0,0):this._uniformBuffer.updateFloat4("cameraInfo",0,0,0,0),this._eventInfo.subMesh=i,this._callbackPluginEventHardBindForSubMesh(this._eventInfo),s.OBJECTSPACE_NORMALMAP&&(e.toNormalMatrix(this._normalMatrix),this.bindOnlyNormalMatrix(this._normalMatrix));let c=this._mustRebind(r,a,i,t.visibility);gs(t,this._activeEffect,this.prePassConfiguration),this._vertexPullingMetadata&&xf(this._activeEffect,this._vertexPullingMetadata);let f=null,h=this._uniformBuffer;if(c){if(this.bindViewProjection(a),f=this._getReflectionTexture(),!h.useUbo||!this.isFrozen||!h.isSync||i._drawWrapper._forceRebindOnNextCall){if(r.texturesEnabled&&(this._albedoTexture&&le.DiffuseTextureEnabled&&(h.updateFloat2("vAlbedoInfos",this._albedoTexture.coordinatesIndex,this._albedoTexture.level),ni(this._albedoTexture,h,"albedo")),this._baseWeightTexture&&le.BaseWeightTextureEnabled&&(h.updateFloat2("vBaseWeightInfos",this._baseWeightTexture.coordinatesIndex,this._baseWeightTexture.level),ni(this._baseWeightTexture,h,"baseWeight")),this._baseDiffuseRoughnessTexture&&le.BaseDiffuseRoughnessTextureEnabled&&(h.updateFloat2("vBaseDiffuseRoughnessInfos",this._baseDiffuseRoughnessTexture.coordinatesIndex,this._baseDiffuseRoughnessTexture.level),ni(this._baseDiffuseRoughnessTexture,h,"baseDiffuseRoughness")),this._ambientTexture&&le.AmbientTextureEnabled&&(h.updateFloat4("vAmbientInfos",this._ambientTexture.coordinatesIndex,this._ambientTexture.level,this._ambientTextureStrength,this._ambientTextureImpactOnAnalyticalLights),ni(this._ambientTexture,h,"ambient")),this._opacityTexture&&le.OpacityTextureEnabled&&(h.updateFloat2("vOpacityInfos",this._opacityTexture.coordinatesIndex,this._opacityTexture.level),ni(this._opacityTexture,h,"opacity")),this._emissiveTexture&&le.EmissiveTextureEnabled&&(h.updateFloat2("vEmissiveInfos",this._emissiveTexture.coordinatesIndex,this._emissiveTexture.level),ni(this._emissiveTexture,h,"emissive")),this._lightmapTexture&&le.LightmapTextureEnabled&&(h.updateFloat2("vLightmapInfos",this._lightmapTexture.coordinatesIndex,this._lightmapTexture.level),ni(this._lightmapTexture,h,"lightmap")),le.SpecularTextureEnabled&&(this._metallicTexture?(h.updateFloat3("vReflectivityInfos",this._metallicTexture.coordinatesIndex,this._metallicTexture.level,this._ambientTextureStrength),ni(this._metallicTexture,h,"reflectivity")):this._reflectivityTexture&&(h.updateFloat3("vReflectivityInfos",this._reflectivityTexture.coordinatesIndex,this._reflectivityTexture.level,1),ni(this._reflectivityTexture,h,"reflectivity")),this._metallicReflectanceTexture&&(h.updateFloat2("vMetallicReflectanceInfos",this._metallicReflectanceTexture.coordinatesIndex,this._metallicReflectanceTexture.level),ni(this._metallicReflectanceTexture,h,"metallicReflectance")),this._reflectanceTexture&&s.REFLECTANCE&&(h.updateFloat2("vReflectanceInfos",this._reflectanceTexture.coordinatesIndex,this._reflectanceTexture.level),ni(this._reflectanceTexture,h,"reflectance")),this._microSurfaceTexture&&(h.updateFloat2("vMicroSurfaceSamplerInfos",this._microSurfaceTexture.coordinatesIndex,this._microSurfaceTexture.level),ni(this._microSurfaceTexture,h,"microSurfaceSampler"))),this._bumpTexture&&o.getCaps().standardDerivatives&&le.BumpTextureEnabled&&!this._disableBumpMap&&(h.updateFloat3("vBumpInfos",this._bumpTexture.coordinatesIndex,this._bumpTexture.level,this._parallaxScaleBias),ni(this._bumpTexture,h,"bump"),r._mirroredCameraPosition?h.updateFloat2("vTangentSpaceParams",this._invertNormalMapX?1:-1,this._invertNormalMapY?1:-1):h.updateFloat2("vTangentSpaceParams",this._invertNormalMapX?-1:1,this._invertNormalMapY?-1:1)),em(r,s,h,this._reflectionColor,f,this.realTimeFiltering,!0,!0,!0,!0,!0)),this.pointsCloud&&h.updateFloat("pointSize",this.pointSize),s.METALLICWORKFLOW){un.Color4[0].r=this._metallic===void 0||this._metallic===null?1:this._metallic,un.Color4[0].g=this._roughness===void 0||this._roughness===null?1:this._roughness;let p=(u=(d=this.subSurface)==null?void 0:d._indexOfRefraction)!=null?u:1.5,g=1;un.Color4[0].b=p;let v=Math.pow((p-g)/(p+g),2);un.Color4[0].a=v,h.updateDirectColor4("vReflectivityColor",un.Color4[0]),h.updateColor4("vMetallicReflectanceFactors",this._metallicReflectanceColor,this._metallicF0Factor)}else h.updateColor4("vReflectivityColor",this._reflectivityColor,this._microSurface);h.updateColor3("vEmissiveColor",le.EmissiveTextureEnabled?this._emissiveColor:Te.BlackReadOnly),!s.SS_REFRACTION&&((m=this.subSurface)!=null&&m._linkRefractionWithTransparency)?h.updateColor4("vAlbedoColor",this._albedoColor,1):h.updateColor4("vAlbedoColor",this._albedoColor,this.alpha),h.updateFloat("baseWeight",this._baseWeight),h.updateFloat("baseDiffuseRoughness",this._baseDiffuseRoughness||0),this._lightingInfos.x=this._directIntensity,this._lightingInfos.y=this._emissiveIntensity,this._lightingInfos.z=this._environmentIntensity*r.environmentIntensity,this._lightingInfos.w=this._specularIntensity,h.updateVector4("vLightingIntensity",this._lightingInfos),r.ambientColor.multiplyToRef(this._ambientColor,this._globalAmbientColor),h.updateColor3("vAmbientColor",this._globalAmbientColor),h.updateFloat2("vDebugMode",this.debugLimit,this.debugFactor)}r.texturesEnabled&&(this._albedoTexture&&le.DiffuseTextureEnabled&&h.setTexture("albedoSampler",this._albedoTexture),this._baseWeightTexture&&le.BaseWeightTextureEnabled&&h.setTexture("baseWeightSampler",this._baseWeightTexture),this._baseDiffuseRoughnessTexture&&le.BaseDiffuseRoughnessTextureEnabled&&h.setTexture("baseDiffuseRoughnessSampler",this._baseDiffuseRoughnessTexture),this._ambientTexture&&le.AmbientTextureEnabled&&h.setTexture("ambientSampler",this._ambientTexture),this._opacityTexture&&le.OpacityTextureEnabled&&h.setTexture("opacitySampler",this._opacityTexture),ZT(r,s,h,f,this.realTimeFiltering),s.ENVIRONMENTBRDF&&h.setTexture("environmentBrdfSampler",this._environmentBRDFTexture),this._emissiveTexture&&le.EmissiveTextureEnabled&&h.setTexture("emissiveSampler",this._emissiveTexture),this._lightmapTexture&&le.LightmapTextureEnabled&&h.setTexture("lightmapSampler",this._lightmapTexture),le.SpecularTextureEnabled&&(this._metallicTexture?h.setTexture("reflectivitySampler",this._metallicTexture):this._reflectivityTexture&&h.setTexture("reflectivitySampler",this._reflectivityTexture),this._metallicReflectanceTexture&&h.setTexture("metallicReflectanceSampler",this._metallicReflectanceTexture),this._reflectanceTexture&&s.REFLECTANCE&&h.setTexture("reflectanceSampler",this._reflectanceTexture),this._microSurfaceTexture&&h.setTexture("microSurfaceSampler",this._microSurfaceTexture)),this._bumpTexture&&o.getCaps().standardDerivatives&&le.BumpTextureEnabled&&!this._disableBumpMap&&h.setTexture("bumpSampler",this._bumpTexture)),this.getScene().useOrderIndependentTransparency&&this.needAlphaBlendingForMesh(t)&&this.getScene().depthPeelingRenderer.bind(a),this._eventInfo.subMesh=i,this._callbackPluginEventBindForSubMesh(this._eventInfo),Mn(this._activeEffect,this,r),this.bindEyePosition(a)}else r.getEngine()._features.needToAlwaysBindUniformBuffers&&(this._needToBindSceneUbo=!0);(c||!this.isFrozen)&&(r.lightsEnabled&&!this._disableLighting&&im(r,t,this._activeEffect,s,this._maxSimultaneousLights),(r.fogEnabled&&t.applyFog&&r.fogMode!==Qt.FOGMODE_NONE||f||this.subSurface.refractionTexture||t.receiveShadows||s.PREPASS||s.CLUSTLIGHT_BATCH)&&this.bindView(a),hf(r,t,this._activeEffect,!0),s.NUM_MORPH_INFLUENCERS&&Cn(t,this._activeEffect),s.BAKED_VERTEX_ANIMATION_TEXTURE&&((_=t.bakedVertexAnimationManager)==null||_.bind(a,s.INSTANCES)),this._imageProcessingConfiguration.bind(this._activeEffect),ff(s,this._activeEffect,r)),this._afterBind(t,this._activeEffect,i),h.update()}getAnimatables(){let e=super.getAnimatables();return this._albedoTexture&&this._albedoTexture.animations&&this._albedoTexture.animations.length>0&&e.push(this._albedoTexture),this._baseWeightTexture&&this._baseWeightTexture.animations&&this._baseWeightTexture.animations.length>0&&e.push(this._baseWeightTexture),this._baseDiffuseRoughnessTexture&&this._baseDiffuseRoughnessTexture.animations&&this._baseDiffuseRoughnessTexture.animations.length>0&&e.push(this._baseDiffuseRoughnessTexture),this._ambientTexture&&this._ambientTexture.animations&&this._ambientTexture.animations.length>0&&e.push(this._ambientTexture),this._opacityTexture&&this._opacityTexture.animations&&this._opacityTexture.animations.length>0&&e.push(this._opacityTexture),this._reflectionTexture&&this._reflectionTexture.animations&&this._reflectionTexture.animations.length>0&&e.push(this._reflectionTexture),this._emissiveTexture&&this._emissiveTexture.animations&&this._emissiveTexture.animations.length>0&&e.push(this._emissiveTexture),this._metallicTexture&&this._metallicTexture.animations&&this._metallicTexture.animations.length>0?e.push(this._metallicTexture):this._reflectivityTexture&&this._reflectivityTexture.animations&&this._reflectivityTexture.animations.length>0&&e.push(this._reflectivityTexture),this._bumpTexture&&this._bumpTexture.animations&&this._bumpTexture.animations.length>0&&e.push(this._bumpTexture),this._lightmapTexture&&this._lightmapTexture.animations&&this._lightmapTexture.animations.length>0&&e.push(this._lightmapTexture),this._metallicReflectanceTexture&&this._metallicReflectanceTexture.animations&&this._metallicReflectanceTexture.animations.length>0&&e.push(this._metallicReflectanceTexture),this._reflectanceTexture&&this._reflectanceTexture.animations&&this._reflectanceTexture.animations.length>0&&e.push(this._reflectanceTexture),this._microSurfaceTexture&&this._microSurfaceTexture.animations&&this._microSurfaceTexture.animations.length>0&&e.push(this._microSurfaceTexture),e}_getReflectionTexture(){return this._reflectionTexture?this._reflectionTexture:this.getScene().environmentTexture}getActiveTextures(){let e=super.getActiveTextures();return this._albedoTexture&&e.push(this._albedoTexture),this._baseWeightTexture&&e.push(this._baseWeightTexture),this._baseDiffuseRoughnessTexture&&e.push(this._baseDiffuseRoughnessTexture),this._ambientTexture&&e.push(this._ambientTexture),this._opacityTexture&&e.push(this._opacityTexture),this._reflectionTexture&&e.push(this._reflectionTexture),this._emissiveTexture&&e.push(this._emissiveTexture),this._reflectivityTexture&&e.push(this._reflectivityTexture),this._metallicTexture&&e.push(this._metallicTexture),this._metallicReflectanceTexture&&e.push(this._metallicReflectanceTexture),this._reflectanceTexture&&e.push(this._reflectanceTexture),this._microSurfaceTexture&&e.push(this._microSurfaceTexture),this._bumpTexture&&e.push(this._bumpTexture),this._lightmapTexture&&e.push(this._lightmapTexture),e}hasTexture(e){return!!(super.hasTexture(e)||this._albedoTexture===e||this._baseWeightTexture===e||this._baseDiffuseRoughnessTexture===e||this._ambientTexture===e||this._opacityTexture===e||this._reflectionTexture===e||this._emissiveTexture===e||this._reflectivityTexture===e||this._metallicTexture===e||this._metallicReflectanceTexture===e||this._reflectanceTexture===e||this._microSurfaceTexture===e||this._bumpTexture===e||this._lightmapTexture===e)}setPrePassRenderer(){var t;if(!((t=this.subSurface)!=null&&t.isScatteringEnabled))return!1;let e=this.getScene().enableSubSurfaceForPrePass();return e&&(e.enabled=!0),!0}dispose(e,t){var i,r,s,a,o,l,c,f,h,d,u,m,_,p;this._breakShaderLoadedCheck=!0,t&&(this._environmentBRDFTexture&&this.getScene().environmentBRDFTexture!==this._environmentBRDFTexture&&this._environmentBRDFTexture.dispose(),(i=this._albedoTexture)==null||i.dispose(),(r=this._baseWeightTexture)==null||r.dispose(),(s=this._baseDiffuseRoughnessTexture)==null||s.dispose(),(a=this._ambientTexture)==null||a.dispose(),(o=this._opacityTexture)==null||o.dispose(),(l=this._reflectionTexture)==null||l.dispose(),(c=this._emissiveTexture)==null||c.dispose(),(f=this._metallicTexture)==null||f.dispose(),(h=this._reflectivityTexture)==null||h.dispose(),(d=this._bumpTexture)==null||d.dispose(),(u=this._lightmapTexture)==null||u.dispose(),(m=this._metallicReflectanceTexture)==null||m.dispose(),(_=this._reflectanceTexture)==null||_.dispose(),(p=this._microSurfaceTexture)==null||p.dispose()),this._renderTargets.dispose(),this._imageProcessingConfiguration&&this._imageProcessingObserver&&this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver),super.dispose(e,t)}};mr.PBRMATERIAL_OPAQUE=ve.MATERIAL_OPAQUE;mr.PBRMATERIAL_ALPHATEST=ve.MATERIAL_ALPHATEST;mr.PBRMATERIAL_ALPHABLEND=ve.MATERIAL_ALPHABLEND;mr.PBRMATERIAL_ALPHATESTANDBLEND=ve.MATERIAL_ALPHATESTANDBLEND;mr.DEFAULT_AO_ON_ANALYTICAL_LIGHTS=0;mr.LIGHTFALLOFF_PHYSICAL=0;mr.LIGHTFALLOFF_GLTF=1;mr.LIGHTFALLOFF_STANDARD=2;mr.ForceGLSL=!1;P([oe("_markAllSubMeshesAsMiscDirty")],mr.prototype,"debugMode",void 0)});var T7={};et(T7,{PBRMaterial:()=>ht});var ht,A7=C(()=>{kt();Ut();wx();Ht();S7();Vi();Pn();_r();ht=class n extends mr{get refractionTexture(){return this.subSurface.refractionTexture}set refractionTexture(e){this.subSurface.refractionTexture=e,e?this.subSurface.isRefractionEnabled=!0:this.subSurface.linkRefractionWithTransparency||(this.subSurface.isRefractionEnabled=!1)}get indexOfRefraction(){return this.subSurface.indexOfRefraction}set indexOfRefraction(e){this.subSurface.indexOfRefraction=e}get invertRefractionY(){return this.subSurface.invertRefractionY}set invertRefractionY(e){this.subSurface.invertRefractionY=e}get linkRefractionWithTransparency(){return this.subSurface.linkRefractionWithTransparency}set linkRefractionWithTransparency(e){this.subSurface.linkRefractionWithTransparency=e,e&&(this.subSurface.isRefractionEnabled=!0)}get usePhysicalLightFalloff(){return this._lightFalloff===mr.LIGHTFALLOFF_PHYSICAL}set usePhysicalLightFalloff(e){e!==this.usePhysicalLightFalloff&&(this._markAllSubMeshesAsTexturesDirty(),e?this._lightFalloff=mr.LIGHTFALLOFF_PHYSICAL:this._lightFalloff=mr.LIGHTFALLOFF_STANDARD)}get useGLTFLightFalloff(){return this._lightFalloff===mr.LIGHTFALLOFF_GLTF}set useGLTFLightFalloff(e){e!==this.useGLTFLightFalloff&&(this._markAllSubMeshesAsTexturesDirty(),e?this._lightFalloff=mr.LIGHTFALLOFF_GLTF:this._lightFalloff=mr.LIGHTFALLOFF_STANDARD)}constructor(e,t,i=!1){super(e,t,i),this.directIntensity=1,this.emissiveIntensity=1,this.environmentIntensity=1,this.specularIntensity=1,this.disableBumpMap=!1,this.ambientTextureStrength=1,this.ambientTextureImpactOnAnalyticalLights=n.DEFAULT_AO_ON_ANALYTICAL_LIGHTS,this.metallicF0Factor=1,this.metallicReflectanceColor=Te.White(),this.useOnlyMetallicFromMetallicReflectanceTexture=!1,this.ambientColor=new Te(0,0,0),this.albedoColor=new Te(1,1,1),this.baseWeight=1,this.reflectivityColor=new Te(1,1,1),this.reflectionColor=new Te(1,1,1),this.emissiveColor=new Te(0,0,0),this.microSurface=1,this.useLightmapAsShadowmap=!1,this.useAlphaFromAlbedoTexture=!1,this.forceAlphaTest=!1,this.alphaCutOff=.4,this.useSpecularOverAlpha=!0,this.useMicroSurfaceFromReflectivityMapAlpha=!1,this.useRoughnessFromMetallicTextureAlpha=!0,this.useRoughnessFromMetallicTextureGreen=!1,this.useMetallnessFromMetallicTextureBlue=!1,this.useAmbientOcclusionFromMetallicTextureRed=!1,this.useAmbientInGrayScale=!1,this.useAutoMicroSurfaceFromReflectivityMap=!1,this.useRadianceOverAlpha=!0,this.useObjectSpaceNormalMap=!1,this.useParallax=!1,this.useParallaxOcclusion=!1,this.parallaxScaleBias=.05,this.disableLighting=!1,this.forceIrradianceInFragment=!1,this.maxSimultaneousLights=4,this.invertNormalMapX=!1,this.invertNormalMapY=!1,this.twoSidedLighting=!1,this.useAlphaFresnel=!1,this.useLinearAlphaFresnel=!1,this.environmentBRDFTexture=null,this.forceNormalForward=!1,this.enableSpecularAntiAliasing=!1,this.useHorizonOcclusion=!0,this.useRadianceOcclusion=!0,this.unlit=!1,this.applyDecalMapAfterDetailMap=!1,this._environmentBRDFTexture=Fx(this.getScene())}getClassName(){return"PBRMaterial"}clone(e,t=!0,i=""){let r=tt.Clone(()=>new n(e,this.getScene()),this,{cloneTexturesOnlyOnce:t});return r.id=e,r.name=e,this.stencil.copyTo(r.stencil),this._clonePlugins(r,i),r}serialize(){let e=super.serialize();return e.customType="BABYLON.PBRMaterial",e}static Parse(e,t,i){let r=tt.Parse(()=>new n(e.name,t),e,t,i);return e.stencil&&r.stencil.parse(e.stencil,t,i),ve._ParsePlugins(e,r,t,i),e.clearCoat&&r.clearCoat.parse(e.clearCoat,t,i),e.anisotropy&&r.anisotropy.parse(e.anisotropy,t,i),e.brdf&&r.brdf.parse(e.brdf,t,i),e.sheen&&r.sheen.parse(e.sheen,t,i),e.subSurface&&r.subSurface.parse(e.subSurface,t,i),e.iridescence&&r.iridescence.parse(e.iridescence,t,i),r}};ht.PBRMATERIAL_OPAQUE=mr.PBRMATERIAL_OPAQUE;ht.PBRMATERIAL_ALPHATEST=mr.PBRMATERIAL_ALPHATEST;ht.PBRMATERIAL_ALPHABLEND=mr.PBRMATERIAL_ALPHABLEND;ht.PBRMATERIAL_ALPHATESTANDBLEND=mr.PBRMATERIAL_ALPHATESTANDBLEND;ht.DEFAULT_AO_ON_ANALYTICAL_LIGHTS=mr.DEFAULT_AO_ON_ANALYTICAL_LIGHTS;P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"directIntensity",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"emissiveIntensity",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"environmentIntensity",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"specularIntensity",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"disableBumpMap",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"albedoTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"baseWeightTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"baseDiffuseRoughnessTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"ambientTexture",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"ambientTextureStrength",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"ambientTextureImpactOnAnalyticalLights",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesAndMiscDirty")],ht.prototype,"opacityTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"reflectionTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"emissiveTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"reflectivityTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"metallicTexture",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"metallic",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"roughness",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"metallicF0Factor",void 0);P([dr(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"metallicReflectanceColor",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useOnlyMetallicFromMetallicReflectanceTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"metallicReflectanceTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"reflectanceTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"microSurfaceTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"bumpTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty",null)],ht.prototype,"lightmapTexture",void 0);P([dr("ambient"),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"ambientColor",void 0);P([dr("albedo"),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"albedoColor",void 0);P([F("baseWeight"),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"baseWeight",void 0);P([F("baseDiffuseRoughness"),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"baseDiffuseRoughness",void 0);P([dr("reflectivity"),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"reflectivityColor",void 0);P([dr("reflection"),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"reflectionColor",void 0);P([dr("emissive"),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"emissiveColor",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"microSurface",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useLightmapAsShadowmap",void 0);P([F(),oe("_markAllSubMeshesAsTexturesAndMiscDirty")],ht.prototype,"useAlphaFromAlbedoTexture",void 0);P([F(),oe("_markAllSubMeshesAsTexturesAndMiscDirty")],ht.prototype,"forceAlphaTest",void 0);P([F(),oe("_markAllSubMeshesAsTexturesAndMiscDirty")],ht.prototype,"alphaCutOff",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useSpecularOverAlpha",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useMicroSurfaceFromReflectivityMapAlpha",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useRoughnessFromMetallicTextureAlpha",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useRoughnessFromMetallicTextureGreen",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useMetallnessFromMetallicTextureBlue",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useAmbientOcclusionFromMetallicTextureRed",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useAmbientInGrayScale",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useAutoMicroSurfaceFromReflectivityMap",void 0);P([F()],ht.prototype,"usePhysicalLightFalloff",null);P([F()],ht.prototype,"useGLTFLightFalloff",null);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useRadianceOverAlpha",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useObjectSpaceNormalMap",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useParallax",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useParallaxOcclusion",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"parallaxScaleBias",void 0);P([F(),oe("_markAllSubMeshesAsLightsDirty")],ht.prototype,"disableLighting",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"forceIrradianceInFragment",void 0);P([F(),oe("_markAllSubMeshesAsLightsDirty")],ht.prototype,"maxSimultaneousLights",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"invertNormalMapX",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"invertNormalMapY",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"twoSidedLighting",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useAlphaFresnel",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useLinearAlphaFresnel",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"environmentBRDFTexture",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"forceNormalForward",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"enableSpecularAntiAliasing",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useHorizonOcclusion",void 0);P([F(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useRadianceOcclusion",void 0);P([F(),oe("_markAllSubMeshesAsMiscDirty")],ht.prototype,"unlit",void 0);P([F(),oe("_markAllSubMeshesAsMiscDirty")],ht.prototype,"applyDecalMapAfterDetailMap",void 0);wt("BABYLON.PBRMaterial",ht)});var x7={};et(x7,{PBRMaterialLoadingAdapter:()=>EL});var EL,R7=C(()=>{Ht();JP();Ve();EL=class{constructor(e){this._material=e,this._material.enableSpecularAntiAliasing=!0}get material(){return this._material}get isUnlit(){return this._material.unlit}set isUnlit(e){this._material.unlit=e}set backFaceCulling(e){this._material.backFaceCulling=e}get backFaceCulling(){return this._material.backFaceCulling}set twoSidedLighting(e){this._material.twoSidedLighting=e}get twoSidedLighting(){return this._material.twoSidedLighting}set alphaCutOff(e){this._material.alphaCutOff=e}get alphaCutOff(){return this._material.alphaCutOff}set useAlphaFromBaseColorTexture(e){this._material.useAlphaFromAlbedoTexture=e}get useAlphaFromBaseColorTexture(){return this._material.useAlphaFromAlbedoTexture}get transparencyAsAlphaCoverage(){return this._material.useRadianceOverAlpha||this._material.useSpecularOverAlpha}set transparencyAsAlphaCoverage(e){this._material.useRadianceOverAlpha=!e,this._material.useSpecularOverAlpha=!e}set baseColor(e){this._material.albedoColor=e}get baseColor(){return this._material.albedoColor}set baseColorTexture(e){this._material.albedoTexture=e}get baseColorTexture(){return this._material.albedoTexture}set baseDiffuseRoughness(e){this._material.baseDiffuseRoughness=e,e>0&&(this._material.brdf.baseDiffuseModel=W.MATERIAL_DIFFUSE_MODEL_E_OREN_NAYAR)}get baseDiffuseRoughness(){var e;return(e=this._material.baseDiffuseRoughness)!=null?e:0}set baseDiffuseRoughnessTexture(e){this._material.baseDiffuseRoughnessTexture=e}get baseDiffuseRoughnessTexture(){return this._material.baseDiffuseRoughnessTexture}set baseMetalness(e){this._material.metallic=e}get baseMetalness(){var e;return(e=this._material.metallic)!=null?e:1}set baseMetalnessTexture(e){this._material.metallicTexture=e}get baseMetalnessTexture(){return this._material.metallicTexture}set useRoughnessFromMetallicTextureGreen(e){this._material.useRoughnessFromMetallicTextureGreen=e,this._material.useRoughnessFromMetallicTextureAlpha=!e}set useMetallicFromMetallicTextureBlue(e){this._material.useMetallnessFromMetallicTextureBlue=e}enableSpecularEdgeColor(e=!1){e&&(this._material.brdf.dielectricSpecularModel=W.MATERIAL_DIELECTRIC_SPECULAR_MODEL_OPENPBR,this._material.brdf.conductorSpecularModel=W.MATERIAL_CONDUCTOR_SPECULAR_MODEL_OPENPBR)}set specularWeight(e){this._material.metallicF0Factor=e}get specularWeight(){var e;return(e=this._material.metallicF0Factor)!=null?e:1}set specularWeightTexture(e){e?(this._material.metallicReflectanceTexture=e,this._material.useOnlyMetallicFromMetallicReflectanceTexture=!0):(this._material.metallicReflectanceTexture=null,this._material.useOnlyMetallicFromMetallicReflectanceTexture=!1)}get specularWeightTexture(){return this._material.metallicReflectanceTexture}set specularColor(e){this._material.metallicReflectanceColor=e}get specularColor(){return this._material.metallicReflectanceColor}set specularColorTexture(e){this._material.reflectanceTexture=e}get specularColorTexture(){return this._material.reflectanceTexture}set specularRoughness(e){this._material.roughness=e}get specularRoughness(){var e;return(e=this._material.roughness)!=null?e:1}set specularRoughnessTexture(e){this.baseMetalnessTexture||(this._material.metallicTexture=e)}get specularRoughnessTexture(){return this._material.metallicTexture}set specularIor(e){this._material.indexOfRefraction=e}get specularIor(){return this._material.indexOfRefraction}set emissionColor(e){this._material.emissiveColor=e}get emissionColor(){return this._material.emissiveColor}set emissionLuminance(e){this._material.emissiveIntensity=e}get emissionLuminance(){return this._material.emissiveIntensity}set emissionColorTexture(e){this._material.emissiveTexture=e}get emissionColorTexture(){return this._material.emissiveTexture}set ambientOcclusionTexture(e){this._material.ambientTexture=e,e&&(this._material.useAmbientInGrayScale=!0)}get ambientOcclusionTexture(){return this._material.ambientTexture}set ambientOcclusionTextureStrength(e){this._material.ambientTextureStrength=e}get ambientOcclusionTextureStrength(){var e;return(e=this._material.ambientTextureStrength)!=null?e:1}configureCoat(){this._material.clearCoat.isEnabled=!0,this._material.clearCoat.useRoughnessFromMainTexture=!1,this._material.clearCoat.remapF0OnInterfaceChange=!1}set coatWeight(e){this._material.clearCoat.isEnabled=!0,this._material.clearCoat.intensity=e}get coatWeight(){return this._material.clearCoat.intensity}set coatWeightTexture(e){this._material.clearCoat.isEnabled=!0,this._material.clearCoat.texture=e}get coatWeightTexture(){return this._material.clearCoat.texture}set coatColor(e){this._material.clearCoat.isTintEnabled=e!=Te.White(),this._material.clearCoat.tintColor=e}set coatColorTexture(e){this._material.clearCoat.tintTexture=e}set coatRoughness(e){this._material.clearCoat.isEnabled=!0,this._material.clearCoat.roughness=e}get coatRoughness(){var e;return(e=this._material.clearCoat.roughness)!=null?e:0}set coatRoughnessTexture(e){this._material.clearCoat.isEnabled=!0,this._material.clearCoat.useRoughnessFromMainTexture=!1,this._material.clearCoat.textureRoughness=e}get coatRoughnessTexture(){return this._material.clearCoat.textureRoughness}set coatIor(e){this._material.clearCoat.indexOfRefraction=e}set coatDarkening(e){}set coatDarkeningTexture(e){}set coatRoughnessAnisotropy(e){}get coatRoughnessAnisotropy(){return 0}set geometryCoatTangentAngle(e){}set geometryCoatTangentTexture(e){}get geometryCoatTangentTexture(){return null}set transmissionWeight(e){this._material.subSurface.isRefractionEnabled=e>0,this._material.subSurface.refractionIntensity=e}get transmissionWeight(){return this._material.subSurface.isRefractionEnabled?this._material.subSurface.refractionIntensity:0}set transmissionWeightTexture(e){this._material.subSurface.isRefractionEnabled=!0,this._material.subSurface.refractionIntensityTexture=e,this._material.subSurface.useGltfStyleTextures=!0}set transmissionDepth(e){this.transmissionWeight>0?this._material.subSurface.tintColorAtDistance=e:this.subsurfaceWeight>0&&this._material.subSurface.diffusionDistance.multiplyInPlace(new Te(e,e,e))}get transmissionDepth(){return this.transmissionWeight>0?this._material.subSurface.tintColorAtDistance:0}set transmissionColor(e){this.transmissionWeight>0?this._material.subSurface.tintColor=e:this.subsurfaceWeight>0&&this._material.subSurface.diffusionDistance.multiplyInPlace(e)}get transmissionColor(){return this.transmissionWeight>0?this._material.subSurface.tintColor:this.subsurfaceWeight>0?this._material.subSurface.diffusionDistance:new Te(0,0,0)}set transmissionScatter(e){this._material.subSurface.diffusionDistance=e}get transmissionScatter(){return this._material.subSurface.diffusionDistance}set transmissionScatterTexture(e){}set transmissionScatterAnisotropy(e){}set transmissionDispersionAbbeNumber(e){}set transmissionDispersionScale(e){e>0?(this._material.subSurface.isDispersionEnabled=!0,this._material.subSurface.dispersion=20/e):(this._material.subSurface.isDispersionEnabled=!1,this._material.subSurface.dispersion=0)}get refractionBackgroundTexture(){return this._material.subSurface.refractionTexture}set refractionBackgroundTexture(e){this._material.subSurface.refractionTexture=e}configureTransmission(){this._material.subSurface.volumeIndexOfRefraction=1,this._material.subSurface.useAlbedoToTintRefraction=!0,this._material.subSurface.minimumThickness=0,this._material.subSurface.maximumThickness=0}configureVolume(){}set geometryThinWalled(e){}get geometryThinWalled(){return!0}set volumeThicknessTexture(e){this._material.subSurface.thicknessTexture=e,this._material.subSurface.useGltfStyleTextures=!0}set volumeThickness(e){this._material.subSurface.minimumThickness=0,this._material.subSurface.maximumThickness=e,this._material.subSurface.useThicknessAsDepth=!0,e>0&&(this._material.subSurface.volumeIndexOfRefraction=this._material.indexOfRefraction)}configureSubsurface(){this._material.subSurface.useGltfStyleTextures=!0,this._material.subSurface.volumeIndexOfRefraction=1,this._material.subSurface.minimumThickness=0,this._material.subSurface.maximumThickness=0,this._material.subSurface.useAlbedoToTintTranslucency=!1}set subsurfaceWeight(e){this._material.subSurface.isTranslucencyEnabled=e>0,this._material.subSurface.translucencyIntensity=e}get subsurfaceWeight(){return this._material.subSurface.isTranslucencyEnabled?this._material.subSurface.translucencyIntensity:0}set subsurfaceWeightTexture(e){this._material.subSurface.translucencyIntensityTexture=e}set subsurfaceColor(e){let t=new b(-Math.log(this.transmissionColor.r),-Math.log(this.transmissionColor.g),-Math.log(this.transmissionColor.b));t.scaleInPlace(1/Math.max(this.transmissionDepth,.001));let i=t,r=Math.max(i.x,Math.max(i.y,i.z)),s=r>0?1/r:1;this._material.subSurface.diffusionDistance=new Te(Math.exp(-i.x*s),Math.exp(-i.y*s),Math.exp(-i.z*s))}set subsurfaceColorTexture(e){}set diffuseTransmissionTint(e){this._material.subSurface.tintColor=e}get diffuseTransmissionTint(){return this._material.subSurface.tintColor}set diffuseTransmissionTintTexture(e){this._material.subSurface.translucencyColorTexture=e}get subsurfaceRadius(){return 1}set subsurfaceRadius(e){}get subsurfaceRadiusScale(){var e;return(e=this._material.subSurface.scatteringDiffusionProfile)!=null?e:Te.White()}set subsurfaceRadiusScale(e){this._material.subSurface.scatteringDiffusionProfile=e}set subsurfaceScatterAnisotropy(e){}isTranslucent(){return this.transmissionWeight>0||this.subsurfaceWeight>0}configureFuzz(){this._material.sheen.isEnabled=!0,this._material.sheen.useRoughnessFromMainTexture=!1,this._material.sheen.albedoScaling=!0}set fuzzWeight(e){this._material.sheen.isEnabled=!0,this._material.sheen.intensity=e}set fuzzWeightTexture(e){this._material.sheen.texture||(this._material.sheen.texture=e)}set fuzzColor(e){this._material.sheen.isEnabled=!0,this._material.sheen.color=e}set fuzzColorTexture(e){this._material.sheen.texture=e}set fuzzRoughness(e){this._material.sheen.isEnabled=!0,this._material.sheen.roughness=e}set fuzzRoughnessTexture(e){this._material.sheen.isEnabled=!0,this._material.sheen.textureRoughness=e}set specularRoughnessAnisotropy(e){this._material.anisotropy.isEnabled=!0,this._material.anisotropy.intensity=e}get specularRoughnessAnisotropy(){return this._material.anisotropy.intensity}set geometryTangentAngle(e){this._material.anisotropy.isEnabled=!0,this._material.anisotropy.angle=e}set geometryTangentTexture(e){this._material.anisotropy.isEnabled=!0,this._material.anisotropy.texture=e}get geometryTangentTexture(){return this._material.anisotropy.texture}configureGltfStyleAnisotropy(e=!0){}set thinFilmWeight(e){this._material.iridescence.isEnabled=e>0,this._material.iridescence.intensity=e}set thinFilmIor(e){this._material.iridescence.indexOfRefraction=e}set thinFilmThicknessMinimum(e){this._material.iridescence.minimumThickness=e}set thinFilmThicknessMaximum(e){this._material.iridescence.maximumThickness=e}set thinFilmWeightTexture(e){this._material.iridescence.texture=e}set thinFilmThicknessTexture(e){this._material.iridescence.thicknessTexture=e}set unlit(e){this._material.unlit=e}set geometryOpacity(e){this._material.alpha=e}get geometryOpacity(){return this._material.alpha}set geometryNormalTexture(e){this._material.bumpTexture=e,this._material.forceIrradianceInFragment=!0}get geometryNormalTexture(){return this._material.bumpTexture}setNormalMapInversions(e,t){this._material.invertNormalMapX=e,this._material.invertNormalMapY=t}set geometryCoatNormalTexture(e){this._material.clearCoat.isEnabled=!0,this._material.clearCoat.bumpTexture=e}get geometryCoatNormalTexture(){return this._material.clearCoat.bumpTexture}set geometryCoatNormalTextureScale(e){this._material.clearCoat.bumpTexture&&(this._material.clearCoat.bumpTexture.level=e)}}});function Qfe(n){if(n.min&&n.max){let e=n.min,t=n.max,i=Z.Vector3[0].copyFromFloats(e[0],e[1],e[2]),r=Z.Vector3[1].copyFromFloats(t[0],t[1],t[2]);if(n.normalized&&n.componentType!==5126){let s=1;switch(n.componentType){case 5120:s=127;break;case 5121:s=255;break;case 5122:s=32767;break;case 5123:s=65535;break}let a=1/s;i.scaleInPlace(a),r.scaleInPlace(a)}return new ln(i,r)}return null}var qfe,Zfe,Kt,zx,b7=C(()=>{V4();Ve();Ht();Ci();Jo();Y4();yx();j4();Pn();Gr();Gh();Ui();KT();Ju();Di();qP();Z4();jP();Fl();Pt();Zu();$4();$P();iX();Vu();rX();qfe=new gg(()=>Promise.resolve().then(()=>(lX(),oX))),Zfe=new gg(()=>Promise.resolve().then(()=>(dX(),hX))),Kt=class{static Get(e,t,i){if(!t||i==null||!t[i])throw new Error(`${e}: Failed to find index (${i})`);return t[i]}static TryGet(e,t){return!e||t==null||!e[t]?null:e[t]}static Assign(e){if(e)for(let t=0;tt.dispose&&t.dispose()),this._extensions.length=0;for(let t of Array.from(this._materialAdapters))(e=t.finalize)==null||e.call(t);this._materialAdapters.clear(),this._gltf=null,this._bin=null,this._babylonScene=null,this._rootBabylonMesh=null,this._defaultBabylonMaterialData={},this._postSceneLoadActions.length=0,this._parent.dispose()}}async importMeshAsync(e,t,i,r,s,a,o=""){return await Promise.resolve().then(async()=>{this._babylonScene=t,this._assetContainer=i,this._loadData(r);let l=null;if(e){let c={};if(this._gltf.nodes)for(let h of this._gltf.nodes)h.name&&(c[h.name]=h.index);l=(e instanceof Array?e:[e]).map(h=>{let d=c[h];if(d===void 0)throw new Error(`Failed to find node '${h}'`);return d})}return await this._loadAsync(s,o,l,()=>({meshes:this._getMeshes(),particleSystems:[],skeletons:this._getSkeletons(),animationGroups:this._getAnimationGroups(),lights:this._babylonLights,transformNodes:this._getTransformNodes(),geometries:this._getGeometries(),spriteManagers:[]}))})}async loadAsync(e,t,i,r,s=""){return this._babylonScene=e,this._loadData(t),await this._loadAsync(i,s,null,()=>{})}async _loadAsync(e,t,i,r){return await Promise.resolve().then(async()=>{this._rootUrl=e,this._uniqueRootUrl=!e.startsWith("file:")&&t?e:`${e}${Date.now()}/`,this._fileName=t,this._allMaterialsDirtyRequired=!1,await this._loadExtensionsAsync(),!this.parent.skipMaterials&&this._pbrMaterialImpl==null&&(this.parent.useOpenPBR||this.isExtensionUsed("KHR_materials_openpbr")?this._pbrMaterialImpl={materialClass:(await Promise.resolve().then(()=>(m8(),u8))).OpenPBRMaterial,adapterClass:(await Promise.resolve().then(()=>(_8(),p8))).OpenPBRMaterialLoadingAdapter}:this._pbrMaterialImpl={materialClass:(await Promise.resolve().then(()=>(A7(),T7))).PBRMaterial,adapterClass:(await Promise.resolve().then(()=>(R7(),x7))).PBRMaterialLoadingAdapter});let s=`${Yn[Yn.LOADING]} => ${Yn[Yn.READY]}`,a=`${Yn[Yn.LOADING]} => ${Yn[Yn.COMPLETE]}`;this._parent._startPerformanceCounter(s),this._parent._startPerformanceCounter(a),this._parent._setState(Yn.LOADING),this._extensionsOnLoading();let o=new Array,l=this._babylonScene.blockMaterialDirtyMechanism;if(this._babylonScene.blockMaterialDirtyMechanism=!0,!this.parent.loadOnlyMaterials){if(i)o.push(this.loadSceneAsync("/nodes",{nodes:i,index:-1}));else if(this._gltf.scene!=null||this._gltf.scenes&&this._gltf.scenes[0]){let f=Kt.Get("/scene",this._gltf.scenes,this._gltf.scene||0);o.push(this.loadSceneAsync(`/scenes/${f.index}`,f))}}if(!this.parent.skipMaterials&&this.parent.loadAllMaterials&&this._gltf.materials)for(let f=0;f{}))}return this._allMaterialsDirtyRequired?this._babylonScene.blockMaterialDirtyMechanism=l:this._babylonScene._forceBlockMaterialDirtyMechanism(l),this._parent.compileMaterials&&o.push(this._compileMaterialsAsync()),this._parent.compileShadowGenerators&&o.push(this._compileShadowGeneratorsAsync()),await Promise.all(o).then(()=>{this._rootBabylonMesh&&this._rootBabylonMesh!==this._parent.customRootNode&&this._rootBabylonMesh.setEnabled(!0);for(let f of this._babylonScene.materials){let h=f;h.maxSimultaneousLights!==void 0&&(h.maxSimultaneousLights=Math.max(h.maxSimultaneousLights,this._babylonScene.lights.length))}return this._extensionsOnReady(),this._parent._setState(Yn.READY),this._skipStartAnimationStep||this._startAnimations(),r()}).then(f=>(this._parent._endPerformanceCounter(s),he.SetImmediate(()=>{this._disposed||Promise.all(this._completePromises).then(()=>{this._parent._endPerformanceCounter(a),this._parent._setState(Yn.COMPLETE),this._parent.onCompleteObservable.notifyObservers(void 0),this._parent.onCompleteObservable.clear(),this.dispose()},h=>{this._parent.onErrorObservable.notifyObservers(h),this._parent.onErrorObservable.clear(),this.dispose()})}),f))}).catch(s=>{throw this._disposed||(this._parent.onErrorObservable.notifyObservers(s),this._parent.onErrorObservable.clear(),this.dispose()),s})}_loadData(e){if(this._gltf=e.json,this._setupData(),e.bin){let t=this._gltf.buffers;if(t&&t[0]&&!t[0].uri){let i=t[0];(i.byteLengthe.bin.byteLength)&&$.Warn(`Binary buffer length (${i.byteLength}) from JSON does not match chunk length (${e.bin.byteLength})`),this._bin=e.bin}else $.Warn("Unexpected BIN chunk")}}_setupData(){if(Kt.Assign(this._gltf.accessors),Kt.Assign(this._gltf.animations),Kt.Assign(this._gltf.buffers),Kt.Assign(this._gltf.bufferViews),Kt.Assign(this._gltf.cameras),Kt.Assign(this._gltf.images),Kt.Assign(this._gltf.materials),Kt.Assign(this._gltf.meshes),Kt.Assign(this._gltf.nodes),Kt.Assign(this._gltf.samplers),Kt.Assign(this._gltf.scenes),Kt.Assign(this._gltf.skins),Kt.Assign(this._gltf.textures),this._gltf.nodes){let e={};for(let i of this._gltf.nodes)if(i.children)for(let r of i.children)e[r]=i.index;let t=this._createRootNode();for(let i of this._gltf.nodes){let r=e[i.index];i.parent=r===void 0?t:this._gltf.nodes[r]}}}async _loadExtensionsAsync(){var t;let e=[];if(Q4.forEach((i,r)=>{var s;((s=this.parent.extensionOptions[r])==null?void 0:s.enabled)===!1?i.isGLTFExtension&&this.isExtensionUsed(r)&&$.Warn(`Extension ${r} is used but has been explicitly disabled.`):(!i.isGLTFExtension||this.isExtensionUsed(r))&&e.push((async()=>{let a=await i.factory(this);return a.name!==r&&$.Warn(`The name of the glTF loader extension instance does not match the registered name: ${a.name} !== ${r}`),this._parent.onExtensionLoadedObservable.notifyObservers(a),a})())}),this._extensions.push(...await Promise.all(e)),this._extensions.sort((i,r)=>(i.order||Number.MAX_VALUE)-(r.order||Number.MAX_VALUE)),this._parent.onExtensionLoadedObservable.clear(),this._gltf.extensionsRequired){for(let i of this._gltf.extensionsRequired)if(!this._extensions.some(s=>s.name===i&&s.enabled))throw((t=this.parent.extensionOptions[i])==null?void 0:t.enabled)===!1?new Error(`Required extension ${i} is disabled`):new Error(`Required extension ${i} is not available`)}}_createRootNode(){if(this._parent.customRootNode!==void 0)return this._rootBabylonMesh=this._parent.customRootNode,{_babylonTransformNode:this._rootBabylonMesh===null?void 0:this._rootBabylonMesh,index:-1};this._babylonScene._blockEntityCollection=!!this._assetContainer;let e=new q("__root__",this._babylonScene);this._rootBabylonMesh=e,this._rootBabylonMesh._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,this._rootBabylonMesh.setEnabled(!1);let t={_babylonTransformNode:this._rootBabylonMesh,index:-1};switch(this._parent.coordinateSystemMode){case wm.AUTO:{this._babylonScene.useRightHandedSystem||(t.rotation=[0,1,0,0],t.scale=[1,1,-1],n._LoadTransform(t,this._rootBabylonMesh));break}case wm.FORCE_RIGHT_HANDED:{this._babylonScene.useRightHandedSystem=!0;break}default:throw new Error(`Invalid coordinate system mode (${this._parent.coordinateSystemMode})`)}return this._parent.onMeshLoadedObservable.notifyObservers(e),t}loadSceneAsync(e,t){let i=this._extensionsLoadSceneAsync(e,t);if(i)return i;let r=new Array;if(this.logOpen(`${e} ${t.name||""}`),t.nodes)for(let s of t.nodes){let a=Kt.Get(`${e}/nodes/${s}`,this._gltf.nodes,s);r.push(this.loadNodeAsync(`/nodes/${a.index}`,a,o=>{o.parent=this._rootBabylonMesh}))}for(let s of this._postSceneLoadActions)s();return r.push(this._loadAnimationsAsync()),this.logClose(),Promise.all(r).then(()=>{})}_forEachPrimitive(e,t){if(e._primitiveBabylonMeshes)for(let i of e._primitiveBabylonMeshes)t(i)}_getGeometries(){let e=[],t=this._gltf.nodes;if(t)for(let i of t)this._forEachPrimitive(i,r=>{let s=r.geometry;s&&e.indexOf(s)===-1&&e.push(s)});return e}_getMeshes(){let e=[];this._rootBabylonMesh instanceof ur&&e.push(this._rootBabylonMesh);let t=this._gltf.nodes;if(t)for(let i of t)this._forEachPrimitive(i,r=>{e.push(r)});return e}_getTransformNodes(){let e=[],t=this._gltf.nodes;if(t)for(let i of t)i._babylonTransformNode&&i._babylonTransformNode.getClassName()==="TransformNode"&&e.push(i._babylonTransformNode),i._babylonTransformNodeForSkin&&e.push(i._babylonTransformNodeForSkin);return e}_getSkeletons(){let e=[],t=this._gltf.skins;if(t)for(let i of t)i._data&&e.push(i._data.babylonSkeleton);return e}_getAnimationGroups(){let e=[],t=this._gltf.animations;if(t)for(let i of t)i._babylonAnimationGroup&&e.push(i._babylonAnimationGroup);return e}_startAnimations(){switch(this._parent.animationStartMode){case $h.NONE:break;case $h.FIRST:{let e=this._getAnimationGroups();e.length!==0&&e[0].start(!0);break}case $h.ALL:{let e=this._getAnimationGroups();for(let t of e)t.start(!0);break}default:{$.Error(`Invalid animation start mode (${this._parent.animationStartMode})`);return}}}loadNodeAsync(e,t,i=()=>{}){let r=this._extensionsLoadNodeAsync(e,t,i);if(r)return r;if(t._babylonTransformNode)throw new Error(`${e}: Invalid recursive node hierarchy`);let s=new Array;this.logOpen(`${e} ${t.name||""}`);let a=c=>{if(n.AddPointerMetadata(c,e),n._LoadTransform(t,c),t.camera!=null){let f=Kt.Get(`${e}/camera`,this._gltf.cameras,t.camera);s.push(this.loadCameraAsync(`/cameras/${f.index}`,f,h=>{h.parent=c,this._babylonScene.useRightHandedSystem||(c.scaling.x=-1)}))}if(t.children)for(let f of t.children){let h=Kt.Get(`${e}/children/${f}`,this._gltf.nodes,f);s.push(this.loadNodeAsync(`/nodes/${h.index}`,h,d=>{d.parent=c}))}i(c)},o=t.mesh!=null,l=this._parent.loadSkins&&t.skin!=null;if(!o||l){let c=t.name||`node${t.index}`;this._babylonScene._blockEntityCollection=!!this._assetContainer;let f=new Jt(c,this._babylonScene);f._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,t.mesh==null?t._babylonTransformNode=f:t._babylonTransformNodeForSkin=f,a(f)}if(o)if(l){let c=Kt.Get(`${e}/mesh`,this._gltf.meshes,t.mesh);s.push(this._loadMeshAsync(`/meshes/${c.index}`,t,c,f=>{let h=t._babylonTransformNodeForSkin;f.metadata=eD(h.metadata,f.metadata||{});let d=Kt.Get(`${e}/skin`,this._gltf.skins,t.skin);s.push(this._loadSkinAsync(`/skins/${d.index}`,t,d,u=>{this._forEachPrimitive(t,m=>{m.skeleton=u}),this._postSceneLoadActions.push(()=>{if(d.skeleton!=null){let m=Kt.Get(`/skins/${d.index}/skeleton`,this._gltf.nodes,d.skeleton).parent;t.index===m.index?f.parent=h.parent:f.parent=m._babylonTransformNode}else f.parent=this._rootBabylonMesh;this._parent.onSkinLoadedObservable.notifyObservers({node:h,skinnedNode:f})})}))}))}else{let c=Kt.Get(`${e}/mesh`,this._gltf.meshes,t.mesh);s.push(this._loadMeshAsync(`/meshes/${c.index}`,t,c,a))}return this.logClose(),Promise.all(s).then(()=>(this._forEachPrimitive(t,c=>{let f=c;!f.isAnInstance&&f.geometry&&f.geometry.useBoundingInfoFromGeometry?c._updateBoundingInfo():c.refreshBoundingInfo(!0,!0)}),t._babylonTransformNode))}_loadMeshAsync(e,t,i,r){let s=i.primitives;if(!s||!s.length)throw new Error(`${e}: Primitives are missing`);s[0].index==null&&Kt.Assign(s);let a=new Array;this.logOpen(`${e} ${i.name||""}`);let o=t.name||`node${t.index}`;if(s.length===1){let l=i.primitives[0];a.push(this._loadMeshPrimitiveAsync(`${e}/primitives/${l.index}`,o,t,i,l,c=>{t._babylonTransformNode=c,t._primitiveBabylonMeshes=[c]}))}else{this._babylonScene._blockEntityCollection=!!this._assetContainer,t._babylonTransformNode=new Jt(o,this._babylonScene),t._babylonTransformNode._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,t._primitiveBabylonMeshes=[];for(let l of s)a.push(this._loadMeshPrimitiveAsync(`${e}/primitives/${l.index}`,`${o}_primitive${l.index}`,t,i,l,c=>{c.parent=t._babylonTransformNode,t._primitiveBabylonMeshes.push(c)}))}return r(t._babylonTransformNode),this.logClose(),Promise.all(a).then(()=>t._babylonTransformNode)}_loadMeshPrimitiveAsync(e,t,i,r,s,a){let o=this._extensionsLoadMeshPrimitiveAsync(e,t,i,r,s,a);if(o)return o;this.logOpen(`${e}`);let l=this._disableInstancedMesh===0&&this._parent.createInstances&&i.skin==null&&!r.primitives[0].targets,c,f;if(l&&s._instanceData)this._babylonScene._blockEntityCollection=!!this._assetContainer,c=s._instanceData.babylonSourceMesh.createInstance(t),c._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,f=s._instanceData.promise;else{let h=new Array;this._babylonScene._blockEntityCollection=!!this._assetContainer;let d=new q(t,this._babylonScene);if(d._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,d.sideOrientation=this._babylonScene.useRightHandedSystem?ve.CounterClockWiseSideOrientation:ve.ClockWiseSideOrientation,this._createMorphTargets(e,i,r,s,d),h.push(this._loadVertexDataAsync(e,s,d).then(async u=>await this._loadMorphTargetsAsync(e,s,d,u).then(()=>{this._disposed||(this._babylonScene._blockEntityCollection=!!this._assetContainer,u.applyToMesh(d),u._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1)}))),!this.parent.skipMaterials){let u=n._GetDrawMode(e,s.mode);if(s.material==null){let m=this._defaultBabylonMaterialData[u];m||(m=this._createDefaultMaterial("__GLTFLoader._default",u),this._parent.onMaterialLoadedObservable.notifyObservers(m),this._defaultBabylonMaterialData[u]=m),d.material=m}else{let m=Kt.Get(`${e}/material`,this._gltf.materials,s.material);h.push(this._loadMaterialAsync(`/materials/${m.index}`,m,d,u,_=>{d.material=_}))}}f=Promise.all(h),l&&(s._instanceData={babylonSourceMesh:d,promise:f}),c=d}return n.AddPointerMetadata(c,e),this._parent.onMeshLoadedObservable.notifyObservers(c),a(c),this.logClose(),f.then(()=>c)}_loadVertexDataAsync(e,t,i){let r=this._extensionsLoadVertexDataAsync(e,t,i);if(r)return r;let s=t.attributes;if(!s)throw new Error(`${e}: Attributes are missing`);let a=new Array,o=new cn(i.name,this._babylonScene);if(t.indices==null)i.isUnIndexed=!0;else{let c=Kt.Get(`${e}/indices`,this._gltf.accessors,t.indices);a.push(this._loadIndicesAccessorAsync(`/accessors/${c.index}`,c).then(f=>{o.setIndices(f)}))}let l=(c,f,h)=>{if(s[c]==null)return;i._delayInfo=i._delayInfo||[],i._delayInfo.indexOf(f)===-1&&i._delayInfo.push(f);let d=Kt.Get(`${e}/attributes/${c}`,this._gltf.accessors,s[c]);a.push(this._loadVertexAccessorAsync(`/accessors/${d.index}`,d,f).then(u=>{if(u.getKind()===L.PositionKind&&!this.parent.alwaysComputeBoundingBox&&!i.skeleton){let m=Qfe(d);m&&(o._boundingInfo=m,o.useBoundingInfoFromGeometry=!0)}o.setVerticesBuffer(u,d.count)})),f==L.MatricesIndicesExtraKind&&(i.numBoneInfluencers=8),h&&h(d)};return l("POSITION",L.PositionKind),l("NORMAL",L.NormalKind),l("TANGENT",L.TangentKind),l("TEXCOORD_0",L.UVKind),l("TEXCOORD_1",L.UV2Kind),l("TEXCOORD_2",L.UV3Kind),l("TEXCOORD_3",L.UV4Kind),l("TEXCOORD_4",L.UV5Kind),l("TEXCOORD_5",L.UV6Kind),l("JOINTS_0",L.MatricesIndicesKind),l("WEIGHTS_0",L.MatricesWeightsKind),l("JOINTS_1",L.MatricesIndicesExtraKind),l("WEIGHTS_1",L.MatricesWeightsExtraKind),l("COLOR_0",L.ColorKind,c=>{c.type==="VEC4"&&(i.hasVertexAlpha=!0)}),Promise.all(a).then(()=>o)}_createMorphTargets(e,t,i,r,s){if(!r.targets||!this._parent.loadMorphTargets)return;if(t._numMorphTargets==null)t._numMorphTargets=r.targets.length;else if(r.targets.length!==t._numMorphTargets)throw new Error(`${e}: Primitives do not have the same number of targets`);let a=i.extras?i.extras.targetNames:null;this._babylonScene._blockEntityCollection=!!this._assetContainer,s.morphTargetManager=new rd(this._babylonScene),s.morphTargetManager._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,s.morphTargetManager.areUpdatesFrozen=!0;for(let o=0;o{a.areUpdatesFrozen=!1})}async _loadMorphTargetVertexDataAsync(e,t,i,r){let s=new Array,a=(o,l,c)=>{if(i[o]==null)return;let f=t.getVertexBuffer(l);if(!f)return;let h=Kt.Get(`${e}/${o}`,this._gltf.accessors,i[o]);s.push(this._loadFloatAccessorAsync(`/accessors/${h.index}`,h).then(d=>{c(f,d)}))};return a("POSITION",L.PositionKind,(o,l)=>{let c=new Float32Array(l.length);o.forEach(l.length,(f,h)=>{c[h]=l[h]+f}),r.setPositions(c)}),a("NORMAL",L.NormalKind,(o,l)=>{let c=new Float32Array(l.length);o.forEach(c.length,(f,h)=>{c[h]=l[h]+f}),r.setNormals(c)}),a("TANGENT",L.TangentKind,(o,l)=>{let c=new Float32Array(l.length/3*4),f=0;o.forEach(l.length/3*4,(h,d)=>{(d+1)%4!==0&&(c[f]=l[f]+h,f++)}),r.setTangents(c)}),a("TEXCOORD_0",L.UVKind,(o,l)=>{let c=new Float32Array(l.length);o.forEach(l.length,(f,h)=>{c[h]=l[h]+f}),r.setUVs(c)}),a("TEXCOORD_1",L.UV2Kind,(o,l)=>{let c=new Float32Array(l.length);o.forEach(l.length,(f,h)=>{c[h]=l[h]+f}),r.setUV2s(c)}),a("COLOR_0",L.ColorKind,(o,l)=>{let c=null,f=o.getSize();if(f===3){c=new Float32Array(l.length/3*4),o.forEach(l.length,(h,d)=>{let u=Math.floor(d/3),m=d%3;c[4*u+m]=l[3*u+m]+h});for(let h=0;h{c[d]=l[d]+h});else throw new Error(`${e}: Invalid number of components (${f}) for COLOR_0 attribute`);r.setColors(c)}),await Promise.all(s).then(()=>{})}static _LoadTransform(e,t){if(e.skin!=null)return;let i=b.Zero(),r=ze.Identity(),s=b.One();e.matrix?K.FromArray(e.matrix).decompose(s,r,i):(e.translation&&(i=b.FromArray(e.translation)),e.rotation&&(r=ze.FromArray(e.rotation)),e.scale&&(s=b.FromArray(e.scale))),t.position=i,t.rotationQuaternion=r,t.scaling=s}_loadSkinAsync(e,t,i,r){if(!this._parent.loadSkins)return Promise.resolve();let s=this._extensionsLoadSkinAsync(e,t,i);if(s)return s;if(i._data)return r(i._data.babylonSkeleton),i._data.promise;let a=`skeleton${i.index}`;this._babylonScene._blockEntityCollection=!!this._assetContainer;let o=new Px(i.name||a,a,this._babylonScene);o._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,this._loadBones(e,i,o);let l=this._loadSkinInverseBindMatricesDataAsync(e,i).then(c=>{this._updateBoneMatrices(o,c)});return i._data={babylonSkeleton:o,promise:l},r(o),l}_loadBones(e,t,i){if(t.skeleton==null||this._parent.alwaysComputeSkeletonRootNode){let s=this._findSkeletonRootNode(`${e}/joints`,t.joints);if(s)if(t.skeleton===void 0)t.skeleton=s.index;else{let a=(l,c)=>{for(;c.parent;c=c.parent)if(c.parent===l)return!0;return!1},o=Kt.Get(`${e}/skeleton`,this._gltf.nodes,t.skeleton);o!==s&&!a(o,s)&&($.Warn(`${e}/skeleton: Overriding with nearest common ancestor as skeleton node is not a common root`),t.skeleton=s.index)}else $.Warn(`${e}: Failed to find common root`)}let r={};for(let s of t.joints){let a=Kt.Get(`${e}/joints/${s}`,this._gltf.nodes,s);this._loadBone(a,t,i,r)}}_findSkeletonRootNode(e,t){if(t.length===0)return null;let i={};for(let s of t){let a=[],o=Kt.Get(`${e}/${s}`,this._gltf.nodes,s);for(;o.index!==-1;)a.unshift(o),o=o.parent;i[s]=a}let r=null;for(let s=0;;++s){let a=i[t[0]];if(s>=a.length)return r;let o=a[s];for(let l=1;l=a.length||o!==a[s])return r;r=o}}_loadBone(e,t,i,r){e._isJoint=!0;let s=r[e.index];if(s)return s;let a=null;e.index!==t.skeleton&&(e.parent&&e.parent.index!==-1?a=this._loadBone(e.parent,t,i,r):t.skeleton!==void 0&&$.Warn(`/skins/${t.index}/skeleton: Skeleton node is not a common root`));let o=t.joints.indexOf(e.index);return s=new Ca(e.name||`joint${e.index}`,i,a,this._getNodeMatrix(e),null,null,o),r[e.index]=s,this._postSceneLoadActions.push(()=>{s.linkTransformNode(e._babylonTransformNode)}),s}_loadSkinInverseBindMatricesDataAsync(e,t){if(t.inverseBindMatrices==null)return Promise.resolve(null);let i=Kt.Get(`${e}/inverseBindMatrices`,this._gltf.accessors,t.inverseBindMatrices);return this._loadFloatAccessorAsync(`/accessors/${i.index}`,i)}_updateBoneMatrices(e,t){for(let i of e.bones){let r=K.Identity(),s=i._index;t&&s!==-1&&(K.FromArrayToRef(t,s*16,r),r.invertToRef(r));let a=i.getParent();a&&r.multiplyToRef(a.getAbsoluteInverseBindMatrix(),r),i.updateMatrix(r,!1,!1),i._updateAbsoluteBindMatrices(void 0,!1)}}_getNodeMatrix(e){return e.matrix?K.FromArray(e.matrix):K.Compose(e.scale?b.FromArray(e.scale):b.One(),e.rotation?ze.FromArray(e.rotation):ze.Identity(),e.translation?b.FromArray(e.translation):b.Zero())}loadCameraAsync(e,t,i=()=>{}){let r=this._extensionsLoadCameraAsync(e,t,i);if(r)return r;let s=new Array;this.logOpen(`${e} ${t.name||""}`),this._babylonScene._blockEntityCollection=!!this._assetContainer;let a=new _c(t.name||`camera${t.index}`,b.Zero(),this._babylonScene,!1);switch(a._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,t._babylonCamera=a,a.setTarget(new b(0,0,-1)),t.type){case"perspective":{let o=t.perspective;if(!o)throw new Error(`${e}: Camera perspective properties are missing`);a.fov=o.yfov,a.minZ=o.znear,a.maxZ=o.zfar||0;break}case"orthographic":{if(!t.orthographic)throw new Error(`${e}: Camera orthographic properties are missing`);a.mode=ut.ORTHOGRAPHIC_CAMERA,a.orthoLeft=-t.orthographic.xmag,a.orthoRight=t.orthographic.xmag,a.orthoBottom=-t.orthographic.ymag,a.orthoTop=t.orthographic.ymag,a.minZ=t.orthographic.znear,a.maxZ=t.orthographic.zfar;break}default:throw new Error(`${e}: Invalid camera type (${t.type})`)}return n.AddPointerMetadata(a,e),this._parent.onCameraLoadedObservable.notifyObservers(a),i(a),this.logClose(),Promise.all(s).then(()=>a)}_loadAnimationsAsync(){this._parent._startPerformanceCounter("Load animations");let e=this._gltf.animations;if(!e)return Promise.resolve();let t=new Array;for(let i=0;i{s.targetedAnimations.length===0&&s.dispose()}))}return Promise.all(t).then(()=>{this._parent._endPerformanceCounter("Load animations")})}loadAnimationAsync(e,t){this._parent._startPerformanceCounter("Load animation");let i=this._extensionsLoadAnimationAsync(e,t);return i||qfe.value.then(({AnimationGroup:r})=>{this._babylonScene._blockEntityCollection=!!this._assetContainer;let s=new r(t.name||`animation${t.index}`,this._babylonScene);s._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,t._babylonAnimationGroup=s;let a=new Array;Kt.Assign(t.channels),Kt.Assign(t.samplers);for(let o of t.channels)a.push(this._loadAnimationChannelAsync(`${e}/channels/${o.index}`,e,t,o,(l,c)=>{l.animations=l.animations||[],l.animations.push(c),s.addTargetedAnimation(c,l)}));return this._parent._endPerformanceCounter("Load animation"),Promise.all(a).then(()=>(s.normalize(0),s))})}_loadAnimationChannelAsync(e,t,i,r,s){let a=this._extensionsLoadAnimationChannelAsync(e,t,i,r,s);if(a)return a;if(r.target.node==null)return Promise.resolve();let o=Kt.Get(`${e}/target/node`,this._gltf.nodes,r.target.node),l=r.target.path,c=l==="weights";return c&&!o._numMorphTargets||!c&&!o._babylonTransformNode||!this._parent.loadNodeAnimations&&!c&&!o._isJoint?Promise.resolve():Zfe.value.then(()=>{var d,u,m,_;let f;switch(l){case"translation":{f=(d=pg("/nodes/{}/translation"))==null?void 0:d.interpolation;break}case"rotation":{f=(u=pg("/nodes/{}/rotation"))==null?void 0:u.interpolation;break}case"scale":{f=(m=pg("/nodes/{}/scale"))==null?void 0:m.interpolation;break}case"weights":{f=(_=pg("/nodes/{}/weights"))==null?void 0:_.interpolation;break}default:throw new Error(`${e}/target/path: Invalid value (${r.target.path})`)}if(!f)throw new Error(`${e}/target/path: Could not find interpolation properties for target path (${r.target.path})`);let h={object:o,info:f};return this._loadAnimationChannelFromTargetInfoAsync(e,t,i,r,h,s)})}_loadAnimationChannelFromTargetInfoAsync(e,t,i,r,s,a){let o=this.parent.targetFps,l=1/o,c=Kt.Get(`${e}/sampler`,i.samplers,r.sampler);return this._loadAnimationSamplerAsync(`${t}/samplers/${r.sampler}`,c).then(f=>{let h=0,d=s.object,u=s.info;for(let m of u){let _=m.getStride(d),p=f.input,g=f.output,v=new Array(p.length),x=0;switch(f.interpolation){case"STEP":{for(let A=0;A0){let A=`${i.name||`animation${i.index}`}_channel${r.index}_${h}`,E=m.buildAnimations(d,A,o,v);for(let T of E)h++,a(T.babylonAnimatable,T.babylonAnimation)}}})}_loadAnimationSamplerAsync(e,t){if(t._data)return t._data;let i=t.interpolation||"LINEAR";switch(i){case"STEP":case"LINEAR":case"CUBICSPLINE":break;default:throw new Error(`${e}/interpolation: Invalid value (${t.interpolation})`)}let r=Kt.Get(`${e}/input`,this._gltf.accessors,t.input),s=Kt.Get(`${e}/output`,this._gltf.accessors,t.output);return t._data=Promise.all([this._loadFloatAccessorAsync(`/accessors/${r.index}`,r),this._loadFloatAccessorAsync(`/accessors/${s.index}`,s)]).then(([a,o])=>({input:a,interpolation:i,output:o})),t._data}loadBufferAsync(e,t,i,r){let s=this._extensionsLoadBufferAsync(e,t,i,r);if(s)return s;if(!t._data)if(t.uri)t._data=this.loadUriAsync(`${e}/uri`,t,t.uri);else{if(!this._bin)throw new Error(`${e}: Uri is missing or the binary glTF is missing its binary chunk`);t._data=this._bin.readAsync(0,t.byteLength)}return t._data.then(a=>{try{return new Uint8Array(a.buffer,a.byteOffset+i,r)}catch(o){throw new Error(`${e}: ${o.message}`,{cause:o})}})}loadBufferViewAsync(e,t){let i=this._extensionsLoadBufferViewAsync(e,t);if(i)return i;if(t._data)return t._data;let r=Kt.Get(`${e}/buffer`,this._gltf.buffers,t.buffer);return t._data=this.loadBufferAsync(`/buffers/${r.index}`,r,t.byteOffset||0,t.byteLength),t._data}_loadAccessorAsync(e,t,i){if(t._data)return t._data;let r=n._GetNumComponents(e,t.type),s=r*L.GetTypeByteLength(t.componentType),a=r*t.count;if(t.bufferView==null)t._data=Promise.resolve(new i(a));else{let o=Kt.Get(`${e}/bufferView`,this._gltf.bufferViews,t.bufferView);t._data=this.loadBufferViewAsync(`/bufferViews/${o.index}`,o).then(l=>{if(t.componentType===5126&&!t.normalized&&(!o.byteStride||o.byteStride===s))return n._GetTypedArray(e,t.componentType,l,t.byteOffset,a);{let c=new i(a);return L.ForEach(l,t.byteOffset||0,o.byteStride||s,r,t.componentType,c.length,t.normalized||!1,(f,h)=>{c[h]=f}),c}})}if(t.sparse){let o=t.sparse;t._data=t._data.then(l=>{let c=l,f=Kt.Get(`${e}/sparse/indices/bufferView`,this._gltf.bufferViews,o.indices.bufferView),h=Kt.Get(`${e}/sparse/values/bufferView`,this._gltf.bufferViews,o.values.bufferView);return Promise.all([this.loadBufferViewAsync(`/bufferViews/${f.index}`,f),this.loadBufferViewAsync(`/bufferViews/${h.index}`,h)]).then(([d,u])=>{let m=n._GetTypedArray(`${e}/sparse/indices`,o.indices.componentType,d,o.indices.byteOffset,o.count),_=r*o.count,p;if(t.componentType===5126&&!t.normalized)p=n._GetTypedArray(`${e}/sparse/values`,t.componentType,u,o.values.byteOffset,_);else{let v=n._GetTypedArray(`${e}/sparse/values`,t.componentType,u,o.values.byteOffset,_);p=new i(_),L.ForEach(v,0,s,r,t.componentType,p.length,t.normalized||!1,(x,A)=>{p[A]=x})}let g=0;for(let v=0;vn._GetTypedArray(e,t.componentType,r,t.byteOffset,t.count))}return t._data}_loadVertexBufferViewAsync(e){if(e._babylonBuffer)return e._babylonBuffer;let t=this._babylonScene.getEngine();return e._babylonBuffer=this.loadBufferViewAsync(`/bufferViews/${e.index}`,e).then(i=>new Qa(t,i,!1)),e._babylonBuffer}_loadVertexAccessorAsync(e,t,i){var s;if((s=t._babylonVertexBuffer)!=null&&s[i])return t._babylonVertexBuffer[i];t._babylonVertexBuffer||(t._babylonVertexBuffer={});let r=this._babylonScene.getEngine();if(t.sparse||t.bufferView==null)t._babylonVertexBuffer[i]=this._loadFloatAccessorAsync(e,t).then(a=>new L(r,a,i,!1));else{let a=Kt.Get(`${e}/bufferView`,this._gltf.bufferViews,t.bufferView);t._babylonVertexBuffer[i]=this._loadVertexBufferViewAsync(a).then(o=>{let l=n._GetNumComponents(e,t.type);return new L(r,o,i,!1,void 0,a.byteStride,void 0,t.byteOffset,l,t.componentType,t.normalized,!0,void 0,!0)})}return t._babylonVertexBuffer[i]}_loadMaterialMetallicRoughnessPropertiesAsync(e,t,i){let r=new Array,s=this._getOrCreateMaterialAdapter(i);return t&&(t.baseColorFactor?(s.baseColor=Te.FromArray(t.baseColorFactor),s.geometryOpacity=t.baseColorFactor[3]):s.baseColor=Te.White(),s.baseMetalness=t.metallicFactor==null?1:t.metallicFactor,s.specularRoughness=t.roughnessFactor==null?1:t.roughnessFactor,t.baseColorTexture&&r.push(this.loadTextureInfoAsync(`${e}/baseColorTexture`,t.baseColorTexture,a=>{a.name=`${i.name} (Base Color)`,s.baseColorTexture=a})),t.metallicRoughnessTexture&&(t.metallicRoughnessTexture.nonColorData=!0,r.push(this.loadTextureInfoAsync(`${e}/metallicRoughnessTexture`,t.metallicRoughnessTexture,a=>{a.name=`${i.name} (Metallic Roughness)`,s.baseMetalnessTexture=a,s.specularRoughnessTexture=a})),s.useRoughnessFromMetallicTextureGreen=!0,s.useMetallicFromMetallicTextureBlue=!0)),Promise.all(r).then(()=>{})}_loadMaterialAsync(e,t,i,r,s=()=>{}){let a=this._extensionsLoadMaterialAsync(e,t,i,r,s);if(a)return a;t._data=t._data||{};let o=t._data[r];if(!o){this.logOpen(`${e} ${t.name||""}`);let l=this.createMaterial(e,t,r);o={babylonMaterial:l,babylonMeshes:[],promise:this.loadMaterialPropertiesAsync(e,t,l)},t._data[r]=o,n.AddPointerMetadata(l,e),this._parent.onMaterialLoadedObservable.notifyObservers(l),this.logClose()}return i&&(o.babylonMeshes.push(i),i.onDisposeObservable.addOnce(()=>{let l=o.babylonMeshes.indexOf(i);l!==-1&&o.babylonMeshes.splice(l,1)})),s(o.babylonMaterial),o.promise.then(()=>o.babylonMaterial)}_createDefaultMaterial(e,t){if(!this._pbrMaterialImpl)throw new Error("PBR Material class not loaded");this._babylonScene._blockEntityCollection=!!this._assetContainer;let i=new this._pbrMaterialImpl.materialClass(e,this._babylonScene);i._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,i.fillMode=t,i.transparencyMode=this._pbrMaterialImpl.materialClass.MATERIAL_OPAQUE;let r=this._getOrCreateMaterialAdapter(i);return r.transparencyAsAlphaCoverage=this._parent.transparencyAsCoverage,r.baseMetalness=1,r.specularRoughness=1,i}createMaterial(e,t,i){let r=this._extensionsCreateMaterial(e,t,i);if(r)return r;let s=t.name||`material${t.index}`;return this._createDefaultMaterial(s,i)}loadMaterialPropertiesAsync(e,t,i){let r=this._extensionsLoadMaterialPropertiesAsync(e,t,i);if(r)return r;let s=new Array;return s.push(this.loadMaterialBasePropertiesAsync(e,t,i)),t.pbrMetallicRoughness&&s.push(this._loadMaterialMetallicRoughnessPropertiesAsync(`${e}/pbrMetallicRoughness`,t.pbrMetallicRoughness,i)),this.loadMaterialAlphaProperties(e,t,i),Promise.all(s).then(()=>{})}loadMaterialBasePropertiesAsync(e,t,i){let r=new Array,s=this._getOrCreateMaterialAdapter(i);s.emissionColor=t.emissiveFactor?Te.FromArray(t.emissiveFactor):new Te(0,0,0),t.doubleSided&&(s.backFaceCulling=!1,s.twoSidedLighting=!0),t.normalTexture&&(t.normalTexture.nonColorData=!0,r.push(this.loadTextureInfoAsync(`${e}/normalTexture`,t.normalTexture,c=>{var f;c.name=`${i.name} (Normal)`,s.geometryNormalTexture=c,((f=t.normalTexture)==null?void 0:f.scale)!=null&&(c.level=t.normalTexture.scale)})),s.setNormalMapInversions(!this._babylonScene.useRightHandedSystem,this._babylonScene.useRightHandedSystem));let a,o=1,l;return t.occlusionTexture&&(t.occlusionTexture.nonColorData=!0,r.push(this.loadTextureInfoAsync(`${e}/occlusionTexture`,t.occlusionTexture,c=>{c.name=`${i.name} (Occlusion)`,a=c})),t.occlusionTexture.strength!=null&&(o=t.occlusionTexture.strength)),t.emissiveTexture&&r.push(this.loadTextureInfoAsync(`${e}/emissiveTexture`,t.emissiveTexture,c=>{c.name=`${i.name} (Emissive)`,l=c})),Promise.all(r).then(()=>{a&&(s.ambientOcclusionTexture=a,s.ambientOcclusionTextureStrength=o),l&&(s.emissionColorTexture=l)})}loadMaterialAlphaProperties(e,t,i){if(!this._pbrMaterialImpl)throw new Error(`${e}: Material type not supported`);let r=this._getOrCreateMaterialAdapter(i),s=r.baseColorTexture;switch(t.alphaMode||"OPAQUE"){case"OPAQUE":{i.transparencyMode=this._pbrMaterialImpl.materialClass.MATERIAL_OPAQUE,i.alpha=1;break}case"MASK":{i.transparencyMode=this._pbrMaterialImpl.materialClass.MATERIAL_ALPHATEST,r.alphaCutOff=t.alphaCutoff==null?.5:t.alphaCutoff,s&&(s.hasAlpha=!0);break}case"BLEND":{i.transparencyMode=this._pbrMaterialImpl.materialClass.MATERIAL_ALPHABLEND,s&&(s.hasAlpha=!0,r.useAlphaFromBaseColorTexture=!0);break}default:throw new Error(`${e}/alphaMode: Invalid value (${t.alphaMode})`)}}loadTextureInfoAsync(e,t,i=()=>{}){let r=this._extensionsLoadTextureInfoAsync(e,t,i);if(r)return r;if(this.logOpen(`${e}`),t.texCoord>=6)throw new Error(`${e}/texCoord: Invalid value (${t.texCoord})`);let s=Kt.Get(`${e}/index`,this._gltf.textures,t.index);s._textureInfo=t;let a=this._loadTextureAsync(`/textures/${t.index}`,s,o=>{o.coordinatesIndex=t.texCoord||0,n.AddPointerMetadata(o,e),this._parent.onTextureLoadedObservable.notifyObservers(o),i(o)});return this.logClose(),a}_loadTextureAsync(e,t,i=()=>{}){let r=this._extensionsLoadTextureAsync(e,t,i);if(r)return r;this.logOpen(`${e} ${t.name||""}`);let s=t.sampler==null?n.DefaultSampler:Kt.Get(`${e}/sampler`,this._gltf.samplers,t.sampler),a=Kt.Get(`${e}/source`,this._gltf.images,t.source),o=this._createTextureAsync(e,s,a,i,void 0,!t._textureInfo.nonColorData);return this.logClose(),o}_createTextureAsync(e,t,i,r=()=>{},s,a){var m,_;let o=this._loadSampler(`/samplers/${t.index}`,t),l=new Array,c=new Mx;this._babylonScene._blockEntityCollection=!!this._assetContainer;let f={noMipmap:o.noMipMaps,invertY:!1,samplingMode:o.samplingMode,onLoad:()=>{this._disposed||c.resolve()},onError:(p,g)=>{this._disposed||c.reject(new Error(`${e}: ${g&&g.message?g.message:p||"Failed to load texture"}`))},mimeType:(_=i.mimeType)!=null?_:V3((m=i.uri)!=null?m:""),loaderOptions:s,useSRGBBuffer:!!a&&this._parent.useSRGBBuffers},h=new ge(null,this._babylonScene,f);h._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,l.push(c.promise);let d=i.uri&&!$c(i.uri)?i.uri:void 0,u=d!=null?d:`${this._fileName}#image${i.index}`;if(l.push(this.loadImageAsync(`/images/${i.index}`,i).then(p=>{let g=`data:${this._uniqueRootUrl}${u}`;h.updateURL(g,p);let v=h.getInternalTexture();v&&(v.label=i.name)})),h.wrapU=o.wrapU,h.wrapV=o.wrapV,r(h),this._parent.useGltfTextureNames){let p=i.name||d||`image${i.index}`;h.name=p}return Promise.all(l).then(()=>h)}_loadSampler(e,t){return t._data||(t._data={noMipMaps:t.minFilter===9728||t.minFilter===9729,samplingMode:n._GetTextureSamplingMode(e,t),wrapU:n._GetTextureWrapMode(`${e}/wrapS`,t.wrapS),wrapV:n._GetTextureWrapMode(`${e}/wrapT`,t.wrapT)}),t._data}loadImageAsync(e,t){if(!t._data){if(this.logOpen(`${e} ${t.name||""}`),t.uri)t._data=this.loadUriAsync(`${e}/uri`,t,t.uri);else{let i=Kt.Get(`${e}/bufferView`,this._gltf.bufferViews,t.bufferView);t._data=this.loadBufferViewAsync(`/bufferViews/${i.index}`,i)}this.logClose()}return t._data}loadUriAsync(e,t,i){let r=this._extensionsLoadUriAsync(e,t,i);if(r)return r;if(!n._ValidateUri(i))throw new Error(`${e}: '${i}' is invalid`);if($c(i)){let s=new Uint8Array(ef(i));return this.log(`${e}: Decoded ${i.substring(0,64)}... (${s.length} bytes)`),Promise.resolve(s)}return this.log(`${e}: Loading ${i}`),this._parent.preprocessUrlAsync(this._rootUrl+i).then(s=>new Promise((a,o)=>{this._parent._loadFile(this._babylonScene,s,l=>{this._disposed||(this.log(`${e}: Loaded ${i} (${l.byteLength} bytes)`),a(new Uint8Array(l)))},!0,l=>{o(new Gu(`${e}: Failed to load '${i}'${l?": "+l.status+" "+l.statusText:""}`,l))})}))}static AddPointerMetadata(e,t){e.metadata=e.metadata||{};let i=e._internalMetadata=e._internalMetadata||{},r=i.gltf=i.gltf||{};(r.pointers=r.pointers||[]).push(t)}static _GetTextureWrapMode(e,t){switch(t=t==null?10497:t,t){case 33071:return ge.CLAMP_ADDRESSMODE;case 33648:return ge.MIRROR_ADDRESSMODE;case 10497:return ge.WRAP_ADDRESSMODE;default:return $.Warn(`${e}: Invalid value (${t})`),ge.WRAP_ADDRESSMODE}}static _GetTextureSamplingMode(e,t){let i=t.magFilter==null?9729:t.magFilter,r=t.minFilter==null?9987:t.minFilter;if(i===9729)switch(r){case 9728:return ge.LINEAR_NEAREST;case 9729:return ge.LINEAR_LINEAR;case 9984:return ge.LINEAR_NEAREST_MIPNEAREST;case 9985:return ge.LINEAR_LINEAR_MIPNEAREST;case 9986:return ge.LINEAR_NEAREST_MIPLINEAR;case 9987:return ge.LINEAR_LINEAR_MIPLINEAR;default:return $.Warn(`${e}/minFilter: Invalid value (${r})`),ge.LINEAR_LINEAR_MIPLINEAR}else switch(i!==9728&&$.Warn(`${e}/magFilter: Invalid value (${i})`),r){case 9728:return ge.NEAREST_NEAREST;case 9729:return ge.NEAREST_LINEAR;case 9984:return ge.NEAREST_NEAREST_MIPNEAREST;case 9985:return ge.NEAREST_LINEAR_MIPNEAREST;case 9986:return ge.NEAREST_NEAREST_MIPLINEAR;case 9987:return ge.NEAREST_LINEAR_MIPLINEAR;default:return $.Warn(`${e}/minFilter: Invalid value (${r})`),ge.NEAREST_NEAREST_MIPNEAREST}}static _GetTypedArrayConstructor(e,t){try{return Z0(t)}catch(i){throw new Error(`${e}: ${i.message}`,{cause:i})}}static _GetTypedArray(e,t,i,r,s){let a=i.buffer;r=i.byteOffset+(r||0);let o=n._GetTypedArrayConstructor(`${e}/componentType`,t),l=L.GetTypeByteLength(t);return r%l!==0?($.Warn(`${e}: Copying buffer as byte offset (${r}) is not a multiple of component type byte length (${l})`),new o(a.slice(r,r+s*l),0)):new o(a,r,s)}static _GetNumComponents(e,t){switch(t){case"SCALAR":return 1;case"VEC2":return 2;case"VEC3":return 3;case"VEC4":return 4;case"MAT2":return 4;case"MAT3":return 9;case"MAT4":return 16}throw new Error(`${e}: Invalid type (${t})`)}static _ValidateUri(e){return he.IsBase64(e)||e.indexOf("..")===-1}static _GetDrawMode(e,t){switch(t==null&&(t=4),t){case 0:return ve.PointListDrawMode;case 1:return ve.LineListDrawMode;case 2:return ve.LineLoopDrawMode;case 3:return ve.LineStripDrawMode;case 4:return ve.TriangleFillMode;case 5:return ve.TriangleStripDrawMode;case 6:return ve.TriangleFanDrawMode}throw new Error(`${e}: Invalid mesh primitive mode (${t})`)}_compileMaterialsAsync(){this._parent._startPerformanceCounter("Compile materials");let e=new Array;if(this._gltf.materials){for(let t of this._gltf.materials)if(t._data)for(let i in t._data){let r=t._data[i];for(let s of r.babylonMeshes){s.computeWorldMatrix(!0);let a=r.babylonMaterial;e.push(a.forceCompilationAsync(s)),e.push(a.forceCompilationAsync(s,{useInstances:!0})),this._parent.useClipPlane&&(e.push(a.forceCompilationAsync(s,{clipPlane:!0})),e.push(a.forceCompilationAsync(s,{clipPlane:!0,useInstances:!0})))}}}return Promise.all(e).then(()=>{this._parent._endPerformanceCounter("Compile materials")})}_compileShadowGeneratorsAsync(){this._parent._startPerformanceCounter("Compile shadow generators");let e=new Array,t=this._babylonScene.lights;for(let i of t){let r=i.getShadowGenerator();r&&e.push(r.forceCompilationAsync())}return Promise.all(e).then(()=>{this._parent._endPerformanceCounter("Compile shadow generators")})}_forEachExtensions(e){for(let t of this._extensions)t.enabled&&e(t)}_applyExtensions(e,t,i){for(let r of this._extensions)if(r.enabled){let s=`${r.name}.${t}`,a=e;a._activeLoaderExtensionFunctions=a._activeLoaderExtensionFunctions||{};let o=a._activeLoaderExtensionFunctions;if(!o[s]){o[s]=!0;try{let l=i(r);if(l)return l}finally{delete o[s]}}}return null}_extensionsOnLoading(){this._forEachExtensions(e=>e.onLoading&&e.onLoading())}_extensionsOnReady(){this._forEachExtensions(e=>e.onReady&&e.onReady())}_extensionsLoadSceneAsync(e,t){return this._applyExtensions(t,"loadScene",i=>i.loadSceneAsync&&i.loadSceneAsync(e,t))}_extensionsLoadNodeAsync(e,t,i){return this._applyExtensions(t,"loadNode",r=>r.loadNodeAsync&&r.loadNodeAsync(e,t,i))}_extensionsLoadCameraAsync(e,t,i){return this._applyExtensions(t,"loadCamera",r=>r.loadCameraAsync&&r.loadCameraAsync(e,t,i))}_extensionsLoadVertexDataAsync(e,t,i){return this._applyExtensions(t,"loadVertexData",r=>r._loadVertexDataAsync&&r._loadVertexDataAsync(e,t,i))}_extensionsLoadMeshPrimitiveAsync(e,t,i,r,s,a){return this._applyExtensions(s,"loadMeshPrimitive",o=>o._loadMeshPrimitiveAsync&&o._loadMeshPrimitiveAsync(e,t,i,r,s,a))}_extensionsLoadMaterialAsync(e,t,i,r,s){return this._applyExtensions(t,"loadMaterial",a=>a._loadMaterialAsync&&a._loadMaterialAsync(e,t,i,r,s))}_extensionsCreateMaterial(e,t,i){return this._applyExtensions(t,"createMaterial",r=>r.createMaterial&&r.createMaterial(e,t,i))}_extensionsLoadMaterialPropertiesAsync(e,t,i){return this._applyExtensions(t,"loadMaterialProperties",r=>r.loadMaterialPropertiesAsync&&r.loadMaterialPropertiesAsync(e,t,i))}_extensionsLoadTextureInfoAsync(e,t,i){return this._applyExtensions(t,"loadTextureInfo",r=>r.loadTextureInfoAsync&&r.loadTextureInfoAsync(e,t,i))}_extensionsLoadTextureAsync(e,t,i){return this._applyExtensions(t,"loadTexture",r=>r._loadTextureAsync&&r._loadTextureAsync(e,t,i))}_extensionsLoadAnimationAsync(e,t){return this._applyExtensions(t,"loadAnimation",i=>i.loadAnimationAsync&&i.loadAnimationAsync(e,t))}_extensionsLoadAnimationChannelAsync(e,t,i,r,s){return this._applyExtensions(i,"loadAnimationChannel",a=>a._loadAnimationChannelAsync&&a._loadAnimationChannelAsync(e,t,i,r,s))}_extensionsLoadSkinAsync(e,t,i){return this._applyExtensions(i,"loadSkin",r=>r._loadSkinAsync&&r._loadSkinAsync(e,t,i))}_extensionsLoadUriAsync(e,t,i){return this._applyExtensions(t,"loadUri",r=>r._loadUriAsync&&r._loadUriAsync(e,t,i))}_extensionsLoadBufferViewAsync(e,t){return this._applyExtensions(t,"loadBufferView",i=>i.loadBufferViewAsync&&i.loadBufferViewAsync(e,t))}_extensionsLoadBufferAsync(e,t,i,r){return this._applyExtensions(t,"loadBuffer",s=>s.loadBufferAsync&&s.loadBufferAsync(e,t,i,r))}static LoadExtensionAsync(e,t,i,r){if(!t.extensions)return null;let a=t.extensions[i];return a?r(`${e}/extensions/${i}`,a):null}static LoadExtraAsync(e,t,i,r){if(!t.extras)return null;let a=t.extras[i];return a?r(`${e}/extras/${i}`,a):null}isExtensionUsed(e){return!!this._gltf.extensionsUsed&&this._gltf.extensionsUsed.indexOf(e)!==-1}logOpen(e){this._parent._logOpen(e)}logClose(){this._parent._logClose()}log(e){this._parent._log(e)}startPerformanceCounter(e){this._parent._startPerformanceCounter(e)}endPerformanceCounter(e){this._parent._endPerformanceCounter(e)}};zx.DefaultSampler={index:-1};Bf._CreateGLTF2Loader=n=>new zx(n)});var Xx,I7=C(()=>{Xx={name:"obj",extensions:".obj"}});var nd,M7=C(()=>{Ht();Gr();mc();nd=class n{constructor(){this.materials=[]}parseMTL(e,t,i,r){if(t instanceof ArrayBuffer)return;let s=t.split(` -`),a=/\s+/,o,l=null;for(let c=0;c=0?f.substring(0,h):f;d=d.toLowerCase();let u=h>=0?f.substring(h+1).trim():"";if(d==="newmtl")l&&this.materials.push(l),e._blockEntityCollection=!!r,l=new He(u,e),l._parentContainer=r,e._blockEntityCollection=!1;else if(d==="kd"&&l)o=u.split(a,3).map(parseFloat),l.diffuseColor=Te.FromArray(o);else if(d==="ka"&&l)o=u.split(a,3).map(parseFloat),l.ambientColor=Te.FromArray(o);else if(d==="ks"&&l)o=u.split(a,3).map(parseFloat),l.specularColor=Te.FromArray(o);else if(d==="ke"&&l)o=u.split(a,3).map(parseFloat),l.emissiveColor=Te.FromArray(o);else if(d==="ns"&&l)l.specularPower=parseFloat(u);else if(d==="d"&&l)l.alpha=parseFloat(u);else if(d==="map_ka"&&l)l.ambientTexture=n._GetTexture(i,u,e);else if(d==="map_kd"&&l)l.diffuseTexture=n._GetTexture(i,u,e);else if(d==="map_ks"&&l)l.specularTexture=n._GetTexture(i,u,e);else if(d!=="map_ns")if(d==="map_bump"&&l){let m=u.split(a),_=m.indexOf("-bm"),p=null;_>=0&&(p=m[_+1],m.splice(_,2)),l.bumpTexture=n._GetTexture(i,m.join(" "),e),l.bumpTexture&&p!==null&&(l.bumpTexture.level=parseFloat(p))}else d==="map_d"&&l&&(l.opacityTexture=n._GetTexture(i,u,e))}l&&this.materials.push(l)}static _GetTexture(e,t,i){if(!t)return null;let r=e;if(e==="file:"){let s=t.lastIndexOf("\\");s===-1&&(s=t.lastIndexOf("/")),s>-1?r+=t.substring(s+1):r+=t}else r+=t;return new ge(r,i,!1,n.INVERT_TEXTURE_Y)}};nd.INVERT_TEXTURE_Y=!0});var zr,C7=C(()=>{Ui();mc();Ht();Ve();KT();Di();lr();Pt();zr=class n{constructor(e,t,i){this._positions=[],this._normals=[],this._uvs=[],this._colors=[],this._extColors=[],this._meshesFromObj=[],this._indicesForBabylon=[],this._wrappedPositionForBabylon=[],this._wrappedUvsForBabylon=[],this._wrappedColorsForBabylon=[],this._wrappedNormalsForBabylon=[],this._tuplePosNorm=[],this._curPositionInIndices=0,this._hasMeshes=!1,this._unwrappedPositionsForBabylon=[],this._unwrappedColorsForBabylon=[],this._unwrappedNormalsForBabylon=[],this._unwrappedUVForBabylon=[],this._triangles=[],this._materialNameFromObj="",this._objMeshName="",this._increment=1,this._isFirstMaterial=!0,this._grayColor=new lt(.5,.5,.5,1),this._hasLineData=!1,this._materialToUse=e,this._babylonMeshesArray=t,this._loadingOptions=i}_isInArray(e,t){e[t[0]]||(e[t[0]]={normals:[],idx:[]});let i=e[t[0]].normals.indexOf(t[1]);return i===-1?-1:e[t[0]].idx[i]}_isInArrayUV(e,t){e[t[0]]||(e[t[0]]={normals:[],idx:[],uv:[]});let i=e[t[0]].normals.indexOf(t[1]);return i!=1&&t[2]===e[t[0]].uv[i]?e[t[0]].idx[i]:-1}_setData(e){var i,r;(i=e.indiceUvsFromObj)!=null||(e.indiceUvsFromObj=-1),(r=e.indiceNormalFromObj)!=null||(e.indiceNormalFromObj=-1);let t;this._loadingOptions.optimizeWithUV?t=this._isInArrayUV(this._tuplePosNorm,[e.indicePositionFromObj,e.indiceNormalFromObj,e.indiceUvsFromObj]):t=this._isInArray(this._tuplePosNorm,[e.indicePositionFromObj,e.indiceNormalFromObj]),t===-1?(this._indicesForBabylon.push(this._wrappedPositionForBabylon.length),this._wrappedPositionForBabylon.push(e.positionVectorFromOBJ),e.textureVectorFromOBJ!==void 0&&this._wrappedUvsForBabylon.push(e.textureVectorFromOBJ),e.normalsVectorFromOBJ!==void 0&&this._wrappedNormalsForBabylon.push(e.normalsVectorFromOBJ),e.positionColorsFromOBJ!==void 0&&this._wrappedColorsForBabylon.push(e.positionColorsFromOBJ),this._tuplePosNorm[e.indicePositionFromObj].normals.push(e.indiceNormalFromObj),this._tuplePosNorm[e.indicePositionFromObj].idx.push(this._curPositionInIndices++),this._loadingOptions.optimizeWithUV&&this._tuplePosNorm[e.indicePositionFromObj].uv.push(e.indiceUvsFromObj)):this._indicesForBabylon.push(t)}_unwrapData(){try{for(let e=0;e0&&(this._handledMesh=this._meshesFromObj[this._meshesFromObj.length-1],this._unwrapData(),this._loadingOptions.useLegacyBehavior&&this._indicesForBabylon.reverse(),this._handledMesh.indices=this._indicesForBabylon.slice(),this._handledMesh.positions=this._unwrappedPositionsForBabylon.slice(),this._unwrappedNormalsForBabylon.length&&(this._handledMesh.normals=this._unwrappedNormalsForBabylon.slice()),this._unwrappedUVForBabylon.length&&(this._handledMesh.uvs=this._unwrappedUVForBabylon.slice()),this._unwrappedColorsForBabylon.length&&(this._handledMesh.colors=this._unwrappedColorsForBabylon.slice()),this._handledMesh.hasLines=this._hasLineData,this._indicesForBabylon.length=0,this._unwrappedPositionsForBabylon.length=0,this._unwrappedColorsForBabylon.length=0,this._unwrappedNormalsForBabylon.length=0,this._unwrappedUVForBabylon.length=0,this._hasLineData=!1)}_optimizeNormals(e){let t=e.getVerticesData(L.PositionKind),i=e.getVerticesData(L.NormalKind),r={};if(!t||!i)return;for(let a=0;athis._triangles.push(d[0],d[u],d[u+1]),this._handednessSign=1):i.useRightHandedSystem?(this._pushTriangle=(d,u)=>this._triangles.push(d[0],d[u+1],d[u]),this._handednessSign=1):(this._pushTriangle=(d,u)=>this._triangles.push(d[0],d[u],d[u+1]),this._handednessSign=-1);let a=t.split(` -`),o=[],l=[];o.push(l);for(let d=0;d=7){let _=parseFloat(m[4]),p=parseFloat(m[5]),g=parseFloat(m[6]);this._colors.push(new lt(_>1?_/255:_,p>1?p/255:p,g>1?g/255:g,m.length===7||m[7]===void 0?1:parseFloat(m[7])))}else this._colors.push(this._grayColor)}else if((m=n.NormalPattern.exec(u))!==null)this._normals.push(new b(parseFloat(m[1]),parseFloat(m[2]),parseFloat(m[3])));else if((m=n.UVPattern.exec(u))!==null)this._uvs.push(new Ne(parseFloat(m[1])*this._loadingOptions.UVScaling.x,parseFloat(m[2])*this._loadingOptions.UVScaling.y));else if((m=n.FacePattern3.exec(u))!==null)this._setDataForCurrentFaceWithPattern3(m[1].trim().split(" "),1);else if((m=n.FacePattern4.exec(u))!==null)this._setDataForCurrentFaceWithPattern4(m[1].trim().split(" "),1);else if((m=n.FacePattern5.exec(u))!==null)this._setDataForCurrentFaceWithPattern5(m[1].trim().split(" "),1);else if((m=n.FacePattern2.exec(u))!==null)this._setDataForCurrentFaceWithPattern2(m[1].trim().split(" "),1);else if((m=n.FacePattern1.exec(u))!==null)this._setDataForCurrentFaceWithPattern1(m[1].trim().split(" "),1);else if((m=n.LinePattern1.exec(u))!==null)this._setDataForCurrentFaceWithPattern1(m[1].trim().split(" "),0),this._hasLineData=!0;else if((m=n.LinePattern2.exec(u))!==null)this._setDataForCurrentFaceWithPattern2(m[1].trim().split(" "),0),this._hasLineData=!0;else if(m=n._GetZbrushMRGB(u,!this._loadingOptions.importVertexColors))for(let _ of m)this._extColors.push(_);else if((m=n.LinePattern3.exec(u))!==null)this._setDataForCurrentFaceWithPattern3(m[1].trim().split(" "),0),this._hasLineData=!0;else if(n.GroupDescriptor.test(u)||n.ObjectDescriptor.test(u)){let _={name:u.substring(2).trim(),indices:null,positions:null,normals:null,uvs:null,colors:null,materialName:this._materialNameFromObj,isObject:n.ObjectDescriptor.test(u)};this._addPreviousObjMesh(),this._meshesFromObj.push(_),this._hasMeshes=!0,this._isFirstMaterial=!0,this._increment=1}else if(n.UseMtlDescriptor.test(u)){if(this._materialNameFromObj=u.substring(7).trim(),!this._isFirstMaterial||!this._hasMeshes){this._addPreviousObjMesh();let _={name:(this._objMeshName||"mesh")+"_mm"+this._increment.toString(),indices:null,positions:null,normals:null,uvs:null,colors:null,materialName:this._materialNameFromObj,isObject:!1};this._increment++,this._meshesFromObj.push(_),this._hasMeshes=!0}this._hasMeshes&&this._isFirstMaterial&&(this._meshesFromObj[this._meshesFromObj.length-1].materialName=this._materialNameFromObj,this._isFirstMaterial=!1)}else n.MtlLibGroupDescriptor.test(u)?s(u.substring(7).trim()):n.SmoothDescriptor.test(u)||$.Log("Unhandled expression at line : "+u)}if(this._hasMeshes&&(this._handledMesh=this._meshesFromObj[this._meshesFromObj.length-1],this._loadingOptions.useLegacyBehavior&&this._indicesForBabylon.reverse(),this._unwrapData(),this._handledMesh.indices=this._indicesForBabylon,this._handledMesh.positions=this._unwrappedPositionsForBabylon,this._unwrappedNormalsForBabylon.length&&(this._handledMesh.normals=this._unwrappedNormalsForBabylon),this._unwrappedUVForBabylon.length&&(this._handledMesh.uvs=this._unwrappedUVForBabylon),this._unwrappedColorsForBabylon.length&&(this._handledMesh.colors=this._unwrappedColorsForBabylon),this._handledMesh.hasLines=this._hasLineData),!this._hasMeshes){let d=null;if(this._indicesForBabylon.length)this._loadingOptions.useLegacyBehavior&&this._indicesForBabylon.reverse(),this._unwrapData();else{for(let u of this._positions)this._unwrappedPositionsForBabylon.push(u.x,u.y,u.z);if(this._normals.length)for(let u of this._normals)this._unwrappedNormalsForBabylon.push(u.x,u.y,u.z);if(this._uvs.length)for(let u of this._uvs)this._unwrappedUVForBabylon.push(u.x,u.y);if(this._extColors.length)for(let u of this._extColors)this._unwrappedColorsForBabylon.push(u.r,u.g,u.b,u.a);else if(this._colors.length)for(let u of this._colors)this._unwrappedColorsForBabylon.push(u.r,u.g,u.b,u.a);this._materialNameFromObj||(d=new He(cn.RandomId(),i),d.pointsCloud=!0,this._materialNameFromObj=d.name,this._normals.length||(d.disableLighting=!0,d.emissiveColor=Te.White()))}this._meshesFromObj.push({name:cn.RandomId(),indices:this._indicesForBabylon,positions:this._unwrappedPositionsForBabylon,colors:this._unwrappedColorsForBabylon,normals:this._unwrappedNormalsForBabylon,uvs:this._unwrappedUVForBabylon,materialName:this._materialNameFromObj,directMaterial:d,isObject:!0,hasLines:this._hasLineData})}for(let d=0;d=0;--_)if(this._meshesFromObj[_].isObject&&this._meshesFromObj[_]._babylonMesh){u.parent=this._meshesFromObj[_]._babylonMesh;break}}if(this._materialToUse.push(this._meshesFromObj[d].materialName),this._handledMesh.hasLines&&((f=u._internalMetadata)!=null||(u._internalMetadata={}),u._internalMetadata._isLine=!0),((h=this._handledMesh.positions)==null?void 0:h.length)===0){this._babylonMeshesArray.push(u);continue}let m=new Ie;if(m.indices=this._handledMesh.indices,m.positions=this._handledMesh.positions,this._loadingOptions.computeNormals||!this._handledMesh.normals){let _=new Array;Ie.ComputeNormals(this._handledMesh.positions,this._handledMesh.indices,_),m.normals=_}else m.normals=this._handledMesh.normals;this._handledMesh.uvs&&(m.uvs=this._handledMesh.uvs),this._handledMesh.colors&&(m.colors=this._handledMesh.colors),m.applyToMesh(u),this._loadingOptions.invertY&&(u.scaling.y*=-1),this._loadingOptions.optimizeNormals&&this._optimizeNormals(u),this._babylonMeshesArray.push(u),this._handledMesh.directMaterial&&(u.material=this._handledMesh.directMaterial)}}};zr.ObjectDescriptor=/^o/;zr.GroupDescriptor=/^g/;zr.MtlLibGroupDescriptor=/^mtllib /;zr.UseMtlDescriptor=/^usemtl /;zr.SmoothDescriptor=/^s /;zr.VertexPattern=/^v(\s+[\d|.|+|\-|e|E]+){3,7}/;zr.NormalPattern=/^vn(\s+[\d|.|+|\-|e|E]+)( +[\d|.|+|\-|e|E]+)( +[\d|.|+|\-|e|E]+)/;zr.UVPattern=/^vt(\s+[\d|.|+|\-|e|E]+)( +[\d|.|+|\-|e|E]+)/;zr.FacePattern1=/^f\s+(([\d]{1,}[\s]?){3,})+/;zr.FacePattern2=/^f\s+((([\d]{1,}\/[\d]{1,}[\s]?){3,})+)/;zr.FacePattern3=/^f\s+((([\d]{1,}\/[\d]{1,}\/[\d]{1,}[\s]?){3,})+)/;zr.FacePattern4=/^f\s+((([\d]{1,}\/\/[\d]{1,}[\s]?){3,})+)/;zr.FacePattern5=/^f\s+(((-[\d]{1,}\/-[\d]{1,}\/-[\d]{1,}[\s]?){3,})+)/;zr.LinePattern1=/^l\s+(([\d]{1,}[\s]?){2,})+/;zr.LinePattern2=/^l\s+((([\d]{1,}\/[\d]{1,}[\s]?){2,})+)/;zr.LinePattern3=/^l\s+((([\d]{1,}\/[\d]{1,}\/[\d]{1,}[\s]?){2,})+)/});var y7={};et(y7,{OBJFileLoader:()=>Ks});var Ks,SL=C(()=>{Ve();Ci();Nm();dg();I7();M7();C7();mc();Ks=class n{static get INVERT_TEXTURE_Y(){return nd.INVERT_TEXTURE_Y}static set INVERT_TEXTURE_Y(e){nd.INVERT_TEXTURE_Y=e}constructor(e){this.name=Xx.name,this.extensions=Xx.extensions,this._assetContainer=null,this._loadingOptions={...n._DefaultLoadingOptions,...e!=null?e:{}}}static get _DefaultLoadingOptions(){return{computeNormals:n.COMPUTE_NORMALS,optimizeNormals:n.OPTIMIZE_NORMALS,importVertexColors:n.IMPORT_VERTEX_COLORS,invertY:n.INVERT_Y,invertTextureY:n.INVERT_TEXTURE_Y,UVScaling:n.UV_SCALING,materialLoadingFailsSilently:n.MATERIAL_LOADING_FAILS_SILENTLY,optimizeWithUV:n.OPTIMIZE_WITH_UV,skipMaterials:n.SKIP_MATERIALS,useLegacyBehavior:n.USE_LEGACY_BEHAVIOR}}_loadMTL(e,t,i,r){let s=t+e;he.LoadFile(s,i,void 0,void 0,!1,(a,o)=>{r(s,o)})}createPlugin(e){return new n(e[Xx.name])}canDirectLoad(){return!1}importMeshAsync(e,t,i,r){return this._parseSolidAsync(e,t,i,r).then(s=>({meshes:s,particleSystems:[],skeletons:[],animationGroups:[],transformNodes:[],geometries:[],lights:[],spriteManagers:[]}))}loadAsync(e,t,i){return this.importMeshAsync(null,e,t,i).then(()=>{})}loadAssetContainerAsync(e,t,i){let r=new al(e);return this._assetContainer=r,this.importMeshAsync(null,e,t,i).then(s=>(s.meshes.forEach(a=>r.meshes.push(a)),s.meshes.forEach(a=>{let o=a.material;o&&r.materials.indexOf(o)==-1&&(r.materials.push(o),o.getActiveTextures().forEach(c=>{r.textures.indexOf(c)==-1&&r.textures.push(c)}))}),this._assetContainer=null,r)).catch(s=>{throw this._assetContainer=null,s})}_parseSolidAsync(e,t,i,r){let s="",a=new nd,o=[],l=[];i=i.replace(/#.*$/gm,"").trim(),new zr(o,l,this._loadingOptions).parse(e,i,t,this._assetContainer,h=>{s=h});let f=[];return s!==""&&!this._loadingOptions.skipMaterials&&f.push(new Promise((h,d)=>{this._loadMTL(s,r,u=>{try{a.parseMTL(t,u,r,this._assetContainer);for(let m=0;m-1;)p.push(g),_=g+1;if(g===-1&&p.length===0)a.materials[m].dispose();else for(let v=0;v{he.Warn(`Error downloading MTL file: '${s}'`),this._loadingOptions.materialLoadingFailsSilently?h():d(m)})})),Promise.all(f).then(()=>{let h=d=>{var u,m;return!!((m=(u=d._internalMetadata)==null?void 0:u._isLine)!=null&&m)};return l.forEach(d=>{var u,m;if(h(d)){let _=(u=d.material)!=null?u:new He(d.name+"_line",t);_.getBindedMeshes().filter(g=>!h(g)).length>0&&(_=(m=_.clone(_.name+"_line"))!=null?m:_),_.wireframe=!0,d.material=_,d._internalMetadata&&(d._internalMetadata._isLine=void 0)}}),l})}};Ks.OPTIMIZE_WITH_UV=!0;Ks.INVERT_Y=!1;Ks.IMPORT_VERTEX_COLORS=!1;Ks.COMPUTE_NORMALS=!1;Ks.OPTIMIZE_NORMALS=!1;Ks.UV_SCALING=new Ne(1,1);Ks.SKIP_MATERIALS=!1;Ks.MATERIAL_LOADING_FAILS_SILENTLY=!0;Ks.USE_LEGACY_BEHAVIOR=!1;wf(new Ks)});function Jfe(n){let e=n.trim();return/^https?:\/\//i.test(e)||/^wss?:\/\//i.test(e)||/^\/\//.test(e)}function TL(n,e){if(Jfe(n))throw new Error(`[AI3D] Babylon ${e} is limited to local vault resources. Refused remote URL: ${n}`);return n}function Yx(n){throw new Error(`[AI3D] Babylon script loading is disabled in this plugin build. Refused script URL: ${n}`)}function D7(){if(P7)return;let n=i=>TL(i,"asset loading"),e=i=>TL(i,"script loading"),t=()=>-1;he.PreprocessUrl=n,he.ScriptPreprocessUrl=e,he.DefaultRetryStrategy=t,he.LoadScript=(i,r,s)=>{try{e(i),Yx(i)}catch(a){s==null||s(a instanceof Error?a.message:String(a),a);return}r==null||r()},he.LoadScriptAsync=async i=>{e(i),Yx(i)},he.LoadBabylonScript=(i,r,s)=>{try{Yx(i)}catch(a){s==null||s(a instanceof Error?a.message:String(a),a);return}r()},he.LoadBabylonScriptAsync=async i=>{Yx(i)},Bi.PreprocessUrl=n,Bi.ScriptPreprocessUrl=e,Bi.DefaultRetryStrategy=t,Rr.CustomRequestModifiers.push((i,r)=>TL(r,"request")),P7=!0}var P7,L7=C(()=>{"use strict";Fl();Ci();Ch();P7=!1});function Kx(n,e){if(e.byteLength<84)throw new Error(`STL buffer too small: ${e.byteLength} bytes (need 84+)`);if(e.byteLength>=6){let _=new TextDecoder().decode(new Uint8Array(e,0,6));if(_==="solid "||_===`solid -`){let p=new TextDecoder().decode(new Uint8Array(e,0,Math.min(e.byteLength,800)));if(p.includes("facet")||p.includes("endsolid"))throw new Error("ASCII STL detected \u2014 only binary STL is supported. Convert to binary STL first.")}}let t=new DataView(e),i=t.getUint32(80,!0);if(i===0)throw new Error("STL file contains 0 triangles");let r=84+i*50;if(e.byteLength>0&31)/31,N=(v>>5&31)/31,w=(v>>10&31)/31,U=_*12;l[U+0]=V,l[U+1]=N,l[U+2]=w,l[U+3]=1,l[U+4]=V,l[U+5]=N,l[U+6]=w,l[U+7]=1,l[U+8]=V,l[U+9]=N,l[U+10]=w,l[U+11]=1}let x=a[p+3]-a[p+0],A=a[p+4]-a[p+1],E=a[p+5]-a[p+2],T=a[p+6]-a[p+0],R=a[p+7]-a[p+1],I=a[p+8]-a[p+2],y=A*I-E*R,M=E*T-x*I,D=x*R-A*T,O=Math.sqrt(y*y+M*M+D*D);O>1e-8?(y/=O,M/=O,D/=O):(y=0,M=0,D=1,f++),o[p+0]=y,o[p+1]=M,o[p+2]=D,o[p+3]=y,o[p+4]=M,o[p+5]=D,o[p+6]=y,o[p+7]=M,o[p+8]=D,c[g+0]=p/3+0,c[g+1]=p/3+1,c[g+2]=p/3+2}f>0&&console.warn(`[AI3D STL] ${f} degenerate triangles with zero-area normals`);let d=new Ie;d.positions=a,d.normals=o,d.indices=c,l&&(d.colors=l);let u=new q("stl-model",n);d.applyToMesh(u);let m=new He("stl-mat",n);return m.backFaceCulling=!1,m.specularColor=new Te(.3,.3,.3),m.specularPower=32,l?(m.diffuseColor=new Te(1,1,1),m.emissiveColor=new Te(.05,.05,.05),m.vertexColorEnabled=!0):(m.diffuseColor=new Te(.85,.85,.85),m.emissiveColor=new Te(.1,.1,.1)),u.material=m,u}function O7(n,e){return Kx(n,e)}function N7(n){n($fe)}var $fe,AL=C(()=>{"use strict";Di();dg();lr();mc();Ht();$fe={name:"stl",extensions:".stl",importMeshAsync(n,e,t){return Promise.resolve().then(()=>({meshes:[Kx(e,t)],particleSystems:[],skeletons:[],animationGroups:[],transformNodes:[],geometries:[],lights:[],spriteManagers:[]}))},loadAsync(n,e){return Promise.resolve().then(()=>{Kx(n,e)})},loadAssetContainerAsync(n,e){return Promise.resolve().then(()=>{let t=Kx(n,e),i=new al(n);return i.meshes.push(t),t.material&&i.materials.push(t.material),i})},canDirectLoad(){return!1},rewriteRootURL(n){return n}}});function ehe(n){let e=n.split(` -`),t=[],i="binary_little_endian",r=null;for(let s of e){let a=s.trim();if(a==="end_header")break;if(a==="ply"||a===""||a.startsWith("comment"))continue;let o=a.split(/\s+/),l=o[0];l==="format"?i=o[1]:l==="element"?(r={name:o[1],count:parseInt(o[2],10),properties:[]},t.push(r)):l==="property"&&r&&(o[1]==="list"?r.properties.push({name:o[4],type:"list",isList:!0,countType:o[2],itemType:o[3]}):r.properties.push({name:o[2],type:o[1],isList:!1}))}return{format:i,elements:t}}function zm(n){switch(n){case"uchar":case"uint8":return 1;case"char":case"int8":return 1;case"ushort":case"uint16":return 2;case"short":case"int16":return 2;case"uint":case"uint32":return 4;case"int":case"int32":return 4;case"float":case"float32":return 4;case"double":case"float64":return 8;default:return 4}}function jx(n,e,t,i){switch(t){case"uchar":case"uint8":return n.getUint8(e);case"char":case"int8":return n.getInt8(e);case"ushort":case"uint16":return n.getUint16(e,i);case"short":case"int16":return n.getInt16(e,i);case"uint":case"uint32":return n.getUint32(e,i);case"int":case"int32":return n.getInt32(e,i);case"float":case"float32":return n.getFloat32(e,i);case"double":case"float64":return n.getFloat64(e,i);default:return 0}}function the(n,e,t,i){let r=i,s=new DataView(n),a=[],o=[],l=[],c=e.elements.find(h=>h.name==="vertex"),f=e.elements.find(h=>h.name==="face");if(c){let h=c.properties.some(u=>u.name==="x"),d=c.properties.some(u=>u.name==="red"||u.name==="r");for(let u=0;ud.name==="vertex"),c=e.elements.find(d=>d.name==="face"),f=0;if(l){let d=l.properties.some(_=>_.name==="x"),u=l.properties.some(_=>_.name==="red"||_.name==="r"),m=l.properties.filter(_=>!_.isList);for(let _=0;_0){c.indices=o.indices;let d=new Array(l.length).fill(0),u=o.indices,m=l.length-3;for(let _=0;_m||g>m||v>m)continue;let x=l[p],A=l[p+1],E=l[p+2],T=l[g]-x,R=l[g+1]-A,I=l[g+2]-E,y=l[v]-x,M=l[v+1]-A,D=l[v+2]-E,O=R*D-I*M,V=I*y-T*D,N=T*M-R*y;d[p]+=O,d[p+1]+=V,d[p+2]+=N,d[g]+=O,d[g+1]+=V,d[g+2]+=N,d[v]+=O,d[v+1]+=V,d[v+2]+=N}for(let _=0;_0&&(d[_]/=p,d[_+1]/=p,d[_+2]/=p)}c.normals=d}else{let d=o.positions.length/3,u=[];for(let m=0;m=3&&u.push(0,1,2),c.indices=u}let f=new q("ply-model",n);c.applyToMesh(f);let h=new He("ply-mat",n);return h.backFaceCulling=!1,o.colors.length>0?(c.colors=o.colors,c.applyToMesh(f),h.diffuseColor=new Te(1,1,1),h.vertexColorEnabled=!0):h.diffuseColor=new Te(.7,.7,.7),f.material=h,f}function F7(n,e){return qx(n,e)}function w7(n){n(rhe)}var rhe,xL=C(()=>{"use strict";Di();dg();lr();mc();Ht();rhe={name:"ply",extensions:".ply",importMeshAsync(n,e,t){return Promise.resolve().then(()=>({meshes:[qx(e,t)],particleSystems:[],skeletons:[],animationGroups:[],transformNodes:[],geometries:[],lights:[],spriteManagers:[]}))},loadAsync(n,e){return Promise.resolve().then(()=>{qx(n,e)})},loadAssetContainerAsync(n,e){return Promise.resolve().then(()=>{let t=qx(n,e),i=new al(n);return i.meshes.push(t),t.material&&i.materials.push(t.material),i})},canDirectLoad(){return!1},rewriteRootURL(n){return n}}});async function Tg(){B7||(D7(),N7(wf),w7(wf),B7=!0)}var B7,Ag=C(()=>{"use strict";jP();b7();SL();Nm();L7();AL();xL();B7=!1});function Zx(n){return Math.floor(n.getTotalIndices()/3)}function Xm(n){return n.getTotalVertices()}function sd(n,e=[]){let t=[n,...e,...n.getChildMeshes(!0)],i=new Set;return t.filter(r=>!r||i.has(r)||r.isDisposed()?!1:(i.add(r),Xm(r)>0||r.getTotalIndices()>0))}function U7(n){let e=Array.from(n),t=new Set(e);return e.filter(i=>{let r=i.parent;return!r||!t.has(r)})}function RL(n){n.computeWorldMatrix(!0);let e=n.getBoundingInfo().boundingBox;return i_(Zt(e.minimumWorld),Zt(e.maximumWorld))}function Qx(n){let e=null;for(let t of n)!t||t.isDisposed()||(e=t1(e,RL(t)));return e}function Jx(n,e=[]){var t;return(t=Qx(sd(n,e)))!=null?t:RL(n)}function $x(n,e,t,i={}){return aS({rootName:n,boundingSize:En(e),meshes:t.map(r=>({triangleCount:Zx(r),vertexCount:Xm(r),materialKeys:r.material?[r.material.name]:[]})),splatCount:i.splatCount,resourceWarnings:i.resourceWarnings})}function V7(n){var t,i;let e=RL(n);return oS({name:n.name||`mesh-${n.uniqueId}`,triangleCount:Zx(n),vertexCount:Xm(n),materialName:(i=(t=n.material)==null?void 0:t.name)!=null?i:null,boundingSize:En(e),center:Sn(e)})}var eR=C(()=>{"use strict";Kc();ys();lS()});function Gf(n){return Yr(n)}function G7(n,e,t,i=[]){pS(new tR(n,i),e,t)}function bL(n,e=[]){_S(new tR(n,e))}var tR,k7=C(()=>{"use strict";Ve();Kc();ys();p0();eR();tR=class{constructor(e,t=[]){this.rootMesh=e,this.loadedMeshes=t}getParts(){return sd(this.rootMesh,this.loadedMeshes)}getRootCenter(){return Sn(Jx(this.rootMesh,this.loadedMeshes))}getPartPosition(e){return Zt(e.position)}getPartCenter(e){return Zt(e.getBoundingInfo().boundingBox.centerWorld)}setPartPosition(e,t){e.position=new b(t.x,t.y,t.z)}getPartState(e){let t=e.metadata;return t!=null&&t._previewExplodeState?{originalPosition:Gf(t._previewExplodeState.originalPosition),originalCenter:Gf(t._previewExplodeState.originalCenter)}:t!=null&&t._originalPos&&(t!=null&&t._originalCenter)?{originalPosition:Gf(t._originalPos),originalCenter:Gf(t._originalCenter)}:null}setPartState(e,t){(!e.metadata||typeof e.metadata!="object")&&(e.metadata={});let i=e.metadata;i._previewExplodeState={originalPosition:Gf(t.originalPosition),originalCenter:Gf(t.originalCenter)},i._originalPos=Gf(t.originalPosition),i._originalCenter=Gf(t.originalCenter)}}});var iR={};et(iR,{glowBlurPostProcessPixelShaderWGSL:()=>nhe});var IL,W7,nhe,rR=C(()=>{k();IL="glowBlurPostProcessPixelShader",W7=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_2d;uniform screenSize: vec2f;uniform direction: vec2f;uniform blurWidth: f32;fn getLuminance(color: vec3f)->f32 +`;T.ShadersStore[IL]||(T.ShadersStore[IL]=C7);_he={name:IL,shader:C7}});var Km,ML,Jx,CL,_r,D7=C(()=>{kt();Ut();Pt();to();Yx();ps();Ge();Ui();C8();AA();zt();xA();D_();Pn();ya();Q_();Ma();iC();Rf();y8();P8();D8();L8();O8();Xy();il();$_();yn();RA();bA();IA();MA();Km={effect:null,subMesh:null},ML=class extends Lm(Dm(Sr)){},Jx=class extends ym(ML){constructor(e){super(e),this.PBR=!0,this.NUM_SAMPLES="0",this.REALTIME_FILTERING=!1,this.IBL_CDF_FILTERING=!1,this.ALBEDO=!1,this.GAMMAALBEDO=!1,this.ALBEDODIRECTUV=0,this.VERTEXCOLOR=!1,this.BASE_WEIGHT=!1,this.BASE_WEIGHTDIRECTUV=0,this.BASE_DIFFUSE_ROUGHNESS=!1,this.BASE_DIFFUSE_ROUGHNESSDIRECTUV=0,this.BAKED_VERTEX_ANIMATION_TEXTURE=!1,this.AMBIENT=!1,this.AMBIENTDIRECTUV=0,this.AMBIENTINGRAYSCALE=!1,this.OPACITY=!1,this.VERTEXALPHA=!1,this.OPACITYDIRECTUV=0,this.OPACITYRGB=!1,this.ALPHATEST=!1,this.DEPTHPREPASS=!1,this.ALPHABLEND=!1,this.ALPHAFROMALBEDO=!1,this.ALPHATESTVALUE="0.5",this.SPECULAROVERALPHA=!1,this.RADIANCEOVERALPHA=!1,this.ALPHAFRESNEL=!1,this.LINEARALPHAFRESNEL=!1,this.PREMULTIPLYALPHA=!1,this.EMISSIVE=!1,this.EMISSIVEDIRECTUV=0,this.GAMMAEMISSIVE=!1,this.REFLECTIVITY=!1,this.REFLECTIVITY_GAMMA=!1,this.REFLECTIVITYDIRECTUV=0,this.SPECULARTERM=!1,this.MICROSURFACEFROMREFLECTIVITYMAP=!1,this.MICROSURFACEAUTOMATIC=!1,this.LODBASEDMICROSFURACE=!1,this.MICROSURFACEMAP=!1,this.MICROSURFACEMAPDIRECTUV=0,this.METALLICWORKFLOW=!1,this.ROUGHNESSSTOREINMETALMAPALPHA=!1,this.ROUGHNESSSTOREINMETALMAPGREEN=!1,this.METALLNESSSTOREINMETALMAPBLUE=!1,this.AOSTOREINMETALMAPRED=!1,this.METALLIC_REFLECTANCE=!1,this.METALLIC_REFLECTANCE_GAMMA=!1,this.METALLIC_REFLECTANCEDIRECTUV=0,this.METALLIC_REFLECTANCE_USE_ALPHA_ONLY=!1,this.REFLECTANCE=!1,this.REFLECTANCE_GAMMA=!1,this.REFLECTANCEDIRECTUV=0,this.ENVIRONMENTBRDF=!1,this.ENVIRONMENTBRDF_RGBD=!1,this.NORMAL=!1,this.TANGENT=!1,this.BUMP=!1,this.BUMPDIRECTUV=0,this.OBJECTSPACE_NORMALMAP=!1,this.PARALLAX=!1,this.PARALLAX_RHS=!1,this.PARALLAXOCCLUSION=!1,this.NORMALXYSCALE=!0,this.LIGHTMAP=!1,this.LIGHTMAPDIRECTUV=0,this.USELIGHTMAPASSHADOWMAP=!1,this.GAMMALIGHTMAP=!1,this.RGBDLIGHTMAP=!1,this.REFLECTION=!1,this.REFLECTIONMAP_3D=!1,this.REFLECTIONMAP_SPHERICAL=!1,this.REFLECTIONMAP_PLANAR=!1,this.REFLECTIONMAP_CUBIC=!1,this.USE_LOCAL_REFLECTIONMAP_CUBIC=!1,this.REFLECTIONMAP_PROJECTION=!1,this.REFLECTIONMAP_SKYBOX=!1,this.REFLECTIONMAP_EXPLICIT=!1,this.REFLECTIONMAP_EQUIRECTANGULAR=!1,this.REFLECTIONMAP_EQUIRECTANGULAR_FIXED=!1,this.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED=!1,this.INVERTCUBICMAP=!1,this.USESPHERICALFROMREFLECTIONMAP=!1,this.USEIRRADIANCEMAP=!1,this.USE_IRRADIANCE_DOMINANT_DIRECTION=!1,this.USESPHERICALINVERTEX=!1,this.REFLECTIONMAP_OPPOSITEZ=!1,this.LODINREFLECTIONALPHA=!1,this.GAMMAREFLECTION=!1,this.RGBDREFLECTION=!1,this.LINEARSPECULARREFLECTION=!1,this.RADIANCEOCCLUSION=!1,this.HORIZONOCCLUSION=!1,this.INSTANCES=!1,this.THIN_INSTANCES=!1,this.INSTANCESCOLOR=!1,this.NUM_BONE_INFLUENCERS=0,this.BonesPerMesh=0,this.BONETEXTURE=!1,this.BONES_VELOCITY_ENABLED=!1,this.NONUNIFORMSCALING=!1,this.MORPHTARGETS=!1,this.MORPHTARGETS_POSITION=!1,this.MORPHTARGETS_NORMAL=!1,this.MORPHTARGETS_TANGENT=!1,this.MORPHTARGETS_UV=!1,this.MORPHTARGETS_UV2=!1,this.MORPHTARGETS_COLOR=!1,this.MORPHTARGETTEXTURE_HASPOSITIONS=!1,this.MORPHTARGETTEXTURE_HASNORMALS=!1,this.MORPHTARGETTEXTURE_HASTANGENTS=!1,this.MORPHTARGETTEXTURE_HASUVS=!1,this.MORPHTARGETTEXTURE_HASUV2S=!1,this.MORPHTARGETTEXTURE_HASCOLORS=!1,this.NUM_MORPH_INFLUENCERS=0,this.MORPHTARGETS_TEXTURE=!1,this.MULTIVIEW=!1,this.ORDER_INDEPENDENT_TRANSPARENCY=!1,this.ORDER_INDEPENDENT_TRANSPARENCY_16BITS=!1,this.USEPHYSICALLIGHTFALLOFF=!1,this.USEGLTFLIGHTFALLOFF=!1,this.TWOSIDEDLIGHTING=!1,this.MIRRORED=!1,this.SHADOWFLOAT=!1,this.CLIPPLANE=!1,this.CLIPPLANE2=!1,this.CLIPPLANE3=!1,this.CLIPPLANE4=!1,this.CLIPPLANE5=!1,this.CLIPPLANE6=!1,this.POINTSIZE=!1,this.FOG=!1,this.LOGARITHMICDEPTH=!1,this.CAMERA_ORTHOGRAPHIC=!1,this.CAMERA_PERSPECTIVE=!1,this.AREALIGHTSUPPORTED=!0,this.FORCENORMALFORWARD=!1,this.SPECULARAA=!1,this.UNLIT=!1,this.DECAL_AFTER_DETAIL=!1,this.DEBUGMODE=0,this.USE_VERTEX_PULLING=!1,this.VERTEX_PULLING_USE_INDEX_BUFFER=!1,this.VERTEX_PULLING_INDEX_BUFFER_32BITS=!1,this.RIGHT_HANDED=!1,this.CLUSTLIGHT_SLICES=0,this.CLUSTLIGHT_BATCH=0,this.rebuild()}reset(){super.reset(),this.ALPHATESTVALUE="0.5",this.PBR=!0,this.NORMALXYSCALE=!0}},CL=class extends Om(al){},_r=class n extends CL{get realTimeFiltering(){return this._realTimeFiltering}set realTimeFiltering(e){this._realTimeFiltering=e,this.markAsDirty(1)}get realTimeFilteringQuality(){return this._realTimeFilteringQuality}set realTimeFilteringQuality(e){this._realTimeFilteringQuality=e,this.markAsDirty(1)}get canRenderToMRT(){return!0}constructor(e,t,i=!1){super(e,t,void 0,i||n.ForceGLSL),this._directIntensity=1,this._emissiveIntensity=1,this._environmentIntensity=1,this._specularIntensity=1,this._lightingInfos=new Mi(this._directIntensity,this._emissiveIntensity,this._environmentIntensity,this._specularIntensity),this._disableBumpMap=!1,this._albedoTexture=null,this._baseWeightTexture=null,this._baseDiffuseRoughnessTexture=null,this._ambientTexture=null,this._ambientTextureStrength=1,this._ambientTextureImpactOnAnalyticalLights=n.DEFAULT_AO_ON_ANALYTICAL_LIGHTS,this._opacityTexture=null,this._reflectionTexture=null,this._emissiveTexture=null,this._reflectivityTexture=null,this._metallicTexture=null,this._metallic=null,this._roughness=null,this._metallicF0Factor=1,this._metallicReflectanceColor=Te.White(),this._useOnlyMetallicFromMetallicReflectanceTexture=!1,this._metallicReflectanceTexture=null,this._reflectanceTexture=null,this._microSurfaceTexture=null,this._bumpTexture=null,this._lightmapTexture=null,this._ambientColor=new Te(0,0,0),this._albedoColor=new Te(1,1,1),this._baseWeight=1,this._baseDiffuseRoughness=null,this._reflectivityColor=new Te(1,1,1),this._reflectionColor=new Te(1,1,1),this._emissiveColor=new Te(0,0,0),this._microSurface=.9,this._useLightmapAsShadowmap=!1,this._useHorizonOcclusion=!0,this._useRadianceOcclusion=!0,this._useAlphaFromAlbedoTexture=!1,this._useSpecularOverAlpha=!0,this._useMicroSurfaceFromReflectivityMapAlpha=!1,this._useRoughnessFromMetallicTextureAlpha=!0,this._useRoughnessFromMetallicTextureGreen=!1,this._useMetallnessFromMetallicTextureBlue=!1,this._useAmbientOcclusionFromMetallicTextureRed=!1,this._useAmbientInGrayScale=!1,this._useAutoMicroSurfaceFromReflectivityMap=!1,this._lightFalloff=n.LIGHTFALLOFF_PHYSICAL,this._useRadianceOverAlpha=!0,this._useObjectSpaceNormalMap=!1,this._useParallax=!1,this._useParallaxOcclusion=!1,this._parallaxScaleBias=.05,this._disableLighting=!1,this._maxSimultaneousLights=4,this._invertNormalMapX=!1,this._invertNormalMapY=!1,this._twoSidedLighting=!1,this._alphaCutOff=.4,this._useAlphaFresnel=!1,this._useLinearAlphaFresnel=!1,this._environmentBRDFTexture=null,this._forceIrradianceInFragment=!1,this._realTimeFiltering=!1,this._realTimeFilteringQuality=8,this._forceNormalForward=!1,this._enableSpecularAntiAliasing=!1,this._renderTargets=new wi(16),this._globalAmbientColor=new Te(0,0,0),this._unlit=!1,this._applyDecalMapAfterDetailMap=!1,this._debugMode=0,this._shadersLoaded=!1,this._breakShaderLoadedCheck=!1,this._vertexPullingMetadata=null,this.debugMode=0,this.debugLimit=-1,this.debugFactor=1,this._cacheHasRenderTargetTextures=!1,this.brdf=new Ir(this),this.clearCoat=new tn(this),this.iridescence=new xs(this),this.anisotropy=new Ec(this),this.sheen=new Ks(this),this.subSurface=new Ai(this),this.detailMap=new Pa(this),this._attachImageProcessingConfiguration(null),this.getRenderTargetTextures=()=>(this._renderTargets.reset(),le.ReflectionTextureEnabled&&this._reflectionTexture&&this._reflectionTexture.isRenderTarget&&this._renderTargets.push(this._reflectionTexture),this._eventInfo.renderTargets=this._renderTargets,this._callbackPluginEventFillRenderTargetTextures(this._eventInfo),this._renderTargets),this._environmentBRDFTexture=Xx(this.getScene()),this.prePassConfiguration=new Ts}get hasRenderTargetTextures(){return le.ReflectionTextureEnabled&&this._reflectionTexture&&this._reflectionTexture.isRenderTarget?!0:this._cacheHasRenderTargetTextures}get isPrePassCapable(){return!this.disableDepthWrite}getClassName(){return"PBRBaseMaterial"}get _disableAlphaBlending(){var e;return this._transparencyMode===n.PBRMATERIAL_OPAQUE||this._transparencyMode===n.PBRMATERIAL_ALPHATEST||((e=this.subSurface)==null?void 0:e.disableAlphaBlending)}needAlphaBlending(){return this._hasTransparencyMode?this._transparencyModeIsBlend:this._disableAlphaBlending?!1:this.alpha<1||this._opacityTexture!=null||this._shouldUseAlphaFromAlbedoTexture()}needAlphaTesting(){var e;return this._hasTransparencyMode?this._transparencyModeIsTest:(e=this.subSurface)!=null&&e.disableAlphaBlending?!1:this._hasAlphaChannel()&&(this._transparencyMode==null||this._transparencyMode===n.PBRMATERIAL_ALPHATEST)}_shouldUseAlphaFromAlbedoTexture(){return this._albedoTexture!=null&&this._albedoTexture.hasAlpha&&this._useAlphaFromAlbedoTexture&&this._transparencyMode!==n.PBRMATERIAL_OPAQUE}_hasAlphaChannel(){return this._albedoTexture!=null&&this._albedoTexture.hasAlpha||this._opacityTexture!=null}getAlphaTestTexture(){return this._albedoTexture}isReadyForSubMesh(e,t,i){var d;this._uniformBufferLayoutBuilt||this.buildUniformLayout();let r=t._drawWrapper;if(r.effect&&this.isFrozen&&r._wasPreviouslyReady&&r._wasPreviouslyUsingInstances===i)return!0;t.materialDefines||(this._callbackPluginEventGeneric(4,this._eventInfo),t.materialDefines=new Jx(this._eventInfo.defineNames));let s=t.materialDefines;if(this._isReadyForSubMesh(t))return!0;let a=this.getScene(),o=a.getEngine();if(s._areTexturesDirty&&(this._eventInfo.hasRenderTargetTextures=!1,this._callbackPluginEventHasRenderTargetTextures(this._eventInfo),this._cacheHasRenderTargetTextures=this._eventInfo.hasRenderTargetTextures,a.texturesEnabled)){if(this._albedoTexture&&le.DiffuseTextureEnabled&&!this._albedoTexture.isReadyOrNotBlocking()||this._baseWeightTexture&&le.BaseWeightTextureEnabled&&!this._baseWeightTexture.isReadyOrNotBlocking()||this._baseDiffuseRoughnessTexture&&le.BaseDiffuseRoughnessTextureEnabled&&!this._baseDiffuseRoughnessTexture.isReadyOrNotBlocking()||this._ambientTexture&&le.AmbientTextureEnabled&&!this._ambientTexture.isReadyOrNotBlocking()||this._opacityTexture&&le.OpacityTextureEnabled&&!this._opacityTexture.isReadyOrNotBlocking())return!1;let u=this._getReflectionTexture();if(u&&le.ReflectionTextureEnabled){if(!u.isReadyOrNotBlocking())return!1;if(u.irradianceTexture){if(!u.irradianceTexture.isReadyOrNotBlocking())return!1}else if(!u.sphericalPolynomial&&((d=u.getInternalTexture())!=null&&d._sphericalPolynomialPromise))return!1}if(this._lightmapTexture&&le.LightmapTextureEnabled&&!this._lightmapTexture.isReadyOrNotBlocking()||this._emissiveTexture&&le.EmissiveTextureEnabled&&!this._emissiveTexture.isReadyOrNotBlocking())return!1;if(le.SpecularTextureEnabled){if(this._metallicTexture){if(!this._metallicTexture.isReadyOrNotBlocking())return!1}else if(this._reflectivityTexture&&!this._reflectivityTexture.isReadyOrNotBlocking())return!1;if(this._metallicReflectanceTexture&&!this._metallicReflectanceTexture.isReadyOrNotBlocking()||this._reflectanceTexture&&!this._reflectanceTexture.isReadyOrNotBlocking()||this._microSurfaceTexture&&!this._microSurfaceTexture.isReadyOrNotBlocking())return!1}if(o.getCaps().standardDerivatives&&this._bumpTexture&&le.BumpTextureEnabled&&!this._disableBumpMap&&!this._bumpTexture.isReady()||this._environmentBRDFTexture&&le.ReflectionTextureEnabled&&!this._environmentBRDFTexture.isReady())return!1}if(this._eventInfo.isReadyForSubMesh=!0,this._eventInfo.defines=s,this._eventInfo.subMesh=t,this._callbackPluginEventIsReadyForSubMesh(this._eventInfo),!this._eventInfo.isReadyForSubMesh||s._areImageProcessingDirty&&this._imageProcessingConfiguration&&!this._imageProcessingConfiguration.isReady())return!1;if(s.AREALIGHTUSED||s.CLUSTLIGHT_BATCH){for(let u=0;u{m.push(`vp_${R}_info`)}))}else this._vertexPullingMetadata=null;Wt&&(Wt.PrepareUniforms(m,i),Wt.PrepareSamplers(_,i)),vm({uniformsNames:m,uniformBuffersNames:p,samplers:_,defines:i,maxSimultaneousLights:this._maxSimultaneousLights,shaderLanguage:this._shaderLanguage});let v={};this.customShaderNameResolve&&(u=this.customShaderNameResolve(u,m,p,_,i,d,v));let x=i.toString(),A=c.createEffect(u,{attributes:d,uniformsNames:m,uniformBuffersNames:p,samplers:_,defines:x,fallbacks:f,onCompiled:r,onError:s,indexParameters:g,processFinalCode:v.processFinalCode,processCodeAfterIncludes:this._eventInfo.customCode,multiTarget:i.PREPASS,shaderLanguage:this._shaderLanguage,extraInitializationsAsync:this._shadersLoaded?void 0:async()=>{this.shaderLanguage===1?await Promise.all([Promise.resolve().then(()=>(B8(),F8)),Promise.resolve().then(()=>(C6(),M6))]):await Promise.all([Promise.resolve().then(()=>(N6(),O6)),Promise.resolve().then(()=>(P7(),y7))]),this._shadersLoaded=!0}},c);return this._eventInfo.customCode=void 0,A}_prepareDefines(e,t,i,r=null,s=null){let a=t.hasThinInstances,o=this.getScene(),l=o.getEngine();dm(o,e,i,!0,this._maxSimultaneousLights,this._disableLighting),i._needNormals=!0,pm(o,i);let c=this.needAlphaBlendingForMesh(e)&&this.getScene().useOrderIndependentTransparency;if(gm(o,i,this.canRenderToMRT&&!c),_m(o,i,c),Nn.PrepareDefines(l.currentRenderPassId,e,i),i.METALLICWORKFLOW=this.isMetallicWorkflow(),i._areTexturesDirty){i._needUVs=!1;for(let f=1;f<=6;++f)i["MAINUV"+f]=!1;if(o.texturesEnabled){i.ALBEDODIRECTUV=0,i.BASE_WEIGHTDIRECTUV=0,i.BASE_DIFFUSE_ROUGHNESSDIRECTUV=0,i.AMBIENTDIRECTUV=0,i.OPACITYDIRECTUV=0,i.EMISSIVEDIRECTUV=0,i.REFLECTIVITYDIRECTUV=0,i.MICROSURFACEMAPDIRECTUV=0,i.METALLIC_REFLECTANCEDIRECTUV=0,i.REFLECTANCEDIRECTUV=0,i.BUMPDIRECTUV=0,i.LIGHTMAPDIRECTUV=0,l.getCaps().textureLOD&&(i.LODBASEDMICROSFURACE=!0),this._albedoTexture&&le.DiffuseTextureEnabled?(ri(this._albedoTexture,i,"ALBEDO"),i.GAMMAALBEDO=this._albedoTexture.gammaSpace):i.ALBEDO=!1,this._baseWeightTexture&&le.BaseWeightTextureEnabled?ri(this._baseWeightTexture,i,"BASE_WEIGHT"):i.BASE_WEIGHT=!1,this._baseDiffuseRoughnessTexture&&le.BaseDiffuseRoughnessTextureEnabled?ri(this._baseDiffuseRoughnessTexture,i,"BASE_DIFFUSE_ROUGHNESS"):i.BASE_DIFFUSE_ROUGHNESS=!1,this._ambientTexture&&le.AmbientTextureEnabled?(ri(this._ambientTexture,i,"AMBIENT"),i.AMBIENTINGRAYSCALE=this._useAmbientInGrayScale):i.AMBIENT=!1,this._opacityTexture&&le.OpacityTextureEnabled?(ri(this._opacityTexture,i,"OPACITY"),i.OPACITYRGB=this._opacityTexture.getAlphaFromRGB):i.OPACITY=!1;let f=this._getReflectionTexture(),h=this._forceIrradianceInFragment||this.realTimeFiltering||this._twoSidedLighting||l.getCaps().maxVaryingVectors<=8||this._baseDiffuseRoughnessTexture!=null;_f(o,f,i,this.realTimeFiltering,this.realTimeFilteringQuality,!h),this._lightmapTexture&&le.LightmapTextureEnabled?(ri(this._lightmapTexture,i,"LIGHTMAP"),i.USELIGHTMAPASSHADOWMAP=this._useLightmapAsShadowmap,i.GAMMALIGHTMAP=this._lightmapTexture.gammaSpace,i.RGBDLIGHTMAP=this._lightmapTexture.isRGBD):i.LIGHTMAP=!1,this._emissiveTexture&&le.EmissiveTextureEnabled?(ri(this._emissiveTexture,i,"EMISSIVE"),i.GAMMAEMISSIVE=this._emissiveTexture.gammaSpace):i.EMISSIVE=!1,le.SpecularTextureEnabled?(this._metallicTexture?(ri(this._metallicTexture,i,"REFLECTIVITY"),i.ROUGHNESSSTOREINMETALMAPALPHA=this._useRoughnessFromMetallicTextureAlpha,i.ROUGHNESSSTOREINMETALMAPGREEN=!this._useRoughnessFromMetallicTextureAlpha&&this._useRoughnessFromMetallicTextureGreen,i.METALLNESSSTOREINMETALMAPBLUE=this._useMetallnessFromMetallicTextureBlue,i.AOSTOREINMETALMAPRED=this._useAmbientOcclusionFromMetallicTextureRed,i.REFLECTIVITY_GAMMA=!1):this._reflectivityTexture?(ri(this._reflectivityTexture,i,"REFLECTIVITY"),i.MICROSURFACEFROMREFLECTIVITYMAP=this._useMicroSurfaceFromReflectivityMapAlpha,i.MICROSURFACEAUTOMATIC=this._useAutoMicroSurfaceFromReflectivityMap,i.REFLECTIVITY_GAMMA=this._reflectivityTexture.gammaSpace):i.REFLECTIVITY=!1,this._metallicReflectanceTexture||this._reflectanceTexture?(i.METALLIC_REFLECTANCE_USE_ALPHA_ONLY=this._useOnlyMetallicFromMetallicReflectanceTexture,this._metallicReflectanceTexture?(ri(this._metallicReflectanceTexture,i,"METALLIC_REFLECTANCE"),i.METALLIC_REFLECTANCE_GAMMA=this._metallicReflectanceTexture.gammaSpace):i.METALLIC_REFLECTANCE=!1,this._reflectanceTexture&&(!this._metallicReflectanceTexture||this._metallicReflectanceTexture&&this._useOnlyMetallicFromMetallicReflectanceTexture)?(ri(this._reflectanceTexture,i,"REFLECTANCE"),i.REFLECTANCE_GAMMA=this._reflectanceTexture.gammaSpace):i.REFLECTANCE=!1):(i.METALLIC_REFLECTANCE=!1,i.REFLECTANCE=!1),this._microSurfaceTexture?ri(this._microSurfaceTexture,i,"MICROSURFACEMAP"):i.MICROSURFACEMAP=!1):(i.REFLECTIVITY=!1,i.MICROSURFACEMAP=!1),l.getCaps().standardDerivatives&&this._bumpTexture&&le.BumpTextureEnabled&&!this._disableBumpMap?(ri(this._bumpTexture,i,"BUMP"),this._useParallax&&this._albedoTexture&&le.DiffuseTextureEnabled?(i.PARALLAX=!0,i.PARALLAX_RHS=o.useRightHandedSystem,i.PARALLAXOCCLUSION=!!this._useParallaxOcclusion):i.PARALLAX=!1,i.OBJECTSPACE_NORMALMAP=this._useObjectSpaceNormalMap):(i.BUMP=!1,i.PARALLAX=!1,i.PARALLAX_RHS=!1,i.PARALLAXOCCLUSION=!1,i.OBJECTSPACE_NORMALMAP=!1),this._environmentBRDFTexture&&le.ReflectionTextureEnabled?(i.ENVIRONMENTBRDF=!0,i.ENVIRONMENTBRDF_RGBD=this._environmentBRDFTexture.isRGBD):(i.ENVIRONMENTBRDF=!1,i.ENVIRONMENTBRDF_RGBD=!1),this._shouldUseAlphaFromAlbedoTexture()?i.ALPHAFROMALBEDO=!0:i.ALPHAFROMALBEDO=!1}i.SPECULAROVERALPHA=this._useSpecularOverAlpha,this._lightFalloff===n.LIGHTFALLOFF_STANDARD?(i.USEPHYSICALLIGHTFALLOFF=!1,i.USEGLTFLIGHTFALLOFF=!1):this._lightFalloff===n.LIGHTFALLOFF_GLTF?(i.USEPHYSICALLIGHTFALLOFF=!1,i.USEGLTFLIGHTFALLOFF=!0):(i.USEPHYSICALLIGHTFALLOFF=!0,i.USEGLTFLIGHTFALLOFF=!1),i.RADIANCEOVERALPHA=this._useRadianceOverAlpha,!this.backFaceCulling&&this._twoSidedLighting?i.TWOSIDEDLIGHTING=!0:i.TWOSIDEDLIGHTING=!1,i.MIRRORED=!!o._mirroredCameraPosition,i.SPECULARAA=l.getCaps().standardDerivatives&&this._enableSpecularAntiAliasing}(i._areTexturesDirty||i._areMiscDirty)&&(i.ALPHATESTVALUE=`${this._alphaCutOff}${this._alphaCutOff%1===0?".":""}`,i.PREMULTIPLYALPHA=this.alphaMode===7||this.alphaMode===8,i.ALPHABLEND=this.needAlphaBlendingForMesh(e),i.ALPHAFRESNEL=this._useAlphaFresnel||this._useLinearAlphaFresnel,i.LINEARALPHAFRESNEL=this._useLinearAlphaFresnel),i._areImageProcessingDirty&&this._imageProcessingConfiguration&&this._imageProcessingConfiguration.prepareDefines(i),i.FORCENORMALFORWARD=this._forceNormalForward,i.RADIANCEOCCLUSION=this._useRadianceOcclusion,i.HORIZONOCCLUSION=this._useHorizonOcclusion,i._areMiscDirty&&(fm(e,o,this._useLogarithmicDepth,this.pointsCloud,this.fogEnabled,this.needAlphaTestingForMesh(e),i,this._applyDecalMapAfterDetailMap,this._useVertexPulling,t,this._isVertexOutputInvariant),i.UNLIT=this._unlit||(this.pointsCloud||this.wireframe)&&!e.isVerticesDataPresent(L.NormalKind),i.DEBUGMODE=this._debugMode),um(o,l,this,i,!!r,s,a),this._eventInfo.defines=i,this._eventInfo.mesh=e,this._callbackPluginEventPrepareDefinesBeforeAttributes(this._eventInfo),mm(e,i,!0,!0,!0,this._transparencyMode!==n.PBRMATERIAL_OPAQUE),this._callbackPluginEventPrepareDefines(this._eventInfo)}forceCompilation(e,t,i){let r={clipPlane:!1,useInstances:!1,...i};this._uniformBufferLayoutBuilt||this.buildUniformLayout(),this._callbackPluginEventGeneric(4,this._eventInfo),(()=>{if(this._breakShaderLoadedCheck)return;let a=new Jx(this._eventInfo.defineNames),o=this._prepareEffect(e,e,a,void 0,void 0,r.useInstances,r.clipPlane);this._onEffectCreatedObservable&&(Km.effect=o,Km.subMesh=null,this._onEffectCreatedObservable.notifyObservers(Km)),o.isReady()?t&&t(this):o.onCompileObservable.add(()=>{t&&t(this)})})()}buildUniformLayout(){let e=this._uniformBuffer;e.addUniform("vAlbedoInfos",2),e.addUniform("vBaseWeightInfos",2),e.addUniform("vBaseDiffuseRoughnessInfos",2),e.addUniform("vAmbientInfos",4),e.addUniform("vOpacityInfos",2),e.addUniform("vEmissiveInfos",2),e.addUniform("vLightmapInfos",2),e.addUniform("vReflectivityInfos",3),e.addUniform("vMicroSurfaceSamplerInfos",2),e.addUniform("vBumpInfos",3),e.addUniform("albedoMatrix",16),e.addUniform("baseWeightMatrix",16),e.addUniform("baseDiffuseRoughnessMatrix",16),e.addUniform("ambientMatrix",16),e.addUniform("opacityMatrix",16),e.addUniform("emissiveMatrix",16),e.addUniform("lightmapMatrix",16),e.addUniform("reflectivityMatrix",16),e.addUniform("microSurfaceSamplerMatrix",16),e.addUniform("bumpMatrix",16),e.addUniform("vTangentSpaceParams",2),e.addUniform("vAlbedoColor",4),e.addUniform("baseWeight",1),e.addUniform("baseDiffuseRoughness",1),e.addUniform("vLightingIntensity",4),e.addUniform("pointSize",1),e.addUniform("vReflectivityColor",4),e.addUniform("vEmissiveColor",3),e.addUniform("vAmbientColor",3),e.addUniform("vDebugMode",2),e.addUniform("vMetallicReflectanceFactors",4),e.addUniform("vMetallicReflectanceInfos",2),e.addUniform("metallicReflectanceMatrix",16),e.addUniform("vReflectanceInfos",2),e.addUniform("reflectanceMatrix",16),e.addUniform("cameraInfo",4),Em(e,!0,!0,!0,!0,!0),super.buildUniformLayout()}bindForSubMesh(e,t,i){var d,u,m,_;let r=this.getScene(),s=i.materialDefines;if(!s)return;let a=i.effect;if(!a)return;this._activeEffect=a,t.getMeshUniformBuffer().bindToEffect(a,"Mesh"),t.transferToEffect(e);let o=r.getEngine();this._uniformBuffer.bindToEffect(a,"Material"),this.prePassConfiguration.bindForSubMesh(this._activeEffect,r,t,e,this.isFrozen),Nn.Bind(o.currentRenderPassId,this._activeEffect,t,e,this);let l=r.activeCamera;l?this._uniformBuffer.updateFloat4("cameraInfo",l.minZ,l.maxZ,0,0):this._uniformBuffer.updateFloat4("cameraInfo",0,0,0,0),this._eventInfo.subMesh=i,this._callbackPluginEventHardBindForSubMesh(this._eventInfo),s.OBJECTSPACE_NORMALMAP&&(e.toNormalMatrix(this._normalMatrix),this.bindOnlyNormalMatrix(this._normalMatrix));let c=this._mustRebind(r,a,i,t.visibility);gs(t,this._activeEffect,this.prePassConfiguration),this._vertexPullingMetadata&&If(this._activeEffect,this._vertexPullingMetadata);let f=null,h=this._uniformBuffer;if(c){if(this.bindViewProjection(a),f=this._getReflectionTexture(),!h.useUbo||!this.isFrozen||!h.isSync||i._drawWrapper._forceRebindOnNextCall){if(r.texturesEnabled&&(this._albedoTexture&&le.DiffuseTextureEnabled&&(h.updateFloat2("vAlbedoInfos",this._albedoTexture.coordinatesIndex,this._albedoTexture.level),ni(this._albedoTexture,h,"albedo")),this._baseWeightTexture&&le.BaseWeightTextureEnabled&&(h.updateFloat2("vBaseWeightInfos",this._baseWeightTexture.coordinatesIndex,this._baseWeightTexture.level),ni(this._baseWeightTexture,h,"baseWeight")),this._baseDiffuseRoughnessTexture&&le.BaseDiffuseRoughnessTextureEnabled&&(h.updateFloat2("vBaseDiffuseRoughnessInfos",this._baseDiffuseRoughnessTexture.coordinatesIndex,this._baseDiffuseRoughnessTexture.level),ni(this._baseDiffuseRoughnessTexture,h,"baseDiffuseRoughness")),this._ambientTexture&&le.AmbientTextureEnabled&&(h.updateFloat4("vAmbientInfos",this._ambientTexture.coordinatesIndex,this._ambientTexture.level,this._ambientTextureStrength,this._ambientTextureImpactOnAnalyticalLights),ni(this._ambientTexture,h,"ambient")),this._opacityTexture&&le.OpacityTextureEnabled&&(h.updateFloat2("vOpacityInfos",this._opacityTexture.coordinatesIndex,this._opacityTexture.level),ni(this._opacityTexture,h,"opacity")),this._emissiveTexture&&le.EmissiveTextureEnabled&&(h.updateFloat2("vEmissiveInfos",this._emissiveTexture.coordinatesIndex,this._emissiveTexture.level),ni(this._emissiveTexture,h,"emissive")),this._lightmapTexture&&le.LightmapTextureEnabled&&(h.updateFloat2("vLightmapInfos",this._lightmapTexture.coordinatesIndex,this._lightmapTexture.level),ni(this._lightmapTexture,h,"lightmap")),le.SpecularTextureEnabled&&(this._metallicTexture?(h.updateFloat3("vReflectivityInfos",this._metallicTexture.coordinatesIndex,this._metallicTexture.level,this._ambientTextureStrength),ni(this._metallicTexture,h,"reflectivity")):this._reflectivityTexture&&(h.updateFloat3("vReflectivityInfos",this._reflectivityTexture.coordinatesIndex,this._reflectivityTexture.level,1),ni(this._reflectivityTexture,h,"reflectivity")),this._metallicReflectanceTexture&&(h.updateFloat2("vMetallicReflectanceInfos",this._metallicReflectanceTexture.coordinatesIndex,this._metallicReflectanceTexture.level),ni(this._metallicReflectanceTexture,h,"metallicReflectance")),this._reflectanceTexture&&s.REFLECTANCE&&(h.updateFloat2("vReflectanceInfos",this._reflectanceTexture.coordinatesIndex,this._reflectanceTexture.level),ni(this._reflectanceTexture,h,"reflectance")),this._microSurfaceTexture&&(h.updateFloat2("vMicroSurfaceSamplerInfos",this._microSurfaceTexture.coordinatesIndex,this._microSurfaceTexture.level),ni(this._microSurfaceTexture,h,"microSurfaceSampler"))),this._bumpTexture&&o.getCaps().standardDerivatives&&le.BumpTextureEnabled&&!this._disableBumpMap&&(h.updateFloat3("vBumpInfos",this._bumpTexture.coordinatesIndex,this._bumpTexture.level,this._parallaxScaleBias),ni(this._bumpTexture,h,"bump"),r._mirroredCameraPosition?h.updateFloat2("vTangentSpaceParams",this._invertNormalMapX?1:-1,this._invertNormalMapY?1:-1):h.updateFloat2("vTangentSpaceParams",this._invertNormalMapX?-1:1,this._invertNormalMapY?-1:1)),nm(r,s,h,this._reflectionColor,f,this.realTimeFiltering,!0,!0,!0,!0,!0)),this.pointsCloud&&h.updateFloat("pointSize",this.pointSize),s.METALLICWORKFLOW){pn.Color4[0].r=this._metallic===void 0||this._metallic===null?1:this._metallic,pn.Color4[0].g=this._roughness===void 0||this._roughness===null?1:this._roughness;let p=(u=(d=this.subSurface)==null?void 0:d._indexOfRefraction)!=null?u:1.5,g=1;pn.Color4[0].b=p;let v=Math.pow((p-g)/(p+g),2);pn.Color4[0].a=v,h.updateDirectColor4("vReflectivityColor",pn.Color4[0]),h.updateColor4("vMetallicReflectanceFactors",this._metallicReflectanceColor,this._metallicF0Factor)}else h.updateColor4("vReflectivityColor",this._reflectivityColor,this._microSurface);h.updateColor3("vEmissiveColor",le.EmissiveTextureEnabled?this._emissiveColor:Te.BlackReadOnly),!s.SS_REFRACTION&&((m=this.subSurface)!=null&&m._linkRefractionWithTransparency)?h.updateColor4("vAlbedoColor",this._albedoColor,1):h.updateColor4("vAlbedoColor",this._albedoColor,this.alpha),h.updateFloat("baseWeight",this._baseWeight),h.updateFloat("baseDiffuseRoughness",this._baseDiffuseRoughness||0),this._lightingInfos.x=this._directIntensity,this._lightingInfos.y=this._emissiveIntensity,this._lightingInfos.z=this._environmentIntensity*r.environmentIntensity,this._lightingInfos.w=this._specularIntensity,h.updateVector4("vLightingIntensity",this._lightingInfos),r.ambientColor.multiplyToRef(this._ambientColor,this._globalAmbientColor),h.updateColor3("vAmbientColor",this._globalAmbientColor),h.updateFloat2("vDebugMode",this.debugLimit,this.debugFactor)}r.texturesEnabled&&(this._albedoTexture&&le.DiffuseTextureEnabled&&h.setTexture("albedoSampler",this._albedoTexture),this._baseWeightTexture&&le.BaseWeightTextureEnabled&&h.setTexture("baseWeightSampler",this._baseWeightTexture),this._baseDiffuseRoughnessTexture&&le.BaseDiffuseRoughnessTextureEnabled&&h.setTexture("baseDiffuseRoughnessSampler",this._baseDiffuseRoughnessTexture),this._ambientTexture&&le.AmbientTextureEnabled&&h.setTexture("ambientSampler",this._ambientTexture),this._opacityTexture&&le.OpacityTextureEnabled&&h.setTexture("opacitySampler",this._opacityTexture),aA(r,s,h,f,this.realTimeFiltering),s.ENVIRONMENTBRDF&&h.setTexture("environmentBrdfSampler",this._environmentBRDFTexture),this._emissiveTexture&&le.EmissiveTextureEnabled&&h.setTexture("emissiveSampler",this._emissiveTexture),this._lightmapTexture&&le.LightmapTextureEnabled&&h.setTexture("lightmapSampler",this._lightmapTexture),le.SpecularTextureEnabled&&(this._metallicTexture?h.setTexture("reflectivitySampler",this._metallicTexture):this._reflectivityTexture&&h.setTexture("reflectivitySampler",this._reflectivityTexture),this._metallicReflectanceTexture&&h.setTexture("metallicReflectanceSampler",this._metallicReflectanceTexture),this._reflectanceTexture&&s.REFLECTANCE&&h.setTexture("reflectanceSampler",this._reflectanceTexture),this._microSurfaceTexture&&h.setTexture("microSurfaceSampler",this._microSurfaceTexture)),this._bumpTexture&&o.getCaps().standardDerivatives&&le.BumpTextureEnabled&&!this._disableBumpMap&&h.setTexture("bumpSampler",this._bumpTexture)),this.getScene().useOrderIndependentTransparency&&this.needAlphaBlendingForMesh(t)&&this.getScene().depthPeelingRenderer.bind(a),this._eventInfo.subMesh=i,this._callbackPluginEventBindForSubMesh(this._eventInfo),Mn(this._activeEffect,this,r),this.bindEyePosition(a)}else r.getEngine()._features.needToAlwaysBindUniformBuffers&&(this._needToBindSceneUbo=!0);(c||!this.isFrozen)&&(r.lightsEnabled&&!this._disableLighting&&am(r,t,this._activeEffect,s,this._maxSimultaneousLights),(r.fogEnabled&&t.applyFog&&r.fogMode!==Qt.FOGMODE_NONE||f||this.subSurface.refractionTexture||t.receiveShadows||s.PREPASS||s.CLUSTLIGHT_BATCH)&&this.bindView(a),mf(r,t,this._activeEffect,!0),s.NUM_MORPH_INFLUENCERS&&Cn(t,this._activeEffect),s.BAKED_VERTEX_ANIMATION_TEXTURE&&((_=t.bakedVertexAnimationManager)==null||_.bind(a,s.INSTANCES)),this._imageProcessingConfiguration.bind(this._activeEffect),uf(s,this._activeEffect,r)),this._afterBind(t,this._activeEffect,i),h.update()}getAnimatables(){let e=super.getAnimatables();return this._albedoTexture&&this._albedoTexture.animations&&this._albedoTexture.animations.length>0&&e.push(this._albedoTexture),this._baseWeightTexture&&this._baseWeightTexture.animations&&this._baseWeightTexture.animations.length>0&&e.push(this._baseWeightTexture),this._baseDiffuseRoughnessTexture&&this._baseDiffuseRoughnessTexture.animations&&this._baseDiffuseRoughnessTexture.animations.length>0&&e.push(this._baseDiffuseRoughnessTexture),this._ambientTexture&&this._ambientTexture.animations&&this._ambientTexture.animations.length>0&&e.push(this._ambientTexture),this._opacityTexture&&this._opacityTexture.animations&&this._opacityTexture.animations.length>0&&e.push(this._opacityTexture),this._reflectionTexture&&this._reflectionTexture.animations&&this._reflectionTexture.animations.length>0&&e.push(this._reflectionTexture),this._emissiveTexture&&this._emissiveTexture.animations&&this._emissiveTexture.animations.length>0&&e.push(this._emissiveTexture),this._metallicTexture&&this._metallicTexture.animations&&this._metallicTexture.animations.length>0?e.push(this._metallicTexture):this._reflectivityTexture&&this._reflectivityTexture.animations&&this._reflectivityTexture.animations.length>0&&e.push(this._reflectivityTexture),this._bumpTexture&&this._bumpTexture.animations&&this._bumpTexture.animations.length>0&&e.push(this._bumpTexture),this._lightmapTexture&&this._lightmapTexture.animations&&this._lightmapTexture.animations.length>0&&e.push(this._lightmapTexture),this._metallicReflectanceTexture&&this._metallicReflectanceTexture.animations&&this._metallicReflectanceTexture.animations.length>0&&e.push(this._metallicReflectanceTexture),this._reflectanceTexture&&this._reflectanceTexture.animations&&this._reflectanceTexture.animations.length>0&&e.push(this._reflectanceTexture),this._microSurfaceTexture&&this._microSurfaceTexture.animations&&this._microSurfaceTexture.animations.length>0&&e.push(this._microSurfaceTexture),e}_getReflectionTexture(){return this._reflectionTexture?this._reflectionTexture:this.getScene().environmentTexture}getActiveTextures(){let e=super.getActiveTextures();return this._albedoTexture&&e.push(this._albedoTexture),this._baseWeightTexture&&e.push(this._baseWeightTexture),this._baseDiffuseRoughnessTexture&&e.push(this._baseDiffuseRoughnessTexture),this._ambientTexture&&e.push(this._ambientTexture),this._opacityTexture&&e.push(this._opacityTexture),this._reflectionTexture&&e.push(this._reflectionTexture),this._emissiveTexture&&e.push(this._emissiveTexture),this._reflectivityTexture&&e.push(this._reflectivityTexture),this._metallicTexture&&e.push(this._metallicTexture),this._metallicReflectanceTexture&&e.push(this._metallicReflectanceTexture),this._reflectanceTexture&&e.push(this._reflectanceTexture),this._microSurfaceTexture&&e.push(this._microSurfaceTexture),this._bumpTexture&&e.push(this._bumpTexture),this._lightmapTexture&&e.push(this._lightmapTexture),e}hasTexture(e){return!!(super.hasTexture(e)||this._albedoTexture===e||this._baseWeightTexture===e||this._baseDiffuseRoughnessTexture===e||this._ambientTexture===e||this._opacityTexture===e||this._reflectionTexture===e||this._emissiveTexture===e||this._reflectivityTexture===e||this._metallicTexture===e||this._metallicReflectanceTexture===e||this._reflectanceTexture===e||this._microSurfaceTexture===e||this._bumpTexture===e||this._lightmapTexture===e)}setPrePassRenderer(){var t;if(!((t=this.subSurface)!=null&&t.isScatteringEnabled))return!1;let e=this.getScene().enableSubSurfaceForPrePass();return e&&(e.enabled=!0),!0}dispose(e,t){var i,r,s,a,o,l,c,f,h,d,u,m,_,p;this._breakShaderLoadedCheck=!0,t&&(this._environmentBRDFTexture&&this.getScene().environmentBRDFTexture!==this._environmentBRDFTexture&&this._environmentBRDFTexture.dispose(),(i=this._albedoTexture)==null||i.dispose(),(r=this._baseWeightTexture)==null||r.dispose(),(s=this._baseDiffuseRoughnessTexture)==null||s.dispose(),(a=this._ambientTexture)==null||a.dispose(),(o=this._opacityTexture)==null||o.dispose(),(l=this._reflectionTexture)==null||l.dispose(),(c=this._emissiveTexture)==null||c.dispose(),(f=this._metallicTexture)==null||f.dispose(),(h=this._reflectivityTexture)==null||h.dispose(),(d=this._bumpTexture)==null||d.dispose(),(u=this._lightmapTexture)==null||u.dispose(),(m=this._metallicReflectanceTexture)==null||m.dispose(),(_=this._reflectanceTexture)==null||_.dispose(),(p=this._microSurfaceTexture)==null||p.dispose()),this._renderTargets.dispose(),this._imageProcessingConfiguration&&this._imageProcessingObserver&&this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver),super.dispose(e,t)}};_r.PBRMATERIAL_OPAQUE=ve.MATERIAL_OPAQUE;_r.PBRMATERIAL_ALPHATEST=ve.MATERIAL_ALPHATEST;_r.PBRMATERIAL_ALPHABLEND=ve.MATERIAL_ALPHABLEND;_r.PBRMATERIAL_ALPHATESTANDBLEND=ve.MATERIAL_ALPHATESTANDBLEND;_r.DEFAULT_AO_ON_ANALYTICAL_LIGHTS=0;_r.LIGHTFALLOFF_PHYSICAL=0;_r.LIGHTFALLOFF_GLTF=1;_r.LIGHTFALLOFF_STANDARD=2;_r.ForceGLSL=!1;P([oe("_markAllSubMeshesAsMiscDirty")],_r.prototype,"debugMode",void 0)});var L7={};$e(L7,{PBRMaterial:()=>ht});var ht,O7=C(()=>{kt();Ut();Yx();zt();D7();Vi();Pn();Er();ht=class n extends _r{get refractionTexture(){return this.subSurface.refractionTexture}set refractionTexture(e){this.subSurface.refractionTexture=e,e?this.subSurface.isRefractionEnabled=!0:this.subSurface.linkRefractionWithTransparency||(this.subSurface.isRefractionEnabled=!1)}get indexOfRefraction(){return this.subSurface.indexOfRefraction}set indexOfRefraction(e){this.subSurface.indexOfRefraction=e}get invertRefractionY(){return this.subSurface.invertRefractionY}set invertRefractionY(e){this.subSurface.invertRefractionY=e}get linkRefractionWithTransparency(){return this.subSurface.linkRefractionWithTransparency}set linkRefractionWithTransparency(e){this.subSurface.linkRefractionWithTransparency=e,e&&(this.subSurface.isRefractionEnabled=!0)}get usePhysicalLightFalloff(){return this._lightFalloff===_r.LIGHTFALLOFF_PHYSICAL}set usePhysicalLightFalloff(e){e!==this.usePhysicalLightFalloff&&(this._markAllSubMeshesAsTexturesDirty(),e?this._lightFalloff=_r.LIGHTFALLOFF_PHYSICAL:this._lightFalloff=_r.LIGHTFALLOFF_STANDARD)}get useGLTFLightFalloff(){return this._lightFalloff===_r.LIGHTFALLOFF_GLTF}set useGLTFLightFalloff(e){e!==this.useGLTFLightFalloff&&(this._markAllSubMeshesAsTexturesDirty(),e?this._lightFalloff=_r.LIGHTFALLOFF_GLTF:this._lightFalloff=_r.LIGHTFALLOFF_STANDARD)}constructor(e,t,i=!1){super(e,t,i),this.directIntensity=1,this.emissiveIntensity=1,this.environmentIntensity=1,this.specularIntensity=1,this.disableBumpMap=!1,this.ambientTextureStrength=1,this.ambientTextureImpactOnAnalyticalLights=n.DEFAULT_AO_ON_ANALYTICAL_LIGHTS,this.metallicF0Factor=1,this.metallicReflectanceColor=Te.White(),this.useOnlyMetallicFromMetallicReflectanceTexture=!1,this.ambientColor=new Te(0,0,0),this.albedoColor=new Te(1,1,1),this.baseWeight=1,this.reflectivityColor=new Te(1,1,1),this.reflectionColor=new Te(1,1,1),this.emissiveColor=new Te(0,0,0),this.microSurface=1,this.useLightmapAsShadowmap=!1,this.useAlphaFromAlbedoTexture=!1,this.forceAlphaTest=!1,this.alphaCutOff=.4,this.useSpecularOverAlpha=!0,this.useMicroSurfaceFromReflectivityMapAlpha=!1,this.useRoughnessFromMetallicTextureAlpha=!0,this.useRoughnessFromMetallicTextureGreen=!1,this.useMetallnessFromMetallicTextureBlue=!1,this.useAmbientOcclusionFromMetallicTextureRed=!1,this.useAmbientInGrayScale=!1,this.useAutoMicroSurfaceFromReflectivityMap=!1,this.useRadianceOverAlpha=!0,this.useObjectSpaceNormalMap=!1,this.useParallax=!1,this.useParallaxOcclusion=!1,this.parallaxScaleBias=.05,this.disableLighting=!1,this.forceIrradianceInFragment=!1,this.maxSimultaneousLights=4,this.invertNormalMapX=!1,this.invertNormalMapY=!1,this.twoSidedLighting=!1,this.useAlphaFresnel=!1,this.useLinearAlphaFresnel=!1,this.environmentBRDFTexture=null,this.forceNormalForward=!1,this.enableSpecularAntiAliasing=!1,this.useHorizonOcclusion=!0,this.useRadianceOcclusion=!0,this.unlit=!1,this.applyDecalMapAfterDetailMap=!1,this._environmentBRDFTexture=Xx(this.getScene())}getClassName(){return"PBRMaterial"}clone(e,t=!0,i=""){let r=tt.Clone(()=>new n(e,this.getScene()),this,{cloneTexturesOnlyOnce:t});return r.id=e,r.name=e,this.stencil.copyTo(r.stencil),this._clonePlugins(r,i),r}serialize(){let e=super.serialize();return e.customType="BABYLON.PBRMaterial",e}static Parse(e,t,i){let r=tt.Parse(()=>new n(e.name,t),e,t,i);return e.stencil&&r.stencil.parse(e.stencil,t,i),ve._ParsePlugins(e,r,t,i),e.clearCoat&&r.clearCoat.parse(e.clearCoat,t,i),e.anisotropy&&r.anisotropy.parse(e.anisotropy,t,i),e.brdf&&r.brdf.parse(e.brdf,t,i),e.sheen&&r.sheen.parse(e.sheen,t,i),e.subSurface&&r.subSurface.parse(e.subSurface,t,i),e.iridescence&&r.iridescence.parse(e.iridescence,t,i),r}};ht.PBRMATERIAL_OPAQUE=_r.PBRMATERIAL_OPAQUE;ht.PBRMATERIAL_ALPHATEST=_r.PBRMATERIAL_ALPHATEST;ht.PBRMATERIAL_ALPHABLEND=_r.PBRMATERIAL_ALPHABLEND;ht.PBRMATERIAL_ALPHATESTANDBLEND=_r.PBRMATERIAL_ALPHATESTANDBLEND;ht.DEFAULT_AO_ON_ANALYTICAL_LIGHTS=_r.DEFAULT_AO_ON_ANALYTICAL_LIGHTS;P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"directIntensity",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"emissiveIntensity",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"environmentIntensity",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"specularIntensity",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"disableBumpMap",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"albedoTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"baseWeightTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"baseDiffuseRoughnessTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"ambientTexture",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"ambientTextureStrength",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"ambientTextureImpactOnAnalyticalLights",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesAndMiscDirty")],ht.prototype,"opacityTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"reflectionTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"emissiveTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"reflectivityTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"metallicTexture",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"metallic",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"roughness",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"metallicF0Factor",void 0);P([mr(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"metallicReflectanceColor",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useOnlyMetallicFromMetallicReflectanceTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"metallicReflectanceTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"reflectanceTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"microSurfaceTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"bumpTexture",void 0);P([Bt(),oe("_markAllSubMeshesAsTexturesDirty",null)],ht.prototype,"lightmapTexture",void 0);P([mr("ambient"),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"ambientColor",void 0);P([mr("albedo"),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"albedoColor",void 0);P([w("baseWeight"),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"baseWeight",void 0);P([w("baseDiffuseRoughness"),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"baseDiffuseRoughness",void 0);P([mr("reflectivity"),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"reflectivityColor",void 0);P([mr("reflection"),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"reflectionColor",void 0);P([mr("emissive"),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"emissiveColor",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"microSurface",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useLightmapAsShadowmap",void 0);P([w(),oe("_markAllSubMeshesAsTexturesAndMiscDirty")],ht.prototype,"useAlphaFromAlbedoTexture",void 0);P([w(),oe("_markAllSubMeshesAsTexturesAndMiscDirty")],ht.prototype,"forceAlphaTest",void 0);P([w(),oe("_markAllSubMeshesAsTexturesAndMiscDirty")],ht.prototype,"alphaCutOff",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useSpecularOverAlpha",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useMicroSurfaceFromReflectivityMapAlpha",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useRoughnessFromMetallicTextureAlpha",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useRoughnessFromMetallicTextureGreen",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useMetallnessFromMetallicTextureBlue",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useAmbientOcclusionFromMetallicTextureRed",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useAmbientInGrayScale",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useAutoMicroSurfaceFromReflectivityMap",void 0);P([w()],ht.prototype,"usePhysicalLightFalloff",null);P([w()],ht.prototype,"useGLTFLightFalloff",null);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useRadianceOverAlpha",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useObjectSpaceNormalMap",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useParallax",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useParallaxOcclusion",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"parallaxScaleBias",void 0);P([w(),oe("_markAllSubMeshesAsLightsDirty")],ht.prototype,"disableLighting",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"forceIrradianceInFragment",void 0);P([w(),oe("_markAllSubMeshesAsLightsDirty")],ht.prototype,"maxSimultaneousLights",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"invertNormalMapX",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"invertNormalMapY",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"twoSidedLighting",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useAlphaFresnel",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useLinearAlphaFresnel",void 0);P([oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"environmentBRDFTexture",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"forceNormalForward",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"enableSpecularAntiAliasing",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useHorizonOcclusion",void 0);P([w(),oe("_markAllSubMeshesAsTexturesDirty")],ht.prototype,"useRadianceOcclusion",void 0);P([w(),oe("_markAllSubMeshesAsMiscDirty")],ht.prototype,"unlit",void 0);P([w(),oe("_markAllSubMeshesAsMiscDirty")],ht.prototype,"applyDecalMapAfterDetailMap",void 0);Ft("BABYLON.PBRMaterial",ht)});var N7={};$e(N7,{PBRMaterialLoadingAdapter:()=>yL});var yL,w7=C(()=>{zt();lD();Ge();yL=class{constructor(e){this._material=e,this._material.enableSpecularAntiAliasing=!0}get material(){return this._material}get isUnlit(){return this._material.unlit}set isUnlit(e){this._material.unlit=e}set backFaceCulling(e){this._material.backFaceCulling=e}get backFaceCulling(){return this._material.backFaceCulling}set twoSidedLighting(e){this._material.twoSidedLighting=e}get twoSidedLighting(){return this._material.twoSidedLighting}set alphaCutOff(e){this._material.alphaCutOff=e}get alphaCutOff(){return this._material.alphaCutOff}set useAlphaFromBaseColorTexture(e){this._material.useAlphaFromAlbedoTexture=e}get useAlphaFromBaseColorTexture(){return this._material.useAlphaFromAlbedoTexture}get transparencyAsAlphaCoverage(){return this._material.useRadianceOverAlpha||this._material.useSpecularOverAlpha}set transparencyAsAlphaCoverage(e){this._material.useRadianceOverAlpha=!e,this._material.useSpecularOverAlpha=!e}set baseColor(e){this._material.albedoColor=e}get baseColor(){return this._material.albedoColor}set baseColorTexture(e){this._material.albedoTexture=e}get baseColorTexture(){return this._material.albedoTexture}set baseDiffuseRoughness(e){this._material.baseDiffuseRoughness=e,e>0&&(this._material.brdf.baseDiffuseModel=k.MATERIAL_DIFFUSE_MODEL_E_OREN_NAYAR)}get baseDiffuseRoughness(){var e;return(e=this._material.baseDiffuseRoughness)!=null?e:0}set baseDiffuseRoughnessTexture(e){this._material.baseDiffuseRoughnessTexture=e}get baseDiffuseRoughnessTexture(){return this._material.baseDiffuseRoughnessTexture}set baseMetalness(e){this._material.metallic=e}get baseMetalness(){var e;return(e=this._material.metallic)!=null?e:1}set baseMetalnessTexture(e){this._material.metallicTexture=e}get baseMetalnessTexture(){return this._material.metallicTexture}set useRoughnessFromMetallicTextureGreen(e){this._material.useRoughnessFromMetallicTextureGreen=e,this._material.useRoughnessFromMetallicTextureAlpha=!e}set useMetallicFromMetallicTextureBlue(e){this._material.useMetallnessFromMetallicTextureBlue=e}enableSpecularEdgeColor(e=!1){e&&(this._material.brdf.dielectricSpecularModel=k.MATERIAL_DIELECTRIC_SPECULAR_MODEL_OPENPBR,this._material.brdf.conductorSpecularModel=k.MATERIAL_CONDUCTOR_SPECULAR_MODEL_OPENPBR)}set specularWeight(e){this._material.metallicF0Factor=e}get specularWeight(){var e;return(e=this._material.metallicF0Factor)!=null?e:1}set specularWeightTexture(e){e?(this._material.metallicReflectanceTexture=e,this._material.useOnlyMetallicFromMetallicReflectanceTexture=!0):(this._material.metallicReflectanceTexture=null,this._material.useOnlyMetallicFromMetallicReflectanceTexture=!1)}get specularWeightTexture(){return this._material.metallicReflectanceTexture}set specularColor(e){this._material.metallicReflectanceColor=e}get specularColor(){return this._material.metallicReflectanceColor}set specularColorTexture(e){this._material.reflectanceTexture=e}get specularColorTexture(){return this._material.reflectanceTexture}set specularRoughness(e){this._material.roughness=e}get specularRoughness(){var e;return(e=this._material.roughness)!=null?e:1}set specularRoughnessTexture(e){this.baseMetalnessTexture||(this._material.metallicTexture=e)}get specularRoughnessTexture(){return this._material.metallicTexture}set specularIor(e){this._material.indexOfRefraction=e}get specularIor(){return this._material.indexOfRefraction}set emissionColor(e){this._material.emissiveColor=e}get emissionColor(){return this._material.emissiveColor}set emissionLuminance(e){this._material.emissiveIntensity=e}get emissionLuminance(){return this._material.emissiveIntensity}set emissionColorTexture(e){this._material.emissiveTexture=e}get emissionColorTexture(){return this._material.emissiveTexture}set ambientOcclusionTexture(e){this._material.ambientTexture=e,e&&(this._material.useAmbientInGrayScale=!0)}get ambientOcclusionTexture(){return this._material.ambientTexture}set ambientOcclusionTextureStrength(e){this._material.ambientTextureStrength=e}get ambientOcclusionTextureStrength(){var e;return(e=this._material.ambientTextureStrength)!=null?e:1}configureCoat(){this._material.clearCoat.isEnabled=!0,this._material.clearCoat.useRoughnessFromMainTexture=!1,this._material.clearCoat.remapF0OnInterfaceChange=!1}set coatWeight(e){this._material.clearCoat.isEnabled=!0,this._material.clearCoat.intensity=e}get coatWeight(){return this._material.clearCoat.intensity}set coatWeightTexture(e){this._material.clearCoat.isEnabled=!0,this._material.clearCoat.texture=e}get coatWeightTexture(){return this._material.clearCoat.texture}set coatColor(e){this._material.clearCoat.isTintEnabled=e!=Te.White(),this._material.clearCoat.tintColor=e}set coatColorTexture(e){this._material.clearCoat.tintTexture=e}set coatRoughness(e){this._material.clearCoat.isEnabled=!0,this._material.clearCoat.roughness=e}get coatRoughness(){var e;return(e=this._material.clearCoat.roughness)!=null?e:0}set coatRoughnessTexture(e){this._material.clearCoat.isEnabled=!0,this._material.clearCoat.useRoughnessFromMainTexture=!1,this._material.clearCoat.textureRoughness=e}get coatRoughnessTexture(){return this._material.clearCoat.textureRoughness}set coatIor(e){this._material.clearCoat.indexOfRefraction=e}set coatDarkening(e){}set coatDarkeningTexture(e){}set coatRoughnessAnisotropy(e){}get coatRoughnessAnisotropy(){return 0}set geometryCoatTangentAngle(e){}set geometryCoatTangentTexture(e){}get geometryCoatTangentTexture(){return null}set transmissionWeight(e){this._material.subSurface.isRefractionEnabled=e>0,this._material.subSurface.refractionIntensity=e}get transmissionWeight(){return this._material.subSurface.isRefractionEnabled?this._material.subSurface.refractionIntensity:0}set transmissionWeightTexture(e){this._material.subSurface.isRefractionEnabled=!0,this._material.subSurface.refractionIntensityTexture=e,this._material.subSurface.useGltfStyleTextures=!0}set transmissionDepth(e){this.transmissionWeight>0?this._material.subSurface.tintColorAtDistance=e:this.subsurfaceWeight>0&&this._material.subSurface.diffusionDistance.multiplyInPlace(new Te(e,e,e))}get transmissionDepth(){return this.transmissionWeight>0?this._material.subSurface.tintColorAtDistance:0}set transmissionColor(e){this.transmissionWeight>0?this._material.subSurface.tintColor=e:this.subsurfaceWeight>0&&this._material.subSurface.diffusionDistance.multiplyInPlace(e)}get transmissionColor(){return this.transmissionWeight>0?this._material.subSurface.tintColor:this.subsurfaceWeight>0?this._material.subSurface.diffusionDistance:new Te(0,0,0)}set transmissionScatter(e){this._material.subSurface.diffusionDistance=e}get transmissionScatter(){return this._material.subSurface.diffusionDistance}set transmissionScatterTexture(e){}set transmissionScatterAnisotropy(e){}set transmissionDispersionAbbeNumber(e){}set transmissionDispersionScale(e){e>0?(this._material.subSurface.isDispersionEnabled=!0,this._material.subSurface.dispersion=20/e):(this._material.subSurface.isDispersionEnabled=!1,this._material.subSurface.dispersion=0)}get refractionBackgroundTexture(){return this._material.subSurface.refractionTexture}set refractionBackgroundTexture(e){this._material.subSurface.refractionTexture=e}configureTransmission(){this._material.subSurface.volumeIndexOfRefraction=1,this._material.subSurface.useAlbedoToTintRefraction=!0,this._material.subSurface.minimumThickness=0,this._material.subSurface.maximumThickness=0}configureVolume(){}set geometryThinWalled(e){}get geometryThinWalled(){return!0}set volumeThicknessTexture(e){this._material.subSurface.thicknessTexture=e,this._material.subSurface.useGltfStyleTextures=!0}set volumeThickness(e){this._material.subSurface.minimumThickness=0,this._material.subSurface.maximumThickness=e,this._material.subSurface.useThicknessAsDepth=!0,e>0&&(this._material.subSurface.volumeIndexOfRefraction=this._material.indexOfRefraction)}configureSubsurface(){this._material.subSurface.useGltfStyleTextures=!0,this._material.subSurface.volumeIndexOfRefraction=1,this._material.subSurface.minimumThickness=0,this._material.subSurface.maximumThickness=0,this._material.subSurface.useAlbedoToTintTranslucency=!1}set subsurfaceWeight(e){this._material.subSurface.isTranslucencyEnabled=e>0,this._material.subSurface.translucencyIntensity=e}get subsurfaceWeight(){return this._material.subSurface.isTranslucencyEnabled?this._material.subSurface.translucencyIntensity:0}set subsurfaceWeightTexture(e){this._material.subSurface.translucencyIntensityTexture=e}set subsurfaceColor(e){let t=new b(-Math.log(this.transmissionColor.r),-Math.log(this.transmissionColor.g),-Math.log(this.transmissionColor.b));t.scaleInPlace(1/Math.max(this.transmissionDepth,.001));let i=t,r=Math.max(i.x,Math.max(i.y,i.z)),s=r>0?1/r:1;this._material.subSurface.diffusionDistance=new Te(Math.exp(-i.x*s),Math.exp(-i.y*s),Math.exp(-i.z*s))}set subsurfaceColorTexture(e){}set diffuseTransmissionTint(e){this._material.subSurface.tintColor=e}get diffuseTransmissionTint(){return this._material.subSurface.tintColor}set diffuseTransmissionTintTexture(e){this._material.subSurface.translucencyColorTexture=e}get subsurfaceRadius(){return 1}set subsurfaceRadius(e){}get subsurfaceRadiusScale(){var e;return(e=this._material.subSurface.scatteringDiffusionProfile)!=null?e:Te.White()}set subsurfaceRadiusScale(e){this._material.subSurface.scatteringDiffusionProfile=e}set subsurfaceScatterAnisotropy(e){}isTranslucent(){return this.transmissionWeight>0||this.subsurfaceWeight>0}configureFuzz(){this._material.sheen.isEnabled=!0,this._material.sheen.useRoughnessFromMainTexture=!1,this._material.sheen.albedoScaling=!0}set fuzzWeight(e){this._material.sheen.isEnabled=!0,this._material.sheen.intensity=e}set fuzzWeightTexture(e){this._material.sheen.texture||(this._material.sheen.texture=e)}set fuzzColor(e){this._material.sheen.isEnabled=!0,this._material.sheen.color=e}set fuzzColorTexture(e){this._material.sheen.texture=e}set fuzzRoughness(e){this._material.sheen.isEnabled=!0,this._material.sheen.roughness=e}set fuzzRoughnessTexture(e){this._material.sheen.isEnabled=!0,this._material.sheen.textureRoughness=e}set specularRoughnessAnisotropy(e){this._material.anisotropy.isEnabled=!0,this._material.anisotropy.intensity=e}get specularRoughnessAnisotropy(){return this._material.anisotropy.intensity}set geometryTangentAngle(e){this._material.anisotropy.isEnabled=!0,this._material.anisotropy.angle=e}set geometryTangentTexture(e){this._material.anisotropy.isEnabled=!0,this._material.anisotropy.texture=e}get geometryTangentTexture(){return this._material.anisotropy.texture}configureGltfStyleAnisotropy(e=!0){}set thinFilmWeight(e){this._material.iridescence.isEnabled=e>0,this._material.iridescence.intensity=e}set thinFilmIor(e){this._material.iridescence.indexOfRefraction=e}set thinFilmThicknessMinimum(e){this._material.iridescence.minimumThickness=e}set thinFilmThicknessMaximum(e){this._material.iridescence.maximumThickness=e}set thinFilmWeightTexture(e){this._material.iridescence.texture=e}set thinFilmThicknessTexture(e){this._material.iridescence.thicknessTexture=e}set unlit(e){this._material.unlit=e}set geometryOpacity(e){this._material.alpha=e}get geometryOpacity(){return this._material.alpha}set geometryNormalTexture(e){this._material.bumpTexture=e,this._material.forceIrradianceInFragment=!0}get geometryNormalTexture(){return this._material.bumpTexture}setNormalMapInversions(e,t){this._material.invertNormalMapX=e,this._material.invertNormalMapY=t}set geometryCoatNormalTexture(e){this._material.clearCoat.isEnabled=!0,this._material.clearCoat.bumpTexture=e}get geometryCoatNormalTexture(){return this._material.clearCoat.bumpTexture}set geometryCoatNormalTextureScale(e){this._material.clearCoat.bumpTexture&&(this._material.clearCoat.bumpTexture.level=e)}}});function Ehe(n){if(n.min&&n.max){let e=n.min,t=n.max,i=Q.Vector3[0].copyFromFloats(e[0],e[1],e[2]),r=Q.Vector3[1].copyFromFloats(t[0],t[1],t[2]);if(n.normalized&&n.componentType!==5126){let s=1;switch(n.componentType){case 5120:s=127;break;case 5121:s=255;break;case 5122:s=32767;break;case 5123:s=65535;break}let a=1/s;i.scaleInPlace(a),r.scaleInPlace(a)}return new fn(i,r)}return null}var ghe,vhe,jt,eR,F7=C(()=>{Z4();Ge();zt();Ci();el();rX();Vx();sX();Pn();Gr();kh();Ui();rA();im();Di();sD();oX();nD();Bl();Pt();em();fX();cD();uX();Hu();mX();ghe=new bg(()=>Promise.resolve().then(()=>(EX(),vX))),vhe=new bg(()=>Promise.resolve().then(()=>(xX(),AX))),jt=class{static Get(e,t,i){if(!t||i==null||!t[i])throw new Error(`${e}: Failed to find index (${i})`);return t[i]}static TryGet(e,t){return!e||t==null||!e[t]?null:e[t]}static Assign(e){if(e)for(let t=0;tt.dispose&&t.dispose()),this._extensions.length=0;for(let t of Array.from(this._materialAdapters))(e=t.finalize)==null||e.call(t);this._materialAdapters.clear(),this._gltf=null,this._bin=null,this._babylonScene=null,this._rootBabylonMesh=null,this._defaultBabylonMaterialData={},this._postSceneLoadActions.length=0,this._parent.dispose()}}async importMeshAsync(e,t,i,r,s,a,o=""){return await Promise.resolve().then(async()=>{this._babylonScene=t,this._assetContainer=i,this._loadData(r);let l=null;if(e){let c={};if(this._gltf.nodes)for(let h of this._gltf.nodes)h.name&&(c[h.name]=h.index);l=(e instanceof Array?e:[e]).map(h=>{let d=c[h];if(d===void 0)throw new Error(`Failed to find node '${h}'`);return d})}return await this._loadAsync(s,o,l,()=>({meshes:this._getMeshes(),particleSystems:[],skeletons:this._getSkeletons(),animationGroups:this._getAnimationGroups(),lights:this._babylonLights,transformNodes:this._getTransformNodes(),geometries:this._getGeometries(),spriteManagers:[]}))})}async loadAsync(e,t,i,r,s=""){return this._babylonScene=e,this._loadData(t),await this._loadAsync(i,s,null,()=>{})}async _loadAsync(e,t,i,r){return await Promise.resolve().then(async()=>{this._rootUrl=e,this._uniqueRootUrl=!e.startsWith("file:")&&t?e:`${e}${Date.now()}/`,this._fileName=t,this._allMaterialsDirtyRequired=!1,await this._loadExtensionsAsync(),!this.parent.skipMaterials&&this._pbrMaterialImpl==null&&(this.parent.useOpenPBR||this.isExtensionUsed("KHR_materials_openpbr")?this._pbrMaterialImpl={materialClass:(await Promise.resolve().then(()=>(b8(),R8))).OpenPBRMaterial,adapterClass:(await Promise.resolve().then(()=>(M8(),I8))).OpenPBRMaterialLoadingAdapter}:this._pbrMaterialImpl={materialClass:(await Promise.resolve().then(()=>(O7(),L7))).PBRMaterial,adapterClass:(await Promise.resolve().then(()=>(w7(),N7))).PBRMaterialLoadingAdapter});let s=`${Yn[Yn.LOADING]} => ${Yn[Yn.READY]}`,a=`${Yn[Yn.LOADING]} => ${Yn[Yn.COMPLETE]}`;this._parent._startPerformanceCounter(s),this._parent._startPerformanceCounter(a),this._parent._setState(Yn.LOADING),this._extensionsOnLoading();let o=new Array,l=this._babylonScene.blockMaterialDirtyMechanism;if(this._babylonScene.blockMaterialDirtyMechanism=!0,!this.parent.loadOnlyMaterials){if(i)o.push(this.loadSceneAsync("/nodes",{nodes:i,index:-1}));else if(this._gltf.scene!=null||this._gltf.scenes&&this._gltf.scenes[0]){let f=jt.Get("/scene",this._gltf.scenes,this._gltf.scene||0);o.push(this.loadSceneAsync(`/scenes/${f.index}`,f))}}if(!this.parent.skipMaterials&&this.parent.loadAllMaterials&&this._gltf.materials)for(let f=0;f{}))}return this._allMaterialsDirtyRequired?this._babylonScene.blockMaterialDirtyMechanism=l:this._babylonScene._forceBlockMaterialDirtyMechanism(l),this._parent.compileMaterials&&o.push(this._compileMaterialsAsync()),this._parent.compileShadowGenerators&&o.push(this._compileShadowGeneratorsAsync()),await Promise.all(o).then(()=>{this._rootBabylonMesh&&this._rootBabylonMesh!==this._parent.customRootNode&&this._rootBabylonMesh.setEnabled(!0);for(let f of this._babylonScene.materials){let h=f;h.maxSimultaneousLights!==void 0&&(h.maxSimultaneousLights=Math.max(h.maxSimultaneousLights,this._babylonScene.lights.length))}return this._extensionsOnReady(),this._parent._setState(Yn.READY),this._skipStartAnimationStep||this._startAnimations(),r()}).then(f=>(this._parent._endPerformanceCounter(s),de.SetImmediate(()=>{this._disposed||Promise.all(this._completePromises).then(()=>{this._parent._endPerformanceCounter(a),this._parent._setState(Yn.COMPLETE),this._parent.onCompleteObservable.notifyObservers(void 0),this._parent.onCompleteObservable.clear(),this.dispose()},h=>{this._parent.onErrorObservable.notifyObservers(h),this._parent.onErrorObservable.clear(),this.dispose()})}),f))}).catch(s=>{throw this._disposed||(this._parent.onErrorObservable.notifyObservers(s),this._parent.onErrorObservable.clear(),this.dispose()),s})}_loadData(e){if(this._gltf=e.json,this._setupData(),e.bin){let t=this._gltf.buffers;if(t&&t[0]&&!t[0].uri){let i=t[0];(i.byteLengthe.bin.byteLength)&&J.Warn(`Binary buffer length (${i.byteLength}) from JSON does not match chunk length (${e.bin.byteLength})`),this._bin=e.bin}else J.Warn("Unexpected BIN chunk")}}_setupData(){if(jt.Assign(this._gltf.accessors),jt.Assign(this._gltf.animations),jt.Assign(this._gltf.buffers),jt.Assign(this._gltf.bufferViews),jt.Assign(this._gltf.cameras),jt.Assign(this._gltf.images),jt.Assign(this._gltf.materials),jt.Assign(this._gltf.meshes),jt.Assign(this._gltf.nodes),jt.Assign(this._gltf.samplers),jt.Assign(this._gltf.scenes),jt.Assign(this._gltf.skins),jt.Assign(this._gltf.textures),this._gltf.nodes){let e={};for(let i of this._gltf.nodes)if(i.children)for(let r of i.children)e[r]=i.index;let t=this._createRootNode();for(let i of this._gltf.nodes){let r=e[i.index];i.parent=r===void 0?t:this._gltf.nodes[r]}}}async _loadExtensionsAsync(){var t;let e=[];if(lX.forEach((i,r)=>{var s;((s=this.parent.extensionOptions[r])==null?void 0:s.enabled)===!1?i.isGLTFExtension&&this.isExtensionUsed(r)&&J.Warn(`Extension ${r} is used but has been explicitly disabled.`):(!i.isGLTFExtension||this.isExtensionUsed(r))&&e.push((async()=>{let a=await i.factory(this);return a.name!==r&&J.Warn(`The name of the glTF loader extension instance does not match the registered name: ${a.name} !== ${r}`),this._parent.onExtensionLoadedObservable.notifyObservers(a),a})())}),this._extensions.push(...await Promise.all(e)),this._extensions.sort((i,r)=>(i.order||Number.MAX_VALUE)-(r.order||Number.MAX_VALUE)),this._parent.onExtensionLoadedObservable.clear(),this._gltf.extensionsRequired){for(let i of this._gltf.extensionsRequired)if(!this._extensions.some(s=>s.name===i&&s.enabled))throw((t=this.parent.extensionOptions[i])==null?void 0:t.enabled)===!1?new Error(`Required extension ${i} is disabled`):new Error(`Required extension ${i} is not available`)}}_createRootNode(){if(this._parent.customRootNode!==void 0)return this._rootBabylonMesh=this._parent.customRootNode,{_babylonTransformNode:this._rootBabylonMesh===null?void 0:this._rootBabylonMesh,index:-1};this._babylonScene._blockEntityCollection=!!this._assetContainer;let e=new j("__root__",this._babylonScene);this._rootBabylonMesh=e,this._rootBabylonMesh._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,this._rootBabylonMesh.setEnabled(!1);let t={_babylonTransformNode:this._rootBabylonMesh,index:-1};switch(this._parent.coordinateSystemMode){case Gm.AUTO:{this._babylonScene.useRightHandedSystem||(t.rotation=[0,1,0,0],t.scale=[1,1,-1],n._LoadTransform(t,this._rootBabylonMesh));break}case Gm.FORCE_RIGHT_HANDED:{this._babylonScene.useRightHandedSystem=!0;break}default:throw new Error(`Invalid coordinate system mode (${this._parent.coordinateSystemMode})`)}return this._parent.onMeshLoadedObservable.notifyObservers(e),t}loadSceneAsync(e,t){let i=this._extensionsLoadSceneAsync(e,t);if(i)return i;let r=new Array;if(this.logOpen(`${e} ${t.name||""}`),t.nodes)for(let s of t.nodes){let a=jt.Get(`${e}/nodes/${s}`,this._gltf.nodes,s);r.push(this.loadNodeAsync(`/nodes/${a.index}`,a,o=>{o.parent=this._rootBabylonMesh}))}for(let s of this._postSceneLoadActions)s();return r.push(this._loadAnimationsAsync()),this.logClose(),Promise.all(r).then(()=>{})}_forEachPrimitive(e,t){if(e._primitiveBabylonMeshes)for(let i of e._primitiveBabylonMeshes)t(i)}_getGeometries(){let e=[],t=this._gltf.nodes;if(t)for(let i of t)this._forEachPrimitive(i,r=>{let s=r.geometry;s&&e.indexOf(s)===-1&&e.push(s)});return e}_getMeshes(){let e=[];this._rootBabylonMesh instanceof pr&&e.push(this._rootBabylonMesh);let t=this._gltf.nodes;if(t)for(let i of t)this._forEachPrimitive(i,r=>{e.push(r)});return e}_getTransformNodes(){let e=[],t=this._gltf.nodes;if(t)for(let i of t)i._babylonTransformNode&&i._babylonTransformNode.getClassName()==="TransformNode"&&e.push(i._babylonTransformNode),i._babylonTransformNodeForSkin&&e.push(i._babylonTransformNodeForSkin);return e}_getSkeletons(){let e=[],t=this._gltf.skins;if(t)for(let i of t)i._data&&e.push(i._data.babylonSkeleton);return e}_getAnimationGroups(){let e=[],t=this._gltf.animations;if(t)for(let i of t)i._babylonAnimationGroup&&e.push(i._babylonAnimationGroup);return e}_startAnimations(){switch(this._parent.animationStartMode){case ed.NONE:break;case ed.FIRST:{let e=this._getAnimationGroups();e.length!==0&&e[0].start(!0);break}case ed.ALL:{let e=this._getAnimationGroups();for(let t of e)t.start(!0);break}default:{J.Error(`Invalid animation start mode (${this._parent.animationStartMode})`);return}}}loadNodeAsync(e,t,i=()=>{}){let r=this._extensionsLoadNodeAsync(e,t,i);if(r)return r;if(t._babylonTransformNode)throw new Error(`${e}: Invalid recursive node hierarchy`);let s=new Array;this.logOpen(`${e} ${t.name||""}`);let a=c=>{if(n.AddPointerMetadata(c,e),n._LoadTransform(t,c),t.camera!=null){let f=jt.Get(`${e}/camera`,this._gltf.cameras,t.camera);s.push(this.loadCameraAsync(`/cameras/${f.index}`,f,h=>{h.parent=c,this._babylonScene.useRightHandedSystem||(c.scaling.x=-1)}))}if(t.children)for(let f of t.children){let h=jt.Get(`${e}/children/${f}`,this._gltf.nodes,f);s.push(this.loadNodeAsync(`/nodes/${h.index}`,h,d=>{d.parent=c}))}i(c)},o=t.mesh!=null,l=this._parent.loadSkins&&t.skin!=null;if(!o||l){let c=t.name||`node${t.index}`;this._babylonScene._blockEntityCollection=!!this._assetContainer;let f=new $t(c,this._babylonScene);f._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,t.mesh==null?t._babylonTransformNode=f:t._babylonTransformNodeForSkin=f,a(f)}if(o)if(l){let c=jt.Get(`${e}/mesh`,this._gltf.meshes,t.mesh);s.push(this._loadMeshAsync(`/meshes/${c.index}`,t,c,f=>{let h=t._babylonTransformNodeForSkin;f.metadata=fD(h.metadata,f.metadata||{});let d=jt.Get(`${e}/skin`,this._gltf.skins,t.skin);s.push(this._loadSkinAsync(`/skins/${d.index}`,t,d,u=>{this._forEachPrimitive(t,m=>{m.skeleton=u}),this._postSceneLoadActions.push(()=>{if(d.skeleton!=null){let m=jt.Get(`/skins/${d.index}/skeleton`,this._gltf.nodes,d.skeleton).parent;t.index===m.index?f.parent=h.parent:f.parent=m._babylonTransformNode}else f.parent=this._rootBabylonMesh;this._parent.onSkinLoadedObservable.notifyObservers({node:h,skinnedNode:f})})}))}))}else{let c=jt.Get(`${e}/mesh`,this._gltf.meshes,t.mesh);s.push(this._loadMeshAsync(`/meshes/${c.index}`,t,c,a))}return this.logClose(),Promise.all(s).then(()=>(this._forEachPrimitive(t,c=>{let f=c;!f.isAnInstance&&f.geometry&&f.geometry.useBoundingInfoFromGeometry?c._updateBoundingInfo():c.refreshBoundingInfo(!0,!0)}),t._babylonTransformNode))}_loadMeshAsync(e,t,i,r){let s=i.primitives;if(!s||!s.length)throw new Error(`${e}: Primitives are missing`);s[0].index==null&&jt.Assign(s);let a=new Array;this.logOpen(`${e} ${i.name||""}`);let o=t.name||`node${t.index}`;if(s.length===1){let l=i.primitives[0];a.push(this._loadMeshPrimitiveAsync(`${e}/primitives/${l.index}`,o,t,i,l,c=>{t._babylonTransformNode=c,t._primitiveBabylonMeshes=[c]}))}else{this._babylonScene._blockEntityCollection=!!this._assetContainer,t._babylonTransformNode=new $t(o,this._babylonScene),t._babylonTransformNode._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,t._primitiveBabylonMeshes=[];for(let l of s)a.push(this._loadMeshPrimitiveAsync(`${e}/primitives/${l.index}`,`${o}_primitive${l.index}`,t,i,l,c=>{c.parent=t._babylonTransformNode,t._primitiveBabylonMeshes.push(c)}))}return r(t._babylonTransformNode),this.logClose(),Promise.all(a).then(()=>t._babylonTransformNode)}_loadMeshPrimitiveAsync(e,t,i,r,s,a){let o=this._extensionsLoadMeshPrimitiveAsync(e,t,i,r,s,a);if(o)return o;this.logOpen(`${e}`);let l=this._disableInstancedMesh===0&&this._parent.createInstances&&i.skin==null&&!r.primitives[0].targets,c,f;if(l&&s._instanceData)this._babylonScene._blockEntityCollection=!!this._assetContainer,c=s._instanceData.babylonSourceMesh.createInstance(t),c._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,f=s._instanceData.promise;else{let h=new Array;this._babylonScene._blockEntityCollection=!!this._assetContainer;let d=new j(t,this._babylonScene);if(d._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,d.sideOrientation=this._babylonScene.useRightHandedSystem?ve.CounterClockWiseSideOrientation:ve.ClockWiseSideOrientation,this._createMorphTargets(e,i,r,s,d),h.push(this._loadVertexDataAsync(e,s,d).then(async u=>await this._loadMorphTargetsAsync(e,s,d,u).then(()=>{this._disposed||(this._babylonScene._blockEntityCollection=!!this._assetContainer,u.applyToMesh(d),u._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1)}))),!this.parent.skipMaterials){let u=n._GetDrawMode(e,s.mode);if(s.material==null){let m=this._defaultBabylonMaterialData[u];m||(m=this._createDefaultMaterial("__GLTFLoader._default",u),this._parent.onMaterialLoadedObservable.notifyObservers(m),this._defaultBabylonMaterialData[u]=m),d.material=m}else{let m=jt.Get(`${e}/material`,this._gltf.materials,s.material);h.push(this._loadMaterialAsync(`/materials/${m.index}`,m,d,u,_=>{d.material=_}))}}f=Promise.all(h),l&&(s._instanceData={babylonSourceMesh:d,promise:f}),c=d}return n.AddPointerMetadata(c,e),this._parent.onMeshLoadedObservable.notifyObservers(c),a(c),this.logClose(),f.then(()=>c)}_loadVertexDataAsync(e,t,i){let r=this._extensionsLoadVertexDataAsync(e,t,i);if(r)return r;let s=t.attributes;if(!s)throw new Error(`${e}: Attributes are missing`);let a=new Array,o=new hn(i.name,this._babylonScene);if(t.indices==null)i.isUnIndexed=!0;else{let c=jt.Get(`${e}/indices`,this._gltf.accessors,t.indices);a.push(this._loadIndicesAccessorAsync(`/accessors/${c.index}`,c).then(f=>{o.setIndices(f)}))}let l=(c,f,h)=>{if(s[c]==null)return;i._delayInfo=i._delayInfo||[],i._delayInfo.indexOf(f)===-1&&i._delayInfo.push(f);let d=jt.Get(`${e}/attributes/${c}`,this._gltf.accessors,s[c]);a.push(this._loadVertexAccessorAsync(`/accessors/${d.index}`,d,f).then(u=>{if(u.getKind()===L.PositionKind&&!this.parent.alwaysComputeBoundingBox&&!i.skeleton){let m=Ehe(d);m&&(o._boundingInfo=m,o.useBoundingInfoFromGeometry=!0)}o.setVerticesBuffer(u,d.count)})),f==L.MatricesIndicesExtraKind&&(i.numBoneInfluencers=8),h&&h(d)};return l("POSITION",L.PositionKind),l("NORMAL",L.NormalKind),l("TANGENT",L.TangentKind),l("TEXCOORD_0",L.UVKind),l("TEXCOORD_1",L.UV2Kind),l("TEXCOORD_2",L.UV3Kind),l("TEXCOORD_3",L.UV4Kind),l("TEXCOORD_4",L.UV5Kind),l("TEXCOORD_5",L.UV6Kind),l("JOINTS_0",L.MatricesIndicesKind),l("WEIGHTS_0",L.MatricesWeightsKind),l("JOINTS_1",L.MatricesIndicesExtraKind),l("WEIGHTS_1",L.MatricesWeightsExtraKind),l("COLOR_0",L.ColorKind,c=>{c.type==="VEC4"&&(i.hasVertexAlpha=!0)}),Promise.all(a).then(()=>o)}_createMorphTargets(e,t,i,r,s){if(!r.targets||!this._parent.loadMorphTargets)return;if(t._numMorphTargets==null)t._numMorphTargets=r.targets.length;else if(r.targets.length!==t._numMorphTargets)throw new Error(`${e}: Primitives do not have the same number of targets`);let a=i.extras?i.extras.targetNames:null;this._babylonScene._blockEntityCollection=!!this._assetContainer,s.morphTargetManager=new nd(this._babylonScene),s.morphTargetManager._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,s.morphTargetManager.areUpdatesFrozen=!0;for(let o=0;o{a.areUpdatesFrozen=!1})}async _loadMorphTargetVertexDataAsync(e,t,i,r){let s=new Array,a=(o,l,c)=>{if(i[o]==null)return;let f=t.getVertexBuffer(l);if(!f)return;let h=jt.Get(`${e}/${o}`,this._gltf.accessors,i[o]);s.push(this._loadFloatAccessorAsync(`/accessors/${h.index}`,h).then(d=>{c(f,d)}))};return a("POSITION",L.PositionKind,(o,l)=>{let c=new Float32Array(l.length);o.forEach(l.length,(f,h)=>{c[h]=l[h]+f}),r.setPositions(c)}),a("NORMAL",L.NormalKind,(o,l)=>{let c=new Float32Array(l.length);o.forEach(c.length,(f,h)=>{c[h]=l[h]+f}),r.setNormals(c)}),a("TANGENT",L.TangentKind,(o,l)=>{let c=new Float32Array(l.length/3*4),f=0;o.forEach(l.length/3*4,(h,d)=>{(d+1)%4!==0&&(c[f]=l[f]+h,f++)}),r.setTangents(c)}),a("TEXCOORD_0",L.UVKind,(o,l)=>{let c=new Float32Array(l.length);o.forEach(l.length,(f,h)=>{c[h]=l[h]+f}),r.setUVs(c)}),a("TEXCOORD_1",L.UV2Kind,(o,l)=>{let c=new Float32Array(l.length);o.forEach(l.length,(f,h)=>{c[h]=l[h]+f}),r.setUV2s(c)}),a("COLOR_0",L.ColorKind,(o,l)=>{let c=null,f=o.getSize();if(f===3){c=new Float32Array(l.length/3*4),o.forEach(l.length,(h,d)=>{let u=Math.floor(d/3),m=d%3;c[4*u+m]=l[3*u+m]+h});for(let h=0;h{c[d]=l[d]+h});else throw new Error(`${e}: Invalid number of components (${f}) for COLOR_0 attribute`);r.setColors(c)}),await Promise.all(s).then(()=>{})}static _LoadTransform(e,t){if(e.skin!=null)return;let i=b.Zero(),r=ze.Identity(),s=b.One();e.matrix?K.FromArray(e.matrix).decompose(s,r,i):(e.translation&&(i=b.FromArray(e.translation)),e.rotation&&(r=ze.FromArray(e.rotation)),e.scale&&(s=b.FromArray(e.scale))),t.position=i,t.rotationQuaternion=r,t.scaling=s}_loadSkinAsync(e,t,i,r){if(!this._parent.loadSkins)return Promise.resolve();let s=this._extensionsLoadSkinAsync(e,t,i);if(s)return s;if(i._data)return r(i._data.babylonSkeleton),i._data.promise;let a=`skeleton${i.index}`;this._babylonScene._blockEntityCollection=!!this._assetContainer;let o=new Gx(i.name||a,a,this._babylonScene);o._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,this._loadBones(e,i,o);let l=this._loadSkinInverseBindMatricesDataAsync(e,i).then(c=>{this._updateBoneMatrices(o,c)});return i._data={babylonSkeleton:o,promise:l},r(o),l}_loadBones(e,t,i){if(t.skeleton==null||this._parent.alwaysComputeSkeletonRootNode){let s=this._findSkeletonRootNode(`${e}/joints`,t.joints);if(s)if(t.skeleton===void 0)t.skeleton=s.index;else{let a=(l,c)=>{for(;c.parent;c=c.parent)if(c.parent===l)return!0;return!1},o=jt.Get(`${e}/skeleton`,this._gltf.nodes,t.skeleton);o!==s&&!a(o,s)&&(J.Warn(`${e}/skeleton: Overriding with nearest common ancestor as skeleton node is not a common root`),t.skeleton=s.index)}else J.Warn(`${e}: Failed to find common root`)}let r={};for(let s of t.joints){let a=jt.Get(`${e}/joints/${s}`,this._gltf.nodes,s);this._loadBone(a,t,i,r)}}_findSkeletonRootNode(e,t){if(t.length===0)return null;let i={};for(let s of t){let a=[],o=jt.Get(`${e}/${s}`,this._gltf.nodes,s);for(;o.index!==-1;)a.unshift(o),o=o.parent;i[s]=a}let r=null;for(let s=0;;++s){let a=i[t[0]];if(s>=a.length)return r;let o=a[s];for(let l=1;l=a.length||o!==a[s])return r;r=o}}_loadBone(e,t,i,r){e._isJoint=!0;let s=r[e.index];if(s)return s;let a=null;e.index!==t.skeleton&&(e.parent&&e.parent.index!==-1?a=this._loadBone(e.parent,t,i,r):t.skeleton!==void 0&&J.Warn(`/skins/${t.index}/skeleton: Skeleton node is not a common root`));let o=t.joints.indexOf(e.index);return s=new La(e.name||`joint${e.index}`,i,a,this._getNodeMatrix(e),null,null,o),r[e.index]=s,this._postSceneLoadActions.push(()=>{s.linkTransformNode(e._babylonTransformNode)}),s}_loadSkinInverseBindMatricesDataAsync(e,t){if(t.inverseBindMatrices==null)return Promise.resolve(null);let i=jt.Get(`${e}/inverseBindMatrices`,this._gltf.accessors,t.inverseBindMatrices);return this._loadFloatAccessorAsync(`/accessors/${i.index}`,i)}_updateBoneMatrices(e,t){for(let i of e.bones){let r=K.Identity(),s=i._index;t&&s!==-1&&(K.FromArrayToRef(t,s*16,r),r.invertToRef(r));let a=i.getParent();a&&r.multiplyToRef(a.getAbsoluteInverseBindMatrix(),r),i.updateMatrix(r,!1,!1),i._updateAbsoluteBindMatrices(void 0,!1)}}_getNodeMatrix(e){return e.matrix?K.FromArray(e.matrix):K.Compose(e.scale?b.FromArray(e.scale):b.One(),e.rotation?ze.FromArray(e.rotation):ze.Identity(),e.translation?b.FromArray(e.translation):b.Zero())}loadCameraAsync(e,t,i=()=>{}){let r=this._extensionsLoadCameraAsync(e,t,i);if(r)return r;let s=new Array;this.logOpen(`${e} ${t.name||""}`),this._babylonScene._blockEntityCollection=!!this._assetContainer;let a=new vc(t.name||`camera${t.index}`,b.Zero(),this._babylonScene,!1);switch(a._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,t._babylonCamera=a,a.setTarget(new b(0,0,-1)),t.type){case"perspective":{let o=t.perspective;if(!o)throw new Error(`${e}: Camera perspective properties are missing`);a.fov=o.yfov,a.minZ=o.znear,a.maxZ=o.zfar||0;break}case"orthographic":{if(!t.orthographic)throw new Error(`${e}: Camera orthographic properties are missing`);a.mode=ut.ORTHOGRAPHIC_CAMERA,a.orthoLeft=-t.orthographic.xmag,a.orthoRight=t.orthographic.xmag,a.orthoBottom=-t.orthographic.ymag,a.orthoTop=t.orthographic.ymag,a.minZ=t.orthographic.znear,a.maxZ=t.orthographic.zfar;break}default:throw new Error(`${e}: Invalid camera type (${t.type})`)}return n.AddPointerMetadata(a,e),this._parent.onCameraLoadedObservable.notifyObservers(a),i(a),this.logClose(),Promise.all(s).then(()=>a)}_loadAnimationsAsync(){this._parent._startPerformanceCounter("Load animations");let e=this._gltf.animations;if(!e)return Promise.resolve();let t=new Array;for(let i=0;i{s.targetedAnimations.length===0&&s.dispose()}))}return Promise.all(t).then(()=>{this._parent._endPerformanceCounter("Load animations")})}loadAnimationAsync(e,t){this._parent._startPerformanceCounter("Load animation");let i=this._extensionsLoadAnimationAsync(e,t);return i||ghe.value.then(({AnimationGroup:r})=>{this._babylonScene._blockEntityCollection=!!this._assetContainer;let s=new r(t.name||`animation${t.index}`,this._babylonScene);s._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,t._babylonAnimationGroup=s;let a=new Array;jt.Assign(t.channels),jt.Assign(t.samplers);for(let o of t.channels)a.push(this._loadAnimationChannelAsync(`${e}/channels/${o.index}`,e,t,o,(l,c)=>{l.animations=l.animations||[],l.animations.push(c),s.addTargetedAnimation(c,l)}));return this._parent._endPerformanceCounter("Load animation"),Promise.all(a).then(()=>(s.normalize(0),s))})}_loadAnimationChannelAsync(e,t,i,r,s){let a=this._extensionsLoadAnimationChannelAsync(e,t,i,r,s);if(a)return a;if(r.target.node==null)return Promise.resolve();let o=jt.Get(`${e}/target/node`,this._gltf.nodes,r.target.node),l=r.target.path,c=l==="weights";return c&&!o._numMorphTargets||!c&&!o._babylonTransformNode||!this._parent.loadNodeAnimations&&!c&&!o._isJoint?Promise.resolve():vhe.value.then(()=>{var d,u,m,_;let f;switch(l){case"translation":{f=(d=xg("/nodes/{}/translation"))==null?void 0:d.interpolation;break}case"rotation":{f=(u=xg("/nodes/{}/rotation"))==null?void 0:u.interpolation;break}case"scale":{f=(m=xg("/nodes/{}/scale"))==null?void 0:m.interpolation;break}case"weights":{f=(_=xg("/nodes/{}/weights"))==null?void 0:_.interpolation;break}default:throw new Error(`${e}/target/path: Invalid value (${r.target.path})`)}if(!f)throw new Error(`${e}/target/path: Could not find interpolation properties for target path (${r.target.path})`);let h={object:o,info:f};return this._loadAnimationChannelFromTargetInfoAsync(e,t,i,r,h,s)})}_loadAnimationChannelFromTargetInfoAsync(e,t,i,r,s,a){let o=this.parent.targetFps,l=1/o,c=jt.Get(`${e}/sampler`,i.samplers,r.sampler);return this._loadAnimationSamplerAsync(`${t}/samplers/${r.sampler}`,c).then(f=>{let h=0,d=s.object,u=s.info;for(let m of u){let _=m.getStride(d),p=f.input,g=f.output,v=new Array(p.length),x=0;switch(f.interpolation){case"STEP":{for(let A=0;A0){let A=`${i.name||`animation${i.index}`}_channel${r.index}_${h}`,S=m.buildAnimations(d,A,o,v);for(let E of S)h++,a(E.babylonAnimatable,E.babylonAnimation)}}})}_loadAnimationSamplerAsync(e,t){if(t._data)return t._data;let i=t.interpolation||"LINEAR";switch(i){case"STEP":case"LINEAR":case"CUBICSPLINE":break;default:throw new Error(`${e}/interpolation: Invalid value (${t.interpolation})`)}let r=jt.Get(`${e}/input`,this._gltf.accessors,t.input),s=jt.Get(`${e}/output`,this._gltf.accessors,t.output);return t._data=Promise.all([this._loadFloatAccessorAsync(`/accessors/${r.index}`,r),this._loadFloatAccessorAsync(`/accessors/${s.index}`,s)]).then(([a,o])=>({input:a,interpolation:i,output:o})),t._data}loadBufferAsync(e,t,i,r){let s=this._extensionsLoadBufferAsync(e,t,i,r);if(s)return s;if(!t._data)if(t.uri)t._data=this.loadUriAsync(`${e}/uri`,t,t.uri);else{if(!this._bin)throw new Error(`${e}: Uri is missing or the binary glTF is missing its binary chunk`);t._data=this._bin.readAsync(0,t.byteLength)}return t._data.then(a=>{try{return new Uint8Array(a.buffer,a.byteOffset+i,r)}catch(o){throw new Error(`${e}: ${o.message}`,{cause:o})}})}loadBufferViewAsync(e,t){let i=this._extensionsLoadBufferViewAsync(e,t);if(i)return i;if(t._data)return t._data;let r=jt.Get(`${e}/buffer`,this._gltf.buffers,t.buffer);return t._data=this.loadBufferAsync(`/buffers/${r.index}`,r,t.byteOffset||0,t.byteLength),t._data}_loadAccessorAsync(e,t,i){if(t._data)return t._data;let r=n._GetNumComponents(e,t.type),s=r*L.GetTypeByteLength(t.componentType),a=r*t.count;if(t.bufferView==null)t._data=Promise.resolve(new i(a));else{let o=jt.Get(`${e}/bufferView`,this._gltf.bufferViews,t.bufferView);t._data=this.loadBufferViewAsync(`/bufferViews/${o.index}`,o).then(l=>{if(t.componentType===5126&&!t.normalized&&(!o.byteStride||o.byteStride===s))return n._GetTypedArray(e,t.componentType,l,t.byteOffset,a);{let c=new i(a);return L.ForEach(l,t.byteOffset||0,o.byteStride||s,r,t.componentType,c.length,t.normalized||!1,(f,h)=>{c[h]=f}),c}})}if(t.sparse){let o=t.sparse;t._data=t._data.then(l=>{let c=l,f=jt.Get(`${e}/sparse/indices/bufferView`,this._gltf.bufferViews,o.indices.bufferView),h=jt.Get(`${e}/sparse/values/bufferView`,this._gltf.bufferViews,o.values.bufferView);return Promise.all([this.loadBufferViewAsync(`/bufferViews/${f.index}`,f),this.loadBufferViewAsync(`/bufferViews/${h.index}`,h)]).then(([d,u])=>{let m=n._GetTypedArray(`${e}/sparse/indices`,o.indices.componentType,d,o.indices.byteOffset,o.count),_=r*o.count,p;if(t.componentType===5126&&!t.normalized)p=n._GetTypedArray(`${e}/sparse/values`,t.componentType,u,o.values.byteOffset,_);else{let v=n._GetTypedArray(`${e}/sparse/values`,t.componentType,u,o.values.byteOffset,_);p=new i(_),L.ForEach(v,0,s,r,t.componentType,p.length,t.normalized||!1,(x,A)=>{p[A]=x})}let g=0;for(let v=0;vn._GetTypedArray(e,t.componentType,r,t.byteOffset,t.count))}return t._data}_loadVertexBufferViewAsync(e){if(e._babylonBuffer)return e._babylonBuffer;let t=this._babylonScene.getEngine();return e._babylonBuffer=this.loadBufferViewAsync(`/bufferViews/${e.index}`,e).then(i=>new Ja(t,i,!1)),e._babylonBuffer}_loadVertexAccessorAsync(e,t,i){var s;if((s=t._babylonVertexBuffer)!=null&&s[i])return t._babylonVertexBuffer[i];t._babylonVertexBuffer||(t._babylonVertexBuffer={});let r=this._babylonScene.getEngine();if(t.sparse||t.bufferView==null)t._babylonVertexBuffer[i]=this._loadFloatAccessorAsync(e,t).then(a=>new L(r,a,i,!1));else{let a=jt.Get(`${e}/bufferView`,this._gltf.bufferViews,t.bufferView);t._babylonVertexBuffer[i]=this._loadVertexBufferViewAsync(a).then(o=>{let l=n._GetNumComponents(e,t.type);return new L(r,o,i,!1,void 0,a.byteStride,void 0,t.byteOffset,l,t.componentType,t.normalized,!0,void 0,!0)})}return t._babylonVertexBuffer[i]}_loadMaterialMetallicRoughnessPropertiesAsync(e,t,i){let r=new Array,s=this._getOrCreateMaterialAdapter(i);return t&&(t.baseColorFactor?(s.baseColor=Te.FromArray(t.baseColorFactor),s.geometryOpacity=t.baseColorFactor[3]):s.baseColor=Te.White(),s.baseMetalness=t.metallicFactor==null?1:t.metallicFactor,s.specularRoughness=t.roughnessFactor==null?1:t.roughnessFactor,t.baseColorTexture&&r.push(this.loadTextureInfoAsync(`${e}/baseColorTexture`,t.baseColorTexture,a=>{a.name=`${i.name} (Base Color)`,s.baseColorTexture=a})),t.metallicRoughnessTexture&&(t.metallicRoughnessTexture.nonColorData=!0,r.push(this.loadTextureInfoAsync(`${e}/metallicRoughnessTexture`,t.metallicRoughnessTexture,a=>{a.name=`${i.name} (Metallic Roughness)`,s.baseMetalnessTexture=a,s.specularRoughnessTexture=a})),s.useRoughnessFromMetallicTextureGreen=!0,s.useMetallicFromMetallicTextureBlue=!0)),Promise.all(r).then(()=>{})}_loadMaterialAsync(e,t,i,r,s=()=>{}){let a=this._extensionsLoadMaterialAsync(e,t,i,r,s);if(a)return a;t._data=t._data||{};let o=t._data[r];if(!o){this.logOpen(`${e} ${t.name||""}`);let l=this.createMaterial(e,t,r);o={babylonMaterial:l,babylonMeshes:[],promise:this.loadMaterialPropertiesAsync(e,t,l)},t._data[r]=o,n.AddPointerMetadata(l,e),this._parent.onMaterialLoadedObservable.notifyObservers(l),this.logClose()}return i&&(o.babylonMeshes.push(i),i.onDisposeObservable.addOnce(()=>{let l=o.babylonMeshes.indexOf(i);l!==-1&&o.babylonMeshes.splice(l,1)})),s(o.babylonMaterial),o.promise.then(()=>o.babylonMaterial)}_createDefaultMaterial(e,t){if(!this._pbrMaterialImpl)throw new Error("PBR Material class not loaded");this._babylonScene._blockEntityCollection=!!this._assetContainer;let i=new this._pbrMaterialImpl.materialClass(e,this._babylonScene);i._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,i.fillMode=t,i.transparencyMode=this._pbrMaterialImpl.materialClass.MATERIAL_OPAQUE;let r=this._getOrCreateMaterialAdapter(i);return r.transparencyAsAlphaCoverage=this._parent.transparencyAsCoverage,r.baseMetalness=1,r.specularRoughness=1,i}createMaterial(e,t,i){let r=this._extensionsCreateMaterial(e,t,i);if(r)return r;let s=t.name||`material${t.index}`;return this._createDefaultMaterial(s,i)}loadMaterialPropertiesAsync(e,t,i){let r=this._extensionsLoadMaterialPropertiesAsync(e,t,i);if(r)return r;let s=new Array;return s.push(this.loadMaterialBasePropertiesAsync(e,t,i)),t.pbrMetallicRoughness&&s.push(this._loadMaterialMetallicRoughnessPropertiesAsync(`${e}/pbrMetallicRoughness`,t.pbrMetallicRoughness,i)),this.loadMaterialAlphaProperties(e,t,i),Promise.all(s).then(()=>{})}loadMaterialBasePropertiesAsync(e,t,i){let r=new Array,s=this._getOrCreateMaterialAdapter(i);s.emissionColor=t.emissiveFactor?Te.FromArray(t.emissiveFactor):new Te(0,0,0),t.doubleSided&&(s.backFaceCulling=!1,s.twoSidedLighting=!0),t.normalTexture&&(t.normalTexture.nonColorData=!0,r.push(this.loadTextureInfoAsync(`${e}/normalTexture`,t.normalTexture,c=>{var f;c.name=`${i.name} (Normal)`,s.geometryNormalTexture=c,((f=t.normalTexture)==null?void 0:f.scale)!=null&&(c.level=t.normalTexture.scale)})),s.setNormalMapInversions(!this._babylonScene.useRightHandedSystem,this._babylonScene.useRightHandedSystem));let a,o=1,l;return t.occlusionTexture&&(t.occlusionTexture.nonColorData=!0,r.push(this.loadTextureInfoAsync(`${e}/occlusionTexture`,t.occlusionTexture,c=>{c.name=`${i.name} (Occlusion)`,a=c})),t.occlusionTexture.strength!=null&&(o=t.occlusionTexture.strength)),t.emissiveTexture&&r.push(this.loadTextureInfoAsync(`${e}/emissiveTexture`,t.emissiveTexture,c=>{c.name=`${i.name} (Emissive)`,l=c})),Promise.all(r).then(()=>{a&&(s.ambientOcclusionTexture=a,s.ambientOcclusionTextureStrength=o),l&&(s.emissionColorTexture=l)})}loadMaterialAlphaProperties(e,t,i){if(!this._pbrMaterialImpl)throw new Error(`${e}: Material type not supported`);let r=this._getOrCreateMaterialAdapter(i),s=r.baseColorTexture;switch(t.alphaMode||"OPAQUE"){case"OPAQUE":{i.transparencyMode=this._pbrMaterialImpl.materialClass.MATERIAL_OPAQUE,i.alpha=1;break}case"MASK":{i.transparencyMode=this._pbrMaterialImpl.materialClass.MATERIAL_ALPHATEST,r.alphaCutOff=t.alphaCutoff==null?.5:t.alphaCutoff,s&&(s.hasAlpha=!0);break}case"BLEND":{i.transparencyMode=this._pbrMaterialImpl.materialClass.MATERIAL_ALPHABLEND,s&&(s.hasAlpha=!0,r.useAlphaFromBaseColorTexture=!0);break}default:throw new Error(`${e}/alphaMode: Invalid value (${t.alphaMode})`)}}loadTextureInfoAsync(e,t,i=()=>{}){let r=this._extensionsLoadTextureInfoAsync(e,t,i);if(r)return r;if(this.logOpen(`${e}`),t.texCoord>=6)throw new Error(`${e}/texCoord: Invalid value (${t.texCoord})`);let s=jt.Get(`${e}/index`,this._gltf.textures,t.index);s._textureInfo=t;let a=this._loadTextureAsync(`/textures/${t.index}`,s,o=>{o.coordinatesIndex=t.texCoord||0,n.AddPointerMetadata(o,e),this._parent.onTextureLoadedObservable.notifyObservers(o),i(o)});return this.logClose(),a}_loadTextureAsync(e,t,i=()=>{}){let r=this._extensionsLoadTextureAsync(e,t,i);if(r)return r;this.logOpen(`${e} ${t.name||""}`);let s=t.sampler==null?n.DefaultSampler:jt.Get(`${e}/sampler`,this._gltf.samplers,t.sampler),a=jt.Get(`${e}/source`,this._gltf.images,t.source),o=this._createTextureAsync(e,s,a,i,void 0,!t._textureInfo.nonColorData);return this.logClose(),o}_createTextureAsync(e,t,i,r=()=>{},s,a){var m,_;let o=this._loadSampler(`/samplers/${t.index}`,t),l=new Array,c=new Bx;this._babylonScene._blockEntityCollection=!!this._assetContainer;let f={noMipmap:o.noMipMaps,invertY:!1,samplingMode:o.samplingMode,onLoad:()=>{this._disposed||c.resolve()},onError:(p,g)=>{this._disposed||c.reject(new Error(`${e}: ${g&&g.message?g.message:p||"Failed to load texture"}`))},mimeType:(_=i.mimeType)!=null?_:Z3((m=i.uri)!=null?m:""),loaderOptions:s,useSRGBBuffer:!!a&&this._parent.useSRGBBuffers},h=new ge(null,this._babylonScene,f);h._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,l.push(c.promise);let d=i.uri&&!rf(i.uri)?i.uri:void 0,u=d!=null?d:`${this._fileName}#image${i.index}`;if(l.push(this.loadImageAsync(`/images/${i.index}`,i).then(p=>{let g=`data:${this._uniqueRootUrl}${u}`;h.updateURL(g,p);let v=h.getInternalTexture();v&&(v.label=i.name)})),h.wrapU=o.wrapU,h.wrapV=o.wrapV,r(h),this._parent.useGltfTextureNames){let p=i.name||d||`image${i.index}`;h.name=p}return Promise.all(l).then(()=>h)}_loadSampler(e,t){return t._data||(t._data={noMipMaps:t.minFilter===9728||t.minFilter===9729,samplingMode:n._GetTextureSamplingMode(e,t),wrapU:n._GetTextureWrapMode(`${e}/wrapS`,t.wrapS),wrapV:n._GetTextureWrapMode(`${e}/wrapT`,t.wrapT)}),t._data}loadImageAsync(e,t){if(!t._data){if(this.logOpen(`${e} ${t.name||""}`),t.uri)t._data=this.loadUriAsync(`${e}/uri`,t,t.uri);else{let i=jt.Get(`${e}/bufferView`,this._gltf.bufferViews,t.bufferView);t._data=this.loadBufferViewAsync(`/bufferViews/${i.index}`,i)}this.logClose()}return t._data}loadUriAsync(e,t,i){let r=this._extensionsLoadUriAsync(e,t,i);if(r)return r;if(!n._ValidateUri(i))throw new Error(`${e}: '${i}' is invalid`);if(rf(i)){let s=new Uint8Array(nf(i));return this.log(`${e}: Decoded ${i.substring(0,64)}... (${s.length} bytes)`),Promise.resolve(s)}return this.log(`${e}: Loading ${i}`),this._parent.preprocessUrlAsync(this._rootUrl+i).then(s=>new Promise((a,o)=>{this._parent._loadFile(this._babylonScene,s,l=>{this._disposed||(this.log(`${e}: Loaded ${i} (${l.byteLength} bytes)`),a(new Uint8Array(l)))},!0,l=>{o(new zu(`${e}: Failed to load '${i}'${l?": "+l.status+" "+l.statusText:""}`,l))})}))}static AddPointerMetadata(e,t){e.metadata=e.metadata||{};let i=e._internalMetadata=e._internalMetadata||{},r=i.gltf=i.gltf||{};(r.pointers=r.pointers||[]).push(t)}static _GetTextureWrapMode(e,t){switch(t=t==null?10497:t,t){case 33071:return ge.CLAMP_ADDRESSMODE;case 33648:return ge.MIRROR_ADDRESSMODE;case 10497:return ge.WRAP_ADDRESSMODE;default:return J.Warn(`${e}: Invalid value (${t})`),ge.WRAP_ADDRESSMODE}}static _GetTextureSamplingMode(e,t){let i=t.magFilter==null?9729:t.magFilter,r=t.minFilter==null?9987:t.minFilter;if(i===9729)switch(r){case 9728:return ge.LINEAR_NEAREST;case 9729:return ge.LINEAR_LINEAR;case 9984:return ge.LINEAR_NEAREST_MIPNEAREST;case 9985:return ge.LINEAR_LINEAR_MIPNEAREST;case 9986:return ge.LINEAR_NEAREST_MIPLINEAR;case 9987:return ge.LINEAR_LINEAR_MIPLINEAR;default:return J.Warn(`${e}/minFilter: Invalid value (${r})`),ge.LINEAR_LINEAR_MIPLINEAR}else switch(i!==9728&&J.Warn(`${e}/magFilter: Invalid value (${i})`),r){case 9728:return ge.NEAREST_NEAREST;case 9729:return ge.NEAREST_LINEAR;case 9984:return ge.NEAREST_NEAREST_MIPNEAREST;case 9985:return ge.NEAREST_LINEAR_MIPNEAREST;case 9986:return ge.NEAREST_NEAREST_MIPLINEAR;case 9987:return ge.NEAREST_LINEAR_MIPLINEAR;default:return J.Warn(`${e}/minFilter: Invalid value (${r})`),ge.NEAREST_NEAREST_MIPNEAREST}}static _GetTypedArrayConstructor(e,t){try{return aM(t)}catch(i){throw new Error(`${e}: ${i.message}`,{cause:i})}}static _GetTypedArray(e,t,i,r,s){let a=i.buffer;r=i.byteOffset+(r||0);let o=n._GetTypedArrayConstructor(`${e}/componentType`,t),l=L.GetTypeByteLength(t);return r%l!==0?(J.Warn(`${e}: Copying buffer as byte offset (${r}) is not a multiple of component type byte length (${l})`),new o(a.slice(r,r+s*l),0)):new o(a,r,s)}static _GetNumComponents(e,t){switch(t){case"SCALAR":return 1;case"VEC2":return 2;case"VEC3":return 3;case"VEC4":return 4;case"MAT2":return 4;case"MAT3":return 9;case"MAT4":return 16}throw new Error(`${e}: Invalid type (${t})`)}static _ValidateUri(e){return de.IsBase64(e)||e.indexOf("..")===-1}static _GetDrawMode(e,t){switch(t==null&&(t=4),t){case 0:return ve.PointListDrawMode;case 1:return ve.LineListDrawMode;case 2:return ve.LineLoopDrawMode;case 3:return ve.LineStripDrawMode;case 4:return ve.TriangleFillMode;case 5:return ve.TriangleStripDrawMode;case 6:return ve.TriangleFanDrawMode}throw new Error(`${e}: Invalid mesh primitive mode (${t})`)}_compileMaterialsAsync(){this._parent._startPerformanceCounter("Compile materials");let e=new Array;if(this._gltf.materials){for(let t of this._gltf.materials)if(t._data)for(let i in t._data){let r=t._data[i];for(let s of r.babylonMeshes){s.computeWorldMatrix(!0);let a=r.babylonMaterial;e.push(a.forceCompilationAsync(s)),e.push(a.forceCompilationAsync(s,{useInstances:!0})),this._parent.useClipPlane&&(e.push(a.forceCompilationAsync(s,{clipPlane:!0})),e.push(a.forceCompilationAsync(s,{clipPlane:!0,useInstances:!0})))}}}return Promise.all(e).then(()=>{this._parent._endPerformanceCounter("Compile materials")})}_compileShadowGeneratorsAsync(){this._parent._startPerformanceCounter("Compile shadow generators");let e=new Array,t=this._babylonScene.lights;for(let i of t){let r=i.getShadowGenerator();r&&e.push(r.forceCompilationAsync())}return Promise.all(e).then(()=>{this._parent._endPerformanceCounter("Compile shadow generators")})}_forEachExtensions(e){for(let t of this._extensions)t.enabled&&e(t)}_applyExtensions(e,t,i){for(let r of this._extensions)if(r.enabled){let s=`${r.name}.${t}`,a=e;a._activeLoaderExtensionFunctions=a._activeLoaderExtensionFunctions||{};let o=a._activeLoaderExtensionFunctions;if(!o[s]){o[s]=!0;try{let l=i(r);if(l)return l}finally{delete o[s]}}}return null}_extensionsOnLoading(){this._forEachExtensions(e=>e.onLoading&&e.onLoading())}_extensionsOnReady(){this._forEachExtensions(e=>e.onReady&&e.onReady())}_extensionsLoadSceneAsync(e,t){return this._applyExtensions(t,"loadScene",i=>i.loadSceneAsync&&i.loadSceneAsync(e,t))}_extensionsLoadNodeAsync(e,t,i){return this._applyExtensions(t,"loadNode",r=>r.loadNodeAsync&&r.loadNodeAsync(e,t,i))}_extensionsLoadCameraAsync(e,t,i){return this._applyExtensions(t,"loadCamera",r=>r.loadCameraAsync&&r.loadCameraAsync(e,t,i))}_extensionsLoadVertexDataAsync(e,t,i){return this._applyExtensions(t,"loadVertexData",r=>r._loadVertexDataAsync&&r._loadVertexDataAsync(e,t,i))}_extensionsLoadMeshPrimitiveAsync(e,t,i,r,s,a){return this._applyExtensions(s,"loadMeshPrimitive",o=>o._loadMeshPrimitiveAsync&&o._loadMeshPrimitiveAsync(e,t,i,r,s,a))}_extensionsLoadMaterialAsync(e,t,i,r,s){return this._applyExtensions(t,"loadMaterial",a=>a._loadMaterialAsync&&a._loadMaterialAsync(e,t,i,r,s))}_extensionsCreateMaterial(e,t,i){return this._applyExtensions(t,"createMaterial",r=>r.createMaterial&&r.createMaterial(e,t,i))}_extensionsLoadMaterialPropertiesAsync(e,t,i){return this._applyExtensions(t,"loadMaterialProperties",r=>r.loadMaterialPropertiesAsync&&r.loadMaterialPropertiesAsync(e,t,i))}_extensionsLoadTextureInfoAsync(e,t,i){return this._applyExtensions(t,"loadTextureInfo",r=>r.loadTextureInfoAsync&&r.loadTextureInfoAsync(e,t,i))}_extensionsLoadTextureAsync(e,t,i){return this._applyExtensions(t,"loadTexture",r=>r._loadTextureAsync&&r._loadTextureAsync(e,t,i))}_extensionsLoadAnimationAsync(e,t){return this._applyExtensions(t,"loadAnimation",i=>i.loadAnimationAsync&&i.loadAnimationAsync(e,t))}_extensionsLoadAnimationChannelAsync(e,t,i,r,s){return this._applyExtensions(i,"loadAnimationChannel",a=>a._loadAnimationChannelAsync&&a._loadAnimationChannelAsync(e,t,i,r,s))}_extensionsLoadSkinAsync(e,t,i){return this._applyExtensions(i,"loadSkin",r=>r._loadSkinAsync&&r._loadSkinAsync(e,t,i))}_extensionsLoadUriAsync(e,t,i){return this._applyExtensions(t,"loadUri",r=>r._loadUriAsync&&r._loadUriAsync(e,t,i))}_extensionsLoadBufferViewAsync(e,t){return this._applyExtensions(t,"loadBufferView",i=>i.loadBufferViewAsync&&i.loadBufferViewAsync(e,t))}_extensionsLoadBufferAsync(e,t,i,r){return this._applyExtensions(t,"loadBuffer",s=>s.loadBufferAsync&&s.loadBufferAsync(e,t,i,r))}static LoadExtensionAsync(e,t,i,r){if(!t.extensions)return null;let a=t.extensions[i];return a?r(`${e}/extensions/${i}`,a):null}static LoadExtraAsync(e,t,i,r){if(!t.extras)return null;let a=t.extras[i];return a?r(`${e}/extras/${i}`,a):null}isExtensionUsed(e){return!!this._gltf.extensionsUsed&&this._gltf.extensionsUsed.indexOf(e)!==-1}logOpen(e){this._parent._logOpen(e)}logClose(){this._parent._logClose()}log(e){this._parent._log(e)}startPerformanceCounter(e){this._parent._startPerformanceCounter(e)}endPerformanceCounter(e){this._parent._endPerformanceCounter(e)}};eR.DefaultSampler={index:-1};Gf._CreateGLTF2Loader=n=>new eR(n)});var tR,B7=C(()=>{tR={name:"obj",extensions:".obj"}});var sd,U7=C(()=>{zt();Gr();_c();sd=class n{constructor(){this.materials=[]}parseMTL(e,t,i,r){if(t instanceof ArrayBuffer)return;let s=t.split(` +`),a=/\s+/,o,l=null;for(let c=0;c=0?f.substring(0,h):f;d=d.toLowerCase();let u=h>=0?f.substring(h+1).trim():"";if(d==="newmtl")l&&this.materials.push(l),e._blockEntityCollection=!!r,l=new He(u,e),l._parentContainer=r,e._blockEntityCollection=!1;else if(d==="kd"&&l)o=u.split(a,3).map(parseFloat),l.diffuseColor=Te.FromArray(o);else if(d==="ka"&&l)o=u.split(a,3).map(parseFloat),l.ambientColor=Te.FromArray(o);else if(d==="ks"&&l)o=u.split(a,3).map(parseFloat),l.specularColor=Te.FromArray(o);else if(d==="ke"&&l)o=u.split(a,3).map(parseFloat),l.emissiveColor=Te.FromArray(o);else if(d==="ns"&&l)l.specularPower=parseFloat(u);else if(d==="d"&&l)l.alpha=parseFloat(u);else if(d==="map_ka"&&l)l.ambientTexture=n._GetTexture(i,u,e);else if(d==="map_kd"&&l)l.diffuseTexture=n._GetTexture(i,u,e);else if(d==="map_ks"&&l)l.specularTexture=n._GetTexture(i,u,e);else if(d!=="map_ns")if(d==="map_bump"&&l){let m=u.split(a),_=m.indexOf("-bm"),p=null;_>=0&&(p=m[_+1],m.splice(_,2)),l.bumpTexture=n._GetTexture(i,m.join(" "),e),l.bumpTexture&&p!==null&&(l.bumpTexture.level=parseFloat(p))}else d==="map_d"&&l&&(l.opacityTexture=n._GetTexture(i,u,e))}l&&this.materials.push(l)}static _GetTexture(e,t,i){if(!t)return null;let r=e;if(e==="file:"){let s=t.lastIndexOf("\\");s===-1&&(s=t.lastIndexOf("/")),s>-1?r+=t.substring(s+1):r+=t}else r+=t;return new ge(r,i,!1,n.INVERT_TEXTURE_Y)}};sd.INVERT_TEXTURE_Y=!0});var zr,V7=C(()=>{Ui();_c();zt();Ge();rA();Di();lr();Pt();zr=class n{constructor(e,t,i){this._positions=[],this._normals=[],this._uvs=[],this._colors=[],this._extColors=[],this._meshesFromObj=[],this._indicesForBabylon=[],this._wrappedPositionForBabylon=[],this._wrappedUvsForBabylon=[],this._wrappedColorsForBabylon=[],this._wrappedNormalsForBabylon=[],this._tuplePosNorm=[],this._curPositionInIndices=0,this._hasMeshes=!1,this._unwrappedPositionsForBabylon=[],this._unwrappedColorsForBabylon=[],this._unwrappedNormalsForBabylon=[],this._unwrappedUVForBabylon=[],this._triangles=[],this._materialNameFromObj="",this._objMeshName="",this._increment=1,this._isFirstMaterial=!0,this._grayColor=new lt(.5,.5,.5,1),this._hasLineData=!1,this._materialToUse=e,this._babylonMeshesArray=t,this._loadingOptions=i}_isInArray(e,t){e[t[0]]||(e[t[0]]={normals:[],idx:[]});let i=e[t[0]].normals.indexOf(t[1]);return i===-1?-1:e[t[0]].idx[i]}_isInArrayUV(e,t){e[t[0]]||(e[t[0]]={normals:[],idx:[],uv:[]});let i=e[t[0]].normals.indexOf(t[1]);return i!=1&&t[2]===e[t[0]].uv[i]?e[t[0]].idx[i]:-1}_setData(e){var i,r;(i=e.indiceUvsFromObj)!=null||(e.indiceUvsFromObj=-1),(r=e.indiceNormalFromObj)!=null||(e.indiceNormalFromObj=-1);let t;this._loadingOptions.optimizeWithUV?t=this._isInArrayUV(this._tuplePosNorm,[e.indicePositionFromObj,e.indiceNormalFromObj,e.indiceUvsFromObj]):t=this._isInArray(this._tuplePosNorm,[e.indicePositionFromObj,e.indiceNormalFromObj]),t===-1?(this._indicesForBabylon.push(this._wrappedPositionForBabylon.length),this._wrappedPositionForBabylon.push(e.positionVectorFromOBJ),e.textureVectorFromOBJ!==void 0&&this._wrappedUvsForBabylon.push(e.textureVectorFromOBJ),e.normalsVectorFromOBJ!==void 0&&this._wrappedNormalsForBabylon.push(e.normalsVectorFromOBJ),e.positionColorsFromOBJ!==void 0&&this._wrappedColorsForBabylon.push(e.positionColorsFromOBJ),this._tuplePosNorm[e.indicePositionFromObj].normals.push(e.indiceNormalFromObj),this._tuplePosNorm[e.indicePositionFromObj].idx.push(this._curPositionInIndices++),this._loadingOptions.optimizeWithUV&&this._tuplePosNorm[e.indicePositionFromObj].uv.push(e.indiceUvsFromObj)):this._indicesForBabylon.push(t)}_unwrapData(){try{for(let e=0;e0&&(this._handledMesh=this._meshesFromObj[this._meshesFromObj.length-1],this._unwrapData(),this._loadingOptions.useLegacyBehavior&&this._indicesForBabylon.reverse(),this._handledMesh.indices=this._indicesForBabylon.slice(),this._handledMesh.positions=this._unwrappedPositionsForBabylon.slice(),this._unwrappedNormalsForBabylon.length&&(this._handledMesh.normals=this._unwrappedNormalsForBabylon.slice()),this._unwrappedUVForBabylon.length&&(this._handledMesh.uvs=this._unwrappedUVForBabylon.slice()),this._unwrappedColorsForBabylon.length&&(this._handledMesh.colors=this._unwrappedColorsForBabylon.slice()),this._handledMesh.hasLines=this._hasLineData,this._indicesForBabylon.length=0,this._unwrappedPositionsForBabylon.length=0,this._unwrappedColorsForBabylon.length=0,this._unwrappedNormalsForBabylon.length=0,this._unwrappedUVForBabylon.length=0,this._hasLineData=!1)}_optimizeNormals(e){let t=e.getVerticesData(L.PositionKind),i=e.getVerticesData(L.NormalKind),r={};if(!t||!i)return;for(let a=0;athis._triangles.push(d[0],d[u],d[u+1]),this._handednessSign=1):i.useRightHandedSystem?(this._pushTriangle=(d,u)=>this._triangles.push(d[0],d[u+1],d[u]),this._handednessSign=1):(this._pushTriangle=(d,u)=>this._triangles.push(d[0],d[u],d[u+1]),this._handednessSign=-1);let a=t.split(` +`),o=[],l=[];o.push(l);for(let d=0;d=7){let _=parseFloat(m[4]),p=parseFloat(m[5]),g=parseFloat(m[6]);this._colors.push(new lt(_>1?_/255:_,p>1?p/255:p,g>1?g/255:g,m.length===7||m[7]===void 0?1:parseFloat(m[7])))}else this._colors.push(this._grayColor)}else if((m=n.NormalPattern.exec(u))!==null)this._normals.push(new b(parseFloat(m[1]),parseFloat(m[2]),parseFloat(m[3])));else if((m=n.UVPattern.exec(u))!==null)this._uvs.push(new Ne(parseFloat(m[1])*this._loadingOptions.UVScaling.x,parseFloat(m[2])*this._loadingOptions.UVScaling.y));else if((m=n.FacePattern3.exec(u))!==null)this._setDataForCurrentFaceWithPattern3(m[1].trim().split(" "),1);else if((m=n.FacePattern4.exec(u))!==null)this._setDataForCurrentFaceWithPattern4(m[1].trim().split(" "),1);else if((m=n.FacePattern5.exec(u))!==null)this._setDataForCurrentFaceWithPattern5(m[1].trim().split(" "),1);else if((m=n.FacePattern2.exec(u))!==null)this._setDataForCurrentFaceWithPattern2(m[1].trim().split(" "),1);else if((m=n.FacePattern1.exec(u))!==null)this._setDataForCurrentFaceWithPattern1(m[1].trim().split(" "),1);else if((m=n.LinePattern1.exec(u))!==null)this._setDataForCurrentFaceWithPattern1(m[1].trim().split(" "),0),this._hasLineData=!0;else if((m=n.LinePattern2.exec(u))!==null)this._setDataForCurrentFaceWithPattern2(m[1].trim().split(" "),0),this._hasLineData=!0;else if(m=n._GetZbrushMRGB(u,!this._loadingOptions.importVertexColors))for(let _ of m)this._extColors.push(_);else if((m=n.LinePattern3.exec(u))!==null)this._setDataForCurrentFaceWithPattern3(m[1].trim().split(" "),0),this._hasLineData=!0;else if(n.GroupDescriptor.test(u)||n.ObjectDescriptor.test(u)){let _={name:u.substring(2).trim(),indices:null,positions:null,normals:null,uvs:null,colors:null,materialName:this._materialNameFromObj,isObject:n.ObjectDescriptor.test(u)};this._addPreviousObjMesh(),this._meshesFromObj.push(_),this._hasMeshes=!0,this._isFirstMaterial=!0,this._increment=1}else if(n.UseMtlDescriptor.test(u)){if(this._materialNameFromObj=u.substring(7).trim(),!this._isFirstMaterial||!this._hasMeshes){this._addPreviousObjMesh();let _={name:(this._objMeshName||"mesh")+"_mm"+this._increment.toString(),indices:null,positions:null,normals:null,uvs:null,colors:null,materialName:this._materialNameFromObj,isObject:!1};this._increment++,this._meshesFromObj.push(_),this._hasMeshes=!0}this._hasMeshes&&this._isFirstMaterial&&(this._meshesFromObj[this._meshesFromObj.length-1].materialName=this._materialNameFromObj,this._isFirstMaterial=!1)}else n.MtlLibGroupDescriptor.test(u)?s(u.substring(7).trim()):n.SmoothDescriptor.test(u)||J.Log("Unhandled expression at line : "+u)}if(this._hasMeshes&&(this._handledMesh=this._meshesFromObj[this._meshesFromObj.length-1],this._loadingOptions.useLegacyBehavior&&this._indicesForBabylon.reverse(),this._unwrapData(),this._handledMesh.indices=this._indicesForBabylon,this._handledMesh.positions=this._unwrappedPositionsForBabylon,this._unwrappedNormalsForBabylon.length&&(this._handledMesh.normals=this._unwrappedNormalsForBabylon),this._unwrappedUVForBabylon.length&&(this._handledMesh.uvs=this._unwrappedUVForBabylon),this._unwrappedColorsForBabylon.length&&(this._handledMesh.colors=this._unwrappedColorsForBabylon),this._handledMesh.hasLines=this._hasLineData),!this._hasMeshes){let d=null;if(this._indicesForBabylon.length)this._loadingOptions.useLegacyBehavior&&this._indicesForBabylon.reverse(),this._unwrapData();else{for(let u of this._positions)this._unwrappedPositionsForBabylon.push(u.x,u.y,u.z);if(this._normals.length)for(let u of this._normals)this._unwrappedNormalsForBabylon.push(u.x,u.y,u.z);if(this._uvs.length)for(let u of this._uvs)this._unwrappedUVForBabylon.push(u.x,u.y);if(this._extColors.length)for(let u of this._extColors)this._unwrappedColorsForBabylon.push(u.r,u.g,u.b,u.a);else if(this._colors.length)for(let u of this._colors)this._unwrappedColorsForBabylon.push(u.r,u.g,u.b,u.a);this._materialNameFromObj||(d=new He(hn.RandomId(),i),d.pointsCloud=!0,this._materialNameFromObj=d.name,this._normals.length||(d.disableLighting=!0,d.emissiveColor=Te.White()))}this._meshesFromObj.push({name:hn.RandomId(),indices:this._indicesForBabylon,positions:this._unwrappedPositionsForBabylon,colors:this._unwrappedColorsForBabylon,normals:this._unwrappedNormalsForBabylon,uvs:this._unwrappedUVForBabylon,materialName:this._materialNameFromObj,directMaterial:d,isObject:!0,hasLines:this._hasLineData})}for(let d=0;d=0;--_)if(this._meshesFromObj[_].isObject&&this._meshesFromObj[_]._babylonMesh){u.parent=this._meshesFromObj[_]._babylonMesh;break}}if(this._materialToUse.push(this._meshesFromObj[d].materialName),this._handledMesh.hasLines&&((f=u._internalMetadata)!=null||(u._internalMetadata={}),u._internalMetadata._isLine=!0),((h=this._handledMesh.positions)==null?void 0:h.length)===0){this._babylonMeshesArray.push(u);continue}let m=new Ie;if(m.indices=this._handledMesh.indices,m.positions=this._handledMesh.positions,this._loadingOptions.computeNormals||!this._handledMesh.normals){let _=new Array;Ie.ComputeNormals(this._handledMesh.positions,this._handledMesh.indices,_),m.normals=_}else m.normals=this._handledMesh.normals;this._handledMesh.uvs&&(m.uvs=this._handledMesh.uvs),this._handledMesh.colors&&(m.colors=this._handledMesh.colors),m.applyToMesh(u),this._loadingOptions.invertY&&(u.scaling.y*=-1),this._loadingOptions.optimizeNormals&&this._optimizeNormals(u),this._babylonMeshesArray.push(u),this._handledMesh.directMaterial&&(u.material=this._handledMesh.directMaterial)}}};zr.ObjectDescriptor=/^o/;zr.GroupDescriptor=/^g/;zr.MtlLibGroupDescriptor=/^mtllib /;zr.UseMtlDescriptor=/^usemtl /;zr.SmoothDescriptor=/^s /;zr.VertexPattern=/^v(\s+[\d|.|+|\-|e|E]+){3,7}/;zr.NormalPattern=/^vn(\s+[\d|.|+|\-|e|E]+)( +[\d|.|+|\-|e|E]+)( +[\d|.|+|\-|e|E]+)/;zr.UVPattern=/^vt(\s+[\d|.|+|\-|e|E]+)( +[\d|.|+|\-|e|E]+)/;zr.FacePattern1=/^f\s+(([\d]{1,}[\s]?){3,})+/;zr.FacePattern2=/^f\s+((([\d]{1,}\/[\d]{1,}[\s]?){3,})+)/;zr.FacePattern3=/^f\s+((([\d]{1,}\/[\d]{1,}\/[\d]{1,}[\s]?){3,})+)/;zr.FacePattern4=/^f\s+((([\d]{1,}\/\/[\d]{1,}[\s]?){3,})+)/;zr.FacePattern5=/^f\s+(((-[\d]{1,}\/-[\d]{1,}\/-[\d]{1,}[\s]?){3,})+)/;zr.LinePattern1=/^l\s+(([\d]{1,}[\s]?){2,})+/;zr.LinePattern2=/^l\s+((([\d]{1,}\/[\d]{1,}[\s]?){2,})+)/;zr.LinePattern3=/^l\s+((([\d]{1,}\/[\d]{1,}\/[\d]{1,}[\s]?){2,})+)/});var G7={};$e(G7,{OBJFileLoader:()=>js});var js,PL=C(()=>{Ge();Ci();Um();Sg();B7();U7();V7();_c();js=class n{static get INVERT_TEXTURE_Y(){return sd.INVERT_TEXTURE_Y}static set INVERT_TEXTURE_Y(e){sd.INVERT_TEXTURE_Y=e}constructor(e){this.name=tR.name,this.extensions=tR.extensions,this._assetContainer=null,this._loadingOptions={...n._DefaultLoadingOptions,...e!=null?e:{}}}static get _DefaultLoadingOptions(){return{computeNormals:n.COMPUTE_NORMALS,optimizeNormals:n.OPTIMIZE_NORMALS,importVertexColors:n.IMPORT_VERTEX_COLORS,invertY:n.INVERT_Y,invertTextureY:n.INVERT_TEXTURE_Y,UVScaling:n.UV_SCALING,materialLoadingFailsSilently:n.MATERIAL_LOADING_FAILS_SILENTLY,optimizeWithUV:n.OPTIMIZE_WITH_UV,skipMaterials:n.SKIP_MATERIALS,useLegacyBehavior:n.USE_LEGACY_BEHAVIOR}}_loadMTL(e,t,i,r){let s=t+e;de.LoadFile(s,i,void 0,void 0,!1,(a,o)=>{r(s,o)})}createPlugin(e){return new n(e[tR.name])}canDirectLoad(){return!1}importMeshAsync(e,t,i,r){return this._parseSolidAsync(e,t,i,r).then(s=>({meshes:s,particleSystems:[],skeletons:[],animationGroups:[],transformNodes:[],geometries:[],lights:[],spriteManagers:[]}))}loadAsync(e,t,i){return this.importMeshAsync(null,e,t,i).then(()=>{})}loadAssetContainerAsync(e,t,i){let r=new ll(e);return this._assetContainer=r,this.importMeshAsync(null,e,t,i).then(s=>(s.meshes.forEach(a=>r.meshes.push(a)),s.meshes.forEach(a=>{let o=a.material;o&&r.materials.indexOf(o)==-1&&(r.materials.push(o),o.getActiveTextures().forEach(c=>{r.textures.indexOf(c)==-1&&r.textures.push(c)}))}),this._assetContainer=null,r)).catch(s=>{throw this._assetContainer=null,s})}_parseSolidAsync(e,t,i,r){let s="",a=new sd,o=[],l=[];i=i.replace(/#.*$/gm,"").trim(),new zr(o,l,this._loadingOptions).parse(e,i,t,this._assetContainer,h=>{s=h});let f=[];return s!==""&&!this._loadingOptions.skipMaterials&&f.push(new Promise((h,d)=>{this._loadMTL(s,r,u=>{try{a.parseMTL(t,u,r,this._assetContainer);for(let m=0;m-1;)p.push(g),_=g+1;if(g===-1&&p.length===0)a.materials[m].dispose();else for(let v=0;v{de.Warn(`Error downloading MTL file: '${s}'`),this._loadingOptions.materialLoadingFailsSilently?h():d(m)})})),Promise.all(f).then(()=>{let h=d=>{var u,m;return!!((m=(u=d._internalMetadata)==null?void 0:u._isLine)!=null&&m)};return l.forEach(d=>{var u,m;if(h(d)){let _=(u=d.material)!=null?u:new He(d.name+"_line",t);_.getBindedMeshes().filter(g=>!h(g)).length>0&&(_=(m=_.clone(_.name+"_line"))!=null?m:_),_.wireframe=!0,d.material=_,d._internalMetadata&&(d._internalMetadata._isLine=void 0)}}),l})}};js.OPTIMIZE_WITH_UV=!0;js.INVERT_Y=!1;js.IMPORT_VERTEX_COLORS=!1;js.COMPUTE_NORMALS=!1;js.OPTIMIZE_NORMALS=!1;js.UV_SCALING=new Ne(1,1);js.SKIP_MATERIALS=!1;js.MATERIAL_LOADING_FAILS_SILENTLY=!0;js.USE_LEGACY_BEHAVIOR=!1;Vf(new js)});function She(n){let e=n.trim();return/^https?:\/\//i.test(e)||/^wss?:\/\//i.test(e)||/^\/\//.test(e)}function DL(n,e){if(She(n))throw new Error(`[AI3D] Babylon ${e} is limited to local vault resources. Refused remote URL: ${n}`);return n}function iR(n){throw new Error(`[AI3D] Babylon script loading is disabled in this plugin build. Refused script URL: ${n}`)}function W7(){if(k7)return;let n=i=>DL(i,"asset loading"),e=i=>DL(i,"script loading"),t=()=>-1;de.PreprocessUrl=n,de.ScriptPreprocessUrl=e,de.DefaultRetryStrategy=t,de.LoadScript=(i,r,s)=>{try{e(i),iR(i)}catch(a){s==null||s(a instanceof Error?a.message:String(a),a);return}r==null||r()},de.LoadScriptAsync=async i=>{e(i),iR(i)},de.LoadBabylonScript=(i,r,s)=>{try{iR(i)}catch(a){s==null||s(a instanceof Error?a.message:String(a),a);return}r()},de.LoadBabylonScriptAsync=async i=>{iR(i)},Bi.PreprocessUrl=n,Bi.ScriptPreprocessUrl=e,Bi.DefaultRetryStrategy=t,br.CustomRequestModifiers.push((i,r)=>DL(r,"request")),k7=!0}var k7,H7=C(()=>{"use strict";Bl();Ci();yh();k7=!1});function rR(n,e){if(e.byteLength<84)throw new Error(`STL buffer too small: ${e.byteLength} bytes (need 84+)`);if(e.byteLength>=6){let _=new TextDecoder().decode(new Uint8Array(e,0,6));if(_==="solid "||_===`solid +`){let p=new TextDecoder().decode(new Uint8Array(e,0,Math.min(e.byteLength,800)));if(p.includes("facet")||p.includes("endsolid"))throw new Error("ASCII STL detected \u2014 only binary STL is supported. Convert to binary STL first.")}}let t=new DataView(e),i=t.getUint32(80,!0);if(i===0)throw new Error("STL file contains 0 triangles");let r=84+i*50;if(e.byteLength>0&31)/31,N=(v>>5&31)/31,F=(v>>10&31)/31,U=_*12;l[U+0]=V,l[U+1]=N,l[U+2]=F,l[U+3]=1,l[U+4]=V,l[U+5]=N,l[U+6]=F,l[U+7]=1,l[U+8]=V,l[U+9]=N,l[U+10]=F,l[U+11]=1}let x=a[p+3]-a[p+0],A=a[p+4]-a[p+1],S=a[p+5]-a[p+2],E=a[p+6]-a[p+0],R=a[p+7]-a[p+1],I=a[p+8]-a[p+2],y=A*I-S*R,M=S*E-x*I,D=x*R-A*E,O=Math.sqrt(y*y+M*M+D*D);O>1e-8?(y/=O,M/=O,D/=O):(y=0,M=0,D=1,f++),o[p+0]=y,o[p+1]=M,o[p+2]=D,o[p+3]=y,o[p+4]=M,o[p+5]=D,o[p+6]=y,o[p+7]=M,o[p+8]=D,c[g+0]=p/3+0,c[g+1]=p/3+1,c[g+2]=p/3+2}f>0&&console.warn(`[AI3D STL] ${f} degenerate triangles with zero-area normals`);let d=new Ie;d.positions=a,d.normals=o,d.indices=c,l&&(d.colors=l);let u=new j("stl-model",n);d.applyToMesh(u);let m=new He("stl-mat",n);return m.backFaceCulling=!1,m.specularColor=new Te(.3,.3,.3),m.specularPower=32,l?(m.diffuseColor=new Te(1,1,1),m.emissiveColor=new Te(.05,.05,.05),m.vertexColorEnabled=!0):(m.diffuseColor=new Te(.85,.85,.85),m.emissiveColor=new Te(.1,.1,.1)),u.material=m,u}function z7(n,e){return rR(n,e)}function X7(n){n(The)}var The,LL=C(()=>{"use strict";Di();Sg();lr();_c();zt();The={name:"stl",extensions:".stl",importMeshAsync(n,e,t){return Promise.resolve().then(()=>({meshes:[rR(e,t)],particleSystems:[],skeletons:[],animationGroups:[],transformNodes:[],geometries:[],lights:[],spriteManagers:[]}))},loadAsync(n,e){return Promise.resolve().then(()=>{rR(n,e)})},loadAssetContainerAsync(n,e){return Promise.resolve().then(()=>{let t=rR(n,e),i=new ll(n);return i.meshes.push(t),t.material&&i.materials.push(t.material),i})},canDirectLoad(){return!1},rewriteRootURL(n){return n}}});function Ahe(n){let e=n.split(` +`),t=[],i="binary_little_endian",r=null;for(let s of e){let a=s.trim();if(a==="end_header")break;if(a==="ply"||a===""||a.startsWith("comment"))continue;let o=a.split(/\s+/),l=o[0];l==="format"?i=o[1]:l==="element"?(r={name:o[1],count:parseInt(o[2],10),properties:[]},t.push(r)):l==="property"&&r&&(o[1]==="list"?r.properties.push({name:o[4],type:"list",isList:!0,countType:o[2],itemType:o[3]}):r.properties.push({name:o[2],type:o[1],isList:!1}))}return{format:i,elements:t}}function jm(n){switch(n){case"uchar":case"uint8":return 1;case"char":case"int8":return 1;case"ushort":case"uint16":return 2;case"short":case"int16":return 2;case"uint":case"uint32":return 4;case"int":case"int32":return 4;case"float":case"float32":return 4;case"double":case"float64":return 8;default:return 4}}function nR(n,e,t,i){switch(t){case"uchar":case"uint8":return n.getUint8(e);case"char":case"int8":return n.getInt8(e);case"ushort":case"uint16":return n.getUint16(e,i);case"short":case"int16":return n.getInt16(e,i);case"uint":case"uint32":return n.getUint32(e,i);case"int":case"int32":return n.getInt32(e,i);case"float":case"float32":return n.getFloat32(e,i);case"double":case"float64":return n.getFloat64(e,i);default:return 0}}function xhe(n,e,t,i){let r=i,s=new DataView(n),a=[],o=[],l=[],c=e.elements.find(h=>h.name==="vertex"),f=e.elements.find(h=>h.name==="face");if(c){let h=c.properties.some(u=>u.name==="x"),d=c.properties.some(u=>u.name==="red"||u.name==="r");for(let u=0;ud.name==="vertex"),c=e.elements.find(d=>d.name==="face"),f=0;if(l){let d=l.properties.some(_=>_.name==="x"),u=l.properties.some(_=>_.name==="red"||_.name==="r"),m=l.properties.filter(_=>!_.isList);for(let _=0;_0){c.indices=o.indices;let d=new Array(l.length).fill(0),u=o.indices,m=l.length-3;for(let _=0;_m||g>m||v>m)continue;let x=l[p],A=l[p+1],S=l[p+2],E=l[g]-x,R=l[g+1]-A,I=l[g+2]-S,y=l[v]-x,M=l[v+1]-A,D=l[v+2]-S,O=R*D-I*M,V=I*y-E*D,N=E*M-R*y;d[p]+=O,d[p+1]+=V,d[p+2]+=N,d[g]+=O,d[g+1]+=V,d[g+2]+=N,d[v]+=O,d[v+1]+=V,d[v+2]+=N}for(let _=0;_0&&(d[_]/=p,d[_+1]/=p,d[_+2]/=p)}c.normals=d}else{let d=o.positions.length/3,u=[];for(let m=0;m=3&&u.push(0,1,2),c.indices=u}let f=new j("ply-model",n);c.applyToMesh(f);let h=new He("ply-mat",n);return h.backFaceCulling=!1,o.colors.length>0?(c.colors=o.colors,c.applyToMesh(f),h.diffuseColor=new Te(1,1,1),h.vertexColorEnabled=!0):h.diffuseColor=new Te(.7,.7,.7),f.material=h,f}function Y7(n,e){return sR(n,e)}function K7(n){n(bhe)}var bhe,OL=C(()=>{"use strict";Di();Sg();lr();_c();zt();bhe={name:"ply",extensions:".ply",importMeshAsync(n,e,t){return Promise.resolve().then(()=>({meshes:[sR(e,t)],particleSystems:[],skeletons:[],animationGroups:[],transformNodes:[],geometries:[],lights:[],spriteManagers:[]}))},loadAsync(n,e){return Promise.resolve().then(()=>{sR(n,e)})},loadAssetContainerAsync(n,e){return Promise.resolve().then(()=>{let t=sR(n,e),i=new ll(n);return i.meshes.push(t),t.material&&i.materials.push(t.material),i})},canDirectLoad(){return!1},rewriteRootURL(n){return n}}});async function yg(){j7||(W7(),X7(Vf),K7(Vf),j7=!0)}var j7,Pg=C(()=>{"use strict";nD();F7();PL();Um();H7();LL();OL();j7=!1});function Dg(n){return Math.floor(n.getTotalIndices()/3)}function ad(n){return n.getTotalVertices()}function od(n,e=[]){let t=[n,...e,...n.getChildMeshes(!0)],i=new Set;return t.filter(r=>!r||i.has(r)||r.isDisposed()?!1:(i.add(r),ad(r)>0||r.getTotalIndices()>0))}function q7(n){let e=Array.from(n),t=new Set(e);return e.filter(i=>{let r=i.parent;return!r||!t.has(r)})}function NL(n){n.computeWorldMatrix(!0);let e=n.getBoundingInfo().boundingBox;return c_(Ht(e.minimumWorld),Ht(e.maximumWorld))}function qm(n){let e=null;for(let t of n)!t||t.isDisposed()||(e=d1(e,NL(t)));return e}function aR(n,e=[]){var t;return(t=qm(od(n,e)))!=null?t:NL(n)}function oR(n,e,t,i={}){return pS({rootName:n,boundingSize:an(e),meshes:t.map(r=>({triangleCount:Dg(r),vertexCount:ad(r),materialKeys:r.material?[r.material.name]:[]})),splatCount:i.splatCount,resourceWarnings:i.resourceWarnings})}function Z7(n){var t,i;let e=NL(n);return Eh({name:n.name||`mesh-${n.uniqueId}`,triangleCount:Dg(n),vertexCount:ad(n),materialName:(i=(t=n.material)==null?void 0:t.name)!=null?i:null,boundingSize:an(e),center:on(e)})}var lR=C(()=>{"use strict";Zc();ys();h_()});function Hf(n){return Yr(n)}function Q7(n,e,t,i=[]){AS(new cR(n,i),e,t)}function wL(n,e=[]){xS(new cR(n,e))}var cR,$7=C(()=>{"use strict";Ge();Zc();ys();CI();lR();cR=class{constructor(e,t=[]){this.rootMesh=e,this.loadedMeshes=t}getParts(){return od(this.rootMesh,this.loadedMeshes)}getRootCenter(){return on(aR(this.rootMesh,this.loadedMeshes))}getPartPosition(e){return Ht(e.position)}getPartCenter(e){return Ht(e.getBoundingInfo().boundingBox.centerWorld)}setPartPosition(e,t){e.position=new b(t.x,t.y,t.z)}getPartState(e){let t=e.metadata;return t!=null&&t._previewExplodeState?{originalPosition:Hf(t._previewExplodeState.originalPosition),originalCenter:Hf(t._previewExplodeState.originalCenter)}:t!=null&&t._originalPos&&(t!=null&&t._originalCenter)?{originalPosition:Hf(t._originalPos),originalCenter:Hf(t._originalCenter)}:null}setPartState(e,t){(!e.metadata||typeof e.metadata!="object")&&(e.metadata={});let i=e.metadata;i._previewExplodeState={originalPosition:Hf(t.originalPosition),originalCenter:Hf(t.originalCenter)},i._originalPos=Hf(t.originalPosition),i._originalCenter=Hf(t.originalCenter)}}});var fR={};$e(fR,{glowBlurPostProcessPixelShaderWGSL:()=>Ihe});var FL,J7,Ihe,hR=C(()=>{G();FL="glowBlurPostProcessPixelShader",J7=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_2d;uniform screenSize: vec2f;uniform direction: vec2f;uniform blurWidth: f32;fn getLuminance(color: vec3f)->f32 {return dot(color, vec3f(0.2126,0.7152,0.0722));} #define CUSTOM_FRAGMENT_DEFINITIONS @fragment fn main(input: FragmentInputs)->FragmentOutputs {var weights: array;weights[0]=0.05;weights[1]=0.1;weights[2]=0.2;weights[3]=0.3;weights[4]=0.2;weights[5]=0.1;weights[6]=0.05;var texelSize: vec2f= vec2f(1.0/uniforms.screenSize.x,1.0/uniforms.screenSize.y);var texelStep: vec2f=texelSize*uniforms.direction*uniforms.blurWidth;var start: vec2f=input.vUV-3.0*texelStep;var baseColor: vec4f= vec4f(0.,0.,0.,0.);var texelOffset: vec2f= vec2f(0.,0.);for (var i: i32=0; i<7; i++) {var texel: vec4f=textureSample(textureSampler,textureSamplerSampler,start+texelOffset);baseColor=vec4f(baseColor.rgb,baseColor.a+texel.a*weights[i]);var luminance: f32=getLuminance(baseColor.rgb);var luminanceTexel: f32=getLuminance(texel.rgb);var choice: f32=step(luminanceTexel,luminance);baseColor=vec4f(choice*baseColor.rgb+(1.0-choice)*texel.rgb,baseColor.a);texelOffset+=texelStep;} -fragmentOutputs.color=baseColor;}`;S.ShadersStoreWGSL[IL]||(S.ShadersStoreWGSL[IL]=W7);nhe={name:IL,shader:W7}});var nR={};et(nR,{glowBlurPostProcessPixelShader:()=>she});var ML,H7,she,sR=C(()=>{k();ML="glowBlurPostProcessPixelShader",H7=`varying vec2 vUV;uniform sampler2D textureSampler;uniform vec2 screenSize;uniform vec2 direction;uniform float blurWidth;float getLuminance(vec3 color) +fragmentOutputs.color=baseColor;}`;T.ShadersStoreWGSL[FL]||(T.ShadersStoreWGSL[FL]=J7);Ihe={name:FL,shader:J7}});var dR={};$e(dR,{glowBlurPostProcessPixelShader:()=>Mhe});var BL,e9,Mhe,uR=C(()=>{G();BL="glowBlurPostProcessPixelShader",e9=`varying vec2 vUV;uniform sampler2D textureSampler;uniform vec2 screenSize;uniform vec2 direction;uniform float blurWidth;float getLuminance(vec3 color) {return dot(color,vec3(0.2126,0.7152,0.0722));} #define CUSTOM_FRAGMENT_DEFINITIONS void main(void) {float weights[7];weights[0]=0.05;weights[1]=0.1;weights[2]=0.2;weights[3]=0.3;weights[4]=0.2;weights[5]=0.1;weights[6]=0.05;vec2 texelSize=vec2(1.0/screenSize.x,1.0/screenSize.y);vec2 texelStep=texelSize*direction*blurWidth;vec2 start=vUV-3.0*texelStep;vec4 baseColor=vec4(0.,0.,0.,0.);vec2 texelOffset=vec2(0.,0.);for (int i=0; i<7; i++) {vec4 texel=texture2D(textureSampler,start+texelOffset);baseColor.a+=texel.a*weights[i];float luminance=getLuminance(baseColor.rgb);float luminanceTexel=getLuminance(texel.rgb);float choice=step(luminanceTexel,luminance);baseColor.rgb=choice*baseColor.rgb+(1.0-choice)*texel.rgb;texelOffset+=texelStep;} -gl_FragColor=baseColor;}`;S.ShadersStore[ML]||(S.ShadersStore[ML]=H7);she={name:ML,shader:H7}});var X7={};et(X7,{glowMapGenerationVertexShaderWGSL:()=>ahe});var CL,z7,ahe,Y7=C(()=>{k();ql();Zl();Mf();Cf();Ql();Rf();yf();Pf();Jl();$l();ec();tc();CL="glowMapGenerationVertexShader",z7=`attribute position: vec3f; +gl_FragColor=baseColor;}`;T.ShadersStore[BL]||(T.ShadersStore[BL]=e9);Mhe={name:BL,shader:e9}});var i9={};$e(i9,{glowMapGenerationVertexShaderWGSL:()=>Che});var UL,t9,Che,r9=C(()=>{G();Ql();$l();Pf();Df();Jl();Mf();Lf();Of();ec();tc();ic();rc();UL="glowMapGenerationVertexShader",t9=`attribute position: vec3f; #include #include #include @@ -23489,7 +23489,7 @@ vertexOutputs.vUVEmissive= (uniforms.emissiveMatrix* vec4f(uv2Updated,1.0,0.0)). vertexOutputs.vColor=vertexInputs.color; #endif #include -}`;S.ShadersStoreWGSL[CL]||(S.ShadersStoreWGSL[CL]=z7);ahe={name:CL,shader:z7}});var j7={};et(j7,{glowMapGenerationPixelShaderWGSL:()=>ohe});var yL,K7,ohe,q7=C(()=>{k();Sa();ic();rc();yL="glowMapGenerationPixelShader",K7=`#if defined(DIFFUSE_ISLINEAR) || defined(EMISSIVE_ISLINEAR) +}`;T.ShadersStoreWGSL[UL]||(T.ShadersStoreWGSL[UL]=t9);Che={name:UL,shader:t9}});var s9={};$e(s9,{glowMapGenerationPixelShaderWGSL:()=>yhe});var VL,n9,yhe,a9=C(()=>{G();Ra();nc();sc();VL="glowMapGenerationPixelShader",n9=`#if defined(DIFFUSE_ISLINEAR) || defined(EMISSIVE_ISLINEAR) #include #endif #ifdef DIFFUSE @@ -23551,7 +23551,7 @@ fragmentOutputs.color=finalColor*uniforms.glowIntensity; fragmentOutputs.color=vec4f(fragmentOutputs.color.rgb,uniforms.glowColor.a); #endif } -`;S.ShadersStoreWGSL[yL]||(S.ShadersStoreWGSL[yL]=K7);ohe={name:yL,shader:K7}});var Q7={};et(Q7,{glowMapGenerationVertexShader:()=>lhe});var PL,Z7,lhe,J7=C(()=>{k();nc();sc();Df();Lf();ac();bf();Of();Nf();oc();lc();cc();fc();PL="glowMapGenerationVertexShader",Z7=`attribute vec3 position; +`;T.ShadersStoreWGSL[VL]||(T.ShadersStoreWGSL[VL]=n9);yhe={name:VL,shader:n9}});var l9={};$e(l9,{glowMapGenerationVertexShader:()=>Phe});var GL,o9,Phe,c9=C(()=>{G();ac();oc();Nf();wf();lc();Cf();Ff();Bf();cc();fc();hc();dc();GL="glowMapGenerationVertexShader",o9=`attribute vec3 position; #include #include #include @@ -23625,7 +23625,7 @@ vUVEmissive=vec2(emissiveMatrix*vec4(uv2Updated,1.0,0.0)); vColor=color; #endif #include -}`;S.ShadersStore[PL]||(S.ShadersStore[PL]=Z7);lhe={name:PL,shader:Z7}});var e9={};et(e9,{glowMapGenerationPixelShader:()=>che});var DL,$7,che,t9=C(()=>{k();Ta();hc();dc();DL="glowMapGenerationPixelShader",$7=`#if defined(DIFFUSE_ISLINEAR) || defined(EMISSIVE_ISLINEAR) +}`;T.ShadersStore[GL]||(T.ShadersStore[GL]=o9);Phe={name:GL,shader:o9}});var h9={};$e(h9,{glowMapGenerationPixelShader:()=>Dhe});var kL,f9,Dhe,d9=C(()=>{G();ba();uc();mc();kL="glowMapGenerationPixelShader",f9=`#if defined(DIFFUSE_ISLINEAR) || defined(EMISSIVE_ISLINEAR) #include #endif #ifdef DIFFUSE @@ -23687,8 +23687,8 @@ gl_FragColor=finalColor*glowIntensity; #ifdef HIGHLIGHT gl_FragColor.a=glowColor.a; #endif -}`;S.ShadersStore[DL]||(S.ShadersStore[DL]=$7);che={name:DL,shader:$7}});var po,vc,aR=C(()=>{hi();Ht();Pi();Ui();Lh();Pn();Tf();Dh();el();yn();iM();po=class n extends kr{constructor(e,t=null,i,r,s){super({...s,name:e,engine:t||Le.LastCreatedEngine,useShaderStore:!0,useAsPostProcess:!0,fragmentShader:n.FragmentUrl,uniforms:n.Uniforms}),this.direction=i,this.kernel=r,this.textureWidth=0,this.textureHeight=0}_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.resolve().then(()=>(rR(),iR)))):t.push(Promise.resolve().then(()=>(sR(),nR))),super._gatherImports(e,t)}bind(){super.bind(),this._drawWrapper.effect.setFloat2("screenSize",this.textureWidth,this.textureHeight),this._drawWrapper.effect.setVector2("direction",this.direction),this._drawWrapper.effect.setFloat("blurWidth",this.kernel)}};po.FragmentUrl="glowBlurPostProcess";po.Uniforms=["screenSize","direction","blurWidth"];vc=class n{get camera(){return this._options.camera}set camera(e){this._options.camera=e}get renderingGroupId(){return this._options.renderingGroupId}set renderingGroupId(e){this._options.renderingGroupId=e}get objectRenderer(){return this._objectRenderer}get shaderLanguage(){return this._shaderLanguage}setMaterialForRendering(e,t){if(this._objectRenderer.setMaterialForRendering(e,t),Array.isArray(e))for(let i=0;i{t=this._scene.getBoundingBoxRenderer().enabled,this._scene.getBoundingBoxRenderer().enabled=!this.disableBoundingBoxesFromEffectLayer&&t}),this._objectRenderer.onAfterRenderObservable.add(()=>{this._scene.getBoundingBoxRenderer().enabled=t})),this._objectRenderer.customIsReadyFunction=(i,r,s)=>{if((s||r===0)&&i.subMeshes)for(let a=0;a{this.onBeforeRenderLayerObservable.notifyObservers(this);let o,l=this._scene.getEngine();if(a.length){for(l.setColorWrite(!1),o=0;o4&&(c.push(L.MatricesIndicesExtraKind),c.push(L.MatricesWeightsExtraKind)),l.push("#define NUM_BONE_INFLUENCERS "+s.numBoneInfluencers);let E=s.skeleton;E&&E.isUsingTextureForMatrices?l.push("#define BONETEXTURE"):l.push("#define BonesPerMesh "+(E?E.bones.length+1:0)),s.numBoneInfluencers>0&&u.addCPUSkinningFallback(0,s)}else l.push("#define NUM_BONE_INFLUENCERS 0");let m=s.morphTargetManager?tl(s.morphTargetManager,l,c,s,!0,!1,!1,f,h,d):0;t&&(l.push("#define INSTANCES"),oo(c),e.getRenderingMesh().hasThinInstances&&l.push("#define THIN_INSTANCES"));let _=s.bakedVertexAnimationManager;_&&_.isEnabled&&(l.push("#define BAKED_VERTEX_ANIMATION_TEXTURE"),t&&c.push("bakedVertexAnimationSettingsInstanced")),$o(o,this._scene,l),this._addCustomEffectDefines(l);let p=e._getDrawWrapper(void 0,!0),g=p.defines,v=l.join(` -`);if(g!==v){let E=["world","mBones","viewProjection","glowColor","morphTargetInfluences","morphTargetCount","boneTextureInfo","diffuseMatrix","emissiveMatrix","opacityMatrix","opacityIntensity","morphTargetTextureInfo","morphTargetTextureIndices","bakedVertexAnimationSettings","bakedVertexAnimationTextureSizeInverted","bakedVertexAnimationTime","bakedVertexAnimationTexture","glowIntensity"];In(E),p.setEffect(this._engine.createEffect("glowMapGeneration",c,E,["diffuseSampler","emissiveSampler","opacitySampler","boneSampler","morphTargets","bakedVertexAnimationTexture"],v,u,void 0,void 0,{maxSimultaneousMorphTargets:m},this._shaderLanguage,this._shadersLoaded?void 0:async()=>{await this._importShadersAsync(),this._shadersLoaded=!0}),v)}return p.effect.isReady()&&(this._dontCheckIfReady||!this._dontCheckIfReady&&this.isLayerReady())}_isSubMeshReady(e,t,i){return this._internalIsSubMeshReady(e,t,i)}async _importShadersAsync(){var e;this._shaderLanguage===1?await Promise.all([Promise.resolve().then(()=>(Y7(),X7)),Promise.resolve().then(()=>(q7(),j7))]):await Promise.all([Promise.resolve().then(()=>(J7(),Q7)),Promise.resolve().then(()=>(t9(),e9))]),(e=this._additionalImportShadersAsync)==null||e.call(this)}_internalIsLayerReady(){let e=!0;for(let i=0;iv.setMatrix("world",R)),(i.disableDepthWrite||i.forceDepthWrite)&&c.setDepthWrite(x),i.disableColorWrite&&c.setColorWrite(A),i.depthFunction!==0&&c.setDepthFunction(E)}else this._objectRenderer.resetRefreshCounter();this.onAfterRenderMeshToEffect.notifyObservers(r)}_useMeshMaterial(e){return!1}_rebuild(){let e=this._vertexBuffers[L.PositionKind];e&&e._rebuild(),this._generateIndexBuffer()}dispose(){let e=this._vertexBuffers[L.PositionKind];e&&(e.dispose(),this._vertexBuffers[L.PositionKind]=null),this._indexBuffer&&(this._scene.getEngine()._releaseBuffer(this._indexBuffer),this._indexBuffer=null);for(let t of this._mergeDrawWrapper)t.dispose();this._mergeDrawWrapper=[],this._objectRenderer.dispose(),this.onDisposeObservable.notifyObservers(this),this.onDisposeObservable.clear(),this.onBeforeRenderLayerObservable.clear(),this.onBeforeComposeObservable.clear(),this.onBeforeRenderMeshToEffect.clear(),this.onAfterRenderMeshToEffect.clear(),this.onAfterComposeObservable.clear()}};vc.ForceGLSL=!1});var Rs,LL=C(()=>{kt();Ut();Ci();hi();Pi();Gr();af();an();Wo();aR();OT();Rs=class n{get _shouldRender(){return this._thinEffectLayer._shouldRender}set _shouldRender(e){this._thinEffectLayer._shouldRender=e}get _emissiveTextureAndColor(){return this._thinEffectLayer._emissiveTextureAndColor}set _emissiveTextureAndColor(e){this._thinEffectLayer._emissiveTextureAndColor=e}get _effectIntensity(){return this._thinEffectLayer._effectIntensity}set _effectIntensity(e){this._thinEffectLayer._effectIntensity=e}static get ForceGLSL(){return vc.ForceGLSL}static set ForceGLSL(e){vc.ForceGLSL=e}get name(){return this._thinEffectLayer.name}set name(e){this._thinEffectLayer.name=e}get neutralColor(){return this._thinEffectLayer.neutralColor}set neutralColor(e){this._thinEffectLayer.neutralColor=e}get isEnabled(){return this._thinEffectLayer.isEnabled}set isEnabled(e){this._thinEffectLayer.isEnabled=e}get camera(){return this._thinEffectLayer.camera}get renderingGroupId(){return this._thinEffectLayer.renderingGroupId}set renderingGroupId(e){this._thinEffectLayer.renderingGroupId=e}get disableBoundingBoxesFromEffectLayer(){return this._thinEffectLayer.disableBoundingBoxesFromEffectLayer}set disableBoundingBoxesFromEffectLayer(e){this._thinEffectLayer.disableBoundingBoxesFromEffectLayer=e}get mainTexture(){return this._mainTexture}get _shaderLanguage(){return this._thinEffectLayer.shaderLanguage}get shaderLanguage(){return this._thinEffectLayer.shaderLanguage}setMaterialForRendering(e,t){this._thinEffectLayer.setMaterialForRendering(e,t)}getEffectIntensity(e){return this._thinEffectLayer.getEffectIntensity(e)}setEffectIntensity(e,t){this._thinEffectLayer.setEffectIntensity(e,t)}constructor(e,t,i=!1,r){this._mainTextureCreatedSize={width:0,height:0},this._maxSize=0,this._mainTextureDesiredSize={width:0,height:0},this._postProcesses=[],this._textures=[],this.uniqueId=zl.UniqueId,this.onDisposeObservable=new ee,this.onBeforeRenderMainTextureObservable=new ee,this.onBeforeComposeObservable=new ee,this.onBeforeRenderMeshToEffect=new ee,this.onAfterRenderMeshToEffect=new ee,this.onAfterComposeObservable=new ee,this.onSizeChangedObservable=new ee,this._internalThinEffectLayer=!r,r||(r=new vc(e,t,i,!1,this._importShadersAsync.bind(this)),r.getEffectName=this.getEffectName.bind(this),r.isReady=this.isReady.bind(this),r._createMergeEffect=this._createMergeEffect.bind(this),r._createTextureAndPostProcesses=this._createTextureAndPostProcesses.bind(this),r._internalCompose=this._internalRender.bind(this),r._setEmissiveTextureAndColor=this._setEmissiveTextureAndColor.bind(this),r._numInternalDraws=this._numInternalDraws.bind(this),r._addCustomEffectDefines=this._addCustomEffectDefines.bind(this),r.hasMesh=this.hasMesh.bind(this),r.shouldRender=this.shouldRender.bind(this),r._shouldRenderMesh=this._shouldRenderMesh.bind(this),r._canRenderMesh=this._canRenderMesh.bind(this),r._useMeshMaterial=this._useMeshMaterial.bind(this)),this._thinEffectLayer=r,this.name=e,this._scene=t||Le.LastCreatedScene,n._SceneComponentInitialization(this._scene),this._engine=this._scene.getEngine(),this._maxSize=this._engine.getCaps().maxTextureSize,this._scene.addEffectLayer(this),this._thinEffectLayer.onDisposeObservable.add(()=>{this.onDisposeObservable.notifyObservers(this)}),this._thinEffectLayer.onBeforeRenderLayerObservable.add(()=>{this.onBeforeRenderMainTextureObservable.notifyObservers(this)}),this._thinEffectLayer.onBeforeComposeObservable.add(()=>{this.onBeforeComposeObservable.notifyObservers(this)}),this._thinEffectLayer.onBeforeRenderMeshToEffect.add(s=>{this.onBeforeRenderMeshToEffect.notifyObservers(s)}),this._thinEffectLayer.onAfterRenderMeshToEffect.add(s=>{this.onAfterRenderMeshToEffect.notifyObservers(s)}),this._thinEffectLayer.onAfterComposeObservable.add(()=>{this.onAfterComposeObservable.notifyObservers(this)})}get _shadersLoaded(){return this._thinEffectLayer._shadersLoaded}set _shadersLoaded(e){this._thinEffectLayer._shadersLoaded=e}_numInternalDraws(){return this._internalThinEffectLayer?1:this._thinEffectLayer._numInternalDraws()}_init(e){this._effectLayerOptions={mainTextureRatio:.5,alphaBlendingMode:2,camera:null,renderingGroupId:-1,mainTextureType:0,mainTextureFormat:5,generateStencilBuffer:!1,...e},this._setMainTextureSize(),this._thinEffectLayer._init(e),this._createMainTexture(),this._createTextureAndPostProcesses()}_setMainTextureSize(){this._effectLayerOptions.mainTextureFixedSize?(this._mainTextureDesiredSize.width=this._effectLayerOptions.mainTextureFixedSize,this._mainTextureDesiredSize.height=this._effectLayerOptions.mainTextureFixedSize):(this._mainTextureDesiredSize.width=this._engine.getRenderWidth()*this._effectLayerOptions.mainTextureRatio,this._mainTextureDesiredSize.height=this._engine.getRenderHeight()*this._effectLayerOptions.mainTextureRatio,this._mainTextureDesiredSize.width=this._engine.needPOTTextures?fs(this._mainTextureDesiredSize.width,this._maxSize):this._mainTextureDesiredSize.width,this._mainTextureDesiredSize.height=this._engine.needPOTTextures?fs(this._mainTextureDesiredSize.height,this._maxSize):this._mainTextureDesiredSize.height),this._mainTextureDesiredSize.width=Math.floor(this._mainTextureDesiredSize.width),this._mainTextureDesiredSize.height=Math.floor(this._mainTextureDesiredSize.height)}_createMainTexture(){this._mainTexture=new Or("EffectLayerMainRTT",{width:this._mainTextureDesiredSize.width,height:this._mainTextureDesiredSize.height},this._scene,{type:this._effectLayerOptions.mainTextureType,format:this._effectLayerOptions.mainTextureFormat,samplingMode:ge.TRILINEAR_SAMPLINGMODE,generateStencilBuffer:this._effectLayerOptions.generateStencilBuffer,existingObjectRenderer:this._thinEffectLayer.objectRenderer}),this._mainTexture.activeCamera=this._effectLayerOptions.camera,this._mainTexture.wrapU=ge.CLAMP_ADDRESSMODE,this._mainTexture.wrapV=ge.CLAMP_ADDRESSMODE,this._mainTexture.anisotropicFilteringLevel=1,this._mainTexture.updateSamplingMode(ge.BILINEAR_SAMPLINGMODE),this._mainTexture.renderParticles=!1,this._mainTexture.renderList=null,this._mainTexture.ignoreCameraViewport=!0,this._mainTexture.onClearObservable.add(e=>{e.clear(this.neutralColor,!0,!0,!0)})}_addCustomEffectDefines(e){}_isReady(e,t,i){return this._internalThinEffectLayer?this._thinEffectLayer._internalIsSubMeshReady(e,t,i):this._thinEffectLayer._isSubMeshReady(e,t,i)}async _importShadersAsync(){}_arePostProcessAndMergeReady(){return this._internalThinEffectLayer?this._thinEffectLayer._internalIsLayerReady():this._thinEffectLayer.isLayerReady()}isLayerReady(){return this._arePostProcessAndMergeReady()&&this._mainTexture.isReady()}render(){this._thinEffectLayer.compose()&&(this._setMainTextureSize(),(this._mainTextureCreatedSize.width!==this._mainTextureDesiredSize.width||this._mainTextureCreatedSize.height!==this._mainTextureDesiredSize.height)&&this._mainTextureDesiredSize.width!==0&&this._mainTextureDesiredSize.height!==0&&(this.onSizeChangedObservable.notifyObservers(this),this._disposeTextureAndPostProcesses(),this._createMainTexture(),this._createTextureAndPostProcesses(),this._mainTextureCreatedSize.width=this._mainTextureDesiredSize.width,this._mainTextureCreatedSize.height=this._mainTextureDesiredSize.height))}hasMesh(e){return this._internalThinEffectLayer?this._thinEffectLayer._internalHasMesh(e):this._thinEffectLayer.hasMesh(e)}shouldRender(){return this._internalThinEffectLayer?this._thinEffectLayer._internalShouldRender():this._thinEffectLayer.shouldRender()}_shouldRenderMesh(e){return this._internalThinEffectLayer?!0:this._thinEffectLayer._shouldRenderMesh(e)}_canRenderMesh(e,t){return this._internalThinEffectLayer?this._thinEffectLayer._internalCanRenderMesh(e,t):this._thinEffectLayer._canRenderMesh(e,t)}_shouldRenderEmissiveTextureForMesh(){return!0}_useMeshMaterial(e){return this._internalThinEffectLayer?!1:this._thinEffectLayer._useMeshMaterial(e)}_rebuild(){this._thinEffectLayer._rebuild()}_disposeTextureAndPostProcesses(){this._mainTexture.dispose();for(let e=0;e{throw Xe("EffectLayerSceneComponent")};P([F()],Rs.prototype,"name",null);P([Bu()],Rs.prototype,"neutralColor",null);P([F()],Rs.prototype,"isEnabled",null);P([P3()],Rs.prototype,"camera",null);P([F()],Rs.prototype,"renderingGroupId",null);P([F()],Rs.prototype,"disableBoundingBoxesFromEffectLayer",null)});var r9={};et(r9,{glowMapMergePixelShaderWGSL:()=>fhe});var OL,i9,fhe,n9=C(()=>{k();OL="glowMapMergePixelShader",i9=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_2d; +}`;T.ShadersStore[kL]||(T.ShadersStore[kL]=f9);Dhe={name:kL,shader:f9}});var go,Sc,mR=C(()=>{hi();zt();Pi();Ui();Oh();Pn();Rf();Lh();il();yn();dM();go=class n extends kr{constructor(e,t=null,i,r,s){super({...s,name:e,engine:t||Le.LastCreatedEngine,useShaderStore:!0,useAsPostProcess:!0,fragmentShader:n.FragmentUrl,uniforms:n.Uniforms}),this.direction=i,this.kernel=r,this.textureWidth=0,this.textureHeight=0}_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.resolve().then(()=>(hR(),fR)))):t.push(Promise.resolve().then(()=>(uR(),dR))),super._gatherImports(e,t)}bind(){super.bind(),this._drawWrapper.effect.setFloat2("screenSize",this.textureWidth,this.textureHeight),this._drawWrapper.effect.setVector2("direction",this.direction),this._drawWrapper.effect.setFloat("blurWidth",this.kernel)}};go.FragmentUrl="glowBlurPostProcess";go.Uniforms=["screenSize","direction","blurWidth"];Sc=class n{get camera(){return this._options.camera}set camera(e){this._options.camera=e}get renderingGroupId(){return this._options.renderingGroupId}set renderingGroupId(e){this._options.renderingGroupId=e}get objectRenderer(){return this._objectRenderer}get shaderLanguage(){return this._shaderLanguage}setMaterialForRendering(e,t){if(this._objectRenderer.setMaterialForRendering(e,t),Array.isArray(e))for(let i=0;i{t=this._scene.getBoundingBoxRenderer().enabled,this._scene.getBoundingBoxRenderer().enabled=!this.disableBoundingBoxesFromEffectLayer&&t}),this._objectRenderer.onAfterRenderObservable.add(()=>{this._scene.getBoundingBoxRenderer().enabled=t})),this._objectRenderer.customIsReadyFunction=(i,r,s)=>{if((s||r===0)&&i.subMeshes)for(let a=0;a{this.onBeforeRenderLayerObservable.notifyObservers(this);let o,l=this._scene.getEngine();if(a.length){for(l.setColorWrite(!1),o=0;o4&&(c.push(L.MatricesIndicesExtraKind),c.push(L.MatricesWeightsExtraKind)),l.push("#define NUM_BONE_INFLUENCERS "+s.numBoneInfluencers);let S=s.skeleton;S&&S.isUsingTextureForMatrices?l.push("#define BONETEXTURE"):l.push("#define BonesPerMesh "+(S?S.bones.length+1:0)),s.numBoneInfluencers>0&&u.addCPUSkinningFallback(0,s)}else l.push("#define NUM_BONE_INFLUENCERS 0");let m=s.morphTargetManager?rl(s.morphTargetManager,l,c,s,!0,!1,!1,f,h,d):0;t&&(l.push("#define INSTANCES"),co(c),e.getRenderingMesh().hasThinInstances&&l.push("#define THIN_INSTANCES"));let _=s.bakedVertexAnimationManager;_&&_.isEnabled&&(l.push("#define BAKED_VERTEX_ANIMATION_TEXTURE"),t&&c.push("bakedVertexAnimationSettingsInstanced")),tl(o,this._scene,l),this._addCustomEffectDefines(l);let p=e._getDrawWrapper(void 0,!0),g=p.defines,v=l.join(` +`);if(g!==v){let S=["world","mBones","viewProjection","glowColor","morphTargetInfluences","morphTargetCount","boneTextureInfo","diffuseMatrix","emissiveMatrix","opacityMatrix","opacityIntensity","morphTargetTextureInfo","morphTargetTextureIndices","bakedVertexAnimationSettings","bakedVertexAnimationTextureSizeInverted","bakedVertexAnimationTime","bakedVertexAnimationTexture","glowIntensity"];In(S),p.setEffect(this._engine.createEffect("glowMapGeneration",c,S,["diffuseSampler","emissiveSampler","opacitySampler","boneSampler","morphTargets","bakedVertexAnimationTexture"],v,u,void 0,void 0,{maxSimultaneousMorphTargets:m},this._shaderLanguage,this._shadersLoaded?void 0:async()=>{await this._importShadersAsync(),this._shadersLoaded=!0}),v)}return p.effect.isReady()&&(this._dontCheckIfReady||!this._dontCheckIfReady&&this.isLayerReady())}_isSubMeshReady(e,t,i){return this._internalIsSubMeshReady(e,t,i)}async _importShadersAsync(){var e;this._shaderLanguage===1?await Promise.all([Promise.resolve().then(()=>(r9(),i9)),Promise.resolve().then(()=>(a9(),s9))]):await Promise.all([Promise.resolve().then(()=>(c9(),l9)),Promise.resolve().then(()=>(d9(),h9))]),(e=this._additionalImportShadersAsync)==null||e.call(this)}_internalIsLayerReady(){let e=!0;for(let i=0;iv.setMatrix("world",R)),(i.disableDepthWrite||i.forceDepthWrite)&&c.setDepthWrite(x),i.disableColorWrite&&c.setColorWrite(A),i.depthFunction!==0&&c.setDepthFunction(S)}else this._objectRenderer.resetRefreshCounter();this.onAfterRenderMeshToEffect.notifyObservers(r)}_useMeshMaterial(e){return!1}_rebuild(){let e=this._vertexBuffers[L.PositionKind];e&&e._rebuild(),this._generateIndexBuffer()}dispose(){let e=this._vertexBuffers[L.PositionKind];e&&(e.dispose(),this._vertexBuffers[L.PositionKind]=null),this._indexBuffer&&(this._scene.getEngine()._releaseBuffer(this._indexBuffer),this._indexBuffer=null);for(let t of this._mergeDrawWrapper)t.dispose();this._mergeDrawWrapper=[],this._objectRenderer.dispose(),this.onDisposeObservable.notifyObservers(this),this.onDisposeObservable.clear(),this.onBeforeRenderLayerObservable.clear(),this.onBeforeComposeObservable.clear(),this.onBeforeRenderMeshToEffect.clear(),this.onAfterRenderMeshToEffect.clear(),this.onAfterComposeObservable.clear()}};Sc.ForceGLSL=!1});var Rs,WL=C(()=>{kt();Ut();Ci();hi();Pi();Gr();cf();ln();zo();mR();HT();Rs=class n{get _shouldRender(){return this._thinEffectLayer._shouldRender}set _shouldRender(e){this._thinEffectLayer._shouldRender=e}get _emissiveTextureAndColor(){return this._thinEffectLayer._emissiveTextureAndColor}set _emissiveTextureAndColor(e){this._thinEffectLayer._emissiveTextureAndColor=e}get _effectIntensity(){return this._thinEffectLayer._effectIntensity}set _effectIntensity(e){this._thinEffectLayer._effectIntensity=e}static get ForceGLSL(){return Sc.ForceGLSL}static set ForceGLSL(e){Sc.ForceGLSL=e}get name(){return this._thinEffectLayer.name}set name(e){this._thinEffectLayer.name=e}get neutralColor(){return this._thinEffectLayer.neutralColor}set neutralColor(e){this._thinEffectLayer.neutralColor=e}get isEnabled(){return this._thinEffectLayer.isEnabled}set isEnabled(e){this._thinEffectLayer.isEnabled=e}get camera(){return this._thinEffectLayer.camera}get renderingGroupId(){return this._thinEffectLayer.renderingGroupId}set renderingGroupId(e){this._thinEffectLayer.renderingGroupId=e}get disableBoundingBoxesFromEffectLayer(){return this._thinEffectLayer.disableBoundingBoxesFromEffectLayer}set disableBoundingBoxesFromEffectLayer(e){this._thinEffectLayer.disableBoundingBoxesFromEffectLayer=e}get mainTexture(){return this._mainTexture}get _shaderLanguage(){return this._thinEffectLayer.shaderLanguage}get shaderLanguage(){return this._thinEffectLayer.shaderLanguage}setMaterialForRendering(e,t){this._thinEffectLayer.setMaterialForRendering(e,t)}getEffectIntensity(e){return this._thinEffectLayer.getEffectIntensity(e)}setEffectIntensity(e,t){this._thinEffectLayer.setEffectIntensity(e,t)}constructor(e,t,i=!1,r){this._mainTextureCreatedSize={width:0,height:0},this._maxSize=0,this._mainTextureDesiredSize={width:0,height:0},this._postProcesses=[],this._textures=[],this.uniqueId=Yl.UniqueId,this.onDisposeObservable=new te,this.onBeforeRenderMainTextureObservable=new te,this.onBeforeComposeObservable=new te,this.onBeforeRenderMeshToEffect=new te,this.onAfterRenderMeshToEffect=new te,this.onAfterComposeObservable=new te,this.onSizeChangedObservable=new te,this._internalThinEffectLayer=!r,r||(r=new Sc(e,t,i,!1,this._importShadersAsync.bind(this)),r.getEffectName=this.getEffectName.bind(this),r.isReady=this.isReady.bind(this),r._createMergeEffect=this._createMergeEffect.bind(this),r._createTextureAndPostProcesses=this._createTextureAndPostProcesses.bind(this),r._internalCompose=this._internalRender.bind(this),r._setEmissiveTextureAndColor=this._setEmissiveTextureAndColor.bind(this),r._numInternalDraws=this._numInternalDraws.bind(this),r._addCustomEffectDefines=this._addCustomEffectDefines.bind(this),r.hasMesh=this.hasMesh.bind(this),r.shouldRender=this.shouldRender.bind(this),r._shouldRenderMesh=this._shouldRenderMesh.bind(this),r._canRenderMesh=this._canRenderMesh.bind(this),r._useMeshMaterial=this._useMeshMaterial.bind(this)),this._thinEffectLayer=r,this.name=e,this._scene=t||Le.LastCreatedScene,n._SceneComponentInitialization(this._scene),this._engine=this._scene.getEngine(),this._maxSize=this._engine.getCaps().maxTextureSize,this._scene.addEffectLayer(this),this._thinEffectLayer.onDisposeObservable.add(()=>{this.onDisposeObservable.notifyObservers(this)}),this._thinEffectLayer.onBeforeRenderLayerObservable.add(()=>{this.onBeforeRenderMainTextureObservable.notifyObservers(this)}),this._thinEffectLayer.onBeforeComposeObservable.add(()=>{this.onBeforeComposeObservable.notifyObservers(this)}),this._thinEffectLayer.onBeforeRenderMeshToEffect.add(s=>{this.onBeforeRenderMeshToEffect.notifyObservers(s)}),this._thinEffectLayer.onAfterRenderMeshToEffect.add(s=>{this.onAfterRenderMeshToEffect.notifyObservers(s)}),this._thinEffectLayer.onAfterComposeObservable.add(()=>{this.onAfterComposeObservable.notifyObservers(this)})}get _shadersLoaded(){return this._thinEffectLayer._shadersLoaded}set _shadersLoaded(e){this._thinEffectLayer._shadersLoaded=e}_numInternalDraws(){return this._internalThinEffectLayer?1:this._thinEffectLayer._numInternalDraws()}_init(e){this._effectLayerOptions={mainTextureRatio:.5,alphaBlendingMode:2,camera:null,renderingGroupId:-1,mainTextureType:0,mainTextureFormat:5,generateStencilBuffer:!1,...e},this._setMainTextureSize(),this._thinEffectLayer._init(e),this._createMainTexture(),this._createTextureAndPostProcesses()}_setMainTextureSize(){this._effectLayerOptions.mainTextureFixedSize?(this._mainTextureDesiredSize.width=this._effectLayerOptions.mainTextureFixedSize,this._mainTextureDesiredSize.height=this._effectLayerOptions.mainTextureFixedSize):(this._mainTextureDesiredSize.width=this._engine.getRenderWidth()*this._effectLayerOptions.mainTextureRatio,this._mainTextureDesiredSize.height=this._engine.getRenderHeight()*this._effectLayerOptions.mainTextureRatio,this._mainTextureDesiredSize.width=this._engine.needPOTTextures?fs(this._mainTextureDesiredSize.width,this._maxSize):this._mainTextureDesiredSize.width,this._mainTextureDesiredSize.height=this._engine.needPOTTextures?fs(this._mainTextureDesiredSize.height,this._maxSize):this._mainTextureDesiredSize.height),this._mainTextureDesiredSize.width=Math.floor(this._mainTextureDesiredSize.width),this._mainTextureDesiredSize.height=Math.floor(this._mainTextureDesiredSize.height)}_createMainTexture(){this._mainTexture=new Or("EffectLayerMainRTT",{width:this._mainTextureDesiredSize.width,height:this._mainTextureDesiredSize.height},this._scene,{type:this._effectLayerOptions.mainTextureType,format:this._effectLayerOptions.mainTextureFormat,samplingMode:ge.TRILINEAR_SAMPLINGMODE,generateStencilBuffer:this._effectLayerOptions.generateStencilBuffer,existingObjectRenderer:this._thinEffectLayer.objectRenderer}),this._mainTexture.activeCamera=this._effectLayerOptions.camera,this._mainTexture.wrapU=ge.CLAMP_ADDRESSMODE,this._mainTexture.wrapV=ge.CLAMP_ADDRESSMODE,this._mainTexture.anisotropicFilteringLevel=1,this._mainTexture.updateSamplingMode(ge.BILINEAR_SAMPLINGMODE),this._mainTexture.renderParticles=!1,this._mainTexture.renderList=null,this._mainTexture.ignoreCameraViewport=!0,this._mainTexture.onClearObservable.add(e=>{e.clear(this.neutralColor,!0,!0,!0)})}_addCustomEffectDefines(e){}_isReady(e,t,i){return this._internalThinEffectLayer?this._thinEffectLayer._internalIsSubMeshReady(e,t,i):this._thinEffectLayer._isSubMeshReady(e,t,i)}async _importShadersAsync(){}_arePostProcessAndMergeReady(){return this._internalThinEffectLayer?this._thinEffectLayer._internalIsLayerReady():this._thinEffectLayer.isLayerReady()}isLayerReady(){return this._arePostProcessAndMergeReady()&&this._mainTexture.isReady()}render(){this._thinEffectLayer.compose()&&(this._setMainTextureSize(),(this._mainTextureCreatedSize.width!==this._mainTextureDesiredSize.width||this._mainTextureCreatedSize.height!==this._mainTextureDesiredSize.height)&&this._mainTextureDesiredSize.width!==0&&this._mainTextureDesiredSize.height!==0&&(this.onSizeChangedObservable.notifyObservers(this),this._disposeTextureAndPostProcesses(),this._createMainTexture(),this._createTextureAndPostProcesses(),this._mainTextureCreatedSize.width=this._mainTextureDesiredSize.width,this._mainTextureCreatedSize.height=this._mainTextureDesiredSize.height))}hasMesh(e){return this._internalThinEffectLayer?this._thinEffectLayer._internalHasMesh(e):this._thinEffectLayer.hasMesh(e)}shouldRender(){return this._internalThinEffectLayer?this._thinEffectLayer._internalShouldRender():this._thinEffectLayer.shouldRender()}_shouldRenderMesh(e){return this._internalThinEffectLayer?!0:this._thinEffectLayer._shouldRenderMesh(e)}_canRenderMesh(e,t){return this._internalThinEffectLayer?this._thinEffectLayer._internalCanRenderMesh(e,t):this._thinEffectLayer._canRenderMesh(e,t)}_shouldRenderEmissiveTextureForMesh(){return!0}_useMeshMaterial(e){return this._internalThinEffectLayer?!1:this._thinEffectLayer._useMeshMaterial(e)}_rebuild(){this._thinEffectLayer._rebuild()}_disposeTextureAndPostProcesses(){this._mainTexture.dispose();for(let e=0;e{throw Xe("EffectLayerSceneComponent")};P([w()],Rs.prototype,"name",null);P([ku()],Rs.prototype,"neutralColor",null);P([w()],Rs.prototype,"isEnabled",null);P([k3()],Rs.prototype,"camera",null);P([w()],Rs.prototype,"renderingGroupId",null);P([w()],Rs.prototype,"disableBoundingBoxesFromEffectLayer",null)});var m9={};$e(m9,{glowMapMergePixelShaderWGSL:()=>Lhe});var HL,u9,Lhe,p9=C(()=>{G();HL="glowMapMergePixelShader",u9=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_2d; #ifdef EMISSIVE var textureSampler2Sampler: sampler;var textureSampler2: texture_2d; #endif @@ -23712,14 +23712,14 @@ baseColor=clamp(baseColor,vec4f(0.),vec4f(1.0)); fragmentOutputs.color=baseColor; #define CUSTOM_FRAGMENT_MAIN_END } -`;S.ShadersStoreWGSL[OL]||(S.ShadersStoreWGSL[OL]=i9);fhe={name:OL,shader:i9}});var a9={};et(a9,{glowMapMergeVertexShaderWGSL:()=>hhe});var NL,s9,hhe,o9=C(()=>{k();NL="glowMapMergeVertexShader",s9=`attribute position: vec2f;varying vUV: vec2f; +`;T.ShadersStoreWGSL[HL]||(T.ShadersStoreWGSL[HL]=u9);Lhe={name:HL,shader:u9}});var g9={};$e(g9,{glowMapMergeVertexShaderWGSL:()=>Ohe});var zL,_9,Ohe,v9=C(()=>{G();zL="glowMapMergeVertexShader",_9=`attribute position: vec2f;varying vUV: vec2f; #define CUSTOM_VERTEX_DEFINITIONS @vertex fn main(input : VertexInputs)->FragmentInputs {const madd: vec2f= vec2f(0.5,0.5); #define CUSTOM_VERTEX_MAIN_BEGIN vertexOutputs.vUV=vertexInputs.position*madd+madd;vertexOutputs.position= vec4f(vertexInputs.position,0.0,1.0); #define CUSTOM_VERTEX_MAIN_END -}`;S.ShadersStoreWGSL[NL]||(S.ShadersStoreWGSL[NL]=s9);hhe={name:NL,shader:s9}});var c9={};et(c9,{glowMapMergePixelShader:()=>dhe});var FL,l9,dhe,f9=C(()=>{k();FL="glowMapMergePixelShader",l9=`varying vec2 vUV;uniform sampler2D textureSampler; +}`;T.ShadersStoreWGSL[zL]||(T.ShadersStoreWGSL[zL]=_9);Ohe={name:zL,shader:_9}});var S9={};$e(S9,{glowMapMergePixelShader:()=>Nhe});var XL,E9,Nhe,T9=C(()=>{G();XL="glowMapMergePixelShader",E9=`varying vec2 vUV;uniform sampler2D textureSampler; #ifdef EMISSIVE uniform sampler2D textureSampler2; #endif @@ -23741,14 +23741,14 @@ baseColor=clamp(baseColor,0.,1.0); #endif gl_FragColor=baseColor; #define CUSTOM_FRAGMENT_MAIN_END -}`;S.ShadersStore[FL]||(S.ShadersStore[FL]=l9);dhe={name:FL,shader:l9}});var d9={};et(d9,{glowMapMergeVertexShader:()=>uhe});var wL,h9,uhe,u9=C(()=>{k();wL="glowMapMergeVertexShader",h9=`attribute vec2 position;varying vec2 vUV;const vec2 madd=vec2(0.5,0.5); +}`;T.ShadersStore[XL]||(T.ShadersStore[XL]=E9);Nhe={name:XL,shader:E9}});var x9={};$e(x9,{glowMapMergeVertexShader:()=>whe});var YL,A9,whe,R9=C(()=>{G();YL="glowMapMergeVertexShader",A9=`attribute vec2 position;varying vec2 vUV;const vec2 madd=vec2(0.5,0.5); #define CUSTOM_VERTEX_DEFINITIONS void main(void) { #define CUSTOM_VERTEX_MAIN_BEGIN vUV=position*madd+madd;gl_Position=vec4(position,0.0,1.0); #define CUSTOM_VERTEX_MAIN_END -}`;S.ShadersStore[wL]||(S.ShadersStore[wL]=h9);uhe={name:wL,shader:h9}});var ol,m9=C(()=>{Ve();Ui();Pn();gM();aR();Ht();mP();ol=class n extends vc{set blurHorizontalSize(e){this._horizontalBlurPostprocess.kernel=e,this._options.blurHorizontalSize=e}set blurVerticalSize(e){this._verticalBlurPostprocess.kernel=e,this._options.blurVerticalSize=e}get blurHorizontalSize(){return this._horizontalBlurPostprocess.kernel}get blurVerticalSize(){return this._verticalBlurPostprocess.kernel}get stencilReference(){return this._instanceGlowingMeshStencilReference<<8-this.numStencilBits}constructor(e,t,i,r=!1){super(e,t,i!==void 0?!!i.forceGLSL:!1),this.innerGlow=!0,this.outerGlow=!0,this._instanceGlowingMeshStencilReference=n.GlowingMeshStencilReference++,this._meshes={},this._excludedMeshes={},this._mainObjectRendererRenderPassId=-1,this.numStencilBits=8,this.neutralColor=n.NeutralColor,this._options={mainTextureRatio:.5,blurTextureSizeRatio:.5,mainTextureFixedSize:0,blurHorizontalSize:1,blurVerticalSize:1,alphaBlendingMode:2,camera:null,renderingGroupId:-1,forceGLSL:!1,mainTextureType:0,mainTextureFormat:5,isStroke:!1,...i},this._init(this._options),this._shouldRender=!1,r&&this._createTextureAndPostProcesses()}getClassName(){return"HighlightLayer"}async _importShadersAsync(){this._shaderLanguage===1?await Promise.all([Promise.resolve().then(()=>(n9(),r9)),Promise.resolve().then(()=>(o9(),a9)),Promise.resolve().then(()=>(rR(),iR))]):await Promise.all([Promise.resolve().then(()=>(f9(),c9)),Promise.resolve().then(()=>(u9(),d9)),Promise.resolve().then(()=>(sR(),nR))]),await super._importShadersAsync()}getEffectName(){return n.EffectName}_numInternalDraws(){return 2}_createMergeEffect(){return this._engine.createEffect("glowMapMerge",[L.PositionKind],["offset"],["textureSampler"],this._options.isStroke?`#define STROKE -`:void 0,void 0,void 0,void 0,void 0,this._shaderLanguage,this._shadersLoaded?void 0:async()=>{await this._importShadersAsync(),this._shadersLoaded=!0})}_createTextureAndPostProcesses(){this._options.alphaBlendingMode===2?(this._downSamplePostprocess=new Gl("HighlightLayerPPP",this._scene.getEngine()),this._horizontalBlurPostprocess=new po("HighlightLayerHBP",this._scene.getEngine(),new Ne(1,0),this._options.blurHorizontalSize),this._verticalBlurPostprocess=new po("HighlightLayerVBP",this._scene.getEngine(),new Ne(0,1),this._options.blurVerticalSize),this._postProcesses=[this._downSamplePostprocess,this._horizontalBlurPostprocess,this._verticalBlurPostprocess]):(this._horizontalBlurPostprocess=new Xn("HighlightLayerHBP",this._scene.getEngine(),new Ne(1,0),this._options.blurHorizontalSize/2),this._verticalBlurPostprocess=new Xn("HighlightLayerVBP",this._scene.getEngine(),new Ne(0,1),this._options.blurVerticalSize/2),this._postProcesses=[this._horizontalBlurPostprocess,this._verticalBlurPostprocess])}needStencil(){return!0}isReady(e,t){let i=e.getMaterial(),r=e.getRenderingMesh();if(!i||!r||!this._meshes)return!1;let s=null,a=this._meshes[r.uniqueId];return a&&a.glowEmissiveOnly&&i&&(s=i.emissiveTexture),super._isSubMeshReady(e,t,s)}_canRenderMesh(e,t){return!0}_internalCompose(e,t){this.bindTexturesForCompose(e);let i=this._engine;i.cacheStencilState(),i.setStencilOperationPass(7681),i.setStencilOperationFail(7680),i.setStencilOperationDepthFail(7680),i.setStencilMask(0),i.setStencilBuffer(!0),i.setStencilFunctionReference(this._instanceGlowingMeshStencilReference<<8-this.numStencilBits),i.setStencilFunctionMask(255-((1<<8-this.numStencilBits)-1)),this.outerGlow&&t===0&&(e.setFloat("offset",0),i.setStencilFunction(517),i.drawElementsType(ve.TriangleFillMode,0,6)),this.innerGlow&&t===1&&(e.setFloat("offset",1),i.setStencilFunction(514),i.drawElementsType(ve.TriangleFillMode,0,6)),i.restoreStencilState()}_setEmissiveTextureAndColor(e,t,i){let r=this._meshes[e.uniqueId];r?this._emissiveTextureAndColor.color.set(r.color.r,r.color.g,r.color.b,1):this._emissiveTextureAndColor.color.set(this.neutralColor.r,this.neutralColor.g,this.neutralColor.b,this.neutralColor.a),r&&r.glowEmissiveOnly&&i?(this._emissiveTextureAndColor.texture=i.emissiveTexture,this._emissiveTextureAndColor.color.set(1,1,1,1)):this._emissiveTextureAndColor.texture=null}shouldRender(){return!!(this._meshes&&super.shouldRender())}_shouldRenderMesh(e){return this._excludedMeshes&&this._excludedMeshes[e.uniqueId]?!1:super.hasMesh(e)}_addCustomEffectDefines(e){e.push("#define HIGHLIGHT")}addExcludedMesh(e){if(!this._excludedMeshes)return;if(!this._excludedMeshes[e.uniqueId]){let i={mesh:e,beforeBind:null,afterRender:null,stencilState:!1};i.beforeBind=e.onBeforeBindObservable.add(r=>{this._mainObjectRendererRenderPassId!==-1&&this._mainObjectRendererRenderPassId!==this._engine.currentRenderPassId||(i.stencilState=r.getEngine().getStencilBuffer(),r.getEngine().setStencilBuffer(!1))}),i.afterRender=e.onAfterRenderObservable.add(r=>{this._mainObjectRendererRenderPassId!==-1&&this._mainObjectRendererRenderPassId!==this._engine.currentRenderPassId||r.getEngine().setStencilBuffer(i.stencilState)}),this._excludedMeshes[e.uniqueId]=i}}removeExcludedMesh(e){if(!this._excludedMeshes)return;let t=this._excludedMeshes[e.uniqueId];t&&(t.beforeBind&&e.onBeforeBindObservable.remove(t.beforeBind),t.afterRender&&e.onAfterRenderObservable.remove(t.afterRender)),this._excludedMeshes[e.uniqueId]=null}hasMesh(e){return!this._meshes||!super.hasMesh(e)?!1:!!this._meshes[e.uniqueId]}addMesh(e,t,i=!1){if(!this._meshes)return;let r=this._meshes[e.uniqueId];r?r.color=t:(this._meshes[e.uniqueId]={mesh:e,color:t,observerHighlight:e.onBeforeBindObservable.add(s=>{this._mainObjectRendererRenderPassId!==-1&&this._mainObjectRendererRenderPassId!==this._engine.currentRenderPassId||this.isEnabled&&(this._excludedMeshes&&this._excludedMeshes[s.uniqueId]?this._defaultStencilReference(s):s.getScene().getEngine().setStencilFunctionReference(this._instanceGlowingMeshStencilReference<<8-this.numStencilBits))}),observerDefault:e.onAfterRenderObservable.add(s=>{this._mainObjectRendererRenderPassId!==-1&&this._mainObjectRendererRenderPassId!==this._engine.currentRenderPassId||this.isEnabled&&this._defaultStencilReference(s)}),glowEmissiveOnly:i},e.onDisposeObservable.add(()=>{this._disposeMesh(e)})),this._shouldRender=!0}removeMesh(e){if(!this._meshes)return;let t=this._meshes[e.uniqueId];t&&(t.observerHighlight&&e.onBeforeBindObservable.remove(t.observerHighlight),t.observerDefault&&e.onAfterRenderObservable.remove(t.observerDefault),delete this._meshes[e.uniqueId]),this._shouldRender=!1;for(let i in this._meshes)if(this._meshes[i]){this._shouldRender=!0;break}}removeAllMeshes(){if(this._meshes){for(let e in this._meshes)if(Object.prototype.hasOwnProperty.call(this._meshes,e)){let t=this._meshes[e];t&&this.removeMesh(t.mesh)}}}_defaultStencilReference(e){e.getScene().getEngine().setStencilFunctionReference(n.NormalMeshStencilReference<<8-this.numStencilBits)}_disposeMesh(e){this.removeMesh(e),this.removeExcludedMesh(e)}dispose(){if(this._meshes){for(let e in this._meshes){let t=this._meshes[e];t&&t.mesh&&(t.observerHighlight&&t.mesh.onBeforeBindObservable.remove(t.observerHighlight),t.observerDefault&&t.mesh.onAfterRenderObservable.remove(t.observerDefault))}this._meshes=null}if(this._excludedMeshes){for(let e in this._excludedMeshes){let t=this._excludedMeshes[e];t&&(t.beforeBind&&t.mesh.onBeforeBindObservable.remove(t.beforeBind),t.afterRender&&t.mesh.onAfterRenderObservable.remove(t.afterRender))}this._excludedMeshes=null}super.dispose()}};ol.EffectName="HighlightLayer";ol.NeutralColor=new lt(0,0,0,0);ol.GlowingMeshStencilReference=2;ol.NormalMeshStencilReference=1});var oR,js,p9=C(()=>{kt();Ut();hi();ps();Ve();Gr();af();Vl();EM();pP();LL();Pt();Vi();Ht();m9();_r();Wo();aR();Qt.prototype.getHighlightLayerByName=function(n){var e;for(let t=0;t<((e=this.effectLayers)==null?void 0:e.length);t++)if(this.effectLayers[t].name===n&&this.effectLayers[t].getEffectName()===js.EffectName)return this.effectLayers[t];return null};oR=class extends Ri{constructor(e,t,i,r,s=null,a=ge.BILINEAR_SAMPLINGMODE,o,l){let c={uniforms:po.Uniforms,size:typeof r=="number"?r:void 0,camera:s,samplingMode:a,engine:o,reusable:l,...r};super(e,po.FragmentUrl,{effectWrapper:typeof r=="number"||!r.effectWrapper?new po(e,o,t,i,c):void 0,...c}),this.direction=t,this.kernel=i,this.onApplyObservable.add(()=>{this._effectWrapper.textureWidth=this.width,this._effectWrapper.textureHeight=this.height})}_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.resolve().then(()=>(rR(),iR)))):t.push(Promise.resolve().then(()=>(sR(),nR))),super._gatherImports(e,t)}},js=class n extends Rs{static get NeutralColor(){return ol.NeutralColor}static set NeutralColor(e){ol.NeutralColor=e}get innerGlow(){return this._thinEffectLayer.innerGlow}set innerGlow(e){this._thinEffectLayer.innerGlow=e}get outerGlow(){return this._thinEffectLayer.outerGlow}set outerGlow(e){this._thinEffectLayer.outerGlow=e}set blurHorizontalSize(e){this._thinEffectLayer.blurHorizontalSize=e}set blurVerticalSize(e){this._thinEffectLayer.blurVerticalSize=e}get blurHorizontalSize(){return this._thinEffectLayer.blurHorizontalSize}get blurVerticalSize(){return this._thinEffectLayer.blurVerticalSize}get numStencilBits(){return this._thinEffectLayer.numStencilBits}set numStencilBits(e){this._thinEffectLayer.numStencilBits=e}get stencilReference(){return this._thinEffectLayer.stencilReference}constructor(e,t,i){super(e,t,i!==void 0?!!i.forceGLSL:!1,new ol(e,t,i)),this.onBeforeBlurObservable=new ee,this.onAfterBlurObservable=new ee,this._engine.isStencilEnable||$.Warn("Rendering the Highlight Layer requires the stencil to be active on the canvas. var engine = new Engine(canvas, antialias, { stencil: true }"),this._options={mainTextureRatio:.5,blurTextureSizeRatio:.5,mainTextureFixedSize:0,blurHorizontalSize:1,blurVerticalSize:1,alphaBlendingMode:2,camera:null,renderingGroupId:-1,mainTextureType:0,mainTextureFormat:5,forceGLSL:!1,isStroke:!1,generateStencilBuffer:!1,...i},this._init(this._options),this._shouldRender=!1}getEffectName(){return n.EffectName}_numInternalDraws(){return 2}_createMergeEffect(){return this._thinEffectLayer._createMergeEffect()}_createTextureAndPostProcesses(){let e=this._mainTextureDesiredSize.width*this._options.blurTextureSizeRatio,t=this._mainTextureDesiredSize.height*this._options.blurTextureSizeRatio;e=this._engine.needPOTTextures?fs(e,this._maxSize):e,t=this._engine.needPOTTextures?fs(t,this._maxSize):t;let i;this._engine.getCaps().textureHalfFloatRender?i=2:i=0,this._blurTexture=new Or("HighlightLayerBlurRTT",{width:e,height:t},this._scene,!1,!0,i),this._blurTexture.wrapU=ge.CLAMP_ADDRESSMODE,this._blurTexture.wrapV=ge.CLAMP_ADDRESSMODE,this._blurTexture.anisotropicFilteringLevel=16,this._blurTexture.updateSamplingMode(ge.TRILINEAR_SAMPLINGMODE),this._blurTexture.renderParticles=!1,this._blurTexture.ignoreCameraViewport=!0,this._textures=[this._blurTexture],this._thinEffectLayer.bindTexturesForCompose=r=>{r.setTexture("textureSampler",this._blurTexture)},this._thinEffectLayer._createTextureAndPostProcesses(),this._options.alphaBlendingMode===2?(this._downSamplePostprocess=new Oh("HighlightLayerPPP",{size:this._options.blurTextureSizeRatio,samplingMode:ge.BILINEAR_SAMPLINGMODE,engine:this._scene.getEngine(),effectWrapper:this._thinEffectLayer._postProcesses[0]}),this._downSamplePostprocess.externalTextureSamplerBinding=!0,this._downSamplePostprocess.onApplyObservable.add(r=>{r.setTexture("textureSampler",this._mainTexture)}),this._horizontalBlurPostprocess=new oR("HighlightLayerHBP",new Ne(1,0),this._options.blurHorizontalSize,{samplingMode:ge.BILINEAR_SAMPLINGMODE,engine:this._scene.getEngine(),effectWrapper:this._thinEffectLayer._postProcesses[1]}),this._horizontalBlurPostprocess.onApplyObservable.add(r=>{r.setFloat2("screenSize",e,t)}),this._verticalBlurPostprocess=new oR("HighlightLayerVBP",new Ne(0,1),this._options.blurVerticalSize,{samplingMode:ge.BILINEAR_SAMPLINGMODE,engine:this._scene.getEngine(),effectWrapper:this._thinEffectLayer._postProcesses[2]}),this._verticalBlurPostprocess.onApplyObservable.add(r=>{r.setFloat2("screenSize",e,t)}),this._postProcesses=[this._downSamplePostprocess,this._horizontalBlurPostprocess,this._verticalBlurPostprocess]):(this._horizontalBlurPostprocess=new Ma("HighlightLayerHBP",new Ne(1,0),this._options.blurHorizontalSize/2,{size:{width:e,height:t},samplingMode:ge.BILINEAR_SAMPLINGMODE,engine:this._scene.getEngine(),textureType:i,effectWrapper:this._thinEffectLayer._postProcesses[0]}),this._horizontalBlurPostprocess.width=e,this._horizontalBlurPostprocess.height=t,this._horizontalBlurPostprocess.externalTextureSamplerBinding=!0,this._horizontalBlurPostprocess.onApplyObservable.add(r=>{r.setTexture("textureSampler",this._mainTexture)}),this._verticalBlurPostprocess=new Ma("HighlightLayerVBP",new Ne(0,1),this._options.blurVerticalSize/2,{size:{width:e,height:t},samplingMode:ge.BILINEAR_SAMPLINGMODE,engine:this._scene.getEngine(),textureType:i}),this._postProcesses=[this._horizontalBlurPostprocess,this._verticalBlurPostprocess]),this._mainTexture.onAfterUnbindObservable.add(()=>{this.onBeforeBlurObservable.notifyObservers(this);let r=this._blurTexture.renderTarget;r&&(this._scene.postProcessManager.directRender(this._postProcesses,r,!0),this._engine.unBindFramebuffer(r,!0)),this.onAfterBlurObservable.notifyObservers(this)}),this._postProcesses.map(r=>{r.autoClear=!1}),this._mainTextureCreatedSize.width=this._mainTextureDesiredSize.width,this._mainTextureCreatedSize.height=this._mainTextureDesiredSize.height}needStencil(){return this._thinEffectLayer.needStencil()}isReady(e,t){return this._thinEffectLayer.isReady(e,t)}_internalRender(e,t){this._thinEffectLayer._internalCompose(e,t)}shouldRender(){return this._thinEffectLayer.shouldRender()}_shouldRenderMesh(e){return this._thinEffectLayer._shouldRenderMesh(e)}_canRenderMesh(e,t){return this._thinEffectLayer._canRenderMesh(e,t)}_addCustomEffectDefines(e){this._thinEffectLayer._addCustomEffectDefines(e)}_setEmissiveTextureAndColor(e,t,i){this._thinEffectLayer._setEmissiveTextureAndColor(e,t,i)}addExcludedMesh(e){this._thinEffectLayer.addExcludedMesh(e)}removeExcludedMesh(e){this._thinEffectLayer.removeExcludedMesh(e)}hasMesh(e){return this._thinEffectLayer.hasMesh(e)}addMesh(e,t,i=!1){this._thinEffectLayer.addMesh(e,t,i)}removeMesh(e){this._thinEffectLayer.removeMesh(e)}removeAllMeshes(){this._thinEffectLayer.removeAllMeshes()}_disposeMesh(e){this._thinEffectLayer._disposeMesh(e)}getClassName(){return"HighlightLayer"}serialize(){let e=tt.Serialize(this);e.customType="BABYLON.HighlightLayer",e.meshes=[];let t=this._thinEffectLayer._meshes;if(t)for(let r in t){let s=t[r];s&&e.meshes.push({glowEmissiveOnly:s.glowEmissiveOnly,color:s.color.asArray(),meshId:s.mesh.id})}e.excludedMeshes=[];let i=this._thinEffectLayer._excludedMeshes;if(i)for(let r in i){let s=i[r];s&&e.excludedMeshes.push(s.mesh.id)}return e}static Parse(e,t,i){let r=tt.Parse(()=>new n(e.name,t,e.options),e,t,i),s;for(s=0;s{Jo();Wu();LL();Pi();FP();xx(Qe.NAME_EFFECTLAYER,(n,e,t,i)=>{if(n.effectLayers){t.effectLayers||(t.effectLayers=[]);for(let r=0;r0){this._previousStencilState=this._engine.getStencilBuffer();for(let r of i)if(r.shouldRender()&&(!r.camera||r.camera.cameraRigMode===ut.RIG_MODE_NONE&&e===r.camera||r.camera.cameraRigMode!==ut.RIG_MODE_NONE&&r.camera._rigCameras.indexOf(e)>-1)){this._renderEffects=!0,this._needStencil=this._needStencil||r.needStencil();let s=r._mainTexture;s._shouldRender()&&(this.scene.incrementRenderId(),s.render(!1,!1),t=!0)}this.scene.incrementRenderId()}return t}_setStencil(){this._needStencil&&this._engine.setStencilBuffer(!0)}_setStencilBack(){this._needStencil&&this._engine.setStencilBuffer(this._previousStencilState)}_draw(e){if(this._renderEffects){this._engine.setDepthBuffer(!1);let t=this.scene.effectLayers;for(let i=0;i{let e=n._getComponent(Qe.NAME_EFFECTLAYER);e||(e=new BL(n),n._addComponent(e))}});function g9(n,e,t=()=>!0){let i=new js("ai3d-pick-highlight",n),r=new Te(.15,.45,1),s=null;function a(){i.removeAllMeshes(),s&&!s.isDisposed()&&(s.renderOutline=!1,s.outlineWidth=0),s=null}function o(c){c.isDisposed()||(i.addMesh(c,r),c.renderOutline=!0,c.outlineColor=r,c.outlineWidth=.045,s=c)}let l=n.onPointerObservable.add(c=>{var m;if(c.type!==it.POINTERDOWN)return;let f=c.event,h=f.clientX,d=f.clientY,u=c.pickInfo;u!=null&&u.hit&&u.pickedMesh?(t()?s!==u.pickedMesh&&(a(),o(u.pickedMesh)):a(),e({mesh:u.pickedMesh,pickedPoint:(m=u.pickedPoint)!=null?m:null,screenX:h,screenY:d})):(a(),e({mesh:null,pickedPoint:null,screenX:h,screenY:d}))});return()=>{a(),i.dispose(),n.onPointerObservable.remove(l)}}var v9=C(()=>{"use strict";to();Ht();p9();_9()});function She(n,e,t){let i=Te.FromHexString(e),r=new He(n,t);return r.emissiveColor=i,r.diffuseColor=Te.Black(),r.specularColor=Te.Black(),r.backFaceCulling=!1,r}function The(n){let e=new He("gizmo-origin-mat",n);return e.emissiveColor=new Te(.72,.78,.86),e.diffuseColor=Te.Black(),e.specularColor=Te.Black(),e}var mhe,lR,phe,VL,_he,ghe,UL,vhe,Ehe,cR,E9=C(()=>{"use strict";ps();nA();sA();Ve();Ht();Nu();Oy();mc();mhe=.32,lR=1.05,phe=.075,VL=.28,_he=.22,ghe=.16,UL=(lR+VL)*.42,vhe=new b(UL,UL,UL),Ehe=[{name:"x",color:"#e74c3c",rot:new b(0,0,-Math.PI/2),dir:new b(1,0,0)},{name:"y",color:"#2ecc71",rot:new b(0,0,0),dir:new b(0,1,0)},{name:"z",color:"#3498db",rot:new b(Math.PI/2,0,0),dir:new b(0,0,1)}];cR=class{constructor(e,t){this.engine=e,this.scene=new Qt(e),this.scene.clearColor=new lt(0,0,0,0),this.scene.autoClear=!1,this.camera=new gi("gizmo-cam",0,0,4.1,vhe,this.scene),this.camera.minZ=.01,this.camera.fov=.56,this.camera.detachControl(),new Xs("gizmo-light",new b(0,1,.5),this.scene);let i=uc.CreateSphere("gizmo-origin",{diameter:ghe,segments:16},this.scene);i.material=The(this.scene);for(let{name:s,color:a,rot:o,dir:l}of Ehe){let c=She(`gizmo-${s}-mat`,a,this.scene),f=uc.CreateCylinder(`gizmo-${s}-shaft`,{height:lR,diameter:phe,tessellation:8},this.scene);f.material=c,f.position=l.scale(lR/2),f.rotation=o;let h=uc.CreateCylinder(`gizmo-${s}-head`,{height:VL,diameterTop:0,diameterBottom:_he,tessellation:8},this.scene);h.material=c;let d=lR+VL/2;h.position=l.scale(d),h.rotation=o}let r=mhe;this.viewport=new Za(.02,.03,r,r),this.camera.viewport=this.viewport,this.syncWith(t)}syncWith(e){this.camera.alpha=e.alpha,this.camera.beta=e.beta}render(){let e=this.engine.getRenderWidth(),t=this.engine.getRenderHeight(),i=this.viewport.x*e,r=this.viewport.y*t,s=this.viewport.width*e,a=this.viewport.height*t;this.engine.enableScissor(i,r,s,a),this.engine.clear(null,!1,!0,!0),this.scene.render(),this.engine.disableScissor()}dispose(){this.scene.dispose()}}});var kL={};et(kL,{boundingBoxRendererVertexShaderWGSL:()=>Ahe});var GL,S9,Ahe,WL=C(()=>{k();GL="boundingBoxRendererVertexShader",S9=`attribute position: vec3f;uniform world: mat4x4f;uniform viewProjection: mat4x4f; +}`;T.ShadersStore[YL]||(T.ShadersStore[YL]=A9);whe={name:YL,shader:A9}});var cl,b9=C(()=>{Ge();Ui();Pn();MM();mR();zt();RP();cl=class n extends Sc{set blurHorizontalSize(e){this._horizontalBlurPostprocess.kernel=e,this._options.blurHorizontalSize=e}set blurVerticalSize(e){this._verticalBlurPostprocess.kernel=e,this._options.blurVerticalSize=e}get blurHorizontalSize(){return this._horizontalBlurPostprocess.kernel}get blurVerticalSize(){return this._verticalBlurPostprocess.kernel}get stencilReference(){return this._instanceGlowingMeshStencilReference<<8-this.numStencilBits}constructor(e,t,i,r=!1){super(e,t,i!==void 0?!!i.forceGLSL:!1),this.innerGlow=!0,this.outerGlow=!0,this._instanceGlowingMeshStencilReference=n.GlowingMeshStencilReference++,this._meshes={},this._excludedMeshes={},this._mainObjectRendererRenderPassId=-1,this.numStencilBits=8,this.neutralColor=n.NeutralColor,this._options={mainTextureRatio:.5,blurTextureSizeRatio:.5,mainTextureFixedSize:0,blurHorizontalSize:1,blurVerticalSize:1,alphaBlendingMode:2,camera:null,renderingGroupId:-1,forceGLSL:!1,mainTextureType:0,mainTextureFormat:5,isStroke:!1,...i},this._init(this._options),this._shouldRender=!1,r&&this._createTextureAndPostProcesses()}getClassName(){return"HighlightLayer"}async _importShadersAsync(){this._shaderLanguage===1?await Promise.all([Promise.resolve().then(()=>(p9(),m9)),Promise.resolve().then(()=>(v9(),g9)),Promise.resolve().then(()=>(hR(),fR))]):await Promise.all([Promise.resolve().then(()=>(T9(),S9)),Promise.resolve().then(()=>(R9(),x9)),Promise.resolve().then(()=>(uR(),dR))]),await super._importShadersAsync()}getEffectName(){return n.EffectName}_numInternalDraws(){return 2}_createMergeEffect(){return this._engine.createEffect("glowMapMerge",[L.PositionKind],["offset"],["textureSampler"],this._options.isStroke?`#define STROKE +`:void 0,void 0,void 0,void 0,void 0,this._shaderLanguage,this._shadersLoaded?void 0:async()=>{await this._importShadersAsync(),this._shadersLoaded=!0})}_createTextureAndPostProcesses(){this._options.alphaBlendingMode===2?(this._downSamplePostprocess=new Wl("HighlightLayerPPP",this._scene.getEngine()),this._horizontalBlurPostprocess=new go("HighlightLayerHBP",this._scene.getEngine(),new Ne(1,0),this._options.blurHorizontalSize),this._verticalBlurPostprocess=new go("HighlightLayerVBP",this._scene.getEngine(),new Ne(0,1),this._options.blurVerticalSize),this._postProcesses=[this._downSamplePostprocess,this._horizontalBlurPostprocess,this._verticalBlurPostprocess]):(this._horizontalBlurPostprocess=new Xn("HighlightLayerHBP",this._scene.getEngine(),new Ne(1,0),this._options.blurHorizontalSize/2),this._verticalBlurPostprocess=new Xn("HighlightLayerVBP",this._scene.getEngine(),new Ne(0,1),this._options.blurVerticalSize/2),this._postProcesses=[this._horizontalBlurPostprocess,this._verticalBlurPostprocess])}needStencil(){return!0}isReady(e,t){let i=e.getMaterial(),r=e.getRenderingMesh();if(!i||!r||!this._meshes)return!1;let s=null,a=this._meshes[r.uniqueId];return a&&a.glowEmissiveOnly&&i&&(s=i.emissiveTexture),super._isSubMeshReady(e,t,s)}_canRenderMesh(e,t){return!0}_internalCompose(e,t){this.bindTexturesForCompose(e);let i=this._engine;i.cacheStencilState(),i.setStencilOperationPass(7681),i.setStencilOperationFail(7680),i.setStencilOperationDepthFail(7680),i.setStencilMask(0),i.setStencilBuffer(!0),i.setStencilFunctionReference(this._instanceGlowingMeshStencilReference<<8-this.numStencilBits),i.setStencilFunctionMask(255-((1<<8-this.numStencilBits)-1)),this.outerGlow&&t===0&&(e.setFloat("offset",0),i.setStencilFunction(517),i.drawElementsType(ve.TriangleFillMode,0,6)),this.innerGlow&&t===1&&(e.setFloat("offset",1),i.setStencilFunction(514),i.drawElementsType(ve.TriangleFillMode,0,6)),i.restoreStencilState()}_setEmissiveTextureAndColor(e,t,i){let r=this._meshes[e.uniqueId];r?this._emissiveTextureAndColor.color.set(r.color.r,r.color.g,r.color.b,1):this._emissiveTextureAndColor.color.set(this.neutralColor.r,this.neutralColor.g,this.neutralColor.b,this.neutralColor.a),r&&r.glowEmissiveOnly&&i?(this._emissiveTextureAndColor.texture=i.emissiveTexture,this._emissiveTextureAndColor.color.set(1,1,1,1)):this._emissiveTextureAndColor.texture=null}shouldRender(){return!!(this._meshes&&super.shouldRender())}_shouldRenderMesh(e){return this._excludedMeshes&&this._excludedMeshes[e.uniqueId]?!1:super.hasMesh(e)}_addCustomEffectDefines(e){e.push("#define HIGHLIGHT")}addExcludedMesh(e){if(!this._excludedMeshes)return;if(!this._excludedMeshes[e.uniqueId]){let i={mesh:e,beforeBind:null,afterRender:null,stencilState:!1};i.beforeBind=e.onBeforeBindObservable.add(r=>{this._mainObjectRendererRenderPassId!==-1&&this._mainObjectRendererRenderPassId!==this._engine.currentRenderPassId||(i.stencilState=r.getEngine().getStencilBuffer(),r.getEngine().setStencilBuffer(!1))}),i.afterRender=e.onAfterRenderObservable.add(r=>{this._mainObjectRendererRenderPassId!==-1&&this._mainObjectRendererRenderPassId!==this._engine.currentRenderPassId||r.getEngine().setStencilBuffer(i.stencilState)}),this._excludedMeshes[e.uniqueId]=i}}removeExcludedMesh(e){if(!this._excludedMeshes)return;let t=this._excludedMeshes[e.uniqueId];t&&(t.beforeBind&&e.onBeforeBindObservable.remove(t.beforeBind),t.afterRender&&e.onAfterRenderObservable.remove(t.afterRender)),this._excludedMeshes[e.uniqueId]=null}hasMesh(e){return!this._meshes||!super.hasMesh(e)?!1:!!this._meshes[e.uniqueId]}addMesh(e,t,i=!1){if(!this._meshes)return;let r=this._meshes[e.uniqueId];r?r.color=t:(this._meshes[e.uniqueId]={mesh:e,color:t,observerHighlight:e.onBeforeBindObservable.add(s=>{this._mainObjectRendererRenderPassId!==-1&&this._mainObjectRendererRenderPassId!==this._engine.currentRenderPassId||this.isEnabled&&(this._excludedMeshes&&this._excludedMeshes[s.uniqueId]?this._defaultStencilReference(s):s.getScene().getEngine().setStencilFunctionReference(this._instanceGlowingMeshStencilReference<<8-this.numStencilBits))}),observerDefault:e.onAfterRenderObservable.add(s=>{this._mainObjectRendererRenderPassId!==-1&&this._mainObjectRendererRenderPassId!==this._engine.currentRenderPassId||this.isEnabled&&this._defaultStencilReference(s)}),glowEmissiveOnly:i},e.onDisposeObservable.add(()=>{this._disposeMesh(e)})),this._shouldRender=!0}removeMesh(e){if(!this._meshes)return;let t=this._meshes[e.uniqueId];t&&(t.observerHighlight&&e.onBeforeBindObservable.remove(t.observerHighlight),t.observerDefault&&e.onAfterRenderObservable.remove(t.observerDefault),delete this._meshes[e.uniqueId]),this._shouldRender=!1;for(let i in this._meshes)if(this._meshes[i]){this._shouldRender=!0;break}}removeAllMeshes(){if(this._meshes){for(let e in this._meshes)if(Object.prototype.hasOwnProperty.call(this._meshes,e)){let t=this._meshes[e];t&&this.removeMesh(t.mesh)}}}_defaultStencilReference(e){e.getScene().getEngine().setStencilFunctionReference(n.NormalMeshStencilReference<<8-this.numStencilBits)}_disposeMesh(e){this.removeMesh(e),this.removeExcludedMesh(e)}dispose(){if(this._meshes){for(let e in this._meshes){let t=this._meshes[e];t&&t.mesh&&(t.observerHighlight&&t.mesh.onBeforeBindObservable.remove(t.observerHighlight),t.observerDefault&&t.mesh.onAfterRenderObservable.remove(t.observerDefault))}this._meshes=null}if(this._excludedMeshes){for(let e in this._excludedMeshes){let t=this._excludedMeshes[e];t&&(t.beforeBind&&t.mesh.onBeforeBindObservable.remove(t.beforeBind),t.afterRender&&t.mesh.onAfterRenderObservable.remove(t.afterRender))}this._excludedMeshes=null}super.dispose()}};cl.EffectName="HighlightLayer";cl.NeutralColor=new lt(0,0,0,0);cl.GlowingMeshStencilReference=2;cl.NormalMeshStencilReference=1});var pR,qs,I9=C(()=>{kt();Ut();hi();ps();Ge();Gr();cf();kl();yM();bP();WL();Pt();Vi();zt();b9();Er();zo();mR();Qt.prototype.getHighlightLayerByName=function(n){var e;for(let t=0;t<((e=this.effectLayers)==null?void 0:e.length);t++)if(this.effectLayers[t].name===n&&this.effectLayers[t].getEffectName()===qs.EffectName)return this.effectLayers[t];return null};pR=class extends Ri{constructor(e,t,i,r,s=null,a=ge.BILINEAR_SAMPLINGMODE,o,l){let c={uniforms:go.Uniforms,size:typeof r=="number"?r:void 0,camera:s,samplingMode:a,engine:o,reusable:l,...r};super(e,go.FragmentUrl,{effectWrapper:typeof r=="number"||!r.effectWrapper?new go(e,o,t,i,c):void 0,...c}),this.direction=t,this.kernel=i,this.onApplyObservable.add(()=>{this._effectWrapper.textureWidth=this.width,this._effectWrapper.textureHeight=this.height})}_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.resolve().then(()=>(hR(),fR)))):t.push(Promise.resolve().then(()=>(uR(),dR))),super._gatherImports(e,t)}},qs=class n extends Rs{static get NeutralColor(){return cl.NeutralColor}static set NeutralColor(e){cl.NeutralColor=e}get innerGlow(){return this._thinEffectLayer.innerGlow}set innerGlow(e){this._thinEffectLayer.innerGlow=e}get outerGlow(){return this._thinEffectLayer.outerGlow}set outerGlow(e){this._thinEffectLayer.outerGlow=e}set blurHorizontalSize(e){this._thinEffectLayer.blurHorizontalSize=e}set blurVerticalSize(e){this._thinEffectLayer.blurVerticalSize=e}get blurHorizontalSize(){return this._thinEffectLayer.blurHorizontalSize}get blurVerticalSize(){return this._thinEffectLayer.blurVerticalSize}get numStencilBits(){return this._thinEffectLayer.numStencilBits}set numStencilBits(e){this._thinEffectLayer.numStencilBits=e}get stencilReference(){return this._thinEffectLayer.stencilReference}constructor(e,t,i){super(e,t,i!==void 0?!!i.forceGLSL:!1,new cl(e,t,i)),this.onBeforeBlurObservable=new te,this.onAfterBlurObservable=new te,this._engine.isStencilEnable||J.Warn("Rendering the Highlight Layer requires the stencil to be active on the canvas. var engine = new Engine(canvas, antialias, { stencil: true }"),this._options={mainTextureRatio:.5,blurTextureSizeRatio:.5,mainTextureFixedSize:0,blurHorizontalSize:1,blurVerticalSize:1,alphaBlendingMode:2,camera:null,renderingGroupId:-1,mainTextureType:0,mainTextureFormat:5,forceGLSL:!1,isStroke:!1,generateStencilBuffer:!1,...i},this._init(this._options),this._shouldRender=!1}getEffectName(){return n.EffectName}_numInternalDraws(){return 2}_createMergeEffect(){return this._thinEffectLayer._createMergeEffect()}_createTextureAndPostProcesses(){let e=this._mainTextureDesiredSize.width*this._options.blurTextureSizeRatio,t=this._mainTextureDesiredSize.height*this._options.blurTextureSizeRatio;e=this._engine.needPOTTextures?fs(e,this._maxSize):e,t=this._engine.needPOTTextures?fs(t,this._maxSize):t;let i;this._engine.getCaps().textureHalfFloatRender?i=2:i=0,this._blurTexture=new Or("HighlightLayerBlurRTT",{width:e,height:t},this._scene,!1,!0,i),this._blurTexture.wrapU=ge.CLAMP_ADDRESSMODE,this._blurTexture.wrapV=ge.CLAMP_ADDRESSMODE,this._blurTexture.anisotropicFilteringLevel=16,this._blurTexture.updateSamplingMode(ge.TRILINEAR_SAMPLINGMODE),this._blurTexture.renderParticles=!1,this._blurTexture.ignoreCameraViewport=!0,this._textures=[this._blurTexture],this._thinEffectLayer.bindTexturesForCompose=r=>{r.setTexture("textureSampler",this._blurTexture)},this._thinEffectLayer._createTextureAndPostProcesses(),this._options.alphaBlendingMode===2?(this._downSamplePostprocess=new Nh("HighlightLayerPPP",{size:this._options.blurTextureSizeRatio,samplingMode:ge.BILINEAR_SAMPLINGMODE,engine:this._scene.getEngine(),effectWrapper:this._thinEffectLayer._postProcesses[0]}),this._downSamplePostprocess.externalTextureSamplerBinding=!0,this._downSamplePostprocess.onApplyObservable.add(r=>{r.setTexture("textureSampler",this._mainTexture)}),this._horizontalBlurPostprocess=new pR("HighlightLayerHBP",new Ne(1,0),this._options.blurHorizontalSize,{samplingMode:ge.BILINEAR_SAMPLINGMODE,engine:this._scene.getEngine(),effectWrapper:this._thinEffectLayer._postProcesses[1]}),this._horizontalBlurPostprocess.onApplyObservable.add(r=>{r.setFloat2("screenSize",e,t)}),this._verticalBlurPostprocess=new pR("HighlightLayerVBP",new Ne(0,1),this._options.blurVerticalSize,{samplingMode:ge.BILINEAR_SAMPLINGMODE,engine:this._scene.getEngine(),effectWrapper:this._thinEffectLayer._postProcesses[2]}),this._verticalBlurPostprocess.onApplyObservable.add(r=>{r.setFloat2("screenSize",e,t)}),this._postProcesses=[this._downSamplePostprocess,this._horizontalBlurPostprocess,this._verticalBlurPostprocess]):(this._horizontalBlurPostprocess=new Da("HighlightLayerHBP",new Ne(1,0),this._options.blurHorizontalSize/2,{size:{width:e,height:t},samplingMode:ge.BILINEAR_SAMPLINGMODE,engine:this._scene.getEngine(),textureType:i,effectWrapper:this._thinEffectLayer._postProcesses[0]}),this._horizontalBlurPostprocess.width=e,this._horizontalBlurPostprocess.height=t,this._horizontalBlurPostprocess.externalTextureSamplerBinding=!0,this._horizontalBlurPostprocess.onApplyObservable.add(r=>{r.setTexture("textureSampler",this._mainTexture)}),this._verticalBlurPostprocess=new Da("HighlightLayerVBP",new Ne(0,1),this._options.blurVerticalSize/2,{size:{width:e,height:t},samplingMode:ge.BILINEAR_SAMPLINGMODE,engine:this._scene.getEngine(),textureType:i}),this._postProcesses=[this._horizontalBlurPostprocess,this._verticalBlurPostprocess]),this._mainTexture.onAfterUnbindObservable.add(()=>{this.onBeforeBlurObservable.notifyObservers(this);let r=this._blurTexture.renderTarget;r&&(this._scene.postProcessManager.directRender(this._postProcesses,r,!0),this._engine.unBindFramebuffer(r,!0)),this.onAfterBlurObservable.notifyObservers(this)}),this._postProcesses.map(r=>{r.autoClear=!1}),this._mainTextureCreatedSize.width=this._mainTextureDesiredSize.width,this._mainTextureCreatedSize.height=this._mainTextureDesiredSize.height}needStencil(){return this._thinEffectLayer.needStencil()}isReady(e,t){return this._thinEffectLayer.isReady(e,t)}_internalRender(e,t){this._thinEffectLayer._internalCompose(e,t)}shouldRender(){return this._thinEffectLayer.shouldRender()}_shouldRenderMesh(e){return this._thinEffectLayer._shouldRenderMesh(e)}_canRenderMesh(e,t){return this._thinEffectLayer._canRenderMesh(e,t)}_addCustomEffectDefines(e){this._thinEffectLayer._addCustomEffectDefines(e)}_setEmissiveTextureAndColor(e,t,i){this._thinEffectLayer._setEmissiveTextureAndColor(e,t,i)}addExcludedMesh(e){this._thinEffectLayer.addExcludedMesh(e)}removeExcludedMesh(e){this._thinEffectLayer.removeExcludedMesh(e)}hasMesh(e){return this._thinEffectLayer.hasMesh(e)}addMesh(e,t,i=!1){this._thinEffectLayer.addMesh(e,t,i)}removeMesh(e){this._thinEffectLayer.removeMesh(e)}removeAllMeshes(){this._thinEffectLayer.removeAllMeshes()}_disposeMesh(e){this._thinEffectLayer._disposeMesh(e)}getClassName(){return"HighlightLayer"}serialize(){let e=tt.Serialize(this);e.customType="BABYLON.HighlightLayer",e.meshes=[];let t=this._thinEffectLayer._meshes;if(t)for(let r in t){let s=t[r];s&&e.meshes.push({glowEmissiveOnly:s.glowEmissiveOnly,color:s.color.asArray(),meshId:s.mesh.id})}e.excludedMeshes=[];let i=this._thinEffectLayer._excludedMeshes;if(i)for(let r in i){let s=i[r];s&&e.excludedMeshes.push(s.mesh.id)}return e}static Parse(e,t,i){let r=tt.Parse(()=>new n(e.name,t,e.options),e,t,i),s;for(s=0;s{el();Yu();WL();Pi();XP();Ox(Qe.NAME_EFFECTLAYER,(n,e,t,i)=>{if(n.effectLayers){t.effectLayers||(t.effectLayers=[]);for(let r=0;r0){this._previousStencilState=this._engine.getStencilBuffer();for(let r of i)if(r.shouldRender()&&(!r.camera||r.camera.cameraRigMode===ut.RIG_MODE_NONE&&e===r.camera||r.camera.cameraRigMode!==ut.RIG_MODE_NONE&&r.camera._rigCameras.indexOf(e)>-1)){this._renderEffects=!0,this._needStencil=this._needStencil||r.needStencil();let s=r._mainTexture;s._shouldRender()&&(this.scene.incrementRenderId(),s.render(!1,!1),t=!0)}this.scene.incrementRenderId()}return t}_setStencil(){this._needStencil&&this._engine.setStencilBuffer(!0)}_setStencilBack(){this._needStencil&&this._engine.setStencilBuffer(this._previousStencilState)}_draw(e){if(this._renderEffects){this._engine.setDepthBuffer(!1);let t=this.scene.effectLayers;for(let i=0;i{let e=n._getComponent(Qe.NAME_EFFECTLAYER);e||(e=new KL(n),n._addComponent(e))}});function C9(n,e,t=()=>!0){let i=new qs("ai3d-pick-highlight",n),r=new Te(.15,.45,1),s=null;function a(){i.removeAllMeshes(),s&&!s.isDisposed()&&(s.renderOutline=!1,s.outlineWidth=0),s=null}function o(c){c.isDisposed()||(i.addMesh(c,r),c.renderOutline=!0,c.outlineColor=r,c.outlineWidth=.045,s=c)}let l=n.onPointerObservable.add(c=>{var m;if(c.type!==it.POINTERDOWN)return;let f=c.event,h=f.clientX,d=f.clientY,u=c.pickInfo;u!=null&&u.hit&&u.pickedMesh?(t()?s!==u.pickedMesh&&(a(),o(u.pickedMesh)):a(),e({mesh:u.pickedMesh,pickedPoint:(m=u.pickedPoint)!=null?m:null,screenX:h,screenY:d})):(a(),e({mesh:null,pickedPoint:null,screenX:h,screenY:d}))});return()=>{a(),i.dispose(),n.onPointerObservable.remove(l)}}var y9=C(()=>{"use strict";ro();zt();I9();M9()});function Whe(n,e,t){let i=Te.FromHexString(e),r=new He(n,t);return r.emissiveColor=i,r.diffuseColor=Te.Black(),r.specularColor=Te.Black(),r.backFaceCulling=!1,r}function Hhe(n){let e=new He("gizmo-origin-mat",n);return e.emissiveColor=new Te(.72,.78,.86),e.diffuseColor=Te.Black(),e.specularColor=Te.Black(),e}var Fhe,_R,Bhe,qL,Uhe,Vhe,jL,Ghe,khe,gR,P9=C(()=>{"use strict";ps();mA();pA();Ge();zt();Uu();Hy();_c();Fhe=.32,_R=1.05,Bhe=.075,qL=.28,Uhe=.22,Vhe=.16,jL=(_R+qL)*.42,Ghe=new b(jL,jL,jL),khe=[{name:"x",color:"#e74c3c",rot:new b(0,0,-Math.PI/2),dir:new b(1,0,0)},{name:"y",color:"#2ecc71",rot:new b(0,0,0),dir:new b(0,1,0)},{name:"z",color:"#3498db",rot:new b(Math.PI/2,0,0),dir:new b(0,0,1)}];gR=class{constructor(e,t){this.engine=e,this.scene=new Qt(e),this.scene.clearColor=new lt(0,0,0,0),this.scene.autoClear=!1,this.camera=new gi("gizmo-cam",0,0,4.1,Ghe,this.scene),this.camera.minZ=.01,this.camera.fov=.56,this.camera.detachControl(),new Ys("gizmo-light",new b(0,1,.5),this.scene);let i=pc.CreateSphere("gizmo-origin",{diameter:Vhe,segments:16},this.scene);i.material=Hhe(this.scene);for(let{name:s,color:a,rot:o,dir:l}of khe){let c=Whe(`gizmo-${s}-mat`,a,this.scene),f=pc.CreateCylinder(`gizmo-${s}-shaft`,{height:_R,diameter:Bhe,tessellation:8},this.scene);f.material=c,f.position=l.scale(_R/2),f.rotation=o;let h=pc.CreateCylinder(`gizmo-${s}-head`,{height:qL,diameterTop:0,diameterBottom:Uhe,tessellation:8},this.scene);h.material=c;let d=_R+qL/2;h.position=l.scale(d),h.rotation=o}let r=Fhe;this.viewport=new $a(.02,.03,r,r),this.camera.viewport=this.viewport,this.syncWith(t)}syncWith(e){this.camera.alpha=e.alpha,this.camera.beta=e.beta}render(){let e=this.engine.getRenderWidth(),t=this.engine.getRenderHeight(),i=this.viewport.x*e,r=this.viewport.y*t,s=this.viewport.width*e,a=this.viewport.height*t;this.engine.enableScissor(i,r,s,a),this.engine.clear(null,!1,!0,!0),this.scene.render(),this.engine.disableScissor()}dispose(){this.scene.dispose()}}});var QL={};$e(QL,{boundingBoxRendererVertexShaderWGSL:()=>zhe});var ZL,D9,zhe,$L=C(()=>{G();ZL="boundingBoxRendererVertexShader",D9=`attribute position: vec3f;uniform world: mat4x4f;uniform viewProjection: mat4x4f; #ifdef INSTANCES attribute world0 : vec4;attribute world1 : vec4;attribute world2 : vec4;attribute world3 : vec4; #endif @@ -23764,18 +23764,18 @@ var worldPos: vec4f=uniforms.world* vec4f(vertexInputs.position,1.0); vertexOutputs.position=uniforms.viewProjection*worldPos; #define CUSTOM_VERTEX_MAIN_END } -`;S.ShadersStoreWGSL[GL]||(S.ShadersStoreWGSL[GL]=S9);Ahe={name:GL,shader:S9}});var zL={};et(zL,{boundingBoxRendererPixelShaderWGSL:()=>xhe});var HL,T9,xhe,XL=C(()=>{k();HL="boundingBoxRendererPixelShader",T9=`uniform color: vec4f; +`;T.ShadersStoreWGSL[ZL]||(T.ShadersStoreWGSL[ZL]=D9);zhe={name:ZL,shader:D9}});var eO={};$e(eO,{boundingBoxRendererPixelShaderWGSL:()=>Xhe});var JL,L9,Xhe,tO=C(()=>{G();JL="boundingBoxRendererPixelShader",L9=`uniform color: vec4f; #define CUSTOM_FRAGMENT_DEFINITIONS @fragment fn main(input: FragmentInputs)->FragmentOutputs { #define CUSTOM_FRAGMENT_MAIN_BEGIN fragmentOutputs.color=uniforms.color; #define CUSTOM_FRAGMENT_MAIN_END -}`;S.ShadersStoreWGSL[HL]||(S.ShadersStoreWGSL[HL]=T9);xhe={name:HL,shader:T9}});var A9,Rhe,x9=C(()=>{k();A9="boundingBoxRendererVertexDeclaration",Rhe=`uniform mat4 world;uniform mat4 viewProjection; +}`;T.ShadersStoreWGSL[JL]||(T.ShadersStoreWGSL[JL]=L9);Xhe={name:JL,shader:L9}});var O9,Yhe,N9=C(()=>{G();O9="boundingBoxRendererVertexDeclaration",Yhe=`uniform mat4 world;uniform mat4 viewProjection; #ifdef MULTIVIEW uniform mat4 viewProjectionR; #endif -`;S.IncludesShadersStore[A9]||(S.IncludesShadersStore[A9]=Rhe)});var R9,bhe,YL=C(()=>{k();R9="boundingBoxRendererUboDeclaration",bhe=`#ifdef WEBGL2 +`;T.IncludesShadersStore[O9]||(T.IncludesShadersStore[O9]=Yhe)});var w9,Khe,iO=C(()=>{G();w9="boundingBoxRendererUboDeclaration",Khe=`#ifdef WEBGL2 uniform vec4 color;uniform mat4 world;uniform mat4 viewProjection; #ifdef MULTIVIEW uniform mat4 viewProjectionR; @@ -23783,7 +23783,7 @@ uniform mat4 viewProjectionR; #else layout(std140,column_major) uniform;uniform BoundingBoxRenderer {vec4 color;mat4 world;mat4 viewProjection;mat4 viewProjectionR;}; #endif -`;S.IncludesShadersStore[R9]||(S.IncludesShadersStore[R9]=bhe)});var jL={};et(jL,{boundingBoxRendererVertexShader:()=>Ihe});var KL,b9,Ihe,qL=C(()=>{k();x9();YL();KL="boundingBoxRendererVertexShader",b9=`attribute vec3 position; +`;T.IncludesShadersStore[w9]||(T.IncludesShadersStore[w9]=Khe)});var nO={};$e(nO,{boundingBoxRendererVertexShader:()=>jhe});var rO,F9,jhe,sO=C(()=>{G();N9();iO();rO="boundingBoxRendererVertexShader",F9=`attribute vec3 position; #include<__decl__boundingBoxRendererVertex> #ifdef INSTANCES attribute vec4 world0;attribute vec4 world1;attribute vec4 world2;attribute vec4 world3; @@ -23803,37 +23803,39 @@ gl_Position=viewProjection*worldPos; #endif #define CUSTOM_VERTEX_MAIN_END } -`;S.ShadersStore[KL]||(S.ShadersStore[KL]=b9);Ihe={name:KL,shader:b9}});var I9,Mhe,M9=C(()=>{k();I9="boundingBoxRendererFragmentDeclaration",Mhe=`uniform vec4 color; -`;S.IncludesShadersStore[I9]||(S.IncludesShadersStore[I9]=Mhe)});var QL={};et(QL,{boundingBoxRendererPixelShader:()=>Che});var ZL,C9,Che,JL=C(()=>{k();M9();YL();ZL="boundingBoxRendererPixelShader",C9=`#include<__decl__boundingBoxRendererFragment> +`;T.ShadersStore[rO]||(T.ShadersStore[rO]=F9);jhe={name:rO,shader:F9}});var B9,qhe,U9=C(()=>{G();B9="boundingBoxRendererFragmentDeclaration",qhe=`uniform vec4 color; +`;T.IncludesShadersStore[B9]||(T.IncludesShadersStore[B9]=qhe)});var oO={};$e(oO,{boundingBoxRendererPixelShader:()=>Zhe});var aO,V9,Zhe,lO=C(()=>{G();U9();iO();aO="boundingBoxRendererPixelShader",V9=`#include<__decl__boundingBoxRendererFragment> #define CUSTOM_FRAGMENT_DEFINITIONS void main(void) { #define CUSTOM_FRAGMENT_MAIN_BEGIN gl_FragColor=color; #define CUSTOM_FRAGMENT_MAIN_END -}`;S.ShadersStore[ZL]||(S.ShadersStore[ZL]=C9);Che={name:ZL,shader:C9}});var D9,y9,fR,yhe,Phe,P9,$L,L9=C(()=>{ps();Ui();Ju();Ve();$a();Wu();yC();Pn();hy();Ht();hi();Dh();nf();iy();Go();Pt();Object.defineProperty(Qt.prototype,"forceShowBoundingBoxes",{get:function(){return this._forceShowBoundingBoxes||!1},set:function(n){this._forceShowBoundingBoxes=n,n&&this.getBoundingBoxRenderer()},enumerable:!0,configurable:!0});Qt.prototype.getBoundingBoxRenderer=function(){return this._boundingBoxRenderer||(this._boundingBoxRenderer=new $L(this)),this._boundingBoxRenderer};Object.defineProperty(ur.prototype,"showBoundingBox",{get:function(){return this._showBoundingBox||!1},set:function(n){this._showBoundingBox=n,n&&this.getScene().getBoundingBoxRenderer()},enumerable:!0,configurable:!0});D9=K.Identity(),y9=new K,fR=new b,yhe=new b,Phe=D9.asArray(),P9=new cf(fR,fR),$L=class{get shaderLanguage(){return this._shaderLanguage}constructor(e){this.name=Qe.NAME_BOUNDINGBOXRENDERER,this.frontColor=new Te(1,1,1),this.backColor=new Te(.1,.1,.1),this.showBackLines=!0,this.onBeforeBoxRenderingObservable=new ee,this.onAfterBoxRenderingObservable=new ee,this.onResourcesReadyObservable=new ee,this.enabled=!0,this._shaderLanguage=0,this.renderList=new Fi(32),this._vertexBuffers={},this._fillIndexBuffer=null,this._fillIndexData=null,this._matrixBuffer=null,this._matrices=null,this._useInstances=!1,this._drawWrapperFront=null,this._drawWrapperBack=null,this.scene=e,this.scene.getEngine().isWebGPU&&(this._shaderLanguage=1),e._addComponent(this),this._uniformBufferFront=new or(this.scene.getEngine(),void 0,void 0,"BoundingBoxRendererFront",!0),this._buildUniformLayout(this._uniformBufferFront),this._uniformBufferBack=new or(this.scene.getEngine(),void 0,void 0,"BoundingBoxRendererBack",!0),this._buildUniformLayout(this._uniformBufferBack)}_buildUniformLayout(e){e.addUniform("color",4),e.addUniform("world",16),e.addUniform("viewProjection",16),e.addUniform("viewProjectionR",16),e.create()}register(){this.scene._beforeEvaluateActiveMeshStage.registerStep(Qe.STEP_BEFOREEVALUATEACTIVEMESH_BOUNDINGBOXRENDERER,this,this.reset),this.scene._preActiveMeshStage.registerStep(Qe.STEP_PREACTIVEMESH_BOUNDINGBOXRENDERER,this,this._preActiveMesh),this.scene._evaluateSubMeshStage.registerStep(Qe.STEP_EVALUATESUBMESH_BOUNDINGBOXRENDERER,this,this._evaluateSubMesh),this.scene._afterRenderingGroupDrawStage.registerStep(Qe.STEP_AFTERRENDERINGGROUPDRAW_BOUNDINGBOXRENDERER,this,this.render)}async whenReadyAsync(e=16,t=3e4){return this._prepareResources(),await new Promise(i=>{Vo(()=>this._colorShader.isReady(),()=>{i()},(r,s)=>{s?($.Error("BoundingBoxRenderer: Timeout while waiting for the renderer to be ready."),r&&$.Error(r)):($.Error("BoundingBoxRenderer: An unexpected error occurred while waiting for the renderer to be ready."),r&&($.Error(r),r.stack&&$.Error(r.stack)))},e,t)})}_evaluateSubMesh(e,t){if(e.showSubMeshesBoundingBox){let i=t.getBoundingInfo();i!=null&&(i.boundingBox._tag=e.renderingGroupId,this.renderList.push(i.boundingBox))}}_preActiveMesh(e){if(e.showBoundingBox||this.scene.forceShowBoundingBoxes){let t=e.getBoundingInfo();t.boundingBox._tag=e.renderingGroupId,this.renderList.push(t.boundingBox)}}_prepareResources(){if(this._colorShader)return;this._colorShader=new ho("colorShader",this.scene,"boundingBoxRenderer",{attributes:[L.PositionKind,"world0","world1","world2","world3"],uniforms:["world","viewProjection","viewProjectionR","color"],uniformBuffers:["BoundingBoxRenderer"],shaderLanguage:this._shaderLanguage,extraInitializationsAsync:async()=>{this._shaderLanguage===1?await Promise.all([Promise.resolve().then(()=>(WL(),kL)),Promise.resolve().then(()=>(XL(),zL))]):await Promise.all([Promise.resolve().then(()=>(qL(),jL)),Promise.resolve().then(()=>(JL(),QL))])}},!1),this._colorShader.setDefine("INSTANCES",this._useInstances),this._colorShader.doNotSerialize=!0,this._colorShader.reservedDataStore={hidden:!0},this._colorShaderForOcclusionQuery=new ho("colorShaderOccQuery",this.scene,"boundingBoxRenderer",{attributes:[L.PositionKind],uniforms:["world","viewProjection","viewProjectionR","color"],uniformBuffers:["BoundingBoxRenderer"],shaderLanguage:this._shaderLanguage,extraInitializationsAsync:async()=>{this._shaderLanguage===1?await Promise.all([Promise.resolve().then(()=>(WL(),kL)),Promise.resolve().then(()=>(XL(),zL))]):await Promise.all([Promise.resolve().then(()=>(qL(),jL)),Promise.resolve().then(()=>(JL(),QL))])}},!0),this._colorShaderForOcclusionQuery.doNotSerialize=!0,this._colorShaderForOcclusionQuery.reservedDataStore={hidden:!0};let e=this.scene.getEngine(),t=oA({size:1});this._vertexBuffers[L.PositionKind]=new L(e,t.positions,L.PositionKind,!1),this._createIndexBuffer(),this._fillIndexData=t.indices,this.onResourcesReadyObservable.notifyObservers(this)}_createIndexBuffer(){let e=this.scene.getEngine();this._indexBuffer=e.createIndexBuffer([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,7,1,6,2,5,3,4])}rebuild(){let e=this._vertexBuffers[L.PositionKind];e&&e._rebuild(),this._createIndexBuffer(),this._matrixBuffer&&this._matrixBuffer._rebuild()}reset(){this.renderList.reset()}render(e){var r,s;if(this.renderList.length===0||!this.enabled)return;if(this._useInstances){this._renderInstanced(e);return}if(this._prepareResources(),!this._colorShader.isReady())return;let t=this.scene.getEngine();t.setDepthWrite(!1);let i=this.scene.getTransformMatrix();for(let a=0;ar*2)&&(i=new Float32Array(r),this._matrices=i),this.onBeforeBoxRenderingObservable.notifyObservers(P9);let s=0,a=this.scene.floatingOriginOffset;for(let g=0;g{"use strict";Ve();oP();Ht();to();L9();ys();u0();kf=class kf{constructor(e,t,i){this.occlusionDirection=b.Zero();this.occlusionRay=new Hr(b.Zero(),b.Zero(),1);this.lastOccluded=!1;this.selected=null;this.partPointerActive=!1;this.activePointerId=null;this.scene=e,this.camera=t,this.meshes=i,this.setBoundingBoxColor(kf.BBOX_VISIBLE)}getParts(){return this.meshes}getPartId(e){return e.uniqueId}isDisposed(e){return e.isDisposed()}captureTransform(e){var t,i;return{parent:e.parent,position:e.position.clone(),rotation:e.rotation.clone(),rotationQuaternion:(i=(t=e.rotationQuaternion)==null?void 0:t.clone())!=null?i:null,scaling:e.scaling.clone()}}restoreTransform(e,t){var i,r;e.setParent(t.parent),e.position.copyFrom(t.position),e.rotation.copyFrom(t.rotation),e.rotationQuaternion=(r=(i=t.rotationQuaternion)==null?void 0:i.clone())!=null?r:null,e.scaling.copyFrom(t.scaling),e.computeWorldMatrix(!0)}subscribe(e){let t=this.scene.getEngine().getRenderingCanvas();t==null||t.classList.add("ai3d-disassembly-active");let i=this.scene.onPointerObservable.add(s=>{var o,l,c,f;let a=s.event;if(a.isPrimary!==!1){if(s.type===it.POINTERDOWN){if(a.button!==0)return;let h=(l=(o=s.pickInfo)==null?void 0:o.pickedMesh)!=null?l:null;if(this.partPointerActive=!!this.resolvePart(h),this.partPointerActive){a.preventDefault(),a.stopPropagation(),this.activePointerId=a.pointerId;try{(c=t==null?void 0:t.setPointerCapture)==null||c.call(t,a.pointerId)}catch(d){}this.camera.detachControl()}e.onPointerDown(h,a)}else if(s.type===it.POINTERMOVE){if(this.activePointerId!==null&&a.pointerId!==this.activePointerId)return;this.partPointerActive&&(a.preventDefault(),a.stopPropagation()),e.onPointerMove(a)}else if(s.type===it.POINTERUP){if(this.activePointerId!==null&&a.pointerId!==this.activePointerId)return;if(this.partPointerActive&&(a.preventDefault(),a.stopPropagation()),e.onPointerUp(a),this.activePointerId!==null&&((f=t==null?void 0:t.hasPointerCapture)!=null&&f.call(t,this.activePointerId)))try{t.releasePointerCapture(this.activePointerId)}catch(h){}this.partPointerActive=!1,this.activePointerId=null,this.camera.attachControl(this.scene.getEngine().getRenderingCanvas(),!0)}}}),r=this.scene.onAfterRenderCameraObservable.add(s=>{s===this.camera&&e.onRender()});return()=>{var s;if(this.scene.onPointerObservable.remove(i),this.scene.onAfterRenderCameraObservable.remove(r),t==null||t.classList.remove("ai3d-disassembly-active","ai3d-disassembly-dragging"),this.activePointerId!==null&&((s=t==null?void 0:t.hasPointerCapture)!=null&&s.call(t,this.activePointerId)))try{t.releasePointerCapture(this.activePointerId)}catch(a){}this.partPointerActive=!1,this.activePointerId=null,this.camera.attachControl(t,!0)}}resolvePart(e){if(!e||typeof e!="object")return null;if(this.isMeshInSet(e))return e;let t=e.parent;return t&&"uniqueId"in t&&this.isMeshInSet(t)?t:null}setSelected(e){this.selected&&!this.selected.isDisposed()&&(this.selected.showBoundingBox=!1),this.selected=e,this.lastOccluded=!1,this.setBoundingBoxColor(kf.BBOX_VISIBLE),this.selected&&!this.selected.isDisposed()&&(this.selected.showBoundingBox=!0)}beginDrag(e,t){var o,l,c;let i=this.getPointOnDragPlane(e,t);if(!i)return null;t.preventDefault(),t.stopPropagation(),(o=this.scene.getEngine().getRenderingCanvas())==null||o.classList.add("ai3d-disassembly-dragging"),e.setParent(null),e.computeWorldMatrix(!0),t.shiftKey&&!e.rotationQuaternion&&(e.rotationQuaternion=ze.FromEulerVector(e.rotation),e.rotation.set(0,0,0));let r=e.getBoundingInfo().boundingBox.centerWorld.clone(),s=bd(Zt(i),Zt(this.camera.getForwardRay().direction));if(!s)return null;let a={mesh:e,mode:t.shiftKey?"rotate":"move",plane:s,startPoint:i,startPosition:e.position.clone(),startRotationQuaternion:(c=(l=e.rotationQuaternion)==null?void 0:l.clone())!=null?c:null,pivot:r,pointerX:t.clientX,pointerY:t.clientY};return this.camera.detachControl(),a}updateDrag(e,t){if(t.preventDefault(),t.stopPropagation(),e.mode==="rotate"){this.updateRotation(e,t);return}let i=this.getRayPlanePoint(t,e.plane);if(!i)return;let r=i.subtract(e.startPoint);e.mesh.position=e.startPosition.add(r),e.mesh.computeWorldMatrix(!0)}endDrag(e){var t;(t=this.scene.getEngine().getRenderingCanvas())==null||t.classList.remove("ai3d-disassembly-dragging"),this.camera.attachControl(this.scene.getEngine().getRenderingCanvas(),!0)}updateSelectionOcclusion(e){let t=e.getBoundingInfo().boundingBox.centerWorld,i=this.camera.position,r=Ic(Zt(i),Zt(t));if(!r)return;let s=this.occlusionDirection;s.set(r.direction.x,r.direction.y,r.direction.z),this.occlusionRay.origin=i,this.occlusionRay.direction=s,this.occlusionRay.length=r.distance;let a=this.scene.pickWithRay(this.occlusionRay),o=!!(a!=null&&a.hit)&&bc(a.distance,r.distance,r.epsilon);o!==this.lastOccluded&&(this.lastOccluded=o,this.setBoundingBoxColor(o?kf.BBOX_OCCLUDED:kf.BBOX_VISIBLE))}isMeshInSet(e){return this.meshes.includes(e)}setBoundingBoxColor(e){var i,r;let t=(r=(i=this.scene).getBoundingBoxRenderer)==null?void 0:r.call(i);t&&(t.frontColor=e,t.backColor=e)}updateRotation(e,t){if(!e.startRotationQuaternion)return;let i=t.clientX-e.pointerX,r=t.clientY-e.pointerY,s=kg({startPosition:Zt(e.startPosition),pivot:Zt(e.pivot),startRotationQuaternion:Gg(e.startRotationQuaternion),yawAxis:Zt(this.camera.getDirection(b.Up()).normalize()),pitchAxis:Zt(this.camera.getDirection(b.Right()).normalize()),deltaX:i,deltaY:r,sensitivity:.01});s&&(e.mesh.position=new b(s.position.x,s.position.y,s.position.z),e.mesh.rotationQuaternion=new ze(s.rotationQuaternion.x,s.rotationQuaternion.y,s.rotationQuaternion.z,s.rotationQuaternion.w),e.mesh.rotation.set(0,0,0),e.mesh.computeWorldMatrix(!0))}getPointOnDragPlane(e,t){var s;let i=e.getBoundingInfo().boundingBox.centerWorld.clone(),r=bd(Zt(i),Zt(this.camera.getForwardRay().direction));return r&&(s=this.getRayPlanePoint(t,r))!=null?s:i}getRayPlanePoint(e,t){let i=this.scene.getEngine().getRenderingCanvas();if(!i)return null;let r=i.getBoundingClientRect(),s=e.clientX-r.left,a=e.clientY-r.top,o=this.scene.createPickingRay(s,a,K.Identity(),this.camera),l=Vg({origin:Zt(o.origin),direction:Zt(o.direction)},t);return l?new b(l.x,l.y,l.z):null}};kf.BBOX_VISIBLE=new Te(.25,.7,1),kf.BBOX_OCCLUDED=new Te(.1,.25,.4);eO=kf});var w9={};et(w9,{BabylonModelPreview:()=>uR,createBabylonModelPreview:()=>Ghe});function Nhe(n){let e=n.getClassName();return e==="DirectionalLight"||e==="PointLight"||e==="SpotLight"}function tO(n){return n.getClassName()==="GaussianSplattingMesh"}function Fhe(n){return!!n&&typeof n=="object"&&"getBoundingInfo"in n}function dR(n){return new b(n.x,n.y,n.z)}function whe(n){let e=n.replace(/\s+#.*$/,"").trim();if(e.startsWith('"')){let t=e.indexOf('"',1);if(t>1)return e.slice(1,t)}return e}function Bhe(n){let e=n.trim().split(/\s+/),t=e.findIndex(i=>!i.startsWith("-")&&!/^[-+]?\d*\.?\d+$/.test(i));return e.slice(Math.max(0,t)).join(" ").replace(/^"|"$/g,"")}function Uhe(n){var t,i;let e=(i=(t=n.split(".").pop())==null?void 0:t.toLowerCase())!=null?i:"png";return e==="jpg"||e==="jpeg"?"image/jpeg":e==="png"?"image/png":e==="bmp"?"image/bmp":e==="tga"?"image/x-tga":e==="webp"?"image/webp":`image/${e}`}function Vhe(n,e,t){let i=$s(e),r=i.replace(/\.[^.]+$/,""),s=Xr(t),a=[Cs(n,e),Cs(n,i)];if(s)for(let o of F9)a.push(Cs(n,`${s}.${o}`));for(let o of F9){let l=`${r}.${o}`;l!==i&&a.push(Cs(n,l))}return a}function Ghe(n){return new uR(n)}var hR,F9,Dhe,Lhe,Ohe,jn,uR,B9=C(()=>{"use strict";RC();ps();nA();sA();DV();LV();jC();Ve();Ht();Oy();mc();oP();vx();I4();BC();Nm();Ag();Ag();AL();xL();k7();v9();rS();ca();ea();E9();N9();eR();Kc();sS();ys();dS();hR=null,F9=["jpg","jpeg","png","bmp","tga","webp","tif","tiff"],Dhe=/^\s*(map_Kd|map_Ka|map_Ks|map_Ns|map_d|map_bump|bump|disp|decal)\s+(.+)/i,Lhe=.242,Ohe=320;jn=class jn{constructor(e){this.rootMesh=null;this.loadedMeshes=[];this.loadedExt="";this.rendering=!1;this.cleanupPicking=null;this.configLights=[];this.shadowGenerator=null;this.groundMesh=null;this.gridMesh=null;this.axisMeshes=[];this.autoRotateBehavior=null;this.wireframeEnabled=!1;this.gizmo=null;this.gizmoEnabled=!1;this.disassembly=null;this.focusSelectionEnabled=!1;this.focusedMesh=null;this.originalMeshVisibility=new Map;this.bboxMesh=null;this.bboxEnabled=!1;this.currentQuality="high";this.resourceWarnings=[];this.animPlaying=!1;this.initialCamera={alpha:Math.PI/4,beta:Math.PI/3,radius:5,target:b.Zero()};this.focusWorldPointFrame=0;this._lastPickResult={mesh:null,pickedPoint:null,screenX:0,screenY:0};this._onPickCallbacks=[];this.preventCanvasWheelScroll=e=>{e.preventDefault(),e.stopPropagation()};this.engine=new we(e,!0,{preserveDrawingBuffer:!0}),this.scene=new Qt(this.engine),this.scene.clearColor=new lt(.12,.12,.14,1),this.camera=new gi("cam",Math.PI/4,Math.PI/3,5,b.Zero(),this.scene),this.camera.attachControl(e,!0),this.camera.lowerRadiusLimit=.1,this.camera.wheelPrecision=30,e.addEventListener("wheel",this.preventCanvasWheelScroll,{passive:!1}),this.scene.ambientColor=new Te(.3,.3,.3);let t=new Xs("default-light",new b(0,1,.5),this.scene);t.intensity=1.2,this.resizeObs=new ResizeObserver(()=>this.engine.resize()),this.resizeObs.observe(e),window.requestAnimationFrame(()=>this.engine.resize())}canRender(){let e=this.engine.getRenderingCanvas();return!!(e!=null&&e.isConnected)&&e.clientWidth>0&&e.clientHeight>0}ensureDisassemblyController(){return this.rootMesh?(this.disassembly||(this.disassembly=O9(this.scene,this.camera,this.getRenderableMeshes(this.rootMesh))),this.disassembly):null}isDisassemblyActive(){var e,t;return(t=(e=this.disassembly)==null?void 0:e.isEnabled())!=null?t:!1}async loadModel(e,t,i,r){var h,d,u;if(await Tg(),this.rootMesh){let m=this.rootMesh;m.dispose(!0,!0);for(let _ of this.loadedMeshes)_!==m&&!_.isDisposed()&&_.dispose(!0,!0);this.rootMesh=null}this.loadedMeshes=[],(h=this.disassembly)==null||h.dispose(),this.disassembly=null,this.clearFocusedMesh(),this.originalMeshVisibility.clear();let s=t.toLowerCase().replace(".","");this.loadedExt=s,this.resourceWarnings=[];let a=this.scene,l=(d={glb:".glb",gltf:".gltf",stl:".stl",obj:".obj",splat:".splat",ply:".ply"}[s])!=null?d:`.${s}`,c=`data:application/octet-stream;base64,${Il(e)}`;if(s==="obj"&&i&&r){hR&&await hR;let m;hR=new Promise(_=>{m=_});try{let{OBJFileLoader:_}=await Promise.resolve().then(()=>(SL(),y7)),p=_.prototype;typeof p._loadMTL!="function"&&console.warn("[AI3D] OBJFileLoader._loadMTL not found \u2014 MTL vault resolution disabled");let g=p._loadMTL,x=new TextDecoder().decode(new Uint8Array(e)).match(/mtllib\s+(.+)/),A=null;if(x&&i&&r){let T=whe(x[1]),R=op(r),I=Cs(R,T);try{let y=await i(I),D=new TextDecoder().decode(new Uint8Array(y)).split(` -`);for(let N=0;NN!=="");if(!O.some(N=>/^\s*Kd\s+/i.test(N))){let N=O.findIndex(w=>/^\s*newmtl\s+/i.test(w));O.splice(N>=0?N+1:0,0,"Kd 0.80 0.80 0.80")}A=O.join(` -`)}catch(y){this.resourceWarnings.push(`OBJ material library not found: ${I}`)}}p._loadMTL=function(T,R,I){let y=A!=null?A:"";I(y)};let E=await hg(c,a,{meshNames:"",pluginExtension:l});this.loadedMeshes=E.meshes,E.meshes.length>0&&(this.rootMesh=E.meshes[0]),p._loadMTL=g}catch(_){throw console.error("[AI3D] OBJ load error:",_),_}finally{m(),hR=null}}else if(s==="stl")this.rootMesh=O7(a,e),this.rootMesh&&(this.loadedMeshes=[this.rootMesh]);else if(s==="ply")this.rootMesh=F7(a,e),this.rootMesh&&(this.loadedMeshes=[this.rootMesh]);else{let m=await hg(c,a,{meshNames:"",pluginExtension:l});this.loadedMeshes=m.meshes,m.meshes.length>0&&(this.rootMesh=m.meshes[0])}if(!this.rootMesh)throw new Error("No mesh found in model file");for(let m of this.getRenderableMeshes(this.rootMesh))m.material&&(m.material.backFaceCulling=!1);let f=nS(this.getRenderableBounds(this.rootMesh));return this.camera.target=dR(f.target),this.camera.radius=f.radius,this.camera.lowerRadiusLimit=f.lowerRadiusLimit,this.camera.upperRadiusLimit=f.upperRadiusLimit,this.camera.minZ=f.near,this.camera.maxZ=f.far,this.initialCamera={alpha:this.camera.alpha,beta:this.camera.beta,radius:this.camera.radius,target:this.camera.target.clone()},this.startRenderLoop(),this.engine.resize(),(u=this.cleanupPicking)==null||u.call(this),this.cleanupPicking=g9(this.scene,m=>{this.isDisassemblyActive()||(this._lastPickResult=m,this.focusSelectionEnabled&&m.mesh&&this.setFocusedMesh(m.mesh),this._onPickCallbacks.forEach(_=>_(m)))},()=>!this.focusSelectionEnabled),this.ensureDisassemblyController(),this.computeSummary(this.rootMesh)}applyConfig(e){e.camera&&this.applyCameraConfig(e.camera),e.lights&&this.applyLightConfig(e.lights),e.scene&&this.applySceneConfig(e.scene),e.stl&&this.loadedExt==="stl"&&(e.stl.color&&this.setSTLColor(e.stl.color),e.stl.wireframe!==void 0&&this.setWireframe(e.stl.wireframe))}applyCameraConfig(e){var i;let t=this.engine.getRenderingCanvas();if(t){if(e.mode==="orthographic"){let r=this.camera.radius,s=t.clientWidth/t.clientHeight,a=(i=e.zoom)!=null?i:1,o=r/a;this.camera.mode=1,this.camera.orthoLeft=-o*s,this.camera.orthoRight=o*s,this.camera.orthoTop=o,this.camera.orthoBottom=-o}else this.camera.mode=0,e.fov&&(this.camera.fov=e.fov*Math.PI/180);if(e.position){let[r,s,a]=e.position;this.camera.setPosition(new b(r,s,a))}if(e.lookAt){let[r,s,a]=e.lookAt;this.camera.setTarget(new b(r,s,a))}e.near!==void 0&&(this.camera.minZ=e.near),e.far!==void 0&&(this.camera.maxZ=e.far)}}applyLightConfig(e){var i;for(let r of this.configLights)r.dispose();this.configLights=[],(i=this.shadowGenerator)==null||i.dispose(),this.shadowGenerator=null;let t=this.scene.getLightByName("default-light");t&&t.dispose();for(let r of e){let s=this.createLight(r);s&&this.configLights.push(s)}}createLight(e){var r,s;let t=e.color?Te.FromHexString(e.color):Te.White(),i=(r=e.intensity)!=null?r:1;switch(e.type){case"hemisphere":{let a=e.groundColor?Te.FromHexString(e.groundColor):new Te(.2,.2,.2),o=new Xs("hemi",new b(0,1,0),this.scene);return o.diffuse=t,o.groundColor=a,o.intensity=i,o}case"directional":{let a=e.position?new b(...e.position).normalize():new b(-1,-2,-1).normalize(),o=new Ss("dir",a,this.scene);return o.diffuse=t,o.intensity=i,e.castShadow&&this.rootMesh&&this.setupShadow(o),o}case"point":{let a=e.position?new b(...e.position):new b(0,5,0),o=new Sf("point",a,this.scene);return o.diffuse=t,o.intensity=i,e.decay!==void 0&&(o.decay=e.decay),o}case"spot":{let a=e.position?new b(...e.position):new b(0,5,0),l=(e.target?new b(...e.target):b.Zero()).subtract(a).normalize(),c=e.angle?e.angle*Math.PI/180:Math.PI/4,f=(s=e.penumbra)!=null?s:.5,h=new Nr("spot",a,l,c,f,this.scene);return h.diffuse=t,h.intensity=i,e.decay!==void 0&&(h.decay=e.decay),e.castShadow&&this.rootMesh&&this.setupShadow(h),h}case"attachToCam":{let a=new Sf("cam-light",b.Zero(),this.scene);return a.diffuse=t,a.intensity=i,a.parent=this.camera,a}default:return null}}setupShadow(e){if(!this.rootMesh)return;if(!Nhe(e)){console.warn("[AI3D] Light type does not support shadows:",e.name);return}let t=new yi(1024,e);t.useBlurExponentialShadowMap=!0,t.blurKernel=32;for(let i of this.getRenderableMeshes(this.rootMesh))t.addShadowCaster(i),i.receiveShadows=!0;this.shadowGenerator=t}applySceneConfig(e){var t,i;if(e.background!==void 0){let r=lt.FromColor3(Te.FromHexString(e.background),e.transparent?0:1);this.scene.clearColor=r}e.autoRotate&&(this.autoRotateBehavior?this.autoRotateBehavior.idleRotationSpeed=(i=e.autoRotateSpeed)!=null?i:.5:(this.autoRotateBehavior=new vm,this.autoRotateBehavior.idleRotationSpeed=(t=e.autoRotateSpeed)!=null?t:.5,this.autoRotateBehavior.idleRotationWaitTime=1e3,this.autoRotateBehavior.idleRotationSpinupTime=500,this.camera.addBehavior(this.autoRotateBehavior))),e.groundShadow&&this.rootMesh&&this.createGround(),e.grid&&this.createGrid(),e.axis&&this.createAxis()}createGround(){if(!this.rootMesh||this.groundMesh)return;let e=this.getRenderableBounds(this.rootMesh),t=En(e),i=Math.max(t.x,t.z)*3,r=e.min.y;this.groundMesh=uc.CreateGround("ground",{width:i,height:i},this.scene),this.groundMesh.position.y=r;let s=new He("ground-mat",this.scene);s.diffuseColor=new Te(.15,.15,.15),s.specularColor=Te.Black(),s.alpha=.5,this.groundMesh.material=s,this.groundMesh.receiveShadows=!0}createGrid(){if(!this.rootMesh||this.gridMesh)return;let e=this.getRenderableBounds(this.rootMesh),t=En(e),i=Math.max(t.x,t.z)*2,r=e.min.y-.01;this.gridMesh=uc.CreateGround("grid",{width:i,height:i,subdivisions:20},this.scene),this.gridMesh.position.y=r;let s=new He("grid-mat",this.scene);s.wireframe=!0,s.diffuseColor=new Te(.3,.3,.3),s.emissiveColor=new Te(.1,.1,.1),this.gridMesh.material=s}createAxis(){if(!this.rootMesh||this.axisMeshes.length>0)return;let e=this.getRenderableBounds(this.rootMesh),t=r1(e)*1.5,i=dR(e.min),r=r_(e)*.01,s=[["x",Te.Red(),new b(t,0,0)],["y",Te.Green(),new b(0,t,0)],["z",Te.Blue(),new b(0,0,t)]];for(let[a,o,l]of s){let c=uc.CreateTube(`axis-${a}`,{path:[i,i.add(l)],radius:r,tessellation:8},this.scene),f=new He(`axis-${a}-mat`,this.scene);f.emissiveColor=o,f.diffuseColor=Te.Black(),c.material=f,this.axisMeshes.push(c)}}setSTLColor(e){if(!this.rootMesh)return;let t=Te.FromHexString(e);for(let i of this.getRenderableMeshes(this.rootMesh))if(i.material&&i.material.name==="stl-mat"){let r=i.material;r.diffuseColor=t,r.emissiveColor=t.scale(.1)}}setWireframe(e){this.rootMesh&&(tO(this.rootMesh)||(this.wireframeEnabled=e,this.scene.forceWireframe=e))}toggleWireframe(){return this.setWireframe(!this.wireframeEnabled),this.wireframeEnabled}hasAnimations(){return this.scene.animationGroups.length>0}toggleAnimation(){let e=this.scene.animationGroups;if(e.length===0)return!1;this.animPlaying=!this.animPlaying;for(let t of e)this.animPlaying?t.play(!0):t.pause();return this.animPlaying}setAnimationSpeed(e){for(let t of this.scene.animationGroups)t.speedRatio=e}captureSnapshot(){let e=this.engine.getRenderingCanvas();return e?(this.scene.render(),e.toDataURL("image/png")):null}toggleOrientationGizmo(){return this.gizmoEnabled=!this.gizmoEnabled,this.gizmoEnabled&&!this.gizmo&&(this.gizmo=new cR(this.engine,this.camera)),this.gizmoEnabled}isOrientationGizmoEnabled(){return this.gizmoEnabled}setRenderScale(e){let t=Math.max(.25,Math.min(e,2)),i={low:2,medium:1.33,high:1}[this.currentQuality],r=gr()?1.5:1;return this.engine.setHardwareScalingLevel(i*r/t),t}getPerformanceSnapshot(){return{backend:"babylon",renderScale:Number((1/this.engine.getHardwareScalingLevel()).toFixed(2)),quality:this.currentQuality,meshCount:this.rootMesh?this.getRenderableMeshes(this.rootMesh).length:0}}toggleBoundingBox(){var e;if(this.bboxEnabled=!this.bboxEnabled,this.bboxEnabled){if(!this.rootMesh)return this.bboxEnabled;this.bboxMesh&&this.bboxMesh.dispose();let t=this.getRenderableBounds(this.rootMesh),i=dR(Sn(t)),r=dR(En(t));this.bboxMesh=uc.CreateBox("bbox",{width:r.x,height:r.y,depth:r.z},this.scene),this.bboxMesh.position=i;let s=new He("bbox-mat",this.scene);s.wireframe=!0,s.emissiveColor=new Te(1,1,0),s.disableLighting=!0,s.alpha=.6,this.bboxMesh.material=s}else(e=this.bboxMesh)==null||e.dispose(),this.bboxMesh=null;return this.bboxEnabled}toggleFocusSelection(){var t;let e=!this.focusSelectionEnabled;return e&&this.isDisassemblyActive()&&((t=this.disassembly)==null||t.setEnabled(!1)),this.focusSelectionEnabled=e,this.focusSelectionEnabled?this._lastPickResult.mesh&&this.setFocusedMesh(this._lastPickResult.mesh):this.clearFocusedMesh(),this.focusSelectionEnabled}isFocusSelectionEnabled(){return this.focusSelectionEnabled}toggleDisassembly(){let e=this.ensureDisassemblyController();if(!e)return!1;let t=!e.isEnabled();return t&&(this.focusSelectionEnabled=!1,this.clearFocusedMesh()),e.setEnabled(t)}resetDisassembly(){var e;(e=this.disassembly)==null||e.reset()}isDisassemblyEnabled(){return this.isDisassemblyActive()}setExplode(e,t){this.rootMesh&&G7(this.rootMesh,e,t,this.loadedMeshes)}resetExplode(){this.rootMesh&&bL(this.rootMesh,this.loadedMeshes)}resetView(){this.rootMesh&&bL(this.rootMesh,this.loadedMeshes),this.resetDisassembly(),this.clearFocusedMesh(),this.camera.mode=0,this.camera.alpha=this.initialCamera.alpha,this.camera.beta=this.initialCamera.beta,this.camera.radius=this.initialCamera.radius,this.camera.target=this.initialCamera.target.clone()}exportModelInfo(e){if(!this.rootMesh)return"";let t=this.computeSummary(this.rootMesh),i=this.getRenderableMeshes(this.rootMesh),r=tO(this.rootMesh),s=e&&$s(e)||t.rootName;return fS({title:s,format:this.loadedExt.toUpperCase(),summary:t,meshBreakdown:i.map(a=>{var o,l;return{name:a.name,triangleCount:r?null:Zx(a),vertexCount:Xm(a),materialName:(l=(o=a.material)==null?void 0:o.name)!=null?l:null}}),materialNames:i.map(a=>{var o;return(o=a.material)==null?void 0:o.name})})}getModelEvidence(){var i;if(!this.rootMesh)return null;let e=this.getRenderableMeshes(this.rootMesh),t=new Set;for(let r of e)(i=r.material)!=null&&i.name&&t.add(r.material.name);return{summary:this.computeSummary(this.rootMesh),parts:e.map(r=>this.computePartSummary(r)),materialNames:Array.from(t).sort((r,s)=>r.localeCompare(s)),resourceWarnings:[...this.resourceWarnings],capturedAt:new Date().toISOString()}}getSelectedPartInfo(){var i;let e=(i=this.focusedMesh)!=null?i:this._lastPickResult.mesh,t=e?this.findRenderableMesh(e):null;return!t||t.isDisposed()?null:this.computePartSummary(t)}exportSelectedPartInfo(){let e=this.getSelectedPartInfo();return e?hS(e):""}getPickWorldPoint(e){if(e.pickedPoint&&typeof e.pickedPoint=="object")return Zt(e.pickedPoint);if(Fhe(e.mesh)){let t=e.mesh.getBoundingInfo().boundingBox.centerWorld;return Zt(t)}return null}focusWorldPoint(e){let t=new b(e.x,e.y,e.z),i=this.camera.target.clone(),r=performance.now();this.focusWorldPointFrame&&(activeWindow.cancelAnimationFrame(this.focusWorldPointFrame),this.focusWorldPointFrame=0);let s=a=>{let o=Math.min(1,Math.max(0,(a-r)/Ohe)),l=o<.5?4*o*o*o:1-Math.pow(-2*o+2,3)/2;if(this.camera.target=b.Lerp(i,t,l),o<1&&!this.scene.isDisposed){this.focusWorldPointFrame=activeWindow.requestAnimationFrame(s);return}this.focusWorldPointFrame=0};this.focusWorldPointFrame=activeWindow.requestAnimationFrame(s)}getAnnotationCameraStateKey(){return`${this.camera.alpha.toFixed(3)}_${this.camera.beta.toFixed(3)}_${this.camera.radius.toFixed(3)}_${this.camera.target.x.toFixed(2)}_${this.camera.target.y.toFixed(2)}_${this.camera.target.z.toFixed(2)}`}projectAnnotationWorldPoint(e,t){let i=this.engine.getRenderingCanvas();if(!i||this.scene.isDisposed)return!1;let r=this.engine.getRenderWidth(),s=this.engine.getRenderHeight();if(r===0||s===0||i.clientWidth===0||i.clientHeight===0)return!1;let a=jn.annotationWorldPoint;a.set(e.x,e.y,e.z),b.ProjectToRef(a,jn.annotationIdentity,this.scene.getTransformMatrix(),this.camera.viewport.toGlobal(r,s),jn.annotationProjection);let o=i.clientWidth/r,l=i.clientHeight/s;return t.screenX=jn.annotationProjection.x*o,t.screenY=jn.annotationProjection.y*l,t.depth=jn.annotationProjection.z,!0}isAnnotationWorldPointOccluded(e){if(this.scene.isDisposed)return!1;let t=Ic(Zt(this.camera.position),e);if(!t)return!1;let i=jn.annotationDirection,r=jn.annotationRay;i.set(t.direction.x,t.direction.y,t.direction.z),r.origin=this.camera.position,r.direction=i,r.length=t.distance;let s=this.scene.pickWithRay(r);return!!(s!=null&&s.hit)&&bc(s.distance,t.distance,t.epsilon)}getAnnotationProvider(){let e=this.engine.getRenderingCanvas();if(!e)throw new Error("Preview canvas is unavailable");return{canvas:e,observeRender:t=>{let i=this.scene.onAfterRenderCameraObservable.add(r=>{r===this.camera&&t()});return{remove:()=>this.scene.onAfterRenderCameraObservable.remove(i)}},getCameraStateKey:()=>this.getAnnotationCameraStateKey(),projectWorldPoint:(t,i)=>this.projectAnnotationWorldPoint(t,i),isWorldPointOccluded:t=>this.isAnnotationWorldPointOccluded(t)}}getCanvas(){return this.engine.getRenderingCanvas()}getLastPickResult(){return this._lastPickResult}onPick(e){return this._onPickCallbacks.push(e),()=>{this._onPickCallbacks=this._onPickCallbacks.filter(t=>t!==e)}}setRenderQuality(e,t=1){this.currentQuality=e;let i={low:2,medium:1.33,high:1},r=gr()?1.5:1,s=i[e]*r/Math.max(t,.25);if(this.engine.setHardwareScalingLevel(s),this.shadowGenerator){let a={low:0,medium:16,high:32};this.shadowGenerator.blurKernel=a[e],e==="low"?(this.shadowGenerator.useBlurExponentialShadowMap=!1,this.shadowGenerator.useExponentialShadowMap=!0):(this.shadowGenerator.useBlurExponentialShadowMap=!0,this.shadowGenerator.useExponentialShadowMap=!1)}}destroy(){var t,i,r,s,a,o,l;this.engine.stopRenderLoop(),this.focusWorldPointFrame&&(activeWindow.cancelAnimationFrame(this.focusWorldPointFrame),this.focusWorldPointFrame=0),this._onPickCallbacks=[],(t=this.cleanupPicking)==null||t.call(this),this.cleanupPicking=null,(i=this.gizmo)==null||i.dispose(),this.gizmo=null,(r=this.disassembly)==null||r.dispose(),this.disassembly=null,this.clearFocusedMesh(),this.originalMeshVisibility.clear(),(s=this.bboxMesh)==null||s.dispose(),this.bboxMesh=null,this.camera.detachControl();let e=this.engine.getRenderingCanvas();e==null||e.removeEventListener("wheel",this.preventCanvasWheelScroll),this.resizeObs.disconnect(),this.autoRotateBehavior&&(this.camera.removeBehavior(this.autoRotateBehavior),this.autoRotateBehavior=null);for(let c of this.configLights)c.dispose();this.configLights=[],(a=this.shadowGenerator)==null||a.dispose(),this.shadowGenerator=null,(o=this.groundMesh)==null||o.dispose(),this.groundMesh=null,(l=this.gridMesh)==null||l.dispose(),this.gridMesh=null;for(let c of this.axisMeshes)c.dispose();this.axisMeshes=[],this.scene.dispose(),this.engine.dispose()}startRenderLoop(){this.rendering||(this.rendering=!0,this.engine.runRenderLoop(()=>{this.canRender()&&(this.scene.render(),this.gizmo&&this.gizmoEnabled&&(this.gizmo.syncWith(this.camera),this.gizmo.render()))}))}getRenderableMeshes(e){return sd(e,this.loadedMeshes)}getRenderableBounds(e){return Jx(e,this.loadedMeshes)}setFocusedMesh(e){if(!this.rootMesh)return;let t=e?this.findRenderableMesh(e):null;if(!t||t.isDisposed()){this.clearFocusedMesh();return}if(this.focusedMesh===t)return;let i=this.getRenderableMeshes(this.rootMesh);for(let r of i){this.originalMeshVisibility.has(r.uniqueId)||this.originalMeshVisibility.set(r.uniqueId,r.visibility);let s=r===t;r.visibility=s?1:Lhe,r.renderOutline=s,r.outlineColor=new Te(.18,.76,1),r.outlineWidth=s?.045:0}this.focusedMesh=t}clearFocusedMesh(){if(!this.rootMesh){this.focusedMesh=null;return}for(let e of this.getRenderableMeshes(this.rootMesh)){let t=this.originalMeshVisibility.get(e.uniqueId);t!==void 0&&(e.visibility=t),e.renderOutline=!1,e.outlineWidth=0}this.originalMeshVisibility.clear(),this.focusedMesh=null}findRenderableMesh(e){if(!this.rootMesh)return null;let t=this.getRenderableMeshes(this.rootMesh);if(t.includes(e))return e;let i=e.parent;for(;i&&"uniqueId"in i;){let r=i;if(t.includes(r))return r;i=i.parent}return null}computePartSummary(e){return V7(e)}computeSummary(e){let t=this.getRenderableMeshes(e),i=tO(e),r=t.reduce((s,a)=>s+Xm(a),0);return $x(e.name,this.getRenderableBounds(e),t,{splatCount:i?r:void 0,resourceWarnings:this.resourceWarnings})}};jn.annotationIdentity=K.Identity(),jn.annotationWorldPoint=b.Zero(),jn.annotationProjection=b.Zero(),jn.annotationDirection=b.Zero(),jn.annotationRay=new Hr(b.Zero(),b.Zero(),1);uR=jn});async function U9(n,e){if(Hg(e).backend==="three"){let{createThreeModelPreview:r}=await Promise.resolve().then(()=>(v1(),g1));return r(n)}let{createBabylonModelPreview:i}=await Promise.resolve().then(()=>(B9(),w9));return i(n)}var V9=C(()=>{"use strict";$R()});var G9={};et(G9,{createBabylonGridRenderer:()=>Whe});function khe(n){return n.replace(/\|/g,"\\|").replace(/\r?\n/g," ")}function iO(n){return new b(n.x,n.y,n.z)}function Whe(n){return new rO(n)}var Ym,rO,k9=C(()=>{"use strict";RC();ps();nA();sA();Ve();Ht();Nu();Nm();Gh();mc();Ag();Ag();eR();rS();ca();Kc();sS();Ym=32;rO=class{constructor(e){this.cells=[];this.initialCameras=[];this.wireframeEnabled=!1;this.rendering=!1;this.preventCanvasWheelScroll=e=>{e.preventDefault(),e.stopPropagation()};e.className="ai3d-canvas-full",e.addEventListener("wheel",this.preventCanvasWheelScroll,{passive:!1}),this.engine=new we(e,!0,{preserveDrawingBuffer:!0}),this.scene=new Qt(this.engine),this.scene.clearColor=new lt(.12,.12,.14,1),this.scene.autoClear=!1,new Xs("default-light",new b(0,1,.5),this.scene),this.resizeObs=new ResizeObserver(()=>this.engine.resize()),this.resizeObs.observe(e),window.requestAnimationFrame(()=>this.engine.resize())}canRender(){let e=this.engine.getRenderingCanvas();return!!(e!=null&&e.isConnected)&&e.clientWidth>0&&e.clientHeight>0}getCellBounds(e){let t=Qx(e);if(!t)throw new Error("Grid cell has no renderable meshes");return t}async loadModels(e,t,i){var h,d,u;await Tg();let r=e.length>Ym?(console.warn(`[AI3D Grid] Capping ${e.length} models to ${Ym} (layerMask limit)`),e.slice(0,Ym)):e,s=(h=t.columns)!=null?h:Math.min(r.length,3),a=(d=t.gapX)!=null?d:.02,o=(u=t.gapY)!=null?u:.02,l=Math.ceil(r.length/s),c=(1-a*(s+1))/s,f=(1-o*(l+1))/l;for(let m=0;mYm?(console.warn(`[AI3D Preset] Capping ${e.placements.length} placements to ${Ym} (layerMask limit)`),e.placements.slice(0,Ym)):e.placements,r=[];for(let f=0;f0&&(d.push(...r[_]),u|=1<<_)}else d=h?[...h]:[],u=1<this.renderFrame()))}captureSnapshot(){let e=this.engine.getRenderingCanvas();return e?(this.renderFrame(),e.toDataURL("image/png")):null}getEngine(){return this.engine}getScene(){return this.scene}getCellCount(){return this.cells.length}getCanvas(){return this.engine.getRenderingCanvas()}getPrimaryCamera(){var e,t;return(t=(e=this.cells[0])==null?void 0:e.camera)!=null?t:null}setRenderScale(e){let t=Math.max(.25,Math.min(e,2)),i=gr()?1.5:1;return this.engine.setHardwareScalingLevel(i/t),t}resetView(){for(let e=0;e(k9(),G9));return e(n)}var H9=C(()=>{"use strict"});function Hhe(n,e,t){n.info("select preview backend",{...e,backend:t.backend,reason:t.reason,ext:t.ext,annotationMode:t.annotationMode,requireWorkbenchFeatures:t.requireWorkbenchFeatures,rendererRollout:t.rendererRollout})}async function ad(n,e,t,i){let r=Hg(i);return Hhe(n,e,r),{preview:await U9(t,i),route:r}}function zhe(n,e,t){n.info("select preview backend",{...e,backend:t.backend,reason:t.reason})}async function z9(n,e,t){let i=TN();return zhe(n,e,i),{renderer:await W9(t),route:i}}var mR=C(()=>{"use strict";V9();H9();$R()});function qn(n,e){return!!n&&typeof n=="object"&&e in n}function pR(n){return qn(n,"getAnnotationProvider")}function X9(n){return qn(n,"hasAnimations")&&qn(n,"toggleAnimation")}function _R(n){return qn(n,"toggleDisassembly")&&qn(n,"resetDisassembly")&&qn(n,"isDisassemblyEnabled")}function gR(n){return qn(n,"toggleFocusSelection")&&qn(n,"isFocusSelectionEnabled")}function Y9(n){return qn(n,"toggleWireframe")}function nO(n){return qn(n,"toggleOrientationGizmo")}function K9(n){return qn(n,"toggleBoundingBox")}function j9(n){return qn(n,"setRenderScale")}function vR(n){return qn(n,"setExplode")&&qn(n,"resetExplode")&&qn(n,"focusWorldPoint")}var xg=C(()=>{"use strict"});function rn(n){let e=createSvg("svg");e.setAttribute("viewBox","0 0 24 24"),e.setAttribute("width","16"),e.setAttribute("height","16");let t=new DOMParser().parseFromString(`${n}`,"image/svg+xml");for(let i of Array.from(t.documentElement.childNodes))e.appendChild(activeDocument.importNode(i,!0));return e}function q9(n){var a,o;let[e,t]=n.split(","),i=(o=(a=e.match(/:(.*?);/))==null?void 0:a[1])!=null?o:"image/png",r=atob(t),s=new Uint8Array(r.length);for(let l=0;l{fe.stopPropagation()};d.addEventListener("pointerdown",p),d.addEventListener("mousedown",p),d.addEventListener("click",p),f&&(d.classList.add("is-mobile"),Z9(e,!1));let g=fe=>(fe.classList.add("is-secondary"),fe),v=(fe,Fe)=>{fe.classList.toggle("ai3d-btn-active",Fe),fe.setAttribute("aria-pressed",String(Fe))},x=()=>{for(let fe of[u,m,_]){let Fe=Array.from(fe.querySelectorAll(".ai3d-inline-btn")).filter(di=>!di.classList.contains("is-hidden")),Vt=Fe.length>0,re=Fe.some(di=>!di.classList.contains("is-secondary"));fe.classList.toggle("is-hidden",!Vt),fe.classList.toggle("has-primary-visible",re)}},A=!1,E=!1,T=f?u.createEl("button",{cls:"ai3d-inline-btn ai3d-mobile-mode-btn",attr:{"aria-label":te("helper.enableInteractionLabel"),"aria-pressed":"false"}}):null;T==null||T.appendChild(rn(''));let R=(Ye=T==null?void 0:T.createSpan({cls:"ai3d-mobile-mode-btn-label"}))!=null?Ye:null,I=()=>{f&&T&&(Z9(e,A),v(T,A),R==null||R.setText(A?te("helper.scrollAction"):te("helper.interactAction")),T.setAttribute("aria-label",A?te("helper.disableInteractionLabel"):te("helper.enableInteractionLabel"))),v(Tt,E),d.classList.toggle("show-secondary",E),x()},y=fe=>{A=fe,I()};T==null||T.addEventListener("click",()=>{let fe=!A;l==null||l(fe),y(fe),zi(T,fe?te("helper.interactionOn"):te("helper.interactionOff"))});let M=(fe,Fe)=>{fe.classList.toggle("is-hidden",!Fe)},D=null,O=()=>{var re;let fe=i(),Fe=fe&&gR(fe)?fe:null,Vt=fe&&_R(fe)?fe:null;v(Q,!!(Fe!=null&&Fe.isFocusSelectionEnabled())),v(X,!!(Vt!=null&&Vt.isDisassemblyEnabled())),fe&&nO(fe)&&v(J,!!((re=fe.isOrientationGizmoEnabled)!=null&&re.call(fe)))},V=()=>{let fe=i(),Fe=fe&&gR(fe)?fe:null,Vt=fe&&_R(fe)?fe:null,re=fe&&X9(fe)?fe:null;fe!==D&&(D=fe,v(G,!1),v(Y,!1),v(pe,!1),pe.replaceChildren(rn('')),M(N,!!(fe!=null&&fe.resetView)),M(w,!!(fe!=null&&fe.exportModelInfo)),M(U,!!(fe!=null&&fe.exportSelectedPartInfo)),M(G,!!fe&&Y9(fe)),M(J,!!fe&&nO(fe)),M(Y,!!fe&&K9(fe)),M(Q,!!Fe),M(X,!!Vt),M(se,!!fe&&j9(fe)),M(pe,!!(re!=null&&re.hasAnimations()))),M(j,!!(Vt!=null&&Vt.isDisassemblyEnabled())),O(),x()},N=u.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":te("helper.resetViewLabel")}});wn(N,"reset-view"),N.appendChild(rn('')),N.addEventListener("click",()=>{let fe=i();fe!=null&&fe.resetView&&(fe.resetView(),V(),zi(N,te("helper.resetViewDone")))});let w=g(m.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":te("helper.copyModelInfoLabel")}}));wn(w,"copy-model-info"),w.appendChild(rn('')),w.addEventListener("click",()=>{let fe=i();if(fe!=null&&fe.exportModelInfo)try{let Fe=fe.exportModelInfo(r());if(!Fe)return;navigator.clipboard.writeText(Fe).then(()=>{zi(w,te("helper.copied"))}).catch(()=>{zi(w,te("helper.failed"))})}catch(Fe){console.error("[AI3D] Export model info failed:",Fe),zi(w,te("helper.failed"))}});let U=g(m.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":te("helper.copySelectedPartInfoLabel")}}));wn(U,"copy-selected-part-info"),U.appendChild(rn('')),U.addEventListener("click",()=>{let fe=i();if(fe!=null&&fe.exportSelectedPartInfo)try{let Fe=fe.exportSelectedPartInfo();if(!Fe){zi(U,te("helper.noSelectedPart"));return}navigator.clipboard.writeText(Fe).then(()=>{zi(U,te("helper.copied"))}).catch(()=>{zi(U,te("helper.failed"))})}catch(Fe){console.error("[AI3D] Export selected part info failed:",Fe),zi(U,te("helper.failed"))}});let G=g(u.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":te("helper.toggleWireframeLabel"),"aria-pressed":"false"}}));wn(G,"toggle-wireframe"),G.appendChild(rn('')),G.addEventListener("click",()=>{let fe=i();if(!(fe!=null&&fe.toggleWireframe))return;let Fe=fe.toggleWireframe();v(G,Fe),zi(G,Fe?te("helper.wireframeOn"):te("helper.wireframeOff"))});let J=g(u.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":te("helper.toggleAxesLabel"),"aria-pressed":"false"}}));wn(J,"toggle-axes"),J.appendChild(rn('')),J.addEventListener("click",()=>{let fe=i();if(!(fe!=null&&fe.toggleOrientationGizmo))return;let Fe=fe.toggleOrientationGizmo();v(J,Fe),zi(J,Fe?te("helper.axesOn"):te("helper.axesOff"))});let Y=g(u.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":te("helper.toggleBoundingBoxLabel"),"aria-pressed":"false"}}));wn(Y,"toggle-bounding-box"),Y.appendChild(rn('')),Y.addEventListener("click",()=>{let fe=i();if(!(fe!=null&&fe.toggleBoundingBox))return;let Fe=fe.toggleBoundingBox();v(Y,Fe),zi(Y,Fe?te("helper.boundingBoxOn"):te("helper.boundingBoxOff"))});let Q=g(m.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":te("helper.toggleFocusSelectionLabel"),"aria-pressed":"false"}}));wn(Q,"toggle-focus"),Q.appendChild(rn('')),Q.addEventListener("click",()=>{let fe=i();if(!fe||!gR(fe))return;let Fe=fe.toggleFocusSelection();V(),zi(Q,Fe?te("helper.focusSelectionOn"):te("helper.focusSelectionOff"))});let X=g(m.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":te("helper.toggleDisassemblyLabel"),"aria-pressed":"false"}}));wn(X,"toggle-disassembly"),X.appendChild(rn('')),X.addEventListener("click",()=>{let fe=i();if(!fe||!_R(fe))return;let Fe=fe.toggleDisassembly();V(),zi(X,Fe?te("helper.disassemblyOn"):te("helper.disassemblyOff"))});let j=g(m.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":te("helper.resetPartsLabel")}}));wn(j,"reset-parts"),j.appendChild(rn('')),j.addEventListener("click",()=>{let fe=i();fe!=null&&fe.resetDisassembly&&(fe.resetDisassembly(),V(),zi(j,te("helper.partsReset")))});let me=[.5,.75,1,1.5,2],xe=(Ke=a==null?void 0:a().renderScale)!=null?Ke:1,Ge=me.reduce((fe,Fe,Vt)=>{let re=Math.abs(Fe-xe),di=Math.abs(me[fe]-xe);return re{let fe=i();if(!(fe!=null&&fe.setRenderScale))return;Ge=(Ge+1)%me.length;let Fe=fe.setRenderScale(me[Ge]);se.textContent=`${Fe.toFixed(1)}x`,zi(se,Cr("helper.resolutionValue",{value:`${Fe}x`}))});let pe=g(u.createEl("button",{cls:"ai3d-inline-btn is-hidden",attr:{"aria-label":te("helper.toggleAnimationLabel"),"aria-pressed":"false"}}));wn(pe,"toggle-animation"),pe.appendChild(rn('')),pe.addEventListener("click",()=>{let fe=i();if(!(fe!=null&&fe.toggleAnimation))return;let Fe=fe.toggleAnimation();pe.replaceChildren(rn(Fe?'':'')),v(pe,Fe),zi(pe,Fe?te("helper.playing"):te("helper.paused"))});let ie=g(_.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":te("helper.removePreviewLabel")}}));wn(ie,"remove-preview"),ie.appendChild(rn('')),ie.addEventListener("click",s);let _e=_.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":te("helper.copySnapshotLabel")}});wn(_e,"copy-snapshot"),_e.appendChild(rn('')),_e.addEventListener("click",()=>{let fe=i();if(fe)try{let Fe=fe.captureSnapshot();if(!Fe)return;let Vt=q9(Fe);navigator.clipboard.write([new ClipboardItem({"image/png":Vt})]).then(()=>{zi(_e,te("helper.copied"))}).catch(()=>{zi(_e,te("helper.failed"))})}catch(Fe){console.error("[AI3D] Copy snapshot failed:",Fe),zi(_e,te("helper.failed"))}});let Pe=g(_.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":te("helper.saveSnapshotLabel")}}));wn(Pe,"save-snapshot"),Pe.appendChild(rn('')),Pe.addEventListener("click",()=>{var Fe,Vt;let fe=i();if(fe)try{let re=fe.captureSnapshot();if(!re)return;let di=r(),zt=Xr(di)||"model",bi=a==null?void 0:a(),ot=(Fe=bi==null?void 0:bi.snapshotFolder)!=null?Fe:"Media/3D Previews",Xi=(Vt=bi==null?void 0:bi.snapshotNaming)!=null?Vt:"model-name",z=Date.now(),B=Xi==="timestamp"?`snapshot_${z}.png`:`${zt}_snapshot_${z}.png`,ue=q9(re),Ce=new FileReader;Ce.onload=()=>{let Be=Ce.result;t.vault.adapter.exists(ot).then(je=>je?Promise.resolve():t.vault.createFolder(ot).catch(()=>{})).then(()=>t.vault.createBinary(`${ot}/${B}`,Be)).then(()=>{zi(Pe,te("helper.saved"))}).catch(je=>{console.error("[AI3D] Save snapshot failed:",je),zi(Pe,te("helper.failed"))})},Ce.onerror=()=>{console.error("[AI3D] FileReader error"),zi(Pe,te("helper.failed"))},Ce.onabort=()=>{console.error("[AI3D] FileReader aborted"),zi(Pe,te("helper.failed"))},Ce.readAsArrayBuffer(ue)}catch(re){console.error("[AI3D] Save snapshot failed:",re),zi(Pe,te("helper.failed"))}});let de=g(_.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":te("helper.downloadSnapshotLabel")}}));wn(de,"download-snapshot"),de.appendChild(rn('')),de.addEventListener("click",()=>{let fe=i();if(fe)try{let Fe=fe.captureSnapshot();if(!Fe)return;let Vt=r(),di=`${Xr(Vt)||"model"}_snapshot_${Date.now()}.png`,zt=createEl("a");zt.href=Fe,zt.download=di,activeDocument.body.appendChild(zt),zt.click(),zt.remove(),zi(de,te("helper.downloaded"))}catch(Fe){console.error("[AI3D] Download snapshot failed:",Fe),zi(de,te("helper.failed"))}});let be=g(m.createEl("button",{cls:"ai3d-inline-btn is-hidden ai3d-annot-btn",attr:{"aria-label":te(h.labelKey),"aria-pressed":"false"}}));wn(be,"toggle-annotation"),be.appendChild(rn(''));let Ze=be.createSpan({cls:"ai3d-pin-badge is-hidden"});be.addEventListener("click",()=>{if(!o)return;let fe=o();v(be,fe),zi(be,fe?te(h.activeTooltipKey):te(h.inactiveTooltipKey))});let Tt=d.createEl("button",{cls:"ai3d-inline-btn ai3d-mobile-more-toggle",attr:{"aria-label":te("helper.showMoreActionsLabel"),"aria-pressed":"false"}});return Tt.appendChild(rn('')),Tt.addEventListener("click",()=>{E=!E,Tt.setAttribute("aria-label",E?te("helper.hideMoreActionsLabel"):te("helper.showMoreActionsLabel")),I(),zi(Tt,E?te("helper.moreActionsShown"):te("helper.moreActionsHidden"))}),n.insertBefore(d,e.nextSibling),I(),V(),{showAnimButton(){pe.classList.remove("is-hidden"),x()},showAnnotateButton(){be.classList.remove("is-hidden"),x()},updateAnnotationBadge(fe){fe>0?(Ze.textContent=String(fe),Ze.classList.remove("is-hidden")):Ze.classList.add("is-hidden")},setMobileInteractionMode(fe){f&&y(fe)},syncCapabilities:V}}function zi(n,e){var i;(i=sO.get(n))==null||i.remove();let t=n.createSpan({cls:"ai3d-tooltip"});t.textContent=e,sO.set(n,t),window.setTimeout(()=>{t.remove(),sO.delete(n)},1500)}var sO,aO=C(()=>{"use strict";Pa();xg();ca();ea();sO=new WeakMap});function oO(n){J9=n}function ER(n){return Q9[n]>=Q9[J9]}function SR(){return new Date().toISOString()}function TR(n){return n&&Object.keys(n).length>0?n:void 0}function cr(n){let e=`[AI3D][${n}]`;return{debug(t,i){ER("debug")&&console.debug(e,SR(),t,TR(i))},info(t,i){ER("info")&&console.debug(e,SR(),t,TR(i))},warn(t,i){ER("warn")&&console.warn(e,SR(),t,TR(i))},error(t,i){ER("error")&&console.error(e,SR(),t,TR(i))}}}var Q9,J9,Zn=C(()=>{"use strict";Q9={debug:10,info:20,warn:30,error:40},J9="warn"});var bg,AR,$9=C(()=>{"use strict";hl();Zn();bg=cr("conversion-manager"),AR=class{constructor(){this.converters=new Map;this.pending=new Map}getConverter(e){return this.converters.get(ya(e))}registerConverter(e){bg.info("register converter",{converterId:e.id,sourceExts:[...e.sourceExts]});for(let t of e.sourceExts)this.converters.set(ya(t),e)}canConvert(e){let t=ya(e),i=this.converters.has(t);return bg.debug("can convert",{ext:t,ok:i}),i}async getConverterCacheIdentity(e){let t=this.getConverter(e);if(t)return{converterId:t.id,cacheKey:await t.getCacheKey()}}async convert(e){let t=ya(e.sourceExt),i=this.getConverter(t);if(!i)throw bg.error("converter missing",{ext:t,targetExt:e.targetExt}),new Error(`No converter registered for .${t}`);let r=`${e.sourcePath}::${t}::${e.targetExt}`,s=this.pending.get(r);if(s)return bg.info("joining in-flight conversion",{key:r}),s;bg.info("dispatch conversion",{converterId:i.id,ext:t,targetExt:e.targetExt});let a=i.convert({...e,sourceExt:t});this.pending.set(r,a);try{return await a}finally{this.pending.delete(r)}}}});function fO(...n){let e=(ke==null?void 0:ke.platform)==="darwin"?["/opt/homebrew/bin","/usr/local/bin","/opt/local/bin","/usr/bin"]:["/usr/local/bin","/opt/homebrew/bin","/opt/local/bin","/usr/bin"];return Array.from(new Set(e.flatMap(t=>n.map(i=>`${t}/${i}`))))}function Yhe(){var r,s,a;if((ke==null?void 0:ke.platform)==="darwin")return["/Applications/FreeCAD.app/Contents/MacOS/FreeCADCmd","/Applications/FreeCAD.app/Contents/Resources/bin/FreeCADCmd","/Applications/FreeCAD.app/Contents/Resources/bin/freecadcmd",...fO("FreeCADCmd","freecadcmd")];if((ke==null?void 0:ke.platform)!=="win32")return["/usr/local/bin/freecadcmd","/opt/homebrew/bin/freecadcmd","/opt/local/bin/freecadcmd","/snap/freecad/current/usr/bin/freecadcmd","/usr/bin/freecadcmd"];let n=[],e=(r=ke==null?void 0:ke.env)==null?void 0:r.LOCALAPPDATA,t=(s=ke==null?void 0:ke.env)==null?void 0:s.ProgramFiles,i=(a=ke==null?void 0:ke.env)==null?void 0:a["ProgramFiles(x86)"];if(e&&n.push(Gi(e,"Programs","FreeCAD","bin","FreeCADCmd.exe")),t&&n.push(Gi(t,"FreeCAD","bin","FreeCADCmd.exe")),e)for(let o of["1.2","1.1","1.0","0.22","0.21","0.20"])n.push(`${e}/Programs/FreeCAD ${o}/bin/FreeCADCmd.exe`);if(t)for(let o of["1.2","1.1","1.0","0.22","0.21","0.20"])n.push(`${t}/FreeCAD ${o}/bin/FreeCADCmd.exe`);return i&&n.push(`${i}/FreeCAD/bin/FreeCADCmd.exe`),n}function Khe(n){var a,o,l,c;if((ke==null?void 0:ke.platform)!=="win32")return[];let e=(a=ke==null?void 0:ke.env)==null?void 0:a.APPDATA,t=(o=ke==null?void 0:ke.env)==null?void 0:o.LOCALAPPDATA,i=(l=ke==null?void 0:ke.env)==null?void 0:l.npm_config_prefix,r=(c=ke==null?void 0:ke.env)==null?void 0:c.USERPROFILE,s=[i,e?Gi(e,"npm"):void 0,t?Gi(t,"npm"):void 0,r?Gi(r,"AppData","Roaming","npm"):void 0].filter(f=>!!f);return Array.from(new Set(s.map(f=>Gi(f,n))))}function jhe(...n){var s,a,o;if((ke==null?void 0:ke.platform)!=="win32")return[];let e=(s=ke==null?void 0:ke.env)==null?void 0:s.ProgramFiles,t=(a=ke==null?void 0:ke.env)==null?void 0:a["ProgramFiles(x86)"],i=(o=ke==null?void 0:ke.env)==null?void 0:o.LOCALAPPDATA,r=[e,t,i?Gi(i,"Programs"):void 0].filter(l=>!!l);return Array.from(new Set(r.flatMap(l=>n.map(c=>Gi(l,c)))))}async function uO(n){try{return await $n(n,(ke==null?void 0:ke.platform)==="win32"?es:lN),!0}catch(e){return!1}}function lO(n){let e=n==null?void 0:n.trim();if(e)return e}function qhe(n){let e=[],t="",i=null;for(let r=0;rr.trim().toLowerCase()).filter(Boolean);return e!=null&&e.length?e:Xhe}async function $he(n){var r;let e=(r=ke==null?void 0:ke.env)==null?void 0:r.PATH;if(!e)return;let t=e.split(cN).map(s=>s.trim()).filter(Boolean),i=(ke==null?void 0:ke.platform)==="win32"?Jhe(n):[""];for(let s of t)for(let a of i){let o=Gi(s,a?`${n}${a}`:n);if(await uO(o))return o}}function hO(n,e,t=15e3){return new Promise((i,r)=>{Js(n,e,{timeout:t,windowsHide:!0,maxBuffer:4*1024*1024},(s,a,o)=>{if(s){r(new Error((o||a||s.message).toString().trim()||s.message));return}i({stdout:a!=null?a:"",stderr:o!=null?o:""})})})}function dO(n){let t=(n instanceof Error?n.message:String(n)).replace(/\s+/g," ").trim();return t.length>180?`${t.slice(0,177)}...`:t}async function cO(n,e,t,i){let r="";for(let s of t)try{return await hO(n,[...e,...s]),{ok:!0,detail:""}}catch(a){let o=dO(a);if(i.test(o))return{ok:!0,detail:""};r=o}return{ok:!1,detail:r||"Command probe failed."}}async function ede(n){var i;if(!n.available)return[];let e=(i=n.resolvedPath)!=null?i:n.executable,t=[...n.args];if(n.id==="freecad")try{return await hO(e,[...t,"-c","import cadquery, trimesh; print('ok')"]),[{kind:"cad-python",ok:!0,detail:""}]}catch(r){return[{kind:"cad-python",ok:!1,detail:dO(r)}]}if(n.id==="assimp")try{return await hO(e,[...t,"-c","import trimesh, numpy, networkx, collada; print('ok')"]),[{kind:"mesh-python",ok:!0,detail:""}]}catch(r){return[{kind:"mesh-python",ok:!1,detail:dO(r)}]}if(n.id==="freecadcmd"){let r=await cO(e,t,[["--version"],["--help"]],/freecad|usage|help|version/i);return[{kind:"freecadcmd-cli",ok:r.ok,detail:r.detail}]}if(n.id==="obj2gltf"){let r=await cO(e,t,[["--version"],["--help"]],/obj2gltf|usage|help|version/i);return[{kind:"obj2gltf-cli",ok:r.ok,detail:r.detail}]}if(n.id==="fbx2gltf"){let r=await cO(e,t,[["--version"],["--help"]],/fbx2gltf|usage|help|version/i);return[{kind:"fbx2gltf-cli",ok:r.ok,detail:r.detail}]}return[]}function tde(n){let e=tK.find(t=>t.id===n);if(!e)throw new Error(`Unknown converter command id: ${n}`);return e}function ide(n){var s,a,o,l;let e=(a=(s=ke==null?void 0:ke.env)==null?void 0:s.ProgramFiles)==null?void 0:a.toLowerCase(),t=(l=(o=ke==null?void 0:ke.env)==null?void 0:o["ProgramFiles(x86)"])==null?void 0:l.toLowerCase(),i=[],r=[];for(let c of n.knownCandidates){let f=c.toLowerCase(),h=(ke==null?void 0:ke.platform)==="win32"&&((e?f.startsWith(e):!1)||(t?f.startsWith(t):!1)),d=(ke==null?void 0:ke.platform)!=="win32"&&(c.startsWith("/usr/bin/")||c.startsWith("/snap/freecad/current/usr/bin/"));h||d?r.push(c):i.push(c)}return{userCandidates:i,systemCandidates:r}}async function eK(n,e,t){for(let i of e)if(await uO(i))return{id:n.id,label:n.label,envVar:n.envVar,settingsKey:n.settingsKey,command:i,executable:i,args:[],resolvedPath:i,available:!0,source:"candidate",detail:t,checkedCandidates:[i]}}function rde(n,e){let t=[];return n.length&&t.push(`Checked common user locations: ${n.join("; ")}`),e.length&&t.push(`Checked system fallback locations: ${e.join("; ")}`),t.join(". ")}async function xR(n,e,t,i){let r=Zhe(e);if(Qhe(r.executable)){let a=await uO(r.executable);return{id:n.id,label:n.label,envVar:n.envVar,settingsKey:n.settingsKey,configuredCommand:i,command:e,executable:r.executable,args:r.args,resolvedPath:a?r.executable:void 0,available:a,source:t,detail:a?`Using ${RR(t)} path.`:"Configured path was not found or is not executable.",checkedCandidates:[r.executable]}}let s=await $he(r.executable);return{id:n.id,label:n.label,envVar:n.envVar,settingsKey:n.settingsKey,configuredCommand:i,command:e,executable:r.executable,args:r.args,resolvedPath:s,available:!!s,source:t,detail:s?`Resolved from ${RR(t)} via PATH lookup.`:"Command name was not found on PATH.",checkedCandidates:[r.executable]}}function RR(n){switch(n){case"settings":return"plugin settings";case"env":return"environment variable";case"candidate":return"known install location";case"path":return"PATH fallback"}}async function iK(n,e){var d,u,m;let t=tde(n),{userCandidates:i,systemCandidates:r}=ide(t),s=lO(e);if(s)return xR(t,s,"settings",s);let a=lO((d=ke==null?void 0:ke.env)==null?void 0:d[t.envVar]);if(a)return xR(t,a,"env");for(let _ of(u=t.envVarAliases)!=null?u:[]){let p=lO((m=ke==null?void 0:ke.env)==null?void 0:m[_]);if(p)return xR(t,p,"env")}let o=await eK(t,i,"Detected at a common user-managed install location.");if(o)return o;let l=[];for(let _ of t.fallbackCommands){let p=await xR(t,_,"path");if(l.push(p),p.available)return p}let c=await eK(t,r,"Detected at a system fallback install location.");if(c)return c;let f=l.flatMap(_=>_.checkedCandidates),h=rde(i,r);return{...l[0],detail:h?`Command name was not found on PATH. ${h}`:"Command name was not found on PATH.",checkedCandidates:[...i,...f,...r]}}async function bR(n){let e=await Promise.all(tK.map(t=>iK(t.id,n[t.settingsKey])));return Promise.all(e.map(async t=>({...t,dependencyChecks:await ede(t)})))}async function Qn(n,e){var i;let t=await iK(n,e);return{command:(i=t.resolvedPath)!=null?i:t.executable,args:[...t.args]}}var ke,Xhe,tK,Wf=C(()=>{"use strict";ir();ir();ir();ke=wg(),Xhe=[".exe",".cmd",".bat",".com"];tK=[{id:"freecad",label:"Python (CadQuery/OCCT)",settingsKey:"freecadCommand",envVar:"AI3D_FREECAD_CMD",fallbackCommands:(ke==null?void 0:ke.platform)==="win32"?["py","python"]:["python3","python"],knownCandidates:(ke==null?void 0:ke.platform)==="win32"?[]:["/usr/local/bin/python3","/opt/homebrew/bin/python3","/opt/local/bin/python3","/usr/bin/python3"]},{id:"obj2gltf",label:"obj2gltf",settingsKey:"obj2gltfCommand",envVar:"AI3D_OBJ2GLTF_CMD",fallbackCommands:(ke==null?void 0:ke.platform)==="win32"?["obj2gltf.cmd"]:["obj2gltf"],knownCandidates:(ke==null?void 0:ke.platform)==="win32"?Khe("obj2gltf.cmd"):fO("obj2gltf")},{id:"fbx2gltf",label:"FBX2glTF",settingsKey:"fbx2gltfCommand",envVar:"AI3D_FBX2GLTF_CMD",fallbackCommands:(ke==null?void 0:ke.platform)==="win32"?["FBX2glTF.exe"]:["FBX2glTF","fbx2gltf"],knownCandidates:(ke==null?void 0:ke.platform)==="win32"?jhe(Gi("FBX2glTF","FBX2glTF-windows-x64.exe"),Gi("FBX2glTF","FBX2glTF.exe")):fO("FBX2glTF","fbx2gltf")},{id:"assimp",label:"Python (trimesh)",settingsKey:"assimpCommand",envVar:"AI3D_ASSIMP_CMD",fallbackCommands:(ke==null?void 0:ke.platform)==="win32"?["py","python"]:["python3","python"],knownCandidates:(ke==null?void 0:ke.platform)==="win32"?[]:["/usr/local/bin/python3","/opt/homebrew/bin/python3","/opt/local/bin/python3","/usr/bin/python3"]},{id:"freecadcmd",label:"FreeCAD (SLDPRT)",settingsKey:"freecadcmdCommand",envVar:"AI3D_FREECADCMD",envVarAliases:["AI3D_FREECMDCMD"],fallbackCommands:(ke==null?void 0:ke.platform)==="win32"?["FreeCADCmd.exe"]:["freecadcmd","FreeCADCmd"],knownCandidates:Yhe()}]});function Ec(n){if(n.includes('"'))throw new Error(`File path contains double-quote character, not supported for Python conversion: ${n}`);return n.replace(/\\/g,"/")}var IR=C(()=>{"use strict"});async function ade(n){try{return await $n(n,es),!0}catch(e){return!1}}function ode(n,e,t){return new Promise((i,r)=>{Js(n,e,{timeout:t,windowsHide:!0,maxBuffer:50*1024*1024},(s,a,o)=>{if(!s){i();return}let l=(a!=null?a:"").toString().trim(),c=(o!=null?o:"").toString().trim(),f=[`CAD conversion failed: ${s.message}`,l?`stdout: ${l}`:"",c?`stderr: ${c}`:""].filter(Boolean);r(new Error(f.join(" | ")))})})}function lde(n,e,t){let i=Ec(n),r=Ec(e),s=t.toLowerCase().replace(/^\./,""),a=s==="step"||s==="stp",o=s==="iges"||s==="igs",l=["import cadquery as cq","import trimesh","import trimesh.visual","import numpy as np","import sys","import os","",`src = r"${i}"`,`out = r"${r}"`,""];return a?l.push("from OCP.STEPCAFControl import STEPCAFControl_Reader","from OCP.STEPControl import STEPControl_Reader","from OCP.XCAFDoc import XCAFDoc_DocumentTool, XCAFDoc_ColorType, XCAFDoc_ShapeTool","from OCP.TDocStd import TDocStd_Document","from OCP.TCollection import TCollection_ExtendedString","from OCP.Quantity import Quantity_Color","from OCP.TDF import TDF_ChildIterator"):o&&l.push("from OCP.IGESControl import IGESControl_Reader"),l.push("from OCP.TopoDS import TopoDS","from OCP.TopAbs import TopAbs_FACE","from OCP.TopExp import TopExp_Explorer","from OCP.BRep import BRep_Tool","from OCP.BRepMesh import BRepMesh_IncrementalMesh","from OCP.TopLoc import TopLoc_Location","from OCP.IFSelect import IFSelect_RetDone"),a||l.push("from OCP.BRepTools import BRepTools"),l.push("","DEFAULT_COLOR = [180, 180, 180, 255]","","def triangulate_face(face, linear=0.1, angular=0.5):"," BRepMesh_IncrementalMesh(face, linear, False, angular, True)"," loc = TopLoc_Location()"," tri = BRep_Tool.Triangulation_s(face, loc)"," if tri is None:"," return None, None"," n = tri.NbNodes()"," verts = []"," for i in range(1, n + 1):"," p = tri.Node(i)"," if not loc.IsIdentity():"," p = p.Transformed(loc.Transformation())"," verts.append([p.X(), p.Y(), p.Z()])"," ntri = tri.NbTriangles()"," faces = []"," for i in range(1, ntri + 1):"," t = tri.Triangle(i)"," n1, n2, n3 = t.Get()"," faces.append([n1 - 1, n2 - 1, n3 - 1])"," return verts, faces"),a&&l.push("","def build_xde_color_lookup(step_path):",' """Load XDE with STEPCAFControl, extract per-face colors via surface signature."""'," from OCP.BRepAdaptor import BRepAdaptor_Surface"," lookup = {}"," try:"," reader = STEPCAFControl_Reader()"," reader.SetColorMode(True)"," reader.SetNameMode(True)"," status = reader.ReadFile(step_path)"," if status != IFSelect_RetDone:"," return lookup"," doc = TDocStd_Document(TCollection_ExtendedString('XmlOcaf'))"," reader.Transfer(doc)"," shape_tool = XCAFDoc_DocumentTool.ShapeTool_s(doc.Main())"," color_tool = XCAFDoc_DocumentTool.ColorTool_s(doc.Main())",""," def walk(label):"," if XCAFDoc_ShapeTool.IsShape_s(label):"," s = XCAFDoc_ShapeTool.GetShape_s(label)"," if s is not None and s.ShapeType() == TopAbs_FACE:"," c = Quantity_Color()"," if color_tool.GetColor(s, XCAFDoc_ColorType.XCAFDoc_ColorSurf, c):"," face = TopoDS.Face_s(s)"," try:"," adaptor = BRepAdaptor_Surface(face)"," u_r = (adaptor.FirstUParameter(), adaptor.LastUParameter())"," v_r = (adaptor.FirstVParameter(), adaptor.LastVParameter())"," key = (adaptor.GetType(), tuple(round(x, 4) for x in u_r), tuple(round(x, 4) for x in v_r))"," color = (c.Red(), c.Green(), c.Blue())"," if key not in lookup:"," lookup[key] = color"," except Exception:"," pass"," children = TDF_ChildIterator(label)"," while children.More():"," walk(children.Value())"," children.Next()",""," walk(doc.Main())"," except Exception as e:",' print(f"XDE color extraction failed: {e}", file=sys.stderr)'," return lookup","","def get_face_color(face, color_lookup):",' """Match a geometry face to an XDE face via surface signature, return color."""'," from OCP.BRepAdaptor import BRepAdaptor_Surface"," try:"," adaptor = BRepAdaptor_Surface(face)"," u_r = (adaptor.FirstUParameter(), adaptor.LastUParameter())"," v_r = (adaptor.FirstVParameter(), adaptor.LastVParameter())"," key = (adaptor.GetType(), tuple(round(x, 4) for x in u_r), tuple(round(x, 4) for x in v_r))"," return color_lookup.get(key)"," except Exception:"," return None"),l.push(""),a?l.push("# STEP: build XDE color lookup + load geometry","color_lookup = build_xde_color_lookup(src)",'print(f"XDE color lookup: {len(color_lookup)} surface signatures")',"","sr = STEPControl_Reader()","status = sr.ReadFile(src)","if status != IFSelect_RetDone:",' print(f"Failed to read STEP file: {src}", file=sys.stderr)'," sys.exit(1)","sr.TransferRoots()","shape = sr.OneShape()"):o?l.push("# IGES: load geometry (no XDE color support for IGES)","ir = IGESControl_Reader()","status = ir.ReadFile(src)","if status != IFSelect_RetDone:",' print(f"Failed to read IGES file: {src}", file=sys.stderr)'," sys.exit(1)","ir.TransferRoots()","shape = ir.OneShape()"):l.push("# BREP: load geometry from native OpenCascade format","from OCP.TopoDS import TopoDS_Shape","from OCP.BRep import BRep_Builder","shape = TopoDS_Shape()","builder = BRep_Builder()","success = BRepTools.Read_s(shape, src, builder)","if not success:",' print(f"Failed to read BREP file: {src}", file=sys.stderr)'," sys.exit(1)"),l.push("","all_verts = []","all_faces = []","all_colors = []","matched_count = 0","total_faces = 0","","exp = TopExp_Explorer(shape, TopAbs_FACE)","while exp.More():"," face = TopoDS.Face_s(exp.Current())"," total_faces += 1"," verts, faces = triangulate_face(face)"," if verts and faces:"," offset = len(all_verts)"," all_verts.extend(verts)"," for tri in faces:"," all_faces.append([tri[0] + offset, tri[1] + offset, tri[2] + offset])"),a?l.push(" color = get_face_color(face, color_lookup)"," if color:"," matched_count += 1"," r, g, b = color"," rgba = [int(r * 255), int(g * 255), int(b * 255), 255]"," else:"," rgba = DEFAULT_COLOR"):l.push(" rgba = DEFAULT_COLOR"),l.push(" n = len(verts)"," all_colors.extend([rgba] * n)"," exp.Next()","",'print(f"Triangulated: {total_faces} faces, {len(all_verts)} verts, {matched_count} colored ({matched_count*100//max(total_faces,1)}%)")',"","if not all_verts or not all_faces:"," # Fallback: use CadQuery import (works for STEP/IGES, not BREP)"),a?l.push(" cq_shape = cq.importers.importStep(src)"):o?l.push(" cq_shape = cq.importers.importStep(src) # CadQuery reads IGES via importStep"):l.push(" cq_shape = cq.importers.importStep(src) # CadQuery BREP import"),l.push(" cq.exporters.export(cq_shape, out, exportType='STL')"," mesh = trimesh.load(out)"," data = mesh.export(file_type='glb')"," if isinstance(data, str):"," with open(data, 'rb') as f:"," data = f.read()"," with open(out, 'wb') as f:"," f.write(data)",' print(f"Fallback CadQuery STL->GLB: {out} ({len(data)} bytes)")'," sys.exit(0)","","verts_arr = np.array(all_verts, dtype=float)","faces_arr = np.array(all_faces, dtype=int)","colors_arr = np.array(all_colors, dtype=np.uint8)","","mesh = trimesh.Trimesh("," vertices=verts_arr,"," faces=faces_arr,"," visual=trimesh.visual.ColorVisuals(vertex_colors=colors_arr),"," process=True,",")","mesh.fix_normals()","scene = trimesh.Scene([mesh])","","result = scene.export(file_type='glb')","if isinstance(result, bytes):"," data = result","elif isinstance(result, str):"," with open(result, 'rb') as f:"," data = f.read()","else:"," data = bytes(result)","","with open(out, 'wb') as f:"," f.write(data)","","print(f'Converted {src} -> {out} ({len(data)} bytes, {matched_count}/{total_faces} colored faces)')"),l.join(` -`)}var nde,sde,MR,rK=C(()=>{"use strict";ir();ir();ir();ir();Zn();Wf();IR();nde=cr("freecad-converter"),sde=300*1e3;MR=class{constructor(e){this.configuredCommand=e;this.id="freecad";this.sourceExts=["step","stp","iges","igs","brep"];this.targetExt="glb"}async getCacheKey(){let e=await Qn(this.id,this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!Bn(e.sourcePath))throw new Error(`Converter '${this.id}' requires an absolute source path, got '${e.sourcePath}'. Pass a file-system path to the conversion pipeline when invoking CAD conversion.`);let t=await Qn(this.id,this.configuredCommand),i=So(e.sourcePath),r=To(e.sourcePath,Qs(e.sourcePath)),s=Gi(i,`${r}.ai3d-converted.glb`),a=Gi(Td(),"ai3d-freecad"),o=Gi(a,`${r}-${Date.now()}.py`);await Ed(a,{recursive:!0}),await vd(o,lde(e.sourcePath,s,e.sourceExt),"utf8"),nde.info("run CAD conversion (CadQuery/OCCT)",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{await ode(t.command,[...t.args,o],sde)}catch(c){throw new Error(`CAD conversion failed for '${e.sourcePath}'. Ensure Python with cadquery is installed: pip install cadquery trimesh. Set Python command path in plugin settings or AI3D_FREECAD_CMD if Python is not discoverable. ${c instanceof Error?c.message:String(c)}`)}finally{Sd(o,{force:!0})}if(!await ade(s))throw new Error(`CAD conversion finished but output was not found: '${s}'. Check that CadQuery supports this CAD format.`);if((await Zs(s)).byteLength===0)throw new Error(`CAD conversion output is empty: '${s}'.`);return{outputPath:s,outputExt:"glb",fromCache:!1,warnings:["Converted by local Python/CadQuery(OCCT) bridge."]}}}});async function hde(n){try{return await $n(n,es),!0}catch(e){return!1}}function dde(n,e,t){return new Promise((i,r)=>{Js(n,e,{timeout:t,windowsHide:!0,maxBuffer:50*1024*1024},(s,a,o)=>{if(!s){i();return}let l=(a!=null?a:"").toString().trim(),c=(o!=null?o:"").toString().trim(),f=[`obj2gltf command failed: ${s.message}`,l?`stdout: ${l}`:"",c?`stderr: ${c}`:""].filter(Boolean);r(new Error(f.join(" | ")))})})}var cde,fde,CR,nK=C(()=>{"use strict";ir();ir();ir();Zn();Wf();cde=cr("obj2gltf-converter"),fde=180*1e3;CR=class{constructor(e){this.configuredCommand=e;this.id="obj2gltf";this.sourceExts=["obj"];this.targetExt="glb"}async getCacheKey(){let e=await Qn(this.id,this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!Bn(e.sourcePath))throw new Error(`Converter '${this.id}' requires an absolute source path, got '${e.sourcePath}'. Pass a file-system path to the conversion pipeline when invoking obj2gltf.`);let t=await Qn(this.id,this.configuredCommand),i=So(e.sourcePath),r=To(e.sourcePath,Qs(e.sourcePath)),s=Gi(i,`${r}.ai3d-converted.glb`);cde.info("run obj2gltf conversion",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{await dde(t.command,[...t.args,"-i",e.sourcePath,"-o",s,"-b"],fde)}catch(o){throw new Error(`obj2gltf conversion failed for '${e.sourcePath}'. Set obj2gltf command path in plugin settings or AI3D_OBJ2GLTF_CMD if obj2gltf is not discoverable. ${o instanceof Error?o.message:String(o)}`)}if(!await hde(s))throw new Error(`obj2gltf conversion finished but output was not found: '${s}'.`);if((await Zs(s)).byteLength===0)throw new Error(`obj2gltf output file is empty: '${s}'.`);return{outputPath:s,outputExt:"glb",fromCache:!1,warnings:["Converted by local obj2gltf CLI bridge."]}}}});async function pde(n){try{return await $n(n,es),!0}catch(e){return!1}}function _de(n,e,t){return new Promise((i,r)=>{Js(n,e,{timeout:t,windowsHide:!0,maxBuffer:50*1024*1024},(s,a,o)=>{if(!s){i();return}let l=(a!=null?a:"").toString().trim(),c=(o!=null?o:"").toString().trim(),f=[`FBX2glTF command failed: ${s.message}`,l?`stdout: ${l}`:"",c?`stderr: ${c}`:""].filter(Boolean);r(new Error(f.join(" | ")))})})}var ude,mde,yR,sK=C(()=>{"use strict";ir();ir();ir();Zn();Wf();ude=cr("fbx2gltf-converter"),mde=180*1e3;yR=class{constructor(e){this.configuredCommand=e;this.id="fbx2gltf";this.sourceExts=["fbx"];this.targetExt="glb"}async getCacheKey(){let e=await Qn(this.id,this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!Bn(e.sourcePath))throw new Error(`Converter '${this.id}' requires an absolute source path, got '${e.sourcePath}'. Pass a file-system path to the conversion pipeline when invoking FBX2glTF.`);let t=await Qn(this.id,this.configuredCommand),i=So(e.sourcePath),r=To(e.sourcePath,Qs(e.sourcePath)),s=Gi(i,`${r}.ai3d-converted.glb`);ude.info("run FBX2glTF conversion",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{await _de(t.command,[...t.args,"-i",e.sourcePath,"-o",s,"-b"],mde)}catch(o){throw new Error(`FBX2glTF conversion failed for '${e.sourcePath}'. Set FBX2glTF command path in plugin settings or AI3D_FBX2GLTF_CMD if FBX2glTF is not discoverable. ${o instanceof Error?o.message:String(o)}`)}if(!await pde(s))throw new Error(`FBX2glTF conversion finished but output was not found: '${s}'.`);if((await Zs(s)).byteLength===0)throw new Error(`FBX2glTF output file is empty: '${s}'.`);return{outputPath:s,outputExt:"glb",fromCache:!1,warnings:["Converted by local FBX2glTF CLI bridge."]}}}});async function Ede(n){try{return await $n(n,es),!0}catch(e){return!1}}function Sde(n,e,t){return new Promise((i,r)=>{Js(n,e,{timeout:t,windowsHide:!0,maxBuffer:50*1024*1024},(s,a,o)=>{if(!s){i();return}let l=(a!=null?a:"").toString().trim(),c=(o!=null?o:"").toString().trim(),f=[`mesh conversion failed: ${s.message}`,l?`stdout: ${l}`:"",c?`stderr: ${c}`:""].filter(Boolean);r(new Error(f.join(" | ")))})})}function Tde(n,e){let t=Ec(n),i=Ec(e);return["import trimesh","import sys","",`src = r"${t}"`,`out = r"${i}"`,"","try:"," loaded = trimesh.load(src, force=None)","except Exception as e:",' print(f"Failed to load {src}: {e}", file=sys.stderr)'," sys.exit(1)","","if isinstance(loaded, trimesh.Scene):"," scene = loaded","elif isinstance(loaded, trimesh.Trimesh):"," scene = trimesh.Scene([loaded])","else:",' print(f"Unsupported type: {type(loaded)}", file=sys.stderr)'," sys.exit(1)","","try:"," data = scene.export(file_type='glb')","except Exception as e:",' print(f"Failed to export GLB: {e}", file=sys.stderr)'," sys.exit(1)","","with open(out, 'wb') as f:"," f.write(data)","","print(f'Converted {src} -> {out} ({len(data)} bytes)')"].join(` -`)}var gde,vde,PR,aK=C(()=>{"use strict";ir();ir();ir();ir();Zn();Wf();IR();gde=cr("assimp-converter"),vde=300*1e3;PR=class{constructor(e){this.configuredCommand=e;this.id="assimp";this.sourceExts=["3mf","dae"];this.targetExt="glb"}async getCacheKey(){let e=await Qn(this.id,this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!Bn(e.sourcePath))throw new Error(`Converter '${this.id}' requires an absolute source path, got '${e.sourcePath}'. Pass a file-system path to the conversion pipeline when invoking mesh conversion.`);let t=await Qn(this.id,this.configuredCommand),i=So(e.sourcePath),r=To(e.sourcePath,Qs(e.sourcePath)),s=Gi(i,`${r}.ai3d-converted.glb`),a=Gi(Td(),"ai3d-mesh-convert"),o=Gi(a,`${r}-${Date.now()}.py`);await Ed(a,{recursive:!0}),await vd(o,Tde(e.sourcePath,s),"utf8"),gde.info("run mesh conversion (trimesh)",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{await Sde(t.command,[...t.args,o],vde)}catch(c){throw new Error(`Mesh conversion failed for '${e.sourcePath}'. Ensure Python with trimesh is installed: pip install trimesh numpy networkx pycollada. Set Python command path in plugin settings or AI3D_ASSIMP_CMD if Python is not discoverable. ${c instanceof Error?c.message:String(c)}`)}finally{Sd(o,{force:!0})}if(!await Ede(s))throw new Error(`Mesh conversion finished but output was not found: '${s}'. Check that trimesh supports this format.`);if((await Zs(s)).byteLength===0)throw new Error(`Mesh conversion output is empty: '${s}'.`);return{outputPath:s,outputExt:"glb",fromCache:!1,warnings:["Converted by local Python/trimesh bridge."]}}}});async function xde(n){try{return await $n(n,es),!0}catch(e){return!1}}function Rde(n,e,t){return new Promise((i,r)=>{Js(n,e,{timeout:t,windowsHide:!0,maxBuffer:50*1024*1024},(s,a,o)=>{if(!s){i({stdout:a!=null?a:"",stderr:o!=null?o:""});return}let l=(a!=null?a:"").toString().trim(),c=(o!=null?o:"").toString().trim(),f=[`SLDPRT conversion failed: ${s.message}`,l?`stdout: ${l}`:"",c?`stderr: ${c}`:""].filter(Boolean);r(new Error(f.join(" | ")))})})}function bde(n,e){let t=Ec(n),i=Ec(e),r=i.replace(/\.glb$/i,".intermediate.step");return["import sys","import os","",`src = r"${t}"`,`out = r"${i}"`,`step_out = r"${r}"`,"","# Step 1: Import SLDPRT via FreeCAD","try:"," import FreeCAD"," import ImportGui"," import Mesh","except ImportError as e:",' print(f"FreeCAD modules not available: {e}", file=sys.stderr)',' print("Ensure this script runs under FreeCADCmd (not system Python).", file=sys.stderr)'," sys.exit(1)","","print(f'Opening SLDPRT: {src}')","try:"," doc = FreeCAD.newDocument('Convert')"," ImportGui.open(src, doc.Name)","except Exception as e:",' print(f"Failed to open SLDPRT file: {e}", file=sys.stderr)'," sys.exit(1)","","if not doc.Objects:",' print("SLDPRT file imported but contains no objects", file=sys.stderr)'," sys.exit(1)","",'print(f"Imported {len(doc.Objects)} object(s) from SLDPRT")',"","# Step 2: Export to STEP (intermediate)","try:"," import Import"," objs = [o for o in doc.Objects if hasattr(o, 'Shape')]"," if not objs:",' print("No shape objects found after import", file=sys.stderr)'," sys.exit(1)"," Import.export(objs, step_out)",' print(f"Exported intermediate STEP: {step_out}")',"except Exception as e:",' print(f"Failed to export STEP: {e}", file=sys.stderr)'," sys.exit(1)","","FreeCAD.closeDocument(doc.Name)","","# Step 3: Convert STEP to GLB using OCP (same pipeline as FreecadConverter)","import trimesh","import trimesh.visual","import numpy as np","","from OCP.STEPControl import STEPControl_Reader","from OCP.TopoDS import TopoDS","from OCP.TopAbs import TopAbs_FACE","from OCP.TopExp import TopExp_Explorer","from OCP.BRep import BRep_Tool","from OCP.BRepMesh import BRepMesh_IncrementalMesh","from OCP.TopLoc import TopLoc_Location","from OCP.IFSelect import IFSelect_RetDone","","DEFAULT_COLOR = [180, 180, 180, 255]","","def triangulate_face(face, linear=0.1, angular=0.5):"," BRepMesh_IncrementalMesh(face, linear, False, angular, True)"," loc = TopLoc_Location()"," tri = BRep_Tool.Triangulation_s(face, loc)"," if tri is None:"," return None, None"," n = tri.NbNodes()"," verts = []"," for i in range(1, n + 1):"," p = tri.Node(i)"," if not loc.IsIdentity():"," p = p.Transformed(loc.Transformation())"," verts.append([p.X(), p.Y(), p.Z()])"," ntri = tri.NbTriangles()"," faces = []"," for i in range(1, ntri + 1):"," t = tri.Triangle(i)"," n1, n2, n3 = t.Get()"," faces.append([n1 - 1, n2 - 1, n3 - 1])"," return verts, faces","","sr = STEPControl_Reader()","status = sr.ReadFile(step_out)","if status != IFSelect_RetDone:",' print(f"Failed to read intermediate STEP: {step_out}", file=sys.stderr)'," sys.exit(1)","sr.TransferRoots()","shape = sr.OneShape()","","all_verts = []","all_faces = []","all_colors = []","total_faces = 0","","exp = TopExp_Explorer(shape, TopAbs_FACE)","while exp.More():"," face = TopoDS.Face_s(exp.Current())"," total_faces += 1"," verts, faces = triangulate_face(face)"," if verts and faces:"," offset = len(all_verts)"," all_verts.extend(verts)"," for tri in faces:"," all_faces.append([tri[0] + offset, tri[1] + offset, tri[2] + offset])"," all_colors.extend([DEFAULT_COLOR] * len(verts))"," exp.Next()","","if not all_verts or not all_faces:",' print(f"No geometry extracted from STEP ({total_faces} faces scanned)", file=sys.stderr)'," sys.exit(1)","",'print(f"Triangulated: {total_faces} faces, {len(all_verts)} verts")',"","verts_arr = np.array(all_verts, dtype=float)","faces_arr = np.array(all_faces, dtype=int)","colors_arr = np.array(all_colors, dtype=np.uint8)","","mesh = trimesh.Trimesh("," vertices=verts_arr,"," faces=faces_arr,"," visual=trimesh.visual.ColorVisuals(vertex_colors=colors_arr),"," process=True,",")","mesh.fix_normals()","scene = trimesh.Scene([mesh])","","result = scene.export(file_type='glb')","if isinstance(result, bytes):"," data = result","elif isinstance(result, str):"," with open(result, 'rb') as f:"," data = f.read()","else:"," data = bytes(result)","","with open(out, 'wb') as f:"," f.write(data)","","# Cleanup intermediate STEP","try:"," os.remove(step_out)","except OSError:"," pass","","print(f'Converted {src} -> {out} ({len(data)} bytes, {total_faces} faces)')"].join(` -`)}var mO,Ade,DR,oK=C(()=>{"use strict";ir();ir();ir();ir();Zn();Wf();IR();mO=cr("sldprt-converter"),Ade=600*1e3;DR=class{constructor(e){this.configuredCommand=e;this.id="sldprt";this.sourceExts=["sldprt"];this.targetExt="glb"}async getCacheKey(){let e=await Qn("freecadcmd",this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!Bn(e.sourcePath))throw new Error(`Converter '${this.id}' requires an absolute source path, got '${e.sourcePath}'. Pass a file-system path to the conversion pipeline when invoking SLDPRT conversion.`);let t=await Qn("freecadcmd",this.configuredCommand),i=So(e.sourcePath),r=To(e.sourcePath,Qs(e.sourcePath)),s=Gi(i,`${r}.ai3d-converted.glb`),a=Gi(Td(),"ai3d-sldprt"),o=Gi(a,`${r}-${Date.now()}.py`);await Ed(a,{recursive:!0}),await vd(o,bde(e.sourcePath,s),"utf8"),mO.info("run SLDPRT conversion (FreeCAD + OCP)",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{let{stdout:c,stderr:f}=await Rde(t.command,[...t.args,o],Ade);c&&mO.info("FreeCAD stdout",{stdout:c.trim().slice(0,500)}),f&&mO.warn("FreeCAD stderr",{stderr:f.trim().slice(0,500)})}catch(c){throw new Error(`SLDPRT conversion failed for '${e.sourcePath}'. Ensure FreeCAD is installed (https://www.freecad.org/downloads.php). Set FreeCADCmd path in plugin settings or AI3D_FREECADCMD env var. ${c instanceof Error?c.message:String(c)}`)}finally{Sd(o,{force:!0})}if(!await xde(s))throw new Error(`SLDPRT conversion finished but output was not found: '${s}'. Check that FreeCAD can import this SolidWorks file version.`);if((await Zs(s)).byteLength===0)throw new Error(`SLDPRT conversion output is empty: '${s}'.`);return{outputPath:s,outputExt:"glb",fromCache:!1,warnings:["Converted by local FreeCAD + OpenCASCADE bridge."]}}}});function od(n){var r;let e=new AR,t=new Set((r=n==null?void 0:n.enabledConverterIds)!=null?r:[]);pO.debug("create conversion manager",{enabledConverterIds:[...t]});let i=[new MR(n==null?void 0:n.freecadCommand),new CR(n==null?void 0:n.obj2gltfCommand),new yR(n==null?void 0:n.fbx2gltfCommand),new PR(n==null?void 0:n.assimpCommand),new DR(n==null?void 0:n.freecadcmdCommand)];for(let s of i)t.has(s.id)?(e.registerConverter(s),pO.info("enabled converter",{converterId:s.id})):pO.debug("converter disabled",{converterId:s.id});return e}var pO,LR=C(()=>{"use strict";$9();rK();nK();sK();aK();oK();Zn();pO=cr("conversion-factory")});function lK(n){let e=ya(n.sourceExt),t=[];return e!==n.sourceExt&&t.push(`Normalized extension '${n.sourceExt}' -> '${e}'.`),Ide.debug("prepare direct load",{path:n.path,sourceExt:n.sourceExt,normalizedExt:e,warningCount:t.length}),{effectivePath:n.path,effectiveExt:e,warnings:t}}var Ide,cK=C(()=>{"use strict";hl();Zn();Ide=cr("direct-load-service")});function OR(n){return`.${n.trim().toLowerCase()}`}function jm(n){return n instanceof ld}function _O(n){var e;if(n instanceof ld){let t=(e=Mde[n.converterId])!=null?e:n.converterId;return Cr("modelLoad.warningMessage",{ext:OR(n.sourceExt),converterName:t})}return n instanceof Km?Cr("modelLoad.mobileWarningMessage",{ext:OR(n.sourceExt)}):Cr("modelLoad.errorMessage",{reason:n instanceof Error?n.message:String(n)})}function qm(n){return n instanceof ld?{level:"warning",title:te("modelLoad.warningTitle"),message:_O(n),hint:te("modelLoad.warningHint")}:n instanceof Km?{level:"warning",title:te("modelLoad.warningTitle"),message:_O(n),hint:te("modelLoad.mobileWarningHint")}:{level:"error",title:te("modelLoad.errorTitle"),message:_O(n),hint:te("modelLoad.errorHint")}}var Mde,ld,Km,Zm=C(()=>{"use strict";Pa();Mde={freecad:"FreeCAD",obj2gltf:"obj2gltf",fbx2gltf:"FBX2glTF",assimp:"mesh",sldprt:"SolidWorks"};ld=class extends Error{constructor(t,i){super(`Converter '${t}' is not registered for ${OR(i)}. Enable the matching converter in plugin settings before loading this format.`);this.converterId=t;this.sourceExt=i;this.name="MissingConverterError"}},Km=class extends Error{constructor(t){super(`Format ${OR(t)} requires local conversion tools that are unavailable on iOS, iPadOS, and Android.`);this.sourceExt=t;this.name="MobileConversionUnavailableError"}}});function yde(n,e,t){return n.converterId!==e?!1:t?n.converterId===t.converterId&&n.converterCacheKey===t.cacheKey:!0}async function Pde(n){if(!n)return!1;try{return await $n(n,es),!0}catch(e){return!1}}async function fK(n){var a,o,l,c,f,h,d;if(n.capability.strategy!=="convert")throw new Error(`Expected convert strategy, got '${n.capability.strategy}'.`);let e=n.capability.converterId,t=(a=n.capability.outputFormat)!=null?a:"glb";if(!e)throw new Error(`Format .${n.sourceExt} does not define a converter id.`);Ig.info("prepare conversion route",{sourcePath:n.sourcePath,sourceExt:n.sourceExt,targetExt:t,converterId:e});let i=n.conversionManager.canConvert(n.sourceExt)?await n.conversionManager.getConverterCacheIdentity(n.sourceExt):void 0,r=(o=n.convertedAssetCache)==null?void 0:o.get(n.sourcePath,n.sourceExt,t);if(r)if(!await Pde(r.outputPath))Ig.warn("conversion cache stale",{sourcePath:n.sourcePath,sourceExt:n.sourceExt,targetExt:t,outputPath:r.outputPath}),(l=n.convertedAssetCache)==null||l.delete(n.sourcePath,n.sourceExt,t);else if(!yde(r,e,i))Ig.warn("conversion cache identity mismatch",{sourcePath:n.sourcePath,sourceExt:n.sourceExt,targetExt:t,cachedConverterId:r.converterId,cachedConverterCacheKey:r.converterCacheKey,currentConverterId:(c=i==null?void 0:i.converterId)!=null?c:e,currentConverterCacheKey:i==null?void 0:i.cacheKey}),(f=n.convertedAssetCache)==null||f.delete(n.sourcePath,n.sourceExt,t);else return Ig.info("conversion cache hit",{sourcePath:n.sourcePath,sourceExt:n.sourceExt,targetExt:t,outputPath:r.outputPath}),{effectivePath:r.outputPath,effectiveExt:r.outputExt,warnings:[...r.warnings,"Using cached conversion output."]};if(!n.conversionManager.canConvert(n.sourceExt))throw new ld(e,n.sourceExt);let s=await n.conversionManager.convert({sourcePath:n.sourcePath,sourceExt:n.sourceExt,targetExt:t});return(d=n.convertedAssetCache)==null||d.set({cacheVersion:2,converterId:e,converterCacheKey:(h=i==null?void 0:i.cacheKey)!=null?h:e,sourcePath:n.sourcePath,sourceExt:n.sourceExt,targetExt:t,outputPath:s.outputPath,outputExt:s.outputExt,warnings:s.warnings,createdAt:Date.now()}),Ig.info("conversion route done",{sourcePath:n.sourcePath,outputPath:s.outputPath,warningCount:s.warnings.length}),{effectivePath:s.outputPath,effectiveExt:s.outputExt,warnings:s.warnings}}var Ig,hK=C(()=>{"use strict";XR();Zn();ir();Zm();Ig=cr("conversion-service")});function Dde(n,e){var t;return!!((t=n.preferConversionExts)!=null&&t.includes(e))}async function cd(n){var a,o;let e=ya((a=n.path.split(".").pop())!=null?a:""),t=YR(e);if(Sc.info("prepare model input",{path:n.path,sourceExt:e}),!t||!t.enabled)throw Sc.warn("unsupported format",{sourceExt:e,path:n.path}),rp(e)?new Error("SPLAT preview is disabled in packaged builds. Local-only .splat support is planned; .spz and .sog remain unavailable until their decoders can be bundled locally."):new Error(`Unsupported format: .${e}`);let i=Dde(n,e);if(t.strategy==="convert"||i&&!!t.converterId){if(gr())throw Sc.warn("conversion unavailable on mobile",{sourceExt:e,path:n.path}),new Km(e);if(!n.absolutePath)throw Sc.error("filesystem path missing for conversion",{sourceExt:e,path:n.path}),new Error(`Format .${e} requires a local filesystem path for conversion, but none was resolved for '${n.path}'.`);if(!n.conversionManager)throw Sc.error("conversion manager missing",{sourceExt:e,path:n.path}),new Error(`Format .${e} requires conversion support, but no conversion manager is available.`);let l=t.strategy==="convert"?t:{...t,strategy:"convert",outputFormat:(o=t.outputFormat)!=null?o:"glb"};if(!l.converterId)throw Sc.error("preferred conversion route missing converter id",{sourceExt:e,path:n.path}),new Error(`Format .${e} is configured to prefer conversion, but no converter id is defined.`);i&&t.strategy==="direct"&&Sc.info("preferred conversion route",{sourceExt:e,path:n.path,converterId:l.converterId});let c=await fK({sourcePath:n.absolutePath,sourceExt:e,capability:l,conversionManager:n.conversionManager,convertedAssetCache:n.convertedAssetCache});return Sc.info("conversion completed",{sourceExt:e,outputExt:c.effectiveExt,outputPath:c.effectivePath,warningCount:c.warnings.length}),{sourcePath:n.path,sourceExt:e,strategy:"convert",effectivePath:c.effectivePath,effectiveExt:c.effectiveExt,warnings:c.warnings}}let s=lK({path:n.path,sourceExt:e});return Sc.debug("direct route",{sourceExt:e,path:n.path,warningCount:s.warnings.length}),{sourcePath:n.path,sourceExt:e,strategy:t.strategy,effectivePath:s.effectivePath,effectiveExt:s.effectiveExt,warnings:s.warnings}}var Sc,NR=C(()=>{"use strict";hl();cK();hK();Zm();Zn();ca();Sc=cr("model-pipeline")});function Mg(n){return{path:n.effectivePath,ext:n.effectiveExt,strategy:n.strategy,sourcePath:n.sourcePath,sourceExt:n.sourceExt,warnings:n.warnings}}var gO=C(()=>{"use strict"});function fd(n){let e=[];return n.preferObj2gltfForObj&&e.push("obj"),n.preferFbx2gltfForFbx&&e.push("fbx"),e}var FR=C(()=>{"use strict"});function Cg(n){return n.replace(/\[\[([^\]|]+)\|([^\]]+)\]\]/g,"$2").replace(/\[\[([^\]]+)\]\]/g,"$1").replace(/\[([^\]]+)\]\([^)]*\)/g,"$1").replace(/[*_~`]+/g,"").replace(/==([^=]+)==/g,"$1").replace(/\s+/g," ").trim()}function Lde(n,e){let t=e.toLowerCase().trim();if(!t)return[];let i=[],r=n.vault.getMarkdownFiles();for(let s of r){let a=n.metadataCache.getFileCache(s);if(a!=null&&a.headings)for(let o of a.headings)o.heading.toLowerCase().includes(t)&&i.push({notePath:s.path,heading:o.heading,level:o.level})}return i.slice(0,15)}function uK(n){return e=>Lde(n,e)}async function Ode(n,e,t){try{let i=n.vault.getAbstractFileByPath(e);if(!(i instanceof dK.TFile))return null;let s=(await n.vault.cachedRead(i)).split(` -`),a=-1,o=0,l=Cg(t);for(let f=0;fOde(n,e,t)}var dK,yg=C(()=>{"use strict";dK=require("obsidian")});function hd(n){let e=n.createDiv({cls:"ai3d-loading-overlay"}),t=e.createDiv({cls:"ai3d-loading-skeleton"});t.createDiv({cls:"ai3d-loading-skeleton-canvas"});let i=t.createDiv({cls:"ai3d-loading-skeleton-meta"});i.createDiv({cls:"ai3d-loading-skeleton-line"}),i.createDiv({cls:"ai3d-loading-skeleton-line is-short"}),e.createDiv({cls:"ai3d-loading-spinner"});let r=e.createDiv({cls:"ai3d-loading-text"}),s="loading.default",a="",o=()=>{r.textContent=s?te(s):a};o();let c=e.createDiv({cls:"ai3d-loading-bar-track"}).createDiv({cls:"ai3d-loading-bar-fill is-indeterminate"}),f=!1,h=nN(()=>{!f&&s&&o()});return{el:e,setPhase(d){s=null,a=d,f||o()},setPhaseKey(d){s=d,f||o()},setProgress(d){f||(d<0?(c.className="ai3d-loading-bar-fill is-indeterminate",c.style.removeProperty("--bar-width")):(c.className="ai3d-loading-bar-fill",c.style.setProperty("--bar-width",`${Math.min(100,Math.max(0,d))}%`)))},hide(){f||(f=!0,h(),e.classList.add("is-hiding"),window.setTimeout(()=>e.remove(),300))}}}var wR=C(()=>{"use strict";Pa()});function Jm(n,e){let t=n.createDiv({cls:"ai3d-inline-empty ai3d-load-feedback-shell"});gr()&&t.classList.add("is-mobile");let i=t.createDiv({cls:`ai3d-load-feedback is-${e.level}`});return i.createDiv({cls:"ai3d-load-feedback-title",text:e.title}),i.createDiv({cls:"ai3d-load-feedback-message",text:e.message}),i.createDiv({cls:"ai3d-load-feedback-hint",text:e.hint}),t}function $m(n,e){var o,l,c,f,h,d,u;if((!e.performanceTier||e.performanceTier==="light")&&!((o=e.resourceWarnings)!=null&&o.length))return null;let t=(l=e.performanceTier)!=null?l:"light",i=((c=e.splatCount)!=null?c:e.triangleCount).toLocaleString(),r=e.splatCount!==void 0?"splats":"triangles",s=n.createDiv({cls:`ai3d-performance-feedback is-${t}`});s.createDiv({cls:"ai3d-performance-feedback-tier",text:(f=e.resourceWarnings)!=null&&f.length?"assets":(h=e.performanceTier)!=null?h:"light"}),s.createDiv({cls:"ai3d-performance-feedback-meta",text:(d=e.resourceWarnings)!=null&&d.length?e.resourceWarnings[0]:`${i} ${r} \xB7 ${e.materialCount.toLocaleString()} materials`});let a=[...(u=e.resourceWarnings)!=null?u:[],...e.performanceHint?[e.performanceHint]:[]];return a.length>0&&(s.title=a.join(` -`)),window.setTimeout(()=>s.classList.add("is-subtle"),4200),s}var BR=C(()=>{"use strict";ca()});function mK(){return typeof performance!="undefined"?performance.now():Date.now()}function Pg(n,e){return`${n.toLocaleString()} ${e}${n===1?"":"s"}`}function Nde(n){return{stage:"reason",durationMs:Math.max(0,Math.round(mK()-n)),status:"success"}}function Fde(n,e){let t=n[0]-e[0],i=n[1]-e[1],r=n[2]-e[2];return Math.sqrt(t*t+i*i+r*r)}function pK(n){var t;let e=(t=n.split(".").pop())==null?void 0:t.trim().toLowerCase();return e==="glb"||e==="gltf"||e==="stl"||e==="obj"||e==="splat"||e==="ply"?e:"glb"}function vO(n){return[n.x,n.y,n.z]}function wde(n,e){return`${Xr(n)||"model"}:part:${e+1}`}function Bde(n){var t;let e=n.name.toLowerCase();return e.includes("wheel")||e.includes("gear")||e.includes("axle")?"mechanical":e.includes("shell")||e.includes("case")||e.includes("cover")||e.includes("housing")?"enclosure":e.includes("button")||e.includes("key")||e.includes("switch")?"control":e.includes("glass")||e.includes("screen")||e.includes("lens")?"surface":(t=n.materialName)!=null&&t.toLowerCase().includes("metal")?"material-driven":"unclassified"}function Ude(n){let e=[`${Pg(n.triangleCount,"triangle")} and ${Pg(n.vertexCount,"vertex")}.`,`Bounding size ${n.boundingSize.x.toFixed(3)} x ${n.boundingSize.y.toFixed(3)} x ${n.boundingSize.z.toFixed(3)}.`];return n.materialName&&e.push(`Uses material "${n.materialName}".`),e}function Vde(n,e){return e.map((t,i)=>({partId:wde(n,i),assetId:n,name:t.name||`Part ${i+1}`,category:Bde(t),meshRefs:[t.name||`mesh-${i+1}`],materialRefs:t.materialName?[t.materialName]:[],bbox:vO(t.boundingSize),center:vO(t.center),triangleCount:t.triangleCount,vertexCount:t.vertexCount,materialName:t.materialName,confidence:t.name?.55:.35,observations:Ude(t),inferredFunctions:[],knowledgeTags:[],reviewed:!1}))}function Gde(n,e,t,i,r){var o;let s=[],a=t==null?void 0:t.summary;a&&s.push({id:`${n}:geometry`,title:"Geometry overview",domain:"geometry",summary:`${Pg(a.meshCount,"mesh")}, ${Pg(a.triangleCount,"triangle")}, ${Pg(a.materialCount,"material slot")}.`,relatedPartIds:i.slice(0,12).map(l=>l.partId),relatedAssetIds:[n],confidence:.72,source:"rule"});for(let l of(o=e==null?void 0:e.annotations)!=null?o:[]){let c=r.find(f=>f.annotationId===l.id);s.push({id:`${n}:annotation:${l.id}`,title:l.label||"Annotation focus",domain:"assembly",summary:[l.headingRef?`Pinned focus area linked to heading "${l.headingRef}".`:"Pinned focus area marked by the user for follow-up analysis.",c!=null&&c.nearestPartName?`Nearest part candidate: ${c.nearestPartName}.`:""].filter(Boolean).join(" "),relatedPartIds:c!=null&&c.nearestPartId?[c.nearestPartId]:[],relatedAssetIds:[n],confidence:.8,source:"user"})}return s}function kde(n,e){var i;return((i=n==null?void 0:n.annotations)!=null?i:[]).map(r=>{let s=r.position,a=null,o=Number.POSITIVE_INFINITY;for(let c of e){if(!c.center)continue;let f=Fde(s,c.center);f({partId:o.partId,name:o.name,notePath:o.notePath,category:o.category,triangleCount:o.triangleCount,materialName:o.materialName,observations:o.observations})),annotationLinks:[...n.annotationLinks],knowledgeNodes:[...n.knowledgeNodes]}}function Hde(n,e){var t,i;return Array.from(new Set([...(t=n==null?void 0:n.resourceWarnings)!=null?t:[],...(i=e==null?void 0:e.resourceWarnings)!=null?i:[]]))}function _K(n){var f,h,d,u,m,_,p,g,v;let e=(f=n.startedAt)!=null?f:mK(),t=(d=(h=n.evidence)==null?void 0:h.summary)!=null?d:n.preview,i=Vde(n.modelPath,(m=(u=n.evidence)==null?void 0:u.parts)!=null?m:[]),r=new Date().toISOString(),s=Hde(n.preview,n.evidence),a=kde(n.profile,i),o=Gde(n.modelPath,n.profile,n.evidence,i,a),l=(_=n.previewImages)!=null?_:[],c=Wde({modelPath:n.modelPath,profile:n.profile,preview:t,parts:i,knowledgeNodes:o,annotationLinks:a,previewImages:l,warnings:s});return{asset:{assetId:n.modelPath,title:Xr(n.modelPath)||n.modelPath,sourcePath:n.modelPath,format:pK(n.modelPath),importedAt:r,updatedAt:r,status:t?"ready":"processing",vertexCount:t==null?void 0:t.vertexCount,triangleCount:t==null?void 0:t.triangleCount,materialCount:t==null?void 0:t.materialCount,boundingBox:t?vO(t.boundingSize):void 0,analysisVersion:ep},parts:i,knowledgeNodes:o,previewImages:l,annotationLinks:a,draftingInput:c,evidence:(p=n.evidence)!=null?p:void 0,warnings:s,pipeline:[{stage:"stats",durationMs:0,status:t?"success":"skipped"},{stage:"split",durationMs:0,status:(v=(g=n.evidence)==null?void 0:g.parts)!=null&&v.length?"success":"skipped"},{stage:"map",durationMs:0,status:a.length>0?"success":"skipped"},Nde(e)]}}var ep,gK=C(()=>{"use strict";ea();ep="local-evidence-v1"});function zde(n){let e=n.trim().replace(/\/+$/,"");if(!e)return"";let t=/^[a-z][a-z\d+\-.]*:\/\//i.test(e)?e:`http://${e}`;try{let i=new URL(t);return i.protocol!=="http:"&&i.protocol!=="https:"||i.search||i.hash?null:i.toString().replace(/\/+$/,"")}catch(i){return null}}function Xde(n){return{...n,evidence:{...n.evidence,previewImages:[]}}}function Yde(n){return{...n,model:{...n.model,summary:void 0},partCandidates:[],annotationLinks:n.annotationLinks.map(e=>({...e,notePath:void 0,position:[0,0,0],nearestPartId:void 0,nearestPartName:void 0,distance:void 0,confidence:Math.min(e.confidence,.25)})),knowledgeNodes:n.knowledgeNodes.map(e=>({...e,summary:"Geometry details were withheld by privacy settings.",relatedPartIds:[]}))}}function Kde(n,e){let t=e;return n.sendPreviewImagesToRemote||(t=Xde(t)),n.sendGeometrySummaryToRemote||(t=Yde(t)),{...t,evidence:{...t.evidence,rawModelIncluded:!1}}}function EK(n,e,t){if(n.analysisMode==="local")return{enabled:!1,reason:"analysisMode=local"};let i=zde(n.serviceBaseUrl);return i===""?{enabled:!1,reason:"serviceBaseUrl is empty"}:i===null?{enabled:!1,reason:"serviceBaseUrl must be a valid http(s) URL"}:n.sendRawModelToRemote?{enabled:!1,reason:"raw model upload is not supported by this draft client"}:e?{enabled:!0,endpoint:`${i}/draft-note`,request:{analysisVersion:t,draftingInput:Kde(n,e)}}:{enabled:!1,reason:"drafting input is unavailable"}}function jde(n){if(!n||typeof n!="object")return null;let e=n,t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let i=Array.isArray(e.sections)?e.sections.flatMap(a=>{if(!a||typeof a!="object")return[];let o=a,l=typeof o.heading=="string"?o.heading.trim():"",c=typeof o.body=="string"?o.body.trim():"";return l&&c?[{heading:l,body:c}]:[]}):void 0,r=Array.isArray(e.suggestedTags)?e.suggestedTags.filter(a=>typeof a=="string"&&a.trim().length>0):void 0,s=Array.isArray(e.warnings)?e.warnings.filter(a=>typeof a=="string"&&a.trim().length>0):void 0;return{title:typeof e.title=="string"?e.title:void 0,summary:t,sections:i,suggestedTags:r,warnings:s,model:typeof e.model=="string"?e.model:void 0}}async function SK(n){if(!n.enabled||!n.endpoint||!n.request)return null;let e=await(0,vK.requestUrl)({url:n.endpoint,method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(n.request)});if(e.status<200||e.status>=300)throw new Error(`Remote draft request failed: HTTP ${e.status}`);return jde(e.json)}var vK,TK=C(()=>{"use strict";vK=require("obsidian")});var CO={};et(CO,{buildKnowledgeIndexContent:()=>NK,buildKnowledgeIndexManagedSection:()=>MO,buildKnowledgeNoteContent:()=>DK,generateKnowledgeNote:()=>Eue,replaceManagedSection:()=>OK});function IK(n){var t;let e=(t=n.split(".").pop())==null?void 0:t.trim().toLowerCase();return e&&e.length>0?e:"unknown"}function AO(n){return n.filter(e=>e.length>0).join(", ")}function EO(n){return Array.from(new Set(n.map(e=>e.trim()).filter(Boolean)))}function bO(n){return n.replace(/\\/g,"/").replace(/^\/+|\/+$/g,"").trim()}function xO(n,e){return n.replace(/[\\/:*?"<>|#[\]^]/g," ").replace(/\s+/g," ").trim().slice(0,80)||e}function RO(n){var e;return(e=n==null?void 0:n.map(t=>t.toFixed(2)).join(", "))!=null?e:"-"}function MK(n){var t;let e=[];if(n.headingRef&&e.push(`heading: ${n.headingRef}`),n.notePath){let i=(t=$s(n.notePath))!=null?t:n.notePath;e.push(`note: [[${n.notePath}|${i}]]`)}return e}function qde(n){return[{axis:"x",value:Math.max(0,n.boundingSize.x)},{axis:"y",value:Math.max(0,n.boundingSize.y)},{axis:"z",value:Math.max(0,n.boundingSize.z)}].sort((e,t)=>t.value-e.value)}function CK(n){let[e,t,i]=qde(n);if(!e||e.value<=0)return"Bounding information is incomplete, so scale and orientation still need manual review.";let r=i.value>0?e.value/i.value:Number.POSITIVE_INFINITY,s=e.value>0?t.value/e.value:0;return(e.value>0?i.value/e.value:0)<=.18&&s>=.45?`The bounding box is strongly planar, with a thin ${i.axis.toUpperCase()} dimension compared with ${e.axis.toUpperCase()}.`:r>=3&&s<=.55?`The model is strongly elongated along ${e.axis.toUpperCase()}, which suggests a directional or axial structure.`:"The overall bounding volume is fairly balanced, so semantic grouping is more likely to come from mesh and material boundaries than from one dominant axis."}function yK(n){if(n.splatCount!==void 0)return`This is a splat-based asset with ${n.splatCount.toLocaleString()} splats; review should focus on capture coverage, density, and viewpoint clarity instead of triangle topology.`;let e=0;return n.triangleCount>=5e5?e+=3:n.triangleCount>=1e5?e+=2:n.triangleCount>=2e4&&(e+=1),n.meshCount>=100?e+=2:n.meshCount>=25&&(e+=1),n.materialCount>=8&&(e+=1),e>=5?"The mesh and material counts point to a high-complexity asset; expect semantic cleanup, regrouping, or naming review before turning it into stable knowledge notes.":e>=3?"The asset sits in a medium-complexity range: it already contains useful structure, but some meshes or materials may still reflect export convenience rather than real-world parts.":"The asset is structurally compact, so a lightweight local pass can usually produce usable first-draft notes without a heavier analysis pipeline."}function Zde(n){var t;let e=(t=n==null?void 0:n.tags)!=null?t:[];return e.length===0?"No knowledge tags are stored yet, so the note should establish the first stable vocabulary for this model.":`Current tags already suggest a working taxonomy: ${AO(e)}.`}function AK(n){var t;let e=(t=n==null?void 0:n.annotations)!=null?t:[];return e.length===0?"No annotation pins are stored yet, so the next useful pass is to mark semantically important regions before splitting the model into part notes.":e.length===1?"There is 1 saved annotation pin, which already gives this report a concrete user-selected focus area.":`There are ${e.length} saved annotation pins, which provide a useful first-pass map of user-relevant regions.`}function Qde(n,e){var r;if(!n)return["Preview statistics were not available when this note was generated, so the next step is to reload the model and regenerate the report.",AK(e)];let t=[`${n.meshCount.toLocaleString()} mesh(es), ${((r=n.splatCount)!=null?r:n.triangleCount).toLocaleString()} ${n.splatCount!==void 0?"splats":"triangles"}, and ${n.materialCount.toLocaleString()} material slot(s) are currently visible in the preview pipeline.`,yK(n),CK(n),AK(e)],i=Zde(e);return i&&t.push(i),t}function Jde(n){var i;let e=(i=n==null?void 0:n.annotations)!=null?i:[];if(e.length===0)return["## Focus Areas","","- No focus areas have been pinned yet.",""];let t=["## Focus Areas",""];for(let r of e){let s=MK(r),a=s.length>0?` (${s.join("; ")})`:"";t.push(`- **${r.label||"Untitled pin"}**${a}`)}return t.push(""),t}function $de(n){var i,r;let e=(i=n==null?void 0:n.annotationLinks)!=null?i:[];if(e.length===0)return["## Annotation Links","","- No annotation-to-part links were produced in this pass.",""];let t=["## Annotation Links","","| Annotation | Nearest Part | Linked Note | Distance | Confidence |","|------------|--------------|-------------|----------|------------|"];for(let s of e){let a=s.notePath?`[[${s.notePath}]]`:"-";t.push(`| ${Hf(s.label)} | ${Hf((r=s.nearestPartName)!=null?r:"-")} | ${Hf(a)} | ${s.distance===void 0?"-":s.distance.toFixed(3)} | ${Math.round(s.confidence*100)}% |`)}return t.push(""),t}function eue(n){var i,r,s,a;let e=((i=n==null?void 0:n.parts)!=null?i:[]).filter(o=>o.notePath);if(e.length===0)return["## Suggested Part Notes","","- No part note drafts were created in this pass.",""];let t=["## Suggested Part Notes",""];for(let o of e.slice(0,RK)){let l=(s=$s((r=o.notePath)!=null?r:""))!=null?s:o.name,c=[(a=o.category)!=null?a:"unclassified",_o(o.triangleCount,"triangle"),o.materialName?`material ${o.materialName}`:""].filter(Boolean).join(", ");t.push(`- [[${o.notePath}|${l}]] - ${o.name} (${c})`)}return t.push(""),t}function _o(n,e){return`${(n!=null?n:0).toLocaleString()} ${e}${n===1?"":"s"}`}function tue(n){return n.length===0?"No per-part evidence was captured yet, so the first useful editing pass is to reload the model and regenerate this note from the workbench.":n.slice(0,6).map((e,t)=>{var r;let i=e.materialName?`, material ${e.materialName}`:"";return`${t+1}. ${e.name} (${(r=e.category)!=null?r:"unclassified"}, ${_o(e.triangleCount,"triangle")}${i})`}).join(` -`)}function PK(n){var _,p,g,v,x,A,E,T,R;let e=IK(n.sourcePath).toUpperCase(),t=n.preview,i=[...(p=(_=n.analysis)==null?void 0:_.parts)!=null?p:[]].sort((I,y)=>{var M,D;return((M=y.triangleCount)!=null?M:0)-((D=I.triangleCount)!=null?D:0)}),r=(v=(g=n.profile)==null?void 0:g.annotations)!=null?v:[],s=(A=(x=n.analysis)==null?void 0:x.annotationLinks)!=null?A:[],a=EO(i.map(I=>{var y;return(y=I.category)!=null?y:"unclassified"})).slice(0,6),o=EO(i.flatMap(I=>I.materialName?[I.materialName]:[])).slice(0,6),l=tue(i),c=t?CK(t):"Geometry statistics are not available yet, so this draft should stay provisional.",f=t?yK(t):"Reload the preview to capture mesh, triangle, vertex, and material evidence.",h=(E=n.profile)==null?void 0:E.notes.trim(),d=t?`${n.baseName} is a ${e} asset with ${_o(t.meshCount,"mesh")}, ${_o(t.triangleCount,"triangle")}, ${_o(t.vertexCount,"vertex")}, and ${_o(t.materialCount,"material slot")}.`:`${n.baseName} is a ${e} asset that still needs a refreshed preview pass before its geometry can be summarized confidently.`,u=r.length>0?r.map(I=>{let y=s.find(O=>O.annotationId===I.id),M=y!=null&&y.nearestPartName?` Nearest captured part: ${y.nearestPartName}.`:"",D=I.headingRef?` Linked heading: ${I.headingRef}.`:"";return`- ${I.label||"Untitled pin"}.${M}${D}`}).join(` -`):"- No pins are saved yet. Add pins for the regions that should become standalone notes, questions, or review checkpoints.",m=[i.length>0?"Rename the strongest part candidates so their mesh names match real semantic parts.":"Regenerate after the model preview has captured per-part evidence.",r.length>0?"Turn each saved pin into a short linked note or heading-level review item.":"Place at least one pin on the most important region before treating this as a finished note.","Review scale, orientation, materials, and whether mesh boundaries represent real assembly boundaries."];return{title:`${n.baseName} local knowledge draft`,summary:[d,c,h?`User notes add this context: ${h}`:"No user notes are stored yet, so the draft stays grounded in renderer evidence and saved pins."].join(" "),sections:[{heading:"Evidence-backed description",body:[f,a.length>0?`Detected part categories: ${AO(a)}.`:"No part categories were inferred yet.",o.length>0?`Visible materials include ${AO(o)}.`:"No material names were captured from the renderer evidence."].join(" ")},{heading:"Candidate structure",body:l},{heading:"Focus areas",body:u},{heading:"Suggested note shape",body:[`Start with a short purpose paragraph for ${n.baseName}.`,"Then split the note into geometry evidence, meaningful part candidates, saved focus areas, and unresolved review questions.","Only promote a mesh into a standalone part note after a human confirms its function or assembly role."].join(" ")}],suggestedTags:EO([...(R=(T=n.profile)==null?void 0:T.tags)!=null?R:[],`format/${e.toLowerCase()}`,...a.map(I=>`part/${I}`)]).slice(0,12),nextActions:m,generatedAt:new Date().toISOString()}}function iue(n){var i,r;let e=(r=(i=n.analysis)==null?void 0:i.localDraft)!=null?r:PK(n),t=["## Local Draft Metadata","",`- Generated at: ${e.generatedAt}`,`- Sections: ${e.sections.length.toLocaleString()}`];return e.suggestedTags.length>0&&t.push("Suggested tags:","",...e.suggestedTags.map(s=>`- ${s}`),""),e.nextActions.length>0&&t.push("Next actions:","",...e.nextActions.map(s=>`- ${s}`),""),t}function bs(n){return JSON.stringify(n)}function rue(n){return n!=null&&n.draftingInput?["## AI Drafting Input","","- Grounded drafting input is available in the sidecar JSON under `draftingInput`.",`- Part candidates included: ${n.draftingInput.partCandidates.length.toLocaleString()}`,`- Annotation links included: ${n.draftingInput.annotationLinks.length.toLocaleString()}`,"- Raw model included: false",""]:["## AI Drafting Input","","- No drafting input was prepared in this pass.",""]}function nue(n){var i,r,s,a;let e=n==null?void 0:n.remoteDraft;if(!e)return["## Remote Draft","","- No remote draft was requested or returned for this pass.",""];let t=["## Remote Draft","",e.title?`### ${e.title}`:"### Draft Summary","",e.summary,""];for(let o of(i=e.sections)!=null?i:[])t.push(`### ${o.heading}`,"",o.body,"");(r=e.suggestedTags)!=null&&r.length&&t.push("Suggested tags:","",...e.suggestedTags.map(o=>`- ${o}`),"");for(let o of(s=e.warnings)!=null?s:[])t.push(`- Remote warning: ${o}`);return(a=e.warnings)!=null&&a.length&&t.push(""),t}function sue(n){var i,r;let e=(i=n==null?void 0:n.remoteDraft)!=null?i:n==null?void 0:n.localDraft;if(!e)return["## Editable Draft","","- No draft body was produced in this pass.",""];let t=["## Editable Draft","",n!=null&&n.remoteDraft?"- Source: optional remote draft, grounded by the local evidence sidecar.":"- Source: local evidence draft, generated without a remote service.","",e.summary,""];for(let s of(r=e.sections)!=null?r:[])t.push(`### ${s.heading}`,"",s.body,"");return t}function aue(n){var t;let e=(t=n==null?void 0:n.previewImages)!=null?t:[];return e.length===0?["## Evidence Snapshots","","- No preview snapshot was captured for this generation pass.",""]:["## Evidence Snapshots","",...e.map(i=>`![[${i}]]`),""]}function oue(n){var i,r,s,a;let e=(i=n==null?void 0:n.parts)!=null?i:[];if(e.length===0)return["## Part Candidates","","- No per-mesh evidence was available. Reload the model in the workbench and regenerate the note to capture part candidates.",""];let t=["## Part Candidates","","| # | Part | Part Note | Category | Triangles | Material | Center | Evidence |","|---|------|-----------|----------|-----------|----------|--------|----------|"];for(let[o,l]of e.slice(0,32).entries()){let c=RO(l.center),f=l.observations.slice(0,2).join(" "),h=l.notePath?`[[${l.notePath}]]`:"-";t.push(`| ${o+1} | ${Hf(l.name)} | ${Hf(h)} | ${Hf((r=l.category)!=null?r:"unclassified")} | ${((s=l.triangleCount)!=null?s:0).toLocaleString()} | ${Hf((a=l.materialName)!=null?a:"-")} | ${c} | ${Hf(f)} |`)}return e.length>32&&t.push(`| ... | ${e.length-32} more candidate parts omitted from this note | - | - | - | - | - | See sidecar JSON |`),t.push(""),t}function lue(n){var i;let e=(i=n==null?void 0:n.knowledgeNodes)!=null?i:[];if(e.length===0)return["## Knowledge Nodes","","- No knowledge nodes were produced in this pass.",""];let t=["## Knowledge Nodes",""];for(let r of e)t.push(`- **${r.title}** (${r.domain}, ${Math.round(r.confidence*100)}%, ${r.source}): ${r.summary}`);return t.push(""),t}function cue(n,e){var i,r;let t=["## Evidence Health","",`- Analysis version: ${ep}`,e?`- Sidecar: [[${e}|Analysis JSON]]`:"- Sidecar: not written",n!=null&&n.knowledgeIndexPath?`- Knowledge index: [[${n.knowledgeIndexPath}|Model index]]`:"- Knowledge index: not written"];for(let s of(i=n==null?void 0:n.warnings)!=null?i:[])t.push(`- Warning: ${s}`);return((r=n==null?void 0:n.warnings)!=null?r:[]).length===0&&t.push("- Warnings: none"),t.push(""),t}function fue(n,e){var r;let t=(r=e==null?void 0:e.annotations)!=null?r:[],i=["## Draft Knowledge Points",""];if(n?(i.push(`- Geometry overview: explain how ${n.meshCount.toLocaleString()} mesh(es) and ${n.materialCount.toLocaleString()} material slot(s) map to real semantic parts instead of export-only fragments.`),n.splatCount!==void 0?i.push(`- Capture quality: review whether the ${n.splatCount.toLocaleString()} splats preserve enough silhouette and depth detail for note-taking from multiple angles.`):i.push(`- Structural density: verify whether ${(n.triangleCount/Math.max(n.meshCount,1)).toLocaleString(void 0,{maximumFractionDigits:0})} average triangles per mesh reflects deliberate detail or accidental over-segmentation.`)):i.push("- Geometry overview: reload the model and capture preview statistics before turning this into a stable knowledge note."),t.length>0)for(let s of t.slice(0,8)){let a=MK(s),o=a.length>0?` (${a.join("; ")})`:"";i.push(`- **${s.label||"Untitled pin"}**${o}: describe what this region does, why it matters, and whether it deserves its own linked part note.`)}else i.push("- Focus mapping: add pins for the regions that should become standalone part notes or review checkpoints.");return i.push("- Review pass: confirm scale, orientation, and whether material boundaries reflect actual function, assembly, or simply renderer setup."),i.push(""),i}function DK(n){var c,f,h,d;let e=n.profile,t=n.preview,i=n.analysis,r=IK(n.sourcePath),s=(c=e==null?void 0:e.tags)!=null?c:[],a=(f=e==null?void 0:e.annotations)!=null?f:[],o=(h=i==null?void 0:i.previewImages)!=null?h:[];return[["---",`source_model: ${bs(n.sourcePath)}`,`format: ${r}`,"status: ready","analysis_mode: local",`analysis_version: ${ep}`,`report_note_path: ${bs(n.notePath)}`,...n.analysisSidecarPath?[`analysis_sidecar_path: ${bs(n.analysisSidecarPath)}`]:[],...n.knowledgeIndexPath?[`knowledge_index_path: ${bs(n.knowledgeIndexPath)}`]:[],`annotation_count: ${a.length}`,`updated_at: ${new Date().toISOString()}`,...o.length>0?["preview_images:",...o.map(u=>` - ${bs(u)}`)]:[],...s.length>0?["knowledge_tags:",...s.map(u=>` - ${bs(u)}`)]:[],"---"].join(` -`),"",`# ${n.baseName}`,"","## Summary","",...t?[...l1(t,{decimals:2}),""]:["(No preview data available)",""],...sue(i),...iue(n),...n.knowledgeIndexPath?["## Knowledge Index","",`- [[${n.knowledgeIndexPath}|Open model knowledge index]]`,""]:[],"## Local Observations","",...Qde(t,e).map(u=>`- ${u}`),"",...cue(i,n.analysisSidecarPath),...aue(i),...Jde(e),...$de(i),...eue(i),...oue(i),...lue(i),...rue(i),...nue(i),...fue(t,e),"## Review Notes","",(d=e==null?void 0:e.notes)!=null&&d.trim()?e.notes.trim():"-",""].join(` -`)}function hue(n){let e=new Date().toISOString();return{tags:Array.isArray(n==null?void 0:n.tags)?n.tags:[],notes:typeof(n==null?void 0:n.notes)=="string"?n.notes:"",annotations:Array.isArray(n==null?void 0:n.annotations)?n.annotations:[],analysisVersion:typeof(n==null?void 0:n.analysisVersion)=="string"?n.analysisVersion:void 0,reportNotePath:typeof(n==null?void 0:n.reportNotePath)=="string"?n.reportNotePath:void 0,analysisSidecarPath:typeof(n==null?void 0:n.analysisSidecarPath)=="string"?n.analysisSidecarPath:void 0,knowledgeIndexPath:typeof(n==null?void 0:n.knowledgeIndexPath)=="string"?n.knowledgeIndexPath:void 0,previewImagePaths:Array.isArray(n==null?void 0:n.previewImagePaths)?n.previewImagePaths.filter(t=>typeof t=="string"):void 0,createdAt:typeof(n==null?void 0:n.createdAt)=="string"?n.createdAt:e,updatedAt:typeof(n==null?void 0:n.updatedAt)=="string"?n.updatedAt:e}}function Hf(n){return n.replace(/\|/g,"\\|").replace(/\r?\n/g," ")}function due(n){let[,e=""]=n.split(",",2),t=atob(e),i=new Uint8Array(t.length);for(let r=0;r{})}async function LK(n,e,t){let i=n.vault.getAbstractFileByPath(e);if(i instanceof zf.TFile)return i;try{return await n.vault.create(e,t)}catch(r){let s=n.vault.getAbstractFileByPath(e);return s instanceof zf.TFile?s:null}}async function xK(n,e,t){let i=n.vault.getAbstractFileByPath(e);if(i instanceof zf.TFile)return await n.vault.modify(i,t),i;try{return await n.vault.create(e,t)}catch(r){let s=n.vault.getAbstractFileByPath(e);if(s instanceof zf.TFile)return await n.vault.modify(s,t),s}return null}async function uue(n,e,t,i){var s;let r=(s=e==null?void 0:e.captureSnapshot)==null?void 0:s.call(e);if(!(r!=null&&r.startsWith("data:image/png;base64,")))return{paths:[]};try{await IO(n,t);let a=`${t}/${i}_evidence_${Date.now()}.png`;return await n.vault.createBinary(a,due(r)),{paths:[a]}}catch(a){let o=a instanceof Error?a.message:String(a);return{paths:[],warning:`Evidence snapshot failed: ${o}`}}}function mue(n){var t;let e=new Set(((t=n.annotationLinks)!=null?t:[]).flatMap(i=>i.nearestPartId?[i.nearestPartId]:[]));return new Set([...n.parts].sort((i,r)=>{var o,l;let s=e.has(i.partId)?1:0,a=e.has(r.partId)?1:0;return s!==a?a-s:((o=r.triangleCount)!=null?o:0)-((l=i.triangleCount)!=null?l:0)}).slice(0,RK).map(i=>i.partId))}function pue(n,e,t,i){let r=bO(n)||"Parts/3D Components",s=xO(e,"model"),a=xO(t.name,`Part ${i+1}`);return`${r}/${s}/${String(i+1).padStart(2,"0")} ${a}.md`}function _ue(n){var i,r,s,a,o,l;let e=((i=n.analysis.annotationLinks)!=null?i:[]).filter(c=>c.nearestPartId===n.part.partId);return[["---",`source_model: ${bs(n.sourcePath)}`,`parent_report: ${bs(n.notePath)}`,`part_id: ${bs(n.part.partId)}`,`asset_id: ${bs(n.part.assetId)}`,`category: ${bs((r=n.part.category)!=null?r:"unclassified")}`,"status: draft","generated_by: ai-model-workbench",`updated_at: ${new Date().toISOString()}`,"---"].join(` -`),"",`# ${n.part.name}`,"","## Evidence","",`- Source model: [[${n.sourcePath}|${n.baseName}]]`,`- Parent report: [[${n.notePath}|${n.baseName} Report]]`,`- Category: ${(s=n.part.category)!=null?s:"unclassified"}`,`- Triangles: ${((a=n.part.triangleCount)!=null?a:0).toLocaleString()}`,`- Vertices: ${((o=n.part.vertexCount)!=null?o:0).toLocaleString()}`,`- Material: ${(l=n.part.materialName)!=null?l:"-"}`,`- Bounding size: ${RO(n.part.bbox)}`,`- Center: ${RO(n.part.center)}`,"","## Renderer Observations","",...n.part.observations.length>0?n.part.observations.map(c=>`- ${c}`):["- No renderer observations were captured for this part."],"","## Linked Focus Areas","",...e.length>0?e.map(c=>`- ${c.label} (${Math.round(c.confidence*100)}% confidence, distance ${c.distance===void 0?"-":c.distance.toFixed(3)})`):["- No saved annotation pin is linked to this part yet."],"","## Working Notes","","- ",""].join(` -`)}async function gue(n){var a;let e=mue(n.analysis);if(e.size===0)return n.analysis.pipeline.push({stage:"partNotes",durationMs:0,status:"skipped"}),[];let t=[],i=typeof performance!="undefined"?performance.now():Date.now(),s=`${bO(n.partFolder)||"Parts/3D Components"}/${xO(n.baseName,"model")}`;await IO(n.app,s);for(let[o,l]of n.analysis.parts.entries()){if(!e.has(l.partId))continue;let c=pue(n.partFolder,n.baseName,l,o),f={...l,notePath:c},h=_ue({baseName:n.baseName,notePath:n.notePath,sourcePath:n.sourcePath,part:f,analysis:n.analysis}),d=await LK(n.app,c,h);d&&(l.notePath=d.path,t.push(d.path))}n.analysis.partNotePaths=t;for(let o of(a=n.analysis.annotationLinks)!=null?a:[]){let l=n.analysis.parts.find(c=>c.partId===o.nearestPartId);l!=null&&l.notePath&&!o.notePath&&(o.notePath=l.notePath)}return n.analysis.pipeline.push({stage:"partNotes",durationMs:Math.max(0,Math.round((typeof performance!="undefined"?performance.now():Date.now())-i)),status:t.length>0?"success":"skipped"}),t}function MO(n){var r,s,a,o,l,c;let e=((r=n.analysis.parts)!=null?r:[]).filter(f=>f.notePath),t=(a=(s=n.profile)==null?void 0:s.annotations)!=null?a:[],i=(l=(o=n.analysis.localDraft)==null?void 0:o.nextActions)!=null?l:[];return[bK,"","## Entry Points","",`- Model report: [[${n.notePath}|${n.baseName} Report]]`,`- Analysis sidecar: [[${n.analysisSidecarPath}|Analysis JSON]]`,`- Source model: [[${n.sourcePath}|${n.baseName}]]`,"","## Model Snapshot","",n.preview?`- ${_o(n.preview.meshCount,"mesh")}, ${_o(n.preview.triangleCount,"triangle")}, ${_o(n.preview.vertexCount,"vertex")}, ${_o(n.preview.materialCount,"material slot")}.`:"- No preview statistics were available for this index.",`- Evidence images: ${((c=n.analysis.previewImages)!=null?c:[]).length.toLocaleString()}`,`- Part drafts: ${e.length.toLocaleString()}`,`- Saved annotations: ${t.length.toLocaleString()}`,"","## Part Notes","",...e.length>0?e.map(f=>{var h;return`- [[${f.notePath}|${f.name}]] - ${(h=f.category)!=null?h:"unclassified"}, ${_o(f.triangleCount,"triangle")}`}):["- No part note drafts were created in this pass."],"","## Evidence Images","",...n.analysis.previewImages.length>0?n.analysis.previewImages.map(f=>`- ![[${f}]]`):["- No evidence image was captured in this pass."],"","## Focus Areas","",...t.length>0?t.map(f=>{var u;let h=(u=n.analysis.annotationLinks)==null?void 0:u.find(m=>m.annotationId===f.id),d=h!=null&&h.notePath?` -> [[${h.notePath}|part note]]`:"";return`- ${f.label||"Untitled pin"}${d}`}):["- No saved annotation pins yet."],"","## Next Actions","",...i.length?i.map(f=>`- ${f}`):["- Review generated part drafts and promote confirmed components into stable notes."],"",TO,""].join(` -`)}function OK(n,e){let t=n.indexOf(bK),i=n.indexOf(TO);if(t>=0&&i>t){let r=n.slice(0,t).replace(/\s+$/,""),s=n.slice(i+TO.length).replace(/^\s+/,"");return[r,e.trim(),s].filter(Boolean).join(` +}`;T.ShadersStore[aO]||(T.ShadersStore[aO]=V9);Zhe={name:aO,shader:V9}});var W9,G9,vR,Qhe,$he,k9,cO,H9=C(()=>{ps();Ui();im();Ge();to();Yu();VC();Pn();Ty();zt();hi();Lh();of();dy();Wo();Pt();Object.defineProperty(Qt.prototype,"forceShowBoundingBoxes",{get:function(){return this._forceShowBoundingBoxes||!1},set:function(n){this._forceShowBoundingBoxes=n,n&&this.getBoundingBoxRenderer()},enumerable:!0,configurable:!0});Qt.prototype.getBoundingBoxRenderer=function(){return this._boundingBoxRenderer||(this._boundingBoxRenderer=new cO(this)),this._boundingBoxRenderer};Object.defineProperty(pr.prototype,"showBoundingBox",{get:function(){return this._showBoundingBox||!1},set:function(n){this._showBoundingBox=n,n&&this.getScene().getBoundingBoxRenderer()},enumerable:!0,configurable:!0});W9=K.Identity(),G9=new K,vR=new b,Qhe=new b,$he=W9.asArray(),k9=new df(vR,vR),cO=class{get shaderLanguage(){return this._shaderLanguage}constructor(e){this.name=Qe.NAME_BOUNDINGBOXRENDERER,this.frontColor=new Te(1,1,1),this.backColor=new Te(.1,.1,.1),this.showBackLines=!0,this.onBeforeBoxRenderingObservable=new te,this.onAfterBoxRenderingObservable=new te,this.onResourcesReadyObservable=new te,this.enabled=!0,this._shaderLanguage=0,this.renderList=new wi(32),this._vertexBuffers={},this._fillIndexBuffer=null,this._fillIndexData=null,this._matrixBuffer=null,this._matrices=null,this._useInstances=!1,this._drawWrapperFront=null,this._drawWrapperBack=null,this.scene=e,this.scene.getEngine().isWebGPU&&(this._shaderLanguage=1),e._addComponent(this),this._uniformBufferFront=new or(this.scene.getEngine(),void 0,void 0,"BoundingBoxRendererFront",!0),this._buildUniformLayout(this._uniformBufferFront),this._uniformBufferBack=new or(this.scene.getEngine(),void 0,void 0,"BoundingBoxRendererBack",!0),this._buildUniformLayout(this._uniformBufferBack)}_buildUniformLayout(e){e.addUniform("color",4),e.addUniform("world",16),e.addUniform("viewProjection",16),e.addUniform("viewProjectionR",16),e.create()}register(){this.scene._beforeEvaluateActiveMeshStage.registerStep(Qe.STEP_BEFOREEVALUATEACTIVEMESH_BOUNDINGBOXRENDERER,this,this.reset),this.scene._preActiveMeshStage.registerStep(Qe.STEP_PREACTIVEMESH_BOUNDINGBOXRENDERER,this,this._preActiveMesh),this.scene._evaluateSubMeshStage.registerStep(Qe.STEP_EVALUATESUBMESH_BOUNDINGBOXRENDERER,this,this._evaluateSubMesh),this.scene._afterRenderingGroupDrawStage.registerStep(Qe.STEP_AFTERRENDERINGGROUPDRAW_BOUNDINGBOXRENDERER,this,this.render)}async whenReadyAsync(e=16,t=3e4){return this._prepareResources(),await new Promise(i=>{ko(()=>this._colorShader.isReady(),()=>{i()},(r,s)=>{s?(J.Error("BoundingBoxRenderer: Timeout while waiting for the renderer to be ready."),r&&J.Error(r)):(J.Error("BoundingBoxRenderer: An unexpected error occurred while waiting for the renderer to be ready."),r&&(J.Error(r),r.stack&&J.Error(r.stack)))},e,t)})}_evaluateSubMesh(e,t){if(e.showSubMeshesBoundingBox){let i=t.getBoundingInfo();i!=null&&(i.boundingBox._tag=e.renderingGroupId,this.renderList.push(i.boundingBox))}}_preActiveMesh(e){if(e.showBoundingBox||this.scene.forceShowBoundingBoxes){let t=e.getBoundingInfo();t.boundingBox._tag=e.renderingGroupId,this.renderList.push(t.boundingBox)}}_prepareResources(){if(this._colorShader)return;this._colorShader=new mo("colorShader",this.scene,"boundingBoxRenderer",{attributes:[L.PositionKind,"world0","world1","world2","world3"],uniforms:["world","viewProjection","viewProjectionR","color"],uniformBuffers:["BoundingBoxRenderer"],shaderLanguage:this._shaderLanguage,extraInitializationsAsync:async()=>{this._shaderLanguage===1?await Promise.all([Promise.resolve().then(()=>($L(),QL)),Promise.resolve().then(()=>(tO(),eO))]):await Promise.all([Promise.resolve().then(()=>(sO(),nO)),Promise.resolve().then(()=>(lO(),oO))])}},!1),this._colorShader.setDefine("INSTANCES",this._useInstances),this._colorShader.doNotSerialize=!0,this._colorShader.reservedDataStore={hidden:!0},this._colorShaderForOcclusionQuery=new mo("colorShaderOccQuery",this.scene,"boundingBoxRenderer",{attributes:[L.PositionKind],uniforms:["world","viewProjection","viewProjectionR","color"],uniformBuffers:["BoundingBoxRenderer"],shaderLanguage:this._shaderLanguage,extraInitializationsAsync:async()=>{this._shaderLanguage===1?await Promise.all([Promise.resolve().then(()=>($L(),QL)),Promise.resolve().then(()=>(tO(),eO))]):await Promise.all([Promise.resolve().then(()=>(sO(),nO)),Promise.resolve().then(()=>(lO(),oO))])}},!0),this._colorShaderForOcclusionQuery.doNotSerialize=!0,this._colorShaderForOcclusionQuery.reservedDataStore={hidden:!0};let e=this.scene.getEngine(),t=gA({size:1});this._vertexBuffers[L.PositionKind]=new L(e,t.positions,L.PositionKind,!1),this._createIndexBuffer(),this._fillIndexData=t.indices,this.onResourcesReadyObservable.notifyObservers(this)}_createIndexBuffer(){let e=this.scene.getEngine();this._indexBuffer=e.createIndexBuffer([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,7,1,6,2,5,3,4])}rebuild(){let e=this._vertexBuffers[L.PositionKind];e&&e._rebuild(),this._createIndexBuffer(),this._matrixBuffer&&this._matrixBuffer._rebuild()}reset(){this.renderList.reset()}render(e){var r,s;if(this.renderList.length===0||!this.enabled)return;if(this._useInstances){this._renderInstanced(e);return}if(this._prepareResources(),!this._colorShader.isReady())return;let t=this.scene.getEngine();t.setDepthWrite(!1);let i=this.scene.getTransformMatrix();for(let a=0;ar*2)&&(i=new Float32Array(r),this._matrices=i),this.onBeforeBoxRenderingObservable.notifyObservers(k9);let s=0,a=this.scene.floatingOriginOffset;for(let g=0;g{"use strict";Ge();gP();zt();ro();H9();ys();II();zf=class zf{constructor(e,t,i){this.occlusionDirection=b.Zero();this.occlusionRay=new Hr(b.Zero(),b.Zero(),1);this.lastOccluded=!1;this.selected=null;this.partPointerActive=!1;this.activePointerId=null;this.scene=e,this.camera=t,this.meshes=i,this.setBoundingBoxColor(zf.BBOX_VISIBLE)}getParts(){return this.meshes}getPartId(e){return e.uniqueId}isDisposed(e){return e.isDisposed()}captureTransform(e){var t,i;return{parent:e.parent,position:e.position.clone(),rotation:e.rotation.clone(),rotationQuaternion:(i=(t=e.rotationQuaternion)==null?void 0:t.clone())!=null?i:null,scaling:e.scaling.clone()}}restoreTransform(e,t){var i,r;e.setParent(t.parent),e.position.copyFrom(t.position),e.rotation.copyFrom(t.rotation),e.rotationQuaternion=(r=(i=t.rotationQuaternion)==null?void 0:i.clone())!=null?r:null,e.scaling.copyFrom(t.scaling),e.computeWorldMatrix(!0)}subscribe(e){let t=this.scene.getEngine().getRenderingCanvas();t==null||t.classList.add("ai3d-disassembly-active");let i=this.scene.onPointerObservable.add(s=>{var o,l,c,f;let a=s.event;if(a.isPrimary!==!1){if(s.type===it.POINTERDOWN){if(a.button!==0)return;let h=(l=(o=s.pickInfo)==null?void 0:o.pickedMesh)!=null?l:null;if(this.partPointerActive=!!this.resolvePart(h),this.partPointerActive){a.preventDefault(),a.stopPropagation(),this.activePointerId=a.pointerId;try{(c=t==null?void 0:t.setPointerCapture)==null||c.call(t,a.pointerId)}catch(d){}this.camera.detachControl()}e.onPointerDown(h,a)}else if(s.type===it.POINTERMOVE){if(this.activePointerId!==null&&a.pointerId!==this.activePointerId)return;this.partPointerActive&&(a.preventDefault(),a.stopPropagation()),e.onPointerMove(a)}else if(s.type===it.POINTERUP){if(this.activePointerId!==null&&a.pointerId!==this.activePointerId)return;if(this.partPointerActive&&(a.preventDefault(),a.stopPropagation()),e.onPointerUp(a),this.activePointerId!==null&&((f=t==null?void 0:t.hasPointerCapture)!=null&&f.call(t,this.activePointerId)))try{t.releasePointerCapture(this.activePointerId)}catch(h){}this.partPointerActive=!1,this.activePointerId=null,this.camera.attachControl(this.scene.getEngine().getRenderingCanvas(),!0)}}}),r=this.scene.onAfterRenderCameraObservable.add(s=>{s===this.camera&&e.onRender()});return()=>{var s;if(this.scene.onPointerObservable.remove(i),this.scene.onAfterRenderCameraObservable.remove(r),t==null||t.classList.remove("ai3d-disassembly-active","ai3d-disassembly-dragging"),this.activePointerId!==null&&((s=t==null?void 0:t.hasPointerCapture)!=null&&s.call(t,this.activePointerId)))try{t.releasePointerCapture(this.activePointerId)}catch(a){}this.partPointerActive=!1,this.activePointerId=null,this.camera.attachControl(t,!0)}}resolvePart(e){if(!e||typeof e!="object")return null;if(this.isMeshInSet(e))return e;let t=e.parent;return t&&"uniqueId"in t&&this.isMeshInSet(t)?t:null}setSelected(e){this.selected&&!this.selected.isDisposed()&&(this.selected.showBoundingBox=!1),this.selected=e,this.lastOccluded=!1,this.setBoundingBoxColor(zf.BBOX_VISIBLE),this.selected&&!this.selected.isDisposed()&&(this.selected.showBoundingBox=!0)}beginDrag(e,t){var o,l,c;let i=this.getPointOnDragPlane(e,t);if(!i)return null;t.preventDefault(),t.stopPropagation(),(o=this.scene.getEngine().getRenderingCanvas())==null||o.classList.add("ai3d-disassembly-dragging"),e.setParent(null),e.computeWorldMatrix(!0),t.shiftKey&&!e.rotationQuaternion&&(e.rotationQuaternion=ze.FromEulerVector(e.rotation),e.rotation.set(0,0,0));let r=e.getBoundingInfo().boundingBox.centerWorld.clone(),s=Md(Ht(i),Ht(this.camera.getForwardRay().direction));if(!s)return null;let a={mesh:e,mode:t.shiftKey?"rotate":"move",plane:s,startPoint:i,startPosition:e.position.clone(),startRotationQuaternion:(c=(l=e.rotationQuaternion)==null?void 0:l.clone())!=null?c:null,pivot:r,pointerX:t.clientX,pointerY:t.clientY};return this.camera.detachControl(),a}updateDrag(e,t){if(t.preventDefault(),t.stopPropagation(),e.mode==="rotate"){this.updateRotation(e,t);return}let i=this.getRayPlanePoint(t,e.plane);if(!i)return;let r=i.subtract(e.startPoint);e.mesh.position=e.startPosition.add(r),e.mesh.computeWorldMatrix(!0)}endDrag(e){var t;(t=this.scene.getEngine().getRenderingCanvas())==null||t.classList.remove("ai3d-disassembly-dragging"),this.camera.attachControl(this.scene.getEngine().getRenderingCanvas(),!0)}updateSelectionOcclusion(e){let t=e.getBoundingInfo().boundingBox.centerWorld,i=this.camera.position,r=yc(Ht(i),Ht(t));if(!r)return;let s=this.occlusionDirection;s.set(r.direction.x,r.direction.y,r.direction.z),this.occlusionRay.origin=i,this.occlusionRay.direction=s,this.occlusionRay.length=r.distance;let a=this.scene.pickWithRay(this.occlusionRay),o=!!(a!=null&&a.hit)&&Cc(a.distance,r.distance,r.epsilon);o!==this.lastOccluded&&(this.lastOccluded=o,this.setBoundingBoxColor(o?zf.BBOX_OCCLUDED:zf.BBOX_VISIBLE))}isMeshInSet(e){return this.meshes.includes(e)}setBoundingBoxColor(e){var i,r;let t=(r=(i=this.scene).getBoundingBoxRenderer)==null?void 0:r.call(i);t&&(t.frontColor=e,t.backColor=e)}updateRotation(e,t){if(!e.startRotationQuaternion)return;let i=t.clientX-e.pointerX,r=t.clientY-e.pointerY,s=Zg({startPosition:Ht(e.startPosition),pivot:Ht(e.pivot),startRotationQuaternion:qg(e.startRotationQuaternion),yawAxis:Ht(this.camera.getDirection(b.Up()).normalize()),pitchAxis:Ht(this.camera.getDirection(b.Right()).normalize()),deltaX:i,deltaY:r,sensitivity:.01});s&&(e.mesh.position=new b(s.position.x,s.position.y,s.position.z),e.mesh.rotationQuaternion=new ze(s.rotationQuaternion.x,s.rotationQuaternion.y,s.rotationQuaternion.z,s.rotationQuaternion.w),e.mesh.rotation.set(0,0,0),e.mesh.computeWorldMatrix(!0))}getPointOnDragPlane(e,t){var s;let i=e.getBoundingInfo().boundingBox.centerWorld.clone(),r=Md(Ht(i),Ht(this.camera.getForwardRay().direction));return r&&(s=this.getRayPlanePoint(t,r))!=null?s:i}getRayPlanePoint(e,t){let i=this.scene.getEngine().getRenderingCanvas();if(!i)return null;let r=i.getBoundingClientRect(),s=e.clientX-r.left,a=e.clientY-r.top,o=this.scene.createPickingRay(s,a,K.Identity(),this.camera),l=jg({origin:Ht(o.origin),direction:Ht(o.direction)},t);return l?new b(l.x,l.y,l.z):null}};zf.BBOX_VISIBLE=new Te(.25,.7,1),zf.BBOX_OCCLUDED=new Te(.1,.25,.4);fO=zf});var K9={};$e(K9,{BabylonModelPreview:()=>TR,createBabylonModelPreview:()=>lde});function ide(n){let e=n.getClassName();return e==="DirectionalLight"||e==="PointLight"||e==="SpotLight"}function hO(n){return n.getClassName()==="GaussianSplattingMesh"}function rde(n){return!!n&&typeof n=="object"&&"getBoundingInfo"in n}function SR(n){return new b(n.x,n.y,n.z)}function nde(n){let e=n.replace(/\s+#.*$/,"").trim();if(e.startsWith('"')){let t=e.indexOf('"',1);if(t>1)return e.slice(1,t)}return e}function sde(n){let e=n.trim().split(/\s+/),t=e.findIndex(i=>!i.startsWith("-")&&!/^[-+]?\d*\.?\d+$/.test(i));return e.slice(Math.max(0,t)).join(" ").replace(/^"|"$/g,"")}function ade(n){var t,i;let e=(i=(t=n.split(".").pop())==null?void 0:t.toLowerCase())!=null?i:"png";return e==="jpg"||e==="jpeg"?"image/jpeg":e==="png"?"image/png":e==="bmp"?"image/bmp":e==="tga"?"image/x-tga":e==="webp"?"image/webp":`image/${e}`}function ode(n,e,t){let i=ra(e),r=i.replace(/\.[^.]+$/,""),s=Xr(t),a=[Cs(n,e),Cs(n,i)];if(s)for(let o of Y9)a.push(Cs(n,`${s}.${o}`));for(let o of Y9){let l=`${r}.${o}`;l!==i&&a.push(Cs(n,l))}return a}function lde(n){return new TR(n)}var ER,Y9,Jhe,ede,tde,jn,TR,j9=C(()=>{"use strict";NC();ps();mA();pA();WV();HV();ny();Ge();zt();Hy();_c();gP();Cx();B4();KC();Um();Pg();Pg();LL();OL();$7();y9();dS();ks();na();P9();X9();lR();Zc();mS();ys();ES();h_();ER=null,Y9=["jpg","jpeg","png","bmp","tga","webp","tif","tiff"],Jhe=/^\s*(map_Kd|map_Ka|map_Ks|map_Ns|map_d|map_bump|bump|disp|decal)\s+(.+)/i,ede=.242,tde=320;jn=class jn{constructor(e){this.rootMesh=null;this.loadedMeshes=[];this.loadedTransformNodes=[];this.loadedExt="";this.rendering=!1;this.cleanupPicking=null;this.configLights=[];this.shadowGenerator=null;this.groundMesh=null;this.gridMesh=null;this.axisMeshes=[];this.autoRotateBehavior=null;this.wireframeEnabled=!1;this.gizmo=null;this.gizmoEnabled=!1;this.disassembly=null;this.focusSelectionEnabled=!1;this.focusedMesh=null;this.originalMeshVisibility=new Map;this.bboxMesh=null;this.bboxEnabled=!1;this.currentQuality="high";this.resourceWarnings=[];this.animPlaying=!1;this.initialCamera={alpha:Math.PI/4,beta:Math.PI/3,radius:5,target:b.Zero()};this.focusWorldPointFrame=0;this._lastPickResult={mesh:null,pickedPoint:null,screenX:0,screenY:0};this._onPickCallbacks=[];this.preventCanvasWheelScroll=e=>{e.preventDefault(),e.stopPropagation()};this.engine=new Be(e,!0,{preserveDrawingBuffer:!0}),this.scene=new Qt(this.engine),this.scene.clearColor=new lt(.12,.12,.14,1),this.camera=new gi("cam",Math.PI/4,Math.PI/3,5,b.Zero(),this.scene),this.camera.attachControl(e,!0),this.camera.lowerRadiusLimit=.1,this.camera.wheelPrecision=30,e.addEventListener("wheel",this.preventCanvasWheelScroll,{passive:!1}),this.scene.ambientColor=new Te(.3,.3,.3);let t=new Ys("default-light",new b(0,1,.5),this.scene);t.intensity=1.2,this.resizeObs=new ResizeObserver(()=>this.engine.resize()),this.resizeObs.observe(e),window.requestAnimationFrame(()=>this.engine.resize())}canRender(){let e=this.engine.getRenderingCanvas();return!!(e!=null&&e.isConnected)&&e.clientWidth>0&&e.clientHeight>0}ensureDisassemblyController(){return this.rootMesh?(this.disassembly||(this.disassembly=z9(this.scene,this.camera,this.getRenderableMeshes(this.rootMesh))),this.disassembly):null}isDisassemblyActive(){var e,t;return(t=(e=this.disassembly)==null?void 0:e.isEnabled())!=null?t:!1}async loadModel(e,t,i,r){var h,d,u;if(await yg(),this.rootMesh){let m=this.rootMesh;m.dispose(!0,!0);for(let _ of this.loadedMeshes)_!==m&&!_.isDisposed()&&_.dispose(!0,!0);this.rootMesh=null}this.loadedMeshes=[],this.loadedTransformNodes=[],(h=this.disassembly)==null||h.dispose(),this.disassembly=null,this.clearFocusedMesh(),this.originalMeshVisibility.clear();let s=t.toLowerCase().replace(".","");this.loadedExt=s,this.resourceWarnings=[];let a=this.scene,l=(d={glb:".glb",gltf:".gltf",stl:".stl",obj:".obj",splat:".splat",ply:".ply"}[s])!=null?d:`.${s}`,c=`data:application/octet-stream;base64,${Cl(e)}`;if(s==="obj"&&i&&r){ER&&await ER;let m;ER=new Promise(_=>{m=_});try{let{OBJFileLoader:_}=await Promise.resolve().then(()=>(PL(),G7)),p=_.prototype;typeof p._loadMTL!="function"&&console.warn("[AI3D] OBJFileLoader._loadMTL not found \u2014 MTL vault resolution disabled");let g=p._loadMTL,x=new TextDecoder().decode(new Uint8Array(e)).match(/mtllib\s+(.+)/),A=null;if(x&&i&&r){let E=nde(x[1]),R=mp(r),I=Cs(R,E);try{let y=await i(I),D=new TextDecoder().decode(new Uint8Array(y)).split(` +`);for(let N=0;NN!=="");if(!O.some(N=>/^\s*Kd\s+/i.test(N))){let N=O.findIndex(F=>/^\s*newmtl\s+/i.test(F));O.splice(N>=0?N+1:0,0,"Kd 0.80 0.80 0.80")}A=O.join(` +`)}catch(y){this.resourceWarnings.push(`OBJ material library not found: ${I}`)}}p._loadMTL=function(E,R,I){let y=A!=null?A:"";I(y)};let S=await Eg(c,a,{meshNames:"",pluginExtension:l});this.loadedMeshes=S.meshes,this.loadedTransformNodes=S.transformNodes,S.meshes.length>0&&(this.rootMesh=S.meshes[0]),p._loadMTL=g}catch(_){throw console.error("[AI3D] OBJ load error:",_),_}finally{m(),ER=null}}else if(s==="stl")this.rootMesh=z7(a,e),this.rootMesh&&(this.loadedMeshes=[this.rootMesh]);else if(s==="ply")this.rootMesh=Y7(a,e),this.rootMesh&&(this.loadedMeshes=[this.rootMesh]);else{let m=await Eg(c,a,{meshNames:"",pluginExtension:l});this.loadedMeshes=m.meshes,this.loadedTransformNodes=m.transformNodes,m.meshes.length>0&&(this.rootMesh=m.meshes[0])}if(!this.rootMesh)throw new Error("No mesh found in model file");for(let m of this.getRenderableMeshes(this.rootMesh))m.material&&(m.material.backFaceCulling=!1);let f=uS(this.getRenderableBounds(this.rootMesh));return this.camera.target=SR(f.target),this.camera.radius=f.radius,this.camera.lowerRadiusLimit=f.lowerRadiusLimit,this.camera.upperRadiusLimit=f.upperRadiusLimit,this.camera.minZ=f.near,this.camera.maxZ=f.far,this.initialCamera={alpha:this.camera.alpha,beta:this.camera.beta,radius:this.camera.radius,target:this.camera.target.clone()},this.startRenderLoop(),this.engine.resize(),(u=this.cleanupPicking)==null||u.call(this),this.cleanupPicking=C9(this.scene,m=>{this.isDisassemblyActive()||(this._lastPickResult=m,this.focusSelectionEnabled&&m.mesh&&this.setFocusedMesh(m.mesh),this._onPickCallbacks.forEach(_=>_(m)))},()=>!this.focusSelectionEnabled),this.ensureDisassemblyController(),this.computeSummary(this.rootMesh)}applyConfig(e){e.camera&&this.applyCameraConfig(e.camera),e.lights&&this.applyLightConfig(e.lights),e.scene&&this.applySceneConfig(e.scene),e.stl&&this.loadedExt==="stl"&&(e.stl.color&&this.setSTLColor(e.stl.color),e.stl.wireframe!==void 0&&this.setWireframe(e.stl.wireframe))}applyCameraConfig(e){var i;let t=this.engine.getRenderingCanvas();if(t){if(e.mode==="orthographic"){let r=this.camera.radius,s=t.clientWidth/t.clientHeight,a=(i=e.zoom)!=null?i:1,o=r/a;this.camera.mode=1,this.camera.orthoLeft=-o*s,this.camera.orthoRight=o*s,this.camera.orthoTop=o,this.camera.orthoBottom=-o}else this.camera.mode=0,e.fov&&(this.camera.fov=e.fov*Math.PI/180);if(e.position){let[r,s,a]=e.position;this.camera.setPosition(new b(r,s,a))}if(e.lookAt){let[r,s,a]=e.lookAt;this.camera.setTarget(new b(r,s,a))}e.near!==void 0&&(this.camera.minZ=e.near),e.far!==void 0&&(this.camera.maxZ=e.far)}}applyLightConfig(e){var i;for(let r of this.configLights)r.dispose();this.configLights=[],(i=this.shadowGenerator)==null||i.dispose(),this.shadowGenerator=null;let t=this.scene.getLightByName("default-light");t&&t.dispose();for(let r of e){let s=this.createLight(r);s&&this.configLights.push(s)}}createLight(e){var r,s;let t=e.color?Te.FromHexString(e.color):Te.White(),i=(r=e.intensity)!=null?r:1;switch(e.type){case"hemisphere":{let a=e.groundColor?Te.FromHexString(e.groundColor):new Te(.2,.2,.2),o=new Ys("hemi",new b(0,1,0),this.scene);return o.diffuse=t,o.groundColor=a,o.intensity=i,o}case"directional":{let a=e.position?new b(...e.position).normalize():new b(-1,-2,-1).normalize(),o=new Ss("dir",a,this.scene);return o.diffuse=t,o.intensity=i,e.castShadow&&this.rootMesh&&this.setupShadow(o),o}case"point":{let a=e.position?new b(...e.position):new b(0,5,0),o=new xf("point",a,this.scene);return o.diffuse=t,o.intensity=i,e.decay!==void 0&&(o.decay=e.decay),o}case"spot":{let a=e.position?new b(...e.position):new b(0,5,0),l=(e.target?new b(...e.target):b.Zero()).subtract(a).normalize(),c=e.angle?e.angle*Math.PI/180:Math.PI/4,f=(s=e.penumbra)!=null?s:.5,h=new Nr("spot",a,l,c,f,this.scene);return h.diffuse=t,h.intensity=i,e.decay!==void 0&&(h.decay=e.decay),e.castShadow&&this.rootMesh&&this.setupShadow(h),h}case"attachToCam":{let a=new xf("cam-light",b.Zero(),this.scene);return a.diffuse=t,a.intensity=i,a.parent=this.camera,a}default:return null}}setupShadow(e){if(!this.rootMesh)return;if(!ide(e)){console.warn("[AI3D] Light type does not support shadows:",e.name);return}let t=new yi(1024,e);t.useBlurExponentialShadowMap=!0,t.blurKernel=32;for(let i of this.getRenderableMeshes(this.rootMesh))t.addShadowCaster(i),i.receiveShadows=!0;this.shadowGenerator=t}applySceneConfig(e){var t,i;if(e.background!==void 0){let r=lt.FromColor3(Te.FromHexString(e.background),e.transparent?0:1);this.scene.clearColor=r}e.autoRotate&&(this.autoRotateBehavior?this.autoRotateBehavior.idleRotationSpeed=(i=e.autoRotateSpeed)!=null?i:.5:(this.autoRotateBehavior=new Am,this.autoRotateBehavior.idleRotationSpeed=(t=e.autoRotateSpeed)!=null?t:.5,this.autoRotateBehavior.idleRotationWaitTime=1e3,this.autoRotateBehavior.idleRotationSpinupTime=500,this.camera.addBehavior(this.autoRotateBehavior))),e.groundShadow&&this.rootMesh&&this.createGround(),e.grid&&this.createGrid(),e.axis&&this.createAxis()}createGround(){if(!this.rootMesh||this.groundMesh)return;let e=this.getRenderableBounds(this.rootMesh),t=an(e),i=Math.max(t.x,t.z)*3,r=e.min.y;this.groundMesh=pc.CreateGround("ground",{width:i,height:i},this.scene),this.groundMesh.position.y=r;let s=new He("ground-mat",this.scene);s.diffuseColor=new Te(.15,.15,.15),s.specularColor=Te.Black(),s.alpha=.5,this.groundMesh.material=s,this.groundMesh.receiveShadows=!0}createGrid(){if(!this.rootMesh||this.gridMesh)return;let e=this.getRenderableBounds(this.rootMesh),t=an(e),i=Math.max(t.x,t.z)*2,r=e.min.y-.01;this.gridMesh=pc.CreateGround("grid",{width:i,height:i,subdivisions:20},this.scene),this.gridMesh.position.y=r;let s=new He("grid-mat",this.scene);s.wireframe=!0,s.diffuseColor=new Te(.3,.3,.3),s.emissiveColor=new Te(.1,.1,.1),this.gridMesh.material=s}createAxis(){if(!this.rootMesh||this.axisMeshes.length>0)return;let e=this.getRenderableBounds(this.rootMesh),t=m1(e)*1.5,i=SR(e.min),r=f_(e)*.01,s=[["x",Te.Red(),new b(t,0,0)],["y",Te.Green(),new b(0,t,0)],["z",Te.Blue(),new b(0,0,t)]];for(let[a,o,l]of s){let c=pc.CreateTube(`axis-${a}`,{path:[i,i.add(l)],radius:r,tessellation:8},this.scene),f=new He(`axis-${a}-mat`,this.scene);f.emissiveColor=o,f.diffuseColor=Te.Black(),c.material=f,this.axisMeshes.push(c)}}setSTLColor(e){if(!this.rootMesh)return;let t=Te.FromHexString(e);for(let i of this.getRenderableMeshes(this.rootMesh))if(i.material&&i.material.name==="stl-mat"){let r=i.material;r.diffuseColor=t,r.emissiveColor=t.scale(.1)}}setWireframe(e){this.rootMesh&&(hO(this.rootMesh)||(this.wireframeEnabled=e,this.scene.forceWireframe=e))}toggleWireframe(){return this.setWireframe(!this.wireframeEnabled),this.wireframeEnabled}hasAnimations(){return this.scene.animationGroups.length>0}toggleAnimation(){let e=this.scene.animationGroups;if(e.length===0)return!1;this.animPlaying=!this.animPlaying;for(let t of e)this.animPlaying?t.play(!0):t.pause();return this.animPlaying}setAnimationSpeed(e){for(let t of this.scene.animationGroups)t.speedRatio=e}captureSnapshot(){let e=this.engine.getRenderingCanvas();return e?(this.scene.render(),e.toDataURL("image/png")):null}toggleOrientationGizmo(){return this.gizmoEnabled=!this.gizmoEnabled,this.gizmoEnabled&&!this.gizmo&&(this.gizmo=new gR(this.engine,this.camera)),this.gizmoEnabled}isOrientationGizmoEnabled(){return this.gizmoEnabled}setRenderScale(e){let t=Math.max(.25,Math.min(e,2)),i={low:2,medium:1.33,high:1}[this.currentQuality],r=hr()?1.5:1;return this.engine.setHardwareScalingLevel(i*r/t),t}getPerformanceSnapshot(){return{backend:"babylon",renderScale:Number((1/this.engine.getHardwareScalingLevel()).toFixed(2)),quality:this.currentQuality,meshCount:this.rootMesh?this.getRenderableMeshes(this.rootMesh).length:0}}toggleBoundingBox(){var e;if(this.bboxEnabled=!this.bboxEnabled,this.bboxEnabled){if(!this.rootMesh)return this.bboxEnabled;this.bboxMesh&&this.bboxMesh.dispose();let t=this.getRenderableBounds(this.rootMesh),i=SR(on(t)),r=SR(an(t));this.bboxMesh=pc.CreateBox("bbox",{width:r.x,height:r.y,depth:r.z},this.scene),this.bboxMesh.position=i;let s=new He("bbox-mat",this.scene);s.wireframe=!0,s.emissiveColor=new Te(1,1,0),s.disableLighting=!0,s.alpha=.6,this.bboxMesh.material=s}else(e=this.bboxMesh)==null||e.dispose(),this.bboxMesh=null;return this.bboxEnabled}toggleFocusSelection(){var t;let e=!this.focusSelectionEnabled;return e&&this.isDisassemblyActive()&&((t=this.disassembly)==null||t.setEnabled(!1)),this.focusSelectionEnabled=e,this.focusSelectionEnabled?this._lastPickResult.mesh&&this.setFocusedMesh(this._lastPickResult.mesh):this.clearFocusedMesh(),this.focusSelectionEnabled}isFocusSelectionEnabled(){return this.focusSelectionEnabled}toggleDisassembly(){let e=this.ensureDisassemblyController();if(!e)return!1;let t=!e.isEnabled();return t&&(this.focusSelectionEnabled=!1,this.clearFocusedMesh()),e.setEnabled(t)}resetDisassembly(){var e;(e=this.disassembly)==null||e.reset()}isDisassemblyEnabled(){return this.isDisassemblyActive()}setExplode(e,t){this.rootMesh&&Q7(this.rootMesh,e,t,this.loadedMeshes)}resetExplode(){this.rootMesh&&wL(this.rootMesh,this.loadedMeshes)}resetView(){this.rootMesh&&wL(this.rootMesh,this.loadedMeshes),this.resetDisassembly(),this.clearFocusedMesh(),this.camera.mode=0,this.camera.alpha=this.initialCamera.alpha,this.camera.beta=this.initialCamera.beta,this.camera.radius=this.initialCamera.radius,this.camera.target=this.initialCamera.target.clone()}exportModelInfo(e){if(!this.rootMesh)return"";let t=this.computeSummary(this.rootMesh),i=this.getRenderableMeshes(this.rootMesh),r=hO(this.rootMesh),s=e&&ra(e)||t.rootName;return gS({title:s,format:this.loadedExt.toUpperCase(),summary:t,meshBreakdown:i.map(a=>{var o,l;return{name:a.name,triangleCount:r?null:Dg(a),vertexCount:ad(a),materialName:(l=(o=a.material)==null?void 0:o.name)!=null?l:null}}),materialNames:i.map(a=>{var o;return(o=a.material)==null?void 0:o.name})})}getModelEvidence(){var a;if(!this.rootMesh)return null;let e=this.getRenderableMeshes(this.rootMesh),t=this.computeGroupedPartSummaries(e),i=e.filter(o=>!t.groupedMeshes.has(o)).map(o=>this.computePartSummary(o)),r=t.parts.length>0?[...t.parts,...i]:i,s=new Set;for(let o of e)(a=o.material)!=null&&a.name&&s.add(o.material.name);return{summary:this.computeSummary(this.rootMesh),parts:r,materialNames:Array.from(s).sort((o,l)=>o.localeCompare(l)),resourceWarnings:[...this.resourceWarnings],capturedAt:new Date().toISOString()}}getSelectedPartInfo(){var i;let e=(i=this.focusedMesh)!=null?i:this._lastPickResult.mesh,t=e?this.findRenderableMesh(e):null;return!t||t.isDisposed()?null:this.computePartSummary(t)}exportSelectedPartInfo(){let e=this.getSelectedPartInfo();return e?vS(e):""}getPickWorldPoint(e){if(e.pickedPoint&&typeof e.pickedPoint=="object")return Ht(e.pickedPoint);if(rde(e.mesh)){let t=e.mesh.getBoundingInfo().boundingBox.centerWorld;return Ht(t)}return null}focusWorldPoint(e){let t=new b(e.x,e.y,e.z),i=this.camera.target.clone(),r=performance.now();this.focusWorldPointFrame&&(activeWindow.cancelAnimationFrame(this.focusWorldPointFrame),this.focusWorldPointFrame=0);let s=a=>{let o=Math.min(1,Math.max(0,(a-r)/tde)),l=o<.5?4*o*o*o:1-Math.pow(-2*o+2,3)/2;if(this.camera.target=b.Lerp(i,t,l),o<1&&!this.scene.isDisposed){this.focusWorldPointFrame=activeWindow.requestAnimationFrame(s);return}this.focusWorldPointFrame=0};this.focusWorldPointFrame=activeWindow.requestAnimationFrame(s)}getAnnotationCameraStateKey(){return`${this.camera.alpha.toFixed(3)}_${this.camera.beta.toFixed(3)}_${this.camera.radius.toFixed(3)}_${this.camera.target.x.toFixed(2)}_${this.camera.target.y.toFixed(2)}_${this.camera.target.z.toFixed(2)}`}projectAnnotationWorldPoint(e,t){let i=this.engine.getRenderingCanvas();if(!i||this.scene.isDisposed)return!1;let r=this.engine.getRenderWidth(),s=this.engine.getRenderHeight();if(r===0||s===0||i.clientWidth===0||i.clientHeight===0)return!1;let a=jn.annotationWorldPoint;a.set(e.x,e.y,e.z),b.ProjectToRef(a,jn.annotationIdentity,this.scene.getTransformMatrix(),this.camera.viewport.toGlobal(r,s),jn.annotationProjection);let o=i.clientWidth/r,l=i.clientHeight/s;return t.screenX=jn.annotationProjection.x*o,t.screenY=jn.annotationProjection.y*l,t.depth=jn.annotationProjection.z,!0}isAnnotationWorldPointOccluded(e){if(this.scene.isDisposed)return!1;let t=yc(Ht(this.camera.position),e);if(!t)return!1;let i=jn.annotationDirection,r=jn.annotationRay;i.set(t.direction.x,t.direction.y,t.direction.z),r.origin=this.camera.position,r.direction=i,r.length=t.distance;let s=this.scene.pickWithRay(r);return!!(s!=null&&s.hit)&&Cc(s.distance,t.distance,t.epsilon)}getAnnotationProvider(){let e=this.engine.getRenderingCanvas();if(!e)throw new Error("Preview canvas is unavailable");return{canvas:e,observeRender:t=>{let i=this.scene.onAfterRenderCameraObservable.add(r=>{r===this.camera&&t()});return{remove:()=>this.scene.onAfterRenderCameraObservable.remove(i)}},getCameraStateKey:()=>this.getAnnotationCameraStateKey(),projectWorldPoint:(t,i)=>this.projectAnnotationWorldPoint(t,i),isWorldPointOccluded:t=>this.isAnnotationWorldPointOccluded(t)}}getCanvas(){return this.engine.getRenderingCanvas()}getLastPickResult(){return this._lastPickResult}onPick(e){return this._onPickCallbacks.push(e),()=>{this._onPickCallbacks=this._onPickCallbacks.filter(t=>t!==e)}}setRenderQuality(e,t=1){this.currentQuality=e;let i={low:2,medium:1.33,high:1},r=hr()?1.5:1,s=i[e]*r/Math.max(t,.25);if(this.engine.setHardwareScalingLevel(s),this.shadowGenerator){let a={low:0,medium:16,high:32};this.shadowGenerator.blurKernel=a[e],e==="low"?(this.shadowGenerator.useBlurExponentialShadowMap=!1,this.shadowGenerator.useExponentialShadowMap=!0):(this.shadowGenerator.useBlurExponentialShadowMap=!0,this.shadowGenerator.useExponentialShadowMap=!1)}}destroy(){var t,i,r,s,a,o,l;this.engine.stopRenderLoop(),this.focusWorldPointFrame&&(activeWindow.cancelAnimationFrame(this.focusWorldPointFrame),this.focusWorldPointFrame=0),this._onPickCallbacks=[],(t=this.cleanupPicking)==null||t.call(this),this.cleanupPicking=null,(i=this.gizmo)==null||i.dispose(),this.gizmo=null,(r=this.disassembly)==null||r.dispose(),this.disassembly=null,this.clearFocusedMesh(),this.originalMeshVisibility.clear(),(s=this.bboxMesh)==null||s.dispose(),this.bboxMesh=null,this.camera.detachControl();let e=this.engine.getRenderingCanvas();e==null||e.removeEventListener("wheel",this.preventCanvasWheelScroll),this.resizeObs.disconnect(),this.autoRotateBehavior&&(this.camera.removeBehavior(this.autoRotateBehavior),this.autoRotateBehavior=null);for(let c of this.configLights)c.dispose();this.configLights=[],(a=this.shadowGenerator)==null||a.dispose(),this.shadowGenerator=null,(o=this.groundMesh)==null||o.dispose(),this.groundMesh=null,(l=this.gridMesh)==null||l.dispose(),this.gridMesh=null;for(let c of this.axisMeshes)c.dispose();this.axisMeshes=[],this.scene.dispose(),this.engine.dispose()}startRenderLoop(){this.rendering||(this.rendering=!0,this.engine.runRenderLoop(()=>{this.canRender()&&(this.scene.render(),this.gizmo&&this.gizmoEnabled&&(this.gizmo.syncWith(this.camera),this.gizmo.render()))}))}getRenderableMeshes(e){return od(e,this.loadedMeshes)}getRenderableBounds(e){return aR(e,this.loadedMeshes)}setFocusedMesh(e){if(!this.rootMesh)return;let t=e?this.findRenderableMesh(e):null;if(!t||t.isDisposed()){this.clearFocusedMesh();return}if(this.focusedMesh===t)return;let i=this.getRenderableMeshes(this.rootMesh);for(let r of i){this.originalMeshVisibility.has(r.uniqueId)||this.originalMeshVisibility.set(r.uniqueId,r.visibility);let s=r===t;r.visibility=s?1:ede,r.renderOutline=s,r.outlineColor=new Te(.18,.76,1),r.outlineWidth=s?.045:0}this.focusedMesh=t}clearFocusedMesh(){if(!this.rootMesh){this.focusedMesh=null;return}for(let e of this.getRenderableMeshes(this.rootMesh)){let t=this.originalMeshVisibility.get(e.uniqueId);t!==void 0&&(e.visibility=t),e.renderOutline=!1,e.outlineWidth=0}this.originalMeshVisibility.clear(),this.focusedMesh=null}findRenderableMesh(e){if(!this.rootMesh)return null;let t=this.getRenderableMeshes(this.rootMesh);if(t.includes(e))return e;let i=e.parent;for(;i&&"uniqueId"in i;){let r=i;if(t.includes(r))return r;i=i.parent}return null}computePartSummary(e){return{...Z7(e),source:"mesh",meshNames:[e.name||`mesh-${e.uniqueId}`],childCount:1}}computeGroupedPartSummaries(e){var s;let t=new Set(e),i=[],r=new Set;for(let a of this.loadedTransformNodes){if(!a.name.trim())continue;let o=a.getChildMeshes(!1).filter(d=>t.has(d));if(o.length<2||o.length===e.length)continue;for(let d of o)r.add(d);let l=qm(o);if(!l)continue;let c=new Set,f=0,h=0;for(let d of o)f+=Dg(d),h+=ad(d),(s=d.material)!=null&&s.name&&c.add(d.material.name);i.push(Eh({name:a.name,triangleCount:f,vertexCount:h,materialName:c.size===0?null:c.size===1?Array.from(c)[0]:`${c.size} materials`,boundingSize:an(l),center:on(l),source:"group",meshNames:o.map(d=>d.name||`mesh-${d.uniqueId}`),childCount:o.length}))}return{parts:i,groupedMeshes:r}}computeSummary(e){let t=this.getRenderableMeshes(e),i=hO(e),r=t.reduce((s,a)=>s+ad(a),0);return oR(e.name,this.getRenderableBounds(e),t,{splatCount:i?r:void 0,resourceWarnings:this.resourceWarnings})}};jn.annotationIdentity=K.Identity(),jn.annotationWorldPoint=b.Zero(),jn.annotationProjection=b.Zero(),jn.annotationDirection=b.Zero(),jn.annotationRay=new Hr(b.Zero(),b.Zero(),1);TR=jn});async function q9(n,e){if(Pd(e).backend==="three"){let{createThreeModelPreview:r}=await Promise.resolve().then(()=>(y1(),C1));return r(n)}let{createBabylonModelPreview:i}=await Promise.resolve().then(()=>(j9(),K9));return i(n)}var Z9=C(()=>{"use strict";$g()});var Q9={};$e(Q9,{createBabylonGridRenderer:()=>fde});function cde(n){return n.replace(/\|/g,"\\|").replace(/\r?\n/g," ")}function dO(n){return new b(n.x,n.y,n.z)}function fde(n){return new uO(n)}var Zm,uO,$9=C(()=>{"use strict";NC();ps();mA();pA();Ge();zt();Uu();Um();kh();_c();Pg();Pg();lR();dS();ks();Zc();mS();Zm=32;uO=class{constructor(e){this.cells=[];this.initialCameras=[];this.wireframeEnabled=!1;this.rendering=!1;this.preventCanvasWheelScroll=e=>{e.preventDefault(),e.stopPropagation()};e.className="ai3d-canvas-full",e.addEventListener("wheel",this.preventCanvasWheelScroll,{passive:!1}),this.engine=new Be(e,!0,{preserveDrawingBuffer:!0}),this.scene=new Qt(this.engine),this.scene.clearColor=new lt(.12,.12,.14,1),this.scene.autoClear=!1,new Ys("default-light",new b(0,1,.5),this.scene),this.resizeObs=new ResizeObserver(()=>this.engine.resize()),this.resizeObs.observe(e),window.requestAnimationFrame(()=>this.engine.resize())}canRender(){let e=this.engine.getRenderingCanvas();return!!(e!=null&&e.isConnected)&&e.clientWidth>0&&e.clientHeight>0}getCellBounds(e){let t=qm(e);if(!t)throw new Error("Grid cell has no renderable meshes");return t}async loadModels(e,t,i){var h,d,u;await yg();let r=e.length>Zm?(console.warn(`[AI3D Grid] Capping ${e.length} models to ${Zm} (layerMask limit)`),e.slice(0,Zm)):e,s=(h=t.columns)!=null?h:Math.min(r.length,3),a=(d=t.gapX)!=null?d:.02,o=(u=t.gapY)!=null?u:.02,l=Math.ceil(r.length/s),c=(1-a*(s+1))/s,f=(1-o*(l+1))/l;for(let m=0;mZm?(console.warn(`[AI3D Preset] Capping ${e.placements.length} placements to ${Zm} (layerMask limit)`),e.placements.slice(0,Zm)):e.placements,r=[];for(let f=0;f0&&(d.push(...r[_]),u|=1<<_)}else d=h?[...h]:[],u=1<this.renderFrame()))}captureSnapshot(){let e=this.engine.getRenderingCanvas();return e?(this.renderFrame(),e.toDataURL("image/png")):null}getEngine(){return this.engine}getScene(){return this.scene}getCellCount(){return this.cells.length}getCanvas(){return this.engine.getRenderingCanvas()}getPrimaryCamera(){var e,t;return(t=(e=this.cells[0])==null?void 0:e.camera)!=null?t:null}setRenderScale(e){let t=Math.max(.25,Math.min(e,2)),i=hr()?1.5:1;return this.engine.setHardwareScalingLevel(i/t),t}resetView(){for(let e=0;e($9(),Q9));return e(n)}var eK=C(()=>{"use strict"});function hde(n,e,t){n.info("select preview backend",{...e,backend:t.backend,reason:t.reason,ext:t.ext,annotationMode:t.annotationMode,requireWorkbenchFeatures:t.requireWorkbenchFeatures,rendererRollout:t.rendererRollout})}async function ld(n,e,t,i){let r=Pd(i);return hde(n,e,r),{preview:await q9(t,i),route:r}}function dde(n,e,t){n.info("select preview backend",{...e,backend:t.backend,reason:t.reason})}async function tK(n,e,t){let i=LN();return dde(n,e,i),{renderer:await J9(t),route:i}}var AR=C(()=>{"use strict";Z9();eK();$g()});function qn(n,e){return!!n&&typeof n=="object"&&e in n}function xR(n){return qn(n,"getAnnotationProvider")}function iK(n){return qn(n,"hasAnimations")&&qn(n,"toggleAnimation")}function RR(n){return qn(n,"toggleDisassembly")&&qn(n,"resetDisassembly")&&qn(n,"isDisassemblyEnabled")}function bR(n){return qn(n,"toggleFocusSelection")&&qn(n,"isFocusSelectionEnabled")}function rK(n){return qn(n,"toggleWireframe")}function mO(n){return qn(n,"toggleOrientationGizmo")}function nK(n){return qn(n,"toggleBoundingBox")}function sK(n){return qn(n,"setRenderScale")}function IR(n){return qn(n,"setExplode")&&qn(n,"resetExplode")&&qn(n,"focusWorldPoint")}var Lg=C(()=>{"use strict"});function rn(n){let e=createSvg("svg");e.setAttribute("viewBox","0 0 24 24"),e.setAttribute("width","16"),e.setAttribute("height","16");let t=new DOMParser().parseFromString(`${n}`,"image/svg+xml");for(let i of Array.from(t.documentElement.childNodes))e.appendChild(activeDocument.importNode(i,!0));return e}function aK(n){var a,o;let[e,t]=n.split(","),i=(o=(a=e.match(/:(.*?);/))==null?void 0:a[1])!=null?o:"image/png",r=atob(t),s=new Uint8Array(r.length);for(let l=0;l{he.stopPropagation()};d.addEventListener("pointerdown",p),d.addEventListener("mousedown",p),d.addEventListener("click",p),f&&(d.classList.add("is-mobile"),oK(e,!1));let g=he=>(he.classList.add("is-secondary"),he),v=(he,we)=>{he.classList.toggle("ai3d-btn-active",we),he.setAttribute("aria-pressed",String(we))},x=()=>{for(let he of[u,m,_]){let we=Array.from(he.querySelectorAll(".ai3d-inline-btn")).filter(di=>!di.classList.contains("is-hidden")),Vt=we.length>0,re=we.some(di=>!di.classList.contains("is-secondary"));he.classList.toggle("is-hidden",!Vt),he.classList.toggle("has-primary-visible",re)}},A=!1,S=!1,E=f?u.createEl("button",{cls:"ai3d-inline-btn ai3d-mobile-mode-btn",attr:{"aria-label":ee("helper.enableInteractionLabel"),"aria-pressed":"false"}}):null;E==null||E.appendChild(rn(''));let R=(Ye=E==null?void 0:E.createSpan({cls:"ai3d-mobile-mode-btn-label"}))!=null?Ye:null,I=()=>{f&&E&&(oK(e,A),v(E,A),R==null||R.setText(A?ee("helper.scrollAction"):ee("helper.interactAction")),E.setAttribute("aria-label",A?ee("helper.disableInteractionLabel"):ee("helper.enableInteractionLabel"))),v(Tt,S),d.classList.toggle("show-secondary",S),x()},y=he=>{A=he,I()};E==null||E.addEventListener("click",()=>{let he=!A;l==null||l(he),y(he),zi(E,he?ee("helper.interactionOn"):ee("helper.interactionOff"))});let M=(he,we)=>{he.classList.toggle("is-hidden",!we)},D=null,O=()=>{var re;let he=i(),we=he&&bR(he)?he:null,Vt=he&&RR(he)?he:null;v(Z,!!(we!=null&&we.isFocusSelectionEnabled())),v(X,!!(Vt!=null&&Vt.isDisassemblyEnabled())),he&&mO(he)&&v($,!!((re=he.isOrientationGizmoEnabled)!=null&&re.call(he)))},V=()=>{let he=i(),we=he&&bR(he)?he:null,Vt=he&&RR(he)?he:null,re=he&&iK(he)?he:null;he!==D&&(D=he,v(W,!1),v(q,!1),v(pe,!1),pe.replaceChildren(rn('')),M(N,!!(he!=null&&he.resetView)),M(F,!!(he!=null&&he.exportModelInfo)),M(U,!!(he!=null&&he.exportSelectedPartInfo)),M(W,!!he&&rK(he)),M($,!!he&&mO(he)),M(q,!!he&&nK(he)),M(Z,!!we),M(X,!!Vt),M(se,!!he&&sK(he)),M(pe,!!(re!=null&&re.hasAnimations()))),M(Y,!!(Vt!=null&&Vt.isDisassemblyEnabled())),O(),x()},N=u.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":ee("helper.resetViewLabel")}});Fn(N,"reset-view"),N.appendChild(rn('')),N.addEventListener("click",()=>{let he=i();he!=null&&he.resetView&&(he.resetView(),V(),zi(N,ee("helper.resetViewDone")))});let F=g(m.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":ee("helper.copyModelInfoLabel")}}));Fn(F,"copy-model-info"),F.appendChild(rn('')),F.addEventListener("click",()=>{let he=i();if(he!=null&&he.exportModelInfo)try{let we=he.exportModelInfo(r());if(!we)return;navigator.clipboard.writeText(we).then(()=>{zi(F,ee("helper.copied"))}).catch(()=>{zi(F,ee("helper.failed"))})}catch(we){console.error("[AI3D] Export model info failed:",we),zi(F,ee("helper.failed"))}});let U=g(m.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":ee("helper.copySelectedPartInfoLabel")}}));Fn(U,"copy-selected-part-info"),U.appendChild(rn('')),U.addEventListener("click",()=>{let he=i();if(he!=null&&he.exportSelectedPartInfo)try{let we=he.exportSelectedPartInfo();if(!we){zi(U,ee("helper.noSelectedPart"));return}navigator.clipboard.writeText(we).then(()=>{zi(U,ee("helper.copied"))}).catch(()=>{zi(U,ee("helper.failed"))})}catch(we){console.error("[AI3D] Export selected part info failed:",we),zi(U,ee("helper.failed"))}});let W=g(u.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":ee("helper.toggleWireframeLabel"),"aria-pressed":"false"}}));Fn(W,"toggle-wireframe"),W.appendChild(rn('')),W.addEventListener("click",()=>{let he=i();if(!(he!=null&&he.toggleWireframe))return;let we=he.toggleWireframe();v(W,we),zi(W,we?ee("helper.wireframeOn"):ee("helper.wireframeOff"))});let $=g(u.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":ee("helper.toggleAxesLabel"),"aria-pressed":"false"}}));Fn($,"toggle-axes"),$.appendChild(rn('')),$.addEventListener("click",()=>{let he=i();if(!(he!=null&&he.toggleOrientationGizmo))return;let we=he.toggleOrientationGizmo();v($,we),zi($,we?ee("helper.axesOn"):ee("helper.axesOff"))});let q=g(u.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":ee("helper.toggleBoundingBoxLabel"),"aria-pressed":"false"}}));Fn(q,"toggle-bounding-box"),q.appendChild(rn('')),q.addEventListener("click",()=>{let he=i();if(!(he!=null&&he.toggleBoundingBox))return;let we=he.toggleBoundingBox();v(q,we),zi(q,we?ee("helper.boundingBoxOn"):ee("helper.boundingBoxOff"))});let Z=g(m.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":ee("helper.toggleFocusSelectionLabel"),"aria-pressed":"false"}}));Fn(Z,"toggle-focus"),Z.appendChild(rn('')),Z.addEventListener("click",()=>{let he=i();if(!he||!bR(he))return;let we=he.toggleFocusSelection();V(),zi(Z,we?ee("helper.focusSelectionOn"):ee("helper.focusSelectionOff"))});let X=g(m.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":ee("helper.toggleDisassemblyLabel"),"aria-pressed":"false"}}));Fn(X,"toggle-disassembly"),X.appendChild(rn('')),X.addEventListener("click",()=>{let he=i();if(!he||!RR(he))return;let we=he.toggleDisassembly();V(),zi(X,we?ee("helper.disassemblyOn"):ee("helper.disassemblyOff"))});let Y=g(m.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":ee("helper.resetPartsLabel")}}));Fn(Y,"reset-parts"),Y.appendChild(rn('')),Y.addEventListener("click",()=>{let he=i();he!=null&&he.resetDisassembly&&(he.resetDisassembly(),V(),zi(Y,ee("helper.partsReset")))});let fe=[.5,.75,1,1.5,2],xe=(Ke=a==null?void 0:a().renderScale)!=null?Ke:1,Fe=fe.reduce((he,we,Vt)=>{let re=Math.abs(we-xe),di=Math.abs(fe[he]-xe);return re{let he=i();if(!(he!=null&&he.setRenderScale))return;Fe=(Fe+1)%fe.length;let we=he.setRenderScale(fe[Fe]);se.textContent=`${we.toFixed(1)}x`,zi(se,fr("helper.resolutionValue",{value:`${we}x`}))});let pe=g(u.createEl("button",{cls:"ai3d-inline-btn is-hidden",attr:{"aria-label":ee("helper.toggleAnimationLabel"),"aria-pressed":"false"}}));Fn(pe,"toggle-animation"),pe.appendChild(rn('')),pe.addEventListener("click",()=>{let he=i();if(!(he!=null&&he.toggleAnimation))return;let we=he.toggleAnimation();pe.replaceChildren(rn(we?'':'')),v(pe,we),zi(pe,we?ee("helper.playing"):ee("helper.paused"))});let ie=g(_.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":ee("helper.removePreviewLabel")}}));Fn(ie,"remove-preview"),ie.appendChild(rn('')),ie.addEventListener("click",s);let _e=_.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":ee("helper.copySnapshotLabel")}});Fn(_e,"copy-snapshot"),_e.appendChild(rn('')),_e.addEventListener("click",()=>{let he=i();if(he)try{let we=he.captureSnapshot();if(!we)return;let Vt=aK(we);navigator.clipboard.write([new ClipboardItem({"image/png":Vt})]).then(()=>{zi(_e,ee("helper.copied"))}).catch(()=>{zi(_e,ee("helper.failed"))})}catch(we){console.error("[AI3D] Copy snapshot failed:",we),zi(_e,ee("helper.failed"))}});let Pe=g(_.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":ee("helper.saveSnapshotLabel")}}));Fn(Pe,"save-snapshot"),Pe.appendChild(rn('')),Pe.addEventListener("click",()=>{var we,Vt;let he=i();if(he)try{let re=he.captureSnapshot();if(!re)return;let di=r(),Xt=Xr(di)||"model",bi=a==null?void 0:a(),ot=(we=bi==null?void 0:bi.snapshotFolder)!=null?we:"Media/3D Previews",Xi=(Vt=bi==null?void 0:bi.snapshotNaming)!=null?Vt:"model-name",z=Date.now(),B=Xi==="timestamp"?`snapshot_${z}.png`:`${Xt}_snapshot_${z}.png`,me=aK(re),Ce=new FileReader;Ce.onload=()=>{let Ue=Ce.result;t.vault.adapter.exists(ot).then(je=>je?Promise.resolve():t.vault.createFolder(ot).catch(()=>{})).then(()=>t.vault.createBinary(`${ot}/${B}`,Ue)).then(()=>{zi(Pe,ee("helper.saved"))}).catch(je=>{console.error("[AI3D] Save snapshot failed:",je),zi(Pe,ee("helper.failed"))})},Ce.onerror=()=>{console.error("[AI3D] FileReader error"),zi(Pe,ee("helper.failed"))},Ce.onabort=()=>{console.error("[AI3D] FileReader aborted"),zi(Pe,ee("helper.failed"))},Ce.readAsArrayBuffer(me)}catch(re){console.error("[AI3D] Save snapshot failed:",re),zi(Pe,ee("helper.failed"))}});let ue=g(_.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":ee("helper.downloadSnapshotLabel")}}));Fn(ue,"download-snapshot"),ue.appendChild(rn('')),ue.addEventListener("click",()=>{let he=i();if(he)try{let we=he.captureSnapshot();if(!we)return;let Vt=r(),di=`${Xr(Vt)||"model"}_snapshot_${Date.now()}.png`,Xt=createEl("a");Xt.href=we,Xt.download=di,activeDocument.body.appendChild(Xt),Xt.click(),Xt.remove(),zi(ue,ee("helper.downloaded"))}catch(we){console.error("[AI3D] Download snapshot failed:",we),zi(ue,ee("helper.failed"))}});let be=g(m.createEl("button",{cls:"ai3d-inline-btn is-hidden ai3d-annot-btn",attr:{"aria-label":ee(h.labelKey),"aria-pressed":"false"}}));Fn(be,"toggle-annotation"),be.appendChild(rn(''));let Ze=be.createSpan({cls:"ai3d-pin-badge is-hidden"});be.addEventListener("click",()=>{if(!o)return;let he=o();v(be,he),zi(be,he?ee(h.activeTooltipKey):ee(h.inactiveTooltipKey))});let Tt=d.createEl("button",{cls:"ai3d-inline-btn ai3d-mobile-more-toggle",attr:{"aria-label":ee("helper.showMoreActionsLabel"),"aria-pressed":"false"}});return Tt.appendChild(rn('')),Tt.addEventListener("click",()=>{S=!S,Tt.setAttribute("aria-label",S?ee("helper.hideMoreActionsLabel"):ee("helper.showMoreActionsLabel")),I(),zi(Tt,S?ee("helper.moreActionsShown"):ee("helper.moreActionsHidden"))}),n.insertBefore(d,e.nextSibling),I(),V(),{showAnimButton(){pe.classList.remove("is-hidden"),x()},showAnnotateButton(){be.classList.remove("is-hidden"),x()},updateAnnotationBadge(he){he>0?(Ze.textContent=String(he),Ze.classList.remove("is-hidden")):Ze.classList.add("is-hidden")},setMobileInteractionMode(he){f&&y(he)},syncCapabilities:V}}function zi(n,e){var i;(i=pO.get(n))==null||i.remove();let t=n.createSpan({cls:"ai3d-tooltip"});t.textContent=e,pO.set(n,t),window.setTimeout(()=>{t.remove(),pO.delete(n)},1500)}var pO,_O=C(()=>{"use strict";Js();Lg();ks();na();pO=new WeakMap});function gO(n){cK=n}function MR(n){return lK[n]>=lK[cK]}function CR(){return new Date().toISOString()}function yR(n){return n&&Object.keys(n).length>0?n:void 0}function cr(n){let e=`[AI3D][${n}]`;return{debug(t,i){MR("debug")&&console.debug(e,CR(),t,yR(i))},info(t,i){MR("info")&&console.debug(e,CR(),t,yR(i))},warn(t,i){MR("warn")&&console.warn(e,CR(),t,yR(i))},error(t,i){MR("error")&&console.error(e,CR(),t,yR(i))}}}var lK,cK,Zn=C(()=>{"use strict";lK={debug:10,info:20,warn:30,error:40},cK="warn"});var Ng,PR,fK=C(()=>{"use strict";To();Zn();Ng=cr("conversion-manager"),PR=class{constructor(){this.converters=new Map;this.pending=new Map}getConverter(e){return this.converters.get(Oa(e))}registerConverter(e){Ng.info("register converter",{converterId:e.id,sourceExts:[...e.sourceExts]});for(let t of e.sourceExts)this.converters.set(Oa(t),e)}canConvert(e){let t=Oa(e),i=this.converters.has(t);return Ng.debug("can convert",{ext:t,ok:i}),i}async getConverterCacheIdentity(e){let t=this.getConverter(e);if(t)return{converterId:t.id,cacheKey:await t.getCacheKey()}}async convert(e){let t=Oa(e.sourceExt),i=this.getConverter(t);if(!i)throw Ng.error("converter missing",{ext:t,targetExt:e.targetExt}),new Error(`No converter registered for .${t}`);let r=`${e.sourcePath}::${t}::${e.targetExt}`,s=this.pending.get(r);if(s)return Ng.info("joining in-flight conversion",{key:r}),s;Ng.info("dispatch conversion",{converterId:i.id,ext:t,targetExt:e.targetExt});let a=i.convert({...e,sourceExt:t});this.pending.set(r,a);try{return await a}finally{this.pending.delete(r)}}}});function SO(...n){let e=(ke==null?void 0:ke.platform)==="darwin"?["/opt/homebrew/bin","/usr/local/bin","/opt/local/bin","/usr/bin"]:["/usr/local/bin","/opt/homebrew/bin","/opt/local/bin","/usr/bin"];return Array.from(new Set(e.flatMap(t=>n.map(i=>`${t}/${i}`))))}function mde(){var r,s,a;if((ke==null?void 0:ke.platform)==="darwin")return["/Applications/FreeCAD.app/Contents/MacOS/FreeCADCmd","/Applications/FreeCAD.app/Contents/Resources/bin/FreeCADCmd","/Applications/FreeCAD.app/Contents/Resources/bin/freecadcmd",...SO("FreeCADCmd","freecadcmd")];if((ke==null?void 0:ke.platform)!=="win32")return["/usr/local/bin/freecadcmd","/opt/homebrew/bin/freecadcmd","/opt/local/bin/freecadcmd","/snap/freecad/current/usr/bin/freecadcmd","/usr/bin/freecadcmd"];let n=[],e=(r=ke==null?void 0:ke.env)==null?void 0:r.LOCALAPPDATA,t=(s=ke==null?void 0:ke.env)==null?void 0:s.ProgramFiles,i=(a=ke==null?void 0:ke.env)==null?void 0:a["ProgramFiles(x86)"];if(e&&n.push(Gi(e,"Programs","FreeCAD","bin","FreeCADCmd.exe")),t&&n.push(Gi(t,"FreeCAD","bin","FreeCADCmd.exe")),e)for(let o of["1.2","1.1","1.0","0.22","0.21","0.20"])n.push(`${e}/Programs/FreeCAD ${o}/bin/FreeCADCmd.exe`);if(t)for(let o of["1.2","1.1","1.0","0.22","0.21","0.20"])n.push(`${t}/FreeCAD ${o}/bin/FreeCADCmd.exe`);return i&&n.push(`${i}/FreeCAD/bin/FreeCADCmd.exe`),n}function pde(n){var a,o,l,c;if((ke==null?void 0:ke.platform)!=="win32")return[];let e=(a=ke==null?void 0:ke.env)==null?void 0:a.APPDATA,t=(o=ke==null?void 0:ke.env)==null?void 0:o.LOCALAPPDATA,i=(l=ke==null?void 0:ke.env)==null?void 0:l.npm_config_prefix,r=(c=ke==null?void 0:ke.env)==null?void 0:c.USERPROFILE,s=[i,e?Gi(e,"npm"):void 0,t?Gi(t,"npm"):void 0,r?Gi(r,"AppData","Roaming","npm"):void 0].filter(f=>!!f);return Array.from(new Set(s.map(f=>Gi(f,n))))}function _de(...n){var s,a,o;if((ke==null?void 0:ke.platform)!=="win32")return[];let e=(s=ke==null?void 0:ke.env)==null?void 0:s.ProgramFiles,t=(a=ke==null?void 0:ke.env)==null?void 0:a["ProgramFiles(x86)"],i=(o=ke==null?void 0:ke.env)==null?void 0:o.LOCALAPPDATA,r=[e,t,i?Gi(i,"Programs"):void 0].filter(l=>!!l);return Array.from(new Set(r.flatMap(l=>n.map(c=>Gi(l,c)))))}async function xO(n){try{return await Jn(n,(ke==null?void 0:ke.platform)==="win32"?es:EN),!0}catch(e){return!1}}function vO(n){let e=n==null?void 0:n.trim();if(e)return e}function gde(n){let e=[],t="",i=null;for(let r=0;rr.trim().toLowerCase()).filter(Boolean);return e!=null&&e.length?e:ude}async function Tde(n){var r;let e=(r=ke==null?void 0:ke.env)==null?void 0:r.PATH;if(!e)return;let t=e.split(SN).map(s=>s.trim()).filter(Boolean),i=(ke==null?void 0:ke.platform)==="win32"?Sde(n):[""];for(let s of t)for(let a of i){let o=Gi(s,a?`${n}${a}`:n);if(await xO(o))return o}}function TO(n,e,t=15e3){return new Promise((i,r)=>{ia(n,e,{timeout:t,windowsHide:!0,maxBuffer:4*1024*1024},(s,a,o)=>{if(s){r(new Error((o||a||s.message).toString().trim()||s.message));return}i({stdout:a!=null?a:"",stderr:o!=null?o:""})})})}function AO(n){let t=(n instanceof Error?n.message:String(n)).replace(/\s+/g," ").trim();return t.length>180?`${t.slice(0,177)}...`:t}async function EO(n,e,t,i){let r="";for(let s of t)try{return await TO(n,[...e,...s]),{ok:!0,detail:""}}catch(a){let o=AO(a);if(i.test(o))return{ok:!0,detail:""};r=o}return{ok:!1,detail:r||"Command probe failed."}}async function Ade(n){var i;if(!n.available)return[];let e=(i=n.resolvedPath)!=null?i:n.executable,t=[...n.args];if(n.id==="freecad")try{return await TO(e,[...t,"-c","import cadquery, trimesh; print('ok')"]),[{kind:"cad-python",ok:!0,detail:""}]}catch(r){return[{kind:"cad-python",ok:!1,detail:AO(r)}]}if(n.id==="assimp")try{return await TO(e,[...t,"-c","import trimesh, numpy, networkx, collada; print('ok')"]),[{kind:"mesh-python",ok:!0,detail:""}]}catch(r){return[{kind:"mesh-python",ok:!1,detail:AO(r)}]}if(n.id==="freecadcmd"){let r=await EO(e,t,[["--version"],["--help"]],/freecad|usage|help|version/i);return[{kind:"freecadcmd-cli",ok:r.ok,detail:r.detail}]}if(n.id==="obj2gltf"){let r=await EO(e,t,[["--version"],["--help"]],/obj2gltf|usage|help|version/i);return[{kind:"obj2gltf-cli",ok:r.ok,detail:r.detail}]}if(n.id==="fbx2gltf"){let r=await EO(e,t,[["--version"],["--help"]],/fbx2gltf|usage|help|version/i);return[{kind:"fbx2gltf-cli",ok:r.ok,detail:r.detail}]}return[]}function xde(n){let e=dK.find(t=>t.id===n);if(!e)throw new Error(`Unknown converter command id: ${n}`);return e}function Rde(n){var s,a,o,l;let e=(a=(s=ke==null?void 0:ke.env)==null?void 0:s.ProgramFiles)==null?void 0:a.toLowerCase(),t=(l=(o=ke==null?void 0:ke.env)==null?void 0:o["ProgramFiles(x86)"])==null?void 0:l.toLowerCase(),i=[],r=[];for(let c of n.knownCandidates){let f=c.toLowerCase(),h=(ke==null?void 0:ke.platform)==="win32"&&((e?f.startsWith(e):!1)||(t?f.startsWith(t):!1)),d=(ke==null?void 0:ke.platform)!=="win32"&&(c.startsWith("/usr/bin/")||c.startsWith("/snap/freecad/current/usr/bin/"));h||d?r.push(c):i.push(c)}return{userCandidates:i,systemCandidates:r}}async function hK(n,e,t){for(let i of e)if(await xO(i))return{id:n.id,label:n.label,envVar:n.envVar,settingsKey:n.settingsKey,command:i,executable:i,args:[],resolvedPath:i,available:!0,source:"candidate",detail:t,checkedCandidates:[i]}}function bde(n,e){let t=[];return n.length&&t.push(`Checked common user locations: ${n.join("; ")}`),e.length&&t.push(`Checked system fallback locations: ${e.join("; ")}`),t.join(". ")}async function DR(n,e,t,i){let r=vde(e);if(Ede(r.executable)){let a=await xO(r.executable);return{id:n.id,label:n.label,envVar:n.envVar,settingsKey:n.settingsKey,configuredCommand:i,command:e,executable:r.executable,args:r.args,resolvedPath:a?r.executable:void 0,available:a,source:t,detail:a?`Using ${LR(t)} path.`:"Configured path was not found or is not executable.",checkedCandidates:[r.executable]}}let s=await Tde(r.executable);return{id:n.id,label:n.label,envVar:n.envVar,settingsKey:n.settingsKey,configuredCommand:i,command:e,executable:r.executable,args:r.args,resolvedPath:s,available:!!s,source:t,detail:s?`Resolved from ${LR(t)} via PATH lookup.`:"Command name was not found on PATH.",checkedCandidates:[r.executable]}}function LR(n){switch(n){case"settings":return"plugin settings";case"env":return"environment variable";case"candidate":return"known install location";case"path":return"PATH fallback"}}async function uK(n,e){var d,u,m;let t=xde(n),{userCandidates:i,systemCandidates:r}=Rde(t),s=vO(e);if(s)return DR(t,s,"settings",s);let a=vO((d=ke==null?void 0:ke.env)==null?void 0:d[t.envVar]);if(a)return DR(t,a,"env");for(let _ of(u=t.envVarAliases)!=null?u:[]){let p=vO((m=ke==null?void 0:ke.env)==null?void 0:m[_]);if(p)return DR(t,p,"env")}let o=await hK(t,i,"Detected at a common user-managed install location.");if(o)return o;let l=[];for(let _ of t.fallbackCommands){let p=await DR(t,_,"path");if(l.push(p),p.available)return p}let c=await hK(t,r,"Detected at a system fallback install location.");if(c)return c;let f=l.flatMap(_=>_.checkedCandidates),h=bde(i,r);return{...l[0],detail:h?`Command name was not found on PATH. ${h}`:"Command name was not found on PATH.",checkedCandidates:[...i,...f,...r]}}async function OR(n){let e=await Promise.all(dK.map(t=>uK(t.id,n[t.settingsKey])));return Promise.all(e.map(async t=>({...t,dependencyChecks:await Ade(t)})))}async function Qn(n,e){var i;let t=await uK(n,e);return{command:(i=t.resolvedPath)!=null?i:t.executable,args:[...t.args]}}var ke,ude,dK,Xf=C(()=>{"use strict";ir();ir();ir();ke=Xg(),ude=[".exe",".cmd",".bat",".com"];dK=[{id:"freecad",label:"Python (CadQuery/OCCT)",settingsKey:"freecadCommand",envVar:"AI3D_FREECAD_CMD",fallbackCommands:(ke==null?void 0:ke.platform)==="win32"?["py","python"]:["python3","python"],knownCandidates:(ke==null?void 0:ke.platform)==="win32"?[]:["/usr/local/bin/python3","/opt/homebrew/bin/python3","/opt/local/bin/python3","/usr/bin/python3"]},{id:"obj2gltf",label:"obj2gltf",settingsKey:"obj2gltfCommand",envVar:"AI3D_OBJ2GLTF_CMD",fallbackCommands:(ke==null?void 0:ke.platform)==="win32"?["obj2gltf.cmd"]:["obj2gltf"],knownCandidates:(ke==null?void 0:ke.platform)==="win32"?pde("obj2gltf.cmd"):SO("obj2gltf")},{id:"fbx2gltf",label:"FBX2glTF",settingsKey:"fbx2gltfCommand",envVar:"AI3D_FBX2GLTF_CMD",fallbackCommands:(ke==null?void 0:ke.platform)==="win32"?["FBX2glTF.exe"]:["FBX2glTF","fbx2gltf"],knownCandidates:(ke==null?void 0:ke.platform)==="win32"?_de(Gi("FBX2glTF","FBX2glTF-windows-x64.exe"),Gi("FBX2glTF","FBX2glTF.exe")):SO("FBX2glTF","fbx2gltf")},{id:"assimp",label:"Python (trimesh)",settingsKey:"assimpCommand",envVar:"AI3D_ASSIMP_CMD",fallbackCommands:(ke==null?void 0:ke.platform)==="win32"?["py","python"]:["python3","python"],knownCandidates:(ke==null?void 0:ke.platform)==="win32"?[]:["/usr/local/bin/python3","/opt/homebrew/bin/python3","/opt/local/bin/python3","/usr/bin/python3"]},{id:"freecadcmd",label:"FreeCAD (SLDPRT)",settingsKey:"freecadcmdCommand",envVar:"AI3D_FREECADCMD",envVarAliases:["AI3D_FREECMDCMD"],fallbackCommands:(ke==null?void 0:ke.platform)==="win32"?["FreeCADCmd.exe"]:["freecadcmd","FreeCADCmd"],knownCandidates:mde()}]});function Tc(n){if(n.includes('"'))throw new Error(`File path contains double-quote character, not supported for Python conversion: ${n}`);return n.replace(/\\/g,"/")}var NR=C(()=>{"use strict"});async function Cde(n){try{return await Jn(n,es),!0}catch(e){return!1}}function yde(n,e,t){return new Promise((i,r)=>{ia(n,e,{timeout:t,windowsHide:!0,maxBuffer:50*1024*1024},(s,a,o)=>{if(!s){i();return}let l=(a!=null?a:"").toString().trim(),c=(o!=null?o:"").toString().trim(),f=[`CAD conversion failed: ${s.message}`,l?`stdout: ${l}`:"",c?`stderr: ${c}`:""].filter(Boolean);r(new Error(f.join(" | ")))})})}function Pde(n,e,t){let i=Tc(n),r=Tc(e),s=t.toLowerCase().replace(/^\./,""),a=s==="step"||s==="stp",o=s==="iges"||s==="igs",l=["import cadquery as cq","import trimesh","import trimesh.visual","import numpy as np","import sys","import os","",`src = r"${i}"`,`out = r"${r}"`,""];return a?l.push("from OCP.STEPCAFControl import STEPCAFControl_Reader","from OCP.STEPControl import STEPControl_Reader","from OCP.XCAFDoc import XCAFDoc_DocumentTool, XCAFDoc_ColorType, XCAFDoc_ShapeTool","from OCP.TDocStd import TDocStd_Document","from OCP.TCollection import TCollection_ExtendedString","from OCP.Quantity import Quantity_Color","from OCP.TDF import TDF_ChildIterator"):o&&l.push("from OCP.IGESControl import IGESControl_Reader"),l.push("from OCP.TopoDS import TopoDS","from OCP.TopAbs import TopAbs_FACE","from OCP.TopExp import TopExp_Explorer","from OCP.BRep import BRep_Tool","from OCP.BRepMesh import BRepMesh_IncrementalMesh","from OCP.TopLoc import TopLoc_Location","from OCP.IFSelect import IFSelect_RetDone"),a||l.push("from OCP.BRepTools import BRepTools"),l.push("","DEFAULT_COLOR = [180, 180, 180, 255]","","def triangulate_face(face, linear=0.1, angular=0.5):"," BRepMesh_IncrementalMesh(face, linear, False, angular, True)"," loc = TopLoc_Location()"," tri = BRep_Tool.Triangulation_s(face, loc)"," if tri is None:"," return None, None"," n = tri.NbNodes()"," verts = []"," for i in range(1, n + 1):"," p = tri.Node(i)"," if not loc.IsIdentity():"," p = p.Transformed(loc.Transformation())"," verts.append([p.X(), p.Y(), p.Z()])"," ntri = tri.NbTriangles()"," faces = []"," for i in range(1, ntri + 1):"," t = tri.Triangle(i)"," n1, n2, n3 = t.Get()"," faces.append([n1 - 1, n2 - 1, n3 - 1])"," return verts, faces"),a&&l.push("","def build_xde_color_lookup(step_path):",' """Load XDE with STEPCAFControl, extract per-face colors via surface signature."""'," from OCP.BRepAdaptor import BRepAdaptor_Surface"," lookup = {}"," try:"," reader = STEPCAFControl_Reader()"," reader.SetColorMode(True)"," reader.SetNameMode(True)"," status = reader.ReadFile(step_path)"," if status != IFSelect_RetDone:"," return lookup"," doc = TDocStd_Document(TCollection_ExtendedString('XmlOcaf'))"," reader.Transfer(doc)"," shape_tool = XCAFDoc_DocumentTool.ShapeTool_s(doc.Main())"," color_tool = XCAFDoc_DocumentTool.ColorTool_s(doc.Main())",""," def walk(label):"," if XCAFDoc_ShapeTool.IsShape_s(label):"," s = XCAFDoc_ShapeTool.GetShape_s(label)"," if s is not None and s.ShapeType() == TopAbs_FACE:"," c = Quantity_Color()"," if color_tool.GetColor(s, XCAFDoc_ColorType.XCAFDoc_ColorSurf, c):"," face = TopoDS.Face_s(s)"," try:"," adaptor = BRepAdaptor_Surface(face)"," u_r = (adaptor.FirstUParameter(), adaptor.LastUParameter())"," v_r = (adaptor.FirstVParameter(), adaptor.LastVParameter())"," key = (adaptor.GetType(), tuple(round(x, 4) for x in u_r), tuple(round(x, 4) for x in v_r))"," color = (c.Red(), c.Green(), c.Blue())"," if key not in lookup:"," lookup[key] = color"," except Exception:"," pass"," children = TDF_ChildIterator(label)"," while children.More():"," walk(children.Value())"," children.Next()",""," walk(doc.Main())"," except Exception as e:",' print(f"XDE color extraction failed: {e}", file=sys.stderr)'," return lookup","","def get_face_color(face, color_lookup):",' """Match a geometry face to an XDE face via surface signature, return color."""'," from OCP.BRepAdaptor import BRepAdaptor_Surface"," try:"," adaptor = BRepAdaptor_Surface(face)"," u_r = (adaptor.FirstUParameter(), adaptor.LastUParameter())"," v_r = (adaptor.FirstVParameter(), adaptor.LastVParameter())"," key = (adaptor.GetType(), tuple(round(x, 4) for x in u_r), tuple(round(x, 4) for x in v_r))"," return color_lookup.get(key)"," except Exception:"," return None"),l.push(""),a?l.push("# STEP: build XDE color lookup + load geometry","color_lookup = build_xde_color_lookup(src)",'print(f"XDE color lookup: {len(color_lookup)} surface signatures")',"","sr = STEPControl_Reader()","status = sr.ReadFile(src)","if status != IFSelect_RetDone:",' print(f"Failed to read STEP file: {src}", file=sys.stderr)'," sys.exit(1)","sr.TransferRoots()","shape = sr.OneShape()"):o?l.push("# IGES: load geometry (no XDE color support for IGES)","ir = IGESControl_Reader()","status = ir.ReadFile(src)","if status != IFSelect_RetDone:",' print(f"Failed to read IGES file: {src}", file=sys.stderr)'," sys.exit(1)","ir.TransferRoots()","shape = ir.OneShape()"):l.push("# BREP: load geometry from native OpenCascade format","from OCP.TopoDS import TopoDS_Shape","from OCP.BRep import BRep_Builder","shape = TopoDS_Shape()","builder = BRep_Builder()","success = BRepTools.Read_s(shape, src, builder)","if not success:",' print(f"Failed to read BREP file: {src}", file=sys.stderr)'," sys.exit(1)"),l.push("","all_verts = []","all_faces = []","all_colors = []","matched_count = 0","total_faces = 0","","exp = TopExp_Explorer(shape, TopAbs_FACE)","while exp.More():"," face = TopoDS.Face_s(exp.Current())"," total_faces += 1"," verts, faces = triangulate_face(face)"," if verts and faces:"," offset = len(all_verts)"," all_verts.extend(verts)"," for tri in faces:"," all_faces.append([tri[0] + offset, tri[1] + offset, tri[2] + offset])"),a?l.push(" color = get_face_color(face, color_lookup)"," if color:"," matched_count += 1"," r, g, b = color"," rgba = [int(r * 255), int(g * 255), int(b * 255), 255]"," else:"," rgba = DEFAULT_COLOR"):l.push(" rgba = DEFAULT_COLOR"),l.push(" n = len(verts)"," all_colors.extend([rgba] * n)"," exp.Next()","",'print(f"Triangulated: {total_faces} faces, {len(all_verts)} verts, {matched_count} colored ({matched_count*100//max(total_faces,1)}%)")',"","if not all_verts or not all_faces:"," # Fallback: use CadQuery import (works for STEP/IGES, not BREP)"),a?l.push(" cq_shape = cq.importers.importStep(src)"):o?l.push(" cq_shape = cq.importers.importStep(src) # CadQuery reads IGES via importStep"):l.push(" cq_shape = cq.importers.importStep(src) # CadQuery BREP import"),l.push(" cq.exporters.export(cq_shape, out, exportType='STL')"," mesh = trimesh.load(out)"," data = mesh.export(file_type='glb')"," if isinstance(data, str):"," with open(data, 'rb') as f:"," data = f.read()"," with open(out, 'wb') as f:"," f.write(data)",' print(f"Fallback CadQuery STL->GLB: {out} ({len(data)} bytes)")'," sys.exit(0)","","verts_arr = np.array(all_verts, dtype=float)","faces_arr = np.array(all_faces, dtype=int)","colors_arr = np.array(all_colors, dtype=np.uint8)","","mesh = trimesh.Trimesh("," vertices=verts_arr,"," faces=faces_arr,"," visual=trimesh.visual.ColorVisuals(vertex_colors=colors_arr),"," process=True,",")","mesh.fix_normals()","scene = trimesh.Scene([mesh])","","result = scene.export(file_type='glb')","if isinstance(result, bytes):"," data = result","elif isinstance(result, str):"," with open(result, 'rb') as f:"," data = f.read()","else:"," data = bytes(result)","","with open(out, 'wb') as f:"," f.write(data)","","print(f'Converted {src} -> {out} ({len(data)} bytes, {matched_count}/{total_faces} colored faces)')"),l.join(` +`)}var Ide,Mde,wR,mK=C(()=>{"use strict";ir();ir();ir();ir();Zn();Xf();NR();Ide=cr("freecad-converter"),Mde=300*1e3;wR=class{constructor(e){this.configuredCommand=e;this.id="freecad";this.sourceExts=["step","stp","iges","igs","brep"];this.targetExt="glb"}async getCacheKey(){let e=await Qn(this.id,this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!Bn(e.sourcePath))throw new Error(`Converter '${this.id}' requires an absolute source path, got '${e.sourcePath}'. Pass a file-system path to the conversion pipeline when invoking CAD conversion.`);let t=await Qn(this.id,this.configuredCommand),i=Ao(e.sourcePath),r=xo(e.sourcePath,ta(e.sourcePath)),s=Gi(i,`${r}.ai3d-converted.glb`),a=Gi(xd(),"ai3d-freecad"),o=Gi(a,`${r}-${Date.now()}.py`);await Td(a,{recursive:!0}),await Sd(o,Pde(e.sourcePath,s,e.sourceExt),"utf8"),Ide.info("run CAD conversion (CadQuery/OCCT)",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{await yde(t.command,[...t.args,o],Mde)}catch(c){throw new Error(`CAD conversion failed for '${e.sourcePath}'. Ensure Python with cadquery is installed: pip install cadquery trimesh. Set Python command path in plugin settings or AI3D_FREECAD_CMD if Python is not discoverable. ${c instanceof Error?c.message:String(c)}`)}finally{Ad(o,{force:!0})}if(!await Cde(s))throw new Error(`CAD conversion finished but output was not found: '${s}'. Check that CadQuery supports this CAD format.`);if((await ea(s)).byteLength===0)throw new Error(`CAD conversion output is empty: '${s}'.`);return{outputPath:s,outputExt:"glb",fromCache:!1,warnings:["Converted by local Python/CadQuery(OCCT) bridge."]}}}});async function Ode(n){try{return await Jn(n,es),!0}catch(e){return!1}}function Nde(n,e,t){return new Promise((i,r)=>{ia(n,e,{timeout:t,windowsHide:!0,maxBuffer:50*1024*1024},(s,a,o)=>{if(!s){i();return}let l=(a!=null?a:"").toString().trim(),c=(o!=null?o:"").toString().trim(),f=[`obj2gltf command failed: ${s.message}`,l?`stdout: ${l}`:"",c?`stderr: ${c}`:""].filter(Boolean);r(new Error(f.join(" | ")))})})}var Dde,Lde,FR,pK=C(()=>{"use strict";ir();ir();ir();Zn();Xf();Dde=cr("obj2gltf-converter"),Lde=180*1e3;FR=class{constructor(e){this.configuredCommand=e;this.id="obj2gltf";this.sourceExts=["obj"];this.targetExt="glb"}async getCacheKey(){let e=await Qn(this.id,this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!Bn(e.sourcePath))throw new Error(`Converter '${this.id}' requires an absolute source path, got '${e.sourcePath}'. Pass a file-system path to the conversion pipeline when invoking obj2gltf.`);let t=await Qn(this.id,this.configuredCommand),i=Ao(e.sourcePath),r=xo(e.sourcePath,ta(e.sourcePath)),s=Gi(i,`${r}.ai3d-converted.glb`);Dde.info("run obj2gltf conversion",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{await Nde(t.command,[...t.args,"-i",e.sourcePath,"-o",s,"-b"],Lde)}catch(o){throw new Error(`obj2gltf conversion failed for '${e.sourcePath}'. Set obj2gltf command path in plugin settings or AI3D_OBJ2GLTF_CMD if obj2gltf is not discoverable. ${o instanceof Error?o.message:String(o)}`)}if(!await Ode(s))throw new Error(`obj2gltf conversion finished but output was not found: '${s}'.`);if((await ea(s)).byteLength===0)throw new Error(`obj2gltf output file is empty: '${s}'.`);return{outputPath:s,outputExt:"glb",fromCache:!1,warnings:["Converted by local obj2gltf CLI bridge."]}}}});async function Bde(n){try{return await Jn(n,es),!0}catch(e){return!1}}function Ude(n,e,t){return new Promise((i,r)=>{ia(n,e,{timeout:t,windowsHide:!0,maxBuffer:50*1024*1024},(s,a,o)=>{if(!s){i();return}let l=(a!=null?a:"").toString().trim(),c=(o!=null?o:"").toString().trim(),f=[`FBX2glTF command failed: ${s.message}`,l?`stdout: ${l}`:"",c?`stderr: ${c}`:""].filter(Boolean);r(new Error(f.join(" | ")))})})}var wde,Fde,BR,_K=C(()=>{"use strict";ir();ir();ir();Zn();Xf();wde=cr("fbx2gltf-converter"),Fde=180*1e3;BR=class{constructor(e){this.configuredCommand=e;this.id="fbx2gltf";this.sourceExts=["fbx"];this.targetExt="glb"}async getCacheKey(){let e=await Qn(this.id,this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!Bn(e.sourcePath))throw new Error(`Converter '${this.id}' requires an absolute source path, got '${e.sourcePath}'. Pass a file-system path to the conversion pipeline when invoking FBX2glTF.`);let t=await Qn(this.id,this.configuredCommand),i=Ao(e.sourcePath),r=xo(e.sourcePath,ta(e.sourcePath)),s=Gi(i,`${r}.ai3d-converted.glb`);wde.info("run FBX2glTF conversion",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{await Ude(t.command,[...t.args,"-i",e.sourcePath,"-o",s,"-b"],Fde)}catch(o){throw new Error(`FBX2glTF conversion failed for '${e.sourcePath}'. Set FBX2glTF command path in plugin settings or AI3D_FBX2GLTF_CMD if FBX2glTF is not discoverable. ${o instanceof Error?o.message:String(o)}`)}if(!await Bde(s))throw new Error(`FBX2glTF conversion finished but output was not found: '${s}'.`);if((await ea(s)).byteLength===0)throw new Error(`FBX2glTF output file is empty: '${s}'.`);return{outputPath:s,outputExt:"glb",fromCache:!1,warnings:["Converted by local FBX2glTF CLI bridge."]}}}});async function kde(n){try{return await Jn(n,es),!0}catch(e){return!1}}function Wde(n,e,t){return new Promise((i,r)=>{ia(n,e,{timeout:t,windowsHide:!0,maxBuffer:50*1024*1024},(s,a,o)=>{if(!s){i();return}let l=(a!=null?a:"").toString().trim(),c=(o!=null?o:"").toString().trim(),f=[`mesh conversion failed: ${s.message}`,l?`stdout: ${l}`:"",c?`stderr: ${c}`:""].filter(Boolean);r(new Error(f.join(" | ")))})})}function Hde(n,e){let t=Tc(n),i=Tc(e);return["import trimesh","import sys","",`src = r"${t}"`,`out = r"${i}"`,"","try:"," loaded = trimesh.load(src, force=None)","except Exception as e:",' print(f"Failed to load {src}: {e}", file=sys.stderr)'," sys.exit(1)","","if isinstance(loaded, trimesh.Scene):"," scene = loaded","elif isinstance(loaded, trimesh.Trimesh):"," scene = trimesh.Scene([loaded])","else:",' print(f"Unsupported type: {type(loaded)}", file=sys.stderr)'," sys.exit(1)","","try:"," data = scene.export(file_type='glb')","except Exception as e:",' print(f"Failed to export GLB: {e}", file=sys.stderr)'," sys.exit(1)","","with open(out, 'wb') as f:"," f.write(data)","","print(f'Converted {src} -> {out} ({len(data)} bytes)')"].join(` +`)}var Vde,Gde,UR,gK=C(()=>{"use strict";ir();ir();ir();ir();Zn();Xf();NR();Vde=cr("assimp-converter"),Gde=300*1e3;UR=class{constructor(e){this.configuredCommand=e;this.id="assimp";this.sourceExts=["3mf","dae"];this.targetExt="glb"}async getCacheKey(){let e=await Qn(this.id,this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!Bn(e.sourcePath))throw new Error(`Converter '${this.id}' requires an absolute source path, got '${e.sourcePath}'. Pass a file-system path to the conversion pipeline when invoking mesh conversion.`);let t=await Qn(this.id,this.configuredCommand),i=Ao(e.sourcePath),r=xo(e.sourcePath,ta(e.sourcePath)),s=Gi(i,`${r}.ai3d-converted.glb`),a=Gi(xd(),"ai3d-mesh-convert"),o=Gi(a,`${r}-${Date.now()}.py`);await Td(a,{recursive:!0}),await Sd(o,Hde(e.sourcePath,s),"utf8"),Vde.info("run mesh conversion (trimesh)",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{await Wde(t.command,[...t.args,o],Gde)}catch(c){throw new Error(`Mesh conversion failed for '${e.sourcePath}'. Ensure Python with trimesh is installed: pip install trimesh numpy networkx pycollada. Set Python command path in plugin settings or AI3D_ASSIMP_CMD if Python is not discoverable. ${c instanceof Error?c.message:String(c)}`)}finally{Ad(o,{force:!0})}if(!await kde(s))throw new Error(`Mesh conversion finished but output was not found: '${s}'. Check that trimesh supports this format.`);if((await ea(s)).byteLength===0)throw new Error(`Mesh conversion output is empty: '${s}'.`);return{outputPath:s,outputExt:"glb",fromCache:!1,warnings:["Converted by local Python/trimesh bridge."]}}}});async function Xde(n){try{return await Jn(n,es),!0}catch(e){return!1}}function Yde(n,e,t){return new Promise((i,r)=>{ia(n,e,{timeout:t,windowsHide:!0,maxBuffer:50*1024*1024},(s,a,o)=>{if(!s){i({stdout:a!=null?a:"",stderr:o!=null?o:""});return}let l=(a!=null?a:"").toString().trim(),c=(o!=null?o:"").toString().trim(),f=[`SLDPRT conversion failed: ${s.message}`,l?`stdout: ${l}`:"",c?`stderr: ${c}`:""].filter(Boolean);r(new Error(f.join(" | ")))})})}function Kde(n,e){let t=Tc(n),i=Tc(e),r=i.replace(/\.glb$/i,".intermediate.step");return["import sys","import os","",`src = r"${t}"`,`out = r"${i}"`,`step_out = r"${r}"`,"","# Step 1: Import SLDPRT via FreeCAD","try:"," import FreeCAD"," import ImportGui"," import Mesh","except ImportError as e:",' print(f"FreeCAD modules not available: {e}", file=sys.stderr)',' print("Ensure this script runs under FreeCADCmd (not system Python).", file=sys.stderr)'," sys.exit(1)","","print(f'Opening SLDPRT: {src}')","try:"," doc = FreeCAD.newDocument('Convert')"," ImportGui.open(src, doc.Name)","except Exception as e:",' print(f"Failed to open SLDPRT file: {e}", file=sys.stderr)'," sys.exit(1)","","if not doc.Objects:",' print("SLDPRT file imported but contains no objects", file=sys.stderr)'," sys.exit(1)","",'print(f"Imported {len(doc.Objects)} object(s) from SLDPRT")',"","# Step 2: Export to STEP (intermediate)","try:"," import Import"," objs = [o for o in doc.Objects if hasattr(o, 'Shape')]"," if not objs:",' print("No shape objects found after import", file=sys.stderr)'," sys.exit(1)"," Import.export(objs, step_out)",' print(f"Exported intermediate STEP: {step_out}")',"except Exception as e:",' print(f"Failed to export STEP: {e}", file=sys.stderr)'," sys.exit(1)","","FreeCAD.closeDocument(doc.Name)","","# Step 3: Convert STEP to GLB using OCP (same pipeline as FreecadConverter)","import trimesh","import trimesh.visual","import numpy as np","","from OCP.STEPControl import STEPControl_Reader","from OCP.TopoDS import TopoDS","from OCP.TopAbs import TopAbs_FACE","from OCP.TopExp import TopExp_Explorer","from OCP.BRep import BRep_Tool","from OCP.BRepMesh import BRepMesh_IncrementalMesh","from OCP.TopLoc import TopLoc_Location","from OCP.IFSelect import IFSelect_RetDone","","DEFAULT_COLOR = [180, 180, 180, 255]","","def triangulate_face(face, linear=0.1, angular=0.5):"," BRepMesh_IncrementalMesh(face, linear, False, angular, True)"," loc = TopLoc_Location()"," tri = BRep_Tool.Triangulation_s(face, loc)"," if tri is None:"," return None, None"," n = tri.NbNodes()"," verts = []"," for i in range(1, n + 1):"," p = tri.Node(i)"," if not loc.IsIdentity():"," p = p.Transformed(loc.Transformation())"," verts.append([p.X(), p.Y(), p.Z()])"," ntri = tri.NbTriangles()"," faces = []"," for i in range(1, ntri + 1):"," t = tri.Triangle(i)"," n1, n2, n3 = t.Get()"," faces.append([n1 - 1, n2 - 1, n3 - 1])"," return verts, faces","","sr = STEPControl_Reader()","status = sr.ReadFile(step_out)","if status != IFSelect_RetDone:",' print(f"Failed to read intermediate STEP: {step_out}", file=sys.stderr)'," sys.exit(1)","sr.TransferRoots()","shape = sr.OneShape()","","all_verts = []","all_faces = []","all_colors = []","total_faces = 0","","exp = TopExp_Explorer(shape, TopAbs_FACE)","while exp.More():"," face = TopoDS.Face_s(exp.Current())"," total_faces += 1"," verts, faces = triangulate_face(face)"," if verts and faces:"," offset = len(all_verts)"," all_verts.extend(verts)"," for tri in faces:"," all_faces.append([tri[0] + offset, tri[1] + offset, tri[2] + offset])"," all_colors.extend([DEFAULT_COLOR] * len(verts))"," exp.Next()","","if not all_verts or not all_faces:",' print(f"No geometry extracted from STEP ({total_faces} faces scanned)", file=sys.stderr)'," sys.exit(1)","",'print(f"Triangulated: {total_faces} faces, {len(all_verts)} verts")',"","verts_arr = np.array(all_verts, dtype=float)","faces_arr = np.array(all_faces, dtype=int)","colors_arr = np.array(all_colors, dtype=np.uint8)","","mesh = trimesh.Trimesh("," vertices=verts_arr,"," faces=faces_arr,"," visual=trimesh.visual.ColorVisuals(vertex_colors=colors_arr),"," process=True,",")","mesh.fix_normals()","scene = trimesh.Scene([mesh])","","result = scene.export(file_type='glb')","if isinstance(result, bytes):"," data = result","elif isinstance(result, str):"," with open(result, 'rb') as f:"," data = f.read()","else:"," data = bytes(result)","","with open(out, 'wb') as f:"," f.write(data)","","# Cleanup intermediate STEP","try:"," os.remove(step_out)","except OSError:"," pass","","print(f'Converted {src} -> {out} ({len(data)} bytes, {total_faces} faces)')"].join(` +`)}var RO,zde,VR,vK=C(()=>{"use strict";ir();ir();ir();ir();Zn();Xf();NR();RO=cr("sldprt-converter"),zde=600*1e3;VR=class{constructor(e){this.configuredCommand=e;this.id="sldprt";this.sourceExts=["sldprt"];this.targetExt="glb"}async getCacheKey(){let e=await Qn("freecadcmd",this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!Bn(e.sourcePath))throw new Error(`Converter '${this.id}' requires an absolute source path, got '${e.sourcePath}'. Pass a file-system path to the conversion pipeline when invoking SLDPRT conversion.`);let t=await Qn("freecadcmd",this.configuredCommand),i=Ao(e.sourcePath),r=xo(e.sourcePath,ta(e.sourcePath)),s=Gi(i,`${r}.ai3d-converted.glb`),a=Gi(xd(),"ai3d-sldprt"),o=Gi(a,`${r}-${Date.now()}.py`);await Td(a,{recursive:!0}),await Sd(o,Kde(e.sourcePath,s),"utf8"),RO.info("run SLDPRT conversion (FreeCAD + OCP)",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{let{stdout:c,stderr:f}=await Yde(t.command,[...t.args,o],zde);c&&RO.info("FreeCAD stdout",{stdout:c.trim().slice(0,500)}),f&&RO.warn("FreeCAD stderr",{stderr:f.trim().slice(0,500)})}catch(c){throw new Error(`SLDPRT conversion failed for '${e.sourcePath}'. Ensure FreeCAD is installed (https://www.freecad.org/downloads.php). Set FreeCADCmd path in plugin settings or AI3D_FREECADCMD env var. ${c instanceof Error?c.message:String(c)}`)}finally{Ad(o,{force:!0})}if(!await Xde(s))throw new Error(`SLDPRT conversion finished but output was not found: '${s}'. Check that FreeCAD can import this SolidWorks file version.`);if((await ea(s)).byteLength===0)throw new Error(`SLDPRT conversion output is empty: '${s}'.`);return{outputPath:s,outputExt:"glb",fromCache:!1,warnings:["Converted by local FreeCAD + OpenCASCADE bridge."]}}}});function cd(n){var r;let e=new PR,t=new Set((r=n==null?void 0:n.enabledConverterIds)!=null?r:[]);bO.debug("create conversion manager",{enabledConverterIds:[...t]});let i=[new wR(n==null?void 0:n.freecadCommand),new FR(n==null?void 0:n.obj2gltfCommand),new BR(n==null?void 0:n.fbx2gltfCommand),new UR(n==null?void 0:n.assimpCommand),new VR(n==null?void 0:n.freecadcmdCommand)];for(let s of i)t.has(s.id)?(e.registerConverter(s),bO.info("enabled converter",{converterId:s.id})):bO.debug("converter disabled",{converterId:s.id});return e}var bO,GR=C(()=>{"use strict";fK();mK();pK();_K();gK();vK();Zn();bO=cr("conversion-factory")});function EK(n){let e=Oa(n.sourceExt),t=[];return e!==n.sourceExt&&t.push(`Normalized extension '${n.sourceExt}' -> '${e}'.`),jde.debug("prepare direct load",{path:n.path,sourceExt:n.sourceExt,normalizedExt:e,warningCount:t.length}),{effectivePath:n.path,effectiveExt:e,warnings:t}}var jde,SK=C(()=>{"use strict";To();Zn();jde=cr("direct-load-service")});function kR(n){return`.${n.trim().toLowerCase()}`}function $m(n){return n instanceof fd}function IO(n){var e;if(n instanceof fd){let t=(e=qde[n.converterId])!=null?e:n.converterId;return fr("modelLoad.warningMessage",{ext:kR(n.sourceExt),converterName:t})}return n instanceof Qm?fr("modelLoad.mobileWarningMessage",{ext:kR(n.sourceExt)}):fr("modelLoad.errorMessage",{reason:n instanceof Error?n.message:String(n)})}function Jm(n){return n instanceof fd?{level:"warning",title:ee("modelLoad.warningTitle"),message:IO(n),hint:ee("modelLoad.warningHint")}:n instanceof Qm?{level:"warning",title:ee("modelLoad.warningTitle"),message:IO(n),hint:ee("modelLoad.mobileWarningHint")}:{level:"error",title:ee("modelLoad.errorTitle"),message:IO(n),hint:ee("modelLoad.errorHint")}}var qde,fd,Qm,ep=C(()=>{"use strict";Js();qde={freecad:"FreeCAD",obj2gltf:"obj2gltf",fbx2gltf:"FBX2glTF",assimp:"mesh",sldprt:"SolidWorks"};fd=class extends Error{constructor(t,i){super(`Converter '${t}' is not registered for ${kR(i)}. Enable the matching converter in plugin settings before loading this format.`);this.converterId=t;this.sourceExt=i;this.name="MissingConverterError"}},Qm=class extends Error{constructor(t){super(`Format ${kR(t)} requires local conversion tools that are unavailable on iOS, iPadOS, and Android.`);this.sourceExt=t;this.name="MobileConversionUnavailableError"}}});function Qde(n,e,t){return n.converterId!==e?!1:t?n.converterId===t.converterId&&n.converterCacheKey===t.cacheKey:!0}async function $de(n){if(!n)return!1;try{return await Jn(n,es),!0}catch(e){return!1}}async function TK(n){var a,o,l,c,f,h,d;if(n.capability.strategy!=="convert")throw new Error(`Expected convert strategy, got '${n.capability.strategy}'.`);let e=n.capability.converterId,t=(a=n.capability.outputFormat)!=null?a:"glb";if(!e)throw new Error(`Format .${n.sourceExt} does not define a converter id.`);wg.info("prepare conversion route",{sourcePath:n.sourcePath,sourceExt:n.sourceExt,targetExt:t,converterId:e});let i=n.conversionManager.canConvert(n.sourceExt)?await n.conversionManager.getConverterCacheIdentity(n.sourceExt):void 0,r=(o=n.convertedAssetCache)==null?void 0:o.get(n.sourcePath,n.sourceExt,t);if(r)if(!await $de(r.outputPath))wg.warn("conversion cache stale",{sourcePath:n.sourcePath,sourceExt:n.sourceExt,targetExt:t,outputPath:r.outputPath}),(l=n.convertedAssetCache)==null||l.delete(n.sourcePath,n.sourceExt,t);else if(!Qde(r,e,i))wg.warn("conversion cache identity mismatch",{sourcePath:n.sourcePath,sourceExt:n.sourceExt,targetExt:t,cachedConverterId:r.converterId,cachedConverterCacheKey:r.converterCacheKey,currentConverterId:(c=i==null?void 0:i.converterId)!=null?c:e,currentConverterCacheKey:i==null?void 0:i.cacheKey}),(f=n.convertedAssetCache)==null||f.delete(n.sourcePath,n.sourceExt,t);else return wg.info("conversion cache hit",{sourcePath:n.sourcePath,sourceExt:n.sourceExt,targetExt:t,outputPath:r.outputPath}),{effectivePath:r.outputPath,effectiveExt:r.outputExt,warnings:[...r.warnings,"Using cached conversion output."]};if(!n.conversionManager.canConvert(n.sourceExt))throw new fd(e,n.sourceExt);let s=await n.conversionManager.convert({sourcePath:n.sourcePath,sourceExt:n.sourceExt,targetExt:t});return(d=n.convertedAssetCache)==null||d.set({cacheVersion:2,converterId:e,converterCacheKey:(h=i==null?void 0:i.cacheKey)!=null?h:e,sourcePath:n.sourcePath,sourceExt:n.sourceExt,targetExt:t,outputPath:s.outputPath,outputExt:s.outputExt,warnings:s.warnings,createdAt:Date.now()}),wg.info("conversion route done",{sourcePath:n.sourcePath,outputPath:s.outputPath,warningCount:s.warnings.length}),{effectivePath:s.outputPath,effectiveExt:s.outputExt,warnings:s.warnings}}var wg,AK=C(()=>{"use strict";sb();Zn();ir();ep();wg=cr("conversion-service")});function Jde(n,e){var t;return!!((t=n.preferConversionExts)!=null&&t.includes(e))}async function hd(n){var a,o;let e=Oa((a=n.path.split(".").pop())!=null?a:""),t=ab(e);if(Ac.info("prepare model input",{path:n.path,sourceExt:e}),!t||!t.enabled)throw Ac.warn("unsupported format",{sourceExt:e,path:n.path}),cp(e)?new Error("SPLAT preview is disabled in packaged builds. Local-only .splat support is planned; .spz and .sog remain unavailable until their decoders can be bundled locally."):new Error(`Unsupported format: .${e}`);let i=Jde(n,e);if(t.strategy==="convert"||i&&!!t.converterId){if(hr())throw Ac.warn("conversion unavailable on mobile",{sourceExt:e,path:n.path}),new Qm(e);if(!n.absolutePath)throw Ac.error("filesystem path missing for conversion",{sourceExt:e,path:n.path}),new Error(`Format .${e} requires a local filesystem path for conversion, but none was resolved for '${n.path}'.`);if(!n.conversionManager)throw Ac.error("conversion manager missing",{sourceExt:e,path:n.path}),new Error(`Format .${e} requires conversion support, but no conversion manager is available.`);let l=t.strategy==="convert"?t:{...t,strategy:"convert",outputFormat:(o=t.outputFormat)!=null?o:"glb"};if(!l.converterId)throw Ac.error("preferred conversion route missing converter id",{sourceExt:e,path:n.path}),new Error(`Format .${e} is configured to prefer conversion, but no converter id is defined.`);i&&t.strategy==="direct"&&Ac.info("preferred conversion route",{sourceExt:e,path:n.path,converterId:l.converterId});let c=await TK({sourcePath:n.absolutePath,sourceExt:e,capability:l,conversionManager:n.conversionManager,convertedAssetCache:n.convertedAssetCache});return Ac.info("conversion completed",{sourceExt:e,outputExt:c.effectiveExt,outputPath:c.effectivePath,warningCount:c.warnings.length}),{sourcePath:n.path,sourceExt:e,strategy:"convert",effectivePath:c.effectivePath,effectiveExt:c.effectiveExt,warnings:c.warnings}}let s=EK({path:n.path,sourceExt:e});return Ac.debug("direct route",{sourceExt:e,path:n.path,warningCount:s.warnings.length}),{sourcePath:n.path,sourceExt:e,strategy:t.strategy,effectivePath:s.effectivePath,effectiveExt:s.effectiveExt,warnings:s.warnings}}var Ac,WR=C(()=>{"use strict";To();SK();AK();ep();Zn();ks();Ac=cr("model-pipeline")});function Fg(n){return{path:n.effectivePath,ext:n.effectiveExt,strategy:n.strategy,sourcePath:n.sourcePath,sourceExt:n.sourceExt,warnings:n.warnings}}var MO=C(()=>{"use strict"});function dd(n){let e=[];return n.preferObj2gltfForObj&&e.push("obj"),n.preferFbx2gltfForFbx&&e.push("fbx"),e}var HR=C(()=>{"use strict"});function Bg(n){return n.replace(/\[\[([^\]|]+)\|([^\]]+)\]\]/g,"$2").replace(/\[\[([^\]]+)\]\]/g,"$1").replace(/\[([^\]]+)\]\([^)]*\)/g,"$1").replace(/[*_~`]+/g,"").replace(/==([^=]+)==/g,"$1").replace(/\s+/g," ").trim()}function eue(n,e){let t=e.toLowerCase().trim();if(!t)return[];let i=[],r=n.vault.getMarkdownFiles();for(let s of r){let a=n.metadataCache.getFileCache(s);if(a!=null&&a.headings)for(let o of a.headings)o.heading.toLowerCase().includes(t)&&i.push({notePath:s.path,heading:o.heading,level:o.level})}return i.slice(0,15)}function RK(n){return e=>eue(n,e)}async function tue(n,e,t){try{let i=n.vault.getAbstractFileByPath(e);if(!(i instanceof xK.TFile))return null;let s=(await n.vault.cachedRead(i)).split(` +`),a=-1,o=0,l=Bg(t);for(let f=0;ftue(n,e,t)}var xK,Ug=C(()=>{"use strict";xK=require("obsidian")});function ud(n){let e=n.createDiv({cls:"ai3d-loading-overlay"}),t=e.createDiv({cls:"ai3d-loading-skeleton"});t.createDiv({cls:"ai3d-loading-skeleton-canvas"});let i=t.createDiv({cls:"ai3d-loading-skeleton-meta"});i.createDiv({cls:"ai3d-loading-skeleton-line"}),i.createDiv({cls:"ai3d-loading-skeleton-line is-short"}),e.createDiv({cls:"ai3d-loading-spinner"});let r=e.createDiv({cls:"ai3d-loading-text"}),s="loading.default",a="",o=()=>{r.textContent=s?ee(s):a};o();let c=e.createDiv({cls:"ai3d-loading-bar-track"}).createDiv({cls:"ai3d-loading-bar-fill is-indeterminate"}),f=!1,h=pN(()=>{!f&&s&&o()});return{el:e,setPhase(d){s=null,a=d,f||o()},setPhaseKey(d){s=d,f||o()},setProgress(d){f||(d<0?(c.className="ai3d-loading-bar-fill is-indeterminate",c.style.removeProperty("--bar-width")):(c.className="ai3d-loading-bar-fill",c.style.setProperty("--bar-width",`${Math.min(100,Math.max(0,d))}%`)))},hide(){f||(f=!0,h(),e.classList.add("is-hiding"),window.setTimeout(()=>e.remove(),300))}}}var zR=C(()=>{"use strict";Js()});function ip(n,e){let t=n.createDiv({cls:"ai3d-inline-empty ai3d-load-feedback-shell"});hr()&&t.classList.add("is-mobile");let i=t.createDiv({cls:`ai3d-load-feedback is-${e.level}`});return i.createDiv({cls:"ai3d-load-feedback-title",text:e.title}),i.createDiv({cls:"ai3d-load-feedback-message",text:e.message}),i.createDiv({cls:"ai3d-load-feedback-hint",text:e.hint}),t}function rp(n,e){var o,l,c,f,h,d,u;if((!e.performanceTier||e.performanceTier==="light")&&!((o=e.resourceWarnings)!=null&&o.length))return null;let t=(l=e.performanceTier)!=null?l:"light",i=((c=e.splatCount)!=null?c:e.triangleCount).toLocaleString(),r=e.splatCount!==void 0?"splats":"triangles",s=n.createDiv({cls:`ai3d-performance-feedback is-${t}`});s.createDiv({cls:"ai3d-performance-feedback-tier",text:(f=e.resourceWarnings)!=null&&f.length?"assets":(h=e.performanceTier)!=null?h:"light"}),s.createDiv({cls:"ai3d-performance-feedback-meta",text:(d=e.resourceWarnings)!=null&&d.length?e.resourceWarnings[0]:`${i} ${r} \xB7 ${e.materialCount.toLocaleString()} materials`});let a=[...(u=e.resourceWarnings)!=null?u:[],...e.performanceHint?[e.performanceHint]:[]];return a.length>0&&(s.title=a.join(` +`)),window.setTimeout(()=>s.classList.add("is-subtle"),4200),s}var XR=C(()=>{"use strict";ks()});function IK(){return typeof performance!="undefined"?performance.now():Date.now()}function np(n,e,t=`${e}s`){return`${n.toLocaleString()} ${n===1?e:t}`}function nue(n){return{stage:"reason",durationMs:Math.max(0,Math.round(IK()-n)),status:"success"}}function sue(n,e){let t=n[0]-e[0],i=n[1]-e[1],r=n[2]-e[2];return Math.sqrt(t*t+i*i+r*r)}function MK(n){var t;let e=(t=n.split(".").pop())==null?void 0:t.trim().toLowerCase();return e==="glb"||e==="gltf"||e==="stl"||e==="obj"||e==="splat"||e==="ply"?e:"glb"}function CO(n){return[n.x,n.y,n.z]}function aue(n,e){return`${Xr(n)||"model"}:part:${e+1}`}function yO(n){return(n!=null?n:"").toLowerCase().replace(/[_\-./\\]+/g," ").replace(/[^\p{L}\p{N}\s]+/gu," ").replace(/\s+/g," ").trim()}function YR(n){return new Set(yO(n).split(" ").filter(e=>e.length>=2))}function bK(n,e){if(n.size===0||e.size===0)return 0;let t=0;for(let i of n)e.has(i)&&(t+=1);return t/Math.max(n.size,e.size)}function oue(n,e){if(!n||!e||n.length<3||e.length<3)return 0;let t=[...n].slice(0,3).map(s=>Math.max(1e-4,Math.abs(s))).sort((s,a)=>s-a),i=[...e].slice(0,3).map(s=>Math.max(1e-4,Math.abs(s))).sort((s,a)=>s-a),r=0;for(let s=0;s<3;s++)r+=Math.min(t[s],i[s])/Math.max(t[s],i[s]);return r/3}function lue(n,e){let t=yO(n),i=yO(e);return!!t&&!!i&&t===i}function cue(n,e){let t=YR(n.name),i=YR(n.meshRefs.join(" "));return e.filter(s=>s.assetId!==n.assetId||s.partId!==n.partId).flatMap(s=>{let a=[],o=bK(t,YR(s.name)),l=bK(i,YR(s.meshRefs.join(" "))),c=oue(n.bbox,s.bbox),f=!!n.category&&!!s.category&&n.category===s.category,h=lue(n.materialName,s.materialName),d=o*.38+l*.22+c*.22;return f&&(d+=.1),h&&(d+=.08),o>=.5&&a.push("similar part name"),l>=.5&&a.push("similar mesh names"),c>=.72&&a.push("similar bounding size"),f&&a.push(`same category: ${n.category}`),h&&n.materialName&&a.push(`same material: ${n.materialName}`),da.matchScore-s.matchScore).slice(0,iue)}function fue(n,e){return e.length===0?n.map(t=>({...t})):n.map(t=>{let i=cue(t,e);return i.length>0?{...t,registeredMatches:i}:{...t}})}function hue(n){var t;let e=n.name.toLowerCase();return n.source==="group"?"group":e.includes("wheel")||e.includes("gear")||e.includes("axle")?"mechanical":e.includes("shell")||e.includes("case")||e.includes("cover")||e.includes("housing")?"enclosure":e.includes("button")||e.includes("key")||e.includes("switch")?"control":e.includes("glass")||e.includes("screen")||e.includes("lens")?"surface":(t=n.materialName)!=null&&t.toLowerCase().includes("metal")?"material-driven":"unclassified"}function due(n){var t,i,r;let e=[];return n.source==="group"&&e.push(`Registered from model group with ${np((r=(i=n.childCount)!=null?i:(t=n.meshNames)==null?void 0:t.length)!=null?r:0,"child mesh","child meshes")}.`),e.push(`${np(n.triangleCount,"triangle")} and ${np(n.vertexCount,"vertex")}.`,`Bounding size ${n.boundingSize.x.toFixed(3)} x ${n.boundingSize.y.toFixed(3)} x ${n.boundingSize.z.toFixed(3)}.`),n.materialName&&e.push(`Uses material "${n.materialName}".`),e}function PO(n,e){return e.map((t,i)=>{var r;return{partId:aue(n,i),assetId:n,name:t.name||`Part ${i+1}`,source:t.source,category:hue(t),meshRefs:(r=t.meshNames)!=null&&r.length?[...t.meshNames]:[t.name||`mesh-${i+1}`],childCount:t.childCount,materialRefs:t.materialName?[t.materialName]:[],bbox:CO(t.boundingSize),center:CO(t.center),triangleCount:t.triangleCount,vertexCount:t.vertexCount,materialName:t.materialName,confidence:t.source==="group"?.72:t.name?.55:.35,observations:due(t),inferredFunctions:[],knowledgeTags:[],reviewed:!1}})}function uue(n,e,t,i,r){var o;let s=[],a=t==null?void 0:t.summary;a&&s.push({id:`${n}:geometry`,title:"Geometry overview",domain:"geometry",summary:`${np(a.meshCount,"mesh")}, ${np(a.triangleCount,"triangle")}, ${np(a.materialCount,"material slot")}.`,relatedPartIds:i.slice(0,12).map(l=>l.partId),relatedAssetIds:[n],confidence:.72,source:"rule"});for(let l of(o=e==null?void 0:e.annotations)!=null?o:[]){let c=r.find(f=>f.annotationId===l.id);s.push({id:`${n}:annotation:${l.id}`,title:l.label||"Annotation focus",domain:"assembly",summary:[l.headingRef?`Pinned focus area linked to heading "${l.headingRef}".`:"Pinned focus area marked by the user for follow-up analysis.",c!=null&&c.nearestPartName?`Nearest part candidate: ${c.nearestPartName}.`:""].filter(Boolean).join(" "),relatedPartIds:c!=null&&c.nearestPartId?[c.nearestPartId]:[],relatedAssetIds:[n],confidence:.8,source:"user"})}return s}function mue(n,e){var i;return((i=n==null?void 0:n.annotations)!=null?i:[]).map(r=>{let s=r.position,a=null,o=Number.POSITIVE_INFINITY;for(let c of e){if(!c.center)continue;let f=sue(s,c.center);f{var l;return{partId:o.partId,name:o.name,notePath:o.notePath,source:o.source,category:o.category,meshRefs:[...o.meshRefs],childCount:o.childCount,triangleCount:o.triangleCount,materialName:o.materialName,registeredMatches:(l=o.registeredMatches)==null?void 0:l.map(c=>({...c,reasons:[...c.reasons]})),observations:o.observations}}),annotationLinks:[...n.annotationLinks],knowledgeNodes:[...n.knowledgeNodes]}}function _ue(n,e){var t,i;return Array.from(new Set([...(t=n==null?void 0:n.resourceWarnings)!=null?t:[],...(i=e==null?void 0:e.resourceWarnings)!=null?i:[]]))}function KR(n){var f,h,d,u,m,_,p,g,v,x;let e=(f=n.startedAt)!=null?f:IK(),t=(d=(h=n.evidence)==null?void 0:h.summary)!=null?d:n.preview,i=fue(PO(n.modelPath,(m=(u=n.evidence)==null?void 0:u.parts)!=null?m:[]),(_=n.registeredParts)!=null?_:[]),r=new Date().toISOString(),s=_ue(n.preview,n.evidence),a=mue(n.profile,i),o=uue(n.modelPath,n.profile,n.evidence,i,a),l=(p=n.previewImages)!=null?p:[],c=pue({modelPath:n.modelPath,profile:n.profile,preview:t,parts:i,knowledgeNodes:o,annotationLinks:a,previewImages:l,warnings:s});return{asset:{assetId:n.modelPath,title:Xr(n.modelPath)||n.modelPath,sourcePath:n.modelPath,format:MK(n.modelPath),importedAt:r,updatedAt:r,status:t?"ready":"processing",vertexCount:t==null?void 0:t.vertexCount,triangleCount:t==null?void 0:t.triangleCount,materialCount:t==null?void 0:t.materialCount,boundingBox:t?CO(t.boundingSize):void 0,analysisVersion:sp},parts:i,knowledgeNodes:o,previewImages:l,annotationLinks:a,draftingInput:c,evidence:(g=n.evidence)!=null?g:void 0,warnings:s,pipeline:[{stage:"stats",durationMs:0,status:t?"success":"skipped"},{stage:"split",durationMs:0,status:(x=(v=n.evidence)==null?void 0:v.parts)!=null&&x.length?"success":"skipped"},{stage:"map",durationMs:0,status:a.length>0?"success":"skipped"},nue(e)]}}var sp,iue,rue,DO=C(()=>{"use strict";na();sp="local-evidence-v1",iue=3,rue=.58});function vue(n){let e=n.trim().replace(/\/+$/,"");if(!e)return"";let t=/^[a-z][a-z\d+\-.]*:\/\//i.test(e)?e:`http://${e}`;try{let i=new URL(t);return i.protocol!=="http:"&&i.protocol!=="https:"||i.search||i.hash?null:i.toString().replace(/\/+$/,"")}catch(i){return null}}function Eue(n){return{...n,evidence:{...n.evidence,previewImages:[]}}}function Sue(n){return{...n,model:{...n.model,summary:void 0},partCandidates:[],annotationLinks:n.annotationLinks.map(e=>({...e,notePath:void 0,position:[0,0,0],nearestPartId:void 0,nearestPartName:void 0,distance:void 0,confidence:Math.min(e.confidence,.25)})),knowledgeNodes:n.knowledgeNodes.map(e=>({...e,summary:"Geometry details were withheld by privacy settings.",relatedPartIds:[]}))}}function Tue(n,e){let t=e;return n.sendPreviewImagesToRemote||(t=Eue(t)),n.sendGeometrySummaryToRemote||(t=Sue(t)),{...t,evidence:{...t.evidence,rawModelIncluded:!1}}}function PK(n,e,t){if(n.analysisMode==="local")return{enabled:!1,reason:"analysisMode=local"};let i=vue(n.serviceBaseUrl);return i===""?{enabled:!1,reason:"serviceBaseUrl is empty"}:i===null?{enabled:!1,reason:"serviceBaseUrl must be a valid http(s) URL"}:n.sendRawModelToRemote?{enabled:!1,reason:"raw model upload is not supported by this draft client"}:e?{enabled:!0,endpoint:`${i}/draft-note`,request:{analysisVersion:t,draftingInput:Tue(n,e)}}:{enabled:!1,reason:"drafting input is unavailable"}}function Aue(n){if(!n||typeof n!="object")return null;let e=n,t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let i=Array.isArray(e.sections)?e.sections.flatMap(a=>{if(!a||typeof a!="object")return[];let o=a,l=typeof o.heading=="string"?o.heading.trim():"",c=typeof o.body=="string"?o.body.trim():"";return l&&c?[{heading:l,body:c}]:[]}):void 0,r=Array.isArray(e.suggestedTags)?e.suggestedTags.filter(a=>typeof a=="string"&&a.trim().length>0):void 0,s=Array.isArray(e.warnings)?e.warnings.filter(a=>typeof a=="string"&&a.trim().length>0):void 0;return{title:typeof e.title=="string"?e.title:void 0,summary:t,sections:i,suggestedTags:r,warnings:s,model:typeof e.model=="string"?e.model:void 0}}async function DK(n){if(!n.enabled||!n.endpoint||!n.request)return null;let e=await(0,yK.requestUrl)({url:n.endpoint,method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(n.request)});if(e.status<200||e.status>=300)throw new Error(`Remote draft request failed: HTTP ${e.status}`);return Aue(e.json)}var yK,LK=C(()=>{"use strict";yK=require("obsidian")});var jR={};$e(jR,{buildKnowledgeIndexContent:()=>qK,buildKnowledgeIndexManagedSection:()=>GO,buildKnowledgeNoteContent:()=>HK,collectRegisteredPartsFromProfiles:()=>KK,generateKnowledgeNote:()=>Que,replaceManagedSection:()=>jK});function UK(n){var t;let e=(t=n.split(".").pop())==null?void 0:t.trim().toLowerCase();return e&&e.length>0?e:"unknown"}function wO(n){return n.filter(e=>e.length>0).join(", ")}function LO(n){return Array.from(new Set(n.map(e=>e.trim()).filter(Boolean)))}function UO(n){return n.replace(/\\/g,"/").replace(/^\/+|\/+$/g,"").trim()}function FO(n,e){return n.replace(/[\\/:*?"<>|#[\]^]/g," ").replace(/\s+/g," ").trim().slice(0,80)||e}function BO(n){var e;return(e=n==null?void 0:n.map(t=>t.toFixed(2)).join(", "))!=null?e:"-"}function xue(n,e=12){if(n.length===0)return"-";let t=n.slice(0,e).join(", "),i=n.length-e;return i>0?`${t}, +${i.toLocaleString()} more`:t}function Rue(n){let e=n.sourceNotePath?`[[${n.sourceNotePath}|${n.sourcePartName}]]`:n.sourcePartName,t=n.reasons.length>0?` - ${n.reasons.join(", ")}`:"";return`${e} (${Math.round(n.confidence*100)}%${t})`}function VK(n){var t;let e=[];if(n.headingRef&&e.push(`heading: ${n.headingRef}`),n.notePath){let i=(t=ra(n.notePath))!=null?t:n.notePath;e.push(`note: [[${n.notePath}|${i}]]`)}return e}function bue(n){return[{axis:"x",value:Math.max(0,n.boundingSize.x)},{axis:"y",value:Math.max(0,n.boundingSize.y)},{axis:"z",value:Math.max(0,n.boundingSize.z)}].sort((e,t)=>t.value-e.value)}function GK(n){let[e,t,i]=bue(n);if(!e||e.value<=0)return"Bounding information is incomplete, so scale and orientation still need manual review.";let r=i.value>0?e.value/i.value:Number.POSITIVE_INFINITY,s=e.value>0?t.value/e.value:0;return(e.value>0?i.value/e.value:0)<=.18&&s>=.45?`The bounding box is strongly planar, with a thin ${i.axis.toUpperCase()} dimension compared with ${e.axis.toUpperCase()}.`:r>=3&&s<=.55?`The model is strongly elongated along ${e.axis.toUpperCase()}, which suggests a directional or axial structure.`:"The overall bounding volume is fairly balanced, so semantic grouping is more likely to come from mesh and material boundaries than from one dominant axis."}function kK(n){if(n.splatCount!==void 0)return`This is a splat-based asset with ${n.splatCount.toLocaleString()} splats; review should focus on capture coverage, density, and viewpoint clarity instead of triangle topology.`;let e=0;return n.triangleCount>=5e5?e+=3:n.triangleCount>=1e5?e+=2:n.triangleCount>=2e4&&(e+=1),n.meshCount>=100?e+=2:n.meshCount>=25&&(e+=1),n.materialCount>=8&&(e+=1),e>=5?"The mesh and material counts point to a high-complexity asset; expect semantic cleanup, regrouping, or naming review before turning it into stable knowledge notes.":e>=3?"The asset sits in a medium-complexity range: it already contains useful structure, but some meshes or materials may still reflect export convenience rather than real-world parts.":"The asset is structurally compact, so a lightweight local pass can usually produce usable first-draft notes without a heavier analysis pipeline."}function Iue(n){var t;let e=(t=n==null?void 0:n.tags)!=null?t:[];return e.length===0?"No knowledge tags are stored yet, so the note should establish the first stable vocabulary for this model.":`Current tags already suggest a working taxonomy: ${wO(e)}.`}function OK(n){var t;let e=(t=n==null?void 0:n.annotations)!=null?t:[];return e.length===0?"No annotation pins are stored yet, so the next useful pass is to mark semantically important regions before splitting the model into part notes.":e.length===1?"There is 1 saved annotation pin, which already gives this report a concrete user-selected focus area.":`There are ${e.length} saved annotation pins, which provide a useful first-pass map of user-relevant regions.`}function Mue(n,e){var r;if(!n)return["Preview statistics were not available when this note was generated, so the next step is to reload the model and regenerate the report.",OK(e)];let t=[`${n.meshCount.toLocaleString()} mesh(es), ${((r=n.splatCount)!=null?r:n.triangleCount).toLocaleString()} ${n.splatCount!==void 0?"splats":"triangles"}, and ${n.materialCount.toLocaleString()} material slot(s) are currently visible in the preview pipeline.`,kK(n),GK(n),OK(e)],i=Iue(e);return i&&t.push(i),t}function Cue(n){var i;let e=(i=n==null?void 0:n.annotations)!=null?i:[];if(e.length===0)return["## Focus Areas","","- No focus areas have been pinned yet.",""];let t=["## Focus Areas",""];for(let r of e){let s=VK(r),a=s.length>0?` (${s.join("; ")})`:"";t.push(`- **${r.label||"Untitled pin"}**${a}`)}return t.push(""),t}function yue(n){var i,r;let e=(i=n==null?void 0:n.annotationLinks)!=null?i:[];if(e.length===0)return["## Annotation Links","","- No annotation-to-part links were produced in this pass.",""];let t=["## Annotation Links","","| Annotation | Nearest Part | Linked Note | Distance | Confidence |","|------------|--------------|-------------|----------|------------|"];for(let s of e){let a=s.notePath?`[[${s.notePath}]]`:"-";t.push(`| ${Zs(s.label)} | ${Zs((r=s.nearestPartName)!=null?r:"-")} | ${Zs(a)} | ${s.distance===void 0?"-":s.distance.toFixed(3)} | ${Math.round(s.confidence*100)}% |`)}return t.push(""),t}function Pue(n){var i,r,s,a;let e=((i=n==null?void 0:n.parts)!=null?i:[]).filter(o=>o.notePath);if(e.length===0)return["## Suggested Part Notes","","- No part note drafts were created in this pass.",""];let t=["## Suggested Part Notes",""];for(let o of e.slice(0,FK)){let l=(s=ra((r=o.notePath)!=null?r:""))!=null?s:o.name,c=[(a=o.category)!=null?a:"unclassified",vo(o.triangleCount,"triangle"),o.materialName?`material ${o.materialName}`:""].filter(Boolean).join(", ");t.push(`- [[${o.notePath}|${l}]] - ${o.name} (${c})`)}return t.push(""),t}function vo(n,e){return`${(n!=null?n:0).toLocaleString()} ${e}${n===1?"":"s"}`}function Due(n){return n.length===0?"No per-part evidence was captured yet, so the first useful editing pass is to reload the model and regenerate this note from the workbench.":n.slice(0,6).map((e,t)=>{var r;let i=e.materialName?`, material ${e.materialName}`:"";return`${t+1}. ${e.name} (${(r=e.category)!=null?r:"unclassified"}, ${vo(e.triangleCount,"triangle")}${i})`}).join(` +`)}function Lue(n){let e=n.filter(t=>{var i;return(i=t.registeredMatches)==null?void 0:i.length});return e.length===0?"No previously registered parts were matched across other analyzed models in this pass.":e.slice(0,6).map(t=>{var r;let i=(r=t.registeredMatches)==null?void 0:r[0];return i?`- ${t.name}: possible reuse of ${i.sourcePartName} from ${i.sourceAssetId} (${Math.round(i.confidence*100)}% confidence).`:""}).filter(Boolean).join(` +`)}function WK(n){var p,g,v,x,A,S,E,R,I;let e=UK(n.sourcePath).toUpperCase(),t=n.preview,i=[...(g=(p=n.analysis)==null?void 0:p.parts)!=null?g:[]].sort((y,M)=>{var D,O;return((D=M.triangleCount)!=null?D:0)-((O=y.triangleCount)!=null?O:0)}),r=(x=(v=n.profile)==null?void 0:v.annotations)!=null?x:[],s=(S=(A=n.analysis)==null?void 0:A.annotationLinks)!=null?S:[],a=LO(i.map(y=>{var M;return(M=y.category)!=null?M:"unclassified"})).slice(0,6),o=LO(i.flatMap(y=>y.materialName?[y.materialName]:[])).slice(0,6),l=Due(i),c=Lue(i),f=t?GK(t):"Geometry statistics are not available yet, so this draft should stay provisional.",h=t?kK(t):"Reload the preview to capture mesh, triangle, vertex, and material evidence.",d=(E=n.profile)==null?void 0:E.notes.trim(),u=t?`${n.baseName} is a ${e} asset with ${vo(t.meshCount,"mesh")}, ${vo(t.triangleCount,"triangle")}, ${vo(t.vertexCount,"vertex")}, and ${vo(t.materialCount,"material slot")}.`:`${n.baseName} is a ${e} asset that still needs a refreshed preview pass before its geometry can be summarized confidently.`,m=r.length>0?r.map(y=>{let M=s.find(V=>V.annotationId===y.id),D=M!=null&&M.nearestPartName?` Nearest captured part: ${M.nearestPartName}.`:"",O=y.headingRef?` Linked heading: ${y.headingRef}.`:"";return`- ${y.label||"Untitled pin"}.${D}${O}`}).join(` +`):"- No pins are saved yet. Add pins for the regions that should become standalone notes, questions, or review checkpoints.",_=[i.length>0?"Rename the strongest part candidates so their mesh names match real semantic parts.":"Regenerate after the model preview has captured per-part evidence.",r.length>0?"Turn each saved pin into a short linked note or heading-level review item.":"Place at least one pin on the most important region before treating this as a finished note.","Review scale, orientation, materials, and whether mesh boundaries represent real assembly boundaries."];return{title:`${n.baseName} local knowledge draft`,summary:[u,f,d?`User notes add this context: ${d}`:"No user notes are stored yet, so the draft stays grounded in renderer evidence and saved pins."].join(" "),sections:[{heading:"Evidence-backed description",body:[h,a.length>0?`Detected part categories: ${wO(a)}.`:"No part categories were inferred yet.",o.length>0?`Visible materials include ${wO(o)}.`:"No material names were captured from the renderer evidence."].join(" ")},{heading:"Candidate structure",body:l},{heading:"Registered part reuse",body:c},{heading:"Focus areas",body:m},{heading:"Suggested note shape",body:[`Start with a short purpose paragraph for ${n.baseName}.`,"Then split the note into geometry evidence, meaningful part candidates, saved focus areas, and unresolved review questions.","Only promote a mesh into a standalone part note after a human confirms its function or assembly role."].join(" ")}],suggestedTags:LO([...(I=(R=n.profile)==null?void 0:R.tags)!=null?I:[],`format/${e.toLowerCase()}`,...a.map(y=>`part/${y}`)]).slice(0,12),nextActions:_,generatedAt:new Date().toISOString()}}function Oue(n){var i,r;let e=(r=(i=n.analysis)==null?void 0:i.localDraft)!=null?r:WK(n),t=["## Local Draft Metadata","",`- Generated at: ${e.generatedAt}`,`- Sections: ${e.sections.length.toLocaleString()}`];return e.suggestedTags.length>0&&t.push("Suggested tags:","",...e.suggestedTags.map(s=>`- ${s}`),""),e.nextActions.length>0&&t.push("Next actions:","",...e.nextActions.map(s=>`- ${s}`),""),t}function bs(n){return JSON.stringify(n)}function Nue(n){return n!=null&&n.draftingInput?["## AI Drafting Input","","- Grounded drafting input is available in the sidecar JSON under `draftingInput`.",`- Part candidates included: ${n.draftingInput.partCandidates.length.toLocaleString()}`,`- Annotation links included: ${n.draftingInput.annotationLinks.length.toLocaleString()}`,"- Raw model included: false",""]:["## AI Drafting Input","","- No drafting input was prepared in this pass.",""]}function wue(n){var i,r,s,a;let e=n==null?void 0:n.remoteDraft;if(!e)return["## Remote Draft","","- No remote draft was requested or returned for this pass.",""];let t=["## Remote Draft","",e.title?`### ${e.title}`:"### Draft Summary","",e.summary,""];for(let o of(i=e.sections)!=null?i:[])t.push(`### ${o.heading}`,"",o.body,"");(r=e.suggestedTags)!=null&&r.length&&t.push("Suggested tags:","",...e.suggestedTags.map(o=>`- ${o}`),"");for(let o of(s=e.warnings)!=null?s:[])t.push(`- Remote warning: ${o}`);return(a=e.warnings)!=null&&a.length&&t.push(""),t}function Fue(n){var i,r;let e=(i=n==null?void 0:n.remoteDraft)!=null?i:n==null?void 0:n.localDraft;if(!e)return["## Editable Draft","","- No draft body was produced in this pass.",""];let t=["## Editable Draft","",n!=null&&n.remoteDraft?"- Source: optional remote draft, grounded by the local evidence sidecar.":"- Source: local evidence draft, generated without a remote service.","",e.summary,""];for(let s of(r=e.sections)!=null?r:[])t.push(`### ${s.heading}`,"",s.body,"");return t}function Bue(n){var t;let e=(t=n==null?void 0:n.previewImages)!=null?t:[];return e.length===0?["## Evidence Snapshots","","- No preview snapshot was captured for this generation pass.",""]:["## Evidence Snapshots","",...e.map(i=>`![[${i}]]`),""]}function Uue(n){var i,r,s,a,o;let e=(i=n==null?void 0:n.parts)!=null?i:[];if(e.length===0)return["## Part Candidates","","- No per-mesh evidence was available. Reload the model in the workbench and regenerate the note to capture part candidates.",""];let t=["## Part Candidates","","| # | Part | Part Note | Source | Category | Triangles | Material | Center | Evidence |","|---|------|-----------|--------|----------|-----------|----------|--------|----------|"];for(let[l,c]of e.slice(0,32).entries()){let f=BO(c.center),h=c.observations.slice(0,2).join(" "),d=c.notePath?`[[${c.notePath}]]`:"-",u=c.source==="group"?`group (${(r=c.childCount)!=null?r:c.meshRefs.length})`:"mesh";t.push(`| ${l+1} | ${Zs(c.name)} | ${Zs(d)} | ${Zs(u)} | ${Zs((s=c.category)!=null?s:"unclassified")} | ${((a=c.triangleCount)!=null?a:0).toLocaleString()} | ${Zs((o=c.materialName)!=null?o:"-")} | ${f} | ${Zs(h)} |`)}return e.length>32&&t.push(`| ... | ${e.length-32} more candidate parts omitted from this note | - | - | - | - | - | - | See sidecar JSON |`),t.push(""),t}function Vue(n){var i,r;let e=((i=n==null?void 0:n.parts)!=null?i:[]).filter(s=>{var a;return(a=s.registeredMatches)==null?void 0:a.length});if(e.length===0)return["## Registered Part Matches","","- No previously registered parts were matched across other analyzed models in this pass.",""];let t=["## Registered Part Matches","","| Current Part | Best Existing Part | Source Model | Confidence | Reasons |","|--------------|--------------------|--------------|------------|---------|"];for(let s of e.slice(0,32)){let a=(r=s.registeredMatches)==null?void 0:r[0];if(!a)continue;let o=a.sourceNotePath?`[[${a.sourceNotePath}|${a.sourcePartName}]]`:a.sourcePartName;t.push(`| ${Zs(s.name)} | ${Zs(o)} | ${Zs(a.sourceAssetId)} | ${Math.round(a.confidence*100)}% | ${Zs(a.reasons.join(", "))} |`)}return e.length>32&&t.push(`| ... | ${e.length-32} more matched parts omitted | - | - | See sidecar JSON |`),t.push(""),t}function Gue(n){var i;let e=(i=n==null?void 0:n.knowledgeNodes)!=null?i:[];if(e.length===0)return["## Knowledge Nodes","","- No knowledge nodes were produced in this pass.",""];let t=["## Knowledge Nodes",""];for(let r of e)t.push(`- **${r.title}** (${r.domain}, ${Math.round(r.confidence*100)}%, ${r.source}): ${r.summary}`);return t.push(""),t}function kue(n,e){var i,r;let t=["## Evidence Health","",`- Analysis version: ${sp}`,e?`- Sidecar: [[${e}|Analysis JSON]]`:"- Sidecar: not written",n!=null&&n.knowledgeIndexPath?`- Knowledge index: [[${n.knowledgeIndexPath}|Model index]]`:"- Knowledge index: not written"];for(let s of(i=n==null?void 0:n.warnings)!=null?i:[])t.push(`- Warning: ${s}`);return((r=n==null?void 0:n.warnings)!=null?r:[]).length===0&&t.push("- Warnings: none"),t.push(""),t}function Wue(n,e){var r;let t=(r=e==null?void 0:e.annotations)!=null?r:[],i=["## Draft Knowledge Points",""];if(n?(i.push(`- Geometry overview: explain how ${n.meshCount.toLocaleString()} mesh(es) and ${n.materialCount.toLocaleString()} material slot(s) map to real semantic parts instead of export-only fragments.`),n.splatCount!==void 0?i.push(`- Capture quality: review whether the ${n.splatCount.toLocaleString()} splats preserve enough silhouette and depth detail for note-taking from multiple angles.`):i.push(`- Structural density: verify whether ${(n.triangleCount/Math.max(n.meshCount,1)).toLocaleString(void 0,{maximumFractionDigits:0})} average triangles per mesh reflects deliberate detail or accidental over-segmentation.`)):i.push("- Geometry overview: reload the model and capture preview statistics before turning this into a stable knowledge note."),t.length>0)for(let s of t.slice(0,8)){let a=VK(s),o=a.length>0?` (${a.join("; ")})`:"";i.push(`- **${s.label||"Untitled pin"}**${o}: describe what this region does, why it matters, and whether it deserves its own linked part note.`)}else i.push("- Focus mapping: add pins for the regions that should become standalone part notes or review checkpoints.");return i.push("- Review pass: confirm scale, orientation, and whether material boundaries reflect actual function, assembly, or simply renderer setup."),i.push(""),i}function HK(n){var c,f,h,d;let e=n.profile,t=n.preview,i=n.analysis,r=UK(n.sourcePath),s=(c=e==null?void 0:e.tags)!=null?c:[],a=(f=e==null?void 0:e.annotations)!=null?f:[],o=(h=i==null?void 0:i.previewImages)!=null?h:[];return[["---",`source_model: ${bs(n.sourcePath)}`,`format: ${r}`,"status: ready","analysis_mode: local",`analysis_version: ${sp}`,`report_note_path: ${bs(n.notePath)}`,...n.analysisSidecarPath?[`analysis_sidecar_path: ${bs(n.analysisSidecarPath)}`]:[],...n.knowledgeIndexPath?[`knowledge_index_path: ${bs(n.knowledgeIndexPath)}`]:[],`annotation_count: ${a.length}`,`updated_at: ${new Date().toISOString()}`,...o.length>0?["preview_images:",...o.map(u=>` - ${bs(u)}`)]:[],...s.length>0?["knowledge_tags:",...s.map(u=>` - ${bs(u)}`)]:[],"---"].join(` +`),"",`# ${n.baseName}`,"","## Summary","",...t?[...E1(t,{decimals:2}),""]:["(No preview data available)",""],...Fue(i),...Oue(n),...n.knowledgeIndexPath?["## Knowledge Index","",`- [[${n.knowledgeIndexPath}|Open model knowledge index]]`,""]:[],"## Local Observations","",...Mue(t,e).map(u=>`- ${u}`),"",...kue(i,n.analysisSidecarPath),...Bue(i),...Cue(e),...yue(i),...Pue(i),...Uue(i),...Vue(i),...Gue(i),...Nue(i),...wue(i),...Wue(t,e),"## Review Notes","",(d=e==null?void 0:e.notes)!=null&&d.trim()?e.notes.trim():"-",""].join(` +`)}function Hue(n,e){let t=new Date().toISOString();return{tags:Array.isArray(n==null?void 0:n.tags)?n.tags:[],notes:typeof(n==null?void 0:n.notes)=="string"?n.notes:"",annotations:Array.isArray(n==null?void 0:n.annotations)?n.annotations:[],registeredParts:Array.isArray(n==null?void 0:n.registeredParts)?n.registeredParts.map(i=>YK(i,e)).filter(i=>!!i):void 0,analysisVersion:typeof(n==null?void 0:n.analysisVersion)=="string"?n.analysisVersion:void 0,reportNotePath:typeof(n==null?void 0:n.reportNotePath)=="string"?n.reportNotePath:void 0,analysisSidecarPath:typeof(n==null?void 0:n.analysisSidecarPath)=="string"?n.analysisSidecarPath:void 0,knowledgeIndexPath:typeof(n==null?void 0:n.knowledgeIndexPath)=="string"?n.knowledgeIndexPath:void 0,previewImagePaths:Array.isArray(n==null?void 0:n.previewImagePaths)?n.previewImagePaths.filter(i=>typeof i=="string"):void 0,createdAt:typeof(n==null?void 0:n.createdAt)=="string"?n.createdAt:t,updatedAt:typeof(n==null?void 0:n.updatedAt)=="string"?n.updatedAt:t}}function Zs(n){return n.replace(/\|/g,"\\|").replace(/\r?\n/g," ")}function zue(n){let[,e=""]=n.split(",",2),t=atob(e),i=new Uint8Array(t.length);for(let r=0;r{})}async function zK(n,e,t){let i=n.vault.getAbstractFileByPath(e);if(i instanceof xc.TFile)return i;try{return await n.vault.create(e,t)}catch(r){let s=n.vault.getAbstractFileByPath(e);return s instanceof xc.TFile?s:null}}async function NK(n,e,t){let i=n.vault.getAbstractFileByPath(e);if(i instanceof xc.TFile)return await n.vault.modify(i,t),i;try{return await n.vault.create(e,t)}catch(r){let s=n.vault.getAbstractFileByPath(e);if(s instanceof xc.TFile)return await n.vault.modify(s,t),s}return null}async function Xue(n,e,t,i){var s;let r=(s=e==null?void 0:e.captureSnapshot)==null?void 0:s.call(e);if(!(r!=null&&r.startsWith("data:image/png;base64,")))return{paths:[]};try{await VO(n,t);let a=`${t}/${i}_evidence_${Date.now()}.png`;return await n.vault.createBinary(a,zue(r)),{paths:[a]}}catch(a){let o=a instanceof Error?a.message:String(a);return{paths:[],warning:`Evidence snapshot failed: ${o}`}}}function XK(n){return!!n&&typeof n=="object"}function Vg(n){return Array.isArray(n)?n.filter(e=>typeof e=="string"):[]}function wK(n){if(!Array.isArray(n)||n.length<3)return;let e=n.slice(0,3).map(t=>Number(t));return e.every(Number.isFinite)?[e[0],e[1],e[2]]:void 0}function YK(n,e){if(!XK(n))return null;let t=typeof n.partId=="string"?n.partId:"",i=typeof n.name=="string"?n.name:"";if(!t||!i)return null;let r=typeof n.assetId=="string"&&n.assetId?n.assetId:e;return{partId:t,assetId:r,parentPartId:typeof n.parentPartId=="string"?n.parentPartId:void 0,name:i,source:n.source==="group"||n.source==="mesh"?n.source:void 0,category:typeof n.category=="string"?n.category:void 0,meshRefs:Vg(n.meshRefs),childCount:Number.isFinite(n.childCount)?Number(n.childCount):void 0,materialRefs:Vg(n.materialRefs),bbox:wK(n.bbox),center:wK(n.center),triangleCount:Number.isFinite(n.triangleCount)?Number(n.triangleCount):void 0,vertexCount:Number.isFinite(n.vertexCount)?Number(n.vertexCount):void 0,materialName:typeof n.materialName=="string"?n.materialName:null,confidence:Number.isFinite(n.confidence)?Number(n.confidence):.5,observations:Vg(n.observations),inferredFunctions:Vg(n.inferredFunctions),knowledgeTags:Vg(n.knowledgeTags),notePath:typeof n.notePath=="string"?n.notePath:void 0,reviewed:n.reviewed===!0}}async function KK(n,e,t){var a;let i=[],r=new Set,s=(o,l)=>{let c=YK(o,l);if(!c)return;let f=`${c.assetId}:${c.partId}`;r.has(f)||(r.add(f),i.push(c))};for(let[o,l]of Object.entries(e))if(o!==t){if(l.analysisSidecarPath){let c=n.vault.getAbstractFileByPath(l.analysisSidecarPath);if(c instanceof xc.TFile)try{let f=await n.vault.read(c),h=JSON.parse(f);if(XK(h)&&Array.isArray(h.parts))for(let d of h.parts)s(d,o)}catch(f){console.warn("[AI3D] Failed to read registered part sidecar:",l.analysisSidecarPath,f)}}for(let c of(a=l.registeredParts)!=null?a:[])s(c,o)}return i}function Yue(n){var t;let e=new Set(((t=n.annotationLinks)!=null?t:[]).flatMap(i=>i.nearestPartId?[i.nearestPartId]:[]));return new Set([...n.parts].sort((i,r)=>{var c,f,h,d;let s=e.has(i.partId)?1:0,a=e.has(r.partId)?1:0;if(s!==a)return a-s;let o=(c=i.registeredMatches)!=null&&c.length?1:0,l=(f=r.registeredMatches)!=null&&f.length?1:0;return o!==l?l-o:((h=r.triangleCount)!=null?h:0)-((d=i.triangleCount)!=null?d:0)}).slice(0,FK).map(i=>i.partId))}function Kue(n,e,t,i){let r=UO(n)||"Parts/3D Components",s=FO(e,"model"),a=FO(t.name,`Part ${i+1}`);return`${r}/${s}/${String(i+1).padStart(2,"0")} ${a}.md`}function jue(n){var i,r,s,a,o,l,c;let e=((i=n.analysis.annotationLinks)!=null?i:[]).filter(f=>f.nearestPartId===n.part.partId);return[["---",`source_model: ${bs(n.sourcePath)}`,`parent_report: ${bs(n.notePath)}`,`part_id: ${bs(n.part.partId)}`,`asset_id: ${bs(n.part.assetId)}`,`category: ${bs((r=n.part.category)!=null?r:"unclassified")}`,"status: draft","generated_by: ai-model-workbench",`updated_at: ${new Date().toISOString()}`,"---"].join(` +`),"",`# ${n.part.name}`,"","## Evidence","",`- Source model: [[${n.sourcePath}|${n.baseName}]]`,`- Parent report: [[${n.notePath}|${n.baseName} Report]]`,`- Source: ${n.part.source==="group"?"model group":"mesh"}`,`- Category: ${(s=n.part.category)!=null?s:"unclassified"}`,...n.part.source==="group"?[`- Child meshes: ${xue(n.part.meshRefs)}`]:[],`- Triangles: ${((a=n.part.triangleCount)!=null?a:0).toLocaleString()}`,`- Vertices: ${((o=n.part.vertexCount)!=null?o:0).toLocaleString()}`,`- Material: ${(l=n.part.materialName)!=null?l:"-"}`,`- Bounding size: ${BO(n.part.bbox)}`,`- Center: ${BO(n.part.center)}`,...(c=n.part.registeredMatches)!=null&&c.length?[`- Possible registered match: ${Rue(n.part.registeredMatches[0])}`]:[],"","## Renderer Observations","",...n.part.observations.length>0?n.part.observations.map(f=>`- ${f}`):["- No renderer observations were captured for this part."],"","## Linked Focus Areas","",...e.length>0?e.map(f=>`- ${f.label} (${Math.round(f.confidence*100)}% confidence, distance ${f.distance===void 0?"-":f.distance.toFixed(3)})`):["- No saved annotation pin is linked to this part yet."],"","## Working Notes","","- ",""].join(` +`)}async function que(n){var a;let e=Yue(n.analysis);if(e.size===0)return n.analysis.pipeline.push({stage:"partNotes",durationMs:0,status:"skipped"}),[];let t=[],i=typeof performance!="undefined"?performance.now():Date.now(),s=`${UO(n.partFolder)||"Parts/3D Components"}/${FO(n.baseName,"model")}`;await VO(n.app,s);for(let[o,l]of n.analysis.parts.entries()){if(!e.has(l.partId))continue;let c=Kue(n.partFolder,n.baseName,l,o),f={...l,notePath:c},h=jue({baseName:n.baseName,notePath:n.notePath,sourcePath:n.sourcePath,part:f,analysis:n.analysis}),d=await zK(n.app,c,h);d&&(l.notePath=d.path,t.push(d.path))}n.analysis.partNotePaths=t;for(let o of(a=n.analysis.annotationLinks)!=null?a:[]){let l=n.analysis.parts.find(c=>c.partId===o.nearestPartId);l!=null&&l.notePath&&!o.notePath&&(o.notePath=l.notePath)}return n.analysis.pipeline.push({stage:"partNotes",durationMs:Math.max(0,Math.round((typeof performance!="undefined"?performance.now():Date.now())-i)),status:t.length>0?"success":"skipped"}),t}function GO(n){var r,s,a,o,l,c;let e=((r=n.analysis.parts)!=null?r:[]).filter(f=>f.notePath),t=(a=(s=n.profile)==null?void 0:s.annotations)!=null?a:[],i=(l=(o=n.analysis.localDraft)==null?void 0:o.nextActions)!=null?l:[];return[BK,"","## Entry Points","",`- Model report: [[${n.notePath}|${n.baseName} Report]]`,`- Analysis sidecar: [[${n.analysisSidecarPath}|Analysis JSON]]`,`- Source model: [[${n.sourcePath}|${n.baseName}]]`,"","## Model Snapshot","",n.preview?`- ${vo(n.preview.meshCount,"mesh")}, ${vo(n.preview.triangleCount,"triangle")}, ${vo(n.preview.vertexCount,"vertex")}, ${vo(n.preview.materialCount,"material slot")}.`:"- No preview statistics were available for this index.",`- Evidence images: ${((c=n.analysis.previewImages)!=null?c:[]).length.toLocaleString()}`,`- Part drafts: ${e.length.toLocaleString()}`,`- Saved annotations: ${t.length.toLocaleString()}`,"","## Part Notes","",...e.length>0?e.map(f=>{var u,m;let h=(u=f.registeredMatches)==null?void 0:u[0],d=h?`, matches ${h.sourcePartName} (${Math.round(h.confidence*100)}%)`:"";return`- [[${f.notePath}|${f.name}]] - ${(m=f.category)!=null?m:"unclassified"}, ${vo(f.triangleCount,"triangle")}${d}`}):["- No part note drafts were created in this pass."],"","## Evidence Images","",...n.analysis.previewImages.length>0?n.analysis.previewImages.map(f=>`- ![[${f}]]`):["- No evidence image was captured in this pass."],"","## Focus Areas","",...t.length>0?t.map(f=>{var u;let h=(u=n.analysis.annotationLinks)==null?void 0:u.find(m=>m.annotationId===f.id),d=h!=null&&h.notePath?` -> [[${h.notePath}|part note]]`:"";return`- ${f.label||"Untitled pin"}${d}`}):["- No saved annotation pins yet."],"","## Next Actions","",...i.length?i.map(f=>`- ${f}`):["- Review generated part drafts and promote confirmed components into stable notes."],"",NO,""].join(` +`)}function jK(n,e){let t=n.indexOf(BK),i=n.indexOf(NO);if(t>=0&&i>t){let r=n.slice(0,t).replace(/\s+$/,""),s=n.slice(i+NO.length).replace(/^\s+/,"");return[r,e.trim(),s].filter(Boolean).join(` `)+` `}return`${n.replace(/\s+$/,"")} ${e.trim()} -`}function NK(n){var r;let e=MO(n),t=((r=n.analysis.parts)!=null?r:[]).filter(s=>s.notePath).length;return[["---",`source_model: ${bs(n.sourcePath)}`,`report_note_path: ${bs(n.notePath)}`,`analysis_sidecar_path: ${bs(n.analysisSidecarPath)}`,`part_note_count: ${t}`,"status: index","generated_by: ai-model-workbench",`updated_at: ${new Date().toISOString()}`,"---"].join(` +`}function qK(n){var r;let e=GO(n),t=((r=n.analysis.parts)!=null?r:[]).filter(s=>s.notePath).length;return[["---",`source_model: ${bs(n.sourcePath)}`,`report_note_path: ${bs(n.notePath)}`,`analysis_sidecar_path: ${bs(n.analysisSidecarPath)}`,`part_note_count: ${t}`,"status: index","generated_by: ai-model-workbench",`updated_at: ${new Date().toISOString()}`,"---"].join(` `),"",`# ${n.baseName} Knowledge Index`,"","## User Notes","","- ","",e].join(` -`)}async function vue(n){let e=typeof performance!="undefined"?performance.now():Date.now(),t=n.app.vault.getAbstractFileByPath(n.indexPath),i=null;if(t instanceof zf.TFile){let r=await n.app.vault.read(t),s=MO(n);await n.app.vault.modify(t,OK(r,s)),i=t}else i=await LK(n.app,n.indexPath,NK(n));return i&&(n.analysis.knowledgeIndexPath=i.path),n.analysis.pipeline.push({stage:"index",durationMs:Math.max(0,Math.round((typeof performance!="undefined"?performance.now():Date.now())-e)),status:i?"success":"failed"}),i}async function Eue(n,e,t={}){var r,s,a,o;if(SO!==null)return;let i;SO=new Promise(l=>{i=l});try{let l=e.store.getState(),c=l.currentModelPath;if(!c)return;let f=l.modelAssetProfiles[c],h=l.modelPreview,d=Xr(c)||"model",u=l.settings.reportFolder,m=`${u}/${d} Report.md`,_=`${u}/${d} Analysis.json`,p=`${u}/${d} Index.md`,g=(a=(s=(r=t.preview)==null?void 0:r.getModelEvidence)==null?void 0:s.call(r))!=null?a:null,v=await uue(n,t.preview,l.settings.previewFolder,d),x=_K({modelPath:c,profile:f,preview:h,evidence:g,previewImages:v.paths});v.warning&&(x.warnings=[...x.warnings,v.warning],x.draftingInput&&(x.draftingInput={...x.draftingInput,evidence:{...x.draftingInput.evidence,warnings:[...x.draftingInput.evidence.warnings,v.warning]}})),x.localDraft=PK({baseName:d,sourcePath:c,profile:f,preview:h,analysis:x}),x.pipeline.push({stage:"draft",durationMs:0,status:"success"}),await gue({app:n,partFolder:l.settings.partFolder,baseName:d,notePath:m,sourcePath:c,analysis:x}),x.draftingInput&&(x.draftingInput={...x.draftingInput,partCandidates:x.draftingInput.partCandidates.map(y=>{let M=x.parts.find(D=>D.partId===y.partId);return M!=null&&M.notePath?{...y,notePath:M.notePath}:y}),annotationLinks:[...(o=x.annotationLinks)!=null?o:[]]});let A=EK(l.settings,x.draftingInput,ep);if(A.enabled)try{let y=await SK(A);y?(x.remoteDraft=y,x.pipeline.push({stage:"remoteDraft",durationMs:0,status:"success"})):x.pipeline.push({stage:"remoteDraft",durationMs:0,status:"skipped"})}catch(y){let M=y instanceof Error?y.message:String(y);x.warnings=[...x.warnings,`Remote draft failed: ${M}`],x.pipeline.push({stage:"remoteDraft",durationMs:0,status:"failed"})}else x.pipeline.push({stage:"remoteDraft",durationMs:0,status:"skipped"});await IO(n,u),await vue({app:n,baseName:d,notePath:m,sourcePath:c,analysisSidecarPath:_,indexPath:p,analysis:x,preview:h,profile:f});let E=DK({baseName:d,notePath:m,sourcePath:c,profile:f,preview:h,analysis:x,analysisSidecarPath:_,knowledgeIndexPath:x.knowledgeIndexPath});await xK(n,_,`${JSON.stringify(x,null,2)} -`);let T=await xK(n,m,E);if(!T)return;let R=e.store.getState().modelAssetProfiles,I=hue(R[c]);e.store.setState({modelAssetProfiles:{...R,[c]:{...I,analysisVersion:ep,reportNotePath:T.path,analysisSidecarPath:_,knowledgeIndexPath:x.knowledgeIndexPath,previewImagePaths:v.paths,updatedAt:new Date().toISOString()}}}),await n.workspace.getLeaf(!0).openFile(T,{active:!0}),new zf.Notice(`Knowledge note updated: ${T.path}`)}finally{i(),SO=null}}var zf,RK,bK,TO,SO,yO=C(()=>{"use strict";zf=require("obsidian");dS();ea();gK();TK();RK=8,bK="",TO="";SO=null});function go(n,e,t=2.5){var i;if(typeof n=="string"){let r=(i=OO[n])!=null?i:OO.iso;return{alpha:r.alpha,beta:r.beta,radiusMultiplier:t}}return{alpha:n,beta:e!=null?e:Math.PI/3,radiusMultiplier:t}}function ll(n,e,t=.02){let i=(1-t*(n+1))/n,r=(1-t*(e+1))/e,s=[];for(let a=0;a({path:i.path,position:[-t/2+r*e,0,0],color:i.color,wireframe:i.wireframe}))}function FO(n,e){return n.map((t,i)=>{let r=2*Math.PI*i/n.length;return{path:t.path,position:[Math.cos(r)*e,0,Math.sin(r)*e],color:t.color,wireframe:t.wireframe}})}var OO,dd=C(()=>{"use strict";OO={iso:{alpha:Math.PI/4,beta:Math.PI/3},front:{alpha:0,beta:Math.PI/2},side:{alpha:Math.PI/2,beta:Math.PI/2},top:{alpha:0,beta:.01},back:{alpha:Math.PI,beta:Math.PI/2},"3/4":{alpha:Math.PI/6,beta:Math.PI/3.5}}});var BK,UK=C(()=>{"use strict";dd();BK={name:"compare",description:"Side-by-side model comparison (2-4 models)",minModels:2,maxModels:4,compute(n,e){if(n.length<2||n.length>4)return null;let t=Number(e.spacing)||6,i=e.angle||"iso",r=Lg(n,t),s=n.length<=3?n.length:2,a=Math.ceil(n.length/s),o=ll(s,a),l=n.map((c,f)=>({modelIndex:f,camera:go(i),viewport:o[f]}));return{placements:r,cells:l}}}});var VK,GK=C(()=>{"use strict";dd();VK={name:"showcase",description:"Single model viewed from multiple angles",minModels:1,maxModels:1,compute(n,e){if(n.length<1)return null;let t=Number(e.angles)||4,i=Number(e.radius)||2.5,r=[{path:n[0].path,position:[0,0,0],color:n[0].color,wireframe:n[0].wireframe}],s=t>=6?["front","side","top","back","iso","3/4"]:["iso","front","side","top"],a=s.length<=4?2:3,o=Math.ceil(s.length/a),l=ll(a,o),c=s.map((f,h)=>({modelIndex:0,camera:go(f,void 0,i),viewport:l[h]}));return{placements:r,cells:c}}}});var kK,WK=C(()=>{"use strict";dd();kK={name:"explode",description:"Spatial arrangement of parts (3-8 models in a ring)",minModels:3,maxModels:8,compute(n,e){if(n.length<3||n.length>8)return null;let t=Number(e.radius)||8,i=e.angle||"iso",r=FO(n,t),s=Math.min(n.length,4),a=Math.ceil(n.length/s),o=ll(s,a),l=n.map((c,f)=>({modelIndex:f,camera:go(i),viewport:o[f]}));return{placements:r,cells:l}}}});var HK,zK=C(()=>{"use strict";dd();HK={name:"timeline",description:"Horizontal progression of models (2-6 models in a strip)",minModels:2,maxModels:6,compute(n,e){if(n.length<2||n.length>6)return null;let t=Number(e.spacing)||6,i=e.angle||"3/4",r=Lg(n,t),s=NO(n.length),a=n.map((o,l)=>({modelIndex:l,camera:go(i),viewport:s[l]}));return{placements:r,cells:a}}}});function wO(n,e,t,i,r){var f,h;if(!n||n.length===0)return null;let s=n.reduce((d,u)=>{var m;return d+((m=u.weight)!=null?m:1)},0);if(s<=0)return null;let a=[],o=0;for(let d of n){let m=((f=d.weight)!=null?f:1)/s*(1-t*(n.length+1));e==="horizontal"?a.push({x:t+o,y:t,w:m,h:1-2*t}):a.push({x:t,y:t+o,w:1-2*t,h:m}),o+=m+t}let l=[],c=[];for(let d=0;d{"use strict";XK={name:"compose",description:"Combine multiple presets into one layout",minModels:1,maxModels:32,compute(n,e,t){return null}}});var YK,KK=C(()=>{"use strict";dd();YK={name:"gallery",description:"All models in one scene, single camera (no cell limit)",minModels:1,maxModels:32,compute(n,e){if(n.length===0)return null;let t=Number(e.spacing)||6,i=e.angle||"iso",r=Number(e.cols)||0,s=r>0?r:Math.ceil(Math.sqrt(n.length)),a=Math.ceil(n.length/s),o=n.map((f,h)=>{let d=h%s,u=Math.floor(h/s),m=(d-(s-1)/2)*t,_=(u-(a-1)/2)*t;return{path:f.path,position:[m,0,_],color:f.color,wireframe:f.wireframe}}),l=ll(1,1,0),c=[{modelIndex:0,camera:go(i,void 0,3+Math.max(s,a)*.5),viewport:l[0]}];return{placements:o,cells:c}}}});function tp(n){jK.set(n.name,n)}function UO(n){return jK.get(n)}var jK,qK=C(()=>{"use strict";UK();GK();WK();zK();BO();KK();dd();BO();jK=new Map;tp(BK);tp(VK);tp(kK);tp(HK);tp(XK);tp(YK)});var $K={};et($K,{registerCodeBlockProcessor:()=>yue,registerGridCodeBlockProcessor:()=>Due});async function QK(n,e,t,i){var h,d,u;let r=typeof e=="string"?{path:e}:e,s=xd(n,r.path);if(!s)throw new Error(Cr("workbench.fileNotFound",{path:r.path}));let a=(d=(h=s.split(".").pop())==null?void 0:h.toLowerCase())!=null?d:"";if(!fl(a))throw rp(a)?new Error(te("codeBlock.splatDisabled")):new Error(Cr("codeBlock.unsupportedFormat",{ext:`.${a}`,formats:Yf().join(", ")}));let o=(u=Kf(n,s))!=null?u:void 0,l=od(t),c=await cd({path:s,absolutePath:o,preferConversionExts:fd(t),conversionManager:l,convertedAssetCache:i}),f=Mg(c);return{sourcePath:s,effectivePath:f.path,effectiveExt:f.ext,warnings:f.warnings,model:{...r,path:f.path}}}async function Cue(n,e,t,i){let r=[];for(let s of e.models){let a=await QK(n,s,t,i);r.push(a.model)}return{...e,models:r}}function JK(n){gr()&&n.createDiv({cls:"ai3d-mobile-mode-hint ai3d-mobile-mode-hint--inline",text:te("codeBlock.mobileHint")})}function yue(n,e,t,i){return{id:"3d",handler:(r,s,a)=>{var y,M;let o=r.trim();if(!o){s.createDiv({cls:"ai3d-inline-empty",text:te("codeBlock.noModelPathOrConfig")});return}let l;if(o.startsWith("{")||o.startsWith("["))try{let D=JSON.parse(o);l=Pue(D)}catch(D){let O=s.createDiv({cls:"ai3d-json-error"}),V=String(D).match(/position\s+(\d+)/),N=Cr("codeBlock.jsonParseError",{error:String(D)});if(V){let w=parseInt(V[1],10),U=o.substring(0,w).split(` -`);N+=Cr("codeBlock.jsonParseLine",{line:String(U.length)})}O.createEl("pre",{text:N});return}else l={models:[{path:o}]};if(!l.models||l.models.length===0){s.createDiv({cls:"ai3d-inline-empty",text:te("codeBlock.noModelsInConfig")});return}l.models.length>1&&console.warn(`[AI3D] \`\`\`3d only supports one model; ${l.models.length-1} additional models ignored. Use \`\`\`3dgrid for multi-model.`);let f=l.models[0],h=xd(n,f.path);if(!h){s.createDiv({cls:"ai3d-inline-empty",text:Cr("workbench.fileNotFound",{path:f.path})});return}let d=(M=(y=h.split(".").pop())==null?void 0:y.toLowerCase())!=null?M:"";if(!fl(d)){s.createDiv({cls:"ai3d-inline-empty",text:rp(d)?te("codeBlock.splatDisabled"):Cr("codeBlock.unsupportedFormat",{ext:`.${d}`,formats:Yf().join(", ")})});return}let u=e(),m=s.createDiv({cls:"ai3d-preview-host"});l.height&&m.style.setProperty("--min-height",typeof l.height=="number"?`${l.height}px`:l.height),l.width&&m.style.setProperty("--max-width",typeof l.width=="number"?`${l.width}px`:l.width);let _=m.createEl("canvas",{cls:"ai3d-canvas-full"});_.tabIndex=0,_.addEventListener("keydown",D=>{var V,N,w,U,G;if(x||!p)return;let O=D.key.toLowerCase();O==="r"?((V=p.resetView)==null||V.call(p),D.preventDefault()):O==="w"?((N=p.toggleWireframe)==null||N.call(p),D.preventDefault()):O==="g"?((w=p.toggleOrientationGizmo)==null||w.call(p),D.preventDefault()):O==="b"?((U=p.toggleBoundingBox)==null||U.call(p),D.preventDefault()):O===" "&&((G=p.toggleAnimation)==null||G.call(p),D.preventDefault())}),m.appendChild(_);let p=null,g=null,v=!0,x=!1,A=!1,E=Rg(s,m,n,()=>p,()=>h,()=>{x||(x=!0,T.disconnect(),I.disconnect(),g==null||g.destroy(),g=null,p==null||p.destroy(),p=null,m.remove())},e,()=>{if(v=!v,g){let D=m.querySelector(".ai3d-annotation-overlay");D&&D.classList.toggle("is-hidden",!v)}return v},void 0,{labelKey:"helper.toggleAnnotationsVisibilityLabel",activeTooltipKey:"helper.annotationsVisible",inactiveTooltipKey:"helper.annotationsHidden"});JK(s);let T=new MutationObserver(()=>{x||s.contains(m)||(x=!0,T.disconnect(),I.disconnect(),g==null||g.destroy(),g=null,p==null||p.destroy(),p=null)});T.observe(s,{childList:!0});async function R(){var O,V,N,w,U,G,J;if(A||x||!h)return;A=!0;let D=hd(m);try{let Y=(O=Kf(n,h))!=null?O:void 0,Q=od(u);D.setPhaseKey("loading.preparingModel");let X=await cd({path:h,absolutePath:Y,preferConversionExts:fd(u),conversionManager:Q,convertedAssetCache:t}),j=Mg(X),me=(V=i==null?void 0:i(h))!=null?V:[],xe={ext:j.ext,annotationMode:me.length>0?"readonly":"none",rendererRollout:u.previewRendererRollout,useThreeRenderer:u.useThreeRenderer},{preview:Ge}=await ad(ZK,{surface:"code-block",modelPath:h},_,xe);p=Ge,E.syncCapabilities(),D.setPhaseKey("loading.loadingModel");let se=await Da(n,j.path),pe=async _e=>Da(n,_e);if(x){D.hide();return}let ie=await p.loadModel(se,j.ext,pe,j.path);if(D.setProgress(100),$m(m,ie),x){D.hide();return}if(((N=l.scene)==null?void 0:N.autoRotate)===void 0&&u.autoRotateDefault&&(l.scene={...l.scene,autoRotate:!0,autoRotateSpeed:u.autoRotateSpeed}),p.applyConfig(l),(w=p.setRenderQuality)==null||w.call(p,u.renderQuality,u.renderScale),E.syncCapabilities(),me.length>0&&pR(p)){let _e=p.getAnnotationProvider();_e.canvas&&(g=new Mc(_e,m,"readonly",me,void 0,Qm(n),void 0,{app:n,previewMode:u.annotationPreviewMode}),E.showAnnotateButton(),E.updateAnnotationBadge(me.length))}d==="stl"&&f.color&&((U=p.setSTLColor)==null||U.call(p,f.color)),d==="stl"&&f.wireframe!==void 0&&((G=p.setWireframe)==null||G.call(p,f.wireframe)),(J=p.hasAnimations)!=null&&J.call(p)&&E.showAnimButton(),D.hide()}catch(Y){x=!0,T.disconnect(),I.disconnect(),D.hide(),p==null||p.destroy(),p=null,m.replaceChildren();let Q=qm(Y);jm(Y)?console.warn("[AI3D] Inline preview blocked by converter settings:",Q.message):console.error("[AI3D] Inline preview failed:",Y),Jm(m,Q)}}let I=new IntersectionObserver(D=>{for(let O of D)O.isIntersecting&&(I.disconnect(),R())},{rootMargin:"200px"});I.observe(m)}}}function Pue(n){if(typeof n=="string")return{models:[{path:n}]};if(typeof n!="object"||n===null)return{models:[]};let e=n;return typeof e.path=="string"?{models:[{path:e.path,color:e.color,wireframe:e.wireframe}],camera:e.camera,lights:e.lights,scene:e.scene,stl:e.stl,width:e.width,height:e.height}:{models:Array.isArray(e.models)?e.models.filter(i=>{let r=typeof i=="string"?i:i&&typeof i=="object"&&"path"in i?i.path:void 0;return typeof r=="string"&&r.length>0}).map(i=>{if(typeof i=="string")return{path:i};let r=i;return{path:r.path,color:r.color,wireframe:r.wireframe}}):[],camera:e.camera,lights:e.lights,scene:e.scene,stl:e.stl,width:e.width,height:e.height}}function Due(n,e,t){return{id:"3dgrid",handler:(i,r,s)=>{let a=i.trim();if(!a){r.createDiv({cls:"ai3d-inline-empty",text:te("codeBlock.noConfigSpecified")});return}let o;try{o=JSON.parse(a)}catch(f){r.createDiv({cls:"ai3d-json-error"}).createEl("pre",{text:`JSON parse error: ${String(f)}`});return}if(o.preset!=="compose"&&(!o.models||o.models.length===0)){r.createDiv({cls:"ai3d-inline-empty",text:te("codeBlock.noModelsSpecified")});return}let l=e(),c=hd(r);(async()=>{var T,R,I,y;let f=[];for(let M of(T=o.models)!=null?T:[])try{let D=await QK(n,M,l,t);f.push(D)}catch(D){c.hide(),r.createDiv({cls:"ai3d-inline-empty",text:D instanceof Error?D.message:String(D)});return}let h=f.map(M=>M.model),d=(I=(R=f[0])==null?void 0:R.sourcePath)!=null?I:"",u=r.createDiv({cls:"ai3d-grid-host"}),m=u.createEl("canvas");if(m.tabIndex=0,m.addEventListener("keydown",M=>{var O,V;if(p||!_)return;let D=M.key.toLowerCase();D==="r"?((O=_.resetView)==null||O.call(_),M.preventDefault()):D==="w"&&((V=_.toggleWireframe)==null||V.call(_),M.preventDefault())}),u.appendChild(m),typeof o.rowHeight=="number"){let M=o.preset==="compose"?1:Math.ceil(h.length/((y=o.columns)!=null?y:Math.min(h.length,3)));u.style.setProperty("--grid-height",`${o.rowHeight*M}px`)}let _=null,p=!1,g=!1,v=Rg(r,u,n,()=>_,()=>d,()=>{p||(p=!0,x.disconnect(),E.disconnect(),_==null||_.destroy(),_=null,u.remove())},e);JK(r);let x=new MutationObserver(()=>{p||r.contains(u)||(p=!0,x.disconnect(),E.disconnect(),_==null||_.destroy(),_=null)});x.observe(r,{childList:!0});async function A(){var M,D,O,V,N,w,U;if(!(g||p)){g=!0,c.setPhaseKey("codeBlock.renderingGrid"),c.setProgress(-1);try{let{renderer:G}=await z9(ZK,{surface:"3dgrid",preset:(M=o.preset)!=null?M:"compare",modelCount:(O=(D=o.models)==null?void 0:D.length)!=null?O:0},m);_=G,v.syncCapabilities();let J=_,Y=async Q=>Da(n,Q);if(o.preset==="compose"){if(!o.sections||o.sections.length===0){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:te("codeBlock.composeRequiresSections")}),_.destroy(),_=null;return}let Q=[];for(let j of o.sections)try{if(!d){let xe=j.models[0];if(xe){let Ge=typeof xe=="string"?xe:xe.path;d=(V=xd(n,Ge))!=null?V:Ge}}let me=await Cue(n,j,l,t);Q.push(me)}catch(me){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:me instanceof Error?me.message:String(me)}),J.destroy(),_=null;return}let X=wO(Q,(N=o.direction)!=null?N:"horizontal",Number((w=o.params)==null?void 0:w.gap)||.02,j=>typeof j=="string"?null:j,UO);if(!X){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:te("codeBlock.composeNoValidSections")}),J.destroy(),_=null;return}await J.loadWithPreset(X,Y)}else if(o.preset){let Q=UO(o.preset);if(!Q){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:Cr("codeBlock.unknownPreset",{preset:o.preset})}),J.destroy(),_=null;return}let X=Q.compute(h,(U=o.params)!=null?U:{});if(!X){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:Cr("codeBlock.presetRequiresModels",{preset:o.preset,min:String(Q.minModels),max:String(Q.maxModels),count:String(h.length)})}),J.destroy(),_=null;return}await J.loadWithPreset(X,Y)}else await J.loadModels(h,o,Y);if(p){c.hide();return}c.hide()}catch(G){p=!0,x.disconnect(),E.disconnect(),c.hide(),_==null||_.destroy(),_=null,console.error("[AI3D Grid] Failed:",G),u.createDiv({cls:"ai3d-inline-empty",text:Cr("codeBlock.gridFailed",{reason:String(G)})})}}}let E=new IntersectionObserver(M=>{for(let D of M)D.isIntersecting&&(E.disconnect(),A())},{rootMargin:"200px"});E.observe(u)})()}}}var ZK,ej=C(()=>{"use strict";hl();Wg();mR();xg();ea();qK();aO();LR();NR();gO();FR();wR();yg();Zm();Pa();BR();ca();Zn();ZK=cr("inline-code-block")});function Og(n){return createDiv().createDiv(n?{cls:n}:void 0)}function VO(n,e){return createDiv().createEl(n,e?{cls:e}:void 0)}var tj=C(()=>{"use strict"});var nj={};et(nj,{registerLivePreviewExtension:()=>Oue});function ij(n,e,t,i,r,s,a,o,l,c,f,h,d,u,m){var g,v;let _="state"in n?n.state.doc:n.doc,p=[];for(let x=1;x<=_.lines;x++){let A=_.line(x),E=A.text;if(!E.includes("!["))continue;let T=0;for(;T0&&E[R-1]==="\\"){T=R+3;continue}let I=E.indexOf("]]",R+3);if(I===-1)break;let M=E.slice(R+3,I).split("|"),D=M[0].trim(),O=(v=(g=D.split(".").pop())==null?void 0:g.toLowerCase())!=null?v:"";if(!fl(O)){T=I+2;continue}let V=400,N=300;if(M.length>1){let J=M[1].trim().match(/^(\d+)\s*x\s*(\d+)$/);J&&(V=parseInt(J[1],10),N=parseInt(J[2],10))}let w=xd(e,D);if(!w){T=I+2;continue}let U=A.from+R,G=A.from+I+2;p.push(ip.Decoration.replace({widget:new GO(e,w,V,N,t,i,r,s,a,o,l,c,f,h,d,u,m),block:!0}).range(U,G)),T=I+2}}return p}function rj(n){return n.length===0?ud.RangeSet.empty:ud.RangeSet.of(n,!0)}function Oue(n,e,t,i){let r=ud.StateField.define({create(s){let a=e(),o=ij(s,n,a.autoRotateDefault,a.enabledConverterIds,a.freecadCommand,a.obj2gltfCommand,a.fbx2gltfCommand,a.freecadcmdCommand,a.preferObj2gltfForObj,a.preferFbx2gltfForFbx,a.annotationPreviewMode,a.previewRendererRollout,a.useThreeRenderer,t,i);return rj(o)},update(s,a){if(a.docChanged){let o=e(),l=ij(a.state,n,o.autoRotateDefault,o.enabledConverterIds,o.freecadCommand,o.obj2gltfCommand,o.fbx2gltfCommand,o.freecadcmdCommand,o.preferObj2gltfForObj,o.preferFbx2gltfForFbx,o.annotationPreviewMode,o.previewRendererRollout,o.useThreeRenderer,t,i);return rj(l)}return s.map(a.changes)},provide:s=>ip.EditorView.decorations.from(s)});return[ud.Prec.highest(r)]}var ip,ud,Lue,GO,sj=C(()=>{"use strict";ip=require("@codemirror/view"),ud=require("@codemirror/state");hl();Wg();mR();xg();ea();LR();NR();FR();wR();yg();tj();Zm();ca();BR();Pa();Zn();Lue=cr("inline-live-preview"),GO=class extends ip.WidgetType{constructor(t,i,r,s,a,o,l,c,f,h,d,u,m,_,p,g,v){super();this.app=t;this.modelPath=i;this.width=r;this.height=s;this.autoRotate=a;this.enabledConverterIds=o;this.freecadCommand=l;this.obj2gltfCommand=c;this.fbx2gltfCommand=f;this.freecadcmdCommand=h;this.preferObj2gltfForObj=d;this.preferFbx2gltfForFbx=u;this.annotationPreviewMode=m;this.previewRendererRollout=_;this.useThreeRenderer=p;this.convertedAssetCache=g;this.getAnnotations=v;this.preview=null;this.annotationMgr=null;this.readyObs=null;this.pollId=0;this.initStarted=!1;this.destroyed=!1;this.initGeneration=0}eq(t){return this.modelPath===t.modelPath&&this.width===t.width&&this.height===t.height&&this.autoRotate===t.autoRotate&&this.enabledConverterIds.join("|")===t.enabledConverterIds.join("|")&&this.freecadCommand===t.freecadCommand&&this.obj2gltfCommand===t.obj2gltfCommand&&this.fbx2gltfCommand===t.fbx2gltfCommand&&this.freecadcmdCommand===t.freecadcmdCommand&&this.preferObj2gltfForObj===t.preferObj2gltfForObj&&this.preferFbx2gltfForFbx===t.preferFbx2gltfForFbx&&this.annotationPreviewMode===t.annotationPreviewMode&&this.previewRendererRollout===t.previewRendererRollout&&this.convertedAssetCache===t.convertedAssetCache}toDOM(){let t=gr(),i=Og("ai3d-embed-preview ai3d-cm-widget");i.setAttribute("contenteditable","false"),t&&i.classList.add("is-mobile","is-mobile-scroll-mode");let r=VO("canvas","ai3d-embed-canvas"),s=t?Math.min(this.height,220):this.height;r.style.setProperty("--ai3d-embed-height",`${s}px`),i.appendChild(r);let a=hd(i),o=Og("ai3d-embed-error is-hidden");if(i.appendChild(o),t){let h=!1,d=Og("ai3d-mobile-mode-bar"),u=Og("ai3d-mobile-mode-hint");u.textContent=te("livePreview.mobileHint");let m=VO("button","ai3d-mobile-mode-btn");m.type="button";let _=()=>{i.classList.toggle("is-mobile-interactive",h),i.classList.toggle("is-mobile-scroll-mode",!h),m.textContent=h?te("helper.scrollAction"):te("helper.interactAction"),m.classList.toggle("ai3d-btn-active",h),m.setAttribute("aria-label",h?te("helper.disableInteractionLabel"):te("helper.enableInteractionLabel"))};m.addEventListener("click",()=>{h=!h,_()}),_(),d.append(u,m),i.appendChild(d)}let l=()=>{this.destroyed||this.initStarted||!i.isConnected||r.clientWidth<=0||r.clientHeight<=0||(this.initStarted=!0,this.stopReadyWatch(),this.initPreview(i,r,a,o,++this.initGeneration))};this.readyObs=new ResizeObserver(()=>l()),this.readyObs.observe(i),this.readyObs.observe(r);let c=0,f=()=>{this.destroyed||this.initStarted||(l(),!this.initStarted&&(++c>240||(this.pollId=window.requestAnimationFrame(f))))};return this.pollId=window.requestAnimationFrame(f),i}async initPreview(t,i,r,s,a){var o,l,c,f,h,d;try{let u=(o=Kf(this.app,this.modelPath))!=null?o:void 0,m=od({enabledConverterIds:this.enabledConverterIds,freecadCommand:this.freecadCommand,obj2gltfCommand:this.obj2gltfCommand,fbx2gltfCommand:this.fbx2gltfCommand,freecadcmdCommand:this.freecadcmdCommand});r.setPhaseKey("loading.preparingModel");let _=await cd({path:this.modelPath,absolutePath:u,preferConversionExts:fd({preferObj2gltfForObj:this.preferObj2gltfForObj,preferFbx2gltfForFbx:this.preferFbx2gltfForFbx}),conversionManager:m,convertedAssetCache:this.convertedAssetCache}),p=(c=(l=this.getAnnotations)==null?void 0:l.call(this,this.modelPath))!=null?c:[],g={ext:_.effectiveExt,annotationMode:p.length>0?"readonly":"none",rendererRollout:this.previewRendererRollout,useThreeRenderer:this.useThreeRenderer},{preview:v}=await ad(Lue,{surface:"live-preview",modelPath:this.modelPath},i,g);if(this.destroyed||a!==this.initGeneration){v.destroy();return}this.preview=v,r.setPhaseKey("loading.loadingModel");let x=await Da(this.app,_.effectivePath);if(this.destroyed||a!==this.initGeneration){(f=this.preview)==null||f.destroy(),this.preview=null;return}let A=await this.preview.loadModel(x,_.effectiveExt,E=>Da(this.app,E),_.effectivePath);if(this.destroyed||a!==this.initGeneration){(h=this.preview)==null||h.destroy(),this.preview=null;return}if($m(t,A),this.autoRotate&&this.preview.applyConfig({models:[],scene:{autoRotate:!0,autoRotateSpeed:.5}}),p.length>0&&pR(this.preview)){let E=this.preview.getAnnotationProvider();E.canvas&&(this.annotationMgr=new Mc(E,t,"readonly",p,void 0,Qm(this.app),void 0,{app:this.app,previewMode:this.annotationPreviewMode}))}r.setProgress(100),r.hide()}catch(u){if(this.destroyed||a!==this.initGeneration)return;(d=this.preview)==null||d.destroy(),this.preview=null,r.hide(),s.remove(),t.replaceChildren();let m=qm(u);jm(u)?console.warn("[AI3D] Live Preview blocked by converter settings:",m.message):console.error("[AI3D] Live Preview failed:",u),Jm(t,m)}}destroy(){var t;this.destroyed=!0,window.cancelAnimationFrame(this.pollId),this.pollId=0,this.stopReadyWatch(),(t=this.annotationMgr)==null||t.destroy(),this.annotationMgr=null,this.preview&&(this.preview.destroy(),this.preview=null),this.initStarted=!1}stopReadyWatch(){var t;(t=this.readyObs)==null||t.disconnect(),this.readyObs=null}ignoreEvent(){return!0}}});var Nue={};et(Nue,{default:()=>WR});module.exports=vj(Nue);var vo=require("obsidian");XR();hl();hl();var Vue=new Set(Yf());var Rc={analysisMode:"local",serviceBaseUrl:"",copySourceModelToVault:!1,sourceModelFolder:"Assets/3D",reportFolder:"Analysis/3D Reports",partFolder:"Parts/3D Components",previewFolder:"Media/3D Previews",maxFileSizeMb:50,autoGenerateKnowledgeNotes:!0,annotationPreviewMode:"plain-text",previewRendererRollout:"three-direct-glb",useThreeRenderer:!0,experimentalThreeWorkbench:!1,sendRawModelToRemote:!1,sendPreviewImagesToRemote:!1,sendGeometrySummaryToRemote:!1,defaultKnowledgeTaxonomy:"default-v1",defaultCanvasHeight:400,autoRotateDefault:!1,autoRotateSpeed:.5,renderQuality:"high",renderScale:1,snapshotFolder:"Media/3D Previews",snapshotNaming:"model-name",enabledConverterIds:[],freecadCommand:"",obj2gltfCommand:"",fbx2gltfCommand:"",assimpCommand:"",freecadcmdCommand:"",preferObj2gltfForObj:!1,preferFbx2gltfForFbx:!1,logLevel:"warn",locale:"en"};function JO(n){let e={...n},t=new Set;return{getState:()=>e,setState(i){e={...e,...i};let r=[...t];for(let s of r)s()},subscribe(i){return t.add(i),()=>{t.delete(i)}}}}var Aj={settings:{...Rc},currentModelPath:null,convertedAssetRecords:[],modelAssetProfiles:{},agentDraft:"",agentPlan:null,modelPreview:null,selectedPart:null};function $O(n){let e=JO(Aj),t=null;function i(){t&&window.clearTimeout(t),t=window.setTimeout(()=>{t=null,r().catch(a=>console.error("[AI3D] Auto-save failed:",a))},500)}async function r(){let a=e.getState(),o={settings:a.settings,convertedAssetRecords:a.convertedAssetRecords,modelAssetProfiles:a.modelAssetProfiles,agentDraft:a.agentDraft,agentPlan:a.agentPlan};await n.saveData(o)}e.subscribe(()=>i());let s=!1;return{store:e,get localeLoadedFromSaved(){return s},async load(){var o,l,c,f,h;let a=await n.loadData();a&&(s=!!((o=a.settings)!=null&&o.locale),e.setState({settings:{...Rc,...(l=a.settings)!=null?l:{}},convertedAssetRecords:(c=a.convertedAssetRecords)!=null?c:[],modelAssetProfiles:xj(a.modelAssetProfiles),agentDraft:(f=a.agentDraft)!=null?f:"",agentPlan:(h=a.agentPlan)!=null?h:null}))},async save(){t&&(window.clearTimeout(t),t=null),await r()},dispose(){t&&(window.clearTimeout(t),t=null)}}}function xj(n){if(!n||typeof n!="object")return{};let e={};for(let[t,i]of Object.entries(n)){if(!i||typeof i!="object")continue;let r=new Date().toISOString();e[t]={tags:Array.isArray(i.tags)?i.tags:[],notes:typeof i.notes=="string"?i.notes:"",annotations:Array.isArray(i.annotations)?i.annotations:[],analysisVersion:typeof i.analysisVersion=="string"?i.analysisVersion:void 0,reportNotePath:typeof i.reportNotePath=="string"?i.reportNotePath:void 0,analysisSidecarPath:typeof i.analysisSidecarPath=="string"?i.analysisSidecarPath:void 0,previewImagePaths:Array.isArray(i.previewImagePaths)?i.previewImagePaths.filter(s=>typeof s=="string"):void 0,createdAt:typeof i.createdAt=="string"?i.createdAt:r,updatedAt:typeof i.updatedAt=="string"?i.updatedAt:r}}return e}var Dg=require("obsidian");Wg();mR();xg();aO();LR();NR();gO();ea();FR();yg();wR();Zm();Pa();BR();ca();Zn();var VR="ai3d-direct-view",PO=cr("direct-view"),FK=new Set(["glb","gltf"]),Sue=["x","y","z"];function Tue(){return{tags:[],notes:"",annotations:[],createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}}function Aue(n,e){return n.experimentalThreeWorkbench&&n.useThreeRenderer&&e.strategy==="direct"&&FK.has(e.ext)&&FK.has(e.sourceExt)}function DO(n){return Math.round(n!=null?n:0).toLocaleString()}function xue(n){return[n.boundingSize.x,n.boundingSize.y,n.boundingSize.z].map(e=>e.toFixed(2)).join(" x ")}function Rue(n){return n==="three"?"Three.js":"Babylon.js"}function bue(n){return n instanceof Error&&n.message.includes("Missing external model resource:")}var UR=class extends Dg.FileView{constructor(t,i,r,s){super(t);this.preview=null;this.annotationMgr=null;this.annotationMode=!1;this.loadGeneration=0;this.escHandler=null;this.workbenchPanel=null;this.workbenchSummary=null;this.workbenchRoute=null;this.workbenchModelPath=null;this.getSettings=i,this.convertedAssetCache=r,this.ps=s}getViewType(){return VR}getDisplayText(){var t,i;return(i=(t=this.file)==null?void 0:t.name)!=null?i:te("workbench.modelTitle")}getIcon(){return"box"}async onOpen(){this.contentEl.empty(),this.contentEl.addClass("ai3d-direct-view"),this.file&&await this.loadModel(this.file)}async onLoadFile(t){this.contentEl.empty(),await this.loadModel(t)}onClose(){var t,i;return this.escHandler&&(activeDocument.removeEventListener("keydown",this.escHandler),this.escHandler=null),(t=this.annotationMgr)==null||t.destroy(),this.annotationMgr=null,(i=this.preview)==null||i.destroy(),this.preview=null,Promise.resolve()}async loadModel(t){var u,m,_,p,g;let i=++this.loadGeneration,r=gr();(u=this.annotationMgr)==null||u.destroy(),this.annotationMgr=null,this.annotationMode=!1,this.workbenchPanel=null,this.workbenchSummary=null,this.workbenchRoute=null,this.workbenchModelPath=null,(m=this.preview)==null||m.destroy(),this.preview=null,this.ps.store.setState({currentModelPath:t.path,modelPreview:null,selectedPart:null});let s=createDiv(),a=s.createDiv({cls:"ai3d-preview-host"}),o=s.createEl("canvas");o.className="ai3d-canvas-full",a.appendChild(o);let l=s.createDiv();l.className="ai3d-annot-mode-overlay is-hidden",a.appendChild(l),this.contentEl.appendChild(a);let c=null,f=v=>{var x;this.annotationMode=v,r&&v&&(c==null||c.setMobileInteractionMode(!0)),(x=this.annotationMgr)==null||x.hideEditor(),l.classList.toggle("is-hidden",!v)};this.escHandler&&activeDocument.removeEventListener("keydown",this.escHandler),this.escHandler=v=>{v.key==="Escape"&&this.annotationMode&&f(!1)},activeDocument.addEventListener("keydown",this.escHandler),c=Rg(this.contentEl,a,this.app,()=>this.preview,()=>t.path,()=>{this.leaf.detach()},this.getSettings,()=>(f(!this.annotationMode),this.annotationMode),v=>{!v&&this.annotationMode&&f(!1)});let h=this.contentEl.createDiv({cls:"ai3d-direct-workbench-panel is-hidden"});r&&this.contentEl.createDiv({cls:"ai3d-mobile-mode-hint ai3d-mobile-mode-hint--inline",text:te("directView.mobileHint")});let d=hd(a);try{let v=this.getSettings(),x=od(v),A=(_=Kf(this.app,t.path))!=null?_:void 0;d.setPhaseKey("loading.preparingModel");let E=await cd({path:t.path,absolutePath:A,preferConversionExts:fd(v),conversionManager:x,convertedAssetCache:this.convertedAssetCache});if(i!==this.loadGeneration)return;let T=Mg(E),R={ext:T.ext,annotationMode:"edit",allowEditModeOnThree:!0,allowWorkbenchFeaturesOnThree:Aue(v,T),requireWorkbenchFeatures:!0,rendererRollout:v.previewRendererRollout,useThreeRenderer:v.useThreeRenderer};c==null||c.syncCapabilities(),d.setPhaseKey("loading.loadingModel");let I=await Da(this.app,T.path),y=await this.createPreviewWithFallback(o,I,T,R,t.path);if(i!==this.loadGeneration){y.preview.destroy();return}this.preview=y.preview,a.dataset.ai3dBackend=y.route.backend,a.dataset.ai3dRouteReason=y.route.reason,c==null||c.syncCapabilities();let M=y.summary;$m(a,M),this.workbenchPanel=h,this.workbenchSummary=M,this.workbenchRoute=y.route,this.workbenchModelPath=t.path,this.renderWorkbenchPanel(h,M,y.route,t.path),this.ps.store.setState({currentModelPath:t.path,modelPreview:M,selectedPart:null}),PO.info("direct view model loaded",{path:t.path,effectivePath:T.path,effectiveExt:T.ext,strategy:T.strategy,backend:y.route.backend,routeReason:y.route.reason,meshCount:M.meshCount,triangleCount:M.triangleCount}),d.setProgress(100);let D=this.preview.getAnnotationProvider();if(D.canvas){let O=this.ps.store.getState().modelAssetProfiles[t.path],V=(p=O==null?void 0:O.annotations)!=null?p:[],N=Qm(this.app),w=uK(this.app);this.annotationMgr=new Mc(D,a,"edit",V,U=>{var Y;let G=this.ps.store.getState().modelAssetProfiles,J=(Y=G[t.path])!=null?Y:Tue();this.ps.store.setState({modelAssetProfiles:{...G,[t.path]:{...J,annotations:U,updatedAt:new Date().toISOString()}}}),c.updateAnnotationBadge(U.length)},N,w,{app:this.app,previewMode:this.getSettings().annotationPreviewMode}),c.showAnnotateButton(),c.updateAnnotationBadge(V.length),this.preview.onPick(U=>{var Q,X;if(!this.annotationMode||!this.annotationMgr)return;let G=U.screenX,J=U.screenY,Y=(X=(Q=this.preview)==null?void 0:Q.getPickWorldPoint(U))!=null?X:null;Y&&this.annotationMgr.showEditor(G,J,Y)})}d.hide()}catch(v){if(i!==this.loadGeneration)return;d.hide(),(g=this.preview)==null||g.destroy(),this.preview=null,a.replaceChildren(),h.addClass("is-hidden");let x=qm(v);jm(v)?console.warn("[AI3D] Direct view blocked by converter settings:",x.message):console.error("[AI3D] Direct view failed:",v),this.ps.store.getState().currentModelPath===t.path&&this.ps.store.setState({modelPreview:null,selectedPart:null}),Jm(a,x)}}renderWorkbenchPanel(t,i,r,s){var h,d;t.empty(),t.removeClass("is-hidden"),t.dataset.ai3dBackend=r.backend,t.dataset.ai3dRouteReason=r.reason;let a=t.createDiv({cls:"ai3d-direct-workbench-status"}),o=a.createDiv({cls:"ai3d-direct-workbench-line"});o.createSpan({cls:"ai3d-direct-workbench-label",text:te("directWorkbench.backendLabel")}),o.createSpan({cls:"ai3d-direct-workbench-value",text:Rue(r.backend)});let l=a.createDiv({cls:"ai3d-direct-workbench-line ai3d-direct-workbench-route"});l.createSpan({cls:"ai3d-direct-workbench-label",text:te("directWorkbench.routeLabel")}),l.createSpan({cls:"ai3d-direct-workbench-value",text:r.reason});let c=t.createDiv({cls:"ai3d-direct-workbench-metrics"});this.renderMetric(c,te("workbench.meshesLabel"),DO(i.meshCount)),this.renderMetric(c,i.splatCount!==void 0?te("workbench.splatsLabel"):te("workbench.trianglesLabel"),DO((h=i.splatCount)!=null?h:i.triangleCount)),this.renderMetric(c,te("workbench.materialsLabel"),DO(i.materialCount)),this.renderMetric(c,te("workbench.boundingSizeLabel"),xue(i)),this.renderMetric(c,te("directWorkbench.performanceLabel"),(d=i.performanceTier)!=null?d:"light");let f=t.createDiv({cls:"ai3d-direct-workbench-controls"});this.renderExplodeControls(f),this.renderKnowledgeControls(f,s)}refreshWorkbenchPanel(){!this.workbenchPanel||!this.workbenchSummary||!this.workbenchRoute||!this.workbenchModelPath||this.renderWorkbenchPanel(this.workbenchPanel,this.workbenchSummary,this.workbenchRoute,this.workbenchModelPath)}renderMetric(t,i,r){let s=t.createDiv({cls:"ai3d-direct-workbench-metric"});s.createSpan({cls:"ai3d-direct-workbench-label",text:i}),s.createSpan({cls:"ai3d-direct-workbench-value",text:r})}renderExplodeControls(t){let i=!!this.preview&&vR(this.preview),r=t.createDiv({cls:"ai3d-direct-workbench-control"}),s=r.createDiv({cls:"ai3d-direct-workbench-control-head"});s.createSpan({cls:"ai3d-direct-workbench-label",text:te("workbench.explodeLabel")});let a=s.createSpan({cls:"ai3d-direct-workbench-value",text:"0%"}),o="x",l=r.createDiv({cls:"ai3d-direct-workbench-axis",attr:{"aria-label":te("directWorkbench.explodeAxisLabel")}});for(let u of Sue){let m=l.createEl("button",{cls:u===o?"is-active":"",text:u.toUpperCase(),attr:{type:"button","data-ai3d-action":`set-explode-axis-${u}`}});m.disabled=!i,m.addEventListener("click",()=>{o=u;for(let _ of Array.from(l.querySelectorAll("button")))_.classList.toggle("is-active",_===m);d()})}let c=r.createDiv({cls:"ai3d-direct-workbench-range-row"}),f=c.createEl("input",{cls:"ai3d-direct-workbench-range",attr:{"data-ai3d-action":"set-explode"}});f.type="range",f.min="0",f.max="0.85",f.step="0.05",f.value="0",f.disabled=!i;let h=c.createEl("button",{cls:"ai3d-direct-workbench-reset",text:te("directWorkbench.explodeResetLabel"),attr:{type:"button","data-ai3d-action":"reset-explode"}});h.disabled=!i;let d=()=>{let u=Number.parseFloat(f.value);a.setText(`${Math.round(u*100)}%`),h.classList.toggle("is-active",u>0),this.preview&&vR(this.preview)&&this.preview.setExplode(u,o)};f.addEventListener("input",d),h.addEventListener("click",()=>{f.value="0",a.setText("0%"),h.classList.remove("is-active"),this.preview&&vR(this.preview)&&this.preview.resetExplode()})}renderKnowledgeControls(t,i){let r=this.ps.store.getState().modelAssetProfiles[i],s=t.createDiv({cls:"ai3d-direct-workbench-control ai3d-direct-workbench-knowledge"});s.createDiv({cls:"ai3d-direct-workbench-label",text:te("directWorkbench.knowledgeTitle")}),s.createDiv({cls:"ai3d-direct-workbench-value",text:r!=null&&r.knowledgeIndexPath?te("workbench.indexReady"):r!=null&&r.reportNotePath?te("workbench.noteReady"):te("workbench.noReportYet")});let a=s.createDiv({cls:"ai3d-direct-workbench-actions"}),o=a.createEl("button",{cls:"ai3d-direct-workbench-action",text:te("workbench.generateNoteAction"),attr:{type:"button","data-ai3d-action":"generate-note"}});o.addEventListener("click",()=>{o.disabled=!0,Promise.resolve().then(()=>(yO(),CO)).then(({generateKnowledgeNote:f})=>f(this.app,this.ps,{preview:this.preview})).catch(f=>{console.error("[AI3D] Generate knowledge note failed:",f)}).finally(()=>{o.disabled=!1,this.refreshWorkbenchPanel()})});let l=a.createEl("button",{cls:"ai3d-direct-workbench-action",text:te("workbench.openNoteAction"),attr:{type:"button","data-ai3d-action":"open-note"}});l.disabled=!(r!=null&&r.reportNotePath),l.addEventListener("click",()=>{var d;let f=(d=this.ps.store.getState().modelAssetProfiles[i])==null?void 0:d.reportNotePath;if(!f)return;let h=this.app.vault.getAbstractFileByPath(f);h instanceof Dg.TFile&&this.app.workspace.getLeaf(!0).openFile(h,{active:!0})});let c=a.createEl("button",{cls:"ai3d-direct-workbench-action",text:te("workbench.openIndexAction"),attr:{type:"button","data-ai3d-action":"open-index"}});c.disabled=!(r!=null&&r.knowledgeIndexPath),c.addEventListener("click",()=>{var d;let f=(d=this.ps.store.getState().modelAssetProfiles[i])==null?void 0:d.knowledgeIndexPath;if(!f)return;let h=this.app.vault.getAbstractFileByPath(f);h instanceof Dg.TFile&&this.app.workspace.getLeaf(!0).openFile(h,{active:!0})})}async createPreviewWithFallback(t,i,r,s,a){let o=await ad(PO,{surface:"direct-view",modelPath:a},t,s);try{let l=await o.preview.loadModel(i.slice(0),r.ext,c=>Da(this.app,c),r.path);return{preview:o.preview,summary:l,route:o.route}}catch(l){if(o.preview.destroy(),o.route.backend!=="three"||!s.allowWorkbenchFeaturesOnThree)throw l;console.warn("[AI3D] Experimental Three workbench failed; falling back to Babylon:",l);let c={...s,allowWorkbenchFeaturesOnThree:!1},f=await ad(PO,{surface:"direct-view-fallback",modelPath:a},t,c);try{let h=await f.preview.loadModel(i.slice(0),r.ext,d=>Da(this.app,d),r.path);return{preview:f.preview,summary:h,route:f.route}}catch(h){throw f.preview.destroy(),bue(l)?l:h}}}};var wK=require("obsidian");hl();Pa();var GR=class extends wK.FuzzySuggestModal{constructor(e,t){super(e),this.onChoose=t,this.setPlaceholder(te("modal.selectModel"))}getItems(){return this.app.vault.getFiles().filter(e=>{let t=e.extension.toLowerCase();return fl(t)})}getItemText(e){return e.path}onChooseItem(e){this.onChoose(e)}};var $t=require("obsidian");Wf();Pa();ca();ir();var LO=wg();function Iue(){switch(LO==null?void 0:LO.platform){case"win32":return{python:"Path to python executable",freecad:"Path to FreeCADCmd.exe",obj2gltf:"Path to obj2gltf.cmd",fbx2gltf:"Path to FBX2glTF.exe"};case"darwin":return{python:"Path to python3",freecad:"Path to FreeCADCmd",obj2gltf:"Path to obj2gltf",fbx2gltf:"Path to FBX2glTF"};case"linux":return{python:"Path to python3",freecad:"Path to freecadcmd",obj2gltf:"Path to obj2gltf",fbx2gltf:"Path to FBX2glTF"};default:return{python:"Path to python executable",freecad:"Path to FreeCAD command",obj2gltf:"Path to obj2gltf",fbx2gltf:"Path to FBX2glTF"}}}var kR=class extends $t.PluginSettingTab{constructor(t,i){super(t,i);this.diagnosticsRunId=0;this.plugin=i}display(){let{containerEl:t}=this;t.empty(),np(this.plugin.getSettings().locale);let i=Iue(),r=gr(),s=null,a=(l,c,f)=>{let h=l.createEl("details",{cls:"ai3d-settings-secondary-menu"});h.createEl("summary",{cls:"ai3d-settings-secondary-menu-summary",text:c});let d=h.createDiv({cls:"ai3d-settings-secondary-menu-body"});return d.createEl("p",{cls:"setting-item-description",text:f}),d},o=()=>{s&&(this.diagnosticsRunId++,s.empty(),s.createEl("p",{text:te("settings.diagnostics.idle")}))};if(new $t.Setting(t).setName(te("settings.title")).setHeading(),new $t.Setting(t).setName(te("settings.language")).setDesc(te("settings.language.desc")).addDropdown(l=>l.addOption("en","English").addOption("zh-CN","\u7B80\u4F53\u4E2D\u6587").setValue(this.plugin.getSettings().locale).onChange(c=>{this.plugin.updateSettings({locale:c}),this.display()})),new $t.Setting(t).setName(te("settings.folders")).setHeading(),new $t.Setting(t).setName(te("settings.sourceModelFolder")).setDesc(te("settings.sourceModelFolder.desc")).addText(l=>l.setPlaceholder(Rc.sourceModelFolder).setValue(this.plugin.getSettings().sourceModelFolder).onChange(c=>{this.plugin.updateSettings({sourceModelFolder:c})})),new $t.Setting(t).setName(te("settings.reportFolder")).setDesc(te("settings.reportFolder.desc")).addText(l=>l.setPlaceholder(Rc.reportFolder).setValue(this.plugin.getSettings().reportFolder).onChange(c=>{this.plugin.updateSettings({reportFolder:c})})),new $t.Setting(t).setName(te("settings.partFolder")).setDesc(te("settings.partFolder.desc")).addText(l=>l.setPlaceholder(Rc.partFolder).setValue(this.plugin.getSettings().partFolder).onChange(c=>{this.plugin.updateSettings({partFolder:c})})),new $t.Setting(t).setName(te("settings.snapshotFolder")).setDesc(te("settings.snapshotFolder.desc")).addText(l=>l.setPlaceholder(Rc.snapshotFolder).setValue(this.plugin.getSettings().snapshotFolder).onChange(c=>{this.plugin.updateSettings({snapshotFolder:c})})),new $t.Setting(t).setName(te("settings.behavior")).setHeading(),new $t.Setting(t).setName(te("settings.autoGenerateKnowledgeNotes")).setDesc(te("settings.autoGenerateKnowledgeNotes.desc")).addToggle(l=>l.setValue(this.plugin.getSettings().autoGenerateKnowledgeNotes).onChange(c=>{this.plugin.updateSettings({autoGenerateKnowledgeNotes:c})})),new $t.Setting(t).setName(te("settings.annotationPreviewMode")).setDesc(te("settings.annotationPreviewMode.desc")).addDropdown(l=>l.addOption("plain-text",te("settings.annotationPreviewMode.plainText")).addOption("markdown",te("settings.annotationPreviewMode.markdown")).setValue(this.plugin.getSettings().annotationPreviewMode).onChange(c=>{this.plugin.updateSettings({annotationPreviewMode:c})})),new $t.Setting(t).setName(te("settings.previewRendererRollout")).setDesc(te("settings.previewRendererRollout.desc")).addDropdown(l=>l.addOption("babylon-safe",te("settings.previewRendererRollout.babylonSafe")).addOption("three-readonly-glb",te("settings.previewRendererRollout.readonly")).addOption("three-direct-glb",te("settings.previewRendererRollout.direct")).setValue(this.plugin.getSettings().previewRendererRollout).onChange(c=>{this.plugin.updateSettings({previewRendererRollout:c})})),new $t.Setting(t).setName(te("settings.useThreeRenderer")).setDesc(te("settings.useThreeRenderer.desc")).addToggle(l=>l.setValue(this.plugin.getSettings().useThreeRenderer).onChange(c=>{this.plugin.updateSettings({useThreeRenderer:c})})),new $t.Setting(t).setName(te("settings.experimentalThreeWorkbench")).setDesc(te("settings.experimentalThreeWorkbench.desc")).addToggle(l=>l.setValue(this.plugin.getSettings().experimentalThreeWorkbench).onChange(c=>{this.plugin.updateSettings({experimentalThreeWorkbench:c})})),new $t.Setting(t).setName(te("settings.autoRotateDefault")).setDesc(te("settings.autoRotateDefault.desc")).addToggle(l=>l.setValue(this.plugin.getSettings().autoRotateDefault).onChange(c=>{this.plugin.updateSettings({autoRotateDefault:c})})),new $t.Setting(t).setName(te("settings.snapshotNaming")).setDesc(te("settings.snapshotNaming.desc")).addDropdown(l=>l.addOption("model-name",te("settings.snapshotNaming.modelName")).addOption("timestamp",te("settings.snapshotNaming.timestamp")).setValue(this.plugin.getSettings().snapshotNaming).onChange(c=>{this.plugin.updateSettings({snapshotNaming:c})})),new $t.Setting(t).setName(te("settings.logLevel")).setDesc(te("settings.logLevel.desc")).addDropdown(l=>l.addOption("debug","Debug").addOption("info","Info").addOption("warn","Warn").addOption("error","Error").setValue(this.plugin.getSettings().logLevel).onChange(c=>{this.plugin.updateSettings({logLevel:c})})),new $t.Setting(t).setName(te("settings.knowledgeGeneration")).setHeading(),new $t.Setting(t).setName(te("settings.analysisMode")).setDesc(te("settings.analysisMode.desc")).addDropdown(l=>l.addOption("local",te("settings.analysisMode.local")).addOption("hybrid",te("settings.analysisMode.hybrid")).addOption("remote",te("settings.analysisMode.remote")).setValue(this.plugin.getSettings().analysisMode).onChange(c=>{this.plugin.updateSettings({analysisMode:c})})),new $t.Setting(t).setName(te("settings.serviceBaseUrl")).setDesc(te("settings.serviceBaseUrl.desc")).addText(l=>l.setPlaceholder("Local draft service URL").setValue(this.plugin.getSettings().serviceBaseUrl).onChange(c=>{this.plugin.updateSettings({serviceBaseUrl:c.trim()})})),new $t.Setting(t).setName(te("settings.sendGeometrySummaryToRemote")).setDesc(te("settings.sendGeometrySummaryToRemote.desc")).addToggle(l=>l.setValue(this.plugin.getSettings().sendGeometrySummaryToRemote).onChange(c=>{this.plugin.updateSettings({sendGeometrySummaryToRemote:c})})),new $t.Setting(t).setName(te("settings.sendPreviewImagesToRemote")).setDesc(te("settings.sendPreviewImagesToRemote.desc")).addToggle(l=>l.setValue(this.plugin.getSettings().sendPreviewImagesToRemote).onChange(c=>{this.plugin.updateSettings({sendPreviewImagesToRemote:c})})),new $t.Setting(t).setName(te("settings.sendRawModelToRemote")).setDesc(te("settings.sendRawModelToRemote.desc")).addToggle(l=>l.setValue(this.plugin.getSettings().sendRawModelToRemote).onChange(c=>{this.plugin.updateSettings({sendRawModelToRemote:c})})),new $t.Setting(t).setName(te("settings.converters")).setHeading(),r)t.createEl("p",{cls:"setting-item-description",text:te("settings.mobileSupport.desc")});else{let l=a(t,te("settings.converterMenu"),te("settings.converterMenu.desc"));new $t.Setting(l).setName(te("settings.enableCad")).setDesc(te("settings.enableCad.desc")).addToggle(h=>{let d=this.plugin.getSettings().enabledConverterIds.includes("freecad");return h.setValue(d).onChange(u=>{let m=this.plugin.getSettings().enabledConverterIds,_=u?Array.from(new Set([...m,"freecad"])):m.filter(p=>p!=="freecad");this.plugin.updateSettings({enabledConverterIds:_})})}),new $t.Setting(l).setName(te("settings.enableObj2gltf")).setDesc(te("settings.enableObj2gltf.desc")).addToggle(h=>{let d=this.plugin.getSettings().enabledConverterIds.includes("obj2gltf");return h.setValue(d).onChange(u=>{let m=this.plugin.getSettings().enabledConverterIds,_=u?Array.from(new Set([...m,"obj2gltf"])):m.filter(p=>p!=="obj2gltf");this.plugin.updateSettings({enabledConverterIds:_})})}),new $t.Setting(l).setName(te("settings.preferObj2gltf")).setDesc(te("settings.preferObj2gltf.desc")).addToggle(h=>h.setValue(this.plugin.getSettings().preferObj2gltfForObj).onChange(d=>{this.plugin.updateSettings({preferObj2gltfForObj:d})})),new $t.Setting(l).setName(te("settings.enableFbx2gltf")).setDesc(te("settings.enableFbx2gltf.desc")).addToggle(h=>{let d=this.plugin.getSettings().enabledConverterIds.includes("fbx2gltf");return h.setValue(d).onChange(u=>{let m=this.plugin.getSettings().enabledConverterIds,_=u?Array.from(new Set([...m,"fbx2gltf"])):m.filter(p=>p!=="fbx2gltf");this.plugin.updateSettings({enabledConverterIds:_})})}),new $t.Setting(l).setName(te("settings.enableMesh")).setDesc(te("settings.enableMesh.desc")).addToggle(h=>{let d=this.plugin.getSettings().enabledConverterIds.includes("assimp");return h.setValue(d).onChange(u=>{let m=this.plugin.getSettings().enabledConverterIds,_=u?Array.from(new Set([...m,"assimp"])):m.filter(p=>p!=="assimp");this.plugin.updateSettings({enabledConverterIds:_})})}),new $t.Setting(l).setName(te("settings.enableSldprt")).setDesc(te("settings.enableSldprt.desc")).addToggle(h=>{let d=this.plugin.getSettings().enabledConverterIds.includes("sldprt");return h.setValue(d).onChange(u=>{let m=this.plugin.getSettings().enabledConverterIds,_=u?Array.from(new Set([...m,"sldprt"])):m.filter(p=>p!=="sldprt");this.plugin.updateSettings({enabledConverterIds:_})})});let c=a(t,te("settings.environmentInspector"),te("settings.environmentInspector.desc"));new $t.Setting(c).setName(te("settings.paths")).setHeading(),new $t.Setting(c).setName(te("settings.pythonCmd")).setDesc(te("settings.pythonCmd.desc")).addText(h=>h.setPlaceholder(i.python).setValue(this.plugin.getSettings().freecadCommand).onChange(d=>{this.plugin.updateSettings({freecadCommand:d.trim()}),o()})),new $t.Setting(c).setName(te("settings.freecadCmd")).setDesc(te("settings.freecadCmd.desc")).addText(h=>h.setPlaceholder(i.freecad).setValue(this.plugin.getSettings().freecadcmdCommand).onChange(d=>{this.plugin.updateSettings({freecadcmdCommand:d.trim()}),o()})),new $t.Setting(c).setName(te("settings.obj2gltfCmd")).setDesc(te("settings.obj2gltfCmd.desc")).addText(h=>h.setPlaceholder(i.obj2gltf).setValue(this.plugin.getSettings().obj2gltfCommand).onChange(d=>{this.plugin.updateSettings({obj2gltfCommand:d.trim()}),o()})),new $t.Setting(c).setName(te("settings.fbx2gltfCmd")).setDesc(te("settings.fbx2gltfCmd.desc")).addText(h=>h.setPlaceholder(i.fbx2gltf).setValue(this.plugin.getSettings().fbx2gltfCommand).onChange(d=>{this.plugin.updateSettings({fbx2gltfCommand:d.trim()}),o()})),new $t.Setting(c).setName(te("settings.assimpCmd")).setDesc(te("settings.assimpCmd.desc")).addText(h=>h.setPlaceholder(i.python).setValue(this.plugin.getSettings().assimpCommand).onChange(d=>{this.plugin.updateSettings({assimpCommand:d.trim()}),o()})),new $t.Setting(c).setName(te("settings.diagnostics")).setDesc(te("settings.diagnostics.desc")).addButton(h=>h.setButtonText(te("settings.diagnostics.checkNow")).onClick(async()=>{h.setDisabled(!0),h.setButtonText(te("settings.diagnostics.checking")),s&&await this.renderCommandDiagnostics(s),h.setButtonText(te("settings.diagnostics.checkNow")),h.setDisabled(!1),new $t.Notice(te("settings.diagnostics.refreshed"))})),s=c.createDiv({cls:"ai3d-settings-diagnostics"}),o()}new $t.Setting(t).setName(te("settings.performance")).setHeading(),new $t.Setting(t).setName(te("settings.canvasHeight")).setDesc(te("settings.canvasHeight.desc")).addSlider(l=>l.setLimits(200,800,25).setValue(this.plugin.getSettings().defaultCanvasHeight).setDynamicTooltip().onChange(c=>{this.plugin.updateSettings({defaultCanvasHeight:c})})),new $t.Setting(t).setName(te("settings.autoRotateSpeed")).setDesc(te("settings.autoRotateSpeed.desc")).addSlider(l=>l.setLimits(.1,2,.1).setValue(this.plugin.getSettings().autoRotateSpeed).setDynamicTooltip().onChange(c=>{this.plugin.updateSettings({autoRotateSpeed:c})})),new $t.Setting(t).setName(te("settings.renderQuality")).setDesc(te("settings.renderQuality.desc")).addDropdown(l=>l.addOption("low","Low").addOption("medium","Medium").addOption("high","High").setValue(this.plugin.getSettings().renderQuality).onChange(c=>{this.plugin.updateSettings({renderQuality:c})})),new $t.Setting(t).setName(te("settings.renderScale")).setDesc(te("settings.renderScale.desc")).addSlider(l=>l.setLimits(.25,2,.25).setValue(this.plugin.getSettings().renderScale).setDynamicTooltip().onChange(c=>{this.plugin.updateSettings({renderScale:c})}))}async renderCommandDiagnostics(t){let i=++this.diagnosticsRunId;t.empty(),t.createEl("p",{text:te("settings.diagnostics.checkingAvailability")});let r=await bR(this.plugin.getSettings());if(i===this.diagnosticsRunId){t.empty();for(let s of r)this.renderCommandStatus(t,s)}}renderCommandStatus(t,i){var a;let r=t.createDiv({cls:"ai3d-settings-status-block"});r.createEl("strong",{text:`${i.label}: ${i.available?te("settings.diagnostics.available"):te("settings.diagnostics.notFound")}`});let s=[`${te("settings.diagnostics.sourceLabel")}: ${RR(i.source)}`,`${te("settings.diagnostics.commandLabel")}: ${i.command}`,i.resolvedPath&&i.resolvedPath!==i.command?`${te("settings.diagnostics.resolvedPathLabel")}: ${i.resolvedPath}`:"",i.detail].filter(Boolean);for(let o of s)r.createDiv({text:o});for(let o of(a=i.dependencyChecks)!=null?a:[])this.renderDependencyCheck(r,o)}renderDependencyCheck(t,i){let r=(()=>{switch(i.kind){case"cad-python":return te("settings.diagnostics.cadPythonCheck");case"mesh-python":return te("settings.diagnostics.meshPythonCheck");case"freecadcmd-cli":return te("settings.diagnostics.freecadCmdCheck");case"obj2gltf-cli":return te("settings.diagnostics.obj2gltfCheck");case"fbx2gltf-cli":return te("settings.diagnostics.fbx2gltfCheck")}})(),s=i.ok?te("settings.diagnostics.selfCheckOk"):te("settings.diagnostics.selfCheckFailed");t.createDiv({text:`${te("settings.diagnostics.selfCheckLabel")}: ${r} - ${s}`}),i.detail&&t.createDiv({text:i.detail})}};Wf();Zn();Pa();yg();ca();ea();var WR=class extends vo.Plugin{getSettings(){return this.ps.store.getState().settings}updateSettings(e){let i={...this.ps.store.getState().settings,...e};this.ps.store.setState({settings:i}),oO(i.logLevel),np(i.locale)}async onload(){var l;if(this.ps=$O(this),await this.ps.load(),this.convertedAssetCache=ZO(this.ps.store.getState().convertedAssetRecords,c=>this.ps.store.setState({convertedAssetRecords:c})),oO(this.getSettings().logLevel),!this.ps.localeLoadedFromSaved){let f=((l=navigator.language)!=null?l:"en").startsWith("zh")?"zh-CN":"en";this.updateSettings({locale:f})}np(this.getSettings().locale),this.addRibbonIcon("box",te("main.commandImportModel"),()=>this.importModel()),this.addCommand({id:"import-model",name:te("main.commandImportModel"),callback:()=>this.importModel()}),this.addCommand({id:"generate-note",name:te("main.commandGenerateNote"),callback:()=>this.generateNote()}),this.addCommand({id:"open-knowledge-index",name:te("main.commandOpenKnowledgeIndex"),callback:()=>void this.openKnowledgeIndex()}),this.addCommand({id:"clear-conversion-cache",name:te("main.commandClearConversionCache"),callback:()=>this.clearConversionCache()}),this.addCommand({id:"check-converters",name:te("main.commandCheckConverters"),callback:()=>void this.checkConverterCommands()}),this.addSettingTab(new kR(this.app,this)),this.registerView(VR,c=>new UR(c,()=>this.getSettings(),this.convertedAssetCache,this.ps)),this.registerExtensions(Yf(),VR);let{registerCodeBlockProcessor:e,registerGridCodeBlockProcessor:t}=await Promise.resolve().then(()=>(ej(),$K)),i=c=>{var f,h;return(h=(f=this.ps.store.getState().modelAssetProfiles[c])==null?void 0:f.annotations)!=null?h:[]},r=e(this.app,()=>this.getSettings(),this.convertedAssetCache,i);this.registerMarkdownCodeBlockProcessor(r.id,r.handler);let s=t(this.app,()=>this.getSettings(),this.convertedAssetCache);this.registerMarkdownCodeBlockProcessor(s.id,s.handler);let{registerLivePreviewExtension:a}=await Promise.resolve().then(()=>(sj(),nj)),o=a(this.app,()=>this.getSettings(),this.convertedAssetCache,i);for(let c of o)this.registerEditorExtension(c);this.setupHeadingPinObserver()}onunload(){this.ps.dispose()}setupHeadingPinObserver(){let e=".markdown-preview-view, .markdown-source-view",t=[".markdown-preview-view h1",".markdown-preview-view h2",".markdown-preview-view h3",".markdown-preview-view h4",".markdown-preview-view h5",".markdown-preview-view h6",".cm-heading-1",".cm-heading-2",".cm-heading-3",".cm-heading-4",".cm-heading-5",".cm-heading-6",".cm-header-1",".cm-header-2",".cm-header-3",".cm-header-4",".cm-header-5",".cm-header-6"].join(", "),i=new Map,r=M=>{if(M.length===0)return"var(--interactive-accent)";if(M.length===1)return M[0];let D=100/M.length;return`linear-gradient(135deg, ${M.map((O,V)=>{let N=Math.round(V*D),w=Math.round((V+1)*D);return`${O} ${N}% ${w}%`}).join(", ")})`},s=()=>{let M=new Map,D=this.ps.store.getState().modelAssetProfiles;for(let[O,V]of Object.entries(D))for(let N of V.annotations)if(N.headingRef&&N.id){let w=Cg(N.headingRef);if(!w)continue;let U=M.get(w);U||(U=[],M.set(w,U)),U.push({pinId:N.id,modelPath:O,color:N.color})}return M},a=M=>M.map(D=>`${D.pinId}:${D.modelPath}:${D.color}`).sort().join("|"),o=M=>Array.from(M.entries()).map(([D,O])=>`${D}=>${a(O)}`).sort().join("||"),l=M=>Cg(Array.from(M.childNodes).map(D=>{var O;return D.instanceOf(Element)&&D.classList.contains("ai3d-heading-pin-badge")?"":(O=D.textContent)!=null?O:""}).join(" ")),c=M=>{let D=i.get(M);D&&(M.removeEventListener("mouseover",D.handler),D.badge.remove(),delete M.dataset.pinBound,i.delete(M))},f=(M,D)=>{if(D.length===0){c(M);return}let O=a(D),V=i.get(M);if((V==null?void 0:V.signature)===O)return;V&&c(M),M.dataset.pinBound=O;let N=M.createSpan({cls:"ai3d-heading-pin-badge"}),w=[...new Set(D.map(Q=>Q.color).filter(Boolean))],U=N.createSpan({cls:"ai3d-heading-pin-badge-swatch"});if(U.style.background=r(w),U.title=D.length>1?te("headingPin.showMultiple"):te("headingPin.showSingle"),U.setAttribute("role","button"),U.setAttribute("tabindex","0"),D.length>1){let Q=N.createSpan({cls:"ai3d-heading-pin-badge-count"});Q.textContent=`\xD7${D.length}`}let G=[...new Set(D.map(Q=>Xr(Q.modelPath)))];N.title=Cr("headingPin.linkedTo",{models:G.join(", ")});let J=Q=>{Q==null||Q.stopPropagation(),Q==null||Q.preventDefault();for(let X of D)activeDocument.dispatchEvent(new CustomEvent("ai3d-pin-highlight",{detail:{pinId:X.pinId}}))};U.addEventListener("click",Q=>{J(Q)}),U.addEventListener("keydown",Q=>{Q.instanceOf(KeyboardEvent)&&(Q.key!=="Enter"&&Q.key!==" "||J(Q))}),N.addEventListener("click",Q=>{Q.stopPropagation()}),M.appendChild(N);let Y=()=>{for(let Q of D)activeDocument.dispatchEvent(new CustomEvent("ai3d-pin-highlight",{detail:{pinId:Q.pinId}}))};M.addEventListener("mouseover",Y),i.set(M,{badge:N,handler:Y,signature:O})},h=(M,D)=>{var V;let O=l(M);f(M,(V=D.get(O))!=null?V:[])},d=M=>{var D;for(let[O,V]of Array.from(i.entries())){if(!O.isConnected){c(O);continue}let N=(D=M.get(l(O)))!=null?D:[],w=a(N);(N.length===0||V.signature!==w)&&f(O,N)}},u=(M,D)=>{M.querySelectorAll(t).forEach(O=>h(O,D))},m=()=>{let M=s();d(M),activeDocument.querySelectorAll(e).forEach(O=>u(O,M))},_=o(s()),p=0,g=(M=0)=>{p&&window.clearTimeout(p),p=window.setTimeout(()=>{p=0,m()},M)},v=this.ps.store.subscribe(()=>{let M=s(),D=o(M);D!==_&&(_=D,g())});this.registerEvent(this.app.workspace.on("layout-change",()=>{g(200)}));let x=M=>M.matches(e)||M.matches(t)?!0:!!M.querySelector(e)||!!M.querySelector(t),A=M=>M.isConnected&&x(M),E=M=>x(M),T=new Set,R=0,I=()=>{var O,V,N,w,U,G;let M=Array.from(T);T.clear(),R=0;let D=s();d(D);for(let J of M)J.isConnected&&((O=J.matches)!=null&&O.call(J,t)&&h(J,D),(N=(V=J.querySelectorAll)==null?void 0:V.call(J,t))==null||N.forEach(Y=>h(Y,D)),(w=J.matches)!=null&&w.call(J,e)&&u(J,D),(G=(U=J.querySelectorAll)==null?void 0:U.call(J,e))==null||G.forEach(Y=>u(Y,D)));_=o(D)},y=new MutationObserver(M=>{let D=!1;for(let O of M){for(let V of Array.from(O.addedNodes))V.instanceOf(HTMLElement)&&A(V)&&(T.add(V),D=!0);for(let V of Array.from(O.removedNodes))V.instanceOf(HTMLElement)&&E(V)&&(D=!0)}D&&!R&&(R=window.setTimeout(I,100))});y.observe(activeDocument.body,{childList:!0,subtree:!0}),this.register(()=>{v(),y.disconnect(),R&&(window.clearTimeout(R),R=0),p&&(window.clearTimeout(p),p=0);for(let M of Array.from(i.keys()))c(M)}),g(500)}importModel(){new GR(this.app,e=>{let t=e.extension.toLowerCase();fl(t)&&this.openModelFile(e)}).open()}async openModelFile(e){this.ps.store.setState({currentModelPath:e.path,modelPreview:null,selectedPart:null}),await this.app.workspace.getLeaf(!0).openFile(e,{active:!0})}async generateNote(){let{generateKnowledgeNote:e}=await Promise.resolve().then(()=>(yO(),CO));await e(this.app,this.ps)}async openKnowledgeIndex(){var r;let e=this.ps.store.getState().currentModelPath,t=e?(r=this.ps.store.getState().modelAssetProfiles[e])==null?void 0:r.knowledgeIndexPath:void 0;if(!t){new vo.Notice(te("workbench.noIndexYet"));return}let i=this.app.vault.getAbstractFileByPath(t);i instanceof vo.TFile?await this.app.workspace.getLeaf(!0).openFile(i,{active:!0}):new vo.Notice(Cr("workbench.fileNotFound",{path:t}))}clearConversionCache(){this.convertedAssetCache.clear(),new vo.Notice("AI 3d conversion cache cleared.")}async checkConverterCommands(){if(gr()){new vo.Notice(te("main.converterDiagnosticsMobileUnavailable"),8e3);return}let e=await bR(this.getSettings()),t=e.filter(r=>r.available).map(r=>r.label),i=e.filter(r=>!r.available).map(r=>r.label);if(i.length===0){new vo.Notice(`AI 3D converter diagnostics: all commands available (${t.join(", ")}).`,8e3);return}new vo.Notice(`AI 3D converter diagnostics: available ${t.join(", ")||"none"}; missing ${i.join(", ")}.`,1e4)}}; +`)}async function Zue(n){let e=typeof performance!="undefined"?performance.now():Date.now(),t=n.app.vault.getAbstractFileByPath(n.indexPath),i=null;if(t instanceof xc.TFile){let r=await n.app.vault.read(t),s=GO(n);await n.app.vault.modify(t,jK(r,s)),i=t}else i=await zK(n.app,n.indexPath,qK(n));return i&&(n.analysis.knowledgeIndexPath=i.path),n.analysis.pipeline.push({stage:"index",durationMs:Math.max(0,Math.round((typeof performance!="undefined"?performance.now():Date.now())-e)),status:i?"success":"failed"}),i}async function Que(n,e,t={}){var r,s,a,o,l,c;if(OO!==null)return;let i;OO=new Promise(f=>{i=f});try{let f=e.store.getState(),h=f.currentModelPath;if(!h)return;let d=f.modelAssetProfiles[h],u=f.modelPreview,m=Xr(h)||"model",_=f.settings.reportFolder,p=`${_}/${m} Report.md`,g=`${_}/${m} Analysis.json`,v=`${_}/${m} Index.md`,x=(a=(s=(r=t.preview)==null?void 0:r.getModelEvidence)==null?void 0:s.call(r))!=null?a:null,A=await Xue(n,t.preview,f.settings.previewFolder,m),S=await KK(n,f.modelAssetProfiles,h),E=KR({modelPath:h,profile:d,preview:u,evidence:x,previewImages:A.paths,registeredParts:S});A.warning&&(E.warnings=[...E.warnings,A.warning],E.draftingInput&&(E.draftingInput={...E.draftingInput,evidence:{...E.draftingInput.evidence,warnings:[...E.draftingInput.evidence.warnings,A.warning]}})),E.localDraft=WK({baseName:m,sourcePath:h,profile:d,preview:u,analysis:E}),E.pipeline.push({stage:"draft",durationMs:0,status:"success"}),await que({app:n,partFolder:f.settings.partFolder,baseName:m,notePath:p,sourcePath:h,analysis:E}),E.draftingInput&&(E.draftingInput={...E.draftingInput,partCandidates:E.draftingInput.partCandidates.map(O=>{let V=E.parts.find(N=>N.partId===O.partId);return V!=null&&V.notePath?{...O,notePath:V.notePath}:O}),annotationLinks:[...(o=E.annotationLinks)!=null?o:[]]});let R=PK(f.settings,E.draftingInput,sp);if(R.enabled)try{let O=await DK(R);O?(E.remoteDraft=O,E.pipeline.push({stage:"remoteDraft",durationMs:0,status:"success"})):E.pipeline.push({stage:"remoteDraft",durationMs:0,status:"skipped"})}catch(O){let V=O instanceof Error?O.message:String(O);E.warnings=[...E.warnings,`Remote draft failed: ${V}`],E.pipeline.push({stage:"remoteDraft",durationMs:0,status:"failed"})}else E.pipeline.push({stage:"remoteDraft",durationMs:0,status:"skipped"});await VO(n,_),await Zue({app:n,baseName:m,notePath:p,sourcePath:h,analysisSidecarPath:g,indexPath:v,analysis:E,preview:u,profile:d});let I=HK({baseName:m,notePath:p,sourcePath:h,profile:d,preview:u,analysis:E,analysisSidecarPath:g,knowledgeIndexPath:E.knowledgeIndexPath});await NK(n,g,`${JSON.stringify(E,null,2)} +`);let y=await NK(n,p,I);if(!y)return;let M=e.store.getState().modelAssetProfiles,D=Hue(M[h],h);e.store.setState({modelAssetProfiles:{...M,[h]:{...D,analysisVersion:sp,registeredParts:E.parts,reportNotePath:y.path,analysisSidecarPath:g,knowledgeIndexPath:E.knowledgeIndexPath,previewImagePaths:A.paths,updatedAt:new Date().toISOString()}},lastKnowledgeGeneration:{modelPath:h,reportNotePath:y.path,analysisSidecarPath:g,knowledgeIndexPath:E.knowledgeIndexPath,partNoteCount:(c=(l=E.partNotePaths)==null?void 0:l.length)!=null?c:0,previewImageCount:E.previewImages.length,generatedAt:new Date().toISOString(),status:"success",warningCount:E.warnings.length}}),await n.workspace.getLeaf(!0).openFile(y,{active:!0}),new xc.Notice(`Knowledge note updated: ${y.path}`)}finally{i(),OO=null}}var xc,FK,BK,NO,OO,qR=C(()=>{"use strict";xc=require("obsidian");ES();na();DO();LK();FK=8,BK="",NO="";OO=null});function Eo(n,e,t=2.5){var i;if(typeof n=="string"){let r=(i=HO[n])!=null?i:HO.iso;return{alpha:r.alpha,beta:r.beta,radiusMultiplier:t}}return{alpha:n,beta:e!=null?e:Math.PI/3,radiusMultiplier:t}}function fl(n,e,t=.02){let i=(1-t*(n+1))/n,r=(1-t*(e+1))/e,s=[];for(let a=0;a({path:i.path,position:[-t/2+r*e,0,0],color:i.color,wireframe:i.wireframe}))}function XO(n,e){return n.map((t,i)=>{let r=2*Math.PI*i/n.length;return{path:t.path,position:[Math.cos(r)*e,0,Math.sin(r)*e],color:t.color,wireframe:t.wireframe}})}var HO,md=C(()=>{"use strict";HO={iso:{alpha:Math.PI/4,beta:Math.PI/3},front:{alpha:0,beta:Math.PI/2},side:{alpha:Math.PI/2,beta:Math.PI/2},top:{alpha:0,beta:.01},back:{alpha:Math.PI,beta:Math.PI/2},"3/4":{alpha:Math.PI/6,beta:Math.PI/3.5}}});var ej,tj=C(()=>{"use strict";md();ej={name:"compare",description:"Side-by-side model comparison (2-4 models)",minModels:2,maxModels:4,compute(n,e){if(n.length<2||n.length>4)return null;let t=Number(e.spacing)||6,i=e.angle||"iso",r=Gg(n,t),s=n.length<=3?n.length:2,a=Math.ceil(n.length/s),o=fl(s,a),l=n.map((c,f)=>({modelIndex:f,camera:Eo(i),viewport:o[f]}));return{placements:r,cells:l}}}});var ij,rj=C(()=>{"use strict";md();ij={name:"showcase",description:"Single model viewed from multiple angles",minModels:1,maxModels:1,compute(n,e){if(n.length<1)return null;let t=Number(e.angles)||4,i=Number(e.radius)||2.5,r=[{path:n[0].path,position:[0,0,0],color:n[0].color,wireframe:n[0].wireframe}],s=t>=6?["front","side","top","back","iso","3/4"]:["iso","front","side","top"],a=s.length<=4?2:3,o=Math.ceil(s.length/a),l=fl(a,o),c=s.map((f,h)=>({modelIndex:0,camera:Eo(f,void 0,i),viewport:l[h]}));return{placements:r,cells:c}}}});var nj,sj=C(()=>{"use strict";md();nj={name:"explode",description:"Spatial arrangement of parts (3-8 models in a ring)",minModels:3,maxModels:8,compute(n,e){if(n.length<3||n.length>8)return null;let t=Number(e.radius)||8,i=e.angle||"iso",r=XO(n,t),s=Math.min(n.length,4),a=Math.ceil(n.length/s),o=fl(s,a),l=n.map((c,f)=>({modelIndex:f,camera:Eo(i),viewport:o[f]}));return{placements:r,cells:l}}}});var aj,oj=C(()=>{"use strict";md();aj={name:"timeline",description:"Horizontal progression of models (2-6 models in a strip)",minModels:2,maxModels:6,compute(n,e){if(n.length<2||n.length>6)return null;let t=Number(e.spacing)||6,i=e.angle||"3/4",r=Gg(n,t),s=zO(n.length),a=n.map((o,l)=>({modelIndex:l,camera:Eo(i),viewport:s[l]}));return{placements:r,cells:a}}}});function YO(n,e,t,i,r){var f,h;if(!n||n.length===0)return null;let s=n.reduce((d,u)=>{var m;return d+((m=u.weight)!=null?m:1)},0);if(s<=0)return null;let a=[],o=0;for(let d of n){let m=((f=d.weight)!=null?f:1)/s*(1-t*(n.length+1));e==="horizontal"?a.push({x:t+o,y:t,w:m,h:1-2*t}):a.push({x:t,y:t+o,w:1-2*t,h:m}),o+=m+t}let l=[],c=[];for(let d=0;d{"use strict";lj={name:"compose",description:"Combine multiple presets into one layout",minModels:1,maxModels:32,compute(n,e,t){return null}}});var cj,fj=C(()=>{"use strict";md();cj={name:"gallery",description:"All models in one scene, single camera (no cell limit)",minModels:1,maxModels:32,compute(n,e){if(n.length===0)return null;let t=Number(e.spacing)||6,i=e.angle||"iso",r=Number(e.cols)||0,s=r>0?r:Math.ceil(Math.sqrt(n.length)),a=Math.ceil(n.length/s),o=n.map((f,h)=>{let d=h%s,u=Math.floor(h/s),m=(d-(s-1)/2)*t,_=(u-(a-1)/2)*t;return{path:f.path,position:[m,0,_],color:f.color,wireframe:f.wireframe}}),l=fl(1,1,0),c=[{modelIndex:0,camera:Eo(i,void 0,3+Math.max(s,a)*.5),viewport:l[0]}];return{placements:o,cells:c}}}});function op(n){hj.set(n.name,n)}function jO(n){return hj.get(n)}var hj,dj=C(()=>{"use strict";tj();rj();sj();oj();KO();fj();md();KO();hj=new Map;op(ej);op(ij);op(nj);op(aj);op(lj);op(cj)});var _j={};$e(_j,{registerCodeBlockProcessor:()=>ome,registerGridCodeBlockProcessor:()=>cme});async function mj(n,e,t,i){var h,d,u;let r=typeof e=="string"?{path:e}:e,s=bd(n,r.path);if(!s)throw new Error(fr("workbench.fileNotFound",{path:r.path}));let a=(d=(h=s.split(".").pop())==null?void 0:h.toLowerCase())!=null?d:"";if(!dl(a))throw cp(a)?new Error(ee("codeBlock.splatDisabled")):new Error(fr("codeBlock.unsupportedFormat",{ext:`.${a}`,formats:ul().join(", ")}));let o=(u=Kf(n,s))!=null?u:void 0,l=cd(t),c=await hd({path:s,absolutePath:o,preferConversionExts:dd(t),conversionManager:l,convertedAssetCache:i}),f=Fg(c);return{sourcePath:s,effectivePath:f.path,effectiveExt:f.ext,warnings:f.warnings,model:{...r,path:f.path}}}async function ame(n,e,t,i){let r=[];for(let s of e.models){let a=await mj(n,s,t,i);r.push(a.model)}return{...e,models:r}}function pj(n){hr()&&n.createDiv({cls:"ai3d-mobile-mode-hint ai3d-mobile-mode-hint--inline",text:ee("codeBlock.mobileHint")})}function ome(n,e,t,i){return{id:"3d",handler:(r,s,a)=>{var y,M;let o=r.trim();if(!o){s.createDiv({cls:"ai3d-inline-empty",text:ee("codeBlock.noModelPathOrConfig")});return}let l;if(o.startsWith("{")||o.startsWith("["))try{let D=JSON.parse(o);l=lme(D)}catch(D){let O=s.createDiv({cls:"ai3d-json-error"}),V=String(D).match(/position\s+(\d+)/),N=fr("codeBlock.jsonParseError",{error:String(D)});if(V){let F=parseInt(V[1],10),U=o.substring(0,F).split(` +`);N+=fr("codeBlock.jsonParseLine",{line:String(U.length)})}O.createEl("pre",{text:N});return}else l={models:[{path:o}]};if(!l.models||l.models.length===0){s.createDiv({cls:"ai3d-inline-empty",text:ee("codeBlock.noModelsInConfig")});return}l.models.length>1&&console.warn(`[AI3D] \`\`\`3d only supports one model; ${l.models.length-1} additional models ignored. Use \`\`\`3dgrid for multi-model.`);let f=l.models[0],h=bd(n,f.path);if(!h){s.createDiv({cls:"ai3d-inline-empty",text:fr("workbench.fileNotFound",{path:f.path})});return}let d=(M=(y=h.split(".").pop())==null?void 0:y.toLowerCase())!=null?M:"";if(!dl(d)){s.createDiv({cls:"ai3d-inline-empty",text:cp(d)?ee("codeBlock.splatDisabled"):fr("codeBlock.unsupportedFormat",{ext:`.${d}`,formats:ul().join(", ")})});return}let u=e(),m=s.createDiv({cls:"ai3d-preview-host"});l.height&&m.style.setProperty("--min-height",typeof l.height=="number"?`${l.height}px`:l.height),l.width&&m.style.setProperty("--max-width",typeof l.width=="number"?`${l.width}px`:l.width);let _=m.createEl("canvas",{cls:"ai3d-canvas-full"});_.tabIndex=0,_.addEventListener("keydown",D=>{var V,N,F,U,W;if(x||!p)return;let O=D.key.toLowerCase();O==="r"?((V=p.resetView)==null||V.call(p),D.preventDefault()):O==="w"?((N=p.toggleWireframe)==null||N.call(p),D.preventDefault()):O==="g"?((F=p.toggleOrientationGizmo)==null||F.call(p),D.preventDefault()):O==="b"?((U=p.toggleBoundingBox)==null||U.call(p),D.preventDefault()):O===" "&&((W=p.toggleAnimation)==null||W.call(p),D.preventDefault())}),m.appendChild(_);let p=null,g=null,v=!0,x=!1,A=!1,S=Og(s,m,n,()=>p,()=>h,()=>{x||(x=!0,E.disconnect(),I.disconnect(),g==null||g.destroy(),g=null,p==null||p.destroy(),p=null,m.remove())},e,()=>{if(v=!v,g){let D=m.querySelector(".ai3d-annotation-overlay");D&&D.classList.toggle("is-hidden",!v)}return v},void 0,{labelKey:"helper.toggleAnnotationsVisibilityLabel",activeTooltipKey:"helper.annotationsVisible",inactiveTooltipKey:"helper.annotationsHidden"});pj(s);let E=new MutationObserver(()=>{x||s.contains(m)||(x=!0,E.disconnect(),I.disconnect(),g==null||g.destroy(),g=null,p==null||p.destroy(),p=null)});E.observe(s,{childList:!0});async function R(){var O,V,N,F,U,W,$;if(A||x||!h)return;A=!0;let D=ud(m);try{let q=(O=Kf(n,h))!=null?O:void 0,Z=cd(u);D.setPhaseKey("loading.preparingModel");let X=await hd({path:h,absolutePath:q,preferConversionExts:dd(u),conversionManager:Z,convertedAssetCache:t}),Y=Fg(X),fe=(V=i==null?void 0:i(h))!=null?V:[],xe={ext:Y.ext,annotationMode:fe.length>0?"readonly":"none",rendererRollout:u.previewRendererRollout,useThreeRenderer:u.useThreeRenderer},{preview:Fe}=await ld(uj,{surface:"code-block",modelPath:h},_,xe);p=Fe,S.syncCapabilities(),D.setPhaseKey("loading.loadingModel");let se=await Na(n,Y.path),pe=async _e=>Na(n,_e);if(x){D.hide();return}let ie=await p.loadModel(se,Y.ext,pe,Y.path);if(D.setProgress(100),rp(m,ie),x){D.hide();return}if(((N=l.scene)==null?void 0:N.autoRotate)===void 0&&u.autoRotateDefault&&(l.scene={...l.scene,autoRotate:!0,autoRotateSpeed:u.autoRotateSpeed}),p.applyConfig(l),(F=p.setRenderQuality)==null||F.call(p,u.renderQuality,u.renderScale),S.syncCapabilities(),fe.length>0&&xR(p)){let _e=p.getAnnotationProvider();_e.canvas&&(g=new Pc(_e,m,"readonly",fe,void 0,tp(n),void 0,{app:n,previewMode:u.annotationPreviewMode}),S.showAnnotateButton(),S.updateAnnotationBadge(fe.length))}d==="stl"&&f.color&&((U=p.setSTLColor)==null||U.call(p,f.color)),d==="stl"&&f.wireframe!==void 0&&((W=p.setWireframe)==null||W.call(p,f.wireframe)),($=p.hasAnimations)!=null&&$.call(p)&&S.showAnimButton(),D.hide()}catch(q){x=!0,E.disconnect(),I.disconnect(),D.hide(),p==null||p.destroy(),p=null,m.replaceChildren();let Z=Jm(q);$m(q)?console.warn("[AI3D] Inline preview blocked by converter settings:",Z.message):console.error("[AI3D] Inline preview failed:",q),ip(m,Z)}}let I=new IntersectionObserver(D=>{for(let O of D)O.isIntersecting&&(I.disconnect(),R())},{rootMargin:"200px"});I.observe(m)}}}function lme(n){if(typeof n=="string")return{models:[{path:n}]};if(typeof n!="object"||n===null)return{models:[]};let e=n;return typeof e.path=="string"?{models:[{path:e.path,color:e.color,wireframe:e.wireframe}],camera:e.camera,lights:e.lights,scene:e.scene,stl:e.stl,width:e.width,height:e.height}:{models:Array.isArray(e.models)?e.models.filter(i=>{let r=typeof i=="string"?i:i&&typeof i=="object"&&"path"in i?i.path:void 0;return typeof r=="string"&&r.length>0}).map(i=>{if(typeof i=="string")return{path:i};let r=i;return{path:r.path,color:r.color,wireframe:r.wireframe}}):[],camera:e.camera,lights:e.lights,scene:e.scene,stl:e.stl,width:e.width,height:e.height}}function cme(n,e,t){return{id:"3dgrid",handler:(i,r,s)=>{let a=i.trim();if(!a){r.createDiv({cls:"ai3d-inline-empty",text:ee("codeBlock.noConfigSpecified")});return}let o;try{o=JSON.parse(a)}catch(f){r.createDiv({cls:"ai3d-json-error"}).createEl("pre",{text:`JSON parse error: ${String(f)}`});return}if(o.preset!=="compose"&&(!o.models||o.models.length===0)){r.createDiv({cls:"ai3d-inline-empty",text:ee("codeBlock.noModelsSpecified")});return}let l=e(),c=ud(r);(async()=>{var E,R,I,y;let f=[];for(let M of(E=o.models)!=null?E:[])try{let D=await mj(n,M,l,t);f.push(D)}catch(D){c.hide(),r.createDiv({cls:"ai3d-inline-empty",text:D instanceof Error?D.message:String(D)});return}let h=f.map(M=>M.model),d=(I=(R=f[0])==null?void 0:R.sourcePath)!=null?I:"",u=r.createDiv({cls:"ai3d-grid-host"}),m=u.createEl("canvas");if(m.tabIndex=0,m.addEventListener("keydown",M=>{var O,V;if(p||!_)return;let D=M.key.toLowerCase();D==="r"?((O=_.resetView)==null||O.call(_),M.preventDefault()):D==="w"&&((V=_.toggleWireframe)==null||V.call(_),M.preventDefault())}),u.appendChild(m),typeof o.rowHeight=="number"){let M=o.preset==="compose"?1:Math.ceil(h.length/((y=o.columns)!=null?y:Math.min(h.length,3)));u.style.setProperty("--grid-height",`${o.rowHeight*M}px`)}let _=null,p=!1,g=!1,v=Og(r,u,n,()=>_,()=>d,()=>{p||(p=!0,x.disconnect(),S.disconnect(),_==null||_.destroy(),_=null,u.remove())},e);pj(r);let x=new MutationObserver(()=>{p||r.contains(u)||(p=!0,x.disconnect(),S.disconnect(),_==null||_.destroy(),_=null)});x.observe(r,{childList:!0});async function A(){var M,D,O,V,N,F,U;if(!(g||p)){g=!0,c.setPhaseKey("codeBlock.renderingGrid"),c.setProgress(-1);try{let{renderer:W}=await tK(uj,{surface:"3dgrid",preset:(M=o.preset)!=null?M:"compare",modelCount:(O=(D=o.models)==null?void 0:D.length)!=null?O:0},m);_=W,v.syncCapabilities();let $=_,q=async Z=>Na(n,Z);if(o.preset==="compose"){if(!o.sections||o.sections.length===0){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:ee("codeBlock.composeRequiresSections")}),_.destroy(),_=null;return}let Z=[];for(let Y of o.sections)try{if(!d){let xe=Y.models[0];if(xe){let Fe=typeof xe=="string"?xe:xe.path;d=(V=bd(n,Fe))!=null?V:Fe}}let fe=await ame(n,Y,l,t);Z.push(fe)}catch(fe){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:fe instanceof Error?fe.message:String(fe)}),$.destroy(),_=null;return}let X=YO(Z,(N=o.direction)!=null?N:"horizontal",Number((F=o.params)==null?void 0:F.gap)||.02,Y=>typeof Y=="string"?null:Y,jO);if(!X){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:ee("codeBlock.composeNoValidSections")}),$.destroy(),_=null;return}await $.loadWithPreset(X,q)}else if(o.preset){let Z=jO(o.preset);if(!Z){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:fr("codeBlock.unknownPreset",{preset:o.preset})}),$.destroy(),_=null;return}let X=Z.compute(h,(U=o.params)!=null?U:{});if(!X){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:fr("codeBlock.presetRequiresModels",{preset:o.preset,min:String(Z.minModels),max:String(Z.maxModels),count:String(h.length)})}),$.destroy(),_=null;return}await $.loadWithPreset(X,q)}else await $.loadModels(h,o,q);if(p){c.hide();return}c.hide()}catch(W){p=!0,x.disconnect(),S.disconnect(),c.hide(),_==null||_.destroy(),_=null,console.error("[AI3D Grid] Failed:",W),u.createDiv({cls:"ai3d-inline-empty",text:fr("codeBlock.gridFailed",{reason:String(W)})})}}}let S=new IntersectionObserver(M=>{for(let D of M)D.isIntersecting&&(S.disconnect(),A())},{rootMargin:"200px"});S.observe(u)})()}}}var uj,gj=C(()=>{"use strict";To();Qg();AR();Lg();na();dj();_O();GR();WR();MO();HR();zR();Ug();ep();Js();XR();ks();Zn();uj=cr("inline-code-block")});function kg(n){return createDiv().createDiv(n?{cls:n}:void 0)}function qO(n,e){return createDiv().createEl(n,e?{cls:e}:void 0)}var vj=C(()=>{"use strict"});var Tj={};$e(Tj,{registerLivePreviewExtension:()=>hme});function Ej(n,e,t,i,r,s,a,o,l,c,f,h,d,u,m){var g,v;let _="state"in n?n.state.doc:n.doc,p=[];for(let x=1;x<=_.lines;x++){let A=_.line(x),S=A.text;if(!S.includes("!["))continue;let E=0;for(;E0&&S[R-1]==="\\"){E=R+3;continue}let I=S.indexOf("]]",R+3);if(I===-1)break;let M=S.slice(R+3,I).split("|"),D=M[0].trim(),O=(v=(g=D.split(".").pop())==null?void 0:g.toLowerCase())!=null?v:"";if(!dl(O)){E=I+2;continue}let V=400,N=300;if(M.length>1){let $=M[1].trim().match(/^(\d+)\s*x\s*(\d+)$/);$&&(V=parseInt($[1],10),N=parseInt($[2],10))}let F=bd(e,D);if(!F){E=I+2;continue}let U=A.from+R,W=A.from+I+2;p.push(lp.Decoration.replace({widget:new ZO(e,F,V,N,t,i,r,s,a,o,l,c,f,h,d,u,m),block:!0}).range(U,W)),E=I+2}}return p}function Sj(n){return n.length===0?pd.RangeSet.empty:pd.RangeSet.of(n,!0)}function hme(n,e,t,i){let r=pd.StateField.define({create(s){let a=e(),o=Ej(s,n,a.autoRotateDefault,a.enabledConverterIds,a.freecadCommand,a.obj2gltfCommand,a.fbx2gltfCommand,a.freecadcmdCommand,a.preferObj2gltfForObj,a.preferFbx2gltfForFbx,a.annotationPreviewMode,a.previewRendererRollout,a.useThreeRenderer,t,i);return Sj(o)},update(s,a){if(a.docChanged){let o=e(),l=Ej(a.state,n,o.autoRotateDefault,o.enabledConverterIds,o.freecadCommand,o.obj2gltfCommand,o.fbx2gltfCommand,o.freecadcmdCommand,o.preferObj2gltfForObj,o.preferFbx2gltfForFbx,o.annotationPreviewMode,o.previewRendererRollout,o.useThreeRenderer,t,i);return Sj(l)}return s.map(a.changes)},provide:s=>lp.EditorView.decorations.from(s)});return[pd.Prec.highest(r)]}var lp,pd,fme,ZO,Aj=C(()=>{"use strict";lp=require("@codemirror/view"),pd=require("@codemirror/state");To();Qg();AR();Lg();na();GR();WR();HR();zR();Ug();vj();ep();ks();XR();Js();Zn();fme=cr("inline-live-preview"),ZO=class extends lp.WidgetType{constructor(t,i,r,s,a,o,l,c,f,h,d,u,m,_,p,g,v){super();this.app=t;this.modelPath=i;this.width=r;this.height=s;this.autoRotate=a;this.enabledConverterIds=o;this.freecadCommand=l;this.obj2gltfCommand=c;this.fbx2gltfCommand=f;this.freecadcmdCommand=h;this.preferObj2gltfForObj=d;this.preferFbx2gltfForFbx=u;this.annotationPreviewMode=m;this.previewRendererRollout=_;this.useThreeRenderer=p;this.convertedAssetCache=g;this.getAnnotations=v;this.preview=null;this.annotationMgr=null;this.readyObs=null;this.pollId=0;this.initStarted=!1;this.destroyed=!1;this.initGeneration=0}eq(t){return this.modelPath===t.modelPath&&this.width===t.width&&this.height===t.height&&this.autoRotate===t.autoRotate&&this.enabledConverterIds.join("|")===t.enabledConverterIds.join("|")&&this.freecadCommand===t.freecadCommand&&this.obj2gltfCommand===t.obj2gltfCommand&&this.fbx2gltfCommand===t.fbx2gltfCommand&&this.freecadcmdCommand===t.freecadcmdCommand&&this.preferObj2gltfForObj===t.preferObj2gltfForObj&&this.preferFbx2gltfForFbx===t.preferFbx2gltfForFbx&&this.annotationPreviewMode===t.annotationPreviewMode&&this.previewRendererRollout===t.previewRendererRollout&&this.convertedAssetCache===t.convertedAssetCache}toDOM(){let t=hr(),i=kg("ai3d-embed-preview ai3d-cm-widget");i.setAttribute("contenteditable","false"),t&&i.classList.add("is-mobile","is-mobile-scroll-mode");let r=qO("canvas","ai3d-embed-canvas"),s=t?Math.min(this.height,220):this.height;r.style.setProperty("--ai3d-embed-height",`${s}px`),i.appendChild(r);let a=ud(i),o=kg("ai3d-embed-error is-hidden");if(i.appendChild(o),t){let h=!1,d=kg("ai3d-mobile-mode-bar"),u=kg("ai3d-mobile-mode-hint");u.textContent=ee("livePreview.mobileHint");let m=qO("button","ai3d-mobile-mode-btn");m.type="button";let _=()=>{i.classList.toggle("is-mobile-interactive",h),i.classList.toggle("is-mobile-scroll-mode",!h),m.textContent=h?ee("helper.scrollAction"):ee("helper.interactAction"),m.classList.toggle("ai3d-btn-active",h),m.setAttribute("aria-label",h?ee("helper.disableInteractionLabel"):ee("helper.enableInteractionLabel"))};m.addEventListener("click",()=>{h=!h,_()}),_(),d.append(u,m),i.appendChild(d)}let l=()=>{this.destroyed||this.initStarted||!i.isConnected||r.clientWidth<=0||r.clientHeight<=0||(this.initStarted=!0,this.stopReadyWatch(),this.initPreview(i,r,a,o,++this.initGeneration))};this.readyObs=new ResizeObserver(()=>l()),this.readyObs.observe(i),this.readyObs.observe(r);let c=0,f=()=>{this.destroyed||this.initStarted||(l(),!this.initStarted&&(++c>240||(this.pollId=window.requestAnimationFrame(f))))};return this.pollId=window.requestAnimationFrame(f),i}async initPreview(t,i,r,s,a){var o,l,c,f,h,d;try{let u=(o=Kf(this.app,this.modelPath))!=null?o:void 0,m=cd({enabledConverterIds:this.enabledConverterIds,freecadCommand:this.freecadCommand,obj2gltfCommand:this.obj2gltfCommand,fbx2gltfCommand:this.fbx2gltfCommand,freecadcmdCommand:this.freecadcmdCommand});r.setPhaseKey("loading.preparingModel");let _=await hd({path:this.modelPath,absolutePath:u,preferConversionExts:dd({preferObj2gltfForObj:this.preferObj2gltfForObj,preferFbx2gltfForFbx:this.preferFbx2gltfForFbx}),conversionManager:m,convertedAssetCache:this.convertedAssetCache}),p=(c=(l=this.getAnnotations)==null?void 0:l.call(this,this.modelPath))!=null?c:[],g={ext:_.effectiveExt,annotationMode:p.length>0?"readonly":"none",rendererRollout:this.previewRendererRollout,useThreeRenderer:this.useThreeRenderer},{preview:v}=await ld(fme,{surface:"live-preview",modelPath:this.modelPath},i,g);if(this.destroyed||a!==this.initGeneration){v.destroy();return}this.preview=v,r.setPhaseKey("loading.loadingModel");let x=await Na(this.app,_.effectivePath);if(this.destroyed||a!==this.initGeneration){(f=this.preview)==null||f.destroy(),this.preview=null;return}let A=await this.preview.loadModel(x,_.effectiveExt,S=>Na(this.app,S),_.effectivePath);if(this.destroyed||a!==this.initGeneration){(h=this.preview)==null||h.destroy(),this.preview=null;return}if(rp(t,A),this.autoRotate&&this.preview.applyConfig({models:[],scene:{autoRotate:!0,autoRotateSpeed:.5}}),p.length>0&&xR(this.preview)){let S=this.preview.getAnnotationProvider();S.canvas&&(this.annotationMgr=new Pc(S,t,"readonly",p,void 0,tp(this.app),void 0,{app:this.app,previewMode:this.annotationPreviewMode}))}r.setProgress(100),r.hide()}catch(u){if(this.destroyed||a!==this.initGeneration)return;(d=this.preview)==null||d.destroy(),this.preview=null,r.hide(),s.remove(),t.replaceChildren();let m=Jm(u);$m(u)?console.warn("[AI3D] Live Preview blocked by converter settings:",m.message):console.error("[AI3D] Live Preview failed:",u),ip(t,m)}}destroy(){var t;this.destroyed=!0,window.cancelAnimationFrame(this.pollId),this.pollId=0,this.stopReadyWatch(),(t=this.annotationMgr)==null||t.destroy(),this.annotationMgr=null,this.preview&&(this.preview.destroy(),this.preview=null),this.initStarted=!1}stopReadyWatch(){var t;(t=this.readyObs)==null||t.disconnect(),this.readyObs=null}ignoreEvent(){return!0}}});var Rj={};$e(Rj,{buildDiagnosticsReport:()=>mme});function tb(n){return typeof n=="boolean"?n?"on":"off":typeof n=="number"?Number.isFinite(n)?String(n):"unknown":typeof n=="string"?n.length>0?n:"empty":"unknown"}function Wg(n){return n?`set (${n})`:"not set"}function dme(n){let e=n.settings;return e.analysisMode==="local"?"local only":[e.analysisMode,e.serviceBaseUrl.trim()?"service configured":"service missing",`geometry ${tb(e.sendGeometrySummaryToRemote)}`,`preview refs ${tb(e.sendPreviewImagesToRemote)}`,`raw model ${e.sendRawModelToRemote?"blocked if requested":"off"}`].join(", ")}function ume(n){let e=n.currentModelPath;return e?n.modelAssetProfiles[e]:void 0}function mme(n){var o,l,c,f,h,d,u,m,_,p;let{manifest:e,state:t}=n,i=t.settings,r=ume(t),s=t.currentModelPath?Pd({ext:(o=t.currentModelPath.split(".").pop())!=null?o:"",annotationMode:r!=null&&r.annotations.length?"readonly":"none",allowEditModeOnThree:!0,allowWorkbenchFeaturesOnThree:i.experimentalThreeWorkbench,rendererRollout:i.previewRendererRollout,useThreeRenderer:i.useThreeRenderer}):null,a=t.lastKnowledgeGeneration;return["# AI Model Workbench Diagnostics","",`Generated: ${(l=n.generatedAt)!=null?l:new Date().toISOString()}`,"","## Runtime","",`- Plugin version: ${e.version}`,`- Minimum Obsidian version: ${e.minAppVersion}`,`- Obsidian API version: ${xj.apiVersion}`,`- Platform: ${hr()?"mobile":"desktop"}`,`- Locale: ${i.locale}`,"","## Renderer","",`- Use Three renderer: ${tb(i.useThreeRenderer)}`,`- Preview rollout: ${i.previewRendererRollout}`,`- Experimental Three workbench: ${tb(i.experimentalThreeWorkbench)}`,`- Current route: ${s?`${s.backend} (${s.reason})`:"no current model"}`,`- Render quality: ${i.renderQuality}`,`- Render scale: ${i.renderScale}`,"","## Current Model","",`- Path: ${(c=t.currentModelPath)!=null?c:"none"}`,`- Preview summary: ${t.modelPreview?`${t.modelPreview.meshCount} mesh(es), ${t.modelPreview.triangleCount.toLocaleString()} triangle(s), ${t.modelPreview.materialCount} material(s)`:"not captured"}`,`- Annotation count: ${(f=r==null?void 0:r.annotations.length)!=null?f:0}`,`- Registered part candidates: ${(d=(h=r==null?void 0:r.registeredParts)==null?void 0:h.length)!=null?d:0}`,`- Report note: ${Wg(r==null?void 0:r.reportNotePath)}`,`- Analysis sidecar: ${Wg(r==null?void 0:r.analysisSidecarPath)}`,`- Knowledge index: ${Wg(r==null?void 0:r.knowledgeIndexPath)}`,"","## Knowledge Generation","",`- Mode: ${dme(t)}`,`- Report folder: ${i.reportFolder}`,`- Part notes folder: ${i.partFolder}`,`- Snapshot folder: ${i.previewFolder}`,`- Last generation: ${a?`${a.status} at ${a.generatedAt}`:"none"}`,`- Last generated model: ${(u=a==null?void 0:a.modelPath)!=null?u:"none"}`,`- Last report: ${Wg(a==null?void 0:a.reportNotePath)}`,`- Last index: ${Wg(a==null?void 0:a.knowledgeIndexPath)}`,`- Last part notes: ${(m=a==null?void 0:a.partNoteCount)!=null?m:0}`,`- Last preview images: ${(_=a==null?void 0:a.previewImageCount)!=null?_:0}`,`- Last warning count: ${(p=a==null?void 0:a.warningCount)!=null?p:0}`,"","## Conversion","",`- Enabled converters: ${i.enabledConverterIds.length?i.enabledConverterIds.join(", "):"none"}`,`- Cached conversions: ${t.convertedAssetRecords.length}`,`- Supported direct/model extensions: ${ul().join(", ")}`,"","## Notes","","- Draft service URL and command paths are intentionally omitted from this report.","- Attach this report with the model format, console error, and reproduction steps when filing a bug.",""].join(` +`)}var xj,bj=C(()=>{"use strict";xj=require("obsidian");To();$g();ks()});var pme={};$e(pme,{default:()=>ib});module.exports=Uj(pme);var Qs=require("obsidian");sb();To();To();var Sme=new Set(ul());var Mc={analysisMode:"local",serviceBaseUrl:"",copySourceModelToVault:!1,sourceModelFolder:"Assets/3D",reportFolder:"Analysis/3D Reports",partFolder:"Parts/3D Components",previewFolder:"Media/3D Previews",maxFileSizeMb:50,autoGenerateKnowledgeNotes:!0,annotationPreviewMode:"plain-text",previewRendererRollout:"three-direct-glb",useThreeRenderer:!0,experimentalThreeWorkbench:!1,sendRawModelToRemote:!1,sendPreviewImagesToRemote:!1,sendGeometrySummaryToRemote:!1,defaultKnowledgeTaxonomy:"default-v1",defaultCanvasHeight:400,autoRotateDefault:!1,autoRotateSpeed:.5,renderQuality:"high",renderScale:1,snapshotFolder:"Media/3D Previews",snapshotNaming:"model-name",enabledConverterIds:[],freecadCommand:"",obj2gltfCommand:"",fbx2gltfCommand:"",assimpCommand:"",freecadcmdCommand:"",preferObj2gltfForObj:!1,preferFbx2gltfForFbx:!1,logLevel:"warn",locale:"en"};function lN(n){let e={...n},t=new Set;return{getState:()=>e,setState(i){e={...e,...i};let r=[...t];for(let s of r)s()},subscribe(i){return t.add(i),()=>{t.delete(i)}}}}var Wj={settings:{...Mc},currentModelPath:null,convertedAssetRecords:[],modelAssetProfiles:{},agentDraft:"",agentPlan:null,modelPreview:null,selectedPart:null,lastKnowledgeGeneration:null};function fN(n){let e=lN(Wj),t=null;function i(){t&&window.clearTimeout(t),t=window.setTimeout(()=>{t=null,r().catch(a=>console.error("[AI3D] Auto-save failed:",a))},500)}async function r(){let a=e.getState(),o={settings:a.settings,convertedAssetRecords:a.convertedAssetRecords,modelAssetProfiles:a.modelAssetProfiles,agentDraft:a.agentDraft,agentPlan:a.agentPlan,lastKnowledgeGeneration:a.lastKnowledgeGeneration};await n.saveData(o)}e.subscribe(()=>i());let s=!1;return{store:e,get localeLoadedFromSaved(){return s},async load(){var o,l,c,f,h;let a=await n.loadData();a&&(s=!!((o=a.settings)!=null&&o.locale),e.setState({settings:{...Mc,...(l=a.settings)!=null?l:{}},convertedAssetRecords:(c=a.convertedAssetRecords)!=null?c:[],modelAssetProfiles:Hj(a.modelAssetProfiles),agentDraft:(f=a.agentDraft)!=null?f:"",agentPlan:(h=a.agentPlan)!=null?h:null,lastKnowledgeGeneration:Xj(a.lastKnowledgeGeneration)}))},async save(){t&&(window.clearTimeout(t),t=null),await r()},dispose(){t&&(window.clearTimeout(t),t=null)}}}function Hj(n){if(!n||typeof n!="object")return{};let e={};for(let[t,i]of Object.entries(n)){if(!i||typeof i!="object")continue;let r=new Date().toISOString();e[t]={tags:Array.isArray(i.tags)?i.tags:[],notes:typeof i.notes=="string"?i.notes:"",annotations:Array.isArray(i.annotations)?i.annotations:[],registeredParts:zj(i.registeredParts,t),analysisVersion:typeof i.analysisVersion=="string"?i.analysisVersion:void 0,reportNotePath:typeof i.reportNotePath=="string"?i.reportNotePath:void 0,analysisSidecarPath:typeof i.analysisSidecarPath=="string"?i.analysisSidecarPath:void 0,previewImagePaths:Array.isArray(i.previewImagePaths)?i.previewImagePaths.filter(s=>typeof s=="string"):void 0,knowledgeIndexPath:typeof i.knowledgeIndexPath=="string"?i.knowledgeIndexPath:void 0,createdAt:typeof i.createdAt=="string"?i.createdAt:r,updatedAt:typeof i.updatedAt=="string"?i.updatedAt:r}}return e}function fp(n){return Array.isArray(n)?n.filter(e=>typeof e=="string"&&e.trim().length>0):[]}function cN(n){if(!Array.isArray(n)||n.length<3)return;let e=n.slice(0,3).map(t=>Number(t));return e.every(Number.isFinite)?[e[0],e[1],e[2]]:void 0}function zj(n,e){if(!Array.isArray(n))return;let t=[],i=new Set;for(let r of n){if(!r||typeof r!="object")continue;let s=r,a=typeof s.partId=="string"?s.partId:"",o=typeof s.name=="string"?s.name:"";if(!a||!o)continue;let l=typeof s.assetId=="string"&&s.assetId?s.assetId:e,c=`${l}:${a}`;i.has(c)||(i.add(c),t.push({partId:a,assetId:l,parentPartId:typeof s.parentPartId=="string"?s.parentPartId:void 0,name:o,source:s.source==="group"||s.source==="mesh"?s.source:void 0,category:typeof s.category=="string"?s.category:void 0,meshRefs:fp(s.meshRefs),childCount:Number.isFinite(s.childCount)?Math.max(0,Math.floor(Number(s.childCount))):void 0,materialRefs:fp(s.materialRefs),bbox:cN(s.bbox),center:cN(s.center),triangleCount:Number.isFinite(s.triangleCount)?Math.max(0,Math.floor(Number(s.triangleCount))):void 0,vertexCount:Number.isFinite(s.vertexCount)?Math.max(0,Math.floor(Number(s.vertexCount))):void 0,materialName:typeof s.materialName=="string"?s.materialName:null,confidence:Number.isFinite(s.confidence)?Math.max(0,Math.min(1,Number(s.confidence))):.5,observations:fp(s.observations),inferredFunctions:fp(s.inferredFunctions),knowledgeTags:fp(s.knowledgeTags),notePath:typeof s.notePath=="string"?s.notePath:void 0,registeredMatches:Array.isArray(s.registeredMatches)?s.registeredMatches:void 0,reviewed:s.reviewed===!0}))}return t.length>0?t:void 0}function Xj(n){if(!n||typeof n!="object")return null;let e=typeof n.modelPath=="string"?n.modelPath:"";return e?{modelPath:e,reportNotePath:typeof n.reportNotePath=="string"?n.reportNotePath:void 0,analysisSidecarPath:typeof n.analysisSidecarPath=="string"?n.analysisSidecarPath:void 0,knowledgeIndexPath:typeof n.knowledgeIndexPath=="string"?n.knowledgeIndexPath:void 0,partNoteCount:Number.isFinite(n.partNoteCount)?Math.max(0,Math.floor(n.partNoteCount)):0,previewImageCount:Number.isFinite(n.previewImageCount)?Math.max(0,Math.floor(n.previewImageCount)):0,generatedAt:typeof n.generatedAt=="string"?n.generatedAt:new Date().toISOString(),status:n.status==="failed"?"failed":"success",warningCount:Number.isFinite(n.warningCount)?Math.max(0,Math.floor(n.warningCount)):0}:null}var ap=require("obsidian");Qg();AR();Lg();_O();GR();WR();MO();na();HR();Ug();zR();ep();Js();XR();ks();Zn();DO();Js();function gue(n){if(!n)return"";let e=n.split("/");return e[e.length-1]||n}function CK(n,e,t){var o,l;let i=n.createDiv({cls:"ai3d-direct-workbench-match"}),r=i.createDiv({cls:"ai3d-direct-workbench-match-main"});r.createDiv({cls:"ai3d-direct-workbench-match-title",text:e}),r.createDiv({cls:"ai3d-direct-workbench-match-source",text:t.sourcePartName||t.sourcePartId}),t.sourceModelPath&&r.createDiv({cls:"ai3d-direct-workbench-match-model",text:fr("directWorkbench.registeredSourceModel",{model:gue(t.sourceModelPath)})}),r.createDiv({cls:"ai3d-direct-workbench-match-target",text:t.sourceNotePath?ee("directWorkbench.registeredTargetPartNote"):t.sourceModelPath?ee("directWorkbench.registeredTargetSourceModel"):ee("directWorkbench.registeredTargetUnavailable")}),t.reasons.length>0&&r.createDiv({cls:"ai3d-direct-workbench-match-reasons",text:t.reasons.slice(0,2).join(" / ")});let s=i.createDiv({cls:"ai3d-direct-workbench-match-side"});s.createDiv({cls:"ai3d-direct-workbench-match-score",text:`${Math.round(t.matchScore*100)}%`});let a=s.createEl("button",{cls:"ai3d-direct-workbench-action ai3d-direct-workbench-match-open",text:t.sourceNotePath?ee("directWorkbench.registeredOpenNote"):ee("directWorkbench.registeredOpenModel"),attr:{type:"button","data-ai3d-action":"open-registered-part","data-ai3d-target-path":(l=(o=t.sourceNotePath)!=null?o:t.sourceModelPath)!=null?l:""}});return a.disabled=!t.sourceNotePath&&!t.sourceModelPath,i}var $R="ai3d-direct-view",kO=cr("direct-view"),ZK=new Set(["glb","gltf"]),$ue=["x","y","z"];function QK(){return{tags:[],notes:"",annotations:[],createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}}function Jue(n,e){return n.experimentalThreeWorkbench&&n.useThreeRenderer&&e.strategy==="direct"&&ZK.has(e.ext)&&ZK.has(e.sourceExt)}function ZR(n){return Math.round(n!=null?n:0).toLocaleString()}function eme(n){return[n.boundingSize.x,n.boundingSize.y,n.boundingSize.z].map(e=>e.toFixed(2)).join(" x ")}function tme(n){return n==="three"?"Three.js":"Babylon.js"}function ime(n){return n instanceof Error&&n.message.includes("Missing external model resource:")}function $K(n){var t;let e=n.meshRefs.map(i=>i.trim().toLowerCase()).filter(Boolean).sort().join("|");return`${(t=n.source)!=null?t:"mesh"}:${n.name.trim().toLowerCase()}:${e}`}function rme(n,e){return n?{...e,notePath:n.notePath,reviewed:n.reviewed,inferredFunctions:n.inferredFunctions.length>0?n.inferredFunctions:e.inferredFunctions,knowledgeTags:n.knowledgeTags.length>0?n.knowledgeTags:e.knowledgeTags}:e}var QR=class extends ap.FileView{constructor(t,i,r,s){super(t);this.preview=null;this.annotationMgr=null;this.annotationMode=!1;this.loadGeneration=0;this.escHandler=null;this.workbenchPanel=null;this.workbenchSummary=null;this.workbenchRoute=null;this.workbenchModelPath=null;this.getSettings=i,this.convertedAssetCache=r,this.ps=s}getViewType(){return $R}getDisplayText(){var t,i;return(i=(t=this.file)==null?void 0:t.name)!=null?i:ee("workbench.modelTitle")}getIcon(){return"box"}async onOpen(){this.contentEl.empty(),this.contentEl.addClass("ai3d-direct-view"),this.file&&await this.loadModel(this.file)}async onLoadFile(t){this.contentEl.empty(),await this.loadModel(t)}onClose(){var t,i;return this.escHandler&&(activeDocument.removeEventListener("keydown",this.escHandler),this.escHandler=null),(t=this.annotationMgr)==null||t.destroy(),this.annotationMgr=null,(i=this.preview)==null||i.destroy(),this.preview=null,Promise.resolve()}async loadModel(t){var u,m,_,p,g,v,x,A;let i=++this.loadGeneration,r=hr();(u=this.annotationMgr)==null||u.destroy(),this.annotationMgr=null,this.annotationMode=!1,this.workbenchPanel=null,this.workbenchSummary=null,this.workbenchRoute=null,this.workbenchModelPath=null,(m=this.preview)==null||m.destroy(),this.preview=null,this.ps.store.setState({currentModelPath:t.path,modelPreview:null,selectedPart:null});let s=createDiv(),a=s.createDiv({cls:"ai3d-preview-host"}),o=s.createEl("canvas");o.className="ai3d-canvas-full",a.appendChild(o);let l=s.createDiv();l.className="ai3d-annot-mode-overlay is-hidden",a.appendChild(l),this.contentEl.appendChild(a);let c=null,f=S=>{var E;this.annotationMode=S,r&&S&&(c==null||c.setMobileInteractionMode(!0)),(E=this.annotationMgr)==null||E.hideEditor(),l.classList.toggle("is-hidden",!S)};this.escHandler&&activeDocument.removeEventListener("keydown",this.escHandler),this.escHandler=S=>{S.key==="Escape"&&this.annotationMode&&f(!1)},activeDocument.addEventListener("keydown",this.escHandler),c=Og(this.contentEl,a,this.app,()=>this.preview,()=>t.path,()=>{this.leaf.detach()},this.getSettings,()=>(f(!this.annotationMode),this.annotationMode),S=>{!S&&this.annotationMode&&f(!1)});let h=this.contentEl.createDiv({cls:"ai3d-direct-workbench-panel is-hidden"});r&&this.contentEl.createDiv({cls:"ai3d-mobile-mode-hint ai3d-mobile-mode-hint--inline",text:ee("directView.mobileHint")});let d=ud(a);try{let S=this.getSettings(),E=cd(S),R=(_=Kf(this.app,t.path))!=null?_:void 0;d.setPhaseKey("loading.preparingModel");let I=await hd({path:t.path,absolutePath:R,preferConversionExts:dd(S),conversionManager:E,convertedAssetCache:this.convertedAssetCache});if(i!==this.loadGeneration)return;let y=Fg(I),M={ext:y.ext,annotationMode:"edit",allowEditModeOnThree:!0,allowWorkbenchFeaturesOnThree:Jue(S,y),requireWorkbenchFeatures:!0,rendererRollout:S.previewRendererRollout,useThreeRenderer:S.useThreeRenderer};c==null||c.syncCapabilities(),d.setPhaseKey("loading.loadingModel");let D=await Na(this.app,y.path),O=await this.createPreviewWithFallback(o,D,y,M,t.path);if(i!==this.loadGeneration){O.preview.destroy();return}this.preview=O.preview,a.dataset.ai3dBackend=O.route.backend,a.dataset.ai3dRouteReason=O.route.reason,c==null||c.syncCapabilities();let V=O.summary,N=(v=(g=(p=this.preview).getModelEvidence)==null?void 0:g.call(p))!=null?v:null;this.registerModelPartsFromEvidence(t.path,N),rp(a,V),this.workbenchPanel=h,this.workbenchSummary=V,this.workbenchRoute=O.route,this.workbenchModelPath=t.path,this.renderWorkbenchPanel(h,V,O.route,t.path),this.ps.store.setState({currentModelPath:t.path,modelPreview:V,selectedPart:null}),kO.info("direct view model loaded",{path:t.path,effectivePath:y.path,effectiveExt:y.ext,strategy:y.strategy,backend:O.route.backend,routeReason:O.route.reason,meshCount:V.meshCount,triangleCount:V.triangleCount}),d.setProgress(100);let F=this.preview.getAnnotationProvider();if(F.canvas){let U=this.ps.store.getState().modelAssetProfiles[t.path],W=(x=U==null?void 0:U.annotations)!=null?x:[],$=tp(this.app),q=RK(this.app);this.annotationMgr=new Pc(F,a,"edit",W,Z=>{var fe;let X=this.ps.store.getState().modelAssetProfiles,Y=(fe=X[t.path])!=null?fe:QK();this.ps.store.setState({modelAssetProfiles:{...X,[t.path]:{...Y,annotations:Z,updatedAt:new Date().toISOString()}}}),c.updateAnnotationBadge(Z.length)},$,q,{app:this.app,previewMode:this.getSettings().annotationPreviewMode}),c.showAnnotateButton(),c.updateAnnotationBadge(W.length),this.preview.onPick(Z=>{var xe,Fe;if(!this.annotationMode||!this.annotationMgr)return;let X=Z.screenX,Y=Z.screenY,fe=(Fe=(xe=this.preview)==null?void 0:xe.getPickWorldPoint(Z))!=null?Fe:null;fe&&this.annotationMgr.showEditor(X,Y,fe)})}d.hide()}catch(S){if(i!==this.loadGeneration)return;d.hide(),(A=this.preview)==null||A.destroy(),this.preview=null,a.replaceChildren(),h.addClass("is-hidden");let E=Jm(S);$m(S)?console.warn("[AI3D] Direct view blocked by converter settings:",E.message):console.error("[AI3D] Direct view failed:",S),this.ps.store.getState().currentModelPath===t.path&&this.ps.store.setState({modelPreview:null,selectedPart:null}),ip(a,E)}}registerModelPartsFromEvidence(t,i){var c,f;if(!(i!=null&&i.parts.length))return;let r=PO(t,i.parts);if(r.length===0)return;let s=this.ps.store.getState().modelAssetProfiles,a=(c=s[t])!=null?c:QK(),o=new Map(((f=a.registeredParts)!=null?f:[]).map(h=>[$K(h),h])),l=r.map(h=>rme(o.get($K(h)),h));this.ps.store.setState({modelAssetProfiles:{...s,[t]:{...a,registeredParts:l,updatedAt:new Date().toISOString()}}})}renderWorkbenchPanel(t,i,r,s){var h,d,u,m;t.empty(),t.removeClass("is-hidden"),t.dataset.ai3dBackend=r.backend,t.dataset.ai3dRouteReason=r.reason;let a=t.createDiv({cls:"ai3d-direct-workbench-status"}),o=a.createDiv({cls:"ai3d-direct-workbench-line"});o.createSpan({cls:"ai3d-direct-workbench-label",text:ee("directWorkbench.backendLabel")}),o.createSpan({cls:"ai3d-direct-workbench-value",text:tme(r.backend)});let l=a.createDiv({cls:"ai3d-direct-workbench-line ai3d-direct-workbench-route"});l.createSpan({cls:"ai3d-direct-workbench-label",text:ee("directWorkbench.routeLabel")}),l.createSpan({cls:"ai3d-direct-workbench-value",text:r.reason});let c=t.createDiv({cls:"ai3d-direct-workbench-metrics"});this.renderMetric(c,ee("workbench.meshesLabel"),ZR(i.meshCount)),this.renderMetric(c,ee("directWorkbench.partCandidatesLabel"),ZR((d=(h=this.ps.store.getState().modelAssetProfiles[s])==null?void 0:h.registeredParts)==null?void 0:d.length)),this.renderMetric(c,i.splatCount!==void 0?ee("workbench.splatsLabel"):ee("workbench.trianglesLabel"),ZR((u=i.splatCount)!=null?u:i.triangleCount)),this.renderMetric(c,ee("workbench.materialsLabel"),ZR(i.materialCount)),this.renderMetric(c,ee("workbench.boundingSizeLabel"),eme(i)),this.renderMetric(c,ee("directWorkbench.performanceLabel"),(m=i.performanceTier)!=null?m:"light");let f=t.createDiv({cls:"ai3d-direct-workbench-controls"});this.renderExplodeControls(f),this.renderRegisteredPartMatches(f,s,i),this.renderKnowledgeControls(f,s)}refreshWorkbenchPanel(){!this.workbenchPanel||!this.workbenchSummary||!this.workbenchRoute||!this.workbenchModelPath||this.renderWorkbenchPanel(this.workbenchPanel,this.workbenchSummary,this.workbenchRoute,this.workbenchModelPath)}renderMetric(t,i,r){let s=t.createDiv({cls:"ai3d-direct-workbench-metric"});s.createSpan({cls:"ai3d-direct-workbench-label",text:i}),s.createSpan({cls:"ai3d-direct-workbench-value",text:r})}renderExplodeControls(t){let i=!!this.preview&&IR(this.preview),r=t.createDiv({cls:"ai3d-direct-workbench-control"}),s=r.createDiv({cls:"ai3d-direct-workbench-control-head"});s.createSpan({cls:"ai3d-direct-workbench-label",text:ee("workbench.explodeLabel")});let a=s.createSpan({cls:"ai3d-direct-workbench-value",text:"0%"}),o="x",l=r.createDiv({cls:"ai3d-direct-workbench-axis",attr:{"aria-label":ee("directWorkbench.explodeAxisLabel")}});for(let u of $ue){let m=l.createEl("button",{cls:u===o?"is-active":"",text:u.toUpperCase(),attr:{type:"button","data-ai3d-action":`set-explode-axis-${u}`}});m.disabled=!i,m.addEventListener("click",()=>{o=u;for(let _ of Array.from(l.querySelectorAll("button")))_.classList.toggle("is-active",_===m);d()})}let c=r.createDiv({cls:"ai3d-direct-workbench-range-row"}),f=c.createEl("input",{cls:"ai3d-direct-workbench-range",attr:{"data-ai3d-action":"set-explode"}});f.type="range",f.min="0",f.max="0.85",f.step="0.05",f.value="0",f.disabled=!i;let h=c.createEl("button",{cls:"ai3d-direct-workbench-reset",text:ee("directWorkbench.explodeResetLabel"),attr:{type:"button","data-ai3d-action":"reset-explode"}});h.disabled=!i;let d=()=>{let u=Number.parseFloat(f.value);a.setText(`${Math.round(u*100)}%`),h.classList.toggle("is-active",u>0),this.preview&&IR(this.preview)&&this.preview.setExplode(u,o)};f.addEventListener("input",d),h.addEventListener("click",()=>{f.value="0",a.setText("0%"),h.classList.remove("is-active"),this.preview&&IR(this.preview)&&this.preview.resetExplode()})}renderKnowledgeControls(t,i){let r=this.ps.store.getState().modelAssetProfiles[i],s=t.createDiv({cls:"ai3d-direct-workbench-control ai3d-direct-workbench-knowledge"});s.createDiv({cls:"ai3d-direct-workbench-label",text:ee("directWorkbench.knowledgeTitle")}),s.createDiv({cls:"ai3d-direct-workbench-value",text:r!=null&&r.knowledgeIndexPath?ee("workbench.indexReady"):r!=null&&r.reportNotePath?ee("workbench.noteReady"):ee("workbench.noReportYet")});let a=s.createDiv({cls:"ai3d-direct-workbench-actions"}),o=a.createEl("button",{cls:"ai3d-direct-workbench-action",text:ee("workbench.generateNoteAction"),attr:{type:"button","data-ai3d-action":"generate-note"}});o.addEventListener("click",()=>{o.disabled=!0,Promise.resolve().then(()=>(qR(),jR)).then(({generateKnowledgeNote:f})=>f(this.app,this.ps,{preview:this.preview})).catch(f=>{console.error("[AI3D] Generate knowledge note failed:",f)}).finally(()=>{o.disabled=!1,this.refreshWorkbenchPanel()})});let l=a.createEl("button",{cls:"ai3d-direct-workbench-action",text:ee("workbench.openNoteAction"),attr:{type:"button","data-ai3d-action":"open-note"}});l.disabled=!(r!=null&&r.reportNotePath),l.addEventListener("click",()=>{var d;let f=(d=this.ps.store.getState().modelAssetProfiles[i])==null?void 0:d.reportNotePath;if(!f)return;let h=this.app.vault.getAbstractFileByPath(f);h instanceof ap.TFile&&this.app.workspace.getLeaf(!0).openFile(h,{active:!0})});let c=a.createEl("button",{cls:"ai3d-direct-workbench-action",text:ee("workbench.openIndexAction"),attr:{type:"button","data-ai3d-action":"open-index"}});c.disabled=!(r!=null&&r.knowledgeIndexPath),c.addEventListener("click",()=>{var d;let f=(d=this.ps.store.getState().modelAssetProfiles[i])==null?void 0:d.knowledgeIndexPath;if(!f)return;let h=this.app.vault.getAbstractFileByPath(f);h instanceof ap.TFile&&this.app.workspace.getLeaf(!0).openFile(h,{active:!0})})}renderRegisteredPartMatches(t,i,r){var d,u,m;let s=this.loadGeneration,a=t.createDiv({cls:"ai3d-direct-workbench-control ai3d-direct-workbench-registered"}),o=a.createDiv({cls:"ai3d-direct-workbench-control-head"});o.createSpan({cls:"ai3d-direct-workbench-label",text:ee("directWorkbench.registeredTitle")});let l=o.createSpan({cls:"ai3d-direct-workbench-value",text:ee("directWorkbench.registeredLoading")}),c=a.createDiv({cls:"ai3d-direct-workbench-registered-body"}),f=_=>{l.setText(""),c.empty(),c.createDiv({cls:"ai3d-direct-workbench-empty",text:ee(_)})},h=(m=(u=(d=this.preview)==null?void 0:d.getModelEvidence)==null?void 0:u.call(d))!=null?m:null;if(!(h!=null&&h.parts.length)){f("directWorkbench.registeredUnavailable");return}Promise.resolve().then(()=>(qR(),jR)).then(async({collectRegisteredPartsFromProfiles:_})=>{var E;let p=this.ps.store.getState(),g=await _(this.app,p.modelAssetProfiles,i);if(s!==this.loadGeneration||this.workbenchModelPath!==i||!a.isConnected)return;if(g.length===0){f("directWorkbench.registeredEmpty");return}let v=this.ps.store.getState().modelAssetProfiles[i],A=KR({modelPath:i,profile:v,preview:r,evidence:h,registeredParts:g}).parts.filter(R=>{var I;return(I=R.registeredMatches)==null?void 0:I.length}).sort((R,I)=>{var y,M,D,O,V,N;return((D=(M=(y=I.registeredMatches)==null?void 0:y[0])==null?void 0:M.matchScore)!=null?D:0)-((N=(V=(O=R.registeredMatches)==null?void 0:O[0])==null?void 0:V.matchScore)!=null?N:0)}).slice(0,5);if(A.length===0){f("directWorkbench.registeredEmpty");return}l.setText(fr("directWorkbench.registeredCount",{count:String(A.length)})),c.empty();let S=c.createDiv({cls:"ai3d-direct-workbench-match-list"});for(let R of A){let I=(E=R.registeredMatches)==null?void 0:E[0];if(!I)continue;let M=CK(S,R.name,I).querySelector("[data-ai3d-action='open-registered-part']");M instanceof HTMLButtonElement&&M.addEventListener("click",()=>{let D=M.getAttribute("data-ai3d-target-path")||void 0;if(!D)return;let O=this.app.vault.getAbstractFileByPath(D);O instanceof ap.TFile&&this.app.workspace.getLeaf(!0).openFile(O,{active:!0})})}}).catch(_=>{console.warn("[AI3D] Registered part match preview failed:",_),s===this.loadGeneration&&this.workbenchModelPath===i&&a.isConnected&&f("directWorkbench.registeredUnavailable")})}async createPreviewWithFallback(t,i,r,s,a){let o=await ld(kO,{surface:"direct-view",modelPath:a},t,s);try{let l=await o.preview.loadModel(i.slice(0),r.ext,c=>Na(this.app,c),r.path);return{preview:o.preview,summary:l,route:o.route}}catch(l){if(o.preview.destroy(),o.route.backend!=="three"||!s.allowWorkbenchFeaturesOnThree)throw l;console.warn("[AI3D] Experimental Three workbench failed; falling back to Babylon:",l);let c={...s,allowWorkbenchFeaturesOnThree:!1},f=await ld(kO,{surface:"direct-view-fallback",modelPath:a},t,c);try{let h=await f.preview.loadModel(i.slice(0),r.ext,d=>Na(this.app,d),r.path);return{preview:f.preview,summary:h,route:f.route}}catch(h){throw f.preview.destroy(),ime(l)?l:h}}}};var JK=require("obsidian");To();Js();var JR=class extends JK.FuzzySuggestModal{constructor(e,t){super(e),this.onChoose=t,this.setPlaceholder(ee("modal.selectModel"))}getItems(){return this.app.vault.getFiles().filter(e=>{let t=e.extension.toLowerCase();return dl(t)})}getItemText(e){return e.path}onChooseItem(e){this.onChoose(e)}};var Jt=require("obsidian");Xf();Js();ks();ir();var WO=Xg();function nme(){switch(WO==null?void 0:WO.platform){case"win32":return{python:"Path to python executable",freecad:"Path to FreeCADCmd.exe",obj2gltf:"Path to obj2gltf.cmd",fbx2gltf:"Path to FBX2glTF.exe"};case"darwin":return{python:"Path to python3",freecad:"Path to FreeCADCmd",obj2gltf:"Path to obj2gltf",fbx2gltf:"Path to FBX2glTF"};case"linux":return{python:"Path to python3",freecad:"Path to freecadcmd",obj2gltf:"Path to obj2gltf",fbx2gltf:"Path to FBX2glTF"};default:return{python:"Path to python executable",freecad:"Path to FreeCAD command",obj2gltf:"Path to obj2gltf",fbx2gltf:"Path to FBX2glTF"}}}var eb=class extends Jt.PluginSettingTab{constructor(t,i){super(t,i);this.diagnosticsRunId=0;this.plugin=i}display(){let{containerEl:t}=this;t.empty(),hp(this.plugin.getSettings().locale);let i=nme(),r=hr(),s=null,a=(l,c,f)=>{let h=l.createEl("details",{cls:"ai3d-settings-secondary-menu"});h.createEl("summary",{cls:"ai3d-settings-secondary-menu-summary",text:c});let d=h.createDiv({cls:"ai3d-settings-secondary-menu-body"});return d.createEl("p",{cls:"setting-item-description",text:f}),d},o=()=>{s&&(this.diagnosticsRunId++,s.empty(),s.createEl("p",{text:ee("settings.diagnostics.idle")}))};if(new Jt.Setting(t).setName(ee("settings.title")).setHeading(),new Jt.Setting(t).setName(ee("settings.language")).setDesc(ee("settings.language.desc")).addDropdown(l=>l.addOption("en","English").addOption("zh-CN","\u7B80\u4F53\u4E2D\u6587").setValue(this.plugin.getSettings().locale).onChange(c=>{this.plugin.updateSettings({locale:c}),this.display()})),new Jt.Setting(t).setName(ee("settings.folders")).setHeading(),new Jt.Setting(t).setName(ee("settings.sourceModelFolder")).setDesc(ee("settings.sourceModelFolder.desc")).addText(l=>l.setPlaceholder(Mc.sourceModelFolder).setValue(this.plugin.getSettings().sourceModelFolder).onChange(c=>{this.plugin.updateSettings({sourceModelFolder:c})})),new Jt.Setting(t).setName(ee("settings.reportFolder")).setDesc(ee("settings.reportFolder.desc")).addText(l=>l.setPlaceholder(Mc.reportFolder).setValue(this.plugin.getSettings().reportFolder).onChange(c=>{this.plugin.updateSettings({reportFolder:c})})),new Jt.Setting(t).setName(ee("settings.partFolder")).setDesc(ee("settings.partFolder.desc")).addText(l=>l.setPlaceholder(Mc.partFolder).setValue(this.plugin.getSettings().partFolder).onChange(c=>{this.plugin.updateSettings({partFolder:c})})),new Jt.Setting(t).setName(ee("settings.snapshotFolder")).setDesc(ee("settings.snapshotFolder.desc")).addText(l=>l.setPlaceholder(Mc.snapshotFolder).setValue(this.plugin.getSettings().snapshotFolder).onChange(c=>{this.plugin.updateSettings({snapshotFolder:c})})),new Jt.Setting(t).setName(ee("settings.behavior")).setHeading(),new Jt.Setting(t).setName(ee("settings.autoGenerateKnowledgeNotes")).setDesc(ee("settings.autoGenerateKnowledgeNotes.desc")).addToggle(l=>l.setValue(this.plugin.getSettings().autoGenerateKnowledgeNotes).onChange(c=>{this.plugin.updateSettings({autoGenerateKnowledgeNotes:c})})),new Jt.Setting(t).setName(ee("settings.annotationPreviewMode")).setDesc(ee("settings.annotationPreviewMode.desc")).addDropdown(l=>l.addOption("plain-text",ee("settings.annotationPreviewMode.plainText")).addOption("markdown",ee("settings.annotationPreviewMode.markdown")).setValue(this.plugin.getSettings().annotationPreviewMode).onChange(c=>{this.plugin.updateSettings({annotationPreviewMode:c})})),new Jt.Setting(t).setName(ee("settings.previewRendererRollout")).setDesc(ee("settings.previewRendererRollout.desc")).addDropdown(l=>l.addOption("babylon-safe",ee("settings.previewRendererRollout.babylonSafe")).addOption("three-readonly-glb",ee("settings.previewRendererRollout.readonly")).addOption("three-direct-glb",ee("settings.previewRendererRollout.direct")).setValue(this.plugin.getSettings().previewRendererRollout).onChange(c=>{this.plugin.updateSettings({previewRendererRollout:c})})),new Jt.Setting(t).setName(ee("settings.useThreeRenderer")).setDesc(ee("settings.useThreeRenderer.desc")).addToggle(l=>l.setValue(this.plugin.getSettings().useThreeRenderer).onChange(c=>{this.plugin.updateSettings({useThreeRenderer:c})})),new Jt.Setting(t).setName(ee("settings.experimentalThreeWorkbench")).setDesc(ee("settings.experimentalThreeWorkbench.desc")).addToggle(l=>l.setValue(this.plugin.getSettings().experimentalThreeWorkbench).onChange(c=>{this.plugin.updateSettings({experimentalThreeWorkbench:c})})),new Jt.Setting(t).setName(ee("settings.autoRotateDefault")).setDesc(ee("settings.autoRotateDefault.desc")).addToggle(l=>l.setValue(this.plugin.getSettings().autoRotateDefault).onChange(c=>{this.plugin.updateSettings({autoRotateDefault:c})})),new Jt.Setting(t).setName(ee("settings.snapshotNaming")).setDesc(ee("settings.snapshotNaming.desc")).addDropdown(l=>l.addOption("model-name",ee("settings.snapshotNaming.modelName")).addOption("timestamp",ee("settings.snapshotNaming.timestamp")).setValue(this.plugin.getSettings().snapshotNaming).onChange(c=>{this.plugin.updateSettings({snapshotNaming:c})})),new Jt.Setting(t).setName(ee("settings.logLevel")).setDesc(ee("settings.logLevel.desc")).addDropdown(l=>l.addOption("debug","Debug").addOption("info","Info").addOption("warn","Warn").addOption("error","Error").setValue(this.plugin.getSettings().logLevel).onChange(c=>{this.plugin.updateSettings({logLevel:c})})),new Jt.Setting(t).setName(ee("settings.knowledgeGeneration")).setHeading(),new Jt.Setting(t).setName(ee("settings.analysisMode")).setDesc(ee("settings.analysisMode.desc")).addDropdown(l=>l.addOption("local",ee("settings.analysisMode.local")).addOption("hybrid",ee("settings.analysisMode.hybrid")).addOption("remote",ee("settings.analysisMode.remote")).setValue(this.plugin.getSettings().analysisMode).onChange(c=>{this.plugin.updateSettings({analysisMode:c})})),new Jt.Setting(t).setName(ee("settings.serviceBaseUrl")).setDesc(ee("settings.serviceBaseUrl.desc")).addText(l=>l.setPlaceholder("Local draft service URL").setValue(this.plugin.getSettings().serviceBaseUrl).onChange(c=>{this.plugin.updateSettings({serviceBaseUrl:c.trim()})})),new Jt.Setting(t).setName(ee("settings.sendGeometrySummaryToRemote")).setDesc(ee("settings.sendGeometrySummaryToRemote.desc")).addToggle(l=>l.setValue(this.plugin.getSettings().sendGeometrySummaryToRemote).onChange(c=>{this.plugin.updateSettings({sendGeometrySummaryToRemote:c})})),new Jt.Setting(t).setName(ee("settings.sendPreviewImagesToRemote")).setDesc(ee("settings.sendPreviewImagesToRemote.desc")).addToggle(l=>l.setValue(this.plugin.getSettings().sendPreviewImagesToRemote).onChange(c=>{this.plugin.updateSettings({sendPreviewImagesToRemote:c})})),new Jt.Setting(t).setName(ee("settings.sendRawModelToRemote")).setDesc(ee("settings.sendRawModelToRemote.desc")).addToggle(l=>l.setValue(this.plugin.getSettings().sendRawModelToRemote).onChange(c=>{this.plugin.updateSettings({sendRawModelToRemote:c})})),new Jt.Setting(t).setName(ee("settings.converters")).setHeading(),r)t.createEl("p",{cls:"setting-item-description",text:ee("settings.mobileSupport.desc")});else{let l=a(t,ee("settings.converterMenu"),ee("settings.converterMenu.desc"));new Jt.Setting(l).setName(ee("settings.enableCad")).setDesc(ee("settings.enableCad.desc")).addToggle(h=>{let d=this.plugin.getSettings().enabledConverterIds.includes("freecad");return h.setValue(d).onChange(u=>{let m=this.plugin.getSettings().enabledConverterIds,_=u?Array.from(new Set([...m,"freecad"])):m.filter(p=>p!=="freecad");this.plugin.updateSettings({enabledConverterIds:_})})}),new Jt.Setting(l).setName(ee("settings.enableObj2gltf")).setDesc(ee("settings.enableObj2gltf.desc")).addToggle(h=>{let d=this.plugin.getSettings().enabledConverterIds.includes("obj2gltf");return h.setValue(d).onChange(u=>{let m=this.plugin.getSettings().enabledConverterIds,_=u?Array.from(new Set([...m,"obj2gltf"])):m.filter(p=>p!=="obj2gltf");this.plugin.updateSettings({enabledConverterIds:_})})}),new Jt.Setting(l).setName(ee("settings.preferObj2gltf")).setDesc(ee("settings.preferObj2gltf.desc")).addToggle(h=>h.setValue(this.plugin.getSettings().preferObj2gltfForObj).onChange(d=>{this.plugin.updateSettings({preferObj2gltfForObj:d})})),new Jt.Setting(l).setName(ee("settings.enableFbx2gltf")).setDesc(ee("settings.enableFbx2gltf.desc")).addToggle(h=>{let d=this.plugin.getSettings().enabledConverterIds.includes("fbx2gltf");return h.setValue(d).onChange(u=>{let m=this.plugin.getSettings().enabledConverterIds,_=u?Array.from(new Set([...m,"fbx2gltf"])):m.filter(p=>p!=="fbx2gltf");this.plugin.updateSettings({enabledConverterIds:_})})}),new Jt.Setting(l).setName(ee("settings.enableMesh")).setDesc(ee("settings.enableMesh.desc")).addToggle(h=>{let d=this.plugin.getSettings().enabledConverterIds.includes("assimp");return h.setValue(d).onChange(u=>{let m=this.plugin.getSettings().enabledConverterIds,_=u?Array.from(new Set([...m,"assimp"])):m.filter(p=>p!=="assimp");this.plugin.updateSettings({enabledConverterIds:_})})}),new Jt.Setting(l).setName(ee("settings.enableSldprt")).setDesc(ee("settings.enableSldprt.desc")).addToggle(h=>{let d=this.plugin.getSettings().enabledConverterIds.includes("sldprt");return h.setValue(d).onChange(u=>{let m=this.plugin.getSettings().enabledConverterIds,_=u?Array.from(new Set([...m,"sldprt"])):m.filter(p=>p!=="sldprt");this.plugin.updateSettings({enabledConverterIds:_})})});let c=a(t,ee("settings.environmentInspector"),ee("settings.environmentInspector.desc"));new Jt.Setting(c).setName(ee("settings.paths")).setHeading(),new Jt.Setting(c).setName(ee("settings.pythonCmd")).setDesc(ee("settings.pythonCmd.desc")).addText(h=>h.setPlaceholder(i.python).setValue(this.plugin.getSettings().freecadCommand).onChange(d=>{this.plugin.updateSettings({freecadCommand:d.trim()}),o()})),new Jt.Setting(c).setName(ee("settings.freecadCmd")).setDesc(ee("settings.freecadCmd.desc")).addText(h=>h.setPlaceholder(i.freecad).setValue(this.plugin.getSettings().freecadcmdCommand).onChange(d=>{this.plugin.updateSettings({freecadcmdCommand:d.trim()}),o()})),new Jt.Setting(c).setName(ee("settings.obj2gltfCmd")).setDesc(ee("settings.obj2gltfCmd.desc")).addText(h=>h.setPlaceholder(i.obj2gltf).setValue(this.plugin.getSettings().obj2gltfCommand).onChange(d=>{this.plugin.updateSettings({obj2gltfCommand:d.trim()}),o()})),new Jt.Setting(c).setName(ee("settings.fbx2gltfCmd")).setDesc(ee("settings.fbx2gltfCmd.desc")).addText(h=>h.setPlaceholder(i.fbx2gltf).setValue(this.plugin.getSettings().fbx2gltfCommand).onChange(d=>{this.plugin.updateSettings({fbx2gltfCommand:d.trim()}),o()})),new Jt.Setting(c).setName(ee("settings.assimpCmd")).setDesc(ee("settings.assimpCmd.desc")).addText(h=>h.setPlaceholder(i.python).setValue(this.plugin.getSettings().assimpCommand).onChange(d=>{this.plugin.updateSettings({assimpCommand:d.trim()}),o()})),new Jt.Setting(c).setName(ee("settings.diagnostics")).setDesc(ee("settings.diagnostics.desc")).addButton(h=>h.setButtonText(ee("settings.diagnostics.checkNow")).onClick(async()=>{h.setDisabled(!0),h.setButtonText(ee("settings.diagnostics.checking")),s&&await this.renderCommandDiagnostics(s),h.setButtonText(ee("settings.diagnostics.checkNow")),h.setDisabled(!1),new Jt.Notice(ee("settings.diagnostics.refreshed"))})),s=c.createDiv({cls:"ai3d-settings-diagnostics"}),o()}new Jt.Setting(t).setName(ee("settings.performance")).setHeading(),new Jt.Setting(t).setName(ee("settings.canvasHeight")).setDesc(ee("settings.canvasHeight.desc")).addSlider(l=>l.setLimits(200,800,25).setValue(this.plugin.getSettings().defaultCanvasHeight).setDynamicTooltip().onChange(c=>{this.plugin.updateSettings({defaultCanvasHeight:c})})),new Jt.Setting(t).setName(ee("settings.autoRotateSpeed")).setDesc(ee("settings.autoRotateSpeed.desc")).addSlider(l=>l.setLimits(.1,2,.1).setValue(this.plugin.getSettings().autoRotateSpeed).setDynamicTooltip().onChange(c=>{this.plugin.updateSettings({autoRotateSpeed:c})})),new Jt.Setting(t).setName(ee("settings.renderQuality")).setDesc(ee("settings.renderQuality.desc")).addDropdown(l=>l.addOption("low","Low").addOption("medium","Medium").addOption("high","High").setValue(this.plugin.getSettings().renderQuality).onChange(c=>{this.plugin.updateSettings({renderQuality:c})})),new Jt.Setting(t).setName(ee("settings.renderScale")).setDesc(ee("settings.renderScale.desc")).addSlider(l=>l.setLimits(.25,2,.25).setValue(this.plugin.getSettings().renderScale).setDynamicTooltip().onChange(c=>{this.plugin.updateSettings({renderScale:c})}))}async renderCommandDiagnostics(t){let i=++this.diagnosticsRunId;t.empty(),t.createEl("p",{text:ee("settings.diagnostics.checkingAvailability")});let r=await OR(this.plugin.getSettings());if(i===this.diagnosticsRunId){t.empty();for(let s of r)this.renderCommandStatus(t,s)}}renderCommandStatus(t,i){var a;let r=t.createDiv({cls:"ai3d-settings-status-block"});r.createEl("strong",{text:`${i.label}: ${i.available?ee("settings.diagnostics.available"):ee("settings.diagnostics.notFound")}`});let s=[`${ee("settings.diagnostics.sourceLabel")}: ${LR(i.source)}`,`${ee("settings.diagnostics.commandLabel")}: ${i.command}`,i.resolvedPath&&i.resolvedPath!==i.command?`${ee("settings.diagnostics.resolvedPathLabel")}: ${i.resolvedPath}`:"",i.detail].filter(Boolean);for(let o of s)r.createDiv({text:o});for(let o of(a=i.dependencyChecks)!=null?a:[])this.renderDependencyCheck(r,o)}renderDependencyCheck(t,i){let r=(()=>{switch(i.kind){case"cad-python":return ee("settings.diagnostics.cadPythonCheck");case"mesh-python":return ee("settings.diagnostics.meshPythonCheck");case"freecadcmd-cli":return ee("settings.diagnostics.freecadCmdCheck");case"obj2gltf-cli":return ee("settings.diagnostics.obj2gltfCheck");case"fbx2gltf-cli":return ee("settings.diagnostics.fbx2gltfCheck")}})(),s=i.ok?ee("settings.diagnostics.selfCheckOk"):ee("settings.diagnostics.selfCheckFailed");t.createDiv({text:`${ee("settings.diagnostics.selfCheckLabel")}: ${r} - ${s}`}),i.detail&&t.createDiv({text:i.detail})}};Xf();Zn();Js();Ug();ks();na();var ib=class extends Qs.Plugin{getSettings(){return this.ps.store.getState().settings}updateSettings(e){let i={...this.ps.store.getState().settings,...e};this.ps.store.setState({settings:i}),gO(i.logLevel),hp(i.locale)}async onload(){var l;if(this.ps=fN(this),await this.ps.load(),this.convertedAssetCache=aN(this.ps.store.getState().convertedAssetRecords,c=>this.ps.store.setState({convertedAssetRecords:c})),gO(this.getSettings().logLevel),!this.ps.localeLoadedFromSaved){let f=((l=navigator.language)!=null?l:"en").startsWith("zh")?"zh-CN":"en";this.updateSettings({locale:f})}hp(this.getSettings().locale),this.addRibbonIcon("box",ee("main.commandImportModel"),()=>this.importModel()),this.addCommand({id:"import-model",name:ee("main.commandImportModel"),callback:()=>this.importModel()}),this.addCommand({id:"generate-note",name:ee("main.commandGenerateNote"),callback:()=>this.generateNote()}),this.addCommand({id:"open-knowledge-index",name:ee("main.commandOpenKnowledgeIndex"),callback:()=>void this.openKnowledgeIndex()}),this.addCommand({id:"clear-conversion-cache",name:ee("main.commandClearConversionCache"),callback:()=>this.clearConversionCache()}),this.addCommand({id:"check-converters",name:ee("main.commandCheckConverters"),callback:()=>void this.checkConverterCommands()}),this.addCommand({id:"copy-diagnostics-report",name:ee("main.commandCopyDiagnostics"),callback:()=>void this.copyDiagnosticsReport()}),this.addSettingTab(new eb(this.app,this)),this.registerView($R,c=>new QR(c,()=>this.getSettings(),this.convertedAssetCache,this.ps)),this.registerExtensions(ul(),$R);let{registerCodeBlockProcessor:e,registerGridCodeBlockProcessor:t}=await Promise.resolve().then(()=>(gj(),_j)),i=c=>{var f,h;return(h=(f=this.ps.store.getState().modelAssetProfiles[c])==null?void 0:f.annotations)!=null?h:[]},r=e(this.app,()=>this.getSettings(),this.convertedAssetCache,i);this.registerMarkdownCodeBlockProcessor(r.id,r.handler);let s=t(this.app,()=>this.getSettings(),this.convertedAssetCache);this.registerMarkdownCodeBlockProcessor(s.id,s.handler);let{registerLivePreviewExtension:a}=await Promise.resolve().then(()=>(Aj(),Tj)),o=a(this.app,()=>this.getSettings(),this.convertedAssetCache,i);for(let c of o)this.registerEditorExtension(c);this.setupHeadingPinObserver()}onunload(){this.ps.dispose()}setupHeadingPinObserver(){let e=".markdown-preview-view, .markdown-source-view",t=[".markdown-preview-view h1",".markdown-preview-view h2",".markdown-preview-view h3",".markdown-preview-view h4",".markdown-preview-view h5",".markdown-preview-view h6",".cm-heading-1",".cm-heading-2",".cm-heading-3",".cm-heading-4",".cm-heading-5",".cm-heading-6",".cm-header-1",".cm-header-2",".cm-header-3",".cm-header-4",".cm-header-5",".cm-header-6"].join(", "),i=new Map,r=M=>{if(M.length===0)return"var(--interactive-accent)";if(M.length===1)return M[0];let D=100/M.length;return`linear-gradient(135deg, ${M.map((O,V)=>{let N=Math.round(V*D),F=Math.round((V+1)*D);return`${O} ${N}% ${F}%`}).join(", ")})`},s=()=>{let M=new Map,D=this.ps.store.getState().modelAssetProfiles;for(let[O,V]of Object.entries(D))for(let N of V.annotations)if(N.headingRef&&N.id){let F=Bg(N.headingRef);if(!F)continue;let U=M.get(F);U||(U=[],M.set(F,U)),U.push({pinId:N.id,modelPath:O,color:N.color})}return M},a=M=>M.map(D=>`${D.pinId}:${D.modelPath}:${D.color}`).sort().join("|"),o=M=>Array.from(M.entries()).map(([D,O])=>`${D}=>${a(O)}`).sort().join("||"),l=M=>Bg(Array.from(M.childNodes).map(D=>{var O;return D.instanceOf(Element)&&D.classList.contains("ai3d-heading-pin-badge")?"":(O=D.textContent)!=null?O:""}).join(" ")),c=M=>{let D=i.get(M);D&&(M.removeEventListener("mouseover",D.handler),D.badge.remove(),delete M.dataset.pinBound,i.delete(M))},f=(M,D)=>{if(D.length===0){c(M);return}let O=a(D),V=i.get(M);if((V==null?void 0:V.signature)===O)return;V&&c(M),M.dataset.pinBound=O;let N=M.createSpan({cls:"ai3d-heading-pin-badge"}),F=[...new Set(D.map(Z=>Z.color).filter(Boolean))],U=N.createSpan({cls:"ai3d-heading-pin-badge-swatch"});if(U.style.background=r(F),U.title=D.length>1?ee("headingPin.showMultiple"):ee("headingPin.showSingle"),U.setAttribute("role","button"),U.setAttribute("tabindex","0"),D.length>1){let Z=N.createSpan({cls:"ai3d-heading-pin-badge-count"});Z.textContent=`\xD7${D.length}`}let W=[...new Set(D.map(Z=>Xr(Z.modelPath)))];N.title=fr("headingPin.linkedTo",{models:W.join(", ")});let $=Z=>{Z==null||Z.stopPropagation(),Z==null||Z.preventDefault();for(let X of D)activeDocument.dispatchEvent(new CustomEvent("ai3d-pin-highlight",{detail:{pinId:X.pinId}}))};U.addEventListener("click",Z=>{$(Z)}),U.addEventListener("keydown",Z=>{Z.instanceOf(KeyboardEvent)&&(Z.key!=="Enter"&&Z.key!==" "||$(Z))}),N.addEventListener("click",Z=>{Z.stopPropagation()}),M.appendChild(N);let q=()=>{for(let Z of D)activeDocument.dispatchEvent(new CustomEvent("ai3d-pin-highlight",{detail:{pinId:Z.pinId}}))};M.addEventListener("mouseover",q),i.set(M,{badge:N,handler:q,signature:O})},h=(M,D)=>{var V;let O=l(M);f(M,(V=D.get(O))!=null?V:[])},d=M=>{var D;for(let[O,V]of Array.from(i.entries())){if(!O.isConnected){c(O);continue}let N=(D=M.get(l(O)))!=null?D:[],F=a(N);(N.length===0||V.signature!==F)&&f(O,N)}},u=(M,D)=>{M.querySelectorAll(t).forEach(O=>h(O,D))},m=()=>{let M=s();d(M),activeDocument.querySelectorAll(e).forEach(O=>u(O,M))},_=o(s()),p=0,g=(M=0)=>{p&&window.clearTimeout(p),p=window.setTimeout(()=>{p=0,m()},M)},v=this.ps.store.subscribe(()=>{let M=s(),D=o(M);D!==_&&(_=D,g())});this.registerEvent(this.app.workspace.on("layout-change",()=>{g(200)}));let x=M=>M.matches(e)||M.matches(t)?!0:!!M.querySelector(e)||!!M.querySelector(t),A=M=>M.isConnected&&x(M),S=M=>x(M),E=new Set,R=0,I=()=>{var O,V,N,F,U,W;let M=Array.from(E);E.clear(),R=0;let D=s();d(D);for(let $ of M)$.isConnected&&((O=$.matches)!=null&&O.call($,t)&&h($,D),(N=(V=$.querySelectorAll)==null?void 0:V.call($,t))==null||N.forEach(q=>h(q,D)),(F=$.matches)!=null&&F.call($,e)&&u($,D),(W=(U=$.querySelectorAll)==null?void 0:U.call($,e))==null||W.forEach(q=>u(q,D)));_=o(D)},y=new MutationObserver(M=>{let D=!1;for(let O of M){for(let V of Array.from(O.addedNodes))V.instanceOf(HTMLElement)&&A(V)&&(E.add(V),D=!0);for(let V of Array.from(O.removedNodes))V.instanceOf(HTMLElement)&&S(V)&&(D=!0)}D&&!R&&(R=window.setTimeout(I,100))});y.observe(activeDocument.body,{childList:!0,subtree:!0}),this.register(()=>{v(),y.disconnect(),R&&(window.clearTimeout(R),R=0),p&&(window.clearTimeout(p),p=0);for(let M of Array.from(i.keys()))c(M)}),g(500)}importModel(){new JR(this.app,e=>{let t=e.extension.toLowerCase();dl(t)&&this.openModelFile(e)}).open()}async openModelFile(e){this.ps.store.setState({currentModelPath:e.path,modelPreview:null,selectedPart:null}),await this.app.workspace.getLeaf(!0).openFile(e,{active:!0})}async generateNote(){let{generateKnowledgeNote:e}=await Promise.resolve().then(()=>(qR(),jR));await e(this.app,this.ps)}async openKnowledgeIndex(){let e=this.resolveKnowledgeIndexPath();if(!e){new Qs.Notice(ee("workbench.noIndexYet"));return}let t=this.app.vault.getAbstractFileByPath(e);t instanceof Qs.TFile?await this.app.workspace.getLeaf(!0).openFile(t,{active:!0}):new Qs.Notice(fr("workbench.fileNotFound",{path:e}))}resolveKnowledgeIndexPath(){var s,a,o;let e=this.ps.store.getState(),t=e.currentModelPath,i=t?(s=e.modelAssetProfiles[t])==null?void 0:s.knowledgeIndexPath:void 0;return i||((a=e.lastKnowledgeGeneration)!=null&&a.knowledgeIndexPath?e.lastKnowledgeGeneration.knowledgeIndexPath:(o=Object.values(e.modelAssetProfiles).filter(l=>!!l.knowledgeIndexPath).sort((l,c)=>Date.parse(c.updatedAt)-Date.parse(l.updatedAt))[0])==null?void 0:o.knowledgeIndexPath)}clearConversionCache(){this.convertedAssetCache.clear(),new Qs.Notice("AI 3d conversion cache cleared.")}async checkConverterCommands(){if(hr()){new Qs.Notice(ee("main.converterDiagnosticsMobileUnavailable"),8e3);return}let e=await OR(this.getSettings()),t=e.filter(r=>r.available).map(r=>r.label),i=e.filter(r=>!r.available).map(r=>r.label);if(i.length===0){new Qs.Notice(`AI 3D converter diagnostics: all commands available (${t.join(", ")}).`,8e3);return}new Qs.Notice(`AI 3D converter diagnostics: available ${t.join(", ")||"none"}; missing ${i.join(", ")}.`,1e4)}async copyDiagnosticsReport(){let{buildDiagnosticsReport:e}=await Promise.resolve().then(()=>(bj(),Rj)),t=e({manifest:this.manifest,state:this.ps.store.getState()});try{await navigator.clipboard.writeText(t),new Qs.Notice(ee("main.diagnosticsCopied"),8e3)}catch(i){let r=this.getSettings().reportFolder.replace(/\\/g,"/").replace(/^\/+|\/+$/g,"").trim()||"Analysis/3D Reports";await this.ensureVaultFolder(r);let s=`AI Model Workbench Diagnostics ${new Date().toISOString().replace(/[:.]/g,"-")}.md`,a=await this.app.vault.create(`${r}/${s}`,t);await this.app.workspace.getLeaf(!0).openFile(a,{active:!0}),new Qs.Notice(ee("main.diagnosticsCopyFailed"),1e4)}}async ensureVaultFolder(e){let t="";for(let i of e.split("/").filter(Boolean))t=t?`${t}/${i}`:i,this.app.vault.getAbstractFileByPath(t)||await this.app.vault.createFolder(t).catch(()=>{})}}; diff --git a/manifest.json b/manifest.json index 9d260ce..d1468d0 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "id": "ai-model-workbench", "name": "AI Model Workbench", - "version": "0.4.0", + "version": "0.4.3", "minAppVersion": "1.5.0", "description": "Turn 3D models into linked knowledge assets.", "author": "flash", diff --git a/models/resource-fixtures/grouped-parts/grouped parts.gltf b/models/resource-fixtures/grouped-parts/grouped parts.gltf new file mode 100644 index 0000000..2058b6f --- /dev/null +++ b/models/resource-fixtures/grouped-parts/grouped parts.gltf @@ -0,0 +1,170 @@ +{ + "asset": { + "version": "2.0", + "generator": "ai-model-workbench grouped-parts fixture" + }, + "scene": 0, + "scenes": [ + { + "name": "Grouped Parts Scene", + "nodes": [ + 0 + ] + } + ], + "nodes": [ + { + "name": "Grouped Parts Fixture", + "children": [ + 1, + 4, + 7 + ] + }, + { + "name": "Left Assembly", + "children": [ + 2, + 3 + ] + }, + { + "name": "Left Panel A", + "mesh": 0, + "translation": [ + -1.1, + 0, + 0 + ] + }, + { + "name": "Left Panel B", + "mesh": 0, + "translation": [ + -1.1, + 0.65, + 0 + ] + }, + { + "name": "Right Assembly", + "children": [ + 5, + 6 + ] + }, + { + "name": "Right Panel A", + "mesh": 0, + "translation": [ + 1.1, + 0, + 0 + ] + }, + { + "name": "Right Panel B", + "mesh": 0, + "translation": [ + 1.1, + 0.65, + 0 + ] + }, + { + "name": "Loose Detail", + "mesh": 0, + "translation": [ + 0, + 0, + 0 + ] + } + ], + "meshes": [ + { + "name": "Panel Primitive", + "primitives": [ + { + "attributes": { + "POSITION": 0, + "NORMAL": 1 + }, + "indices": 2, + "material": 0 + } + ] + } + ], + "materials": [ + { + "name": "fixture blue", + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.2, + 0.45, + 0.95, + 1 + ], + "roughnessFactor": 0.7, + "metallicFactor": 0.05 + } + } + ], + "buffers": [ + { + "uri": "data:application/octet-stream;base64,zczMPs3MzL7NzMy+zczMPs3MzD7NzMy+zczMPs3MzD7NzMw+zczMPs3MzL7NzMw+zczMvs3MzL7NzMw+zczMvs3MzD7NzMw+zczMvs3MzD7NzMy+zczMvs3MzL7NzMy+zczMvs3MzD7NzMw+zczMPs3MzD7NzMw+zczMPs3MzD7NzMy+zczMvs3MzD7NzMy+zczMvs3MzL7NzMy+zczMPs3MzL7NzMy+zczMPs3MzL7NzMw+zczMvs3MzL7NzMw+zczMPs3MzL7NzMw+zczMPs3MzD7NzMw+zczMvs3MzD7NzMw+zczMvs3MzL7NzMw+zczMvs3MzL7NzMy+zczMvs3MzD7NzMy+zczMPs3MzD7NzMy+zczMPs3MzL7NzMy+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcA", + "byteLength": 648 + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteOffset": 0, + "byteLength": 288, + "target": 34962 + }, + { + "buffer": 0, + "byteOffset": 288, + "byteLength": 288, + "target": 34962 + }, + { + "buffer": 0, + "byteOffset": 576, + "byteLength": 72, + "target": 34963 + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5126, + "count": 24, + "type": "VEC3", + "min": [ + -0.4, + -0.4, + -0.4 + ], + "max": [ + 0.4, + 0.4, + 0.4 + ] + }, + { + "bufferView": 1, + "componentType": 5126, + "count": 24, + "type": "VEC3" + }, + { + "bufferView": 2, + "componentType": 5123, + "count": 36, + "type": "SCALAR" + } + ] +} diff --git a/package-lock.json b/package-lock.json index 164fbe7..e83a643 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "obsidian-ai-model-workbench", - "version": "0.4.0", + "version": "0.4.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "obsidian-ai-model-workbench", - "version": "0.4.0", + "version": "0.4.3", "dependencies": { "@babylonjs/core": "^9.6.0", "@babylonjs/gui": "^9.6.0", diff --git a/package.json b/package.json index b7b3daf..c3c9b2e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "obsidian-ai-model-workbench", - "version": "0.4.0", + "version": "0.4.3", "private": true, "description": "Obsidian plugin for turning 3D models into linked knowledge assets.", "scripts": { @@ -9,14 +9,15 @@ "typecheck": "tsc --noEmit --skipLibCheck", "verify:preview": "node scripts/verify-preview.mjs", "verify:preview:rollback": "node scripts/verify-preview.mjs --rollout babylon-safe", - "verify:preview:success": "node scripts/verify-preview-success.mjs", - "verify:obsidian": "node scripts/verify-obsidian.mjs", - "verify:release": "node scripts/verify-release-assets.mjs", - "install:vault": "node scripts/install-to-vault.mjs", - "verify:settings": "node scripts/verify-settings-migration.mjs", - "verify:remote-draft": "node scripts/verify-remote-draft.mjs", - "verify:knowledge-index": "node scripts/verify-knowledge-index.mjs" - }, + "verify:preview:success": "node scripts/verify-preview-success.mjs", + "verify:obsidian": "node scripts/verify-obsidian.mjs", + "verify:release": "node scripts/verify-release-assets.mjs", + "install:vault": "node scripts/install-to-vault.mjs", + "verify:settings": "node scripts/verify-settings-migration.mjs", + "verify:remote-draft": "node scripts/verify-remote-draft.mjs", + "verify:knowledge-index": "node scripts/verify-knowledge-index.mjs", + "verify:diagnostics": "node scripts/verify-diagnostics.mjs" + }, "devDependencies": { "@codemirror/language": "^6.12.3", "@codemirror/state": "^6.5.0", diff --git a/scripts/verify-diagnostics.mjs b/scripts/verify-diagnostics.mjs new file mode 100644 index 0000000..7ac929d --- /dev/null +++ b/scripts/verify-diagnostics.mjs @@ -0,0 +1,122 @@ +import esbuild from "esbuild"; +import { mkdir, rm, writeFile } from "node:fs/promises"; +import { join, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; + +const rootDir = resolve(fileURLToPath(new URL("..", import.meta.url))); +const outDir = join(rootDir, ".tmp", "diagnostics"); +const entryPath = join(outDir, "entry.ts"); +const bundlePath = join(outDir, "bundle.mjs"); +const obsidianShimPath = join(outDir, "obsidian-shim.ts"); + +await rm(outDir, { recursive: true, force: true }); +await mkdir(outDir, { recursive: true }); +await writeFile(obsidianShimPath, ` + export const apiVersion = "1.12.7"; + export const Platform = { isMobile: false }; +`, "utf8"); + +await writeFile(entryPath, ` + import { buildDiagnosticsReport } from "../../src/diagnostics/report"; + import { DEFAULT_SETTINGS } from "../../src/domain/constants"; + import type { PluginState } from "../../src/domain/models"; + + function assert(condition: unknown, message: string): asserts condition { + if (!condition) throw new Error(message); + } + + const state: PluginState = { + settings: { + ...DEFAULT_SETTINGS, + analysisMode: "hybrid", + serviceBaseUrl: "https://secret.example.invalid/draft?token=leak", + sendGeometrySummaryToRemote: true, + sendPreviewImagesToRemote: true, + freecadCommand: "/private/freecad", + obj2gltfCommand: "/private/obj2gltf", + fbx2gltfCommand: "/private/fbx2gltf", + assimpCommand: "/private/python", + freecadcmdCommand: "/private/freecadcmd", + }, + currentModelPath: "models/example.glb", + convertedAssetRecords: [], + modelAssetProfiles: { + "models/example.glb": { + tags: ["demo"], + notes: "", + annotations: [{ id: "pin-1", position: [0, 0, 0], label: "Pin", color: "#fff", createdAt: "2026-01-01T00:00:00.000Z" }], + reportNotePath: "Analysis/3D Reports/example Report.md", + analysisSidecarPath: "Analysis/3D Reports/example Analysis.json", + knowledgeIndexPath: "Analysis/3D Reports/example Index.md", + createdAt: "2026-01-01T00:00:00.000Z", + updatedAt: "2026-01-01T00:00:00.000Z", + }, + }, + agentDraft: "", + agentPlan: null, + modelPreview: { + meshCount: 2, + triangleCount: 100, + vertexCount: 80, + materialCount: 1, + boundingSize: { x: 1, y: 2, z: 3 }, + rootName: "example", + }, + selectedPart: null, + lastKnowledgeGeneration: { + modelPath: "models/example.glb", + reportNotePath: "Analysis/3D Reports/example Report.md", + analysisSidecarPath: "Analysis/3D Reports/example Analysis.json", + knowledgeIndexPath: "Analysis/3D Reports/example Index.md", + partNoteCount: 2, + previewImageCount: 1, + generatedAt: "2026-01-01T00:00:00.000Z", + status: "success", + warningCount: 0, + }, + }; + + const report = buildDiagnosticsReport({ + manifest: { + id: "ai-model-workbench", + name: "AI Model Workbench", + version: "0.4.1", + minAppVersion: "1.5.0", + description: "Turn 3D models into linked knowledge assets.", + author: "flash", + }, + state, + generatedAt: "2026-01-01T00:00:00.000Z", + }); + + assert(report.includes("Plugin version: 0.4.1"), "Plugin version missing"); + assert(report.includes("Obsidian API version: 1.12.7"), "Obsidian API version missing"); + assert(report.includes("Current route: three"), "Route summary missing"); + assert(report.includes("Knowledge index: set (Analysis/3D Reports/example Index.md)"), "Knowledge index status missing"); + assert(report.includes("Last part notes: 2"), "Last generation part count missing"); + assert(report.includes("service configured"), "Remote service configured status missing"); + assert(!report.includes("secret.example.invalid"), "Diagnostics leaked service host"); + assert(!report.includes("token=leak"), "Diagnostics leaked service token"); + assert(!report.includes("/private/"), "Diagnostics leaked command path"); + + console.log("Diagnostics verification passed"); +`, "utf8"); + +await esbuild.build({ + entryPoints: [entryPath], + bundle: true, + platform: "node", + format: "esm", + outfile: bundlePath, + logLevel: "silent", + plugins: [ + { + name: "obsidian-shim", + setup(build) { + build.onResolve({ filter: /^obsidian$/ }, () => ({ path: obsidianShimPath })); + }, + }, + ], +}); + +await import(`file://${bundlePath}`); diff --git a/scripts/verify-knowledge-index.mjs b/scripts/verify-knowledge-index.mjs index 3e40e35..a0b273b 100644 --- a/scripts/verify-knowledge-index.mjs +++ b/scripts/verify-knowledge-index.mjs @@ -19,7 +19,11 @@ await writeFile(obsidianShimPath, ` } } - export class TFile {} + export class TFile { + static [Symbol.hasInstance](value) { + return !!value && typeof value === "object" && value.kind === "file"; + } + } export class TFolder {} @@ -56,10 +60,13 @@ await writeFile(nodeShimPath, ` `, "utf8"); await writeFile(entryPath, ` - import type { AnalysisResult, ModelAssetProfile, ModelPreviewSummary } from "../../src/domain/models"; + import type { AnalysisResult, ModelAssetProfile, ModelEvidence, ModelPreviewSummary } from "../../src/domain/models"; + import { buildLocalAnalysisResult } from "../../src/view/workbench/analysis-result"; import { + buildKnowledgeNoteContent, buildKnowledgeIndexContent, buildKnowledgeIndexManagedSection, + collectRegisteredPartsFromProfiles, replaceManagedSection, } from "../../src/view/workbench/knowledge-note"; @@ -96,6 +103,161 @@ await writeFile(entryPath, ` updatedAt: "2026-01-01T00:00:00.000Z", }; + const files = new Map([ + ["Analysis/3D Reports/legacy Analysis.json", JSON.stringify({ + parts: [ + { + partId: "legacy-model:part:1", + assetId: "models/legacy grouped parts.gltf", + name: "Left Assembly", + source: "group", + category: "group", + meshRefs: ["Left Panel A", "Left Panel B"], + childCount: 2, + materialRefs: ["fixture blue"], + bbox: [0.8, 1.45, 0.8], + center: [-1, 0.3, 0], + triangleCount: 2400, + vertexCount: 1400, + materialName: "fixture blue", + confidence: 0.72, + observations: ["Previously registered group part."], + inferredFunctions: [], + knowledgeTags: [], + notePath: "Parts/3D Components/legacy/01 Left Assembly.md", + reviewed: false, + }, + ], + })], + ["Analysis/3D Reports/current Analysis.json", JSON.stringify({ + parts: [{ partId: "current:part:1", assetId: "models/grouped parts.gltf", name: "Should Skip", meshRefs: [] }], + })], + ]); + const app = { + vault: { + getAbstractFileByPath(path: string) { + return files.has(path) ? { kind: "file", path } : null; + }, + read(file: { path: string }) { + return Promise.resolve(files.get(file.path) ?? ""); + }, + }, + }; + const registeredPartsFromSidecars = await collectRegisteredPartsFromProfiles(app as never, { + "models/legacy grouped parts.gltf": { + ...profile, + analysisSidecarPath: "Analysis/3D Reports/legacy Analysis.json", + }, + "models/grouped parts.gltf": { + ...profile, + analysisSidecarPath: "Analysis/3D Reports/current Analysis.json", + }, + }, "models/grouped parts.gltf"); + assert(registeredPartsFromSidecars.length === 1, "Registered part collection should read other model sidecars only"); + assert(registeredPartsFromSidecars[0].name === "Left Assembly", "Registered part collection did not normalize sidecar part records"); + + const registeredPartsFromProfiles = await collectRegisteredPartsFromProfiles(app as never, { + "models/auto registered parts.gltf": { + ...profile, + registeredParts: [ + { + partId: "auto-model:part:1", + assetId: "models/auto registered parts.gltf", + name: "Right Assembly", + source: "group", + category: "group", + meshRefs: ["Right Panel A", "Right Panel B"], + childCount: 2, + materialRefs: ["fixture red"], + bbox: [0.8, 1.45, 0.8], + center: [1, 0.3, 0], + triangleCount: 2400, + vertexCount: 1400, + materialName: "fixture red", + confidence: 0.72, + observations: ["Auto-registered from renderer evidence."], + inferredFunctions: [], + knowledgeTags: [], + reviewed: false, + }, + ], + }, + "models/grouped parts.gltf": { + ...profile, + registeredParts: [{ partId: "current:part:1", assetId: "models/grouped parts.gltf", name: "Should Skip", meshRefs: [], materialRefs: [], confidence: 0.5, observations: [], inferredFunctions: [], knowledgeTags: [], reviewed: false }], + }, + }, "models/grouped parts.gltf"); + assert(registeredPartsFromProfiles.length === 1, "Registered part collection should read profile-registered parts without a sidecar"); + assert(registeredPartsFromProfiles[0].name === "Right Assembly", "Profile registered part was not normalized"); + + const groupedEvidence: ModelEvidence = { + summary: preview, + parts: [ + { + name: "Left Assembly", + source: "group", + meshNames: ["Left Panel A", "Left Panel B"], + childCount: 2, + triangleCount: 2400, + vertexCount: 1400, + materialName: "fixture blue", + boundingSize: { x: 0.8, y: 1.45, z: 0.8 }, + center: { x: -1.1, y: 0.325, z: 0 }, + }, + { + name: "Loose Detail", + source: "mesh", + meshNames: ["Loose Detail"], + childCount: 1, + triangleCount: 1200, + vertexCount: 700, + materialName: "fixture blue", + boundingSize: { x: 0.8, y: 0.8, z: 0.8 }, + center: { x: 0, y: 0, z: 0 }, + }, + ], + materialNames: ["fixture blue"], + resourceWarnings: [], + capturedAt: "2026-01-01T00:00:00.000Z", + }; + + const groupedAnalysis = buildLocalAnalysisResult({ + modelPath: "models/grouped parts.gltf", + profile, + preview, + evidence: groupedEvidence, + registeredParts: registeredPartsFromSidecars, + }); + const groupedPart = groupedAnalysis.parts.find((part) => part.name === "Left Assembly"); + assert(groupedPart?.source === "group", "Grouped evidence part was not marked as source=group"); + assert(groupedPart.category === "group", "Grouped evidence part did not receive group category"); + assert(groupedPart.childCount === 2, "Grouped evidence part child count was not preserved"); + assert(groupedPart.meshRefs.includes("Left Panel A") && groupedPart.meshRefs.includes("Left Panel B"), "Grouped evidence mesh refs were not preserved"); + assert(groupedPart.confidence === 0.72, "Grouped evidence part confidence was not raised"); + assert(groupedPart.registeredMatches?.[0]?.sourceAssetId === "models/legacy grouped parts.gltf", "Grouped part did not match a registered part from another model"); + assert(groupedPart.registeredMatches[0].sourceModelPath === "models/legacy grouped parts.gltf", "Registered part match did not preserve source model path"); + assert(groupedPart.registeredMatches[0].sourceNotePath === "Parts/3D Components/legacy/01 Left Assembly.md", "Registered part note path was not preserved"); + assert(groupedPart.registeredMatches[0].reasons.includes("similar part name"), "Registered part match reasons did not include name similarity"); + const groupedCandidate = groupedAnalysis.draftingInput?.partCandidates.find((part) => part.name === "Left Assembly"); + assert(groupedCandidate?.source === "group", "Grouped drafting input source was not preserved"); + assert(groupedCandidate.childCount === 2, "Grouped drafting input child count was not preserved"); + assert(groupedCandidate.meshRefs?.includes("Left Panel B"), "Grouped drafting input mesh refs were not preserved"); + assert(groupedCandidate.registeredMatches?.[0]?.sourcePartName === "Left Assembly", "Grouped drafting input did not preserve registered matches"); + const groupedReport = buildKnowledgeNoteContent({ + baseName: "grouped parts", + notePath: "Analysis/3D Reports/grouped parts Report.md", + sourcePath: "models/grouped parts.gltf", + analysisSidecarPath: "Analysis/3D Reports/grouped parts Analysis.json", + analysis: groupedAnalysis, + preview, + profile, + }); + assert(groupedReport.includes("Left Assembly"), "Grouped report did not include group part name"); + assert(groupedReport.includes("group (2)"), "Grouped report did not expose group source and child count"); + assert(groupedReport.includes("Registered from model group with 2 child meshes."), "Grouped report did not include renderer group observation"); + assert(groupedReport.includes("## Registered Part Matches"), "Grouped report did not include registered match section"); + assert(groupedReport.includes("Parts/3D Components/legacy/01 Left Assembly.md"), "Grouped report did not link to registered part note"); + const analysis: AnalysisResult = { asset: { assetId: "models/rubiks-cube-3x3.glb", diff --git a/scripts/verify-obsidian.mjs b/scripts/verify-obsidian.mjs index c817692..943a560 100644 --- a/scripts/verify-obsidian.mjs +++ b/scripts/verify-obsidian.mjs @@ -621,6 +621,118 @@ async function verifyDirectWorkbench(page) { return window.app?.workspace?.getActiveFile?.()?.path === expectedPath; }, analysis.knowledgeIndexPath, { timeout: 10_000 }); + const diagnosticsReport = await page.evaluate(async ({ modelPath, secretUrl }) => { + const plugin = window.app?.plugins?.plugins?.["ai-model-workbench"]; + const store = plugin?.ps?.store; + const state = store?.getState?.(); + if (!store || !state) { + throw new Error("AI Model Workbench store was unavailable for diagnostics"); + } + if (!window.app?.commands?.commands?.["ai-model-workbench:copy-diagnostics-report"]) { + throw new Error("Diagnostics command is not registered"); + } + + const originalSettings = state.settings; + store.setState({ + settings: { + ...originalSettings, + analysisMode: "hybrid", + serviceBaseUrl: secretUrl, + freecadCommand: "/private/freecad", + obj2gltfCommand: "/private/obj2gltf", + fbx2gltfCommand: "/private/fbx2gltf", + assimpCommand: "/private/python", + freecadcmdCommand: "/private/freecadcmd", + }, + currentModelPath: modelPath, + }); + + const clipboard = navigator.clipboard; + const writes = []; + const originalDescriptor = Object.getOwnPropertyDescriptor(clipboard, "writeText"); + const originalWriteText = clipboard.writeText.bind(clipboard); + Object.defineProperty(clipboard, "writeText", { + configurable: true, + value: async (text) => { + writes.push(String(text)); + }, + }); + + try { + window.app.commands.executeCommandById("ai-model-workbench:copy-diagnostics-report"); + const deadline = Date.now() + 5000; + while (Date.now() < deadline && writes.length === 0) { + await new Promise((resolve) => window.setTimeout(resolve, 50)); + } + return writes.at(-1) ?? ""; + } finally { + if (originalDescriptor) { + Object.defineProperty(clipboard, "writeText", originalDescriptor); + } else { + Object.defineProperty(clipboard, "writeText", { + configurable: true, + value: originalWriteText, + }); + } + store.setState({ settings: originalSettings }); + } + }, { + modelPath: workbenchModelVaultPath, + secretUrl: "https://diagnostics.example.invalid/draft?token=placeholder", + }); + assert(diagnosticsReport.includes("# AI Model Workbench Diagnostics"), "Diagnostics report title missing"); + assert(diagnosticsReport.includes("Knowledge index: set"), "Diagnostics report is missing knowledge index status"); + assert(diagnosticsReport.includes(analysis.knowledgeIndexPath), "Diagnostics report is missing generated index path"); + assert(diagnosticsReport.includes("Last generation: success"), "Diagnostics report is missing last generation state"); + assert(diagnosticsReport.includes("service configured"), "Diagnostics report is missing remote service configured status"); + assert(!diagnosticsReport.includes("diagnostics.example.invalid"), "Diagnostics report leaked draft service host"); + assert(!diagnosticsReport.includes("token=placeholder"), "Diagnostics report leaked draft service token"); + assert(!diagnosticsReport.includes("/private/"), "Diagnostics report leaked converter command path"); + + const fallbackIndexPath = await page.evaluate(async ({ modelPath, expectedPath }) => { + const plugin = window.app?.plugins?.plugins?.["ai-model-workbench"]; + const store = plugin?.ps?.store; + if (!store || !window.app?.commands?.commands?.["ai-model-workbench:open-knowledge-index"]) { + throw new Error("AI Model Workbench open index command was unavailable"); + } + const state = store.getState(); + store.setState({ + currentModelPath: null, + lastKnowledgeGeneration: { + modelPath, + reportNotePath: "Analysis/3D Reports/rubiks-cube-3x3 Report.md", + analysisSidecarPath: "Analysis/3D Reports/rubiks-cube-3x3 Analysis.json", + knowledgeIndexPath: expectedPath, + partNoteCount: 1, + previewImageCount: 1, + generatedAt: new Date().toISOString(), + status: "success", + warningCount: 0, + }, + }); + try { + window.app.commands.executeCommandById("ai-model-workbench:open-knowledge-index"); + const deadline = Date.now() + 5000; + while (Date.now() < deadline) { + const activePath = window.app?.workspace?.getActiveFile?.()?.path; + if (activePath === expectedPath) { + return activePath; + } + await new Promise((resolve) => window.setTimeout(resolve, 50)); + } + return window.app?.workspace?.getActiveFile?.()?.path ?? null; + } finally { + store.setState({ + currentModelPath: modelPath, + lastKnowledgeGeneration: state.lastKnowledgeGeneration, + }); + } + }, { + modelPath: workbenchModelVaultPath, + expectedPath: analysis.knowledgeIndexPath, + }); + assert(fallbackIndexPath === analysis.knowledgeIndexPath, `Open knowledge index fallback failed: ${fallbackIndexPath}`); + const directViewResult = await page.evaluate(({ beforeDataUrl, afterDataUrl, analysisPartCount }) => { const host = document.querySelector(".ai3d-direct-view .ai3d-preview-host"); const panel = document.querySelector(".ai3d-direct-workbench-panel"); @@ -640,6 +752,7 @@ async function verifyDirectWorkbench(page) { explodeValue: explodeInput instanceof HTMLInputElement ? explodeInput.value : null, hasKnowledgeAction: actions.includes("generate-note"), hasOpenIndexAction: actions.includes("open-index"), + hasDiagnosticsCommand: !!window.app?.commands?.commands?.["ai-model-workbench:copy-diagnostics-report"], canvasChangedAfterControls: beforeDataUrl !== afterDataUrl, activeFile: window.app?.workspace?.getActiveFile?.()?.path ?? null, analysisPartCount, @@ -650,6 +763,7 @@ async function verifyDirectWorkbench(page) { assert(directViewResult.explodeValue === "0" || directViewResult.explodeValue === "0.65", `Unexpected explode value: ${directViewResult.explodeValue}`); assert(directViewResult.hasKnowledgeAction, "Direct workbench panel is missing knowledge action"); assert(directViewResult.hasOpenIndexAction, "Direct workbench panel is missing open index action"); + assert(directViewResult.hasDiagnosticsCommand, "Diagnostics command is missing"); assert(directViewResult.activeFile === analysis.knowledgeIndexPath, `Open index action did not activate the index: ${directViewResult.activeFile}`); assert(directViewResult.canvasChangedAfterControls, "Direct workbench controls did not change the rendered canvas"); return directViewResult; diff --git a/scripts/verify-preview-success.mjs b/scripts/verify-preview-success.mjs index 57efb56..bf29a32 100644 --- a/scripts/verify-preview-success.mjs +++ b/scripts/verify-preview-success.mjs @@ -79,6 +79,14 @@ const cases = [ label: "External GLTF resources with spaces and Chinese paths", args: ["--model", join(rootDir, "models", "resource-fixtures", "gltf-external", "外部 资源.gltf")], }, + { + label: "GLTF named groups register as part candidates", + args: [ + "--model", + join(rootDir, "models", "resource-fixtures", "grouped-parts", "grouped parts.gltf"), + "--expect-group-parts", + ], + }, { label: "OBJ/MTL texture resolves with case-insensitive texture path", args: [ diff --git a/scripts/verify-preview.mjs b/scripts/verify-preview.mjs index 8cbba92..b8ff86d 100644 --- a/scripts/verify-preview.mjs +++ b/scripts/verify-preview.mjs @@ -68,6 +68,10 @@ function parseExpectNoWarnings() { return process.argv.includes("--expect-no-warnings"); } +function parseExpectGroupParts() { + return process.argv.includes("--expect-group-parts"); +} + const verifyMode = parseMode(); const verifyRollout = parseRollout(); const verifyAllowWorkbenchThree = parseAllowWorkbenchThree(); @@ -75,6 +79,7 @@ const verifyExpectedBackend = parseExpectBackend(); const verifyRouteOnly = parseRouteOnly(); const verifyExpectedWarning = parseExpectWarning(); const verifyExpectNoWarnings = parseExpectNoWarnings(); +const verifyExpectGroupParts = parseExpectGroupParts(); const mimeTypes = new Map([ [".html", "text/html; charset=utf-8"], @@ -553,6 +558,27 @@ async function verifyThreePerformanceBudgetSnapshot(page, route, performanceSnap ); } +function verifyGroupedPartsEvidence(state) { + if (!verifyExpectGroupParts) return; + const parts = Array.isArray(state?.evidence?.parts) ? state.evidence.parts : []; + const groupParts = parts.filter((part) => part?.source === "group"); + const meshParts = parts.filter((part) => part?.source === "mesh"); + const groupNames = new Set(groupParts.map((part) => part.name)); + + assert(groupParts.length >= 2, `Expected at least 2 grouped parts, got ${JSON.stringify(parts)}`); + assert(groupNames.has("Left Assembly"), `Missing Left Assembly group part: ${JSON.stringify(parts)}`); + assert(groupNames.has("Right Assembly"), `Missing Right Assembly group part: ${JSON.stringify(parts)}`); + assert(!groupNames.has("Grouped Parts Fixture"), `Whole-model wrapper was registered as a group part: ${JSON.stringify(parts)}`); + assert( + groupParts.every((part) => part.childCount >= 2 && Array.isArray(part.meshNames) && part.meshNames.length >= 2), + `Grouped parts did not keep child mesh evidence: ${JSON.stringify(groupParts)}`, + ); + assert( + meshParts.some((part) => part.name === "Loose Detail"), + `Ungrouped mesh part was not preserved alongside grouped parts: ${JSON.stringify(parts)}`, + ); +} + async function verifyWorkbenchMode(page, state, stats, performanceSnapshot, selectedPartMarkdown) { assert(state?.mode === "workbench", `Expected workbench mode, received ${state?.mode ?? "unknown"}`); assert(state?.route?.requireWorkbenchFeatures === true, "Workbench route did not require workbench features"); @@ -606,6 +632,24 @@ async function verifyWorkbenchMode(page, state, stats, performanceSnapshot, sele assert(result.evidence?.parts?.length > 0, `Workbench evidence is missing parts: ${JSON.stringify(result.evidence)}`); assert(result.evidence?.summary?.meshCount === state.summary.meshCount, "Workbench evidence summary did not match preview summary"); assert(result.modelInfo.includes("Model Info"), "Workbench model info export failed"); + const rows = Array.isArray(state.registeredMatchRows) ? state.registeredMatchRows : []; + const noteRow = rows.find((row) => row.title === "Left Assembly"); + const modelRow = rows.find((row) => row.title === "Right Assembly"); + assert(noteRow?.button === "Note", `Registered match part-note row did not render Note action: ${JSON.stringify(rows)}`); + assert( + noteRow.targetPath === "Parts/3D Components/legacy/01 Left Assembly.md", + `Registered match part-note target path was wrong: ${JSON.stringify(noteRow)}`, + ); + assert(noteRow.target === "Opens matched part note", `Registered match part-note target copy was wrong: ${JSON.stringify(noteRow)}`); + assert(noteRow.model === "From legacy grouped parts.gltf", `Registered match source model label was wrong: ${JSON.stringify(noteRow)}`); + assert(noteRow.disabled === false, `Registered match part-note action was disabled: ${JSON.stringify(noteRow)}`); + assert(modelRow?.button === "Model", `Registered match source-model row did not render Model action: ${JSON.stringify(rows)}`); + assert( + modelRow.targetPath === "models/auto registered parts.gltf", + `Registered match source-model target path was wrong: ${JSON.stringify(modelRow)}`, + ); + assert(modelRow.target === "Opens source model", `Registered match source-model target copy was wrong: ${JSON.stringify(modelRow)}`); + assert(modelRow.disabled === false, `Registered match source-model action was disabled: ${JSON.stringify(modelRow)}`); console.log("Workbench preview verification passed"); console.log(JSON.stringify({ @@ -804,6 +848,7 @@ async function verify() { if (verifyExpectNoWarnings) { assert(warnings.length === 0, `Expected no resource warnings, got ${JSON.stringify(warnings)}`); } + verifyGroupedPartsEvidence(state); await page.locator("#preview-canvas").scrollIntoViewIfNeeded(); await page.waitForTimeout(500); diff --git a/scripts/verify-settings-migration.mjs b/scripts/verify-settings-migration.mjs index e466f68..644746a 100644 --- a/scripts/verify-settings-migration.mjs +++ b/scripts/verify-settings-migration.mjs @@ -35,9 +35,23 @@ await writeFile(entryPath, ` modelAssetProfiles: { "models/legacy.glb": { tags: ["legacy"], + reportNotePath: "Analysis/3D Reports/legacy Report.md", + analysisSidecarPath: "Analysis/3D Reports/legacy Analysis.json", + knowledgeIndexPath: "Analysis/3D Reports/legacy Index.md", annotations: [{ id: "pin-1", position: [0, 0, 0], label: "Legacy", color: "#fff", createdAt: "2026-01-01T00:00:00.000Z" }], }, }, + lastKnowledgeGeneration: { + modelPath: "models/legacy.glb", + reportNotePath: "Analysis/3D Reports/legacy Report.md", + analysisSidecarPath: "Analysis/3D Reports/legacy Analysis.json", + knowledgeIndexPath: "Analysis/3D Reports/legacy Index.md", + partNoteCount: 2, + previewImageCount: 1, + generatedAt: "2026-01-01T00:00:00.000Z", + status: "success", + warningCount: 0, + }, }; let saved = oldData; @@ -64,9 +78,12 @@ await writeFile(entryPath, ` assert(state.settings.enabledConverterIds.includes("obj2gltf"), "Legacy converter setting was not preserved"); assert(state.modelAssetProfiles["models/legacy.glb"].notes === "", "Legacy profile notes were not normalized"); assert(state.modelAssetProfiles["models/legacy.glb"].annotations.length === 1, "Legacy annotations were not preserved"); + assert(state.modelAssetProfiles["models/legacy.glb"].knowledgeIndexPath === "Analysis/3D Reports/legacy Index.md", "Knowledge index path was not preserved"); + assert(state.lastKnowledgeGeneration?.knowledgeIndexPath === "Analysis/3D Reports/legacy Index.md", "Last generation index path was not preserved"); await ps.save(); assert(saved.settings.experimentalThreeWorkbench === DEFAULT_SETTINGS.experimentalThreeWorkbench, "Saved data did not include defaulted setting"); + assert(saved.lastKnowledgeGeneration?.partNoteCount === 2, "Saved data did not preserve last generation summary"); `, "utf8"); await esbuild.build({ diff --git a/scripts/visual-preview-entry.ts b/scripts/visual-preview-entry.ts index b87ae33..25cc4cb 100644 --- a/scripts/visual-preview-entry.ts +++ b/scripts/visual-preview-entry.ts @@ -1,9 +1,11 @@ import type { AnnotationPin } from "../src/domain/models"; +import type { ModelPreview } from "../src/render/preview/types"; import { AnnotationManager } from "../src/render/preview/annotations"; import { createModelPreview } from "../src/render/preview/factory"; import { resolvePreviewRoute } from "../src/render/preview/routing"; -import type { AnnotationPreview, ModelPreview } from "../src/render/preview/types"; +import type { AnnotationPreview } from "../src/render/preview/types"; import { createHelperButtons } from "../src/view/inline/helper-buttons"; +import { renderRegisteredPartMatchRow } from "../src/view/direct-workbench-registered-match"; interface DomCreateOptions { cls?: string; @@ -30,8 +32,18 @@ declare global { rendererRollout?: "babylon-safe" | "three-readonly-glb" | "three-direct-glb"; summary?: unknown; route?: unknown; + evidence?: unknown; pinCount?: number; pinLabels?: string[]; + registeredMatchRows?: Array<{ + title: string; + source: string; + model: string; + target: string; + button: string; + targetPath: string; + disabled: boolean; + }>; error?: string; }; } @@ -155,6 +167,52 @@ function createPreviewShell(): { host: HTMLDivElement; canvas: HTMLCanvasElement return { host, canvas }; } +function renderRegisteredPartMatchHarness(): Array<{ + title: string; + source: string; + model: string; + target: string; + button: string; + targetPath: string; + disabled: boolean; +}> { + const section = document.createElement("section"); + section.id = "registered-match-harness"; + section.className = "ai3d-direct-workbench-match-list"; + document.body.appendChild(section); + renderRegisteredPartMatchRow(section, "Left Assembly", { + sourceAssetId: "models/legacy grouped parts.gltf", + sourcePartId: "legacy-model:part:1", + sourcePartName: "Legacy Left Assembly", + sourceNotePath: "Parts/3D Components/legacy/01 Left Assembly.md", + sourceModelPath: "models/legacy grouped parts.gltf", + matchScore: 0.82, + confidence: 0.82, + reasons: ["similar part name", "similar bounding size"], + }); + renderRegisteredPartMatchRow(section, "Right Assembly", { + sourceAssetId: "models/auto registered parts.gltf", + sourcePartId: "auto-model:part:1", + sourcePartName: "Auto Right Assembly", + sourceModelPath: "models/auto registered parts.gltf", + matchScore: 0.74, + confidence: 0.74, + reasons: ["similar mesh names"], + }); + return Array.from(section.querySelectorAll(".ai3d-direct-workbench-match")).map((row) => { + const button = row.querySelector("[data-ai3d-action='open-registered-part']"); + return { + title: row.querySelector(".ai3d-direct-workbench-match-title")?.textContent ?? "", + source: row.querySelector(".ai3d-direct-workbench-match-source")?.textContent ?? "", + model: row.querySelector(".ai3d-direct-workbench-match-model")?.textContent ?? "", + target: row.querySelector(".ai3d-direct-workbench-match-target")?.textContent ?? "", + button: button?.textContent ?? "", + targetPath: button instanceof HTMLElement ? button.dataset.ai3dTargetPath ?? "" : "", + disabled: button instanceof HTMLButtonElement ? button.disabled : true, + }; + }); +} + async function loadSampleModel(): Promise { const modelFile = getModelFilename(); const response = await fetch(toModelUrl(`models/${modelFile}`)); @@ -348,7 +406,7 @@ async function runBasicPreview( const summary = await preview.loadModel(await loadSampleModel(), ext, readHarnessModelResource, getModelPathForPreview()); attachHelperToolbar(host, preview); window.__ai3dPreview = preview; - setVerifyState({ status: "ready", mode: "basic", rendererRollout, summary, route }); + setVerifyState({ status: "ready", mode: "basic", rendererRollout, summary, route, evidence: preview.getModelEvidence?.() ?? null }); } async function runDirectEditPreview( @@ -393,6 +451,7 @@ async function runDirectEditPreview( rendererRollout, summary, route, + evidence: preview.getModelEvidence?.() ?? null, pinCount: 0, pinLabels: [], }); @@ -454,6 +513,7 @@ async function runReadonlyPinPreview( rendererRollout, summary, route, + evidence: preview.getModelEvidence?.() ?? null, pinCount: initialPins.length, pinLabels: initialPins.map((pin) => pin.label), }); @@ -513,8 +573,10 @@ async function runWorkbenchPreview( rendererRollout, summary, route, + evidence: preview.getModelEvidence?.() ?? null, pinCount: initialPins.length, pinLabels: initialPins.map((pin) => pin.label), + registeredMatchRows: renderRegisteredPartMatchHarness(), }); } diff --git a/src/diagnostics/report.ts b/src/diagnostics/report.ts new file mode 100644 index 0000000..7a7ee42 --- /dev/null +++ b/src/diagnostics/report.ts @@ -0,0 +1,118 @@ +import { apiVersion } from "obsidian"; +import type { PluginManifest } from "obsidian"; +import type { PluginState } from "../domain/models"; +import { listSupportedModelExtensions } from "../io/formats/registry"; +import { resolvePreviewRoute } from "../render/preview/routing"; +import { isMobile } from "../utils/device"; + +export interface BuildDiagnosticsReportOptions { + manifest: PluginManifest; + state: PluginState; + generatedAt?: string; +} + +function formatValue(value: unknown): string { + if (typeof value === "boolean") return value ? "on" : "off"; + if (typeof value === "number") return Number.isFinite(value) ? String(value) : "unknown"; + if (typeof value === "string") return value.length > 0 ? value : "empty"; + return "unknown"; +} + +function formatPathStatus(path: string | undefined): string { + return path ? `set (${path})` : "not set"; +} + +function formatRemoteMode(state: PluginState): string { + const settings = state.settings; + if (settings.analysisMode === "local") { + return "local only"; + } + return [ + settings.analysisMode, + settings.serviceBaseUrl.trim() ? "service configured" : "service missing", + `geometry ${formatValue(settings.sendGeometrySummaryToRemote)}`, + `preview refs ${formatValue(settings.sendPreviewImagesToRemote)}`, + `raw model ${settings.sendRawModelToRemote ? "blocked if requested" : "off"}`, + ].join(", "); +} + +function getCurrentProfile(state: PluginState) { + const path = state.currentModelPath; + return path ? state.modelAssetProfiles[path] : undefined; +} + +export function buildDiagnosticsReport(options: BuildDiagnosticsReportOptions): string { + const { manifest, state } = options; + const settings = state.settings; + const profile = getCurrentProfile(state); + const route = state.currentModelPath + ? resolvePreviewRoute({ + ext: state.currentModelPath.split(".").pop() ?? "", + annotationMode: profile?.annotations.length ? "readonly" : "none", + allowEditModeOnThree: true, + allowWorkbenchFeaturesOnThree: settings.experimentalThreeWorkbench, + rendererRollout: settings.previewRendererRollout, + useThreeRenderer: settings.useThreeRenderer, + }) + : null; + const last = state.lastKnowledgeGeneration; + + return [ + "# AI Model Workbench Diagnostics", + "", + `Generated: ${options.generatedAt ?? new Date().toISOString()}`, + "", + "## Runtime", + "", + `- Plugin version: ${manifest.version}`, + `- Minimum Obsidian version: ${manifest.minAppVersion}`, + `- Obsidian API version: ${apiVersion}`, + `- Platform: ${isMobile() ? "mobile" : "desktop"}`, + `- Locale: ${settings.locale}`, + "", + "## Renderer", + "", + `- Use Three renderer: ${formatValue(settings.useThreeRenderer)}`, + `- Preview rollout: ${settings.previewRendererRollout}`, + `- Experimental Three workbench: ${formatValue(settings.experimentalThreeWorkbench)}`, + `- Current route: ${route ? `${route.backend} (${route.reason})` : "no current model"}`, + `- Render quality: ${settings.renderQuality}`, + `- Render scale: ${settings.renderScale}`, + "", + "## Current Model", + "", + `- Path: ${state.currentModelPath ?? "none"}`, + `- Preview summary: ${state.modelPreview ? `${state.modelPreview.meshCount} mesh(es), ${state.modelPreview.triangleCount.toLocaleString()} triangle(s), ${state.modelPreview.materialCount} material(s)` : "not captured"}`, + `- Annotation count: ${profile?.annotations.length ?? 0}`, + `- Registered part candidates: ${profile?.registeredParts?.length ?? 0}`, + `- Report note: ${formatPathStatus(profile?.reportNotePath)}`, + `- Analysis sidecar: ${formatPathStatus(profile?.analysisSidecarPath)}`, + `- Knowledge index: ${formatPathStatus(profile?.knowledgeIndexPath)}`, + "", + "## Knowledge Generation", + "", + `- Mode: ${formatRemoteMode(state)}`, + `- Report folder: ${settings.reportFolder}`, + `- Part notes folder: ${settings.partFolder}`, + `- Snapshot folder: ${settings.previewFolder}`, + `- Last generation: ${last ? `${last.status} at ${last.generatedAt}` : "none"}`, + `- Last generated model: ${last?.modelPath ?? "none"}`, + `- Last report: ${formatPathStatus(last?.reportNotePath)}`, + `- Last index: ${formatPathStatus(last?.knowledgeIndexPath)}`, + `- Last part notes: ${last?.partNoteCount ?? 0}`, + `- Last preview images: ${last?.previewImageCount ?? 0}`, + `- Last warning count: ${last?.warningCount ?? 0}`, + "", + "## Conversion", + "", + `- Enabled converters: ${settings.enabledConverterIds.length ? settings.enabledConverterIds.join(", ") : "none"}`, + `- Cached conversions: ${state.convertedAssetRecords.length}`, + `- Supported direct/model extensions: ${listSupportedModelExtensions().join(", ")}`, + "", + "## Notes", + "", + "- Draft service URL and command paths are intentionally omitted from this report.", + "- Attach this report with the model format, console error, and reproduction steps when filing a bug.", + "", + ].join("\n"); +} diff --git a/src/domain/models.ts b/src/domain/models.ts index f655a4b..8aa1c8f 100644 --- a/src/domain/models.ts +++ b/src/domain/models.ts @@ -76,6 +76,7 @@ export interface PersistedPluginState { modelAssetProfiles: Record; agentDraft: string; agentPlan: AgentTaskPlan | null; + lastKnowledgeGeneration?: KnowledgeGenerationRecord | null; } // ── Store State (extends persisted with transient fields) ──────── @@ -89,6 +90,19 @@ export interface PluginState { agentPlan: AgentTaskPlan | null; modelPreview: ModelPreviewSummary | null; selectedPart: ModelPartSummary | null; + lastKnowledgeGeneration: KnowledgeGenerationRecord | null; +} + +export interface KnowledgeGenerationRecord { + modelPath: string; + reportNotePath?: string; + analysisSidecarPath?: string; + knowledgeIndexPath?: string; + partNoteCount: number; + previewImageCount: number; + generatedAt: string; + status: "success" | "failed"; + warningCount: number; } // ── Per-Model Asset Profile ────────────────────────────────────── @@ -109,6 +123,7 @@ export interface ModelAssetProfile { tags: string[]; notes: string; annotations: AnnotationPin[]; + registeredParts?: PartRecord[]; analysisVersion?: string; reportNotePath?: string; analysisSidecarPath?: string; @@ -140,6 +155,9 @@ export interface ModelPartSummary { materialName: string | null; boundingSize: { x: number; y: number; z: number }; center: { x: number; y: number; z: number }; + source?: "mesh" | "group"; + meshNames?: string[]; + childCount?: number; } export interface ModelEvidence { @@ -177,8 +195,10 @@ export interface PartRecord { assetId: string; parentPartId?: string; name: string; + source?: "mesh" | "group"; category?: string; meshRefs: string[]; + childCount?: number; materialRefs: string[]; bbox?: [number, number, number]; center?: [number, number, number]; @@ -190,9 +210,22 @@ export interface PartRecord { inferredFunctions: string[]; knowledgeTags: string[]; notePath?: string; + registeredMatches?: RegisteredPartMatch[]; reviewed: boolean; } +export interface RegisteredPartMatch { + sourceAssetId: string; + sourcePartId: string; + sourcePartName: string; + sourceNotePath?: string; + sourceCategory?: string; + sourceModelPath?: string; + matchScore: number; + confidence: number; + reasons: string[]; +} + // ── Knowledge Node ─────────────────────────────────────────────── export type KnowledgeDomain = @@ -247,9 +280,13 @@ export interface AnalysisDraftingInput { partId: string; name: string; notePath?: string; + source?: "mesh" | "group"; category?: string; + meshRefs?: string[]; + childCount?: number; triangleCount?: number; materialName?: string | null; + registeredMatches?: RegisteredPartMatch[]; observations: string[]; }>; annotationLinks: AnnotationPartLink[]; diff --git a/src/i18n/en.ts b/src/i18n/en.ts index 44b8852..b8d366d 100644 --- a/src/i18n/en.ts +++ b/src/i18n/en.ts @@ -270,9 +270,22 @@ export const en = { "directWorkbench.backendLabel": "Backend", "directWorkbench.routeLabel": "Route", "directWorkbench.performanceLabel": "Performance", + "directWorkbench.partCandidatesLabel": "Part candidates", "directWorkbench.explodeAxisLabel": "Explode axis", "directWorkbench.explodeResetLabel": "Reset", "directWorkbench.knowledgeTitle": "Knowledge", + "directWorkbench.registeredTitle": "Registered part matches", + "directWorkbench.registeredLoading": "Checking...", + "directWorkbench.registeredCount": "{count} match(es)", + "directWorkbench.registeredEmpty": "No cross-model part match yet", + "directWorkbench.registeredUnavailable": "Part evidence unavailable", + "directWorkbench.registeredOpen": "Open", + "directWorkbench.registeredOpenNote": "Note", + "directWorkbench.registeredOpenModel": "Model", + "directWorkbench.registeredSourceModel": "From {model}", + "directWorkbench.registeredTargetPartNote": "Opens matched part note", + "directWorkbench.registeredTargetSourceModel": "Opens source model", + "directWorkbench.registeredTargetUnavailable": "No linked target", "workbench.fileNotFound": "File not found: {path}", "annotation.selectColor": "Select color {color}", "annotation.sectionEmpty": "Section is empty.", @@ -281,10 +294,13 @@ export const en = { "main.commandGenerateNote": "Generate knowledge note", "main.commandOpenKnowledgeIndex": "Open knowledge index", "main.commandClearConversionCache": "Clear conversion cache", - "main.commandCheckConverters": "Check converters", - "main.converterDiagnosticsMobileUnavailable": "Converter diagnostics are only available on desktop. On iOS, iPadOS, and Android, direct formats can still load.", - - // Inline code block and loading + "main.commandCheckConverters": "Check converters", + "main.commandCopyDiagnostics": "Copy diagnostics report", + "main.converterDiagnosticsMobileUnavailable": "Converter diagnostics are only available on desktop. On iOS, iPadOS, and Android, direct formats can still load.", + "main.diagnosticsCopied": "AI Model Workbench diagnostics copied to clipboard.", + "main.diagnosticsCopyFailed": "Couldn't copy diagnostics. A sanitized diagnostics note was created instead.", + + // Inline code block and loading "codeBlock.noModelPathOrConfig": "No model path or config specified.", "codeBlock.jsonParseError": "JSON parse error: {error}", "codeBlock.jsonParseLine": " (line {line})", diff --git a/src/i18n/zh-CN.ts b/src/i18n/zh-CN.ts index f038252..9ac30fe 100644 --- a/src/i18n/zh-CN.ts +++ b/src/i18n/zh-CN.ts @@ -272,9 +272,22 @@ export const zhCN: Record = { "directWorkbench.backendLabel": "后端", "directWorkbench.routeLabel": "路由", "directWorkbench.performanceLabel": "性能", + "directWorkbench.partCandidatesLabel": "候选零件", "directWorkbench.explodeAxisLabel": "爆炸轴向", "directWorkbench.explodeResetLabel": "重置", "directWorkbench.knowledgeTitle": "知识", + "directWorkbench.registeredTitle": "已注册零件匹配", + "directWorkbench.registeredLoading": "检查中...", + "directWorkbench.registeredCount": "{count} 个匹配", + "directWorkbench.registeredEmpty": "暂无跨模型零件匹配", + "directWorkbench.registeredUnavailable": "暂无零件证据", + "directWorkbench.registeredOpen": "打开", + "directWorkbench.registeredOpenNote": "笔记", + "directWorkbench.registeredOpenModel": "模型", + "directWorkbench.registeredSourceModel": "来自 {model}", + "directWorkbench.registeredTargetPartNote": "打开匹配零件笔记", + "directWorkbench.registeredTargetSourceModel": "打开来源模型", + "directWorkbench.registeredTargetUnavailable": "暂无可打开目标", "workbench.fileNotFound": "未找到文件:{path}", "annotation.selectColor": "选择颜色 {color}", "annotation.sectionEmpty": "该段内容为空。", @@ -283,10 +296,13 @@ export const zhCN: Record = { "main.commandGenerateNote": "生成知识笔记", "main.commandOpenKnowledgeIndex": "打开知识索引", "main.commandClearConversionCache": "清除转换缓存", - "main.commandCheckConverters": "检查转换器", - "main.converterDiagnosticsMobileUnavailable": "转换器诊断仅支持桌面端。在 iOS、iPadOS 和 Android 上,直读格式仍可加载。", - - // 内联代码块与加载 + "main.commandCheckConverters": "检查转换器", + "main.commandCopyDiagnostics": "复制诊断报告", + "main.converterDiagnosticsMobileUnavailable": "转换器诊断仅支持桌面端。在 iOS、iPadOS 和 Android 上,直读格式仍可加载。", + "main.diagnosticsCopied": "AI Model Workbench 诊断报告已复制到剪贴板。", + "main.diagnosticsCopyFailed": "无法复制诊断报告,已改为创建一份脱敏诊断笔记。", + + // 内联代码块与加载 "codeBlock.noModelPathOrConfig": "未指定模型路径或配置。", "codeBlock.jsonParseError": "JSON 解析错误:{error}", "codeBlock.jsonParseLine": "(第 {line} 行)", diff --git a/src/main.ts b/src/main.ts index 1c64d30..7d07888 100644 --- a/src/main.ts +++ b/src/main.ts @@ -77,6 +77,12 @@ export default class AI3DModelWorkbench extends Plugin { callback: () => void this.checkConverterCommands(), }); + this.addCommand({ + id: "copy-diagnostics-report", + name: t("main.commandCopyDiagnostics"), + callback: () => void this.copyDiagnosticsReport(), + }); + this.addSettingTab(new AI3DSettingTab(this.app, this)); // Register direct file view for all supported formats. Conversion-capable formats @@ -394,8 +400,7 @@ export default class AI3DModelWorkbench extends Plugin { } private async openKnowledgeIndex() { - const path = this.ps.store.getState().currentModelPath; - const indexPath = path ? this.ps.store.getState().modelAssetProfiles[path]?.knowledgeIndexPath : undefined; + const indexPath = this.resolveKnowledgeIndexPath(); if (!indexPath) { new Notice(t("workbench.noIndexYet")); return; @@ -408,6 +413,22 @@ export default class AI3DModelWorkbench extends Plugin { } } + private resolveKnowledgeIndexPath(): string | undefined { + const state = this.ps.store.getState(); + const currentPath = state.currentModelPath; + const currentIndex = currentPath ? state.modelAssetProfiles[currentPath]?.knowledgeIndexPath : undefined; + if (currentIndex) { + return currentIndex; + } + if (state.lastKnowledgeGeneration?.knowledgeIndexPath) { + return state.lastKnowledgeGeneration.knowledgeIndexPath; + } + const indexedProfiles = Object.values(state.modelAssetProfiles) + .filter((profile) => !!profile.knowledgeIndexPath) + .sort((left, right) => Date.parse(right.updatedAt) - Date.parse(left.updatedAt)); + return indexedProfiles[0]?.knowledgeIndexPath; + } + private clearConversionCache() { this.convertedAssetCache.clear(); new Notice("AI 3d conversion cache cleared."); @@ -433,4 +454,33 @@ export default class AI3DModelWorkbench extends Plugin { 10000, ); } + + private async copyDiagnosticsReport() { + const { buildDiagnosticsReport } = await import("./diagnostics/report"); + const report = buildDiagnosticsReport({ + manifest: this.manifest, + state: this.ps.store.getState(), + }); + try { + await navigator.clipboard.writeText(report); + new Notice(t("main.diagnosticsCopied"), 8000); + } catch { + const folder = this.getSettings().reportFolder.replace(/\\/g, "/").replace(/^\/+|\/+$/g, "").trim() || "Analysis/3D Reports"; + await this.ensureVaultFolder(folder); + const fileName = `AI Model Workbench Diagnostics ${new Date().toISOString().replace(/[:.]/g, "-")}.md`; + const file = await this.app.vault.create(`${folder}/${fileName}`, report); + await this.app.workspace.getLeaf(true).openFile(file, { active: true }); + new Notice(t("main.diagnosticsCopyFailed"), 10000); + } + } + + private async ensureVaultFolder(folder: string): Promise { + let current = ""; + for (const part of folder.split("/").filter(Boolean)) { + current = current ? `${current}/${part}` : part; + if (!this.app.vault.getAbstractFileByPath(current)) { + await this.app.vault.createFolder(current).catch(() => {}); + } + } + } } diff --git a/src/render/babylon/scene.ts b/src/render/babylon/scene.ts index 390e5e0..6b3fc38 100644 --- a/src/render/babylon/scene.ts +++ b/src/render/babylon/scene.ts @@ -8,6 +8,7 @@ import { SpotLight } from "@babylonjs/core/Lights/spotLight.js"; import { Vector3, Matrix } from "@babylonjs/core/Maths/math.vector.js"; import { Color3, Color4 } from "@babylonjs/core/Maths/math.color.js"; import { Mesh } from "@babylonjs/core/Meshes/mesh.js"; +import { TransformNode } from "@babylonjs/core/Meshes/transformNode.js"; import { MeshBuilder } from "@babylonjs/core/Meshes/meshBuilder.js"; import { StandardMaterial } from "@babylonjs/core/Materials/standardMaterial.js"; import { Ray } from "@babylonjs/core/Culling/ray.js"; @@ -38,14 +39,15 @@ import { isMobile } from "../../utils/device"; import { getPortableBasename, getPortableDirname, getPortableStem, joinPortablePath } from "../../utils/resolve-path"; import { OrientationGizmo } from "./orientation-gizmo"; import { createBabylonDisassemblyController } from "./disassembly"; -import { - createBabylonModelPreviewSummary, - createBabylonPartPreviewSummary, - getBabylonRenderableMeshes, - getBabylonRenderablePreviewBounds, - getBabylonTriangleCount, - getBabylonVertexCount, -} from "./mesh-preview"; +import { + createBabylonModelPreviewSummary, + createBabylonPartPreviewSummary, + getBabylonMeshesPreviewBounds, + getBabylonRenderableMeshes, + getBabylonRenderablePreviewBounds, + getBabylonTriangleCount, + getBabylonVertexCount, +} from "./mesh-preview"; import { getPreviewBoundsCenter, getPreviewBoundsMaxSpan, @@ -59,10 +61,11 @@ import { isPreviewHitOccluded, toPreviewWorldPoint, } from "../preview/geometry"; -import { - createPreviewModelInfoMarkdown, - createPreviewPartInfoMarkdown, -} from "../preview/report"; +import { + createPreviewModelInfoMarkdown, + createPreviewPartInfoMarkdown, +} from "../preview/report"; +import { createPreviewPartSummary } from "../preview/summary"; import type { AnnotationViewportProvider, PreviewAxis, @@ -152,8 +155,9 @@ export class BabylonModelPreview implements WorkbenchPreview { private engine: Engine; private scene: Scene; private camera: ArcRotateCamera; - private rootMesh: Mesh | null = null; - private loadedMeshes: AbstractMesh[] = []; + private rootMesh: Mesh | null = null; + private loadedMeshes: AbstractMesh[] = []; + private loadedTransformNodes: TransformNode[] = []; private loadedExt: string = ""; private rendering = false; private cleanupPicking: (() => void) | null = null; @@ -254,7 +258,8 @@ export class BabylonModelPreview implements WorkbenchPreview { } this.rootMesh = null; } - this.loadedMeshes = []; + this.loadedMeshes = []; + this.loadedTransformNodes = []; this.disassembly?.dispose(); this.disassembly = null; this.clearFocusedMesh(); @@ -351,9 +356,10 @@ export class BabylonModelPreview implements WorkbenchPreview { onSuccess(content); }; - const result = await ImportMeshAsync(dataUrl, scene, { meshNames: "", pluginExtension: fileExt }); - this.loadedMeshes = result.meshes; - if (result.meshes.length > 0) this.rootMesh = result.meshes[0] as Mesh; + const result = await ImportMeshAsync(dataUrl, scene, { meshNames: "", pluginExtension: fileExt }); + this.loadedMeshes = result.meshes; + this.loadedTransformNodes = result.transformNodes; + if (result.meshes.length > 0) this.rootMesh = result.meshes[0] as Mesh; // Restore original _loadMTL proto._loadMTL = originalLoadMTL; @@ -373,9 +379,10 @@ export class BabylonModelPreview implements WorkbenchPreview { this.rootMesh = loadPLYBuffer(scene, data); if (this.rootMesh) this.loadedMeshes = [this.rootMesh]; } else { - const result = await ImportMeshAsync(dataUrl, scene, { meshNames: "", pluginExtension: fileExt }); - this.loadedMeshes = result.meshes; - if (result.meshes.length > 0) this.rootMesh = result.meshes[0] as Mesh; + const result = await ImportMeshAsync(dataUrl, scene, { meshNames: "", pluginExtension: fileExt }); + this.loadedMeshes = result.meshes; + this.loadedTransformNodes = result.transformNodes; + if (result.meshes.length > 0) this.rootMesh = result.meshes[0] as Mesh; } if (!this.rootMesh) { @@ -856,13 +863,18 @@ export class BabylonModelPreview implements WorkbenchPreview { getModelEvidence(): ModelEvidence | null { if (!this.rootMesh) return null; const renderableMeshes = this.getRenderableMeshes(this.rootMesh); + const groupedPartCandidates = this.computeGroupedPartSummaries(renderableMeshes); + const meshParts = renderableMeshes + .filter((mesh) => !groupedPartCandidates.groupedMeshes.has(mesh)) + .map((mesh) => this.computePartSummary(mesh)); + const parts = groupedPartCandidates.parts.length > 0 ? [...groupedPartCandidates.parts, ...meshParts] : meshParts; const materialNames = new Set(); for (const mesh of renderableMeshes) { if (mesh.material?.name) materialNames.add(mesh.material.name); } return { summary: this.computeSummary(this.rootMesh), - parts: renderableMeshes.map((mesh) => this.computePartSummary(mesh)), + parts, materialNames: Array.from(materialNames).sort((left, right) => left.localeCompare(right)), resourceWarnings: [...this.resourceWarnings], capturedAt: new Date().toISOString(), @@ -1160,9 +1172,61 @@ export class BabylonModelPreview implements WorkbenchPreview { return null; } - private computePartSummary(mesh: AbstractMesh): ModelPartSummary { - return createBabylonPartPreviewSummary(mesh); - } + private computePartSummary(mesh: AbstractMesh): ModelPartSummary { + return { + ...createBabylonPartPreviewSummary(mesh), + source: "mesh", + meshNames: [mesh.name || `mesh-${mesh.uniqueId}`], + childCount: 1, + }; + } + + private computeGroupedPartSummaries(renderableMeshes: readonly AbstractMesh[]): { + parts: ModelPartSummary[]; + groupedMeshes: Set; + } { + const renderableSet = new Set(renderableMeshes); + const parts: ModelPartSummary[] = []; + const groupedMeshes = new Set(); + for (const node of this.loadedTransformNodes) { + if (!node.name.trim()) continue; + const childMeshes = node.getChildMeshes(false).filter((mesh) => renderableSet.has(mesh)); + if (childMeshes.length < 2 || childMeshes.length === renderableMeshes.length) { + continue; + } + for (const mesh of childMeshes) { + groupedMeshes.add(mesh); + } + const bounds = getBabylonMeshesPreviewBounds(childMeshes); + if (!bounds) continue; + const materialNames = new Set(); + let triangleCount = 0; + let vertexCount = 0; + for (const mesh of childMeshes) { + triangleCount += getBabylonTriangleCount(mesh); + vertexCount += getBabylonVertexCount(mesh); + if (mesh.material?.name) { + materialNames.add(mesh.material.name); + } + } + parts.push(createPreviewPartSummary({ + name: node.name, + triangleCount, + vertexCount, + materialName: materialNames.size === 0 + ? null + : materialNames.size === 1 + ? Array.from(materialNames)[0] + : `${materialNames.size} materials`, + boundingSize: getPreviewBoundsSize(bounds), + center: getPreviewBoundsCenter(bounds), + source: "group", + meshNames: childMeshes.map((mesh) => mesh.name || `mesh-${mesh.uniqueId}`), + childCount: childMeshes.length, + })); + } + return { parts, groupedMeshes }; + } private computeSummary(root: Mesh): ModelPreviewSummary { const allMeshes = this.getRenderableMeshes(root); diff --git a/src/render/preview/summary.ts b/src/render/preview/summary.ts index 3c17a37..1c9ec80 100644 --- a/src/render/preview/summary.ts +++ b/src/render/preview/summary.ts @@ -25,6 +25,9 @@ export interface PreviewPartSummaryInput { materialName?: string | null; boundingSize: PreviewWorldPoint; center: PreviewWorldPoint; + source?: "mesh" | "group"; + meshNames?: readonly string[]; + childCount?: number; } export function createPreviewModelSummary(input: PreviewModelSummaryInput): ModelPreviewSummary { @@ -111,6 +114,9 @@ export function createPreviewPartSummary(input: PreviewPartSummaryInput): ModelP materialName: input.materialName ?? null, boundingSize: clonePreviewWorldPoint(input.boundingSize), center: clonePreviewWorldPoint(input.center), + source: input.source, + meshNames: input.meshNames ? [...input.meshNames] : undefined, + childCount: input.childCount, }; } diff --git a/src/render/three/scene.ts b/src/render/three/scene.ts index 55a784f..34a1caa 100644 --- a/src/render/three/scene.ts +++ b/src/render/three/scene.ts @@ -139,6 +139,13 @@ function describeMaterial(material: Material | null | undefined): string | null return material.name || material.type || `material-${material.uuid}`; } +function getObjectDisplayName(object: Object3D, fallback: string): string { + const originalName = object.userData?.name; + return typeof originalName === "string" && originalName.trim().length > 0 + ? originalName + : object.name || fallback; +} + function createFocusDimMaterial(material: Material): Material { const clone = material.clone(); clone.transparent = true; @@ -466,7 +473,7 @@ export class ThreeModelPreview implements WorkbenchPreview { format: this.loadedExt.toUpperCase(), summary, meshBreakdown: renderableMeshes.map((mesh) => ({ - name: mesh.name || `mesh-${mesh.id}`, + name: getObjectDisplayName(mesh, `mesh-${mesh.id}`), triangleCount: triangleCountForMesh(mesh), vertexCount: vertexCountForMesh(mesh), materialName: describeMaterial(materialList(mesh.material)[0]), @@ -476,9 +483,14 @@ export class ThreeModelPreview implements WorkbenchPreview { getModelEvidence(): ModelEvidence | null { if (!this.rootObject) return null; - const parts = this.getRenderableMeshes(this.rootObject).map((mesh) => this.computePartSummary(mesh)); + const renderableMeshes = this.getRenderableMeshes(this.rootObject); + const groupedPartCandidates = this.computeGroupedPartSummaries(this.rootObject, renderableMeshes); + const meshParts = renderableMeshes + .filter((mesh) => !groupedPartCandidates.groupedMeshes.has(mesh)) + .map((mesh) => this.computePartSummary(mesh)); + const parts = groupedPartCandidates.parts.length > 0 ? [...groupedPartCandidates.parts, ...meshParts] : meshParts; const materialNames = new Set(); - for (const mesh of this.getRenderableMeshes(this.rootObject)) { + for (const mesh of renderableMeshes) { for (const material of materialList(mesh.material)) { const name = describeMaterial(material); if (name) materialNames.add(name); @@ -1584,16 +1596,85 @@ export class ThreeModelPreview implements WorkbenchPreview { private computePartSummary(mesh: Mesh): ModelPartSummary { mesh.updateWorldMatrix(true, false); const bounds = getObjectPreviewBounds(mesh); + const name = getObjectDisplayName(mesh, `mesh-${mesh.id}`); return createPreviewPartSummary({ - name: mesh.name || `mesh-${mesh.id}`, + name, triangleCount: triangleCountForMesh(mesh), vertexCount: vertexCountForMesh(mesh), materialName: describeMaterial(materialList(mesh.material)[0]), boundingSize: getPreviewBoundsSize(bounds), center: getPreviewBoundsCenter(bounds), + source: "mesh", + meshNames: [name], + childCount: 1, }); } + private computeGroupedPartSummaries(root: Object3D, renderableMeshes: readonly Mesh[]): { + parts: ModelPartSummary[]; + groupedMeshes: Set; + } { + const renderableSet = new Set(renderableMeshes); + const parts: ModelPartSummary[] = []; + const groupedMeshes = new Set(); + root.updateWorldMatrix(true, true); + root.traverse((object) => { + if (object === root || isMesh(object) || !object.name.trim()) { + return; + } + const childMeshes: Mesh[] = []; + object.traverse((child) => { + if (isMesh(child) && renderableSet.has(child)) { + childMeshes.push(child); + } + }); + if (childMeshes.length < 2 || childMeshes.length === renderableMeshes.length) { + return; + } + for (const mesh of childMeshes) { + groupedMeshes.add(mesh); + } + const bounds = new Box3(); + for (const mesh of childMeshes) { + mesh.updateWorldMatrix(true, false); + bounds.union(new Box3().setFromObject(mesh)); + } + const materialNames = new Set(); + let triangleCount = 0; + let vertexCount = 0; + for (const mesh of childMeshes) { + triangleCount += triangleCountForMesh(mesh); + vertexCount += vertexCountForMesh(mesh); + for (const material of materialList(mesh.material)) { + const name = describeMaterial(material); + if (name) materialNames.add(name); + } + } + parts.push(createPreviewPartSummary({ + name: getObjectDisplayName(object, `group-${object.id}`), + triangleCount, + vertexCount, + materialName: materialNames.size === 0 + ? null + : materialNames.size === 1 + ? Array.from(materialNames)[0] + : `${materialNames.size} materials`, + boundingSize: getPreviewBoundsSize({ + min: toPreviewWorldPoint(bounds.min), + max: toPreviewWorldPoint(bounds.max), + }), + center: getPreviewBoundsCenter({ + min: toPreviewWorldPoint(bounds.min), + max: toPreviewWorldPoint(bounds.max), + }), + source: "group", + meshNames: childMeshes.map((mesh) => getObjectDisplayName(mesh, `mesh-${mesh.id}`)), + childCount: childMeshes.length, + })); + }); + return { parts, groupedMeshes }; + } + private computeSummary(root: Object3D): ModelPreviewSummary { const renderableMeshes = this.getRenderableMeshes(root); return createPreviewModelSummary({ diff --git a/src/store/plugin-store.ts b/src/store/plugin-store.ts index 16f6da5..ee7a9b4 100644 --- a/src/store/plugin-store.ts +++ b/src/store/plugin-store.ts @@ -1,5 +1,5 @@ import type { Plugin } from "obsidian"; -import type { ModelAssetProfile, PersistedPluginState, PluginState } from "../domain/models"; +import type { ModelAssetProfile, PartRecord, PersistedPluginState, PluginState } from "../domain/models"; import { DEFAULT_SETTINGS } from "../domain/constants"; import { createStore, type Store } from "./create-store"; @@ -21,6 +21,7 @@ const INITIAL_STATE: PluginState = { agentPlan: null, modelPreview: null, selectedPart: null, + lastKnowledgeGeneration: null, }; export function createPluginStore(plugin: Plugin): PluginStore { @@ -44,6 +45,7 @@ export function createPluginStore(plugin: Plugin): PluginStore { modelAssetProfiles: s.modelAssetProfiles, agentDraft: s.agentDraft, agentPlan: s.agentPlan, + lastKnowledgeGeneration: s.lastKnowledgeGeneration, }; await plugin.saveData(data); } @@ -67,6 +69,7 @@ export function createPluginStore(plugin: Plugin): PluginStore { modelAssetProfiles: normalizeModelAssetProfiles(saved.modelAssetProfiles), agentDraft: saved.agentDraft ?? "", agentPlan: saved.agentPlan ?? null, + lastKnowledgeGeneration: normalizeKnowledgeGenerationRecord(saved.lastKnowledgeGeneration), }); }, @@ -102,13 +105,97 @@ function normalizeModelAssetProfiles( tags: Array.isArray(profile.tags) ? profile.tags : [], notes: typeof profile.notes === "string" ? profile.notes : "", annotations: Array.isArray(profile.annotations) ? profile.annotations : [], + registeredParts: normalizeRegisteredParts(profile.registeredParts, path), analysisVersion: typeof profile.analysisVersion === "string" ? profile.analysisVersion : undefined, reportNotePath: typeof profile.reportNotePath === "string" ? profile.reportNotePath : undefined, analysisSidecarPath: typeof profile.analysisSidecarPath === "string" ? profile.analysisSidecarPath : undefined, previewImagePaths: Array.isArray(profile.previewImagePaths) ? profile.previewImagePaths.filter((path): path is string => typeof path === "string") : undefined, + knowledgeIndexPath: typeof profile.knowledgeIndexPath === "string" ? profile.knowledgeIndexPath : undefined, createdAt: typeof profile.createdAt === "string" ? profile.createdAt : now, updatedAt: typeof profile.updatedAt === "string" ? profile.updatedAt : now, }; } return profiles; } + +function normalizeStringArray(value: unknown): string[] { + return Array.isArray(value) + ? value.filter((entry): entry is string => typeof entry === "string" && entry.trim().length > 0) + : []; +} + +function normalizeNumberTuple(value: unknown): [number, number, number] | undefined { + if (!Array.isArray(value) || value.length < 3) return undefined; + const tuple = value.slice(0, 3).map((entry) => Number(entry)); + return tuple.every(Number.isFinite) ? [tuple[0], tuple[1], tuple[2]] : undefined; +} + +function normalizeRegisteredParts(value: unknown, fallbackAssetId: string): PartRecord[] | undefined { + if (!Array.isArray(value)) { + return undefined; + } + + const parts: PartRecord[] = []; + const seen = new Set(); + for (const entry of value) { + if (!entry || typeof entry !== "object") continue; + const record = entry as Partial; + const partId = typeof record.partId === "string" ? record.partId : ""; + const name = typeof record.name === "string" ? record.name : ""; + if (!partId || !name) continue; + const assetId = typeof record.assetId === "string" && record.assetId ? record.assetId : fallbackAssetId; + const key = `${assetId}:${partId}`; + if (seen.has(key)) continue; + seen.add(key); + parts.push({ + partId, + assetId, + parentPartId: typeof record.parentPartId === "string" ? record.parentPartId : undefined, + name, + source: record.source === "group" || record.source === "mesh" ? record.source : undefined, + category: typeof record.category === "string" ? record.category : undefined, + meshRefs: normalizeStringArray(record.meshRefs), + childCount: Number.isFinite(record.childCount) ? Math.max(0, Math.floor(Number(record.childCount))) : undefined, + materialRefs: normalizeStringArray(record.materialRefs), + bbox: normalizeNumberTuple(record.bbox), + center: normalizeNumberTuple(record.center), + triangleCount: Number.isFinite(record.triangleCount) ? Math.max(0, Math.floor(Number(record.triangleCount))) : undefined, + vertexCount: Number.isFinite(record.vertexCount) ? Math.max(0, Math.floor(Number(record.vertexCount))) : undefined, + materialName: typeof record.materialName === "string" ? record.materialName : null, + confidence: Number.isFinite(record.confidence) ? Math.max(0, Math.min(1, Number(record.confidence))) : 0.5, + observations: normalizeStringArray(record.observations), + inferredFunctions: normalizeStringArray(record.inferredFunctions), + knowledgeTags: normalizeStringArray(record.knowledgeTags), + notePath: typeof record.notePath === "string" ? record.notePath : undefined, + registeredMatches: Array.isArray(record.registeredMatches) ? record.registeredMatches : undefined, + reviewed: record.reviewed === true, + }); + } + + return parts.length > 0 ? parts : undefined; +} + +function normalizeKnowledgeGenerationRecord( + saved: PersistedPluginState["lastKnowledgeGeneration"] | undefined, +): PersistedPluginState["lastKnowledgeGeneration"] { + if (!saved || typeof saved !== "object") { + return null; + } + + const modelPath = typeof saved.modelPath === "string" ? saved.modelPath : ""; + if (!modelPath) { + return null; + } + + return { + modelPath, + reportNotePath: typeof saved.reportNotePath === "string" ? saved.reportNotePath : undefined, + analysisSidecarPath: typeof saved.analysisSidecarPath === "string" ? saved.analysisSidecarPath : undefined, + knowledgeIndexPath: typeof saved.knowledgeIndexPath === "string" ? saved.knowledgeIndexPath : undefined, + partNoteCount: Number.isFinite(saved.partNoteCount) ? Math.max(0, Math.floor(saved.partNoteCount)) : 0, + previewImageCount: Number.isFinite(saved.previewImageCount) ? Math.max(0, Math.floor(saved.previewImageCount)) : 0, + generatedAt: typeof saved.generatedAt === "string" ? saved.generatedAt : new Date().toISOString(), + status: saved.status === "failed" ? "failed" : "success", + warningCount: Number.isFinite(saved.warningCount) ? Math.max(0, Math.floor(saved.warningCount)) : 0, + }; +} diff --git a/src/view/direct-view.ts b/src/view/direct-view.ts index 948b3d8..fd16689 100644 --- a/src/view/direct-view.ts +++ b/src/view/direct-view.ts @@ -1,5 +1,5 @@ import { FileView, TFile, type WorkspaceLeaf } from "obsidian"; -import type { PluginSettings, ModelAssetProfile, ModelPreviewSummary } from "../domain/models"; +import type { PluginSettings, ModelAssetProfile, ModelPreviewSummary, ModelEvidence, PartRecord } from "../domain/models"; import { AnnotationManager } from "../render/preview/annotations"; import { createLoggedModelPreview } from "../render/preview/selection"; import { supportsWorkbenchPreview, type AnnotationPreview, type PreviewAxis } from "../render/preview/types"; @@ -14,10 +14,12 @@ import { listPreferredConversionExts } from "../io/formats/route-preferences"; import { createNoteReader, createHeadingSearch } from "../utils/note-reader"; import { createLoadingOverlay } from "./inline/loading-overlay"; import { describeModelLoadFailure, isMissingConverterError } from "../io/conversion/errors"; -import { t } from "../i18n"; +import { formatT, t } from "../i18n"; import { renderModelLoadFailure, renderModelPerformanceFeedback } from "./model-load-feedback"; import { isMobile } from "../utils/device"; import { createLogger } from "../utils/log"; +import { buildLocalAnalysisResult, buildPartRecordsFromEvidence } from "./workbench/analysis-result"; +import { renderRegisteredPartMatchRow } from "./direct-workbench-registered-match"; export const DIRECT_VIEW_TYPE = "ai3d-direct-view"; @@ -57,6 +59,29 @@ function isMissingExternalModelResourceError(error: unknown): boolean { return error instanceof Error && error.message.includes("Missing external model resource:"); } +function createPartMergeKey(part: Pick): string { + const meshRefs = part.meshRefs + .map((name) => name.trim().toLowerCase()) + .filter(Boolean) + .sort() + .join("|"); + return `${part.source ?? "mesh"}:${part.name.trim().toLowerCase()}:${meshRefs}`; +} + +function mergeAutoRegisteredPart(previous: PartRecord | undefined, next: PartRecord): PartRecord { + if (!previous) { + return next; + } + + return { + ...next, + notePath: previous.notePath, + reviewed: previous.reviewed, + inferredFunctions: previous.inferredFunctions.length > 0 ? previous.inferredFunctions : next.inferredFunctions, + knowledgeTags: previous.knowledgeTags.length > 0 ? previous.knowledgeTags : next.knowledgeTags, + }; +} + export class DirectModelView extends FileView { private preview: AnnotationPreview | null = null; private annotationMgr: AnnotationManager | null = null; @@ -236,6 +261,8 @@ export class DirectModelView extends FileView { host.dataset.ai3dRouteReason = created.route.reason; toolbar?.syncCapabilities(); const summary = created.summary; + const evidence = this.preview.getModelEvidence?.() ?? null; + this.registerModelPartsFromEvidence(file.path, evidence); renderModelPerformanceFeedback(host, summary); this.workbenchPanel = workbenchPanel; this.workbenchSummary = summary; @@ -322,6 +349,35 @@ export class DirectModelView extends FileView { } } + private registerModelPartsFromEvidence(modelPath: string, evidence: ModelEvidence | null): void { + if (!evidence?.parts.length) { + return; + } + + const nextParts = buildPartRecordsFromEvidence(modelPath, evidence.parts); + if (nextParts.length === 0) { + return; + } + + const currentProfiles = this.ps.store.getState().modelAssetProfiles; + const existingProfile = currentProfiles[modelPath] ?? createDefaultProfile(); + const existingByKey = new Map( + (existingProfile.registeredParts ?? []).map((part) => [createPartMergeKey(part), part]), + ); + const registeredParts = nextParts.map((part) => mergeAutoRegisteredPart(existingByKey.get(createPartMergeKey(part)), part)); + + this.ps.store.setState({ + modelAssetProfiles: { + ...currentProfiles, + [modelPath]: { + ...existingProfile, + registeredParts, + updatedAt: new Date().toISOString(), + }, + }, + }); + } + private renderWorkbenchPanel( panel: HTMLElement, summary: ModelPreviewSummary, @@ -343,6 +399,11 @@ export class DirectModelView extends FileView { const metrics = panel.createDiv({ cls: "ai3d-direct-workbench-metrics" }); this.renderMetric(metrics, t("workbench.meshesLabel"), formatCount(summary.meshCount)); + this.renderMetric( + metrics, + t("directWorkbench.partCandidatesLabel"), + formatCount(this.ps.store.getState().modelAssetProfiles[modelPath]?.registeredParts?.length), + ); this.renderMetric( metrics, summary.splatCount !== undefined ? t("workbench.splatsLabel") : t("workbench.trianglesLabel"), @@ -354,6 +415,7 @@ export class DirectModelView extends FileView { const controls = panel.createDiv({ cls: "ai3d-direct-workbench-controls" }); this.renderExplodeControls(controls); + this.renderRegisteredPartMatches(controls, modelPath, summary); this.renderKnowledgeControls(controls, modelPath); } @@ -500,6 +562,83 @@ export class DirectModelView extends FileView { }); } + private renderRegisteredPartMatches(parent: HTMLElement, modelPath: string, summary: ModelPreviewSummary): void { + const generation = this.loadGeneration; + const control = parent.createDiv({ cls: "ai3d-direct-workbench-control ai3d-direct-workbench-registered" }); + const header = control.createDiv({ cls: "ai3d-direct-workbench-control-head" }); + header.createSpan({ cls: "ai3d-direct-workbench-label", text: t("directWorkbench.registeredTitle") }); + const status = header.createSpan({ cls: "ai3d-direct-workbench-value", text: t("directWorkbench.registeredLoading") }); + const body = control.createDiv({ cls: "ai3d-direct-workbench-registered-body" }); + + const renderEmpty = (messageKey: Parameters[0]) => { + status.setText(""); + body.empty(); + body.createDiv({ cls: "ai3d-direct-workbench-empty", text: t(messageKey) }); + }; + + const evidence = this.preview?.getModelEvidence?.() ?? null; + if (!evidence?.parts.length) { + renderEmpty("directWorkbench.registeredUnavailable"); + return; + } + + void import("./workbench/knowledge-note") + .then(async ({ collectRegisteredPartsFromProfiles }) => { + const state = this.ps.store.getState(); + const registeredParts = await collectRegisteredPartsFromProfiles(this.app, state.modelAssetProfiles, modelPath); + if (generation !== this.loadGeneration || this.workbenchModelPath !== modelPath || !control.isConnected) { + return; + } + if (registeredParts.length === 0) { + renderEmpty("directWorkbench.registeredEmpty"); + return; + } + + const profile = this.ps.store.getState().modelAssetProfiles[modelPath]; + const analysis = buildLocalAnalysisResult({ + modelPath, + profile, + preview: summary, + evidence, + registeredParts, + }); + const matchedParts = analysis.parts + .filter((part) => part.registeredMatches?.length) + .sort((left, right) => (right.registeredMatches?.[0]?.matchScore ?? 0) - (left.registeredMatches?.[0]?.matchScore ?? 0)) + .slice(0, 5); + + if (matchedParts.length === 0) { + renderEmpty("directWorkbench.registeredEmpty"); + return; + } + + status.setText(formatT("directWorkbench.registeredCount", { count: String(matchedParts.length) })); + body.empty(); + const list = body.createDiv({ cls: "ai3d-direct-workbench-match-list" }); + for (const part of matchedParts) { + const match = part.registeredMatches?.[0]; + if (!match) continue; + const row = renderRegisteredPartMatchRow(list, part.name, match); + const openButton = row.querySelector("[data-ai3d-action='open-registered-part']"); + if (!(openButton instanceof HTMLButtonElement)) continue; + openButton.addEventListener("click", () => { + const targetPath = openButton.getAttribute("data-ai3d-target-path") || undefined; + if (!targetPath) return; + const file = this.app.vault.getAbstractFileByPath(targetPath); + if (file instanceof TFile) { + void this.app.workspace.getLeaf(true).openFile(file, { active: true }); + } + }); + } + }) + .catch((error) => { + console.warn("[AI3D] Registered part match preview failed:", error); + if (generation === this.loadGeneration && this.workbenchModelPath === modelPath && control.isConnected) { + renderEmpty("directWorkbench.registeredUnavailable"); + } + }); + } + private async createPreviewWithFallback( canvas: HTMLCanvasElement, data: ArrayBuffer, diff --git a/src/view/direct-workbench-registered-match.ts b/src/view/direct-workbench-registered-match.ts new file mode 100644 index 0000000..b7c96f5 --- /dev/null +++ b/src/view/direct-workbench-registered-match.ts @@ -0,0 +1,58 @@ +import type { RegisteredPartMatch } from "../domain/models"; +import { formatT, t } from "../i18n"; + +function formatSourceModelLabel(path: string | undefined): string { + if (!path) return ""; + const parts = path.split("/"); + return parts[parts.length - 1] || path; +} + +export function renderRegisteredPartMatchRow(parent: HTMLElement, partName: string, match: RegisteredPartMatch): HTMLDivElement { + const row = parent.createDiv({ cls: "ai3d-direct-workbench-match" }); + const main = row.createDiv({ cls: "ai3d-direct-workbench-match-main" }); + main.createDiv({ cls: "ai3d-direct-workbench-match-title", text: partName }); + main.createDiv({ + cls: "ai3d-direct-workbench-match-source", + text: match.sourcePartName || match.sourcePartId, + }); + if (match.sourceModelPath) { + main.createDiv({ + cls: "ai3d-direct-workbench-match-model", + text: formatT("directWorkbench.registeredSourceModel", { model: formatSourceModelLabel(match.sourceModelPath) }), + }); + } + main.createDiv({ + cls: "ai3d-direct-workbench-match-target", + text: match.sourceNotePath + ? t("directWorkbench.registeredTargetPartNote") + : match.sourceModelPath + ? t("directWorkbench.registeredTargetSourceModel") + : t("directWorkbench.registeredTargetUnavailable"), + }); + if (match.reasons.length > 0) { + main.createDiv({ + cls: "ai3d-direct-workbench-match-reasons", + text: match.reasons.slice(0, 2).join(" / "), + }); + } + + const side = row.createDiv({ cls: "ai3d-direct-workbench-match-side" }); + side.createDiv({ + cls: "ai3d-direct-workbench-match-score", + text: `${Math.round(match.matchScore * 100)}%`, + }); + const openButton = side.createEl("button", { + cls: "ai3d-direct-workbench-action ai3d-direct-workbench-match-open", + text: match.sourceNotePath + ? t("directWorkbench.registeredOpenNote") + : t("directWorkbench.registeredOpenModel"), + attr: { + type: "button", + "data-ai3d-action": "open-registered-part", + "data-ai3d-target-path": match.sourceNotePath ?? match.sourceModelPath ?? "", + }, + }); + openButton.disabled = !match.sourceNotePath && !match.sourceModelPath; + return row; +} + diff --git a/src/view/workbench/analysis-result.ts b/src/view/workbench/analysis-result.ts index 926a957..228beb9 100644 --- a/src/view/workbench/analysis-result.ts +++ b/src/view/workbench/analysis-result.ts @@ -9,10 +9,13 @@ import type { ModelPartSummary, ModelPreviewSummary, PartRecord, + RegisteredPartMatch, } from "../../domain/models"; import { getPortableStem } from "../../utils/resolve-path"; export const LOCAL_ANALYSIS_VERSION = "local-evidence-v1"; +const MAX_REGISTERED_MATCHES_PER_PART = 3; +const REGISTERED_PART_MATCH_THRESHOLD = 0.58; export interface BuildLocalAnalysisOptions { modelPath: string; @@ -20,6 +23,7 @@ export interface BuildLocalAnalysisOptions { preview: ModelPreviewSummary | null; evidence?: ModelEvidence | null; previewImages?: string[]; + registeredParts?: PartRecord[]; startedAt?: number; } @@ -27,8 +31,8 @@ function nowMs(): number { return typeof performance !== "undefined" ? performance.now() : Date.now(); } -function formatObservationCount(value: number, label: string): string { - return `${value.toLocaleString()} ${label}${value === 1 ? "" : "s"}`; +function formatObservationCount(value: number, label: string, pluralLabel = `${label}s`): string { + return `${value.toLocaleString()} ${value === 1 ? label : pluralLabel}`; } function createPipelineStage(startedAt: number): AnalysisPipelineStage { @@ -62,8 +66,98 @@ function createPartId(modelPath: string, index: number): string { return `${getPortableStem(modelPath) || "model"}:part:${index + 1}`; } +function normalizePartText(value: string | null | undefined): string { + return (value ?? "") + .toLowerCase() + .replace(/[_\-./\\]+/g, " ") + .replace(/[^\p{L}\p{N}\s]+/gu, " ") + .replace(/\s+/g, " ") + .trim(); +} + +function tokenSet(value: string | null | undefined): Set { + return new Set(normalizePartText(value).split(" ").filter((token) => token.length >= 2)); +} + +function overlapRatio(left: Set, right: Set): number { + if (left.size === 0 || right.size === 0) return 0; + let overlap = 0; + for (const token of left) { + if (right.has(token)) overlap += 1; + } + return overlap / Math.max(left.size, right.size); +} + +function dimensionsSimilarity(left?: readonly number[], right?: readonly number[]): number { + if (!left || !right || left.length < 3 || right.length < 3) return 0; + const a = [...left].slice(0, 3).map((value) => Math.max(0.0001, Math.abs(value))).sort((x, y) => x - y); + const b = [...right].slice(0, 3).map((value) => Math.max(0.0001, Math.abs(value))).sort((x, y) => x - y); + let total = 0; + for (let index = 0; index < 3; index++) { + total += Math.min(a[index], b[index]) / Math.max(a[index], b[index]); + } + return total / 3; +} + +function materialMatches(left?: string | null, right?: string | null): boolean { + const leftValue = normalizePartText(left); + const rightValue = normalizePartText(right); + return !!leftValue && !!rightValue && leftValue === rightValue; +} + +function buildRegisteredPartMatches(part: PartRecord, registeredParts: readonly PartRecord[]): RegisteredPartMatch[] { + const partNameTokens = tokenSet(part.name); + const partMeshTokens = tokenSet(part.meshRefs.join(" ")); + const matches = registeredParts + .filter((candidate) => candidate.assetId !== part.assetId || candidate.partId !== part.partId) + .flatMap((candidate): RegisteredPartMatch[] => { + const reasons: string[] = []; + const nameScore = overlapRatio(partNameTokens, tokenSet(candidate.name)); + const meshScore = overlapRatio(partMeshTokens, tokenSet(candidate.meshRefs.join(" "))); + const sizeScore = dimensionsSimilarity(part.bbox, candidate.bbox); + const sameCategory = !!part.category && !!candidate.category && part.category === candidate.category; + const sameMaterial = materialMatches(part.materialName, candidate.materialName); + let score = (nameScore * 0.38) + (meshScore * 0.22) + (sizeScore * 0.22); + if (sameCategory) score += 0.1; + if (sameMaterial) score += 0.08; + if (nameScore >= 0.5) reasons.push("similar part name"); + if (meshScore >= 0.5) reasons.push("similar mesh names"); + if (sizeScore >= 0.72) reasons.push("similar bounding size"); + if (sameCategory) reasons.push(`same category: ${part.category}`); + if (sameMaterial && part.materialName) reasons.push(`same material: ${part.materialName}`); + if (score < REGISTERED_PART_MATCH_THRESHOLD || reasons.length === 0) { + return []; + } + return [{ + sourceAssetId: candidate.assetId, + sourcePartId: candidate.partId, + sourcePartName: candidate.name, + sourceNotePath: candidate.notePath, + sourceCategory: candidate.category, + sourceModelPath: candidate.assetId, + matchScore: Number(score.toFixed(3)), + confidence: Math.max(0.35, Math.min(0.9, Number(score.toFixed(3)))), + reasons, + }]; + }) + .sort((left, right) => right.matchScore - left.matchScore) + .slice(0, MAX_REGISTERED_MATCHES_PER_PART); + return matches; +} + +function attachRegisteredPartMatches(parts: readonly PartRecord[], registeredParts: readonly PartRecord[]): PartRecord[] { + if (registeredParts.length === 0) { + return parts.map((part) => ({ ...part })); + } + return parts.map((part) => { + const registeredMatches = buildRegisteredPartMatches(part, registeredParts); + return registeredMatches.length > 0 ? { ...part, registeredMatches } : { ...part }; + }); +} + function inferPartCategory(part: ModelPartSummary): string { const name = part.name.toLowerCase(); + if (part.source === "group") return "group"; if (name.includes("wheel") || name.includes("gear") || name.includes("axle")) return "mechanical"; if (name.includes("shell") || name.includes("case") || name.includes("cover") || name.includes("housing")) return "enclosure"; if (name.includes("button") || name.includes("key") || name.includes("switch")) return "control"; @@ -73,30 +167,36 @@ function inferPartCategory(part: ModelPartSummary): string { } function buildPartObservations(part: ModelPartSummary): string[] { - const observations = [ + const observations = []; + if (part.source === "group") { + observations.push(`Registered from model group with ${formatObservationCount(part.childCount ?? part.meshNames?.length ?? 0, "child mesh", "child meshes")}.`); + } + observations.push( `${formatObservationCount(part.triangleCount, "triangle")} and ${formatObservationCount(part.vertexCount, "vertex")}.`, `Bounding size ${part.boundingSize.x.toFixed(3)} x ${part.boundingSize.y.toFixed(3)} x ${part.boundingSize.z.toFixed(3)}.`, - ]; + ); if (part.materialName) { observations.push(`Uses material "${part.materialName}".`); } return observations; } -function buildPartRecords(modelPath: string, parts: readonly ModelPartSummary[]): PartRecord[] { +export function buildPartRecordsFromEvidence(modelPath: string, parts: readonly ModelPartSummary[]): PartRecord[] { return parts.map((part, index) => ({ partId: createPartId(modelPath, index), assetId: modelPath, name: part.name || `Part ${index + 1}`, + source: part.source, category: inferPartCategory(part), - meshRefs: [part.name || `mesh-${index + 1}`], + meshRefs: part.meshNames?.length ? [...part.meshNames] : [part.name || `mesh-${index + 1}`], + childCount: part.childCount, materialRefs: part.materialName ? [part.materialName] : [], bbox: toVectorTuple(part.boundingSize), center: toVectorTuple(part.center), triangleCount: part.triangleCount, vertexCount: part.vertexCount, materialName: part.materialName, - confidence: part.name ? 0.55 : 0.35, + confidence: part.source === "group" ? 0.72 : part.name ? 0.55 : 0.35, observations: buildPartObservations(part), inferredFunctions: [], knowledgeTags: [], @@ -210,9 +310,13 @@ function buildDraftingInput(options: { partId: part.partId, name: part.name, notePath: part.notePath, + source: part.source, category: part.category, + meshRefs: [...part.meshRefs], + childCount: part.childCount, triangleCount: part.triangleCount, materialName: part.materialName, + registeredMatches: part.registeredMatches?.map((match) => ({ ...match, reasons: [...match.reasons] })), observations: part.observations, })), annotationLinks: [...options.annotationLinks], @@ -230,7 +334,10 @@ function collectWarnings(preview: ModelPreviewSummary | null, evidence?: ModelEv export function buildLocalAnalysisResult(options: BuildLocalAnalysisOptions): AnalysisResult { const startedAt = options.startedAt ?? nowMs(); const preview = options.evidence?.summary ?? options.preview; - const parts = buildPartRecords(options.modelPath, options.evidence?.parts ?? []); + const parts = attachRegisteredPartMatches( + buildPartRecordsFromEvidence(options.modelPath, options.evidence?.parts ?? []), + options.registeredParts ?? [], + ); const importedAt = new Date().toISOString(); const warnings = collectWarnings(options.preview, options.evidence); const annotationLinks = buildAnnotationLinks(options.profile, parts); diff --git a/src/view/workbench/knowledge-note.ts b/src/view/workbench/knowledge-note.ts index b1bba5c..47c7d54 100644 --- a/src/view/workbench/knowledge-note.ts +++ b/src/view/workbench/knowledge-note.ts @@ -6,6 +6,7 @@ import type { ModelAssetProfile, ModelPreviewSummary, PartRecord, + RegisteredPartMatch, } from "../../domain/models"; import type { PluginStore } from "../../store/plugin-store"; import { createPreviewSummaryTableLines } from "../../render/preview/report"; @@ -63,6 +64,23 @@ function formatVectorTuple(values: readonly number[] | undefined): string { return values?.map((value) => value.toFixed(2)).join(", ") ?? "-"; } +function formatMeshRefs(meshRefs: readonly string[], limit = 12): string { + if (meshRefs.length === 0) { + return "-"; + } + const head = meshRefs.slice(0, limit).join(", "); + const remaining = meshRefs.length - limit; + return remaining > 0 ? `${head}, +${remaining.toLocaleString()} more` : head; +} + +function formatRegisteredMatch(match: RegisteredPartMatch): string { + const target = match.sourceNotePath + ? `[[${match.sourceNotePath}|${match.sourcePartName}]]` + : match.sourcePartName; + const reasons = match.reasons.length > 0 ? ` - ${match.reasons.join(", ")}` : ""; + return `${target} (${Math.round(match.confidence * 100)}%${reasons})`; +} + function formatAnnotationLink(pin: AnnotationPin): string[] { const extras: string[] = []; if (pin.headingRef) { @@ -264,6 +282,23 @@ function summarizeTopParts(parts: readonly PartRecord[]): string { .join("\n"); } +function summarizeRegisteredPartMatches(parts: readonly PartRecord[]): string { + const matchedParts = parts.filter((part) => part.registeredMatches?.length); + if (matchedParts.length === 0) { + return "No previously registered parts were matched across other analyzed models in this pass."; + } + return matchedParts + .slice(0, 6) + .map((part) => { + const best = part.registeredMatches?.[0]; + return best + ? `- ${part.name}: possible reuse of ${best.sourcePartName} from ${best.sourceAssetId} (${Math.round(best.confidence * 100)}% confidence).` + : ""; + }) + .filter(Boolean) + .join("\n"); +} + function createLocalDraftResult(options: { baseName: string; sourcePath: string; @@ -279,6 +314,7 @@ function createLocalDraftResult(options: { const categories = uniqueStrings(parts.map((part) => part.category ?? "unclassified")).slice(0, 6); const materials = uniqueStrings(parts.flatMap((part) => part.materialName ? [part.materialName] : [])).slice(0, 6); const topParts = summarizeTopParts(parts); + const registeredMatches = summarizeRegisteredPartMatches(parts); const shapeLine = summary ? buildShapeObservation(summary) : "Geometry statistics are not available yet, so this draft should stay provisional."; const complexityLine = summary ? buildComplexityObservation(summary) : "Reload the preview to capture mesh, triangle, vertex, and material evidence."; const userNotes = options.profile?.notes.trim(); @@ -320,6 +356,10 @@ function createLocalDraftResult(options: { heading: "Candidate structure", body: topParts, }, + { + heading: "Registered part reuse", + body: registeredMatches, + }, { heading: "Focus areas", body: focusBody, @@ -482,17 +522,50 @@ function buildPartCandidateSection(analysis?: AnalysisResult): string[] { const lines = [ "## Part Candidates", "", - "| # | Part | Part Note | Category | Triangles | Material | Center | Evidence |", - "|---|------|-----------|----------|-----------|----------|--------|----------|", + "| # | Part | Part Note | Source | Category | Triangles | Material | Center | Evidence |", + "|---|------|-----------|--------|----------|-----------|----------|--------|----------|", ]; for (const [index, part] of parts.slice(0, 32).entries()) { const center = formatVectorTuple(part.center); const observations = part.observations.slice(0, 2).join(" "); const partNote = part.notePath ? `[[${part.notePath}]]` : "-"; - lines.push(`| ${index + 1} | ${escapeTableCell(part.name)} | ${escapeTableCell(partNote)} | ${escapeTableCell(part.category ?? "unclassified")} | ${(part.triangleCount ?? 0).toLocaleString()} | ${escapeTableCell(part.materialName ?? "-")} | ${center} | ${escapeTableCell(observations)} |`); + const source = part.source === "group" ? `group (${part.childCount ?? part.meshRefs.length})` : "mesh"; + lines.push(`| ${index + 1} | ${escapeTableCell(part.name)} | ${escapeTableCell(partNote)} | ${escapeTableCell(source)} | ${escapeTableCell(part.category ?? "unclassified")} | ${(part.triangleCount ?? 0).toLocaleString()} | ${escapeTableCell(part.materialName ?? "-")} | ${center} | ${escapeTableCell(observations)} |`); } if (parts.length > 32) { - lines.push(`| ... | ${parts.length - 32} more candidate parts omitted from this note | - | - | - | - | - | See sidecar JSON |`); + lines.push(`| ... | ${parts.length - 32} more candidate parts omitted from this note | - | - | - | - | - | - | See sidecar JSON |`); + } + lines.push(""); + return lines; +} + +function buildRegisteredPartMatchSection(analysis?: AnalysisResult): string[] { + const matchedParts = (analysis?.parts ?? []).filter((part) => part.registeredMatches?.length); + if (matchedParts.length === 0) { + return [ + "## Registered Part Matches", + "", + "- No previously registered parts were matched across other analyzed models in this pass.", + "", + ]; + } + + const lines = [ + "## Registered Part Matches", + "", + "| Current Part | Best Existing Part | Source Model | Confidence | Reasons |", + "|--------------|--------------------|--------------|------------|---------|", + ]; + for (const part of matchedParts.slice(0, 32)) { + const match = part.registeredMatches?.[0]; + if (!match) continue; + const existing = match.sourceNotePath + ? `[[${match.sourceNotePath}|${match.sourcePartName}]]` + : match.sourcePartName; + lines.push(`| ${escapeTableCell(part.name)} | ${escapeTableCell(existing)} | ${escapeTableCell(match.sourceAssetId)} | ${Math.round(match.confidence * 100)}% | ${escapeTableCell(match.reasons.join(", "))} |`); + } + if (matchedParts.length > 32) { + lines.push(`| ... | ${matchedParts.length - 32} more matched parts omitted | - | - | See sidecar JSON |`); } lines.push(""); return lines; @@ -625,6 +698,7 @@ export function buildKnowledgeNoteContent(options: KnowledgeNoteBuildOptions): s ...buildAnnotationLinkSection(analysis), ...buildSuggestedPartNotesSection(analysis), ...buildPartCandidateSection(analysis), + ...buildRegisteredPartMatchSection(analysis), ...buildKnowledgeNodeSection(analysis), ...buildAiDraftingInputSection(analysis), ...buildRemoteDraftSection(analysis), @@ -636,12 +710,17 @@ export function buildKnowledgeNoteContent(options: KnowledgeNoteBuildOptions): s ].join("\n"); } -function normalizeModelAssetProfile(profile: Partial | null | undefined): ModelAssetProfile { +function normalizeModelAssetProfile(profile: Partial | null | undefined, modelPath: string): ModelAssetProfile { const now = new Date().toISOString(); return { tags: Array.isArray(profile?.tags) ? profile.tags : [], notes: typeof profile?.notes === "string" ? profile.notes : "", annotations: Array.isArray(profile?.annotations) ? profile.annotations : [], + registeredParts: Array.isArray(profile?.registeredParts) + ? profile.registeredParts + .map((part) => normalizeRegisteredPartRecord(part, modelPath)) + .filter((part): part is PartRecord => !!part) + : undefined, analysisVersion: typeof profile?.analysisVersion === "string" ? profile.analysisVersion : undefined, reportNotePath: typeof profile?.reportNotePath === "string" ? profile.reportNotePath : undefined, analysisSidecarPath: typeof profile?.analysisSidecarPath === "string" ? profile.analysisSidecarPath : undefined, @@ -737,6 +816,93 @@ async function captureEvidenceSnapshot( } } +function isRecord(value: unknown): value is Record { + return !!value && typeof value === "object"; +} + +function normalizeStringArray(value: unknown): string[] { + return Array.isArray(value) ? value.filter((entry): entry is string => typeof entry === "string") : []; +} + +function normalizeNumberTuple(value: unknown): [number, number, number] | undefined { + if (!Array.isArray(value) || value.length < 3) return undefined; + const tuple = value.slice(0, 3).map((entry) => Number(entry)); + return tuple.every(Number.isFinite) ? [tuple[0], tuple[1], tuple[2]] : undefined; +} + +function normalizeRegisteredPartRecord(value: unknown, fallbackAssetId: string): PartRecord | null { + if (!isRecord(value)) return null; + const partId = typeof value.partId === "string" ? value.partId : ""; + const name = typeof value.name === "string" ? value.name : ""; + if (!partId || !name) return null; + const assetId = typeof value.assetId === "string" && value.assetId ? value.assetId : fallbackAssetId; + return { + partId, + assetId, + parentPartId: typeof value.parentPartId === "string" ? value.parentPartId : undefined, + name, + source: value.source === "group" || value.source === "mesh" ? value.source : undefined, + category: typeof value.category === "string" ? value.category : undefined, + meshRefs: normalizeStringArray(value.meshRefs), + childCount: Number.isFinite(value.childCount) ? Number(value.childCount) : undefined, + materialRefs: normalizeStringArray(value.materialRefs), + bbox: normalizeNumberTuple(value.bbox), + center: normalizeNumberTuple(value.center), + triangleCount: Number.isFinite(value.triangleCount) ? Number(value.triangleCount) : undefined, + vertexCount: Number.isFinite(value.vertexCount) ? Number(value.vertexCount) : undefined, + materialName: typeof value.materialName === "string" ? value.materialName : null, + confidence: Number.isFinite(value.confidence) ? Number(value.confidence) : 0.5, + observations: normalizeStringArray(value.observations), + inferredFunctions: normalizeStringArray(value.inferredFunctions), + knowledgeTags: normalizeStringArray(value.knowledgeTags), + notePath: typeof value.notePath === "string" ? value.notePath : undefined, + reviewed: value.reviewed === true, + }; +} + +export async function collectRegisteredPartsFromProfiles( + app: App, + profiles: Record, + currentModelPath: string, +): Promise { + const parts: PartRecord[] = []; + const seen = new Set(); + const pushPart = (value: unknown, fallbackAssetId: string): void => { + const part = normalizeRegisteredPartRecord(value, fallbackAssetId); + if (!part) return; + const key = `${part.assetId}:${part.partId}`; + if (seen.has(key)) return; + seen.add(key); + parts.push(part); + }; + + for (const [modelPath, profile] of Object.entries(profiles)) { + if (modelPath === currentModelPath) continue; + + if (profile.analysisSidecarPath) { + const sidecarFile = app.vault.getAbstractFileByPath(profile.analysisSidecarPath); + if (sidecarFile instanceof TFile) { + try { + const raw = await app.vault.read(sidecarFile); + const parsed = JSON.parse(raw) as unknown; + if (isRecord(parsed) && Array.isArray(parsed.parts)) { + for (const value of parsed.parts) { + pushPart(value, modelPath); + } + } + } catch (error) { + console.warn("[AI3D] Failed to read registered part sidecar:", profile.analysisSidecarPath, error); + } + } + } + + for (const value of profile.registeredParts ?? []) { + pushPart(value, modelPath); + } + } + return parts; +} + function getPartNoteCandidateIds(analysis: AnalysisResult): Set { const linkedPartIds = new Set((analysis.annotationLinks ?? []).flatMap((link) => link.nearestPartId ? [link.nearestPartId] : [])); return new Set( @@ -747,6 +913,11 @@ function getPartNoteCandidateIds(analysis: AnalysisResult): Set { if (leftLinked !== rightLinked) { return rightLinked - leftLinked; } + const leftRegistered = left.registeredMatches?.length ? 1 : 0; + const rightRegistered = right.registeredMatches?.length ? 1 : 0; + if (leftRegistered !== rightRegistered) { + return rightRegistered - leftRegistered; + } return (right.triangleCount ?? 0) - (left.triangleCount ?? 0); }) .slice(0, MAX_GENERATED_PART_NOTES) @@ -791,12 +962,17 @@ function buildPartNoteContent(options: { "", `- Source model: [[${options.sourcePath}|${options.baseName}]]`, `- Parent report: [[${options.notePath}|${options.baseName} Report]]`, + `- Source: ${options.part.source === "group" ? "model group" : "mesh"}`, `- Category: ${options.part.category ?? "unclassified"}`, + ...(options.part.source === "group" ? [`- Child meshes: ${formatMeshRefs(options.part.meshRefs)}`] : []), `- Triangles: ${(options.part.triangleCount ?? 0).toLocaleString()}`, `- Vertices: ${(options.part.vertexCount ?? 0).toLocaleString()}`, `- Material: ${options.part.materialName ?? "-"}`, `- Bounding size: ${formatVectorTuple(options.part.bbox)}`, `- Center: ${formatVectorTuple(options.part.center)}`, + ...(options.part.registeredMatches?.length + ? [`- Possible registered match: ${formatRegisteredMatch(options.part.registeredMatches[0])}`] + : []), "", "## Renderer Observations", "", @@ -903,7 +1079,11 @@ export function buildKnowledgeIndexManagedSection(options: { "## Part Notes", "", ...(partNotes.length > 0 - ? partNotes.map((part) => `- [[${part.notePath}|${part.name}]] - ${part.category ?? "unclassified"}, ${formatMetricCount(part.triangleCount, "triangle")}`) + ? partNotes.map((part) => { + const match = part.registeredMatches?.[0]; + const matchText = match ? `, matches ${match.sourcePartName} (${Math.round(match.confidence * 100)}%)` : ""; + return `- [[${part.notePath}|${part.name}]] - ${part.category ?? "unclassified"}, ${formatMetricCount(part.triangleCount, "triangle")}${matchText}`; + }) : ["- No part note drafts were created in this pass."]), "", "## Evidence Images", @@ -1034,12 +1214,14 @@ export async function generateKnowledgeNote( const knowledgeIndexPath = `${reportFolder}/${baseName} Index.md`; const evidence = options.preview?.getModelEvidence?.() ?? null; const snapshot = await captureEvidenceSnapshot(app, options.preview, state.settings.previewFolder, baseName); + const registeredParts = await collectRegisteredPartsFromProfiles(app, state.modelAssetProfiles, path); const analysis = buildLocalAnalysisResult({ modelPath: path, profile, preview, evidence, previewImages: snapshot.paths, + registeredParts, }); if (snapshot.warning) { analysis.warnings = [...analysis.warnings, snapshot.warning]; @@ -1126,13 +1308,14 @@ export async function generateKnowledgeNote( if (!outputFile) return; const currentProfiles = ps.store.getState().modelAssetProfiles; - const existingProfile = normalizeModelAssetProfile(currentProfiles[path]); + const existingProfile = normalizeModelAssetProfile(currentProfiles[path], path); ps.store.setState({ modelAssetProfiles: { ...currentProfiles, [path]: { ...existingProfile, analysisVersion: LOCAL_ANALYSIS_VERSION, + registeredParts: analysis.parts, reportNotePath: outputFile.path, analysisSidecarPath, knowledgeIndexPath: analysis.knowledgeIndexPath, @@ -1140,6 +1323,17 @@ export async function generateKnowledgeNote( updatedAt: new Date().toISOString(), }, }, + lastKnowledgeGeneration: { + modelPath: path, + reportNotePath: outputFile.path, + analysisSidecarPath, + knowledgeIndexPath: analysis.knowledgeIndexPath, + partNoteCount: analysis.partNotePaths?.length ?? 0, + previewImageCount: analysis.previewImages.length, + generatedAt: new Date().toISOString(), + status: "success", + warningCount: analysis.warnings.length, + }, }); await app.workspace.getLeaf(true).openFile(outputFile, { active: true }); new Notice(`Knowledge note updated: ${outputFile.path}`); diff --git a/styles.css b/styles.css index 8443e89..6696319 100644 --- a/styles.css +++ b/styles.css @@ -635,6 +635,98 @@ body { gap: 4px; } +.ai3d-direct-workbench-registered { + gap: 6px; +} + +.ai3d-direct-workbench-registered-body { + min-width: 0; +} + +.ai3d-direct-workbench-empty { + color: var(--text-muted); + line-height: 1.35; +} + +.ai3d-direct-workbench-match-list { + display: flex; + flex-direction: column; + gap: 6px; +} + +.ai3d-direct-workbench-match { + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + gap: 8px; + align-items: center; + min-width: 0; + padding: 6px; + border: 1px solid var(--background-modifier-border); + border-radius: var(--radius-s); + background: var(--background-secondary); +} + +.ai3d-direct-workbench-match-main, +.ai3d-direct-workbench-match-side { + min-width: 0; +} + +.ai3d-direct-workbench-match-main { + display: flex; + flex-direction: column; + gap: 2px; +} + +.ai3d-direct-workbench-match-side { + display: flex; + align-items: center; + gap: 6px; +} + +.ai3d-direct-workbench-match-title, +.ai3d-direct-workbench-match-source, +.ai3d-direct-workbench-match-model, +.ai3d-direct-workbench-match-target, +.ai3d-direct-workbench-match-reasons { + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.ai3d-direct-workbench-match-title { + color: var(--text-normal); + font-weight: 600; +} + +.ai3d-direct-workbench-match-source { + color: var(--text-muted); +} + +.ai3d-direct-workbench-match-model { + color: var(--text-faint); +} + +.ai3d-direct-workbench-match-target { + color: var(--text-faint); + font-size: var(--font-ui-smaller); +} + +.ai3d-direct-workbench-match-reasons { + color: var(--text-faint); +} + +.ai3d-direct-workbench-match-score { + min-width: 34px; + color: var(--text-accent); + font-weight: 700; + text-align: right; +} + +.ai3d-direct-workbench-match-open { + min-width: 44px; +} + @media (max-width: 760px) { .ai3d-direct-workbench-panel { grid-template-columns: 1fr; @@ -643,6 +735,14 @@ body { .ai3d-direct-workbench-controls { gap: 8px; } + + .ai3d-direct-workbench-match { + grid-template-columns: 1fr; + } + + .ai3d-direct-workbench-match-side { + justify-content: space-between; + } } /* --- Responsive: Narrow Sidebar --- */ diff --git a/versions.json b/versions.json index e44a23d..5d80ff8 100644 --- a/versions.json +++ b/versions.json @@ -1 +1 @@ -{"0.0.1":"1.5.0","0.0.2":"1.5.0","0.0.3":"1.5.0","0.0.4":"1.5.0","0.0.5-beta.0":"1.5.0","0.1.1":"1.5.0","0.1.2":"1.5.0","0.1.4":"1.5.0","0.1.5":"1.5.0","0.1.6":"1.5.0","0.1.7":"1.5.0","0.1.8":"1.5.0","0.1.9":"1.5.0","0.2.0":"1.5.0","0.2.1":"1.5.0","0.2.2":"1.5.0","0.2.3":"1.5.0","0.2.4":"1.5.0","0.2.5":"1.5.0","0.3.0":"1.5.0","0.3.1":"1.5.0","0.4.0":"1.5.0"} +{"0.0.1":"1.5.0","0.0.2":"1.5.0","0.0.3":"1.5.0","0.0.4":"1.5.0","0.0.5-beta.0":"1.5.0","0.1.1":"1.5.0","0.1.2":"1.5.0","0.1.4":"1.5.0","0.1.5":"1.5.0","0.1.6":"1.5.0","0.1.7":"1.5.0","0.1.8":"1.5.0","0.1.9":"1.5.0","0.2.0":"1.5.0","0.2.1":"1.5.0","0.2.2":"1.5.0","0.2.3":"1.5.0","0.2.4":"1.5.0","0.2.5":"1.5.0","0.3.0":"1.5.0","0.3.1":"1.5.0","0.4.0":"1.5.0","0.4.3":"1.5.0"}